- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
算术表达式求值演示实验报告
实验报告题目:算术表达式求值演示 班级:网络工程2班 姓名:陈智鸣 学号:1225112005 完成日期:2013.10.24 一、需求分析 1.?问题描述:表达式计算是实现程序设计语言的基本问题之一,也是栈的应用的一个经典例子。设计一个程序演示用算符优先法对算术表达式求值的过程。?2.?基本要求:利用教科书表3.1给出的算符优先关系,实现对算术四则混合运算表达式的求值。?3.?测试数据:教科书例3-1的算术表达式3*(7-2)。二、概要设计(算法描述) 基本操作:??InitStack_f(S)?操作结果:构造一个空栈S。GetTop_f(S,e)初始条件:栈S已存在。?操作结果:用e返回S的栈顶元素。Push_f(S,ch)??初始条件:栈S已存在。?操作结果:插入元素ch为新的栈顶元素。Pop_f(S,e)??初始条件:栈S已存在。?操作结果:删除S的栈顶元素,并以e返回其值。?}ADT?SqStack_f? 三、详细设计 代码如下: #include iostream#include stackusing namespace std; int Operate(int x,char op,int y) //四则运算符的运算定义 { switch(op) { case+: return x+y; case-: return x-y; case*: return x*y; case/: return x/y; } }char Precede(char op1,char op2) //判断符号的优先级 { if(((op1==+||op1==-)(op2==+||op2==-||op2==)||op2==#))||((op1==*||op1==/)(op2==+||op2==-||op2==*||op2==/||op2==)||op2==#))) return ; if((op1==(op2==))||(op1==#op2==#)) return =; else return ; }void Tonumber(char c,stackint OPND) //转化为数字 { int number=0; if(((c-0)=0(c-0)=9)) { while(((c-0)=0(c-0)=9)) { number=number*10+(c-0); cinc; } OPND.push(number); } }int main(){ stackchar OPTR; stackint OPND;//设OPTR和OPND分别为运算符栈和运算数栈 OPTR.push(#); //出栈时的结尾判断 char c,op1,op2,op; int x,y,temp=1; cout输入表达式,以#结束:; cinc; while(c!=#||OPTR.top()!=#) { Tonumber(c,OPND); if(c!=+c!=-c!=*c!=/c!=(c!=)c!=#) { OPND.push(c); cinc; } else { op1=OPTR.top(); op2=c; switch(Precede(op1,op2)) { case : //栈顶元素优先级低 OPTR.push(c); cinc; break; case =: //脱括号并接受下一个字符 OPTR.pop(); cinc; break; case : op=OPTR.top(); //退栈并将运算结果入栈 OPTR.pop(); x=OPND.top(); OPND.pop(); y=OPND.top(); OPND.pop(); OPND.push(Operate(y,op,x)); int a=OPND.top(); break; } } } cout计算结果是:OPND.top()endl; return 0;} 四、调试分析 1、?在编程过程中,为了增加程序的实用性,将程序适用范围扩大到了实数型,并增加了连续输入功能;?2、?在编程过程中,为了增加程序的健壮性,在运算除法时,考虑到除数为“0”时的报错和及时退出;?3、?在调试过程中,最初一下子出来程序就出错,为了方便检查错误,故在主函数中增加了检查后缀表达式是否转换正确的函数,并在每一步计算都跟踪结果是否正确;?4、?从程序实验题的编制过程中容易看出,线性表的广泛应用,特别是顺序存储结构的栈的应用。本题中涉及两元素类型(字符型和浮点型)的栈,由于是面向过程的语言,故只能分别定义。 五、用户手册 本程序只对实数的加减乘除乘方运算进行求值,且只对“()”这种形式的括号进行识别,“{}”或“[]”都不予以识别,表达式输
您可能关注的文档
- 《Premiere视频制作》教学大纲.doc
- 《大学英语2》综合复习资料及答案.doc
- 上海大学中级阅读配套练习.docx
- 专升本中期选拔英语试题训练(十).doc
- 人教版英语选修八单元知识梳理.doc
- 六级词汇典型考题及精解.doc
- 初三名校摸底、月考、期中、期末考试首字母填空集锦.doc
- 前奏曲,赋格和快板,(Prelude,Fugue and Allegro,BWV 998);巴赫(John Sebastian Bach)古典吉他谱.doc
- 前奏曲第一号,Prelude No. 1;海特尔·维拉·罗伯斯(Heitor Villa-Lobos)(古典吉他曲谱).doc
- 国际商务信函范例.docx
最近下载
- L630-50动臂使用说明书.pdf VIP
- 24 T600-32U起重性能提升60m臂长(25m@25t).pdf VIP
- T8030-25U 国内标准版说明书-附着高度345m-(2017.10.9).pdf VIP
- XGT1750-80S塔吊说明书安装手册.pdf VIP
- 考试考场座位号模板(可打印).pdf VIP
- 电气设备故障处理实例及实践中创新方法的应用.pdf VIP
- 院感管理制度(3篇).docx
- 计算机网络第8版课件-第8章-互联网上的音频和视频服务.pptx VIP
- 沪教版(上海)六年级第一学期第二章分数单元测验 .docx VIP
- 2024年产品开发合作框架协议.doc VIP
原创力文档


文档评论(0)