网站大量收购独家精品文档,联系QQ:2885784924

C与数据结构专题设计三 简易计算器.docx

  1. 1、本文档共35页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C与数据结构专题设计三 简易计算器

一.问题描述由键盘输入一算术表达式,以中缀形式输入,试编写程序将中缀表达式转换成一棵二叉表达式树,通过对该的后序遍历求出计算表达式的值。二.具体要求a.要求对输入的表达式能判断出是否合法。不合法要有错误提示信息。b.将中缀表达式转换成二叉表达式树。c.后序遍历求出表达式的值三.数据结构一棵表达式树,它的树叶是操作数,如常量或变量名字,而其他的结点为操作符。a.建立表达式树。二叉树的存储采用了链式存储。当要创建二叉树时,先从表达式尾部向前搜索,找到第一个优先级最低的运算符,建立以这个运算符为数据元素的根结点。注意到表达式中此运算符的左边部分对应的二叉绔为根结点的左子树,右边部分对应的是二叉绔为根结点的右子树,根据地这一点,可用递归调用自己来完成对左右子树的构造。b.求表达式的值。求值时同样可以采用递归的思想,对表达式进行后序遍历。先递归调用自己计算左子树所代表的表达式的值,再递归调用自己计算右子树代表的表达式的值,最后读取根结点中的运算符,以刚才得到的左右子树的结果作为操作数加以计算,得到最终结果。四.设计与实现为了使用二叉树实现表达式的顺序运算,我们分别构造了结点类,用来作为二叉树的基本结构,后构造二叉树类,构造函数并建立根节点,先对二叉树的根节点进行运算,再通过对当前节点的左孩子右孩子节点进行判断、计算、删除,以一个递归调用函数即后序遍历,从根节点开始计算,如果子树中不为空且不为数据则先遍历左子树然后遍历右子树然后计算根节点,从而实现按照运算符优先级顺序完成表达式计算的功能。并在每次计算完成后询问操作者意愿从而决定是否进行下一次运算。以下介绍程序功能的实现:系统首页:功能提示,输入待计算的表达式,以完成计算:相应代码:system(cls);cout*******************************************************************endl;cout 二叉树计算器endl;cout*******************************************************************endl;char c;while(choice==y||choice==Y) { cout\n请输入表达式:\n; cininfix; cout--------------------------------------------------------------------------------\n; cout表达式为: infix\n; 2.进行简单的四则运算对输入的表达式首先判断正误,然后按照运算的优先级分别进行运行,并且分别输出每步运算的结果。先进行乘方,然后乘除,最后再计算加减,先算括号内后算括号外,正确度一目了然。(1)对于负数也可以进行相应的加减乘除以及乘方的运算。对于负数的运算,也和正数一样,先算括号内的后算括号外的,其次算乘方,再算乘除,最后进行加减的运算。负数的加减乘除:负数的乘方运算:正指数幂运算:负指数幂运算:可以进行小数的计算,对于小数采用浮点数的存储方式和输出方式,计算精度可以取到小数点后五位。小数的加减乘除:小数的运算,依然按照先乘除后加减,先算括号内后算括号外的顺序运算。小数的乘方和开方:正小数幂次方:负小数幂次方:开正小数次方:开负小数次方:五.测试与结论此报告在C-Free5.0环境下进行测试。C-Free是一款C/C++集成开发环境(IDE)。C-Free中集成了C/C++代码解析器,能够实时解析代码,并且在编写的过程中给出智能的提示。C-Free提供了对目前业界主流C/C++编译器的支持,可以在C-Free中轻松切换编译器。可定制的快捷键、外部工具以及外部帮助文档,使在编写代码时得心应手。完善的工程/工程组管理使你能够方便的管理自己的代码。以下是各种测试用例。注:较为简单和常规的测试用例在上一部分“算法的实现”中已经给出,下面只给出一些具有代表性的测试用例。1.表达式错误的情况在表达式错误的情况下,程序能够运行,但是不能够正常运算,而是给出错误的提示信息,提醒重新输入正确的表达式。下图表示以0作为除数时程序所给的提示信息“Infinity”下图为计算表达式0^(-3)时候的输出,由于表达式没有数学意义,所以也就没有正确的结果,因而程序运行后得到的结果是“Infinity”.下图显示的是输入的表达式不符合数学规律时的错误提示信息。下图表示输入表达式中含有不合法的字符,例如字母时候,程序运行时所给的提示信息。下图所示为表达式错误的另外一种情形,即输入的括号多余的情形。下面两个测试用例,为表达式输入错误的情况,

文档评论(0)

2017ll + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档