欢迎来到天天文库
浏览记录
ID:37915154
大小:235.00 KB
页数:11页
时间:2019-06-02
《数据结构课程设计_算术表达式》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、word格式文档表达式求值一目的利用《数据结构》课程的相关知识完成一个具有一定难度的综合设计题目,利用C/C++语言进行程序设计,并规范地完成课程设计报告。通过课程设计,巩固和加深对线性表、栈、队列、字符串、树、图、查找、排序等理论知识的理解;掌握现实复杂问题的分析建模和解决方法(包括问题描述、系统分析、设计建模、代码实现、结果分析等);提高利用计算机分析解决综合性实际问题的基本能力。设计一个程序,演示以字符序列的形式输入不含变量的实数表达式求值的计算结果二需求分析设计一个程序,演示以字符序列的形式输入不含变量的实数表达式求值
2、的计算结果。对于这个程序我们从输入,输出,和功能三方面来分析。1.程序输入:从键盘上输入表达式,一个算术表达式,由常量、运算符和括号组成(以字符串形式输入,不含变量)。为了简化,操作数只能为浮点数,操作符为“+”、“-”、“*”、“/”、“(”、“)”,用“#“表示结束。2.程序输出:表达式运算结果,运算符栈、运算数栈、输入字符和主要操作变化过程,如运算符栈、运算数栈的出入记录,字符出入栈的过程,打印出完整的过程。3.功能要求及说明:从键盘上输入表达式。分析该表达式是否合法(包含分母不能为零的情况):(1)是数字,则判断该数字
3、的合法性。(2)是规定的运算符,则根据规则进行处理。在处理过程中,将计算该表达式的值。(3)若是其它字符,则返回错误信息。若上述处理过程中没有发现错误,则认为该表达式合法,并打印处理结果。三概要设计1.数据结构的选择:任何一个表达式都是由操作符,运算符和界限符组成的。我们分别用顺序栈来寄存表达式的操作数和运算符。栈是限定于紧仅在表尾进行插入或删除操作的线性表。专业整理word格式文档为了实现算符优先算法,可以使用两个工作栈。一个称做SqStack1,用以寄存运算符;另一个称做SqStack2,用以寄存操作数或运算结果。首先置操
4、作数栈为空栈,表达式起始符“#”作为运算符栈的栈底元素,然后依次读入表达式的每个字符,若是操作数则进入SqStack2栈,若是运算符则和SqStack1栈的栈顶运算符比较优先权后做相应操作,直至整个表达式求值完毕。两个栈:typedefstruct//运算符栈{char*base;char*top;intstacksize;}SqStack1;typedefstruct//运算数栈{float*base;float*top;intstacksize;}SqStack2;2.相关功能函数:voidInitStack1(SqSta
5、ck1&S1);//声明运算符栈建立函数voidInitStack2(SqStack2&S2);//声明运算数栈建立函数主要的确定如何入栈的函数:voidevaluate(SqStack1&S1,SqStack2&S2);voidPush1(SqStack1&S1,chare);//声明入栈函数voidPush2(SqStack2&S2,floate);//声明入栈函数charGetTop1(SqStack1&S1);//声明取栈顶元素函数floatGetTop2(SqStack2&S2);//声明取栈顶元素函数charPop
6、1(SqStack1&S1);//声明出栈函数floatPop2(SqStack2&S2);//声明出栈函数charCompare(charm,charn);//声明比较函数通过这个函数我们来实现运算符运算的先后顺序判断运算符优先权,返回优先权高的算符间的优先关系如下:θ1θ2+-*/()#+>><<<>>->><<<>>*>>>><>>/>>>><>>(<<<<<=)>>>>>>#<<<<<=最后的计算函数:floatOperate(floata,charrheta,floatb);//声明运算函数专业整理word格式文档为
7、了使运算的过程更加直观的反应出来,我们再绘制一个表格,绘制表格的相关函数如下:voidDispStack1(SqStack1&S1);//从栈底到栈顶依次输出各元素voidDispStack2(SqStack2&S2);//从栈底到栈顶依次输出各元素3.函数模块之间的调用关系:四详细设计首先本程序定义两个顺序栈:运算符栈(SqStack1)和运算数栈(SqStack2);typedefstruct//运算符栈{char*base;char*top;intstacksize;}SqStack1;typedefstruct//运算
8、数栈{float*base;float*top;专业整理word格式文档intstacksize;}SqStack2;然后是主要功能函数的详细设计:/*运算符栈函数*/voidInitStack1(SqStack1&S1)//构造一个空栈S1{S1.base=(char*)m
此文档下载收益归作者所有