一.题目描述:
1.除了整数以外,还要支持真分数的四则运算,真分数的运算,例如:1/6 + 1/8 = 7/24
2.运算符为 +, −, ×, ÷
3.并且要求能处理用户的输入,并判断对错,打分统计正确率。
4.要求能处理用户输入的真分数, 如 1/2, 5/12 等
5.使用 -n 参数控制生成题目的个数,例如执行下面命令将生成10个题目
6.Myapp.exe -n 10
二.需求分析:
1.能随机生成整数和分数的四则运算
2.能够判断用户的回答是否正确,并计算其准确率
3.能用参数控制生成题目个数
三.功能设计:
1.随机产生四则运算符
2.随机产生整数或真分数
3.根据用户需求确定出题数目
4.处理用户输入并判断正误,计算正确率
四.代码说明:
1.随机分数生成方法
public static int[] createFraction(){ int[] n = new int[2]; int n1 = (int)(Math.random()*10+1); int n2 = (int)(Math.random()*10+1); if(n1 != n2){ n[0] = n2; n[1] = n1; }else createFraction(); return n; }
2.辗转相除法求最大公约数函数
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; }
3.四则运算
int a = (int)(Math.random()*4+1); if(a==1){//加 Question.add("("+fn1[0]+"/"+fn1[1]+")+("+fn2[0]+"/"+fn2[1]+")="); int sum = gbs/fn1[1]*fn1[0] + (gbs / fn2[1]*fn2[0]); int gys1 = GCD(sum,gbs); Answer.add(sum/gys1+"/"+gbs/gys1+"");//化简结果并存储 } if(a==2){//减 Question.add("("+fn1[0]+"/"+fn1[1]+")-("+fn2[0]+"/"+fn2[1]+")="); int cha = gbs/fn1[1]*fn1[0] - (gbs / fn2[1]*fn2[0]); int gys2 = GCD(cha,gbs); Answer.add(cha/gys2+"/"+gbs/gys2+""); } if(a==3){//乘 Question.add("("+fn1[0]+"/"+fn1[1]+")×("+fn2[0]+"/"+fn2[1]+")="); int mult1 = fn1[0]*fn2[0]; int mult2 = fn1[1]*fn2[1]; int gys3 = GCD(mult1,mult2); Answer.add(mult1/gys3+"/"+mult2/gys3+"");// } if(a==4){//除 Question.add("("+fn1[0]+"/"+fn1[1]+")÷("+fn2[0]+"/"+fn2[1]+")="); int div1 = fn1[0]*fn2[1]; //转化为乘法 int div2 = fn1[1]*fn2[0]; int gys4 = GCD(div1,div2); Answer.add(div1/gys4+"/"+div2/gys4+""); } }
五.测试运行
PSP展示:
|
总结:
看到代码实在是头痛,自己的编程能力太弱,一开始拿到题目不知道怎么入手,网上查找了很多资料,才慢慢理清思路,先构思需要的程序公共,再逐步去完成。但是代码实现得并不好,在编程的过程中,碰到许多问题,应该多找找资料,逐步去解决。学习新东西,应该要有耐心。