四则运算升级版

四则运算升级版Github地址:https://github.com/Coylin777/szys1题目:实现一个自动生成小学四则运算题目的命令行程序。2说明:自然数:0,1,2,…。真分数:1/2,1/3,2/3,1/4,1’1/2,…。运算符:+,−,×,÷

大家好,欢迎来到IT知识分享网。

Github地址:https://github.com/Coylin777/szys

1题目:实现一个自动生成小学四则运算题目的命令行程序。

2说明:

自然数:0, 1, 2, …。

  • 真分数:1/2, 1/3, 2/3, 1/4, 1’1/2, …。
  • 运算符:+, −, ×, ÷。
  • 括号:(, )。
  • 等号:=。
  • 分隔符:空格(用于四则运算符和等号前后)。
  • 算术表达式:e = n | e1 + e2 | e1 − e2 | e1 × e2 | e1 ÷ e2 | (e),其中e, e1和e2为表达式,n为自然数或真分数。
  • 四则运算题目:e = ,其中e为算术表达式。

3需求:

1. 使用 -n 参数控制生成题目的个数,例如

Myapp.exe -n 10

将生成10个题目。

2. 使用 -r 参数控制题目中数值(自然数、真分数和真分数分母)的范围,例如 

Myapp.exe -r 10 

将生成10以内(不包括10)的四则运算题目。该参数可以设置为1或其他自然数。该参数必须给定,否则程序报错并给出帮助信息。

3. 生成的题目中计算过程不能产生负数,也就是说算术表达式中如果存在形如e1 − e2的子表达式,那么e1 ≥ e2

4. 生成的题目中如果存在形如e1 ÷ e2的子表达式,那么其结果应是真分数

5. 每道题目中出现的运算符个数不超过3个。

6. 程序一次运行生成的题目不能重复,即任何两道题目不能通过有限次交换+×左右的算术表达式变换为同一道题目。例如,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+33+2+1是不重复的两道题,因为1+2+3等价于(1+2)+3,而3+2+1等价于(3+2)+1,它们之间不能通过有限次交换变成同一个题目。

生成的题目存入执行程序的当前目录下的Exercises.txt文件,格式如下:

1. 四则运算题目1

2. 四则运算题目2

……

其中真分数在输入输出时采用如下格式,真分数五分之三表示为3/5,真分数二又八分之三表示为2’3/8。

7. 在生成题目的同时,计算出所有题目的答案,并存入执行程序的当前目录下的Answers.txt文件,格式如下:

1. 答案1

2. 答案2

特别的,真分数的运算如下例所示:1/6 + 1/8 = 7/24。

8. 程序应能支持一万道题目的生成。

9. 程序支持对给定的题目文件和答案文件,判定答案中的对错并进行数量统计,输入参数如下:

Myapp.exe -e <exercisefile>.txt -a <answerfile>.txt

 

PSP表格

Personal Software Process Stages

预估耗时(分钟)

实际耗时(分钟)

解题思路

 20

 25

代码实现

 60

90

代码测试与代码优化

 30

50

测试改进程序性能上所花费的时间

 10

10

编写博客

 30

 20

 

设计:
   功能分为两个部分,1部分是给出整数的四则运算,2部分是分数的四则运算,通过算法设定了为两个运算符号。

主要代码

 

  package homework;
 import java.io.FileOutputStream;
 import java.io.FileNotFoundException; 
 import java.io.PrintStream;
 import java.util.*;
 public class a{
 public static String counter(int a,int b){
         int y = 1;//初始值取1
         for(int i=a;i>=1;i--){
             if(a%i==0&&b%i==0){
                 y = i;
                 break;
             }
         }
         int z = a/y;
         int m = b/y;
         if(z==0) {
             return "0";
         }
         return ""+z+"/"+m;
     }
     public static void main(String[] args)  {
         // TODO Auto-generated method stub
         int x,y,i,a1;
         int d1=0;
         String d = null;
         Scanner scan1=new Scanner(System.in);
         a1=scan1.nextInt();
 if(a1==1){ //4则运算
     
     
         System.out.println("请输入题目的数量");
         Scanner scan2=new Scanner(System.in);
         x=scan2.nextInt();
         
         
         int daan[]=new int [x];
         
         
         System.out.println("请输入数值的范围");
         y=scan2.nextInt();//y取10
         
         
         for(i=0;i<x;i++){
             int a=(int)(Math.random()*y);//随机生成一个1-10的整数
             int b=(int)(Math.random()*y);//随机生成一个1-10的整数
             int e=(int)(Math.random()*y);//随机生成一个1-10的整数
             int c=(int)(Math.random()*3);//随机生成一个1-4的整数,0表示加法,1表示减法,2表示乘法,3表示除法
             int f=(int)(Math.random()*3);//随机生成一个1-4的整数,0表示加法,1表示减法,2表示乘法,3表示除法
             
             if(c==0&&f==0)
             {
                 d1=a+b+e;
                 System.out.print(a+"+"+b+"+"+e+"=       ");
             }
             
             
             if(c==0&&f==1)
             {
                 d1=a+b-e;
                 System.out.print(a+"+"+b+"-"+e+"=       ");
             }
             
             if(c==0&&f==2)
             {
                 d1=a+b*e;
                 System.out.print(a+"+"+b+"*"+e+"=       ");
             }
             
             if(c==0&&f==3)
             {
                 d1=a+b/e;
                 System.out.print(a+"+"+b+"/"+e+"=       ");
             }
             
             
             if(c==1&&f==0)
             {
                 d1=a-b+e;
                 System.out.print(a+"-"+b+"+"+e+"=       ");
             }
             
             
             if(c==1&&f==1)
             {
                 d1=a-b-e;
                 System.out.print(a+"-"+b+"-"+e+"=       ");
             }
             
             
             if(c==1&&f==2)
             {
                 d1=a-b*e;
                 System.out.print(a+"-"+b+"*"+e+"=       ");
             }
             
             
             if(c==1&&f==3)
             {
                 d1=a-b/e;
                 System.out.print(a+"-"+b+"/"+e+"=       ");
             }
             
             
             
             
             
             
             
             
             
             if(c==2&&f==0)
             {
                 d1=a*b+e;
                 System.out.print(a+"*"+b+"+"+e+"=       ");
             }
             
             
             if(c==2&&f==1)
             {
                 d1=a*b-e;
                 System.out.print(a+"*"+b+"-"+e+"=       ");
             }
             
             if(c==2&&f==2)
             {
                 d1=a*b*e;
                 System.out.print(a+"*"+b+"*"+e+"=       ");
             }
             
             
             if(c==2&&f==3)
             {
                 d1=a*b/e;
                 System.out.print(a+"*"+b+"/"+e+"=       ");
             }
             
             
             if(c==3&&f==0)
             {
                 d1=a/b+e;
                 System.out.print(a+"/"+b+"+"+e+"=       ");
             }
             
             if(c==3&&f==1)
             {
                 d1=a/b-e;
                 System.out.print(a+"/"+b+"-"+e+"=       ");
             }
             
             if(c==3&&f==2)
             {
                 d1=a/b*e;
                 System.out.print(a+"/"+b+"*"+e+"=       ");
             }
             
             if(c==3&&f==3)
             {
                 d1=a/b/e;
                 System.out.print(a+"/"+b+"/"+e+"=       ");
             }
             
             
             if((i+1)%10==0){//每三条作为一行
                 System.out.println();
             }
             daan[i]=d1;  //这次随机的结果
         }
         System.out.println("是否显示答案(显示请输入1)");
         if(scan2.nextInt()==1){
             for(i=0;i<x;i++){
                 if((i+1)%10==0){//每三条作为一行
                     System.out.println();}
             
             System.out.print(daan[i]+"     ");
             }
             
         } 
         
         }
 
 if(a1==2){
             int M,Z;
             System.out.println("请输入题目的数量");
             Scanner scan2=new Scanner(System.in);
             x=scan2.nextInt();
             
             String daan[]=new String [x];
             int x1,x2,B,m1,m2,x3,m3;
             
             
             System.out.println("请输入分母数值的范围");
             B=scan2.nextInt();
             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);//生成一个比分母小的分子,实现真分数
                 m3=1+(int)(Math.random()*B);//随机生成一个小于B的分母
                 x3=1+(int)(Math.random()*m3);//生成一个比分母小的分子,实现真分数
                 int c=(int)(Math.random()*3);//生成运算符
                 int f=(int)(Math.random()*3);//生成运算符
                 
                 
                 if(c==0&&f==0){
                     Z=x1*m2*m3+x2*m1*m3+x3*m1*m2;
                     M=m1*m2*m3;
                     d=counter(Z,M);
                     System.out.print(x1+"/"+m1+"+"+x2+"/"+m2+"+"+x3+"/"+m3+"=       ");
                 }
                 
                 
                 if(c==0&&f==1){
                     Z=x1*m2*m3+x2*m1*m3-x3*m1*m2;
                     M=m1*m2*m3;
                     d=counter(Z,M);
                     System.out.print(x1+"/"+m1+"+"+x2+"/"+m2+"-"+x3+"/"+m3+"=       ");
                 }
                 
                 
                 if(c==0&&f==2){
                     Z=x1*m2*m3+x2*x3*m1;
                     M=m1*m2*m3;
                     d=counter(Z,M);
                     System.out.print(x1+"/"+m1+"+"+x2+"/"+m2+"*"+x3+"/"+m3+"=       ");
                 }
                 
                 
                 if(c==0&&f==3){
                     Z=x1*m2*x3+x2*m1*m3;
                     M=m1*m2*x3;
                     d=counter(Z,M);
                     System.out.print(x1+"/"+m1+"+"+x2+"/"+m2+"/"+x3+"/"+m3+"=       ");
                 }
                 
                 
                 if(c==1&&f==0){
                     Z=x1*m2*m3-x2*m1*m3+x3*m1*m2;
                     M=m1*m2*m3;
                     d=counter(Z,M);
                     System.out.print(x1+"/"+m1+"-"+x2+"/"+m2+"+"+x3+"/"+m3+"=       ");
                 }
                 
                 
                 if(c==1&&f==1){
                     Z=x1*m2*m3-x2*m1*m3-x3*m1*m2;
                     M=m1*m2*m3;
                     d=counter(Z,M);
                     System.out.print(x1+"/"+m1+"-"+x2+"/"+m2+"-"+x3+"/"+m3+"=       ");
                 }
                 
                 if(c==1&&f==2){
                     Z=x1*m2*m3-m1*x2*x3;
                     M=m1*m2*m3;
                     d=counter(Z,M);
                     System.out.print(x1+"/"+m1+"-"+x2+"/"+m2+"*"+x3+"/"+m3+"=       ");
                 }
                 
                 if(c==1&&f==3){
                     Z=x1*m2*x3-m1*x2*m3;
                     M=m1*m2*x3;
                     d=counter(Z,M);
                     System.out.print(x1+"/"+m1+"-"+x2+"/"+m2+"/"+x3+"/"+m3+"=       ");
                 }
                 
                 
                 if(c==2&&f==0){
                     Z=x1*x2*m3+m1*m2*x3;
                     M=m1*m2*m3;
                     d=counter(Z,M);
                     System.out.print(x1+"/"+m1+"*"+x2+"/"+m2+"+"+x3+"/"+m3+"=       ");
                 }
                 
                 
                 if(c==2&&f==1){
                     Z=x1*x2*m3-m1*m2*x3;
                     M=m1*m2*m3;
                     d=counter(Z,M);
                     System.out.print(x1+"/"+m1+"*"+x2+"/"+m2+"-"+x3+"/"+m3+"=       ");
                 }
                 
                 if(c==2&&f==2){
                     Z=x1*x2*x3;
                     M=m1*m2*m3;
                     d=counter(Z,M);
                     System.out.print(x1+"/"+m1+"*"+x2+"/"+m2+"*"+x3+"/"+m3+"=       ");
                 }
                 
                 
                 if(c==2&&f==3){
                     Z=x1*x2*m3;
                     M=m1*m2*x3;
                     d=counter(Z,M);
                     System.out.print(x1+"/"+m1+"*"+x2+"/"+m2+"/"+x3+"/"+m3+"=       ");
                 }
                 
                 if(c==3&&f==0){
                     Z=m1*x2*x3+x1*m2*m3;
                     M=m1*x2*m3;
                     d=counter(Z,M);
                     System.out.print(x1+"/"+m1+"/"+x2+"/"+m2+"+"+x3+"/"+m3+"=       ");
                 }
                 
                 
                 if(c==3&&f==1){
                     Z=x1*m2*m3-m1*x2*x3;
                     M=m1*x2*m3;
                     d=counter(Z,M);
                     System.out.print(x1+"/"+m1+"/"+x2+"/"+m2+"-"+x3+"/"+m3+"=       ");
                 }
                 
                 if(c==3&&f==2){
                     Z=x1*m2*x3;
                     M=m1*x2*m3;
                     d=counter(Z,M);
                     System.out.print(x1+"/"+m1+"/"+x2+"/"+m2+"*"+x3+"/"+m3+"=       ");
                 }
                 
                 
                 if(c==3&&f==3){
                     Z=x1*m2*m3;
                     M=m1*x2*x3;
                     d=counter(Z,M);
                     System.out.print(x1+"/"+m1+"/"+x2+"/"+m2+"/"+x3+"/"+m3+"=       ");
                 }
                 
                 
                 
                 
                 
                 
                 
                 
                 
                 
                 
                 
                 
                 if(c==2){
                     Z=x1*x2;
                     M=m1*m2;
                     d=d=counter(Z,M);
                     System.out.print(x1+"/"+m1+"*"+x2+"/"+m2+"=       ");
                 }
                 if(c==3){
                     Z=m1*x2;
                     M=m2*x1;
                    d=d=counter(Z,M);
                     System.out.print(x1+"/"+m1+"/"+x2+"/"+m2+"=       ");
                 }
                 
                 
                 if((i+1)%3==0){
                     System.out.println();
                 }
                 daan[i]=d;
                 
             }
             System.out.println("是否显示答案(显示请输入1)");
             if(scan2.nextInt()==1){
                 for(i=0;i<x;i++){
                 System.out.print(daan[i]+"     ");
                 }
             
             }
               
         }
 
         
     }
 
     }

整数:

四则运算升级版

 

 

 

分数:

 

四则运算升级版四则运算升级版

 

 

 

1.更新java版本

2.函数功能是出题并给出答案

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/32437.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信