无论什么表达式都可以看成三部分,左表达式,运算符,右表达式,只要确定左右表达式的值,那么整个表达式的值都可以求出。
也就是先计算出左边的,然后计算出右边的,然后再运算,结果就出来了
1.如果运算符为+-,那么就两边就按照先括号,再乘除来运算获得结果,然后+-运算即可。
2.如果运算符为*/,那么就两边就按照先括号来运算,然后*/运算即可。
3.上述两步中如果遇到括号,那么括号里面的表达式处理步骤和1,2一样,可以递归处理。
至此,问题全部得到解决。
流程如下:
先输入的为左表达式,如果是数字,接着输入运算符,然后返回,
如果是左括号,直接计算表达式,即第3步
然后遇到运算符,然后输入右表达式,右表达式运算和左表达式运算一样,
最后按照1或2来运算。
int exp( void )
{
int temp = term(); //获得左表达式的值
while(( token == '+' ) || ( token == '-' ))
switch( token ) {
case '+': match('+'); /*加法*/
temp += term();//获得右表达式的值,然后相加
break;
case '-': match('-');
temp -= term(); //获得右表达式的值,然后相减
break;
}
return temp;//返回整个表达式的值
}
term函数也是同样原理。
已经说的很明白了,看你的造化了。
exp调用term,term调用factor,factor调用exp...如果公式复杂就会出现这个循环调用,就是递归调用了。