逆波兰式的产生及计算.doc

逆波兰式的产生及计算.doc

ID:59390873

大小:82.00 KB

页数:7页

时间:2020-05-30

逆波兰式的产生及计算.doc_第1页
逆波兰式的产生及计算.doc_第2页
逆波兰式的产生及计算.doc_第3页
逆波兰式的产生及计算.doc_第4页
逆波兰式的产生及计算.doc_第5页
资源描述:

《逆波兰式的产生及计算.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、河南工业大学实验报告课程编译原理实验名称逆波兰式的产生及计算系别___河南工业大学信息科学与工程学院_专业班级___计科0905___实验日期2012年5月3日姓名___杨金锋____学号_2____实验指导教师___阎娟___一、实验目的和要求1.深入理解算符优先分析法2.掌握FirstVt和LastVt集合的求法有算符优先关系表的求法3.掌握利用算符优先分析法完成中缀表达式到逆波兰式的转化二、实验内容将非后缀式用来表示的算术表达式转换为用逆波兰式来表示的算术表达式,并计算用逆波兰式来表示的算术表达式的值。(1)逆波兰式的生成及计算程序,编制人:姓名,学号,班级(2)输入一以#结束

2、的中缀表达式(包括+—*/()数字#):在此位置输入符号串如(28+68)*2#(3)逆波兰式为:28&68+2*(4)逆波兰式28&68+2*计算结果为192三、实验步骤1、基于实验的内容,构造程序所需的模块2、根据已建构的模块,写出各个模块的相应程序代码3、在主函数中调用模块来完成所要得到的效果此程序主要包括两个运算函数和一个主函数:将算术表达式转化为后缀表达式:voidtrans(){/*将算术表达式转化为后缀表达式*/charstr[max];/*存储原算术表达式*/charstack[max];/*作为栈使用*/charch;intsum,i,j,t,top=0;print

3、f("*****************************************");printf("*输入一个求值的表达式,以#结束。*");printf("******************************************");printf("算数表达式:");i=0;/*获取用户输入的表达式*/do{i++;scanf("%c",&str[i]);}while(str[i]!='#'&&i!=max);sum=i;t=1;i=1;ch=str[i];i++;while(ch!='#'){switch(ch){case'(':/*判定为左括号

4、*/top++;stack[top]=ch;break;case')':/*判定为右括号*/while(stack[top]!='('){ex[t]=stack[top];top--;t++;}top--;break;case'+':/*判定为加减号*/case'-':while(top!=0&&stack[top]!='('){ex[t]=stack[top];top--;t++;}top++;stack[top]=ch;break;case'*':/*判定为乘除号*/case'/':while(stack[top]=='*'

5、

6、stack[top]=='/'){ex[t]=sta

7、ck[top];top--;t++;}top++;stack[top]=ch;break;case'':break;default:while(ch>='0'&&ch<='9'){/*判定为数字*/ex[t]=ch;t++;ch=str[i];i++;}i--;ex[t]='#';t++;}ch=str[i];i++;}while(top!=0){ex[t]=stack[top];t++;top--;}ex[t]='#';printf("t原来表达式:");for(j=1;j

8、;for(j=1;j

9、ak;case'*':stack[top-1]=stack[top-1]*stack[top];top--;break;case'/':if(stack[top]!=0)stack[top-1]=stack[top-1]/stack[top];else{printf("t除零错误!");exit(0);/*异常退出*/}top--;break;default:d=0;while(ch>='0'&&ch<='9'){d=10*d+ch-'0';/*

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。