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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

中缀表达式求值实验报告.docx

1、中缀表达式求值实验报告中缀表达式求值实验报告一、 需求分析(要实现的功能描述)1.问题描述:在计算机中,算术表达式由常量、变量、运算符和括号组成。由于不同的 运算符具 有不同的优先级,又要考虑括号,因此,算术表达式的求值不可能严格地从左到右进行。 因而在程序设计时,借助栈实现。2.实现功能:算法输入:一个算术表达式,由常量、变量、运算符和括号组成(以字符串形式输 入)。为简化,规定操作数只能为正整数,操作符为 “、+-、*、/ ” o算法运行:将输入的中缀表达式改为后缀表达式,并进行运算。算法输出:输出后缀表达式和表达式运算结果。3.测试数据:(1)、1+3*4-(5/5);位数运算(2)、4

2、5-5* (1+2)/5;多位数运算二、 概要设计整个程序包含功能模块及模块间的调用关系(1)、struct node创建结构体,被主函数调用(2)、struct node *Initialization()创建栈链,被主函数调用(3)、struct node assort(struct node *s)将中缀表达式转换为后缀表达式并 存在s2中被主函数调用(4)、struct node *calcolate(struct node *s)求出表达式的值,被主函数调用(5)、void main()主函数,调用所有函数三、 详细设计抽象数据类型中定义的各种操作算法实现(用 N-S图描述)开始输入

3、中缀表达式将中缀表达式转换成后缀表达式并存入s2中输出后缀表达式计算结果输出结果结束四、 调试分析1.程序在调式过程中出现的问题及解决方法一开始选用直接运算方式运用两个栈来存放数字和操作符,后来写着确实不行然后 直接转用转为后缀表达式再进行计算。在写将多位数(比如123*12)存放字符串中时,一开始我想着直接转换成数字存 入数组中,但一直不成功,只能将第一个多位数转换成功;后来在和同学之间交流并且 XX搜索后改为直接存入字符串中,再存入字符串过程中,我发现几个数字之间可能没 法区分是前一个数字的还是后一个数字的,于是我在扫描字符串过程中在扫描到操作字符时将存入数字的那个字符串 s2空出一位,用

4、以区分前后两个数字,如12+45*,如果直接存入字符串中会是s2: 1245*+;但加空格后为s2: 12 (空格)45*+ ;这样后面运算时就好区分两多位数字。2.心得体会在写程序之前要选择适合自己的算法即自己熟悉的能编出的算法,这样后续的编程 会简便多了。对于一个要实现的功能,会有很多不同的算法,当你一个算法用不了时,可以换一 个算法编程,目的是死的,人是活的,算法是活的,程序也是活的!五、 用户手册该软件的操作方法简介输入一个算术表达式,由常量、变量、运算符和括号组成(以字符串形式输入)。为 简化,规定操作数只能为正整数,操作符为 “、+-、*、/ ”,按回车结束输入。程序运行输出输出后

5、缀表达式和表达式运算结果。六、 测试结果根据已提供的测试数据得到什么样的结果(可以截屏)(1) 、1+3*4-(5/5);(2) 、 45-5*(1+2) /5;七、 程序清单#include#include#include#includeftdefine MAX 60ftdefine RIGHT 1define WRONG 0define DEMAX 15define NULL 0char siMAX;char s2MAX;int j=0;struct node /定义结构体。char data;int num;struct node *next;struct node initializa

6、tion()/初始化栈链,链栈不带头结点struct node *top;top-data=,;assort (struct node *s)/ 输入字符串struct node *p,*top;int i;top=s;int m;char a; nFstrlen(sl);for (i=0; i=m; i+)a=sli;辻(=sli&slidata=a; p-next=top;top二p;break;case *:case /:s2j八;j+;if (top-data=,*) | | (top-data=,/)fs2j二top-data;j+; /比其高,现将栈顶运算符出栈,再进栈top-da

7、ta=a;break;elsep= (struct node *)malloc(sizeof (struct node) ;/ 否,直接进栈 p-data=a; p-next=top;top二p;break;case +,:case :fs2j八;j+;if (top-data,| | top-data,-| |top-data,*,H top_data二二,) s2j=top-data; j+;top-data=a;break;elsefp= (struct node *)malloc(sizeof(struct node); p-data=a;p-next=top;top二p;break;

8、case ):fs2j八;j+;if(top-data=,) printf (input error) ; break;while (top-data!=,()” s2j=top-data; j+;p二top; top=top-next; free(p);p二top;top=top-next; free (p);break;while(top-data!=,;)s2j二top-data;j+;p二top;top=top-next; free (p);Js2j“;printfC 后缀表达式为:); for(i=0; ij;printf (z/%c , s2i);printf Cn );retur

9、n top;struct node *calcolate(struct node *s)struct node *top,*p;char *q;/计算表达式的值int x, y, a;int i, n;top二s;/指向栈顶的指针for (i=0; i= 0,&s2i=O&s2 n num=a; p-next=top;top二p;i=n-l;else if(s2i=;) 遇;号结束标志,输出栈中的最后计算结果printfC 计算结果为:dn, top-num);elseelsey=top-num;p二top;top=top-next;free(p);x二top-num;p二top;top=to

10、p-next;free(p);switch (s2i)case +,:a=x+y;p=(struct node *)malloc(sizeof(struct node); p-num=a; p-next=top;top二p;break;case :沪 x-y ;p= (struct node *)malloc(sizeof(struct node ); p-num=a; p-next=top;top二p;break;case *:fa=x*y;p= (struct node *)malloc(sizeof(struct node );p-num=a;p-next=top;top二p;break;case /:a= (float)x/y;p= (struct node *)malloc(sizeof(struct node ); p-num=a; p-next=top;top二p;break;return 0;void main()struct node *top,*head; top=InitializationO;printfC请输入表达式(运算符号可以为:+、-、*、/、 (、) : n);gets(sl);head二assort(top); calcolate(head);

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

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