编写一个程序,写一个能自动生成30道小学四则运算题目的 “软件”。
一、 编写一个程序,写一个能自动生成30道小学四则运算题目的 “软件”。
实验要求:
程序设计思想:构建一个Head类,其中一个rand函数产生1-100随机数以便随时调用随机数。一个rand1函数生成1-20的随机数,构建3个整形数组以及一个字符数组长度都为30。用以储存两个运算的数据和运算符号。
Add加法函数min减法函数 mult乘法函数division除法函数main界面函数
界面函数有加减乘除专练和混合专练以及得出结果,choice函数利用随机数产生1-4四个数1代表加法2代表减法3代表乘法,4代表除法。循环随机数用来产生随机的加减乘除的30道题目。
程序流程图:
源程序:
Head.java
package xiaoxuesizeyunsuan; import java.util.Scanner; public class Head { Scanner input=new Scanner(System.in); double yes; int answer; int e; int j; int sum; int f; int[] data=new int[30];//结果数组 int[] data1=new int[30]; int[] data2=new int[30]; String[] data3=new String[30];//运算符数组 //加减法运算数值随机数 public void rand() { double i=Math.random();//产生一个0-1.0的随机数 e=1+(int)(i*100);//1-100 } //乘法产生随机数 public void rand1() { double i=Math.random(); e=1+(int)(i*20); } //加法 public void add() { rand(); j=e; System.out.print(e); rand(); System.out.print("+"); System.out.print(e); System.out.println("="); sum=j+e; } //减法 public void min() { rand(); j=e; System.out.print(e); for(int i=1;i<100;i++) { rand(); int z;//判断减法结果是否是负数 z=e; if(j>=z) { break; } } System.out.print("-"); System.out.print(e); System.out.println("="); sum=j-e; } //乘法 public void mult() { rand1(); j=e; System.out.print(e); rand1(); System.out.print("*"); System.out.print(e); System.out.println("="); sum=j*e; } //除法 public void division() { rand(); j=e+1; System.out.print(e+1); rand(); System.out.print("/"); System.out.print(e+1); System.out.println("="); sum=j/(e+1); } public void choice() { double i=Math.random(); f=1+(int)(i*4); } //界面 public void menu() { System.out.println("1.加法专练"); System.out.println("2.减法专练"); System.out.println("3.乘法专练"); System.out.println("4.除法专练"); System.out.println("5.混合练习"); System.out.println("6.输出上次结果"); System.out.println(" 请输入:"); String choice1=input.next(); switch(choice1) { case "1": for(int i=0;i<30;i++) { add(); data[i]=sum; data1[i]=j; data2[i]=e; data3[i]="+"; } System.out.println("是否作答?是:1否:2"); int c=input.nextInt(); if(c==1) { for(int i=0;i<30;i++) { System.out.print(data1[i]+"+"); System.out.print(data2[i]); System.out.print("="); answer=input.nextInt(); if(answer==data[i]) { yes++; } if(i==29) { System.out.println("一共答对"+yes+"道题目"); System.out.println("正确率:"+(yes/30)); } } } break; case "2": for(int i=0;i<30;i++) { yes=0; min(); data[i]=sum; data1[i]=j; data2[i]=e; data3[i]="-"; } System.out.println("是否作答?是:1否:2"); c=input.nextInt(); if(c==1) { for(int i=0;i<30;i++) { System.out.print(data1[i]+"-"); System.out.print(data2[i]); System.out.print("="); answer=input.nextInt(); if(answer==data[i]) { yes++; } if(i==29) { System.out.println("一共答对"+yes+"道题目"); System.out.println("正确率:"+(yes/30)); } } } break; case "3": for(int i=0;i<30;i++){ mult(); data[i]=sum; data1[i]=j; data2[i]=e; data3[i]="*"; } System.out.println("是否作答?是:1否:2"); c=input.nextInt(); if(c==1) { for(int i=0;i<30;i++) { System.out.print(data1[i]+"*"); System.out.print(data2[i]); System.out.print("="); answer=input.nextInt(); if(answer==data[i]) { yes++; } if(i==29) { System.out.println("一共答对"+yes+"道题目"); System.out.println("正确率:"+(yes/30)); } } } break; case "4": for(int i=0;i<30;i++){ division(); data[i]=sum; data1[i]=j; data2[i]=e+1; data3[i]="/"; } System.out.println("是否作答?是:1否:2"); c=input.nextInt(); if(c==1) { for(int i=0;i<30;i++) { int yushu=0; System.out.print(data1[i]+"/"); System.out.print(data2[i]); System.out.print("="); answer=input.nextInt(); System.out.println("是否存在余数,存在:1 不存在:0"); int choice=input.nextInt(); if(choice==1) { System.out.println("请输入余数:"); yushu=input.nextInt(); } if(answer==data[i]&&yushu==(data1[1]%data2[2])) { yes++; } if(i==29) { System.out.println("一共答对"+yes+"道题目"); System.out.println("正确率:"+(yes/30)); } } } break;//一次错误 CASE穿透 case "5": for(int i=0;i<30;i++) { choice(); if(f==1) { add(); data3[i]="+"; data[i]=sum; data1[i]=j; data2[i]=e; } else if(f==2) { min(); data3[i]="-"; data[i]=sum; data1[i]=j; data2[i]=e; } else if(f==3) { mult(); data3[i]="*"; data[i]=sum; data1[i]=j; data2[i]=e; } else if(f==4) { division(); data3[i]="/"; data[i]=sum; data1[i]=j; data2[i]=e+1; } } System.out.println("是否输出结果?是:1否:2"); c=input.nextInt(); if(c==1) { for(int j=0;j<30;j++) { System.out.print(data1[j]+data3[j]); System.out.print(data2[j]); if(data3[j]=="/") { System.out.print("="+data[j]); System.out.println("......"+data1[j]%data2[j]);//小学算法计算余数 } else { System.out.println("="+data[j]); } } } break; case "6": for(int j=0;j<30;j++) { System.out.print(data1[j]+data3[j]); System.out.print(data2[j]); if(data3[j]=="/") { System.out.print("="+data[j]); System.out.println("......"+data1[j]%data2[j]);//小学算法计算余数 } else { System.out.println("="+data[j]); } } } } }
Main.java
package xiaoxuesizeyunsuan; import xiaoxuesizeyunsuan.Head; import java.util.Scanner; public class Main { static int s; public static void choice() { double i=Math.random(); s=1+(int)(i*4); } public static void main(String[] args) { Head h=new Head(); while(true) { h.menu(); } } }
实验结果:
实验总结:;混合运算时用来保存运算符的数组为INT型输出时无法显示+-*/
后来改用String来保存运算符
//结果数组