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