- 1、本文档共21页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
课程设计题 目 名 称设计一个模拟计算器课 程 名 称 数 据 结 构 学 生 姓 名学 号专 业 电子信息科学与技术 指 导 教 师2015年 12 月 30 日一:问题分析和任务定义本程序写的是模拟计算器。要求设计一个模拟计算器的程序,要求对包含加、减、乘、除、括号运算符及SQR和ABS函数的任意整型表达式进行求解。这里可以做一个扩展,比如实现求某数的N次方,求模,一些常用的三角函数等。这个程序实际上就是对一个表达式进行计算。而一个算术表达式中包含各种运算符,每个运算符的等级可能会不同,这就成了本程序需要解决的一个主要的问题之一了。另外计算器中需要有各种数学函数,比如:abs sqrt sin cos tan等,如何对这些函数进行处理,也是本程序能成功的一个关键。还有一个问题就是如何处理操作符和操作数之间的关系也是一个要点。例如:1+2*(3-2/1),经过怎么样的变换和处理能得出结果5。数据的输入这里应该要用字符,然后通过字符和整形之间的关系进行转换即可,这样处理的话,就方便很多了。二:概要设计和数据结构选择输入的时候将一个算术表达式用一个字符数组来接收,故需要对这个数组进行处理,让操作数和操作符分开,这里我想把开始的算术表达式转换成一个后缀表达式,这样在进行计算的时候就简单多了。而在转换的过程中,对运算符的处理极为重要,这里运用堆栈,用堆栈的先进后出的特点,来处理运算符优先级的问题,让其成功转换成后缀表达式。而在对后缀表达式进行处理的时候,又需要一个堆栈,这个堆栈存放操作数的。并将运算结果存入该栈中。两个堆栈的数据结构如下:struct{ char data[Maxlen];int top;}optr; //定义运算符栈struct{ double data[Maxlen];int top;}opnd; //定义操作数栈这里定义了类型,并且一起定义了两者类型的对象optr,opnd。在将算术表达式转换成后缀表达式,定义change函数;在对后缀表达式进行处理时,定义jisuan函数,另外本程序有个欢迎界面,由meun函数实现。因此主函数于各函数之间的关系为: meun()jisuan()本程序实现的流程:三:详细设计和编码首先定义两个数组,p[400]用来存放算术表达式,q[400]用来存放后缀表达式。由前面的数据结构定义两个对象optr,opnd。当输入一个表达式后,定义i作为q的下标,定义dh=1表示是负号,初始化运算符栈optr.top=-1;让后对p进行扫描,当p指向的为数字字符,则将此字符如q,后在往q中输入#,具体为: while (*p=0 *p=9){q[i]=*p;i++; p++; }if (*p==.){ q[i]=.; i++; p++;while (*p=0 *p=9){q[i]=*p;i++; p++;}}q[i]=#; i++; dh=0;p后移,继续扫描,当遇到+或-时,执行 if (dh==1) { if (*p==-)optr.top++;optr.data[optr.top]=@; p++; break; }while (optr.top!=-1 optr.data[optr.top]!=(){ q[i]=optr.data[optr.top];optr.top--; i++;}optr.top++;optr.data[optr.top]=*p; p++; dh=0; break;当遇到*或/时,先查看操作符栈中是否有优秀级比它大的或者一样大的运算符,有的话就将其他的出栈,最后自己入栈。执行:while (optr.data[optr.top]==* || optr.data[optr.top]==/|| optr.data[optr.top]==s){ q[i]=optr.data[optr.top];optr.top--; i++; }optr.top++;optr.data[optr.top]=*p; p++; dh=0; break;当遇到(时,此时不需要别的其他的操作,只需将其入操作符栈,并将dh=0;当遇到)时,此时需要将(之前的操作符全部出栈,具体操作如下:while (optr.data[optr.top]!=(){ q[i]=optr.data[optr.top];optr.top--; i++;}optr.top--; p++; dh=0; break;当遇到^时,根据运算符的优先级,执行:while (optr.data[optr.top]==^){ q[i]=optr.data[optr.top];optr.top--;i++;}o
您可能关注的文档
- 实验动物营养与饲料要点.ppt
- 舒婷我的祖国要点.ppt
- 实验二:两栖纲形态解剖要点.pptx
- 疏浚三期04标施工管理要点.doc
- 实验二BJT共射极电压放大电路的要点.ppt
- 输变电工程安全文明施工设施配置标准要点.docx
- 实验二波段组合与几何校正-副本要点.doc
- 实验二蛋白质的颜色反应要点.ppt
- 实验二环境中的微生物要点.ppt
- 实验二进程同步实验要点.doc
- 2025化工技能鉴定能力检测试卷含完整答案详解(全优).docx
- 中学物理实验教学中学生实验报告撰写能力的培养研究教学研究课题报告.docx
- 2025贵州毕节市农业农村局下属事业单位第一批次人才强市暨高层次急需紧缺人才引进实施备考试题及答案解析.docx
- 高中生物教学应用:校园植物季相变化与生态系统服务功能研究教学研究课题报告.docx
- 基于人工智能的老年教育课程设计与教学效果评估教学研究课题报告.docx
- 《工业园区大气污染物协同控制技术与环境保护政策研究》教学研究课题报告.docx
- 《小学科学教师教学画像构建与教学领导力发展路径研究》教学研究课题报告.docx
- 《5S管理在制造业企业生产现场管理中的实施效果与生产组织》教学研究课题报告.docx
- 2025安徽阜阳市颍上县招募机关事业单位就业见习人员51人备考试题及答案解析.docx
- 人工智能教育平台在初中英语写作教学中的文化适应与语言支持教学研究课题报告.docx
文档评论(0)