即如果设一个四则运算表达式的形式为S,那么它一定是一个以等号结尾的运算式,即S->exp=,->是推导符号.
运算式exp又可以继续推导成
exp->exp+term|exp-term|term
exp表示加减运算,term表示乘除运算.这个推导式反映了乘除的优先级比加减高.
即要先计算乘除式的结果,再来加减.
term可以推导如下:
term->term*factor|term/factor|factor
factor->num|(E)
factor是数字或者一个被括号括住的运算式,表示最高优先级.
数字本身是不带运算的,是原子性的,肯定是最高优先级.
括号是被规定了优先计算.
这个程序的代码就是按照上面的推导式,用递归方式来分析运算式的.
1、打开visual C++ 6.0-文件-新建-文件-C++ Source File。
2、输入预处理命令和主函数:#include /*函数头:输入输出头文件*/,void main()/*空类型:主函数*/。
3、定义变量:int a,b,d; /*定义变量的数据类型为整型*/,char c;/*定义变量的数据类型为字符型*/。
4、输入四则运算式:printf(输入如“3*4”或“5+2”的四则运算式:);/*输出文字提示*/scanf(%d%c%d,&a,&c,&b);/*输入四则运算式*/。
5、判断运算符号:switch(c) /*判断运算符号*/{case'+':d=a+bbreak;/*进行加法6、运算*/case'-':d=a-bbreak;/*进行减法运算*/case'*':d=a*bbreak;/*进行乘法运算*/case'/':d=a/bbreak; /*进行除法运算*/}。
7、输出结果:printf(%d%c%d=%d\n,a,c,b,d);/*输出结果*/。