c++ 计算器.docx

上传人:b****0 文档编号:324651 上传时间:2022-10-08 格式:DOCX 页数:19 大小:142.29KB
下载 相关 举报
c++ 计算器.docx_第1页
第1页 / 共19页
c++ 计算器.docx_第2页
第2页 / 共19页
c++ 计算器.docx_第3页
第3页 / 共19页
c++ 计算器.docx_第4页
第4页 / 共19页
c++ 计算器.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

c++ 计算器.docx

《c++ 计算器.docx》由会员分享,可在线阅读,更多相关《c++ 计算器.docx(19页珍藏版)》请在冰豆网上搜索。

c++ 计算器.docx

c++计算器

程序设计课程设计要求

一、课程设计说明书包括的内容及装订顺序

1.封面(附件1)

2.课程设计任务书(附件2)

3.课程设计评分表(附件3)

4.正文

包括目录(推荐使用Word目录自动生成功能)、系统概述、系统分析(包括整体程序的流程图)、系统详细设计(包括每个窗体或函数的流程图以及代码)、总结(项目或程序的不足、遇到的困难、解决办法、心得体会)、参考文献。

二、排版要求

1.纸型

A4

2.字体、格式要求

1.xxxxxxxx(一级标题,三号,居左,黑体,2倍行距)

(1)xxxxxxxx(二级标题,四号,居左,黑体,1.5倍行距)

xxxxxxxx(正文字体,五号,宋体,1.25倍行距)

2.xxxxxxxx

图名、表名采用小五号,黑体,表中的文字采用五号,宋体。

参考文献(五号,宋体,单倍行距)

3.图形及流程图

用Word中的绘制工具绘制图形或流程图,最后将整个图形进行组合以确保排版效果。

标注文字用文本框插入。

4.公式

使用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.程序调试完后需生成可执行文件。

课程设计说明书:

课程结束后,上交课程设计说明书和源程序。

课程设计说明书的内容及格式参见课程设计要求。

指导教师

签字

课程设计评分表

课程设计题目:

用C++编程设计简易计算器

姓名

学号

学院

专业

评价指标

指标内涵

分值

评分

选题与设计完成情况

选题难度

选题难度分为两个等级,A类选题为一级,B类选题为二级

30

工作量

工作量饱满,工作认真、严谨,遵守纪律,与同学团结协作、协调能力强,能按时完成设计任务。

综合运用

知识

综合运用知识能力强,能较系统地运用有关理论与知识解决实际问题。

能够独立查阅文献资料,从事调查研究;具有收集、整理、加工各种信息及获取新知识的能力。

设计水平与实际能力

能独立开展设计工作,能熟练掌握和运用所学基本理论、基本知识和基本技能分析解决相关理论和实际问题,设计方案合理可行,界面友好,符合课题要求,实现相应功能;可以加以其他功能或修饰,使程序更加完善、合理;操作方便易行。

说明书撰写

写作水平

语言表达清晰,报告内容详实,能对本人所做工作进行详细论述。

30

文档质量

能够按照给定格式排版,页面美观。

答辩

思路清晰,语言流畅,回答问题准确。

(无此环节则删除此行)

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'+':

case'-':

return0;//如果是加减,返回0

break;

case'*':

case'/':

return1;//如果是乘除,返回1

break;

case'(':

case')':

return-1;//如果是括号,返回-1

(2)判断符号的优先性

voidcheck(charc,stack&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();

}

coll2.pop();//当遇到左括号时,弹出但不加入coll3(后缀表达式中)

}

}

else

{//如果不是括号

charsym=coll2.top();//取出栈顶元素,与当前符号进行优先性比较

if(getPri(c)<=getPri(sym))

{//比较两符号的优先性

coll2.pop();//如果c的优先性比栈顶符号小或等于,弹出栈顶元素

coll3.push_back(sym);//并将其压入coll3(后缀表达式)中

check(c,coll2,coll3);//递归调用check,比较当前符号c与下一个栈顶符号的优先性

}

else

{

coll2.push(c);//如果c比栈顶符号优先级大,那将c压入coll2(操作符栈)中

}

}

}

(3)前缀表达式转换为后缀表达式

voidcheck(charc,stack&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();

}

coll2.pop();//当遇到左括号时,弹出但不加入coll3(后缀表达式中)

}

}

else

{//如果不是括号

charsym=coll2.top();//取出栈顶元素,与当前符号进行优先性比较

if(getPri(c)<=getPri(sym))

{//比较两符号的优先性

coll2.pop();//如果c的优先性比栈顶符号小或等于,弹出栈顶元素

coll3.push_back(sym);//并将其压入coll3(后缀表达式)中

check(c,coll2,coll3);//递归调用check,比较当前符号c与下一个栈顶符号的优先性

}

else

{

coll2.push(c);//如果c比栈顶符号优先级大,那将c压入coll2(操作符栈)中

}

}

}

(4)前缀表达式转换为后缀表达式

voidallocate(deque&coll1,stack&coll2,deque&coll3)

{//从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函数,针对不同情况作出不同操作

}

while(!

coll2.empty()){//如果输入结束,将coll2的元素全部弹出,加入后缀表达式中

charc=coll2.top();

coll3.push_back(c);

coll2.pop();

}

}

(注:

不包含括号,运算符放在两个运算对象的后面,所有的计算按运算符出现的顺序,严格从左向右进行(不再考虑运算符的优先规则,如:

(2 + 1) * 3 , 即2 1 + 3 )

四.程序测验:

(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

#include

#include

#include

usingnamespacestd;

constintMAX=10000;

boolisPra(char

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1