资源描述:
《算术表达式求值演示》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、算术表达式求值演示.cpp#include#include#include#include#include#include"charstack.h"#include"floatstack.h"charOPSET[10]={'+','-','*','/','(',')','#','^','~','='};//运算符charPrior[10][10]={{'>','>','<','<','<','>','>','<',
2、'<','>'},{'>','>','<','<','<','>','>','<','<','>'},{'>','>','>','>','<','>','>','<','<','>'},{'>','>','>','>','<','>','>','<','<','>'},{'<','<','<','<','<','=','','<','<','<'},{'>','>','>','>','','>','>','>','>','>'},{'<','<','<','<','<','','=','<','<','<
3、'},{'>','>','>','>','<','>','>','>','<','>'},{'>','>','>','>','<','>','>','>','>','>'},{'<','<','<','<','<','>','>','<','<','>'}};//优先关系StackCharOPTR;//运算符栈StackFloatOPND;//运算数栈voidprint(){printf("********************************************************
4、********************");printf("步骤tOPTR栈tOPND栈tt输入字符主要操作");}//运算floatOperate(floata,chartheta,floatb){floatd=1;switch(theta){case'+':return(a+b);case'-':return(a-b);case'*':return(a*b);case'/':{if(b==0){printf("ERROR!");return0;}return(a/b)
5、;}case'^':while(b--)d=d*a;return(d);case'~':return(0-b);default:return(0);}}//判断输入字符是否是运算符intIn(charTest,char*TestOp){for(inti=0;i<10;i++)if(Test==TestOp[i])return(1);return(0);}//比较运算符之间的关系charPrecede(chara,charb){inti,j;for(i=0;i<9;i++)if(a==OPSET[i])br
6、eak;for(j=0;j<9;j++)if(b==OPSET[j])break;return(Prior[i][j]);}//输出OPTR栈内数据voidprintOPTR(StackCharOPTR){StackCharTOPTR;InitStack(TOPTR);charp;intn=5;while(Pop(OPTR,p)){n--;printf("%3c",p);Push(TOPTR,p);}while(07、p);}}//输出OPND栈内数据voidprintOPND(StackFloatOPND){StackFloatTOPND;InitStack(TOPND);floatq;intn=4;while(Pop(OPND,q)){n--;printf("%2.2f",q);Push(TOPND,q);}while(08、("t%2.2f",c);printf("tPush(OPND,'%2.2f')",c);}//输出每步OPND栈和OPTR栈的内容voidStep(StackCharOPTR,StackFloatOPND,intn){printf("%2d:t",n);printOPTR(OPTR);printOPND(OPND);}//算术表达式运算voidEvaluateExpression(charExpression[81