a.需求分析
①除了整数以外,还要支持真分数的四则运算,真分数的运算,例如:1/6 + 1/8 = 7/24
②运算符为 +, −, ×, ÷
③并且要求能处理用户的输入,并判断对错,打分统计正确率。
④要求能处理用户输入的真分数, 如 1/2, 5/12 等
⑤使用 -n 参数控制生成题目的个数,例如执行下面命令将生成10个题目
Myapp.exe -n 10
b.功能设计
(1)基本功能
需求分析的基础需求的全部
(2)扩展功能
对于错误答案的四则算式,输出正确答案
(3)高级功能
从txt导入四则运算
c.设计实现
能够实现生成整数和分数的式子并实现计算;
能够控制生成式子的个数;
能够实现判断对错并计算正确率;
d.代码说明
1、化简分数,得出最简的答案
int k=0; int gcd(int x, int y) { int z; if ((z = x % y) != 0) { gcd(y, z); } else return y; }
2、产生随机数
void fraction() { int i,j,x,y,z,temp,a,b,c,z1,z2; srand(unsigned(time(NULL))); char r1[10], r2[10]; memset(r1, 0, sizeof(r1)); memset(r2, 0, sizeof(r2)); i=rand()%10;//rand()返回一个随机数 j=rand()%10; while(j==0||i>=j) { i=rand()%10; j=rand()%10; } x=rand()%10; y=rand()%10; while(y==0||x>=y) { x=rand()%10; y=rand()%10; } z=rand()%100/25; z1=0;z2=0; switch(z)
3、除法运算
case 3: cout<<"("<<x<<"/"<<y<<")"<<"/"<<"("<<i<<"/"<<j<<")"<<"="; a = x*j; b = y*i; c = gcd(a, b); a = a / c; b = b / c; if (b != 1) { sprintf(r1, "%d/%d", a, b); cin >> r2; if (strcmp(r1, r2) == 0) { cout << " " << "True" << endl; k = k + 1; } else cout << " " << "False" << " " <<"正确答案是:"<<r1<<endl; } else { cin >> z1; if (z1 == a) { cout << " " << "True" << endl; k = k + 1; } else cout << " " << "False" << " " << "正确答案是:"<<a<<endl; } break; default: cout << "wrong" << endl; break; }
4、主函数
int main(int argc,char *argv[]) { int n,i; float m; n=atoi(argv[2]); cout<<"生成运算题数目:"<<n<<endl; for(i=0;i<n;i++) { int c=rand()%2; switch(c) { case 0: integer();break; case 1: fraction();break; } } m=(float)k/(float)n; cout<<"您答对的题数是:"<<k<<" "<<"正确率是:" <<m<<endl; return 0; }
e.代码运行
PSP:
码市链接:https://coding.net/u/Dt-ghost/p/job1/git/tree/master/
总结:个人在编程方面能力很薄弱,遇到这样的题目只能用基础的方法解决。这次作业我上网查了很多资料之后才开始写的,写的过程还请教了同学才完成。以后要多练习才可以。