数据结构模拟乘法器资料.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据结构模拟乘法器资料

课程设计 题 目 名 称 设计一个模拟计算器 课 程 名 称 数 据 结 构 学 生 姓 名 学 号 专 业 电子信息科学与技术 指 导 教 师 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() 本程序实现的流程: INCLUDEPICTURE \d /retype/zoom/fb44d231f111f18582d05a01?pn=3x=0y=0raww=518rawh=720o=png_6_0_0_158_112_583_810_892.979_1262.879type=picaimh=333.59073359073363md5sum=1e6f79e829d8be1ff9aa29d64c3e784dsign=a9c3934bc0zoom=png=793-15929jpg=1011-1011 \* MERGEFORMATINET  三:详细设计和编码 首先定义两个数组,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; 当遇到*或/时,先查看操作符栈中是否有优秀级比它大的或者一样大的运算符,有的话就将其

您可能关注的文档

文档评论(0)

bbnnmm885599 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档