资源预览内容
第1页 / 共18页
第2页 / 共18页
第3页 / 共18页
第4页 / 共18页
第5页 / 共18页
第6页 / 共18页
第7页 / 共18页
第8页 / 共18页
第9页 / 共18页
第10页 / 共18页
亲,该文档总共18页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
课程设计报告课程设计报告 课程设计题目:课程设计题目: 表达式求值 姓姓 名名 胡胡*其其 学学 号号20162018* 班班 级级 *17Z 指导教师指导教师 徐徐* 2017 年年 12 月月 30 日日 东华理工大学 课程设计评分表 学生姓名:胡*其 班级:*17Z 学号:20162018* 课程设计题目:表达式求值 项目内容满分实 评 能结合所学课程知识、有一定的能力训练。符合选题要求 (1 人一题) 10 选 题 工作量适中,难易度合理10 能熟练应用所学知识,有一定查阅文献及运用文献资料能力10 理论依据充分,数据准确,公式推导正确10 能应用计算机软件进行编程、资料搜集录入、加工、排版、 制图等 10 能 力 水 平 能体现创造性思维,或有独特见解10 总体设计正确、合理,各项技术指标符合要求。10 说明书综述简练完整,概念清楚、立论正确、技术用语准确、 结论严谨合理;分析处理科学、条理分明、语言流畅、结构 严谨、版面清晰 10 设计说明书栏目齐全、合理,符号统一、编号齐全。 格式、 绘图、表格、插图等规范准确,符合国家标准 10 成 果 质 量 有一定篇幅,字符数不少于 500010 总 分100 指导教师评语: 指导教师签名: 年 月 日 目目 录录 一.题目: 1 二.设计任务: 1 三.问题分析: 1 四.结构分析: 1 4.1 用于存储操作数和运算结果(Sfloat) .1 4.2 用于存储运算符(Schar) 2 4.2 系统中子程序及功能要求 .2 五.实现流程 .3 5.1 程序主流程图 .3 5.2 求值操作流程 .3 六.个性功能介绍 .4 七.部分问题及解决方案 .5 7.1 不能进行带有小数点的数的运算 .5 7.2 在输错后,跳回主界面直接提示指令输入错误,重输 .6 八.课程设计小结 .7 九.附录一:部分测试数据 .7 十.附录二:源代码 .7 1 一、题目:一、题目: 表达式求值 二、课程设计任务:二、课程设计任务: 要求能输入一个带“( ) ”的任意多位实数的表达式。 要求: 1、有合理的提示; 2、有非法数据的判断; 3、能够进行多次计算。 测试数据及测试结果请在上交的资料中写明; 三、问题分析:三、问题分析: 任何一个表达式都是由操作符,运算符组成的。我们分别用顺序栈来寄存表达式的操 作数和运算符。栈是限定于紧仅在表尾进行插入或删除操作的线性表。顺序栈的存储结构 是利用一组连续的存储单元依次存放自栈底到栈顶的数据元素。 为了实现算符优先算法。可以使用两个栈。一个称为 Schar,用以寄存运算符,另一 个称做 Sfloat,用以寄存操作数或运算结果。 1.首先置操作数栈为空栈,表达式起始符”#”为运算符栈的栈底元素; 2.依次读入表达式,若是操作符即进 Sfloat 栈,若是运算符则和 Schar 栈的栈顶运 算符比较优先权后作相应的操作,直至整个表达式求值完毕(即 Schar 栈的栈顶元素和当 前读入的字符均为”#” ) 。 四、结构分析:四、结构分析: 1.1.用于存储操作数和运算结果(用于存储操作数和运算结果(SfloatSfloat): : ADT s_float 数据元素:此链栈中的所有元素类型为字符型的数字字符 数据关系:栈中数据元素之间是线性关系。 基本操作: (1) Init(Sfloat *S); 2 初始化数字栈 (2)Push(Sfloat*S,float e) 进栈 (3)Pop(Sfloat*S,float*x) 出栈 (4)GetTop(Sfloat *S,float *x) 取栈顶 (5)void ClearStack(Sfloat *S) 清空栈 ADT s_float 2.2.用于存储运算符用于存储运算符(Schar)(Schar): ADT s_char 数据对象 D:元素类型为字符型的符号字符 数据关系 R:栈中数据元素之间是线性关系。 基本操作: (1)Init(Schar *S) 初始化字符栈 (2)Push(Schar *S,char x) 进栈 (3)Pop(Schar *S,char *x) 出栈 (4)GetTop(Schar *S,char *x) 取栈顶 (5)ClearStack(Schar *S) 清空栈 ADT s_char 3.3.系统中子程序及功能要求:系统中子程序及功能要求: (1)bool IsFloat(char ch) 判断输入的是否为数字 (2)bool IsChar(char ch) 判断输入的是否为所需要的字符 (3)float GetNumber(char *ch) 将字符型数字转化为浮点型 (4)float Operation(float a,char sign,float b) +、-、*、/的基本运算 (5)int Cmp(char x,char ch) 比较字符的优先级 (6)void Master(); 程序主功能函数 3 (7)void Error() 错误提示界面 (8)void Welcome() 程序欢迎界面 (9)void End() 结束选择界面 五、实现流程五、实现流程 1.1.程序主流程图程序主流程图 2.2.求值操作流程求值操作流程 4 (下例为 3*(7-2)的操作流程) 步骤Schar 栈Sfloat 栈输入表达式主要操作 1#3*(7-2)#Push(Sfloat,3) 2#3*(7-2)#Push(Schar,*) 3#*3(7-2)#Push(Schar,() 4#*(37-2)#Push(Sfloat,7) 5#*(3 7-2)#Push(Schar,-) 6#*(-3 72)#Push(Sfloat,2) 7#*(-3 7 2)#Operation(7,-,2) 8#*(3 5)#Pop(Sfloat) 9#*3 5#Operation(3,*,5) 10#15#Return(GetTop (Sfloat) 六、个性功能介绍六、个性功能介绍 在本程序中,通过 windows 头文件的作用,实现了程序背景色的改变,不在是原本的 黑白色,让人看得很新颖。通过 Sleep 函数,让程序出错或跳转其它界面时,不是迅速跳 过,而是先提示即将跳转,让使用者更方便地了解程序的基本执行过程。 5 七、实验过程中遇到的部分问题及解决方案七、实验过程中遇到的部分问题及解决方案 1.1.不能进行带有小数点的数的运算不能进行带有小数点的数的运算 错误运行结果 解决方案 解决后运行结果 6 2.2.在输入错误后,跳回主界面时直接提示指令输入错误在输入错误后,跳回主界面时直接提示指令输入错误, ,重新输入。重新输入。 解决方案 导致这个的原因是错误后跳回主界面没有清除缓存,所以需要在错误提示函数中添一 个 fflush(stdin)来刷新当前内存。 运行结果 7 八、课程设计小结八、课程设计小结 通过这次的课程设计,让我更加地了解到 C 语言和数据结构的魅力。课程设计不仅要 求对课本知识有较深刻的了解,同时要求程序设计者有较强的思维和动手能力,同时这也 使我更加了解编程思想和编程技巧。 这次课程设计让我有一个深刻的体会,那就是细节决定成败,编程最需要的是严谨, 如何的严谨都不过分,往往检查了半天发现错误发生在某个括号,分号,引号,或者数据 类型上,还有函数或变量命名一般要遵循其默认命名规则。就像我在写 Master ()函数时, 起初将各种标识符名称设置的乱七八糟,导致我后面自己都对各种变量名的指向的作用都 混淆了,后来还浪费了大量的时间进行优化命名,所以说细节很重要。 程序设计时,也不要怕遇到错误,在实际操作过程中犯的一些错误还会有意外的收获, 感觉课程设计很有意思。在具体操作中这学期所学的数据结构的理论知识得到巩固,达到 课程设计的基本目的,也发现自己的不足之出,在以后的上机中应更加注意。 以后我们会继续努力,大胆创新,争取能编写出透射着自己思想的程序。这次课程设 计让我们充分认识到了自己的不足,认识到了动手能力的重要性。我们会在以后的学习中更 加努力锻炼自己,提高自己,让自己写出更好更完善的程序,为以后的编程打好基础! 附录一:部分测试数据附录一:部分测试数据 组别表达式正确值 11.23+4.5*1046.23 2 1.5*(1+9)-10/5 13 3-(100-101)/50.20 41.23.5+6.5*12 错误 5 5+4*1.25)错误 附录二:源代码附录二:源代码 #include #include #include #define MAXSIZE 20 /建立字符栈 typedef struct char arrMAXSIZE; 8 int top; Schar; void Init(Schar *S)/初始化 S-top=-1; int Push(Schar *S,char x)/进栈 if(S-top=MAXSIZE-1) return 0; S-top+; S-arrS-top=x; return 1; int Pop(Schar *S,char *x)/出栈 if(S-top=-1) return 0; else *x=S-arrS-top; S-top-; return 1; int GetTop(Schar *S,char *x) /取栈顶 if(S-top=-1) return 0; else *x=S-arrS-top; return 1; char GetTop(Schar S) char x; GetTop( return x; void ClearStack(Schar *S)/清空栈 if(S-top!=-1) S-top=-1; 9 /建立数字栈 typedef struct float arrMAXSIZE; int top; Sfloat; void Init(Sfloat *S)/初始化 S-top=-1; int Push(Sfloat *S,float e) /进栈 if(S-top=MAXSIZE-1) return 0; else S-top+; S-arrS-top=e; return 1; int Pop(Sfloat *S,float *x) /出栈 if(S-top=-1) return 0; else *x=S-arrS-top; S-top-; return 1; int GetTop(Sfloat *S,float *x)/ 取栈顶 if(S-top=-1) return 0; else *x=S-arrS-top; return 1; float GetTop(Sfloat S) 10 float x; GetTop( return x; void ClearStack(Sfloat *S) /清空栈 if(S-top!=-1) S-top=-1; char a7=+,-,*,/,(,),#; int pri77= /优先权集合 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; bool IsFloat(char ch)/判
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号