免费预览已结束,剩余9页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
安徽科技学院计算机(信息)专业数据结构课程设计实验报告学 院: 理学院 班 级: 网络工程103班 组 长: 郭天翔 学 号: 1887100307成 员: 郭天翔、朱国华、孙前前开课学期: 2011年9月10日实验日期: 2011年12月1日指导教师: 赵靖实验名称:简单计算器设计实验场所:力行楼6楼实验室1、 需求分析根据计算器的功能,我们知道,就是要求输入一个算数表达式,然后由程序计算出结果并输出,当然这是最基本的,我们还可以根据实际需求对其进行功能扩展,让其不光可以计算简单的加减乘除,还可以计算包括括号在内的,考虑到实际计算中需求,还可以将指数计算、开方、阶乘等运算加入到其中。经过讨论,我们还可以做到在输入一个算式后对其进行表达式合法与否的判断,来增加程序的人性化。综上,这就要求我们的程序分为主函数、表达式判断函数、结果计算函数。2、 概要设计在需求分析中,我们已对程序的功能做了大致规划,但是又怎样来实现这些功能呢?在主函数中,只需要输入输出以及对各函数进行调用就行了,所以主函数是相对简单的,只是编写程序代码是注意代码的规范性就行了!在表达式判断中,函数接收由主函数传来的表达式的地址,然后对表达式中个字符扫描对左右括号配对即可。而计算函数有要分成两部分了,因为输入时按照一串字符串输入的,并不是数据,所以计算机并不能直接计算,而且计算牵扯到运算符的优先级问题,这是计算机不能直接处理的,因此,我们要首先把表达式转换成其能够识别计算的后缀表达式,这就有要求用一个后缀转换来实现,其次就要对这个后缀表达式计算了,我们仍用一个函数来实现。在处理运算符优先级问题时,我们按自己定义其优先级大小并用结构体进行存储,这样即方便理解,又方便加入一些运算符!3、 详细设计1、 主函数(main.cpp) 由于要输如一表达式,将此表达式存于一数组,考虑到程序可循环性,故判断输入的第一个字符是否等于“q”当输入为“q”是退出程序。当不是时,调用pipei子函数对表达式进行匹配判断,不匹配是输出提示要求再次输入。在括号匹配时,调用trans(char)将表达式进行转换成对应的后缀表达式。然后再调用函数conprdue对后缀表达式进行计算,并将结果输出。主函数如下:#include #includeusing namespace std;#define maxsize 100#includePipei.cpp#includeTrans.cpp#includeCalcu.cppint main() char expmaxsize; char postexpmaxsize=0; coutPlease input your exp:To quit with qendl; while (scanf(%s,exp)!=EOF) if (exp0=q)return 0; else if (pipei(exp) trans(exp,postexp); cout后缀表达式为: postexpendl; cout表达式的值为: compvalue(postexp)endl; memset(postexp,0,maxsize); coutPlease input your exp:To quit with qendl; else coutinput error!nplease check your exp and input again!top=-1)return (1); /栈为空时 else return (0);2.后缀表达式转换函数:void trans(char *exp,char postexp) /中缀转后缀 struct char datamaxsize;/存放运算符 int top; /栈指针 op; /运算符栈 int i=0; /i为后缀表达式的标号 op.top=-1; op.top+; op.dataop.top=; /将=进栈 while (*exp!=0) if (!Inop(*exp) /不是运算符时即为数字时 while (*exp=0&*exp=9)|*exp=.) postexpi+=*exp; /为数字时存放在后缀表达式里 exp+; postexpi+=#;/数值串结束 else /*对正数和负数处理*/ if (*exp=-|*exp=+) exp-; if (*exp=()|postexp0=0) postexpi+=0; postexpi+=#; exp+; else exp+; switch (Precede(op.dataop.top,*exp) case -1: /op运算级低于exp op.top+; op.dataop.top=*exp; exp+; break; case 0: op.top-; exp+; break; case 1: postexpi+=op.dataop.top; op.top-; break; while (op.dataop.top!=) postexpi+=op.dataop.top; op.top-; postexpi=0;3. 表达式计算:/*计算后缀表达式值*/float compvalue(char *postexp) struct double datamaxsize; /计算的结果 int top; /栈指针 st; /定义数值栈 double d,a,b,c,f; /中间变量 int point=0,zhi=1,jiech=1; st.top=-1; st.datast.top=0; while (*postexp!=0) /后缀不为空时扫描表达式 switch (*postexp) /判断后缀式字符 case+: a=st.datast.top; /取数值a st.top-; b=st.datast.top; /coutb=bendl; /取数值b st.top-; c=a+b; st.top+; st.datast.top=c;/将结果进栈 break; case-: a=st.datast.top; st.top-; b=st.datast.top; st.top-; c=b-a; st.top+; st.datast.top=c; break; case*: a=st.datast.top; st.top-; b=st.datast.top; st.top-; c=b*a; st.top+; st.datast.top=c; break; case/: a=st.datast.top; st.top-; b=st.datast.top; st.top-; if (a!=0) /判断除以零无意义 c=b/a; st.top+; st.datast.top=c; else coutnt除零错误!nendl; exit(0); break; case!: a=st.datast.top; for (int j=1;j=0&*postexp=9)|*postexp=.) /处理连续数字字符 if (*postexp=.) point=1; postexp+; else; if (point=0) d=10*d+*postexp-0; /将字符转为数字 postexp+; else /printf(%dt,pow(10,zhi); f=f+(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 广东白云学院《有机化学Ⅰ(上)》2024-2025学年第一学期期末试卷
- 汕尾职业技术学院《商业策划与项目管理》2024-2025学年第一学期期末试卷
- 上海电力大学《教育技术与应用能力训练》2024-2025学年第一学期期末试卷
- 高血压急症护理要点与药物治疗方案
- 心脏外科冠心病冠脉搭桥术后护理管理手册
- 泌尿系结石预防指南及管理策略
- 骨折急救处理方案
- 放射性碘治疗甲状腺癌监测方案
- 急诊科脑卒中监护措施
- 2025年检验类之临床医学检验技术(师)每日一练试卷B卷含答案
- 2025视觉设计师秋招笔试题及答案
- 2025年超声产前筛查试题及答案
- 2025年工会考试真题及答案
- 2023年食品筛选清洗机械相关行业项目成效实现方案
- 2026届广东肇庆市高三一模英语试题答案讲解课件
- 2025年广东普法考试试题及答案
- 2024年云南云天化股份有限公司招聘考试真题
- 2025安徽合肥市大数据资产运营有限公司招聘35人笔试历年参考题库附带答案详解
- 2025年山东省公务员考试申论综合分析专项训练试卷(含答案)
- 2025-2030零工经济发展现状及平台商业模式优化策略研究报告
- 2024年4月全国自考《马克思主义基本原理概论》试题及答案
评论
0/150
提交评论