收藏 分享(赏)

中缀转后缀表达式并求值.doc

上传人:lufeng1000 文档编号:1577150 上传时间:2018-08-07 格式:DOC 页数:15 大小:751.50KB
下载 相关 举报
中缀转后缀表达式并求值.doc_第1页
第1页 / 共15页
中缀转后缀表达式并求值.doc_第2页
第2页 / 共15页
中缀转后缀表达式并求值.doc_第3页
第3页 / 共15页
中缀转后缀表达式并求值.doc_第4页
第4页 / 共15页
中缀转后缀表达式并求值.doc_第5页
第5页 / 共15页
点击查看更多>>
资源描述

1、武 汉 长 江 工 商 学 院计 算 机 科 学 与 技 术 系项 目 名 称 : 算 术 表 达 式 求 值 栈 学 生 姓 名 : 荣 胜 华 学 号 : 1203100224 班 级 : 12802 指 导 教 师 : 刘 莹 胡 成 松 2013 年 12 月 1 日目录1.概述 .12.系统需求分析 .12.1 系统功能概述 13.系统功能解析 .13.1 系统功能分块解析 13.2 系统功能模块图 24.系统功能实现及代码描述 .24.1 函数操作集合 24.2 中缀转后缀表达式并求值 35.系统测试及实验结果 .46.体会 .77.参考文献 .88.源程序清单 .911.概述(1

2、)课程设计是实践性教学中的一个重要环节,它以某一课程为基础,可以涉及和课程相关的各个方面是一门独立于课程之外的特殊课程。课程设计是让同学们对所学的课程更全面的学习和应用,理解和掌握课程的相关知识。 数据结构是一门重要的专业基础课,是计算机理论和应用的核心基础课程。(2)数据结构课程设计,要求我们在数据结构的逻辑特性和物理表示、数据结构的选择和应用、算法的设计及其实现等方面,加深对课程基本内容的理解。同时,在程序设计方法以及上机操作等基本技能和科学作风方面受到比较系统和严格的训练。(3)在这次的课程设计中我选择的题目是算术表达式求值演示。表达式计算是实现程序设计语言的基本题之一,也是栈的应用的一

3、个典型例子。设计一个程序,演示用算符优先法对算术表达式求值的过程。深入了解栈特性,以便在解决实际问题中灵活运用它们,同时加深对这种结构的理解和认识。(4) 教育是一个影响着国富民强的重要行业,随着改革开放和市场经济的发展,根据中国特有的国情发展,教育得到了国家的大力扶持与社会各界的高度重视,从而使教育业向规范性与现代化的方向高速发展,但是同发达国家相比,我国的教育行业的信息技术的应用程度还很低,只有在大城市中发展较早、规模较大的院校中才使用计算机进行大规模操作,从各方面提高工作效率,取得良好的社会和经济效益,而一些新兴的、规模较小的教育机构还没有全部具备这种功能。因此可见,随着我国教育的迅速发

4、展,信息技术在其上的应用会更加地广泛和深入,对于国家将来各种技术科研人才的需求下,我们作为接班人,必须努力的学号知识,奉献自己的一份力量。2.系统需求分析2.1系统功能概述(1)系统以菜单方式进行工作(2)中缀表达式的录入(3)运算符优先级比较(4)中缀转后缀表达式(5)利用后缀表达式求值(6)将算术栈进行格式化(7)退出3.系统功能解析3.1系统功能分块解析(1)输入中缀表达式:通过按照常规算数表达式的方法进行直观地输入操作。如:中缀表达式#(3+4.55)*2#。(2)算符优先级:算符优先级比较按照算符优先级数值的大小进行比较。例如:算符优先级 0 小于算符优先级 1。算符优先级为 0:“

5、(” , “#”。算符优先级为 1:“+” , “-”。算符优先级为 2:“*” , “/”,“%”。算符优先级为 3:“” 。(3)中缀表达式转换为后缀表达式:2通过中缀表达式字符串一一的进行扫描操作。运用一个栈来进行保存工作,将栈底压入一个“#”(用作字符串扫描开始标志)当遇到数值时直接压入栈中;当遇到左括号时,将左括号直接压入栈中;当遇到右括号时,表明该括号括号内的中缀表达式式已经扫描完毕,将其对应左括号之间的运算符直接一一退栈保存在后缀表达式字符串中;当遇到的是运算符时,此时把该运算符与保存在栈顶的运算符进行比较,当栈顶运算符优先级不大于该运算符时,将栈顶运算符退栈写入到后缀表达式字符

6、串中,并将该运算符也写入到其中;当扫描到“#”表明该中缀表达式已经扫描完毕。对应上述中缀表达式的后缀表达式为: 3 4.55 + 2 * 。(4)利用后缀表达式进行求值:通过一一扫描后缀表达式字符串。当遇到数值字符时,直接将其压入到栈中进行保存;到遇到算符时,依次从栈顶弹出两个数字字符进行相应的计算操作。3.2系统功能模块图算术表达式求值 - - 栈系统菜单中缀转后缀表达式求值清 空并 格式 化功能菜单退出图 3-2 栈系统模块图4.系统功能实现及代码描述4.1函数操作集合(1)void initstack(Stack 字符c h = s 1 0 c h = = N U L Li + + ,

7、继续扫描 s 1 c h = = ( c h ! = # 将 ( 压入栈 ,c h = s 1 i + + c h = = ) c h ! = ( 退栈并删除栈顶 , 将栈顶元素写入串 s 2 中c h 是否等于 + , - , * , / , % , 中的一个栈顶运算符优先级 w 与 c h 比较 ,w = c h将栈顶运算符写入串 s 2 , 并删除栈顶运算符将 c h 压入栈 , 并继续扫描 s 1当 c h 为数字字符时将数字字符压入栈 , 并在字符后面添加一个空字符YYNYNYYNYYNYN删除栈顶 # c h ! = # 依次退栈 , 并将栈顶写入串 s 2NY栈扫描完毕 , 将串

8、s 2 末尾添加 0 N图 4-1 中缀转后缀表达式4系统在利用后缀表达式字符串进行求值的过程中,通过调用函数操作(7)double compute(char *str),一一扫描后缀表达式字符串,当遇到数值时,利用一个栈将该数值进行存储起来,当遇到运算符时退出栈中两个数值操作数进行相应的算术运算,直至将后缀表达式扫描完毕,并计算出结果。开始调用字符串 s t r , 定义浮点类型的x , y , 整形的 i 用于扫描串 s t r串 s t r 不为空时s t r i = = i + + , 继续扫描串 s t rs t r i 是否等于 + | 或 - 或 * 或 / 或 % 或 退出栈中

9、两个元素进行相应的运算 , 并将结果压入栈YYYS t r i 为数字字符N栈不为空N输出栈顶元素 , 即为该表达式的值Y调用结束将数字字符直接压入栈出错图 4-2 利用后缀表达式求值5.系统测试及实验结果图 5-1 系统功能菜单5图 5-2 一级加运算图 5-3 一级减运算图 5-4 二级乘运算图 5-5 二级除运算6图 5-6 取模运算图 5-7 幂运算图 5-8 混合运算7图 5-9 部分非法输入示例图 5-10 数据清空并进行格式化图 5-11 功能菜单进行退出6.体会 在课程设计中,应该力求算法简明易懂,而易于转换为上机程序;如果程序反复多次使用,则应该尽可能选用快速的算法;如果待解

10、决的问题数据量极大,机器的存储空间较小,则在编写算法时应该考虑如何节省空间。以后在编写程序时就应该注意到所编写程序的时间复杂度,以及是否运用了良好的算法,而不能只是像以前编写程序时单纯使用 C 语言的知识,要充分考虑程序的性能,争取编写出更优良的程序来。让我对数据结构C 语言有了更进一步的认识和了解,也让我知道,要想学好它要重在实践,理论与实际应用相结合,提高了自己组织数据及编写大型程序的能力,培养了基本的、良好的程序设计技能以及合作能力。通过实际操作,也发现自己的一些不足之处:(1)用栈的结构来解决表达式的求值,首先要解决的问题是如何将人们习惯书写的表达式转换成计算机容易处理的表达式。开始有

11、些茫然,后来通过结合课本和老师同学的帮助完成了该课题。(2)对一些看似简单的东西掌握不够熟练,比如由于函数的调用参数问题不熟而造成了调试的困难。对于语法的掌握也欠缺成熟,需要进一步掌握。(3)对栈中存储的数据在有条件下的进栈和出栈还不能快速的反应过来,还需要进一步分析。栈的结构理解不够清晰,造成了设计程序时理不清头绪,需要对数据结构有更深层次的理解。87.参考文献1 Brian W.Kernighan,Dennis M.Ritchie.THE C PROGRAMMING LANGUAGE.北京:清华大学出版社.2002./PRENTICE HALL,2001 2 秦友淑,曹化工.C 语言程序设

12、计教程(第二版).武汉:华中科技 大学出版社,20023 AlKelley,Ira Pohl.C 语言教程(英文版.第 4 版).北京:机械工业出版社,20044 EriS.Roberts.C 语言的科学和艺术(英文版).北京:机械工业出版社,20045 严蔚敏,吴伟民.数据结构.北京:清华大学出版社.19976 王晓冬.算法设计与分析.北京:清华大学出版社.20037 ISO 的 C 语言标准:ISO/IEC 9899:1999(E)8 S.P.Harbison,G.L.Steele.C 语言参考手册.北京:机械工业出版社,20039 叶欣.徐金梧.Turbo C 使用大全.北京:北京科海培

13、训中心,199010徐孝凯,魏荣数据结构,机械工业出版社,1996 年11徐孝凯数据结构简明教程 ,清华大学出版社,1995 年12陈文博,朱青数据结构与算法 ,机械工业出版社,1996 年 13许卓群,张乃孝,杨冬青,唐世渭数据结构 ,高等教育出版社,1988 年 14李廉治,姜文清,郭福顺数据结构 ,大连理工大学出版社,1989 年15晋良颍数据结构 ,人民邮电出版社,2002 年16Esakov J, Weiss T. Data Structures:An Advanced Approach Using C.Prentice-Hall,Inc.,198917美S 巴斯计算机算法:设计和分

14、析引论朱洪等译,复旦大学出版社,1985 年98.源程序清单#include #include#include #includeusing namespace std;#define Maxsize 100typedef float ElemType;struct StackElemType sMaxsize;int top;void initstack(Stackvoid push(Stack pop(r);w=peek(r);push(r,ch);ch=s1+i;elseif(ch9)coutchoose;switch(choose)case 1:system(“cls“);create(a);system(“pause“);break;case 2:system(“cls“);initstack(s);coutendl;cout“-格式化成功!-“endl;system(“pause“);break;case 0:break;while(choose!=0);

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 实用文档 > 往来文书

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报