这个用C语言写的计算器的思路是什么?

来源:百度知道 编辑:UC知道 时间:2024/05/25 08:13:06
这个用C语言写的计算器的整体思路是什么?
小弟是菜鸟
初学还有好多看不懂
有高手能讲解一下吗?谢谢
还有各个功能模块分析也写下

#include<stdio.h>
#include<ctype.h>
#include<stdlib.h>
char token[61]; /*存放表达式字符串的数组*/
int n=0;
void error(void) /*报告错误函数*/
{
printf("ERROR!\n");
exit(1);
}
void match(char expected) /*检查字符匹配的函数*/
{
if(token[n]==expected)
token[++n]=getchar();
else error();
}
double term(void); /*计算乘除的函数*/
double factor(void); /*处理括号和数字的函数*/
double exp(void) /*计算加减的函数*/
{
double temp=term();
while((token[n]=='+')||(token[n]=='-'))
switch(token[n])
{
case'+':match('+');
temp+=term();
break;
case'-':match('-');
temp-=term();
break;
}
return temp;
}
double term(void)
{
double div;
double temp=factor();
while((t

对初学编程者来说,这个程序的原理确实难了点,因为它用到了编译原理的知识.
即如果设一个四则运算表达式的形式为S,那么它一定是一个以等号结尾的运算式,即S->exp=,->是推导符号.

运算式exp又可以继续推导成
exp->exp+term|exp-term|term
exp表示加减运算,term表示乘除运算.这个推导式反映了乘除的优先级比加减高.
即要先计算乘除式的结果,再来加减.

term可以推导如下:
term->term*factor|term/factor|factor
factor->num|(E)
factor是数字或者一个被括号括住的运算式,表示最高优先级.
数字本身是不带运算的,是原子性的,肯定是最高优先级.
括号是被规定了优先计算.

这个程序的代码就是按照上面的推导式,用递归方式来分析运算式的.

大概应该是递归吧,有的是减括号的,扫一遍,再扫一遍,一遍一遍的去除。。。这样,你自己写个式子,用另一张纸扣个洞,你也一遍一遍的扫,你就知道他的工作原理了