《C语言实战105例》12例--简单的计算器

实现一个可计算不同优先级的四则运算的简单运算符。

采用递归算法来实现计算过程。首先将一个四则运算表达式分为几个不同级别的表达式进行计算,最后算出结果。

函数low()计算优先级最低的表达式,如:+-运算;函数mid()计算中等的表达式,如*/运算;high()计算优先级最高的表达式()。

在各个计算函数中,又递归的调用其他函数来计算。这种方法叫做递归下降法,就算从最复杂的部分开始,逐步细化,知道表达式可以计算为止。

-------------------------------------------------------------------------------------------------------------------------------------------------------------

谁能仔细解释一下这个c语言递归法四则运算的原理? #include <stdio.h> #incl_百度知道
https://zhidao.baidu.com/question/1431564324788337379.html

无论什么表达式都可以看成三部分,左表达式,运算符,右表达式,只要确定左右表达式的值,那么整个表达式的值都可以求出。
也就是先计算出左边的,然后计算出右边的,然后再运算,结果就出来了
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函数也是同样原理。

猜你喜欢

转载自blog.csdn.net/bellediao/article/details/83044407