《数据结构课程设计中缀算术表达式求值.doc》由会员分享,可在线阅读,更多相关《数据结构课程设计中缀算术表达式求值.doc(15页珍藏版)》请在三一办公上搜索。
1、课 程 设 计 报 告课程名称 数据结构课程设计 课题名称 中缀算术表达式求值 专 业 通信工程 班 级 1001班 学 号 201003040114 姓 名 彭琼林 指导教师 田娟秀 胡瑛 曹燚 2012年 7 月 6 日湖南工程学院课 程 设 计 任 务 书课程名称 数据结构 课 题 中缀算术表达式求值 专业班级 通信工程1001班 学生姓名 彭琼林 学 号 201003040114 指导老师 田娟秀 胡瑛 曹毅 审 批 任务书下达日期 2012 年 7 月 1 日任务完成日期 2012 年 7 月 6 日1. 考核方式指导老师负责验收程序的运行结果,并结合学生的工作态度、实际动手能力、创
2、新精神和设计报告等进行综合考评,并按优秀、良好、中等、及格和不及格五个等级给出每位同学的课程设计成绩。具体考核标准包含以下几个部分:(1)平时出勤 (占10%)(2)系统需求分析、功能设计、数据结构设计及程序总体结构合理与否(占10%)(3)程序能否完整、准确地运行,个人能否独立、熟练地调试程序(占40%)(4)设计报告(占30%)注意:不得抄袭他人的报告(或给他人抄袭),一旦发现,成绩为零分。(5)独立完成情况(占10%)。2.课程验收要求(1)运行所设计的系统。(2)回答有关问题。(3)提交课程设计报告。(4)提交软盘(源程序、设计报告文档)。(5)依内容的创新程度,完善程序情况及对程序讲
3、解情况打分。3进度安排第 20 周:星期一 8:0012:00 上课 星期一 14:3018:30 上机星期二 14:3018:30 上机 星期三 8:0012:00 上机 附:课程设计报告装订顺序:封面、任务书、目录、正文、评分表、附件(A4大小的图纸及程序清单)。 正文的格式:一级标题用3号黑体,二级标题用四号宋体加粗,正文用小四号宋体;行距为22。正文的内容:一、课题的主要功能;二、课题的功能模块的划分(要求画出模块图);三、主要功能的实现(至少要有一个主要模块的流程图);四、程序调试;五、总结;六、附件(所有程序的原代码,要求对程序写出必要的注释)。正文总字数要求在5000字以上(不含
4、程序原代码)。 1.1设计内容课题三:中缀算术表达式求值我们很早就学习如何书写及计算表达式,诸如:8+5*(7-3)之类的表达式,先算括号内的7减去3,得到4,然后再算5乘以4,得到20,再计算8加上20,得到28,因此该表达式的值为28。这是人们熟悉的运算规则额:有括号先算括号内;无括号时,先做乘除法,后做加减法;对于相同级别的运算按从左到右的次序运算。而计算机是如何实现表达式的计算的呢?应用栈的相关知识,编程序实现之。设计思路:从键盘输入中缀表达式,然后将中缀表达式转换为后缀表达式,利用后缀表达式求值。要求以字符序列的形式从终端输入语法正确的、不含变量的整数表达式,利用给定的算术符优先关系
5、,实现对算数四则混合运算表达式的求值,并演示在求值过程中运算符栈、操作符栈、输入字符和主要操作的变化过程。1.2需求分析a.程序的功能。 该程序能够对任意的四则运算表达式进行中缀表达式向后缀表达式的转换,并得出其计算结果。b.输入输出的要求。 输入输出均是阿拉伯数字和四则运算操作符以及括号运算符,按照程序所给提示进行标准输入输出即可。1.3概要设计a.程序由哪些模块组成以及模块之间的层次结构、各模块的调用关系;每个模块的功能。b.课题涉及的数据结构和数据库结构;即要存储什么数据,这些数据是什么样的结构,它们之间有什么关系等。根据问题描述和要求,系统要求能够正确求出算术表达式的值。在进行算术表达
6、式求值过程中,考虑到我们输入的是中缀表达式,采用后缀表达式比较容易计算,因此先将中缀表达式转换成后缀表达式。程序应该具有:“将算术表达式转化为后缀表达式”、“利用后缀表达式求值”等基本模块。由于有优先级的问题,根据优先级不同的运算符运算的次序是不同的,因此更具其优先级的大小抽象的将其定义为不同的大小。本程序的数据结构为栈。程序的主要模块可以分为运算符栈,操作数栈,以及各类函数。1.4详细设计a.采用C语言定义相关的数据类型。b 写出各模块的类C码算法。c.画出各函数的调用关系图、主要函数的流程图。1.4.1数据类型定义表达式求值中运算符对应优先级的定义structchar ch;int pri
7、;lpri7=,0,(,1,*,5,/,5,+,3,-,3,),6,rpri7=,0,(,6,*,4,/,4,+,2,-,2,),1;/运算符优先级的定义1.4.2将中缀表达式转换成后缀表达式先初始化栈,然后将=进栈,从exp中读取字符,若它为数字则一次存入postexp中,并以空格标志结束。若为运算符,则和栈顶运算符比较,如果栈顶运算符优先级低则该运算符进栈。待字符串exp扫描完毕,则将运算符栈中=之前所有运算符出栈并存放带postexp中,最后得到后缀表达式postexp。void trans(char *exp,char postexp) /将算术表达式exp转换为后缀表达式postex
8、pchar stMaxSize;int top=-1;int i=0;/i作为postexp的下标top+;/=进栈sttop=;while(*exp!=0)if(!InOp(*exp)/为数字字符while(*exp=0&*exp=0&*postexp=9)d=d*10 + *postexp - 0;postexp+;top+;stop=d;postexp+;/继续处理其他的字符returnstop;1.4.4主要函数流程图请输入:表达式exp输出:中缀表达式exp后缀表达式postexptrans(exp,postexp);将中缀表达式exp转换为后缀表达式值compvalue(poste
9、xp)表达式postexpcompvalue(postexp)函数,后缀表达式求值结束ch!=t&ch!=T开始YN 图一 主要函数流程图1.5调试分析以及设计体会1.5.1调试分析。1程序的界面2正确的执行结果3如果选择T或是t程序终止,其他则继续运行b.程序调试中遇到的问题以及解决问题的方法。c.课程设计过程经验教训、心得体会。1.5.2心得体会完成这次数据结构的课程设计的时间虽然不长,但是我还是学到了不少东西。在做课程设计前,我首先读懂老师给的课题,然后仔细阅读课本。有不懂的知识点就和同学交流并向老师咨询。这个课题最主要的是要明白栈的相关知识点,尤其是栈“后进先出”特点,在比较完运算符优
10、先级后,将比栈顶运算符高优先级放入栈中,待表达式全部被扫描完。在编写后缀表达式求值函数时,忘了处理数字字符,因为主函数里定义的是字符数组,所以在对表达式求值时要转换成对应的数字。此外,在编写程序的过程中,不能心急,烦躁,遇到问题要耐心查找资料,然后解决,有时候,会因为一点小错误导致编译出现错误,而这些错误又很难被发现,这时就需要我们细心寻找,运用所学的知识,一点一点地分析问题,再去解决这些问题。因为成功的背后必定会有辛勤和汗水。这也让我体会到想要在软件编程方面发展并取得成功所需要付出的努力。通过完成这次算术表达式求值的课程设计。我对数据结构这门课又有了更加深刻的了解,也提升了自己的逻辑思维能力
11、。以及程序编写能力,即使有时候晚上编程到很晚,但心里还是美滋滋的,因为看到自己亲自编写的程序可以执行,达到所必须的要求,之前的苦累全都抛在脑后了。最后,非常感谢胡瑛老师和田老师的帮助,每次问的问题都很耐心地为我讲解,即使是连我都认为很笨的问题,也都为我详细的分析。谢谢!(5)使用说明用户使用手册:说明如何使用你编写的程序,详细列出每一步的操作步骤。(6)书写格式a.设计报告要求用A4纸打印成册:b.一级标题用3号黑体,二级标题用四号宋体加粗,正文用小四号宋体;行距为22。(7)附录源程序清单(带注释)计算机与通信学院课程设计评分表课程名称: 项 目评 价设计方案的合理性与创造性设计与调试结果设计说明书的质量答辩陈述与回答问题情况课程设计周表现情况综合成绩 教师签名: 日 期: (注:1此页附在课程设计报告之后;2综合成绩按优、良、中、及格和不及格五级评定。)