最新C++计算器程序课程设计.doc
《最新C++计算器程序课程设计.doc》由会员分享,可在线阅读,更多相关《最新C++计算器程序课程设计.doc(23页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精品资料C+计算器程序课程设计.荆楚理工学院课程设计成果学院: 计算机工程学院 班 级: 14计算机科学与技术班 学生姓名: 杨悦 学 号: 2014404010215 设计地点(单位): 设计题目: 模拟计算器程序 完成日期: 2016 年 6 月 30 日 指导教师评语: _成绩(五级记分制): 教师签名: 目 录1 设计任务1.1设计目的运用所学C+知识,完成模拟计算器程序,通过实践加强对所学知识的理解和巩固。1.2设计内容设计一个程序来模拟一个简单的手持计算器。程序支持幂运算、算术运算+、-、*、/、=、以及Black(清除)、Esc(全清除)等操作。1.3设计指标或者要求程序运行时,
2、显示一个窗口,等待用户输入,用户可以从键盘输入要计算的表达式,输入的表达式显示在窗口中,用户键入“=” 符号回车后,窗口显示出结果。2 设计过程通过对微软附件计算器软件进行调研、分析,研究,使用。我们了解到了作为一个计算器所应该的一些简单功能,我们知道了怎样使编写的计算器程序向微软附件计算器靠拢。其中计算器软件的主要功能是:1)可以进行加减乘除四则运算2)可以实现科学计算器的部分计算功能3)可以进行清零运算4)可以进行退格键运算5)可以进行连续计算2.1程序功能void menu();/位于calculate函数后面的菜单函数声明void guide();/位于主函数后面的指导函数的声明dou
3、ble D_Operate(double x,char op,double y)/双目运算符的运算定义double S_Operate(char op,double x)/前缀单目运算符的运算定义char Precede(char op1,char op2) /判断符号的优先级 op1在返回的结果符的左边 op2在右边/用于判定运算符的优先级 以决定是把运算符压栈 还是把栈内的运算符弹出来进行计算int match(string s)/栈结构的括号匹配检测函数class NUMstack/运算数栈 void start()/初始化栈清空栈顶指针置底 for(int i=0;i1000;i+)
4、numi=0; top=0; class OPERstack/运算符栈 public: char oper1000; int top; void start()/初始化函数栈清空栈底放一=用于判定算式结束 oper0=; for(int i=1;i1000;i+) operi=NULL; top=1;/栈顶指针置于栈底的上一位 void calculate(string equation)/算式计算函数(关键函数) NUMstack number;/定义运算数栈变量number OPERstack oper;/定义运算符栈变量oper number.start(); oper.start();
5、/把两个栈初始化number.numnumber.top=tt;/运算结果压回原来yuan1在栈内的位置 number.lift();/提升指针 temp1=oper.getTop(); rep=Precede(temp1,temp2);/再判优先级rep=Precede(temp1,temp2);/双目运算符的计算if(number.num0=ceil(number.num0) coutequationnumber.num0endl; else coutequationfixedsetprecision(8)number.num0go_on;/可以循环进行算式计算运行程序2.2程序流程图进入
6、界面,输入第一个操作数输入“=”键,输出运算结果选择计算算式选择,进行运算根据所选功能,选择下一个操作数显示运算结果3软件运行或者测试结果进入界面输入“1”,查看说明按任意键,返回界面,并输入“2”输入算式“(2+3)*10/2=”输入“y”后,继续输入算式“(1+2/3=”4 软件设计过程中遇到的问题以及解决办法经过大约一个星期的设计,计算器基本完毕。在本次课程设计中困难遇到不少,比如如何对输入的一个字符数组中的单个字符进行整型运算、如何能循环菜单、如何倒叙输出等。由于设计时间较短,所以该计算器还有很多不尽如人意的地方,比如功能不够完善、函数不够完整等多方面问题。在这次系统开发的过程中,我深
7、深体会到了做一个系统,首先要进行需求分析的重要性,也了解到了制作一个软件的不易。5 总结通过本次课程设计学到了很多东西,对于c+对象的含义有了进一步的认识。学习不能只是停留在表面,此次课程设计为以后的学习积累了经验,设计不比编写容易,只有一个好的规划才能写出好的程序。不过也通过本次发现了自己的不足之处。总是:本次课程设计受益匪浅,动手能力大大增强。参考文献1李素若.C+面向对象程序设计.北京:中国水利水电出版社,2013.2郑莉,傅仕星编,C+面向对象程序设计,清华大学出版社,2003年9.3谭浩强编,C+面向对象程序设计,清华大学出版社,2005年7月.4李师贤等译,C+精髓,机械工业出版社
8、,2002年8月.5Davis Chapman,学用Visualc+6.0,清华大学出版社,2001年7月出版6郑莉,傅仕星编,C+语言面向对象程序设计习题与实验指导,清华大学出版社,2003年9月.附录(程序源代码)#include#include#include#includeusing namespace std;void menu();/位于calculate函数后面的菜单函数声明void guide();/位于主函数后面的指导函数的声明double D_Operate(double x,char op,double y)/双目运算符的运算定义 double a;/计算结果 switc
9、h(op) case+: a=x+y;break; case-: a=x-y;break; case*: a=x*y;break; case/: a=x/y;break; case: a=pow(x,y);break;/幂运算包括乘方和开方 /因为都是利用double进行运算 因此不定义取模运算 return a;double S_Operate(char op,double x)/前缀单目运算符的运算定义 double a;/计算结果 switch(op) cases: a=sin(x);break; casec: a=cos(x);break; caset: a=tan(x);break;
10、 casel: a=log10(x);break;/以10为底的对数 casen: a=log(x);break;/以e(2.718281828)为底的对数 case_: a=-x;break;/取负用下划线代替负号 定义为一元运算 return a;char Precede(char op1,char op2) /判断符号的优先级 op1在返回的结果符的左边 op2在右边/用于判定运算符的优先级 以决定是把运算符压栈 还是把栈内的运算符弹出来进行计算 if(op1=+|op1=-)&(op2=+|op2=-|op2=)|op2=)| (op1=*|op1=/)&(op2=+|op2=-|op
11、2=*|op2=/|op2=)|op2=) |(op1=&(op2=+|op2=-|op2=*|op2=/|op2=)|op2=|op2=s|op2=c|op2=t|op2=_|op2=l|op2=n) |(op1=_|op1=s|op1=c|op1=t|op1=l|op1=n)&(op2=+|op2=-|op2=*|op2=/|op2=)|op2=|op2=s|op2=c|op2=t|op2=_|op2=l|op2=n) return ;/上述情况下 栈顶运算符优先级高于待定运算符 需弹栈 if(op1=(&op2=)|(op1=&op2=) return =; else return ;i
12、nt illegal_char(string s,int i)/非法输入字符判定函数 int j=0; while(j=0&sj=9) j+; else if(sj=+|sj=-|sj=*|sj=/|sj=.|sj=(|sj=)|sj=|sj=!|sj=e|sj=_) j+; else if(sj=p&sj+1=i)|(sj=l&sj+1=n) j+=2; else if(sj=s&sj+1=i&sj+2=n)|(sj=c&sj+1=o&sj+2=s)|(sj=t&sj+1=a&sj+2=n)|(sj=l&sj+1=o&sj+2=g) j+=3; /以上都是标准的数字字符和运算符 如若存在其他
13、形式的字符 则是非法输入 else cout程序终止,存在非法的字符输入!endl; return 0; return 1;/没有非法字符 返回1 否则返回0int match(string s)/栈结构的括号匹配检测函数 int i=0,top=0; char stack50; while(si!=0) if(si=() stacktop=si; top+; /push 左括号压入栈内 if(si=) if(stacktop-1=() int a=i+1; stacktop-1=NULL; top-; /把与右括号匹配的左括号弹掉 else cout括号输入有误endl; return 0;
14、/多了右括号 括号失陪 返回非法 /pop( i+; if (top!=0) cout括号输入有误endl; return 0;/多了左括号 括号失陪 返回非法 return 1;/返回合法class NUMstack/运算数栈 public: double num1000; int top; void start()/初始化栈清空栈顶指针置底 for(int i=0;i1000;i+) numi=0; top=0; void push(char a)/因为有多位数的运算因此不能一压栈就提升栈顶指针 numtop=numtop*10+(a-0);/把字符转成数因为每次入栈之前要乘10 所以初始
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 最新 C+ 计算器 程序 课程设计
限制150内