c++ 计算器Word格式文档下载.docx
《c++ 计算器Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《c++ 计算器Word格式文档下载.docx(19页珍藏版)》请在冰豆网上搜索。
使用Word中自带的“公式编辑器”
5.装订
左侧装订
三、考核方式(供参考)
1.作业提交:
源文件(压缩文件命名:
学号_姓名_班级)、书面课程设计说明书(各占30%)
2.考勤:
10%
3.答辩:
30%
(1)随机抽取班级人数的30%进行公开答辩
(2)可自愿申请参加答辩。
(3)未参加答辩的同学成绩最高为中。
(4)答辩时长每人8-10分钟,介绍本人的作品或程序,并回答老师提出的问题。
课程设计说明书
题目:
用C++编程设计简易计算器
姓名:
学号:
___________________
班级:
_____
兰州交通大学
电信学院软件工程系
2016年7月7日
课程设计任务书
课程名称
程序设计课程设计(C++)
题目
用C++编程设计简易计算器
姓名
学号
班级
设
计
任
务
用windows系统下的visualC++6.0编程环境,编程设计简易计算器。
要求实现“+”、“-”、“*”、“/”、“(”、“)”五种运算符和数值各种结合下的计算。
此次编程,我们主要使用了“栈”、“string”存储变量表达式、“deque”作为存储容器,运用了栈“先入后出”的特点,队列“先入先出”的特点,以及缓冲空间,三者结合实现基础计算的目的。
要
求
程序质量:
1.符合课题要求,实现相应功能;
可以加以其他功能或修饰,使程序更加完善、合理。
2.要求界面友好美观(版权页、登录页…),功能明确,操作方便。
(登录页的用户名:
abcd,密码:
1234)
3.代码应适当缩进,并给出必要的注释,以增强程序的可读性。
4.程序调试完后需生成可执行文件。
课程设计说明书:
课程结束后,上交课程设计说明书和源程序。
课程设计说明书的内容及格式参见课程设计要求。
指导教师
签字
课程设计评分表
课程设计题目:
学院
专业
评价指标
指标内涵
分值
评分
选题与设计完成情况
选题难度
选题难度分为两个等级,A类选题为一级,B类选题为二级
30
工作量
工作量饱满,工作认真、严谨,遵守纪律,与同学团结协作、协调能力强,能按时完成设计任务。
综合运用
知识
综合运用知识能力强,能较系统地运用有关理论与知识解决实际问题。
能够独立查阅文献资料,从事调查研究;
具有收集、整理、加工各种信息及获取新知识的能力。
设计水平与实际能力
能独立开展设计工作,能熟练掌握和运用所学基本理论、基本知识和基本技能分析解决相关理论和实际问题,设计方案合理可行,界面友好,符合课题要求,实现相应功能;
可以加以其他功能或修饰,使程序更加完善、合理;
操作方便易行。
说明书撰写
写作水平
语言表达清晰,报告内容详实,能对本人所做工作进行详细论述。
文档质量
能够按照给定格式排版,页面美观。
答辩
思路清晰,语言流畅,回答问题准确。
(无此环节则删除此行)
考勤
按时出勤,不迟到早退,以每次点名为准
10
成绩
评阅时间:
2016年7月日
一.系统概述
首先从string读入一连串表达式,取出每一个字符后装入一个deque容器coll1中。
再从该容器取出每一个元素,利用栈将中缀表达式转换为后缀表达式,使用相对便于求值的后缀表达式来求值。
之后,我们将转换成的后缀表达式,装入容器coll3中。
最后,从coll3中取出元素,逐一处理,然后根据后缀表达式的计算公式(可根据相关资料查找),计算出相关表达式的值,实现简易计算器的功能。
二.系统分析
(一)功能分析
我们先定义输入流并建立栈A存放运算符,B存放结果,从输入流中读入一个操作数压进B,读入一个运算符压进A,如此反复。
则有:
读入一个元素i,如果i是操作数,压入B,跳转到1,如果i是运算符(不包含括号),跳转3.1,.如果i是,跳转4.1,如果i是EOF,即输入流结束,反复弹出A栈顶压入B,直到A为空,算法结束,B从栈底到栈顶的符号即为后缀表达式(需要把B翻个个儿)
(注:
3.1.判断A的栈定符号t,如果t不为(,且优先级大于等于i,则弹出t压入B,跳转,如果t为空,即栈中为空,或其他情况直接把i压入A,跳转到1,4.1.弹出A的栈顶压入到B,如此反复直到弹出的符号为(,(和)不要压入B,跳转到1)
1.从后缀表达式队列中依次取出元素
2.如果是操作数,那么将其压入“结果栈”中;
3.如果是操作符,从“结果栈”中取出两个元素,进行计算。
(注意从栈中取元素的顺序和操作数的顺序是相反的)
4.
遍历后缀表达式结束后,“结果栈”中的元素就是最终的结果
(二)流程图
三.系统详细设计
(1)获得符号的优先级
switch(c)
{
case'
+'
:
-'
return0;
//如果是加减,返回0
break;
*'
/'
return1;
//如果是乘除,返回1
('
)'
return-1;
//如果是括号,返回-1
(2)判断符号的优先性
voidcheck(charc,stack<
char>
&
coll2,deque<
coll3)
{
if(coll2.empty())
coll2.push(c);
return;
}
if(isPra(c))
if(c=='
)coll2.push(c);
else
while(coll2.top()!
='
){//弹出所有元素直到遇到左括号
charch=coll2.top();
coll3.push_back(ch);
coll2.pop();
//当遇到左括号时,弹出但不加入coll3(后缀表达式中)
{//如果不是括号
charsym=coll2.top();
//取出栈顶元素,与当前符号进行优先性比较
if(getPri(c)<
=getPri(sym))
{//比较两符号的优先性
//如果c的优先性比栈顶符号小或等于,弹出栈顶元素
coll3.push_back(sym);
//并将其压入coll3(后缀表达式)中
check(c,coll2,coll3);
//递归调用check,比较当前符号c与下一个栈顶符号的优先性
else
//如果c比栈顶符号优先级大,那将c压入coll2(操作符栈)中
}
(3)前缀表达式转换为后缀表达式
{//判断符号的优先性
(4)前缀表达式转换为后缀表达式
voidallocate(deque<
coll1,stack<
{//从coll中取出元素,分配元素到coll2和coll3中
while(!
coll1.empty())
charc=coll1.front();
coll1.pop_front();
if(c>
0'
c<
9'
)
coll3.push_back(c);
elsecheck(c,coll2,coll3);
//调用check函数,针对不同情况作出不同操作
coll2.empty()){//如果输入结束,将coll2的元素全部弹出,加入后缀表达式中
charc=coll2.top();
不包含括号,运算符放在两个运算对象的后面,所有的计算按运算符出现的顺序,严格从左向右进行(不再考虑运算符的优先规则,如:
(2
+
1)
*
3
,
即2
1
)
四.程序测验:
(1)计算“7+2=”,计算结果是“9”。
(2)计算“7-2=”,计算结果是“5”。
(3)计算“9/3=”,计算结果是“3”。
(4)计算“4*5=”,计算结果是“20”。
(5)计算“(3+4)*2-5/3=”,计算结果是“13”。
(6)计算“((3-5)*3-5)/6=”,计算结果是“-1”。
五.程序代码
#include<
stack>
iostream>
deque>
string>
usingnamespacestd;
constintMAX=10000;
boolisPra(char