20194599+自动生成四则运算题第一版报告

mac2022-06-30  23

1. 需求分析:


 

    为了对学生的算数进行锻炼,家长每天给孩子出题成为一个难题,需要做出一个程序,每天生成一定数量且不重复的题目,分解家长们的压力。

2. 功能设计:


 

    基本功能:

自动生成10道100以内的2个操作数的四则运算算式(+ - *  /),要求运算结果也在100以内 ------>实现 剔除重复算式。  2 + 3 =    和  2 + 3 =     是重复算式      2 + 3 =   和   3 + 2 =  不属于重复算式 ------>实现 题目数量可定制 ------>实现 相关参数可控 ------>实现

 是否包含乘法和除法

操作数数值范围可控(如操作数 在100以内   还是1000以内)

操作数是否含负数  

生成的运算题存储到外部文件result.txt中 ------->实现

    拓展功能:

        自动生成答案

        添加学号,并为每个学号生成不同的试题

        

3. 设计实现:


 

使用构造函数PrintStream Scanner ,PrintStream ps = new PrintStream("d:/result.txt");System.setOut(ps);调用此函数,可以将所有System.out.println();输出语句,打印到i我们创建的文件夹中Scanner t=new Scanner(System.in); 控制我们从键盘输入Math.random();产生随机不重复函数,我做了以下测试 1 /* 2 * 验证random会不会产生相同的随机数 3 * 做个10万次循环看看,发现结果为0 4 *java不像c,c会大概率产生相同的随机数,甚至会下次运行可能会和上次 5 * 产生的随机数是一样的,因此用C写得初始化一个时间种子,才能尽可能的保证随机数不相同 6 *java的random函数10万次运行都很难出现一次相同的随机数,所有random不产生重复函数 7 */ 8 public class text_002{ 9 public static void main(String args[]){ 10 int count = 0; 11 double first = 0; 12 double second = 0; 13 for(int i=0; i<99999; i++){ 14 first = Math.random(); 15 second = Math.random(); 16 if (first == second) 17 count ++; 18 } 19 System.out.print(count); 20 } 21 }

 

4. 测试运行:


 基本加减法

 四种运算符

 

  

自动生成100以内答案

 

 

四个运算符生成无限制答案

 添加学号,并且给不同部分学号的生产不同的套题

 

 

5. 代码解释


 

  生成的第一个操作数 1 //第一个操作数的选择 2 int a=(int)(Math.random()*tf+1); 3 4 if(zf==1) {//有负数 5 int p=(int) (Math.random()*2); 6 switch(p) { 7 case 0:a=a*(-1);//取负数 8 System.out.print(a);break; 9 case 1: 10 System.out.print(a);break; 11 } 12 } 13 if(zf==0) {//没有负数 14 System.out.print(a); 15 }   运算符号的选择 1 System.out.println("请选择是否包含*或者/:2:否 4:是 "); 2 int fu=t.nextInt(); 3 if(fu==2) {//选择两个字符‘+’‘-’ 4 int k=(int)(Math.random()*2); 5 switch(k) {//随机选择运算符 6 case 0:System.out.print("+"); 7 break; 8 case 1:System.out.print("-"); 9 break; 10 } 11 if(fu==4) {//四个字符的‘+’‘-’‘*’‘/’ 12 int k=(int)(Math.random()*4+1); 13 switch(k) {//随机选择运算符 14 case 1:System.out.print("+");break; 15 case 2:System.out.print("-");break; 16 case 3:System.out.print("*");break; 17 case 4:System.out.print("/");break; 18 }   等号右侧结果 1 //等号 2 3 System.out.print("="); 4 //运算结果 5 if(k==1) { 6 c=a+b;System.out.println(c); 7 } 8 if(k==2) { 9 c=a-b;System.out.println(c); 10 } 11 if(k==3) { 12 c=a*b;System.out.println(c); 13 } 14 if(k==4) { 15 c=a/b;System.out.println(c); 16 }

 

6. 总结


 

 

1 .控制题目个数 :for循环

  

2. 控制题目范围 :scanner传参 和随机函数相乘

  

3. 控制正负号:随机函数+switch产生随机正负数

  

4. 控制运算符号:随机函数+switch产生随机符号

 

 

 

7. PSP


 

 

转载于:https://www.cnblogs.com/victorykingliu/p/11499108.html

最新回复(0)