一、需求分析
(1)除了整数以外,还要支持真分数的四则运算,真分数的运算,例如:1/6 + 1/8 = 7/24
(2)运算符为 +, −, ×, ÷
(3)并且要求能处理用户的输入,并判断对错,打分统计正确率。
(4)要求能处理用户输入的真分数, 如 1/2, 5/12 等
(5)使用 -n 参数控制生成题目的个数,例如执行下面命令将生成10个题目Myapp.exe -n 10
二、功能设计
(1)可以随机产生真分数以及四则运算式,除了整数以外,也支持真分数的四则运算
(2)可以实现对用户要求的题目数量的计算
(3)该程序可计算出正确的答案并与用户输入的答案进行比较,最后统计出正确率
三、设计实现
该程序通过JAVA实现,主要设计了一个类(class zuoye1)和四个函数(Fraction、GCD、LCM、主函数main)
(1)Fraction函数:用来实现对随机真分数的产生
(2)GCD:用来求两个数之间的最大公约数,通过递归算法求出,使整体计算简便
(3)LCM:用来求两个数之间的最小公倍数,通过递归算法求出,使整体计算简便
(4)主函数main:随机生成四则运算式,计算正确答案并与用户的答案对比,统计正确率
四、代码说明
Fraction函数:
public static int[] Fraction(){//随机生成真分数
int[] n = new int[2];
int q = (int)(Math.random()*10+1);//随机生成分母,分母≠0
int Q = (int)(Math.random()*10+1);//随机生成分子,分母>分子,分子≠0
if(q != Q){
n[0] = Q;
n[1] = q;
}else
Fraction();
return n;
}
GCD:
public static int GCD(int m, int n) {//递归法求最大公约数
if(m < n){//保证m>n,否则进行交换
int t = m;
m = n;
n= t;
}
if(m % n == 0){//若余数为0,返回最大公约数
return n;
}else{//否则进行递归
return GCD(n, m % n);
}
}
LCM:
public static int LCM(int m, int n){//求最小公倍数
return m * n / GCD(m,n);
}
部分主函数:
public static void main(String[] args){//随机生成四则运算式
ArrayList<String>Question = new ArrayList<String>();//题目存储列表
ArrayList<String>Answer = new ArrayList<String>();//答案存储列表
System.out.println("请输入题目数量:");
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m = (int)(Math.random()*n);//随机整数题目和分数题目的题量
int x;
int y;
for(int i = 0;i<(n-m);i++){//先随机出整数题型
x = (int)(Math.random()*10);
y = (int)(Math.random()*10);
if(y != 0){//当进行除法时,0不能作为除数
int a = (int)(Math.random()*4+1);//随机决定运算类型
if(a == 1){
Question.add(x+"+"+y+"=");
Answer.add(x+y+"");
}
if(a == 2){
Question.add(x+"-"+y+"=");
Answer.add(x-y+"");
}
if(a == 3){
Question.add(x+"×"+y+"=");
Answer.add(x*y+"");
}
if(a == 4){
Question.add(x+"÷"+y+"=");
BigDecimal b =new BigDecimal((float)x/y);
float ans = b.setScale(1,BigDecimal.ROUND_UP).floatValue();//保留一位小数,四舍五入
Answer.add(ans+"");
}
}else{//当y值为0时不产生除法运算
int a = (int)(Math.random()*3+1);
if(a == 1){
Question.add(x+"+"+y+"=");
Answer.add(x+y+"");
}
if(a == 2){
Question.add(x+"-"+y+"=");
Answer.add(x-y+"");
}
if(a == 3){
Question.add(x+"×"+y+"=");
Answer.add(x*y+"");
}
}
}
五:运行截图
六:PSP
小结:这次实验对我来来说较为困难,经过查看了一些资料,还借鉴了其他同学对本次实验代码的实现,最终决定采用JAVA。在网上找了一些类似的代码,经过修修改改,大抵完成了这次实验。但是整体上还是存在问题的,比如代码的扩展性不是很好,这个还需修改完善。
码市链接:https://coding.net/u/hjyaaa/p/zuoye1/git/blob/master/zuoye1.java