




已阅读5页,还剩13页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
数 据 结 构课程设计说明书题 目算术表达式求值学 号姓 名指导教师日 期2012.6目录第1章 需求分析4第2章 总体设计4第3章 抽象数据类型设计5第4章 详细设计64.1 工程视图64.2 类图视图64.3 函数的调用关系74.4 主程序流程图74.5 主要算法的流程图8第5章 测试9第6章 总结10附录:程序代码11课程名称数据结构课程设计设计题目算术表达式求值指导教师余金林时间2012.62012.7一、教学要求1. 掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力2. 初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能3. 提高综合运用所学的理论知识和方法独立分析和解决问题的能力4. 训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风二、设计资料及参数每个学生在教师提供的课程设计题目中任意选择一题,独立完成,题目选定后不可更换。算术表达式求值以字符串表示算术表达式,在此基础上借助栈完成对表达式的转换和求值操作。要求设计类(或类模板)来描述算术表达式及其操作,包含必要的构造函数和析构函数,以及其他能够完成如下功能的成员函数:v 输入算术表达式(中缀表示)v 中缀表达式转换为后缀表达式v 输出表达式v 对后缀表达式求值 并设计主函数测试该类。三、设计要求及成果1. 分析课程设计题目的要求2. 写出详细设计说明3. 编写程序代码,调试程序使其能正确运行4. 设计完成的软件要便于操作和使用5. 设计完成后提交课程设计报告四、进度安排资料查阅与讨论(1天)系统分析(2天)系统的开发与测试(5天)编写课程设计说明书和验收(2天)五、评分标准1. 根据平时上机考勤、表现和进度,教师将每天点名和检查2. 根据课程设计完成情况,必须有可运行的软件。3. 根据课程设计报告的质量,如有雷同,则所有雷同的所有人均判为不及格。4. 根据答辩的情况,应能够以清晰的思路和准确、简练的语言叙述自己的设计和回答教师的提问六、建议参考资料1数据结构 (C语言版)严蔚敏、吴伟民 主编 清华大学出版社 2004.112数据结构课程设计案例精编(用C/C+描述),李建学 等 编著,清华大学出版社 2007.23.数据结构:用面向对象方法与C+语言描述,殷人昆 主编,清华大学出版社 2007.6第1章 需求分析在计算机中,算术表达式由常量、变量、运算符和括号组成。由于不同的运算符具有不同的优先级,又要考虑括号,因此,算术表达式的求值不可能严格地从左到右进行。因而在程序设计时,借助栈实现。算法输入:一个算术表达式,由常量、变量、运算符和括号组成(以字符串形式输入)。为简化,规定操作数只能为正整数,操作符为+、-*、/。算法输出:表达式运算结果。算法要点:设置运算符栈和运算数栈辅助分析算符优先关系。在读入表达式的字符序列的同时,完成运算符和运算数的识别处理,以及相应运算。第2章 总体设计图2.1第3章 抽象数据类型定义ADT SqstackbasetopstacksizeSqStackPushGetTopPop 成员变量 成员函数图3.1ADT Sqstack数据对象:D=Ci/Cisqstack,i=1,2,n,n0数据关系:R=1 Ci-1,CiD,i=2,n基本操作:input(base,top,stacksize)初始条件:base,top是字符型数据;stacksize是整型数据操作结果:生成一个算术表达式Get base(&base,a)初始条件:若T存在操作结果:生成一个栈底元素 baseGet top(&top,b)初始条件:若T1存在操作结果:生成一个栈顶元素 topGet char(&char,c)初始条件:若c存在操作结果:脱括号并接收下一字符Get push(&push,d)初始条件:若d存在操作结果:将#压入运算符栈其中DPND为操作数栈,DPTR为运算符栈a,bOPND c,dDPTRADT Sqstack第4章 详细设计4.1 工程视图图4.14.2 类图视图图4.24.3 函数的调用关系主函数main() 调用cal()函数Return0图4.34.4 主程序流程图开始Int e=-1switchcase #: e=6case ): e=5case (: e=4;case /: e=3case *: e=2case -: e=1case +: e=0结束图4.44.5 主要算法的流程图开始提示用户输入用户输入判断输入格式正误判断符号判断优先级结束第5章 测试图5.1图5.2图5.3第6章 总结 这次课程设计让我更加了解大一学到的C和这个学期学到的数据结构。课设题目要求不仅要求对课本知识有较深刻的了解,同时要求程序设计者有较强的思维和动手能力和更加了解编程思想和编程技巧。 这次课程设计让我有一个深刻的体会,那就是细节决定成败,编程最需要的是严谨,如何的严谨都不过分,往往检查了半天发现错误发生在某个括号,分号,引号,或者数据类型上。 程序设计时,不要怕遇到错误,在实际操作过程中犯的一些错误还会有意外的收获,感觉课程设计很有意思。在具体操作中这学期所学的数据结构的理论知识得到巩固,达到课程设计的基本目的,也发现自己的不足之出,在以后的上机中应更加注意,发现上机的重要作用,特别对算术表达式有了深刻的理解。参考资料:1数据结构 (C语言版)严蔚敏、吴伟民 主编 清华大学出版社 2004.112数据结构课程设计案例精编(用C/C+描述),李建学 等 编著,清华大学出版社 2007.23.数据结构:用面向对象方法与C+语言描述,殷人昆 主编,清华大学出版社 2007.6附录:程序代码#include #include #include #include /*/类模版定义template class SqStack private:T *base;/ 栈底 T *top;/栈顶 int stacksize;/栈的大小public:/公有属性(公有成员)SqStack();/建立一个新栈Push(T e);/压入一个新数据GetTop();/取得最上面的数据Pop();/弹出最上面的数据;template SqStack :SqStack()/作用域限定运算符base = (T*)malloc(100*sizeof(T);/新建一个栈底空间if(!base)/如果没有这个空间exit (0);/分配内存失败top=base;/栈底被赋值为栈顶stacksize = 100;/栈的大小100template int SqStack :GetTop()/将栈模版转换为整形限定域GetTop()T e;/栈类型变量if(top=base)/栈顶等于栈底return 0;/返回栈空的情况e=*(top-1);/指向下一个栈顶return e;/返回栈 template int SqStack :Pop()/将栈模版转换为整形并且弹出最上面的数据T e;/栈类型变量if(top=base)/栈顶等于栈底return 0;/返回栈空的情况e=* -top;/弹出指向下一个栈顶return e;/返回栈template int SqStack :Push(T e)/将栈模版转换为整形并且出栈if(top-base=stacksize)/栈满的情况base=(T*)realloc(base,(stacksize+10)* sizeof(T);/追加空间10if(!base)/如果没有栈底 exit (0);/空间分配失败top=base+stacksize;/如果有栈底栈顶等于栈底加数据空间*top+=e;/栈顶等于ereturn 1;/返回状态1(出栈的证明)/*/基本函数定义int Isnum(char e)/判断是否是数字if(e=0&e=9)/如果E等于0或者E大于0小于9return 1;/返回状态1else/否则return 0;/返回状态0int Primary(char x)/判断是什么符号int e=-1;/把E初始化为-1switch (x)/switch语句,是一种多路判定语句case +: e=0;break;/如果输入满足条件,e等于0case -: e=1;break;case *: e=2;break;case /: e=3;break;case (: e=4;break;case ): e=5;break;case #: e=6;break;if(e=-1)/如果输入不满足条件 cout输入表达式含不规范字符! endl;/输出. exit(0);return e;/返回栈int Precede(char x,char y)/符号优先级定义int num77=1,1,-1,-1,-1,1,1,1,1,-1,-1,-1,1,1,1,1,1,1,-1,1,1,1,1,1,1,-1,1,1,-1,-1,-1,-1,-1,0,2,1,1,1,1,2,1,1,-1,-1,-1,-1,-1,2,0;/输入两个符号判断哪个大,优先级判断(七行七列数组)int a,b;/定义ab为整形a = Primary(x);/返回a对应的数值b = Primary(y);/返回b对应的数值return numab;/返回符号的定义数字int Operate(int a ,char thera ,int b )/这是个函数,定义a,b和中间thera符号实现运算if (thera=+)/如果符号等于+return (a+b);/返回到a+bif (thera=-)return (a-b);if (thera=*)return (a*b);if (thera=/)return (a/b);void Cal()SqStack OPND;/操作数栈SqStack OPTR;/运算符栈,栈里面的数据是char类型char c,d;/cd是字符类型int num;/num整型c=getchar();/输入字符OPTR.Push(c);/将#压入运算符栈c=getchar();/给c赋值输入字符while (c!=#|OPTR.GetTop()!=#)/当c不等于#号字符这个函数也不等于#字符if(Isnum(c) /调用ISNUM函数做判断num = int(c-48);/整型赋值强制转换d=getchar();/读入下一字符while(Isnum(d)/调用ISNUM函数 循环,循环判断num = 10*num + int(d-48);/num等于原式d=getchar();/读入下一字符OPND.Push(num);/出栈c=d;else/如果原式为0switch(Precede(OPTR.GetTop(),c)/判断函数为-1.0.1或2case -1:/栈顶元素优先级低OPTR.Push(c);/出栈c=getchar();/读入下一字符break;case 0:/脱括号并接收下一字符OPTR.Pop();/进栈c=getchar();/读入下一字符break;case 1:/退栈并将运算结果入栈char thera;/thera为字符型int a ,b;/ab为整型thera=OPTR.Pop();/进栈b=OPND.Pop();/进栈a=OPND.Pop();/进栈couttttt计算: atherabendl;/输出原式OPND.Push(Operate(a,thera,b);/让这个函数值出栈break;case 2:/输入错误的情况cout输入表达式错误!endl;/输出原式exit(0);/退出break;/
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《化学反应中物质的转化:高中化学重点解析》
- 电子竞技赛事策划组织协议
- 市场推广合同事项说明
- 财务成本控制与预算编制测试卷
- 意外险考试试题及答案
- 六一创新班级活动方案
- 六一居家活动方案
- 六一庆祝关爱活动方案
- 六一手工店活动方案
- 六一活动劳动篇活动方案
- 消防月课件:2024年21起典型火灾案例及消防安全知识专题培训
- 2024年湖北省初中学业水平考试地理试卷含答案
- DB35T 2067-2022 锅炉用固体废弃物燃料性能评价规则
- OQC培训资料教学课件
- 2022年中华护理学会输液连接装置安全管理专家共识解读
- 木制品加工厂应急预案
- 中医院护理质量评价标准与方法
- 2025年中考历史复习专项训练:世界现代史选择题100题(原卷版)
- 电影音乐欣赏智慧树知到期末考试答案章节答案2024年华南农业大学
- 2024北京西城区高二(下)期末数学试题及答案
- 办公场所租赁合同条例
评论
0/150
提交评论