资源描述:
《c语言之逆波兰表达式完整代码(附算法)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、C语言课程设计之逆波兰表达式//逆波兰表达式(后缀表达式)reversepolishnotation//程序实现的功能是将中缀表达式转变为后缀表达式,再求出其值//主要运用的知识点有:isdigit函数,pow函数,system("cls")函数,堆栈,格式的强制转换#include#include#include#includevoidshift(charnotation[]);//中缀表达式转换为后缀表达式的转换函数float
2、calculate(floata[][2],intk);//计算后缀表达式intjudge(charnotation[]);//判断输入的中缀表达式是否符合要求intgrade(chara);//返回运算符的等级voiddisplay(floata[][2],intk);//在屏幕上显示后缀表达式//主函数voidmain(){charnotation[100];charchoice;do{printf("请输入正确的中缀表达式:");printf("例如:2*3+4/3-(2+1)");sc
3、anf("%s",¬ation);if(judge(notation)){shift(notation);}elseprintf("你的表达式有错误,请仔细检查!");fflush(stdin);printf("你是否需要继续计算(是输入Y/y,否输入其他任意键)");scanf("%c",&choice);getchar();system("cls");}while(choice=='Y'
4、
5、choice=='y');printf("程序结束,谢谢使用!");}//判定函数
6、intjudge(charnotation[]){inti,m,num=1,p1=0,p2=0;for(i=0;notation[i]!=' ';i++)//排除表达式外的字符{if(notation[i]!='('&¬ation[i]!=')'&¬ation[i]!='+'&¬ation[i]!='-'&¬ation[i]!='*'&¬ation[i]!='/'&&!isdigit(notation[i])&¬ation[i]!='.'){num=0;retur
7、nnum;}}if(notation[0]=='*'
8、
9、notation[0]=='/'
10、
11、notation[0]==')'
12、
13、notation[0]=='.')//排除第一个字符为*,/,),.{num=0;returnnum;}for(i=0;notation[i]!=' ';i++)//排除'+','-','*','/','.'之间的连续出现以及'+','-','*','/','.'后面直接加')'{if(notation[i]!='('&¬ation[i]!=')'&&!isdigit
14、(notation[i])){if(notation[i+1]!='('&&!isdigit(notation[i+1])){num=0;returnnum;}}if(notation[i]=='('&&(notation[i+1]==')'
15、
16、notation[i+1]=='.'
17、
18、notation[i+1]=='*'
19、
20、notation[i+1]=='/')){//排除'('和')','.','*','/'一起连用num=0;returnnum;}if(notation[i]==')'&&(not
21、ation[i+1]=='('
22、
23、notation[i+1]=='.'))//排除')'和'(','.'一起连用{num=0;returnnum;}}for(i=0;notation[i]!=' ';i++)//小数位不得超过4位{if(notation[i]=='.'&¬ation[i+1]!=' '&¬ation[i+2]!=' '&¬ation[i+3]!=' '&¬ation[i+4]!=' '&¬ation[i+5]!=' '){if(isdigit
24、(notation[i+1])&&isdigit(notation[i+2])&&isdigit(notation[i+3])&&isdigit(notation[i+4])&&isdigit(notation[i+5])){num=0;returnnum;}}}for(i=0;notation[i]!=' ';i++)//排除一个小数中有两个小数点的情况{if(notation[i]=='.'){i++;while(isdigit(notation[