四则运算题目生成程序(基于控制台)
题目描述:
从《构建之法》第一章的 “程序” 例子出发,像阿超那样,花二十分钟写一个能自动生成小学四则运算题目的命令行 “软件”,满足以下需求:
1.除了整数以外,还要支持真分数的四则运算,真分数的运算,例如:1/6 + 1/8 = 7/24
2.运算符为 +, −, ×, ÷
3.并且要求能处理用户的输入,并判断对错,打分统计正确率。
4.要求能处理用户输入的真分数, 如 1/2, 5/12 等
5.使用 -n 参数控制生成题目的个数,例如执行下面命令将生成10个题目
Myapp.exe -n 10
需求分析:
1.能随机生成整数和真分数四则运算。
2.要能判断用户答案的对错,对做错了的题目给出正确答案,并统计算出正确率。
3.能用参数控制生成题目个数。
设计实现:
1.通过两个函数分别实现整数和真分数运算。
2.采用随机生成1或2来选择调用哪个函数。
3.通过累加的方法计算正确体术,进而算出正确率。
部分代码
随机选取运算符
for(int m=0;m<n;m++){ int x=(int)rand()%2+1; if(x==1){ ZSYS(); } else if(x==2){ FSYS(); }
辗转相除法求最大公约数函数
int maxGYS(int a,int b){ return a%b==0?b:maxGYS(b,a%b); } int minGBS(int a,int b) { int min, max; int r; max=a>b?a:b; min=a<b?a:b; if(max%min==0) return max; while(max%min!=0) { r=max%min; max=min; min=r; } return a*b/min; }
整数运算
void integer() { int g; int x,y; char op; srand(time(0)); x=rand()%100+1; y=rand()%100+1; op=Operator(); cout<<x<<op<<y<<"="<<endl; cout<<"请输入运算结果:"; if(op=='+') //整数“+”运算 { cin>>g; if(g==x+y) { cout<<"恭喜你答对了!"<<endl<<endl; correct++; } else { cout<<"很遗憾你答错了,正确答案是:"<<x+y<<endl<<endl; mistake++; } } else if(op=='-') //整数“-”运算 { cin>>g; if(g==x-y) { cout<<"恭喜你答对了!"<<endl<<endl; correct++; } else { cout<<"很遗憾你答错了,正确答案是:"<<x-y<<endl<<endl; mistake++; } } else if(op=='*') //整数“*”运算 { cin>>g; if(g==x*y) { cout<<"恭喜你答对了!"<<endl<<endl; correct++; } else { cout<<"很遗憾你答错了,正确答案是:"<<x*y<<endl<<endl; mistake++; } } else if(op=='/') //整数“/”运算 { cin>>result; element=x; denominator=y; maxNum=maxNumber(element,denominator); element=element/maxNum; denominator=denominator/maxNum; if(denominator!=1) { sprintf_s(answer, "%d/%d",element ,denominator); if (strcmp(answer, result) == 0) { cout<<"恭喜你答对了!"<<endl<<endl; correct++; } else { cout<<"很遗憾你答错了,正确答案是:"<<answer<<endl<<endl; mistake++; } } else { sprintf_s(answer, "%d",element); if (strcmp(answer, result) == 0) { cout<<"恭喜你答对了!"<<endl<<endl; correct++; } else { cout<<"很遗憾你答错了,正确答案是:"<<answer<<endl<<endl; mistake++; } } } }
测试运行:
PSP2.1 |
Personal Software Process Stages |
Time (%) Senior Student(/hour) |
Time (%)(/hour) |
· Planning |
计划 |
3 |
4 |
· Estimate |
估计这个任务需要多少时间 |
45 |
60 |
· Analysis |
需求分析 (包括学习新技术) |
6 |
6 |
· Coding Standard |
代码规范 |
0.5 |
0.5 |
· Design |
具体设计 |
1.5 |
3 |
· Coding |
具体编码 |
30 |
35 |
· Test |
测试(自我测试,修改代码,提交修改) |
2 |
2.5 |
Reporting |
报告 |
1 |
1 |
总结:
1.通过测试基本能实现题目的需求,但仍有一些问题没有注意到,界面也很一般,仅能实现自动生成两个数字间的四则运算。
2.在进行代码调试时,总是犯了些小错误,浪费了很多时间。
3.用户需求分析还不到位