c++课程设计实验报告 分数计算器.docx
c+课程设计实验报告 分数计算器C+设计报告 分数计算器 指导老师: 学院: 学号: 姓名: 课程题目:分数计算器 设计要求:有详细的菜单选项界面,用户不选择退出就可以反复运算。 完善程序,改为多个操作数基本四则运算,运到0为止。 增加函数,完成四则混合运算,注意算法要考虑运算符的优先 对应增加主菜单选项 。 添加语句,使四则运算具有测试功能,计算机能够自动出题,并要求用户计算,同时打分,十题为一个单元,每题一个运算符,参与运算的分子或分母为一位数,运算符包括加,减,乘,除,及大于,小于等逻辑运算。 设计思想:1)类的封装性;2)main函数结构修改;3)goto语句解决四则混合运算;4)随机数函数使用解决测试程序的编写。 原程序简介:1):具有对两分数的简单四则运算和比较;:分数与整书的简单四则运算;:将两分数分别以正数与真分数的格式输出。 2)原程序主要包含完善的分数类,各重载的运算符函数,一个全局函数int GCF(int x,int y); 对原程序的修改:1)增加 void calcmixed /四则混合运算 fraction f1,f2,sum; char op1,op; int t=1,k; op1=' ' while(t=1) cout<<"输入四则混合运算的计算式:" cin>>f1>>op; f1.simplify; while(op!='=') cin>>f2; f2.simplify; switch(op) case'+': case'-': switch(op1) case' ': sum=f1; break; case'+': sum=sum+f1; break; case'-': sum=sum-f1; break; op1=op; f1=f2; break; case'*': f1=f1*f2; break; case'/': if(f2!=0) f1=f1/f2; break; else cout<<"除数为0n" goto end; default: cout<<"非法的运算符n" goto end; cin>>op; switch(op1) case' ': sum=f1; break; case'+': sum=sum+f1; break; case'-': sum=sum-f1; break; cout<<"="<<sum<<'n' cout<<"若果您想继续请输入1,否则请输入0n" cin>>k; t=k; l:if(t=0) menu; else cout<<"输入错误,请重输!n" cin>>t; goto l; end:; menu; 思路:首先读入第一个操作数与第一个运算符,然后读入后一个操作数及接着的运算符和一个操作数;当第一个运算符是加或减运算符时,判断后一个运算符是加减运算符还是乘或除运算符。若是加减运算符,则要完成前一个加或减运算,并把当前的加或减运算符作为前一个运算符;若是乘或除运算符,则先完成乘或除运算。若第一个运算符是乘或除运算符,不管后一个运算符是什么运算符,就可立即完成乘或除运算。后面重复读入一个运算符和接着的操作数,并重复以上处理,知道读到=为止。这时,要看是否保存了一个加或减运算符,若保存了,则要完成最后的加或减运算。最后输出运算结果。 2)void test;用随机数的知识实现让计算机自动出题,设置了四个单元,每单元十题,且能显示用户最后的得分。 void test /测试功能函数 int i,j,k,op,op1,op2,sum=0,t=1; int a,b,c,d; fraction f1,f2,f3,f4; m:a=rand%10; b=rand%10; c=rand%10; d=rand%10; if(b!=0&&d!=0) f1.setnum(a); f1.setden(b); f2.setnum(c); f2.setden(d); else goto m; f1.simplify; f2.simplify; cout<<"=测试=n" cout<<"每单元有十题,每题十分,答对加分,答错不扣分,在指定位置输入您的答案n" cout<<"*n" for(i=1;i+) cout<<"第"<<i<<"单元n" for(j=1;j<=10;j+) cout<<"j:" op=rand%2; switch(op) case 0: op1=rand%4; switch(op1) case 0: cout<<f1<<"+"<<f2<<"=" f3=f1+f2; break; case 1: cout<<f1<<"-"<<f2<<"=" f3=f1-f2; break; case 2: cout<<f1<<"*"<<f2<<"=" f3=f1*f2; break; case 3: cout<<f1<<"/"<<f2<<"=" f3=f1/f2; break; case 1: op2=rand%6; switch(op2) case 0 :cout<<f1<<"="<<f2<<":"<<'n' f3.setnum(f1=f2); f3.setden(1); break; case 1:cout<<f1<<"!="<<f2<<":"<<'n' f3.setnum(f1!=f2); f3.setden(1); break; case 2:cout<<f1<<">="<<f2<<":"<<'n' f3.setnum(f1>=f2); f3.setden(1); break; case 3:cout<<f1<<"<="<<f2<<":"<<'n' f3.setnum(f1<=f2); f3.setden(1); break; case 4:cout<<f1<<">"<<f2<<":"<<'n' f3.setnum(f1>f2); f3.setden(1); break; case 5:cout<<f1<<"<"<<f2<<":"<<'n' f3.setnum(f1<f2); f3.setden(1); break; cout<<"请输入您的答案:" cin>>f4; if(f4=f3) cout<<"正确!n" sum=sum+10; else cout<<"错误!n" cout<<"本单元您总共答对:"<<sum/10<<"题,"<<'t'<<"得分:"<<sum<<'n' cout<<"若您想继续进行本项测试请输1,若不想则输入0n" cout<<"请输入您的选择:" cin>>t; n: switch(t) case 0: menu; case 1: ; break; default: cout<<"输入错误,请重输!n" cin>>t; goto n; 3)void exit;用于退出程序。 4)void badinput;提醒用户输入错误。 2)修改:(1)将int main( ); 改成void main( );函数体也作了较大改动。 (2)在新增的函数中作出修改使得用户能不选择退出就能反复运算,例如: cout<<"若您想继续进行本项测试请输1,若不想则输入0n" cout<<"请输入您的选择:" cin>>t; n: switch(t) case 0: menu; case 1: ; break; default: cout<<"输入错误,请重输!n" cin>>t; goto n; cout<<"Press any key to continuen" getch; menu; 遇到的主要问题:对原程序代码的理解,对运算符重载部分知识的陌生给开始的准备工作带来障碍,但通过对书本的复习,反复的研读,与同学们的商讨基本解决该问题。 (2)四则混合运算算法较困难,经书本提示借阅相关参文献解决该问题。 在编写测试程序是忽略该程序要面向用户,必须有详细的指示 使得用户了解程序的用法,经过与同学的交流后改正了。 在此次编写实践过程中,得到了老师的指导和同学们的帮助,通过翻阅书籍,文献, 资料我不仅复习到原有知识,还学到新的内容,例如goto语句,菜单的设计等。在与老师和同学们的交流中学到新知识和方法,这也是很关键的一点。虽然过程当中遇到不少难题,但在解决问题和学到知识的过程中还是很有成就感的。