《表达式求值源代码》由会员分享,可在线阅读,更多相关《表达式求值源代码(8页珍藏版)》请在金锄头文库上搜索。
1、#include #include #include #include #include using namespace std;char Precede(char a, char b) /判断运算符优先级int i, j;char Table88 = ,+,-,*,/,(,),=,+,-,*,/,(, ,=, num_stack; /数字栈stack oper_stack; /运算符栈oper_stack.push(=); /将等号入栈到运算符栈while(si!= | oper_stack.top()!=) /对表达式 a 进行计算if(si=0 & si:theta = oper_sta
2、ck.top(); /从栈中弹出一个运算符进行计算oper_stack.pop();b = num_stack.top(); /弹出两个数字,注意顺序,先弹出的数是第二个操作数num_stack.pop();a = num_stack.top();num_stack.pop();if ( Calcu_temp(a, theta, b, r) ) /计算并判断是否有除数等于 0 的情况num_stack.push(r); /若正常,则将结果压入栈中elsereturn false; /出现除数为 0 的情况,返回错误信息break; result = num_stack.top(); /最后数字
3、栈中的数即为表达式的最终结果return true;bool Check(char s) /检查表达式括号是否匹配int flag=0, i;for(i=0; si!=0; i+) if(si=()flag+;if(si=)flag-;if(flag)return false;elsereturn true;int main() int i, j;char s1210, s2210;double result;printf( 数据结构实训-表达式求值:n);printf(编程人员:桂林电子科技大学信息科技学院:n);printf( 1151220114 章贵萍n);printf(请输入表达式:
4、n);while(gets(s1)!=NULL) /输入表达式if(strlen(s1)=1 & s10=0)break;for(i=0,j=0; s1i!=0; i+) /将表达式转换为规格化的表达式,并在末尾加上“=” ,保存在 s2 中if(s1i= )continue;s2j+ = s1i;s2j+ = =;s2j = 0;if(Check(s2) /检查括号是否匹配if(Calculate(s2, result) /计算并检查表达式中是否出现除数为 0 的情况printf(%lfn,result);elseprintf(被除数为零,该表达式无效!n); elseprintf(该表达式括号不匹配!n);return 0;