算术表达式求值.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文档。上传文档
查看更多
题目:算术表达式求值问题内容: 一个算术表达式是由操作数(operand)、运算符(operator)和界限符(delimiter)组成 的。假设操作数是正整数,运算符只含加减乘除等四种运算符,界限符有左右括号和表达式 起始、结束符“#”,如:#(7+15)*(23-28/4)#。引入表达式起始、结束符是为了方便。编程利用“算符优先法”求算术表达式的值。要求:(1)从键盘读入一个合法的算术表达 式,输出正确的结果。(2)显示输入序列和栈的变化过程。选作内容:操作数类型扩充到 实数。 一:问题分析和任务定义 问题分析: 分析题目并参考书目可以基本了解完成一个算术表达式所存在的问题。对一个表达式来说,由于各种运算符和界限符的运用,运算符和界限符的优先级决定了算术表达式不是简单的从左往右的运算。因此设计算法完成算术表达式时就要考虑各运算符和界限符的优先 级,同时还要注意操作数与算符的判断。在算法中要求完成操作数、运算符和界限符的出入栈,运算符和界限符的优先级比较和操作数之间的运算。最后完成的算法要求输入一个算术表达式,能够正确的计算出来它的最后结果并输出。为了不用考虑算符优先级,将输入的中缀表达式转换成后缀表达式。 这样就可以知道实现本程序需要进行的操作: 建立空栈,存储信息; 运用函数实现出入栈和取栈顶元素操作。 将中缀表达式转换成后缀表达式。 实现后缀表达式的求解。 建立一个函数使中缀表达式能够被有效输入。本程序的关键是中缀表达式转换成后缀表达式 对于栈的操作( 1)建空栈 setStack() 运算的结果是将栈顶元素返回。 (2)清空栈EmptyStack(),可以用于判断栈内元素的有无,在栈顶元素的输出被使用。(3)入栈 push(),出栈 pop()和取栈顶元素 top()。 任务定义 本演示程序中,利用栈将输入的中缀表达式转换成后缀表达式,并完成其求解过程来达到计算表达式的目的。 演示程序以用户和计算机的对话方式执行,即在计算机终端上显示提示信息之后, 由用户在键盘上输入演示程序中需要输入的数据,以“回车符”为结束标志。相应的输入数据和运算结果显示在其后。 程序执行的命令包括: 输入任意一个整数表达式;2)是否继续。 测试数据 输入一个整数表达式:3+(5*8-9) 输出: 后缀表达式:3 5 8 *9 -+ 结果为:34 继续?(y/n) 二、数据结构的选择和概要设计 算术表达式中各数据元素间存在一种线性关系,设计的数据类型如下: #define MAXNUM 50 typedef int DataType; typedef struct { DataType s[MAXNUM]; int t; }SeqStack,*PSeqStack;//定义一个类型名为 SeqStack 的数据类型 本算法设计过程中只采用加减乘除等四种运算符,题目要求借助栈完成算法设计,提示 中要把中缀表达式转换成后缀表达式计算,因此操作运算包括要建空栈、清空栈、进栈、出栈、取栈顶元素,中缀表达式转换成后缀表达式,后缀表达式的运算等。将运算符和界限符一起描述为算符,本程序的设计如下: 先定义一下数据结构来存储算术表达式。 建空栈 setstack(),清空栈。 对栈进行的运算函数,出入栈和取栈顶元素。 中缀表达式转换成后缀表达式的函数 its()。 后缀表达式计算函数。 设计存放后缀表达式的队列。 主函数 main(),使得整个程序完整进行。三、详细设计和编码 为了实现概要设计中的所有数据类型,对每个操作给出算法。对主程序和其他模块也都需要写出算法。 数 据 类 型 #define MAXNUM 50 typedef int DataType; typedef struct { DataType s[MAXNUM]; int t; }SeqStack,*PSeqStack;//定义一个类型名为 SeqStack 的数据类型 建空栈和其它关于栈的操作 这部分为栈的运算问题。为后面表达式转换和计算做准备。这方面的知识书上有系统讲到,不需要过多去设计算法。 表达式的转换和计算 将中缀表达式转换成后缀表达式,顺序扫描中缀算术表达式,当读到数字时直接将起送 至输出队列中;当读到运算符时,将栈中所有优先级高于或等于该运算符的运算符弹出,送 至输出队列中,再将当前运算符入栈;当读入左括号时,即入栈;当读入右括号时,将靠近栈的第一个左括号上面的运算符依次弹出,送至输出队列中,再删除栈中左括号。在计算后 缀表达式式,最后保存的值是最先取出参与运算,所以要用到栈。 读到数字时直接送至输出队列中: switch(c1) { case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: case

文档评论(0)

tianya189 + 关注
官方认证
文档贡献者

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

认证主体阳新县融易互联网技术工作室
IP属地上海
统一社会信用代码/组织机构代码
92420222MA4ELHM75D

1亿VIP精品文档

相关文档