




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
本文格式为Word版,下载可任意编辑——算数表达式的求解课程设计报告
合肥学院
计算机科学与技术系
课程设计报告
课学学专指
业导
班教生
姓
程名号级师
数据结构与算法算数表达式的求解
课程设计名称
(算数表达式的求解)给定一个算数表达式,通过程序求出最终的结果。
1、从键盘输入要求解的算术表达式;
2、采用栈结构进行算数表达式的求解过程;3、能够判断算数表达式的正确与否;4、对于错误表达式给出提醒;
5、对于正确表达时给出最终的结果。1、问题分析和任务定义
有题目可知,程序要求给定一算数表达式并计算最终的结果,我们知道,在高级语言中,任何一个表达式都是有操作数、运算符和界限符组成。在计算过程中,还要考虑表达式中有无括号以及左右括号之分。由于运算符有优先级的高低,因此一个算数表达是不可能总是按顺序执行。
通过以上可知,可以用栈来实现运算符的优先级完成算术表达式的求解。
为实现算法的优先级,设置两个栈:一个称为操作数栈opnd,用以寄放操作数和运算结果,另一个为操作符栈optr,用以寄放运算符。该算法的基本思想是:
(1)首先置操作数栈opnd为空栈,表达式终止符“#〞为操作符栈optr的栈底元素。(2)依次读入表达式中每个字符,若为操作数,则进opnd栈;若是运算符,则与optr栈的栈顶运算符比较优先级后做相应操作:若当前操作符大于optr栈的栈顶,则当前操作符入栈;否则,opnd栈的栈顶元素、次栈顶元素出栈,同时optr栈的栈顶元素也出栈,形成运算,并将结果压入opnd栈,直至整个表达式求值完毕(即optr栈的栈顶元素和当前读入的字符均为“#〞)。
对于算术表达式的输入,本程序采用gets()的方法读入,将运算符‘+’,‘-’,‘*’,‘/’,‘(’,‘)’,‘#’存储在数组中时,定义表达式求解函数,在函数中判断读入的字符,假使是运算符,将这些字符入操作符optr栈,并比较优先级,判断是否运算。若读入的字符为‘0’到‘9’之间的数字时,用字符相减转化为整型,然后将转化后的整型再转化为ASCII的形式压入操作数栈opnd中。2、数据结构的选择和概要设计(1)存储结构设计
本程序主要采用顺序栈结构类型(Stack)来存储表达式计算中的数据。程序中需要建立两个栈,一个栈用于寄放运算符,另一个则用于寄放操作数和计算结果,故需要建立两个顺序栈结构类型。(2)算数优先级设计对一任意的表达式,由于表达式中运算符的优先级不同,可能会使表达式不按顺序进行计算。在本程序中定义函数Proceed()来比较运算符的优先级,而函数中各优先级的比较主要根据以下优先级比较的表格:
表1:运算符优先级运算符用数字表示栈内操作符的优先级栈外操作符的优先级+032-132*254/354(416)561#600在Precede()函数中定义两个字符型参数变量op和c,其中op表示栈顶运算符,c
表示当前读入运算符,对于当前运算符是否入栈,进行如下操作:比较当前运算符和栈顶运算符的优先级的大小:
1、假使当前运算符的优先级大于栈顶运算符的优先级,即opc;令函数返回值为'>',此时应将栈顶运算符出栈和栈顶、次栈顶操作数出栈并进行相应的运算。
3、假使当前元素的优先级等于栈顶运算符的优先级,即op=c;令函数的返回值为'=',此时界限符内的表达式已计算完毕。(3)程序模块设计1)程序模块
本程序主要包含3个模块:主程序模块、计算模块以及顺序栈操作模块,调用关系如下图:计算模块顺序栈操作模块主程序模块
图1:程序模块图2)系统功能模块
本程序大致包含10个函数,其中包含主函数。每个函数都有其相对应的功能实现。○1操作符的输入函数intIn(charc);
○2运算符比较优先级函数charProceed(charop,charc);○3进行四则运算函数intOperate(inta,chara1,intb);○4实现表达式的求值函数intEvalExpres(void);○5初始化栈函数voidInitStack(Stack*s);○6入栈函数voidPush(Stack*s,intx);○7出栈函数intPop(Stack*s);
○8取栈顶元素函数intGetTop(Stack*s);○9判栈空函数voidEmpty(Stack*s);○10主函数intmain()
3)函数之间主要调用的关系图本程序主要包含10个程序,各程序之间的关系如下图:(部分函数用以上的编号表示)
Voidmain()
IntEvalExpres(void)1○2○3○5○6○7○8○9○
图2:函数之间调用关系图
3、详细设计和编码
(1)、结构体类型的定义typedefstruct{
intdata[MAXSIZE];inttop;
intbase;//栈底}Stack;
(2)、全局变量定义//以下为函数声明
voidInitStack(Stack*);//初始化栈intEmpty(Stack*);//判空栈voidPush(Stack*,int);//进栈intPop(Stack*);//出栈
intGetTop(Stack*);//取栈顶元素
intOperate(int,char,int);//计算结果charProceed(char,char);//比较优先级intIn(char);//判断输入符
intEvalExpres(void);//表达式计算函数//定义两个栈分别存放运算符和操作数StackStackR,StackD;
(3)、系统主要子程序的详细设计1)、主函数模块设计
intmain()//主函数{
intv;charch;while(1)
{
printf(\欢迎使用算术表达式的求解的小程序************\\n\
v=EvalExpres();
printf(\表达式的计算结果为:%d\printf(\do
{
scanf(\if(ch=='n'||ch=='N')exit(0);}while(ch!='\\n');system(\}
return0;}
在主函数中,设定用户操作界面的形式,通过调用表达式求解的子函数实现算法所要实现的功能,然后通过while()循环语句控制,可以实现屡屡调试。2)、计算函数模块
intOperate(inta,chara1,intb){
ints;
intd1=a;
intd2=b;//把字符ab变为对应数字switch(a1){case'+':s=d1+d2;break;case'-':s=d2-d1;
break;case'*':s=d1*d2;break;case'/':
s=d2/d1;}
return(s+'0');//将运算结果转化为ascii码的形式入栈,}
在计算函数中,定义3个变量,表示基本运算中的变量。采用开关语句实现表达式的基本运算,将运算结果转化为ASCII的形式返回。3)、表达式求解的函数模块
intEvalExpres(void)//表达式求解函数
6、用户使用说明
(1)本程序执行的文件为“算数表达式的求解问题〞。
(2)所求表达式中都只是仅包含加、减、乘、除4种基本运算的,其中也包含括号的应用,所有的运算对象均为简单变量,要求将表达式中的数字字符转化为整型,且输入表达式以“#〞终止。
(3)输入表达式时,以‘#’终止,当点击回车键时即可得到运算结果,当想继续输入表达式时,再次点击回车键即可,当想终止时,点击字母‘n’或‘N’。(4)当输入错误表达式时,程序会给出相应的提醒。7、
case'-':case'*':case'/':case')':
case'#':ch='>';break;case'(':ch='';break;case'(':
printf(\括号匹配错误!\\n\exit(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 计算机一级Photoshop考试必考知识试题及答案
- 财务决策中的逻辑分析方法综述试题及答案
- 经济法复习方式创新试题及答案
- 2025年MySQL考试技巧与试题及答案
- 突出的2025年C++考试试题及答案高分攻略
- Python环境变量设置试题及答案
- 数据库安全策略制定试题及答案
- Msoffice学习心得与试题及答案总结
- Msoffice操作技能试题及答案分析
- C++编程常见问题解答试题及答案
- 河道景观设计合同范本
- 翻译员工作合同
- NB-T31052-2014风力发电场高处作业安全规程
- 2024年湖南高考历史真题
- 海外仓合同范本
- 体育行业投标书
- 慢性淋巴增殖性疾病的诊断课件
- 2024年高校教师资格证资格考试题库含答案(满分必刷)
- 2024-2029全球及中国电气电子中的CFD行业市场发展分析及前景趋势与投资发展研究报告
- 中国法律史-第三次平时作业-国开-参考资料
- 五十六个民族之土族介绍
评论
0/150
提交评论