ImageVerifierCode 换一换
格式:DOCX , 页数:13 ,大小:67.62KB ,
资源ID:19449290      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/19449290.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数据结构算术表达式求值3Word格式文档下载.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数据结构算术表达式求值3Word格式文档下载.docx

1、4.3详细设计 44.3.1程序中用到的抽象数据类型:4.4测试与分析 64.4.1测试 64.4.2调试分析 84.5附录 85 总结与展望 121 设计时间 2010年12月27至2010年12月302 设计目的 加强我们的实践能力,掌握数据结构的应用,算法的编写,类C语言的算法转换成C程序并上级调试的基本方法。对我们基本的程序设计素养的培养和软件工作者作风的训练,起到显著的促进作用。3设计任务 设计一个程序,演示用算符优先法对算术表达式求值的过程。4设计内容4.1 需求分析4.1.1程序的功能(1)完成运算符和运算数的识别处理。 (2)在识别出运算数的同时,将字符序列形式转换成整数形式。

2、(3)实现对算数四则混和运算表达式的求值。1、在本次演示中,要输入以字符序列的形式,语法正确且不含变量的整数表达式 然后咦“#”结束。2、由于算符有优先关系,故用栈来实现。设置运算符栈接收运算符,优先权低的压入栈内,优先权高的进行运算,设置运算数栈,来接收运算数,并存储运行的结果。3、在读入字符序列的同时,完成运算符合运算数(整数)的识别处理,以及相应的运算,在识别出是运算数的同时,将当前字符序列转换成整数形式。1)8+2-32)3*(7-2)3)8/(4-2)4.2总体设计4.2.1程序用到的抽象数据类型 本程序利用栈的概念,利用栈“先进后出”的原则,利用链表的存储结构,进而设计的。(1)

3、首先定义一个栈,将字符x入栈定义栈结点,之后x出栈,既得到栈顶元素初始化的一个栈;(2) 对输入的字符判断是否为运算符,并比较其优先级;(3) 在读入字符序列的同时,完成运算符合运算数(整数)的识别处理。在读入字符序列的同时,完成运算符合运算数(整数)的识别处理在读入字符序列的同时,完成运算符合运算数(整数)的识别处理。本算法一共进行了两次调用,第一次调用是char Eval_Exp()对void PushOptr(SNode *top,char x)和char PopOptr(SNode *top)的调用,第二次是主函数对char Eval_Exp()的调用,完成了运算符的操作,完成字符串对

4、整形的转换。4.3详细设计栈#includemalloc.h#define NULL 0typedef struct node /栈结点 char date; struct node *next;SNode;SNode *InitStack() /初始化top SNode *top; top=(SNode *)malloc(sizeof(SNode); top-next=NULL; return top;4.3.2对主程序和其它主要函数写出伪码算法:char Eval_Exp() /完成运算符操作 char a,b,c,r,f,z; int result; SNode *top2; top0=

5、InitStack(); PushOptr(top0,#); top1=InitStack(); c=getchar(); while(c!=|(GetTop(top0)!) if(!In(c) PushOptr(top1,c); else r=Precede(GetTop(top0),c); switch(r) case b=PopOptr(top0); a=PopOptr(top1); z=PopOptr(top1); result=Operate(z,b,a); f=result+0; /用+完成字符串对整形的转换 PushOptr(top1,f); return f;4.3.3画出函数

6、的调用关系图各程序模块之间的层次(调用)关系:算符间优先关系如下表:+-*/()#=4.4测试与分析4.4.1测试给出测试数据,输出测试的结果,测试数据应该完整(覆盖算法各种情况)。1) 测试8+2-3结果如图4-1所示: 图4-12)测试3*(7-2)结果如图4-2所示: 图4-23)测试8/(4-2)的结果如图4-3所示:图4-34.4.2调试分析在设计程序的过程中,出现程序不能运行,发现不能找到表达式结束的标识符,因此,在设计的时候需要认为动态的添加结束标识符#,是程序能够顺利的运行。4.5附录typedef struct nodeSNode *InitStack()/初始化2个top,

7、后面用来保存我们的输入void PushOptr(SNode *top,char x) SNode *p; p=(SNode *)malloc(sizeof(SNode); p-date=x;next=top-next;next=p;char PopOptr(SNode *top) char x; if(top=NULL) return NULL; p=top- x=p-date;next=p- free(p); return x;void PushOpnd(SNode *top,char x)char PopOpnd(SNode *top)char GetTop(SNode *top) re

8、turn (top-next)-int In(char c) int n; switch(c)+-*/()n=1;break; default:n=0; return n;char Precede(char x,char y)/判断符号的优先级 int i,j; int form77=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; switch(x)i=0;i=1;i=2;i=3;i=4;i=5;i=6; sw

9、itch(y)j=0;j=1;j=2;j=3;j=4;j=5;j=6; if(formij=1) return else if(formij=-1) else int Operate(char x,char z,char y)/进行二元运算acb (c为运算符),并返回运算结果 int a=x-,b=y- switch(z)return a+b;return a-b;return a*b;return a/b;char Eval_Exp() char a,b,c,r,f,z;/调用上面定义的初始化方法/第一个放一个#用来表示并保存第一个输入/进行初始化 /取得你控制台的输入In(c)/如果一直

10、不是#, PushOpnd(top1,c);/放到第二个top中/继续取控制台 else/如果是#/比较优先级 a=PopOpnd(top1); z=PopOpnd(top1); PushOpnd(top1,f);void main() char result; result=Eval_Exp(); printf(%dn,result-5 总结与展望 通过这一个学期对数据结构的学习,让我认识到,数据结构就是众多编程语言里的核心,也为我们日后的学习打下基础在整个上机实践的过程中,我注意到,无论程序的大小,我们都要以一颗认真的心去对待。一旦程序中出现错误,会导致程序运行的失败。因此,在设计程序的过

11、程中,我们所要考虑的内容就不仅仅是仔细,还要做到全面。在以前的C语言学习过程中,我们只需注意如何编写函数,如何顺利的完成我们所要达到的目的,这似乎是没有什么战术而言。然而现在,情况改变了,在我们编写程序之前,还要综合考虑各种因素。如:选择我们自己所需要的数据结构,是用树,图,还是栈,串等,然后选定一种或几种存储结构来确定后面函数的主要风格。最后在编写每一个函数之前,我们应该仔细的比对,挑选最适合当前状况的算法。只有真正理解定义数据类型的好处,才能用这样这样一种数据结构来完成我们的程序,达到我们的目的。通过这次课程设计我觉得我们学习数据结构的方法存在一定的弊端,数据结构的效果直接影响到我们对其它专业课的学习和今后业务的成长。我觉得我们对于数据结构的学习不仅包括理论部分的学习,还要让我们勤动手,多实践。参考文献1严蔚敏,吴伟民.数据结构M.北京:清华大学出版社,2007.2谭浩强.C语言程序设计M.北京:清华大学出版社,2005.3成绩评定成绩 教师签字

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1