




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、数据结构实训总结报告题 目:学生姓名: 学生学号: 专业班级: 指导老师:表达式求值目录1. 课题分析1. 1需求分析1. 2设计要求2总体设计2. 1主程序的流程3详细设计(步骤及代码实现)3. 1判断运算符优先级3. 2中缀表达式转后缀表达式3. 3后缀表达式求值4. 测试结果5. 心得体会6. 参考文献1课题分析11需求分析(1) 栈“后进先出”的特点。并利用后缀表达式求值。(2) 屮缀表达式转后缀表达式,1. 2设计要求(1) 运算对象存在多位整数。(2) 实现表达式错误的报错。(3) 判断运算符优先级。(4) 中缀表达式转后缀表达式。2总体设计2. 1主程序的流程string2屮存放
2、转 化好的后缀表达后缀表达式结果的计 算i+输出运算结果3详细设计(步骤及代码实现)3. 1判断运算符优先级(乘除优先于加减)int sqstack:cmp(char ch)switch(ch)casecase l,: return 1;casecase 71: return 2; default: return 0;3. 2中缀表达式转后缀表达式(1) 首先置操作数栈为空栈,表达式起始符“#”为运算符栈的栈底元素;(2) 定义一个运算符栈,并输入一个中缀表达式(运算对象存在多位整数,运 算符为+、-、*、/、及括号),然后从中缀表达式中自左至右依次读入各个字符。(3) 在字符串si读取到的运
3、算对象直接输送到后缀表达式字符串s2,两相邻 操作数之间利用空格隔开。(4) 如果读入的是运算符,并且运算符栈为空,则将该运算符直接进栈;如果 栈不为空,则比较该运算符和栈顶运算符的优先级。若该运算符高于栈顶运算符的优先级,则将该运算符直接进栈;若该运算 符低于或等于栈顶运算符的优先级,则将栈中高于或等于该运算符优先级的元素 依次岀栈,然后再将该运算符进栈。出栈的运算符输入到s2中,利用空格隔开。(5) 如果读入的是开括号“(”,则直接进栈;如果读入的是闭括号“)”,则一 直出栈并输出到后缀表达式,知道遇到一个开括号“(”为止。开括号“(”和闭 括号“)”均不输岀到后缀表达式。(6) 重复34
4、5步,肓到中缀表达式结束,然后将栈中剩余的所有运算符依次出 栈。void sqstack:change(string &sl, string &s2)stack <char> s;s.push('#');int i = 0;while(i < sl.length()if(sli = t)s.push(sli+j); else= t)while( s.top() !='(')s2 += s.top(); s2 += * s.pop();s.pop(); i+;elseif( sli=屮 | sli = *- |sli =*! |
5、sli = 71)while( cmp(s.top() >= cmp(sli)s2 += s-top(); s2 + 二' s.pop(); s.push(sli);i+;elsewhileco' <= sli&&sli <= 9| |sli= s2 + 二 sli+;s2 + 二 * ;while(s.top() != #)s2 += s.top();s2 + 二 1 *;s.pop();3. 3后缀表达式求值(1)定义一个double型的运算数栈,将中缀表达式转换得到的后缀表达式字符 串自左向右依次读入。(2) 如果读入的是运算对象,则将该
6、运算对象串(下一个逗号分隔符前的部分 所构成的数字字符串)转换为对应的多位整数值,然后将该整数值(将自动类型 转换为double型)直接进入运算数栈。(3) 如果读入的是运算符,则立即从运算数栈中弹岀两个运算数,计算两个运 算数运算后的值(运算时先出栈的元素放在运算符后面,后出栈的元素放在运算 符前面),并将计算结果存回运算数栈。(4) 重复2、3步,直到后缀表达式结束,最后栈中保存的那个数即为该后缀表 达式的计算结果。double sqstack:value(string &s2)stack <double> s;double x,y;int i = 0;while(i
7、< s2.length()-l)if(s2i =1 *)i+;switch(s2i)caseif (s.size()>=2) x = s.top(); s.pop(); x += s.top(); s.pop(); i+; break; else return 0;caseif(s.size()>=2)x = s.top(); s.pop(); x =s.top()-x; s.pop(); i+; break; else return 0;caseif (s.size()>=2)x = s.top(); s.pop(); x *= s.top(); s.pop(); i
8、+; break; else return 0;caseif (s.size()>=2)x = s.top(); s.pop(); x = s.top()/x; s.pop(); i+; break;else return 0;default:x = 0;whileco' <= s2i&&s2i <= 9)x = x*10+s2i -'o'i+;if(s2i = 7)double k = 10.0;y = 0;i+;whileco' <= s2i&&s2i <= 9)y+= (s2i.'0
9、39;)/k);i+; k *= 10;x+= y; break;s.push(x);if( s.size()=l)return s.top();elsereturn 0;int main()string sl,s2;sqstack t;cout«"请输入中缀表达式:”;cin> >sl;s2="t.cha nge(sl,s2);if (t.value(s2)collt«"后缀表达式为 cout«s2«endl;coutvv”表达式的值为:n; cout«fixed«setprecisi on
10、 (2)«t.value(s2)«e ndl;elsecout«"a wrong input!"«endl;return 0;4测试结果12-3*5 3 5 * -00 cont inueo t yky 中达的an 入表式s r3表为为ke式达« 表为为ke 費值y 中达的an 入al式s nes 注普表pr:<2*5>/9 5 9 /78 continue5 心得体会通过这该程序的编写,我发现了学习上的挺多问题,尤其在遇到指针的问题 的时候,很茫然,以后在学习中要多注意指针的使用,以达到熟练掌握的程度, 平时的学习中一定要多写程序,多写一些才回把知识用得自然。这次实验中我熟 练掌握了栈的应用,并练习了串与数组的相关操作。其实大一就开始学习c语言,可是,当时学的时候就觉得语言好像是学会了, 可是一遇到编程的问题还是头大,总感觉没有什么思路,而这次作业,给自己一 个不得不动手操作的机会,在十一的这儿天中,复习了以前学过的c的基本知识, 然后一点一点的摸索,遇到了错误和同学一起讨论,有问题自己想办法解决,最 后程序调试出来的时候,会觉得真的很高兴。我知道,我们现在的水平还很差, 要想学习好这门课,在以后就要多动手操作,书上的例题或算法,最好都自己编 写程序实
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 企业核心机密保护合同模板
- 市场营销合作合同模板:品牌推广专用
- 数据外包服务合同转让合同
- 标准劳动合同解除样本
- 加盟连锁店经营合同样本
- 合同约定催款函格式专业版
- 建筑物拆除的施工安全管理考核试卷
- 机床制造中的人力资源管理策略考核试卷
- 农业科学中的农村居民收入与消费考核试卷
- 安全网络数据安全审计流程自动化考核试卷
- 绿色供应链管理培训
- 针刺伤的预防和处理
- MOOC 信号与系统-北京交通大学 中国大学慕课答案
- 《研学旅行课程设计》课件-研学课程主题设计
- 《旅游概论》课件-旅游业的发展趋势
- 2023年铁路工务安全规则正文
- 大单元视角下小学语文单篇课文的教学
- 《常见的地貌类型》课件
- 幼儿园小班春季传染病预防
- 当前银行系统反腐倡廉和案件情况及案件特点原因分析课件
- 2024年安徽淮北建投控股集团有限公司招聘笔试参考题库含答案解析
评论
0/150
提交评论