模拟计算器实验报告.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文档。上传文档
查看更多
课程设计报告 课程设计题目:模拟机算器程序 学生姓名: 专 业: 班 级: 指导教师: 柯尊国 网络工程 1021130321 高永平、姜林 2011年11月27日 东华理工大学 课程设计评分表 学生姓名:柯尊国 班级学号:21 课程设计题目:模拟机算器程序 S 评 实 选 题 O m 二 理 合 易 难 中 适 量 作 工 O 1i 能力水平 O 11 O 叭等 应图 能制 O ■ - O 成果质量 O E n O O 分 总 00 11 日 刀 年 一?课程设计题目 二?问题分析 算法分析 2?流程图 算法设计 算法描述 系统类图 属性和方法定义 运行实例 经验与体会 参考文献 七?源代码 课程设计题目 模拟计算器程序 问题描述 设计一个程序来模拟一个简单的手持计算器。程序支持算术运算+、-、*、人二、以及c (清 除)、A (全清除)操作。 基本要求 程序运行时,显示一个窗口,等待用户输入,用户可以从键盘输入要计算的表达式,输 入的表达式显示在窗口中,用户键入^符号后,窗口显示出结果。 测试数据 程序输入不少于5种不同的表达式进行测试。 实现提示 可定义一个计算器类,该类包括两个组件对象,一个计算引擎和一个用户接口,用户接 口对象处理接受的键盘输入信息,并显示答案,计算引擎对象对给出的数据执行相应操作, 并存储操作的结果。 选作内容 如果用户输入的表达式不合法,可以判别出来并给出相应的错误提示。 问题的分析 此程序设计主要运用了栈,利用栈后进先出的原理,建立两个栈,操作数栈和操作符栈, 先将数据和运算符分別压入这两个栈,判断栈内和栈外运算符的优先级,依据运算符的优先 级判断是应再次压入运算符,还是将数据和运算符弹出栈,在栈外进行运算,再将所得的结 果压入栈,继续进行与计算,直至运算结束。 例如;计算5/2+1-2*3= 操作数2入操作数栈, 2 运算符”厂入运算符栈, 操作数5入操作数栈 5 数字栈 运算符栈 运算符“ + ”入运算符栈顶 比较后,将2, 5出栈运算, 并将结果入数字栈 2.5 运算符“ + ”入字符栈,操作 数1入数字栈 数字栈 1 2.5 数字栈 字符栈 字符栈 运算符“一”入运算符栈顶比较后,将 1, 2.5出栈运算,并将结果压入操作 数栈 TOC \o 1-5 \h \z | 3.5 运算符“一”入运算符栈 字符栈数字栈 字符栈 操作数2入操作数栈,运算符“ ” 入运算符栈顶比较后压入运算符栈 3 将操作数3压入操作数栈 2 3.5 数字栈 字符栈 当扫描到二号时,操作数3和2出栈 运算符*出栈,进行运算,运算结果入 操作数栈 3.5 字符栈运算符栈空,操作数栈中运算为运算 字符栈 运算符栈空,操作数栈中运算为运算 操作数6和2出栈,运算符“一”] 出栈,进行运算,运算结果入操作数 栈 ] 1 3.5 结果分析: 设置两个栈,运算数栈和运算符栈,然后,口左向右扫描表达式,遇操作数进操作数栈,遇 操作符栈则与操作符栈顶运算符比较:若当前操作符大于操作符栈顶,则当前操作符进入操 作符栈;若当前操作符小于等于运算符栈顶,次栈顶出栈,同时操作数栈顶也出栈,形成一 个运算,并将运算的结果压入数字栈。 算法的设计 1、 创建一个calculator类,将计算器需要用到的函数都封装起來,形成一个整体。 2、 设计成员函数及数据。 首先定义两个私有的结构体savel和save2分别用来存放数字和运算符,在结构体 内定义整型的栈顶元素top,和存放数据及运算符的数组double n[MAX]和char n[MAX]o 定义了一个空的构造函数calculator()o 函数 bool stack 1 empty(savel s), bool stack2empty(save2 s)分别判断数字栈和字符栈 是否为空,若栈顶为?1则空则返回1表示真,否则返回0表示假。 函数 void push 1 (save 1 s,double num);, void push2(save2 s,char op);分别将数字和 字符压入栈。若所存储的内容已经数组的最大限度,则显示“栈已满”,否则将数字和 字符压入栈顶。 函数 void pop 1 (savel s,double num), void pop2(save2 s,char op)分别是将栈内 的数字和字符弹栈,存储在num和op中。首先判断栈是否为空,若空则显示“栈为空”, 否则将栈顶元素分别赋值给num和op。 函数int in(char op), int out(char op)分别判断栈内和栈外运算符的优先级。 在栈内,“ + ”“一”返回2, 返回4,在栈外“ + ”“一”返回返回3, 当遇到“ + ”或“一”和或“/”

文档评论(0)

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

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

1亿VIP精品文档

相关文档