欢迎来到天天文库
浏览记录
ID:57233373
大小:124.50 KB
页数:11页
时间:2020-08-07
《逆波兰式的产生与计算培训资料.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、逆波兰式的产生与计算精品文档计算机科学与技术系实验报告专业名称计算机科学与技术课程名称编译原理项目名称逆波兰式的产生与计算班级学号姓名同组人员无实验日期2016.12.21收集于网络,如有侵权请联系管理员删除精品文档一、实验目的与要求:(简述本次实验要求达到的目的,涉及到的相关知识点,实验的具体要求。)目的:1、将非后缀式用来表示的算术表达式转换为用逆波兰式来表示的算术表达式,并计算用逆波兰式来表示的算术表达式的值;2、掌握自底向上分析中算符优先分析法的基本原理; 3、掌握优先关系表的构造方法。要求:根据介绍的算
2、术表达式文法编制调试算符优先分析程序,以便对任意输入的简单算术表达式进行分析。将用中缀式表示的算术表达式转换为用逆波兰式(后缀式)表示的算术表达式,并计算用逆波兰式表示的算术表达式的值。程序输入一以#结束的符号串,如:2*(3+4)#。输出过程如下:(1)逆波兰式(后缀式)为:2#3#4#+*;(2)(2)计算结果:14。二、实验内容(根据本次实验项目的具体任务和要求,完成相关内容,可包括:实验目的、算法原理、实验仪器、设备选型及连线图、算法描述或流程图、源代码、实验运行步骤、关键技术分析、测试数据与实验结果、其
3、他)具体任务:输出的格式如下:(1)逆波兰式的生成及计算程序,编制人:姓名,学号,班级(2)输入一以#结束的中缀表达式(包括+—*/()数字#):在此位置输入符号串如(28+68)*2#收集于网络,如有侵权请联系管理员删除精品文档(3)逆波兰式为:28&68+2*(4)逆波兰式28&68+2*计算结果为192备注:(1)在生成的逆波兰式中如果两个数相连则用&分隔,如28和68,中间用&分隔;(2)在此位置输入符号串为用户自行输入的符号串。原理:逆波兰式是将平时我们正常写入的表达式变成后缀式表达式,将符号后入,括号
4、不入,逆波兰式根据符号对应的几目运算符,将输出几个操作数进行运算,因此将不需要括号来进行优先级。编写逆波兰式时,需要判别是数字还是符号,数字的话就将其入栈,符号的话就先入符号栈,再下一个符号来临入栈之前,将上一个入栈的符号入进存放操作数的数组,其中顺序必须依次来,不能乱,在符号入栈结束之后,符号栈中将还会剩有两个符号,开始和结束的,此时将这两个符号按顺序入栈即可,至此完成逆波兰式。流程图:代码:#include#include收集于网络,如有侵权请联系管理员删除精品文档#in
5、clude#definemax100charex[max];//ex[]数组用来存放逆波兰式voidtrans(){charstr[max];charstack[max];//存表达式的符号charch;intsum,i,j,t,top=0;printf("*请输入一个求值的表达式,以#结束:");printf("**********************************************************");printf("您的算数表达式为:");i=0;//进行
6、初始化,从键盘输入表达式do{i++;scanf("%c",&str[i]);//从键盘输入的字符装入字符数组str[]中}while(str[i]!='#'&&i!=max);//以#为结束sum=i;//i=输入字符的个数,sum=it=1;i=1;//i归1ch=str[i];//将数组的第一个字符给chi++;while(ch!='#')//当字符不为#时进入循环{switch(ch){case'('://字符为(时,收集于网络,如有侵权请联系管理员删除精品文档top++;//当字符为(时,将该字符入栈s
7、tack[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[to
8、p]=ch;break;case'*'://字符为*时,case'/'://字符为/时,while(stack[top]=='*'
9、
10、stack[top]=='/'){ex[t]=stack[top];top--;t++;}收集于网络,如有侵权请联系管理员删除精品文档top++;stack[top]=ch;break;case'':break;//字符为空格时,defau
此文档下载收益归作者所有