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