




已阅读5页,还剩11页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
宜春学院数学与计算机科学学院课 程 名 称: 数据结构 课 程 代 码: 题 目: 表达式求值 年级/专业/班: 12嵌入班 学 生 姓 名: 李诗蒙、许鹏晖、胡鱼帅 学 号: 1231308104、1231308121 、12313081 指 导 教 师: 易战军 开 题 时 间: 2013 年 12 月 16 日完 成 时 间: 2013 年 12 月 26 日第- 1 -页目 录摘 要1一、引 言1二、设计目的与任务1三、设计方案2四、结 论10五、致 谢12六、参考文献12摘 要关键词:表达式求值实现表达式求值的功能,可以小数整数混合运算,如果表达式输入错误要提示错误的原因,并且正确求出表达式的值。一、引 言 程序可以实现,输入表达式的字符串,以“=”表示结束,计算并输入表达式的值,操作数可以是整数或小数,操作符有“+”,“-”,“*”,“/”,“(”,“)”的值。2、 设计目的与任务实验目的:掌握栈的工作原理实验任务:1、实现()、+、-、*、/等运算;2、实现小数和整数混合运算;3、优先级的处理;4、能判断算术表达式是否正确(除数为0,括号配对问题);5、正确计算出表达式的结果,错误的表达式说明原第14页3、 设计方案程序框图如图所示:开始输入中缀表达式中缀表达式转换为后缀表达式表达式求值输出表达式的值结束首先输入一个字符串,对于这些字符串,我们要同过一些函数对其识别,要把我们认为的数字和运算符分开来,函数实现如下:int isdigit(string s)string a9=#,(,),%,+,-,*,/,=;for(int i=0;i9;i+)if(i=8&ai!=s)return 1;if(ai=s)return 0;elsecontinue;void strtok_f(string st,string *ss,int &n)string s=;for(int j=0;jst.size();j+)ssj=;for(int i=0;ist.size();i+)s=s+sti;if(i=0&!isdigit(s)ssn=ssn+sti;n+;elseif(isdigit(s)ssn=ssn+s;string q=;q=q+sti+1;if(!isdigit(q)n+;elsessn=ssn+sti;n+;s=;以上是将我们认为的数字和运算符分开。然后我们把我们认为的数字进行处理,因为在电脑里这些还是字符。处理的函数如下:int check_point(string s)for(int i=0;is.size();i+)if(i=s.size()-1&si!=.)return -1;if(si=.)return i;elsecontinue;string double_string(double a)string st1=,st2=.,st3=;int b=int(a);double c=a-b;if(c=0)st3=0;while(b)int x=b%10;st1=char(x+48)+st1;b=b/10;while(c!=0)int x=int(c/0.1);st3=st3+char(x+48);c=c/0.1-x;return st1+st2+st3;void get_two_string(string s,string &s1,string &s2,int n)if(n=-1)s1=s;s2=0;elsefor(int i=0;in;i+)s1=s1+si;for(int j=n+1;js.size();j+)s2=s2+sj;double string_double_target(string s)int i=0,len=s.size();double n=0;while(ist;string *ss=new stringst.size();strtok_f(st,ss,nn);int r=0;while(rnn)ch=ssr;while(!StackEmpty(OPTR)&ch!=#)if(isdigit(ch)an=ch;n+;break;elsech1=GetTop(OPTR);if(isp(ch1)icp(ch)op=popLstack(OPTR);an=op;n+;elseop=popLstack(OPTR);if(op=()break; r+;最后对后缀表达式进行计算得到表达式的值,函数实现如下:double reasault(string *a,int x)LinkStack port=new Linknode;InitStack(port);string Right,Left,Target;double left,right,target;for(int i=0;ix-1;i+)if(isdigit(ai)pushLstack(port,ai);elseRight=popLstack(port);right=string_double(Right);Left=popLstack(port);left=string_double(Left);if(left = 0)printf(除数为0,不能运算);exit(0);switch(ai0)case +:target=left+right;Target=double_string(target);pushLstack(port,Target);break;case -:target=left-right;Target=double_string(target);pushLstack(port,Target);break;case *:target=left*right;Target=double_string(target);pushLstack(port,Target);break;case /:target=left/right;Target=double_string(target);pushLstack(port,Target);break;case #:return target;return target;对于判断表达式正确与否我们通过判断后缀表达式最后能否在计算来判断它的对错,而除数为零的问题我们在对两个数进行计算前对除数进行判断,如是零就不再计算。而对于带小数的数,我们在进行字符串处理时就处理好了。运算结果如下图:1、正确表达式:2、表达式为零报错:3、表达式不正确报错:4、表达式中不是运算符报错:5、程序不完善出错:四、结 论 这次课程设计让我更加了解大一学到的C和这个学期学到的数据结构。课设题目要求不仅要求对课本知识有较深刻的了解,同时要求程序设计者有较强的思维和动手能力和更加了解编程思想和编程技巧。这次课程设计让我有一个深刻的体会,那就是细节决定成败,编程最需要的是严谨,如何的严谨都不过分,往往检查了半天发现错误发生在某个括号,分号,引号,或者数据类型上。就像我在写EvalExpr()函数时,忘了指针的地址符值不用加*号,这一点小小的错误也耽误了我几十分钟,所以说细节很重要。程序设计时,也不要怕遇到错误,在实际操作过程中犯的一些错误还会有意外的收获,感觉课程设计很有意思。在具体操作中这学期所学的数据结构的理论知识得到巩固,达到课程设计的基本目的,也发现自己的不足之出,在以后的上机中应更加注意,同时体会到C语言具有的语句简洁,使用灵活,执行效率高等特点。发现上机的重要作用,特别算术表达式有了深刻的理解。这个程序是我们3个人完成的,同时我认为我们的工作是一个团队的工作,团队需要个人,个人也离不开团队,必须发扬团结协作的精神。某个人的离群都可能导致导致整项工作的失败。实习中只有一个人知道原理是远远不够的,必须让每个人都知道,否则一个人的错误,就有可能导致整个工作失败。团结协作是我们成功的一项非常重要的保证。而这次课程设计也正好锻炼我们这一点,这也是非常宝贵的五、
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 新药研发新方向:2025年靶点发现与验证技术临床转化策略研究
- 5G时代2025年成人教育终身学习体系构建与智能平台运营前景报告
- 城市轨道交通智慧运维系统在2025年的运维人员技能提升报告
- 2025年事业单位工勤技能-河南-河南房管员三级(高级工)历年参考题库含答案解析
- 2025年事业单位工勤技能-河南-河南仓库管理员一级(高级技师)历年参考题库含答案解析
- 2025年事业单位工勤技能-河北-河北机械热加工三级(高级工)历年参考题库含答案解析(5套)
- 2025年事业单位工勤技能-江苏-江苏护理员三级(高级工)历年参考题库含答案解析
- 2025年事业单位工勤技能-江苏-江苏保安员三级(高级工)历年参考题库含答案解析(5套)
- 2025年事业单位工勤技能-广西-广西汽车修理工(技师/高级技师)历年参考题库含答案解析
- 2025年事业单位工勤技能-广西-广西无损探伤工一级(高级技师)历年参考题库典型考点含答案解析
- 建筑模型手工课件
- 2024年赤壁市市属事业单位考试真题
- 创客空间运营方案
- 中国加速康复外科临床实践指南2021
- 向量数量积说课课件-2023-2024学年高一下学期数学人教A版(2019)必修第二册
- 《新能源材料及器件组装》课程教学大纲
- 统编版(2025)七年级下册道德与法治1.3《学会自我保护》教案
- 孕产期保健知识
- 目标管理Smart原则培训课件
- GB/T 44927-2024知识管理体系要求
- 《红楼梦》(解析版)
评论
0/150
提交评论