模拟计算器实验报告.doc
《模拟计算器实验报告.doc》由会员分享,可在线阅读,更多相关《模拟计算器实验报告.doc(15页珍藏版)》请在冰豆网上搜索。
-----------东华理工大学------------
课程设计报告
课程设计题目:
模拟机算器程序
学生姓名:
专业:
班级:
指导教师:
2011年11月27日
东华理工大学
课程设计评分表
学生姓名:
柯尊国班级:
10211303学号:
21
课程设计题目:
模拟机算器程序
项目内容
满分
实评
选
题
能结合所学课程知识、有一定的能力训练。
符合选题要求
(5人一题)
10
工作量适中,难易度合理
10
能
力
水
平
能熟练应用所学知识,有一定查阅文献及运用文献资料能力
10
理论依据充分,数据准确,公式推导正确
10
能应用计算机软件进行编程、资料搜集录入、加工、排版、制图等
10
能体现创造性思维,或有独特见解
10
成
果
质
量
总体设计正确、合理,各项技术指标符合要求。
10
说明书综述简练完整,概念清楚、立论正确、技术用语准确、结论严谨合理;分析处理科学、条理分明、语言流畅、结构严谨、版面清晰
10
设计说明书栏目齐全、合理,符号统一、编号齐全。
格式、绘图、表格、插图等规范准确,符合国家标准
10
有一定篇幅,字符数不少于5000
10
总分
100
指导教师评语:
指导教师签名:
年月日
目录
一.课程设计题目
..................................................................................
二.问题分析
1.算法分析.....................................................................
2.流程图........................................................................
三.算法设计
1.算法描述.....................................................................
2.系统类图.....................................................................
3.属性和方法定义..............................................................
四.运行实例
................................................................................
五.经验与体会
................................................................................
六.参考文献
................................................................................
七.源代码
................................................................................
一:
课程设计题目
模拟计算器程序
问题描述
设计一个程序来模拟一个简单的手持计算器。
程序支持算术运算+、-、*、/、=、以及C(清除)、A(全清除)操作。
基本要求
程序运行时,显示一个窗口,等待用户输入,用户可以从键盘输入要计算的表达式,输入的表达式显示在窗口中,用户键入’=’符号后,窗口显示出结果。
测试数据
程序输入不少于5种不同的表达式进行测试。
实现提示
可定义一个计算器类,该类包括两个组件对象,一个计算引擎和一个用户接口,用户接口对象处理接受的键盘输入信息,并显示答案,计算引擎对象对给出的数据执行相应操作,并存储操作的结果。
选作内容
如果用户输入的表达式不合法,可以判别出来并给出相应的错误提示。
二.问题的分析
此程序设计主要运用了栈,利用栈后进先出的原理,建立两个栈,操作数栈和操作符栈,先将数据和运算符分别压入这两个栈,判断栈内和栈外运算符的优先级,依据运算符的优先级判断是应再次压入运算符,还是将数据和运算符弹出栈,在栈外进行运算,再将所得的结果压入栈,继续进行与计算,直至运算结束。
例如;计算5/2+1-2*3=
操作数2入操作数栈, 2
运算符”/”入运算符栈,
操作数5入操作数栈 5 /
数字栈运算符栈
。
运算符“+”入运算符栈顶
比较后,将2,5出栈运算,
并将结果入数字栈
2.5
数字栈字符栈
运算符“+”入字符栈,操作1
数1入数字栈
2.5 +
数字栈字符栈
运算符“—”入运算符栈顶比较后,将
1,2.5出栈运算,并将结果压入操作
数栈
3.5 —
运算符“—”入运算符栈
数字栈字符栈
操作数2入操作数栈,运算符“*”
入运算符栈顶比较后压入运算符栈 3
将操作数3压入操作数栈 2 *
3.5 —
数字栈字符栈
当扫描到=号时,操作数3和2出栈
运算符*出栈,进行运算,运算结果入
操作数栈
6
3.5 —
数字栈字符栈
操作数6和2出栈,运算符“—”
出栈,进行运算,运算结果入操作数
栈
6
3.5 —
数字栈字符栈
运算符栈空,操作数栈中运算为运算
-2.5
数字栈字符栈
结果分析:
设置两个栈,运算数栈和运算符栈,然后,自左向右扫描表达式,遇操作数进操作数栈,遇
操作符栈则与操作符栈顶运算符比较:
若当前操作符大于操作符栈顶,则当前操作符进入操作符栈;若当前操作符小于等于运算符栈顶,次栈顶出栈,同时操作数栈顶也出栈,形成一个运算,并将运算的结果压入数字栈。
开始
流程图
初始化数字栈和字符栈
读入字符c
Y
是否为“=”号
N
N是否为运算符Y字符栈是否为空Y
C入数字栈Y是否比字符栈顶优先级高 NN
C入字符栈数字栈顶元素和次栈顶元素
出栈,运算符栈顶出栈,
运算结果入数字栈结束
三.算法的设计
1、创建一个calculator类,将计算器需要用到的函数都封装起来,形成一个整体。
2、设计成员函数及数据。
首先定义两个私有的结构体save1和save2分别用来存放数字和运算符,在结构体内定义整型的栈顶元素top,和存放数据及运算符的数组doublen[MAX]和charn[MAX]。
定义了一个空的构造函数calculator()。
函数boolstack1empty(save1s),boolstack2empty(save2s)分别判断数字栈和字符栈是否为空,若栈顶为-1则空则返回1表示真,否则返回0表示假。
函数voidpush1(save1&s,doublenum);,voidpush2(save2&s,charop);分别将数字和字符压入栈。
若所存储的内容已经数组的最大限度,则显示“栈已满”,否则将数字和字符压入栈顶。
函数voidpop1(save1&s,double&n