




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、紫金学院 Visual C+课程设计 2012级 计科、网络、软件南京理工大学紫金学院VC+课程设计报告课 程:VC+课程设计系 别:计算机系班 级:学 号:姓 名:课题名称:计算器与分数计算器起止时间:2013.11.262013.12.11指导教师:2013年 12 月1 程序功能介绍计算器实现计算器的功能,使它能够进行加,减,乘,除以及四则运算,还使它能够进行开方,正弦,余弦,正切运算,以及华氏温度转换为摄氏温度、摄氏温度转换为华氏温度的运算。分数计算器实现分数之间的加,减,乘,除的功能,以及分数与整数之间的比较,还有分数化小数的运算。2 课程设计要求计算器(1) 完善计算器程序,改为可
2、对实数操作。(2) 完善程序,改为多个操作数基本四则运算,遇到0为止。(3) 增加函数、完成四则混合运算,注意算法要考虑运算符的优先级,对应增加主菜单选项。(4) 添加语句,使四则运算具有测试功能,即计算机能够自动出题,并要求客户计算,同时计算机判断用户计算的对错并打分,要求十题为一个单元,加减运算时最高为两位数运算,乘法为两位数乘一位数,除法是两位数或三位数除一位数,且要求没有余数。分数计算器(1) 完善计算器程序,对main函数的结构进行改进,要求有详细的菜单选项界面,用户不选择退出就可以反复运算。(2) 完善程序,改为多个操作数基本四则运算,遇到0为止。(3) 增加函数、完成四则混合运算
3、,注意算法要考虑运算符的优先级,对应增加主菜单选项。(4) 添加语句,使四则运算具有测试功能,即计算机能够自动出题 ,并要求用户计算,同时计算机判断用户计算的对错并打分,要求十题为一个单元,每题一个运算符,参与运算的分子分母均为一位数,运算符包括加、减、乘、除及大于、小于等逻辑运算。3 对课程题目的分析计算器(1) 在编译计算器程序的时候,要注意类的定义,要用将类进行化简。可以将操作数改为类中的成员数据,可以直接用一个成员函数去实现一种运算方式。(2) 操作数和运算符的输入问题。程序中会涉及大量的操作数的输入,如果只用cin流输入而不加以处理,一旦输入出错,程序会出现非法循环,不能正确运行,要
4、避免这种情况得对输入cin流进行处理,使它能够接受非法输入,能够自动察觉并提示重新输入。(3) 要考虑新增的混合运算的算法,要注意四则混合运算中带括号与不带括号的特殊算法。(4) 测试程序是最麻烦的一项,测试程序是由计算机出题、用户计算,计算机判断对错并给出分数,计算机用随机随机数发生器给出运算符和两个操作数,加减乘都比较简单,但是除法要求没有余数,所以得在产生随机数时先使两个随机数做乘法,然后将结果和一个随机数输出作为除法的两个操作数,这样就能使除法没有余数。分数计算器类的封装,不要修改源程序类的定义,新增的实现混合四则运算的函数定义为全局函数,实现时在其中直接定义类的对象,可以充分利用已定
5、义的各种重载运算符,并且main函数要进行修改,使得每个菜单选项对应一项功能,供用户使用。4 程序设计和说明(说明算法思想、设计思路,给出重要的、关键的代码) (1)类的定义:class oopcalc private:double x,y;/私有变量X和Y double fartocel(double number1);/定义华氏温度转化为摄氏温度double celtofar(double number1);double sqroot(double number1);void calcsqr();void calccos();void calctan();void calcsin();pu
6、blic:double getX()return x;double getY()return y;double set()x=number1;y=number2;double calcadd(double number1,double number2);/定义加法运算double calcsub(double number1,double number2);/定义减法运算double calcdiv(double number1,double number2);/定义除法运算double calcmult(double number1,double number2);/定义乘法运算void c
7、alcfartocel();void calcceltofar();void calcsroot();void menu();/主菜单函数void badinput();void exitprog();void caculate();/定义混合运算函数 void test();/测试函数 ;class fraction /分数类定义public:fraction();/constructorsfraction(int initn, int initd);int numerator() const; /取分子,const成员函数,不能修改数据成员int denominator() const;
8、/取分母double decimal() const; /将分数转换为对应的小数fraction absval() const; /分数的绝对值void setnum(int newnum); /设置分子void setden(int newden); /设置分母void simplify(); /约分void recip(); /分子分母转置const fraction & operator+= (int rhs);private:int n;int d;(2)调用函数:void oopcalc:calcsin()/正弦函数coutThe Sin Functionn;coutnumber1;
9、answer=sin(number1);coutThe sin of number1 is answerendl;coutPress any key to continuen;getch();menu();这个函数实现了正弦函数的运算。void oopcalc:calcsqr()/求平方的函数coutThe sqr Functionn;coutnumber1;answer=(number1*number1);coutThe sqr of number1 is answerendl;coutPress any key to continuen;getch();menu();这个函数实现了求一个数
10、的平方。double oopcalc:calcadd(double number1,double number2)/加法运算answer=number1+number2;return(answer);这个函数实现了加法运算。double oopcalc:calcsub(double number1,double number2)/减法运算answer = number1-number2;return(answer);这个函数实现了减法运算。double oopcalc:calcdiv(double number1,double number2)/除法运算if(number2=0)/排除除数为零
11、的情况getch();menu();elseanswer = number1/number2;return(answer);这个函数实现了除法运算,但是除法运算要考虑除数为0的情况。double oopcalc:calcmult(double number1,double number2)answer = number1*number2;return(answer); 这个函数实现了乘法运算。void oopcalc:calcfartocel()/华氏温度转化为摄氏温度cout The Farenheit to Celsius Functionn;cout number1;answer =(n
12、umber1 - 32) * 5) / 9;cout The tempature in Celsius is answer endl;cout Press any key to continuen;getch();menu();这个函数实现了华氏温度转换为摄氏温度,要注意转换关系。void oopcalc:calcceltofar()/摄氏温度转化为华氏温度cout The Celsius to Farenheit Functionn;cout number1;answer =number1 * 9 / 5 + 32;cout The tempature in Farenheit is ans
13、wer endl;cout Press any key to continuen;getch();menu();这个函数实现了摄氏温度转换为华氏温度,注意转换关系。void oopcalc:calcsroot()/求平方根的函数cout The Square Root Functionn;cout number1;if(number10)/排除负数开平方根coutyour enter is incorrect,please enter a new numbern;getch();menu();elseanswer = sqrt(number1);cout The square root of
14、number1 is answer endl;cout Press any key to continuen;getch();menu();这个函数实现了求一个数的平方根,但是负数没有平方根要考虑进去。void oopcalc:exitprog()/退出函数exit(-1);void oopcalc:menu()/菜单oopcalc a;system(cls); /执行系统命令:cls-清屏cout欢迎使用计算器n;cout =MENU=n;cout s:选择s进行正弦运算n;cout o:选择o进行余弦运算n;cout t:选择t进行正切运算n; cout n:选择n进行求平方运算n; co
15、ut 1: 选择1进行混合运算n;cout 2: 选择2进行华氏温度转化为摄氏温度的运算n;cout 3: 选择3进行摄氏温度转化为华氏温度的运算n;cout 4: 选择4进行求平方根运算n;cout 5: 选择5进行测试n;cout 6:选择6退出运算n; cout input;cout =n;switch (input)case s:case S:a.calcsin();break;case o:case O:a.calccos();break;case t:case T:a.calctan();break;case n:case N:a.calcsqr();break;case 1:a.
16、caculate();break;case 2:a.calcfartocel();break;case 3:a.calcceltofar();break;case 4:a.calcsroot();break;case 5:a.test();break;case 6:a.exitprog();break;default :a.badinput();这个函数实现了菜单模式,要编好菜单的选择。void oopcalc:caculate()/混合四则运算 oopcalc a;coutThe Multifunction(混合四则运算)n;for(int n=1;n+)coutNumbernnumn; /
17、输入要运算的数if(numn=0)/遇到0为止coutPress any key to continuen; getch(); menu();if(n=1)answer=num1;continue;elselabel1:coutval; switch(val) case+:k=1;break; case-:k=2;break; case*:k=3;break; case/:k=4;break; default:coutBad input!n;goto label1; switch(k) case 1: answer=a.calcadd(answer,numn); coutThe answer
18、is answerendl; break; case 2: answer=a.calcsub(answer,numn); coutThe answer is answerendl; break; case 3: answer=a.calcmult(answer,numn); coutThe answer is answerendl; break; case 4: answer=a.calcdiv(answer,numn); coutThe answer is answerendl; break; 这个函数实现了四则运算,在这里要注意改为多个数的基本四则运算,遇到0为止;要处理好数字与运算符之间
19、的关系。void oopcalc:test()/测试函数coutThe Test Functionn;int s;float p;s=rand()%4+1;/随机给出题目的+或-或*或/srand ( time (NULL) );number1=rand()%MAX+1;/在1100之间随机给出数字number2=rand()%MAX+1;switch(s)case 1:coutnumber1+number2=;answer=calcadd(number1,number2);break;case 2:coutnumber1-number2=;answer=calcsub(number1,num
20、ber2);break;case 3:coutnumber1/number2=;answer=calcdiv(number1,number2);break;case 4:coutnumber1*number2p;if(answer=p)coutCorrect!n;elsecoutNO!The correct answer is answern;coutPress any key to continuen;coutflush;getch();menu();这个函数实现了测试功能,测试功能是觉得比较难的,要考虑计算机给用户随机出题的+、-、*、/这些基本运算符,还得设置计算数字区间1100,在出完
21、题目之后,还需要让计算机具有判断对错的本领。(3)主函数int main()char judge;coutjudge;if(judge=f)cout欢迎使用分数计算器n; cout -MENU-n; cout 7:两个分数间的运算n; cout 8:一个分数和一个整数间的运算n ; cout 9:将分数化为小数n; cout 10:将分数化为带分数n; cout 11:两分数间的比较n; cout 12:一个分数和一个整数间的比较n; cout -n; coutinput; if(input=7) cout输入数据格式:分数1运算符分数2n;cout注: 当计算乘方时,先把指数以分母为1的分数
22、的形式输入f1cf2; f1.simplify(); f2.simplify(); switch(c)case+:fraction sum = f1 + f2; cout f1 + f2 = sum ( sum.decimal() )n;break; case-: fraction diff = f1 - f2; cout f1 - f2 = diff ( diff.decimal() )n; break; case*: fraction prod = f1 * f2; cout f1 * f2 = prod ( prod.decimal() )n; break; case/: fractio
23、n quot; if(f2 != 0)quot = f1 / f2;/输出小数运算结果 cout f1 / f2 = ; if(f2 != 0) cout quot ( quot.decimal() )nn; else cout Undefined!nn; break; case: fraction exp=f1f2; cout f1 f2 = exp ( exp.decimal() )n;else if(input=8) /进行分数(f1)和整数(i)的四则运算并输出结果 coutf1ci; f1.simplify(); switch(c) case+: cout f1 + i = f1 +
24、 i n; break; case-: cout f1 - i = f1 - i n; break; case*: cout f1 * i = f1 * i n; break; case/: cout f1 / i = ; if(i != 0) cout f1 / i nn; else cout Undefined!nn; break; else if(input=9) coutf1; cout f1 in decimal form is f1.decimal() n; else if(input=10) coutf1; double dec1 = f1.decimal(); if(dec1
25、1 & (int(dec1) != dec1) cout f1 as a mixed number is ; PrintAsMixed(cout, f1); cout n; else if(input=11) cout输入要比较的第一个分数:n; coutf1f2; cout Boolean operator tests (1 = true, 0 = false)n; cout f1 = f2 : (f1 = f2) n; cout f1 != f2 : (f1 != f2) n; cout f1 = f2 : = f2) n; cout f1 = f2 : (f1 = f2) n; cout
26、 f1 f2 : f2) n; cout f1 f2 : (f1 f2) n; else if(input=12) cout输入要比较的一个分数:n; coutf1i; cout Boolean operator tests (1 = true, 0 = false)n; cout f1 = i : (f1 = i) n; cout f1 != i : (f1 != i) n; cout f1 = i : = i) n; cout f1 = i : (f1 = i) n; cout f1 i : i) n; cout f1 i : (f1 i) n; else if(judge=j)oopca
27、lc s;s.menu(); else exit(-1); main(); getch(); return 0;这个主函数需要把计算器和分数计算器这个两个程序连接起来,定义了一个judge字符,当judge是f的时候会跳转到分数计算器的运算界面,当judge是j的时候,会跳转到计算器的运算界面,当judge是t的时候,会退出运算。同时在这个主函数里面,还包含了分数计算器的运行程序以及退出方法。5 课程设计中遇到的问题及解决方法(1)在计算器的程序中,四则运算的编写根据资料中的编写,在运行时会出现操作数和运算符之间的错乱。原先错误的程序片段:void oopcalc:caculate() oop
28、calc a;coutThe Multifunction(混合四则运算)n;for(int n=1;n+)coutNumbernnumn;if(numn=0)/遇到0为止coutPress any key to continuen; getch(); menu();if(n=1)answer=num1;continue;label1:coutval; switch(val) case+:k=1;break; case-:k=2;break; case*:k=3;break; case/:k=4;break; default:coutBad input!n;goto label1; switch
29、(k) case 1: answer=a.calcadd(answer,numn); coutThe answer is answerendl; break; case 2: answer=a.calcsub(answer,numn); coutThe answer is answerendl; break; case 3: answer=a.calcmult(answer,numn); coutThe answer is answerendl; break; case 4: answer=a.calcdiv(answer,numn); coutThe answer is answerendl
30、; break; 改正后的程序片段:void oopcalc:caculate() oopcalc a;coutThe Multifunction(混合四则运算)n;for(int n=1;n+)coutNumbernnumn;if(numn=0)/遇到0为止coutPress any key to continuen; getch(); menu();if(n=1)answer=num1;continue;elselabel1:coutval; switch(val) case+:k=1;break; case-:k=2;break; case*:k=3;break; case/:k=4;break; default:coutBad input!n;goto label1; switch(k) case 1: answer=a.calcadd(answer,numn); coutThe answer is answerendl; break; case 2: answer=a.calcsub(answer,numn); coutThe answer is answerendl; break; case 3: answer=a.calc
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 生态环保型城市广场施工与绿化养护一体化合同
- 抖音平台商品橱窗数据深度挖掘与营销策略合同
- 公众号转让合同范例
- 主播保密合同范例
- 中介合同及服务合同范例
- 余款合同范例
- 假期学生用工合同范例
- 产品生产使用合同范例
- 企业合同范例英文
- 二手车店合同样本
- 部编版小学道德与法治六年级下册《多元文化多样魅力》
- 昆虫的生存技巧和适应能力
- 危急值报告制度培训课件
- 2022年深圳市南山区教育系统招聘公办幼儿园副园长考试真题
- 锂电池出租合同范本
- 咽喉癌病历书写
- DB63T 2187-2023 丹巴腮扁叶蜂监测技术规程
- 基坑降水计算-潜水完整井-非完整井
- 幼儿园安全教育课件:《嘴巴里的小精灵》
- 幼儿园大班8的加法公开课
- 第一章-波动方程
评论
0/150
提交评论