已阅读5页,还剩6页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
数据结构课程设计报告算术表达式求值系统学 号: 姓 名: 班 级: 指导教师: 成 绩: 完成时间: 2011.01.02 一、 设计题目描述和要求1. 问题:现在的计算器只能对简单的数进行运算,对复杂的多项表达式不能运算2. 解决方案:设计一个表达式求值系统3. 要求:以字符序列的形式从终端输入语法正确的、不含变量的整数表达式。利用下表给出的算符优先关系,实现对算术四则混合运算表达式的求值。 算术四则运算的规则: a. 从左算到右 b. 先乘除,后加减 c. 先括号内,后括号外根据上述三条运算规则,在运算的每一步中,对任意相继出现的算符1和2 ,都要比较优先权关系,它们优先关系如下表所示。二、 系统分析与概要设计根据问题描述和要求,系统要求能够正确求出算术表达式的值。在进行算术表达式求值过程中,考虑到我们输入的是中缀表达式,采用后缀表达式比较容易计算,因此先将中缀表达式转换成后缀表达式。程序应该具有:“将算术表达式转化为后缀表达式”、“利用后缀表达式求值”等基本模块。由于有优先级的问题,根据优先级不同的运算符运算的次序是不同的,因此更具其优先级的大小抽象的将其定义为不同的大小。三、 详细设计和编码1. 数据类型定义表达式求值中运算符对应优先级的定义structchar ch;int pri;lpri7=,0,(,1,*,5,/,5,+,3,-,3,),6,rpri7=,0,(,6,*,4,/,4,+,2,-,2,),1;/运算符优先级的定义运算符的存储structchar datamaxsize;int top;op;/用栈存储运算符2.各模块算法描述 (1)计算栈顶运算符对应的数字i+结束return lprii.prilprii.ch=opi7 ?int i=0;输入:op开始nyn y(2)判断优先级return 0;return -1;结束return 1;leftpri(op1)=0&*exp=0&*postexp=9?d=0c=b/a;st.top+;st.datast.top=c;a!=0?*postexp=/?a=st.datast.top; st.top-;b=st.datast.top;st.top-;c=ba;st.top+;st.datast.top=c; break;a=st.datast.top;st.top-;b=st.datast.top;st.top-;c=a*b;st.top+;st.datast.top=c;break;switch(*postexp)a=st.datast.top;st.top-;b=st.datast.top;st.top-;a=st.datast.top; st.top-;b=st.datast.top;st.top-;c=a+b;st.top+;st.datast.top=c; break;*postexp=0?*postexp=*?*postexp=-?*postexp=+?(4)后缀表达式求值ynynynynynynyn返回st.datast.top结束postexp+st.top+;st.datast.top=d; break;输出除零错误退出(5)主函数输入:表达式expchar exp20;char postexp;开始将中缀表达式exp转换为后缀表达式postexp输出:中缀表达式exp后缀表达式postexp表达式值compvalue(postexp)结束四、 调试分析写程序容易调程序难,调试要求:不仅要有很好的阅读程序的能力,更要有理解,分析和纠错能力。这次在调试过程中发现就是偶尔能运行成功,偶尔不能,只要不用加减就能成功,一旦用加减就运行不了。最后发现原来加与减弄反了。五、 测试结果 进入多项式求值系统请输入表达式:4+5*6-2中缀表达式:4+5*6-2后缀表达式:4#5#6#*+2#-表达式的值:32q键退出,其它键继续请选择:h 进入多项式求值系统请输入表达式:(56-20)/(6-2)-5中缀表达式:(56-20)/(6-2)-5后缀表达式:56#20#-6#2#-/5#-表达式的值:4q键退出,其它键继续请选择:qpress any key to continue六、 小结利用表达式求值的过程中思路是:输入的是中缀表达式,为了便于求值,先将中缀表达式转换成后缀表达式,再利用后缀表达式求值。在转换的过程中,考到了优先级,因此要对运算符号设定对应的值,就算是虚拟值吧。在编程的过程中,要细心,耐心,遇到问题不要急。七、 附录#include#include#include#define maxsize 30struct/设定运算符优先级char ch;int pri;lpri= =,0,(,1,*,5,/,5,+,3,-,3,),6,rpri= =,0,(,6,*,4,/,4,+,2,-,2,),1;int leftpri(char op)/求左运算符op的优先级for(int i=0;i7;i+)if(lprii.ch=op) return lprii.pri;int rightpri(char op)/求右运算符op的优先级for(int i=0;i7;i+)if(rprii.ch=op) return rprii.pri;int inop(char ch)/判断ch是否为运算符if(ch=(|ch=)|ch=+|ch=-|ch=*|ch=/)return 1;else return 0;int precede(char op1,char op2)/op1和op2运算符优先级的比较结果if(leftpri(op1)=rightpri(op2)return 0;else if(leftpri(op1)=0&*exp=0&*postexp=9)d=d*10 + *postexp - 0;postexp+;top+;stop=d;postexp+;/继续处理其他的字符returnstop;void main()char ch=a;char exp20;while(ch!=q&ch!=q)coutttt进入表达式求值系统endl;coutex
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年世界地球日环保知识答题考试题库(含答案)
- 数控车间安全试题及答案
- 钻井液房管理制度(3篇)
- 组培无菌室管理制度(3篇)
- 课时第四单元《花钟》教案(2025-2026学年)
- 糖尿病研究进展和防治教案
- 集合八大题型高考数学一轮复习讲练测新教材新高考教案
- 九年级《范进中举》教学文稿教案
- 高考生物一轮复习第八单元人体的内环境稳态苏教版教案
- 六年级数学下教学计划教案
- 超长距离顶管非开挖施工方案
- 英语教师素养大赛笔试题及答案解析(2025年版)
- 10.1国家利益高于一切 课件 2025-2026学年统编版道德与法治 八年级上册
- 2025天津滨海传媒发展有限公司招聘13人考试笔试备考试题及答案解析
- 2025年安康旬阳市人民医院招聘(15人)笔试考试参考题库及答案解析
- 2025年中国浙江省公安民警心理测验真题及答案
- 美食嘉年华策划方案
- 广东定额套价培训
- 化疗药物配置操作规范
- (2025版)低位前切除术后肠道功能障碍诊疗规范专家共识解读
- 道路交通安全法题库选择及答案解析
评论
0/150
提交评论