四则运算三
一.
1、定义参数控制生成题目的个数。 例如,参数n=10;则将生成10个题目。 2、定义参数控制题目中数值(自然数、真分数和真分数分母)的范围。 例如参数r= 10,将生成10以内(不包括10)的四则运算题目。该参数可以设置为1或其他自然数。 该参数必须给定,否则程序报错并给出帮助信息。3.程序一次运行生成的题目不能重复,即任何两道题目不能通过有限次交换+和×左右的算术表达式变换为同一道题目 例如,23 + 45 = 和45 + 23 = 是重复的题目,6 × 8 = 和8 × 6 = 也是重复的题目。3+(2+1)和1+2+3这两个题目是重复的,由于+是左结合的,1+2+3等价于(1+2)+3,也就是3+(1+2),也就是3+(2+1)。但是1+2+3和3+2+1是不重复的两道题,因为1+2+3等价于(1+2)+3,而3+2+1等价于(3+2)+1,它们之间不能通过有限次交换变成同一个题目。4.
二.
我重新将程序写了一遍,为了将自己的思路理的更加清晰一些。前面不变利用while循环,在进行选项之后,引用后面的方法。在整数方法中,定义了一个d1,d1是式子运行的结果,然后在后面定义一个值z,当z与d1进行比较之后,如果值一样就会输出结果正确,如果结果错误,在输出结果错误语句之后,同时会输出正确答案,对于分数的方法,我定义了一个值Z和M,分别代表分数同分过后的分子和分母,剩下的基本和整数的方法一样。
三.
import java.util.Scanner; public class suanshu3 { public static void main(String[] args) { Scanner input = new Scanner(System.in); int m=0; while(m==0) { System.out.println("1、整数计算式,2、真分数计算式"); int a1 = input.nextInt(); if(a1==1) { zhengshu(a1); } else { fenshu(a1); } } } public static void fenshu(int a1) { int x,y,i,a2,C;//a代表计算类型,x代表题目数量,y代表数值的范围,i为循环变量,d代表是否有乘除法 int M,Z; int h = 0; String d = null; System.out.println("请输入题目的数量"); Scanner input2=new Scanner(System.in); x=input2.nextInt(); String daan[]=new String [x]; int x1,x2,B,m1,m2; System.out.println("请输入分母数值的范围"); B=input2.nextInt(); System.out.println("是否有乘除法?(是输入1,否则输入0)"); C=input2.nextInt(); if(C==1){ for(i=0;i<x;i++){ m1=1+(int)(Math.random()*B);//随机生成一个小于B的分母 x1=1+(int)(Math.random()*m1);//生成一个比分母小的分子,实现真分数 m2=1+(int)(Math.random()*B);//随机生成一个小于B的分母 x2=1+(int)(Math.random()*m2);//生成一个比分母小的分子,实现真分数 int c=(int)(Math.random()*3);//生成运算符 if(c==0) { Z=x1*m2+x2*m1; M=m1*m2; System.out.print(x1+"/"+m1+"+"+x2+"/"+m2+"= "); Scanner e1 = new Scanner(System.in); System.out.println("分子:"); int z = e1.nextInt(); System.out.println("分母:"); int m = e1.nextInt(); if(z==Z&&m==M){ System.out.println("回答正确!"); h++; }else{ System.out.println("回答错误!正确答案是"+Z+"/"+M); } } if(c==1) { Z=x1*m2-x2*m1; M=m1*m2; System.out.print(x1+"/"+m1+"-"+x2+"/"+m2+"= "); Scanner e1 = new Scanner(System.in); System.out.println("分子:"); int z = e1.nextInt(); System.out.println("分母:"); int m = e1.nextInt(); if(z==Z&&m==M){ System.out.println("回答正确!"); h++; }else{ System.out.println("回答错误!正确答案是"+Z+"/"+M); } } if(c==2) { Z=x1*x2; M=m1*m2; System.out.print(x1+"/"+m1+"*"+x2+"/"+m2+"= "); Scanner e1 = new Scanner(System.in); System.out.println("分子:"); int z = e1.nextInt(); System.out.println("分母:"); int m = e1.nextInt(); if(z==Z&&m==M){ System.out.println("回答正确!"); h++; }else{ System.out.println("回答错误!正确答案是"+Z+"/"+M); } } if(c==3) { Z=m1*x2; M=m2*x1; System.out.print(x1+"/"+m1+"/"+x2+"/"+m2+"= "); Scanner e1 = new Scanner(System.in); System.out.println("分子:"); int z = e1.nextInt(); System.out.println("分母:"); int m = e1.nextInt(); if(z==Z&&m==M){ System.out.println("回答正确!"); h++; }else{ System.out.println("回答错误!正确答案是"+Z+"/"+M); } } if((i+1)%3==0) { System.out.println(); } daan[i]=d; } } if(C==0) { for(i=0;i<x;i++){ m1=1+(int)(Math.random()*B);//随机生成一个小于B的分母 x1=1+(int)(Math.random()*m1);//生成一个比分母小的分子,实现真分数 m2=1+(int)(Math.random()*B);//随机生成一个小于B的分母 x2=1+(int)(Math.random()*m2);//生成一个比分母小的分子,实现真分数 int c=(int)(Math.random()*2);//生成运算符 if(c==0) { Z=x1*m2+x2*m1; M=m1*m2; System.out.print(x1+"/"+m1+"+"+x2+"/"+m2+"= "); Scanner e1 = new Scanner(System.in); System.out.println("分子:"); int z = e1.nextInt(); System.out.println("分母:"); int m = e1.nextInt(); if(z==Z&&m==M){ System.out.println("回答正确!"); h++; }else{ System.out.println("回答错误!正确答案是"+Z+"/"+M); } } if(c==1) { Z=x1*m2-x2*m1; M=m1*m2; System.out.print(x1+"/"+m1+"-"+x2+"/"+m2+"= "); Scanner e1 = new Scanner(System.in); System.out.println("分子:"); int z = e1.nextInt(); System.out.println("分母:"); int m = e1.nextInt(); if(z==Z&&m==M){ System.out.println("回答正确!"); h++; }else{ System.out.println("回答错误!正确答案是"+Z+"/"+M); } } if((i+1)%3==0) { System.out.println(); } daan[i]=d; } } } public static void zhengshu(int a1) {//整数 int x,y,i,a2,C;//a代表计算类型,x代表题目数量,y代表数值的范围,i为循环变量,d代表是否有乘除法 int d1=0; String d = null;//d用来储存答案 System.out.println("请输入题目的数量"); Scanner input2=new Scanner(System.in); x=input2.nextInt(); int daan[]=new int [x]; System.out.println("请输入数值的范围"); y=input2.nextInt(); System.out.println("是否有乘除法?(是输入1,否则输入0)"); C=input2.nextInt(); if(C==1) { for(i=0;i<x;i++){ int a=(int)(Math.random()*y);//随机生成一个1-10的整数 int b=(int)(Math.random()*y);//随机生成一个1-10的整数 int c=(int)(Math.random()*3);//随机生成一个1-4的整数,0表示加法,1表示减法,2表示乘法,3表示除法 if(c==0) { d1=a+b; y = a + b; System.out.printf(a+"+"+b+"= "); Scanner e1 = new Scanner(System.in); int z = e1.nextInt(); if(z==y){ System.out.println("回答正确!"); d1++; }else{ System.out.println("回答错误!正确答案是"+y); } } if(c==1) { d1=a-b; y = a - b; System.out.printf(a+"-"+b+"= "); Scanner e1 = new Scanner(System.in); int z = e1.nextInt(); if(z==y){ System.out.println("回答正确!"); d1++; }else{ System.out.println("回答错误!正确答案是"+y); } } if(c==2) { d1=a*b; y = a * b; System.out.printf(a+"*"+b+"= "); Scanner e1 = new Scanner(System.in); int z = e1.nextInt(); if(z==y){ System.out.println("回答正确!"); d1++; }else{ System.out.println("回答错误!正确答案是"+y); } } if(c==3) { d1=a/b; y = a / b; System.out.printf(a+"+"+b+"= "); Scanner e1 = new Scanner(System.in); int z = e1.nextInt(); if(z==y){ System.out.println("回答正确!"); d1++; }else{ System.out.println("回答错误!正确答案是"+y); } } if((i+1)%3==0){ System.out.println(); } daan[i]=d1; } } else { for(i=0;i<x;i++) { int a=(int)(Math.random()*y);//随机生成一个1-的整数 int b=(int)(Math.random()*y);//随机生成一个1-10的整数 int c=(int)(Math.random()*2);//随机生成一个1-4的整数,0表示加法,1表示减法 if(c==0) { d1=a+b; y = a + b; System.out.printf(a+"+"+b+"= "); Scanner e1 = new Scanner(System.in); int z = e1.nextInt(); if(z==y){ System.out.println("回答正确!"); d1++; }else{ System.out.println("回答错误!正确答案是"+y); } } if(c==1) { d1=a-b; y = a - b; System.out.printf(a+"-"+b+"= "); Scanner e1 = new Scanner(System.in); int z = e1.nextInt(); if(z==y){ System.out.println("回答正确!"); d1++; }else{ System.out.println("回答错误!正确答案是"+y); } } if((i+1)%3==0){ System.out.println(); } daan[i]=d1; } } } }
四.