zoukankan      html  css  js  c++  java
  • 软件工程作业02

    题目:自动生成小学算数题,且有要求。(是否有乘除法,减法是否有负数,除法是否有余数等)

    设计思想:写一个定制生成数量的函数num(); 写一个生成整数算术题的函数function();function函数中可以直接生成随机数,用if语句进行分母为0或者减法过后结果为负数的情况的排除,运算符号也用随机数0到3来表示,返回值为String的式子即为算数题式子。写一个生成整数算术题的函数fun();fun函数中可以直接生成随机数,用if语句进行分母为0或者减法过后结果为负数的情况的排除,运算符号也用随机数0到3来表示,返回值为String的式子即为分数算数题式子。在生成算术式子的函数中用if语句进行判断生成哪种要求的算术式子。主函数中用一个String类型的数组保存算数题,用类似查询的方法来查重题目,不重复后输出题目。

    源代码:

    package suanshuti;
    
    import java.util.Scanner;
    
    public class Timu2 {
    
        //最大公约
        static double getGcd(double m,double n){
                while(n > 0){
                    double temp = m % n;
                    m = n;
                    n = temp;
                }
                return m;
            }
         //最小公倍数
        static double getLcm(double m,double n){
             double gcd = getGcd(m,n);
             double result = m*n / gcd;
                return result;
            }
        //生成题目数量的函数*************
        static int num()
        {
            int num;
            @SuppressWarnings("resource")
            Scanner in =  new Scanner(System.in);
            System.out.print("请输入题目的数量:");
            num = in.nextInt();
            return num;
        }
        
        //产生分数式子的函数*************
        static String fun(int r ,int fun)//int fun为功能选项
        {
            //1有乘除法2减法无负数
            String fu ="";
            String shizi="";
            int a=(int)(Math.random()*(r+1));
            int b=(int)(Math.random()*(r+1));
            int c=(int)(Math.random()*(r+1));
            int d=(int)(Math.random()*(r+1));
            int e=(int)(Math.random()*4);
            //1有乘除法2减法无负数***12
            if(fun==12)
            {
            if(e==0)
            {
                fu="+";
                while(a>=b||c>=d||b==0||d==0)
                {
                     a=(int)(Math.random()*(r+1));
                     b=(int)(Math.random()*(r+1));
                     c=(int)(Math.random()*(r+1));
                     d=(int)(Math.random()*(r+1));
                }
                int aa=(int) getGcd(a,b);
                int cc=(int) getGcd(c,d);
                a=a/aa; b=b/aa;
                c=c/cc; d=d/cc;
                shizi=a+"/"+b+" "+fu+" "+c+"/"+d+" = ?";
            }
            if(e==1)
            {
                fu="-";
                double y=getLcm(b,d);
                double a1=y/b;
                double c1=y/d;
                double a2=a*a1;
                double c2=c*c1;
                while(a>=b||c>=d||b==0||d==0||a2<c2)
                {
                     a=(int)(Math.random()*(r+1));
                     b=(int)(Math.random()*(r+1));
                     c=(int)(Math.random()*(r+1));
                     d=(int)(Math.random()*(r+1));
                      y=getLcm(b,d);
                         a1=y/b;
                         c1=y/d;
                         a2=a*a1;
                         c2=c*c1;
                }
                int aa=(int) getGcd(a,b);
                int cc=(int) getGcd(c,d);
                a=a/aa; b=b/aa;
                c=c/cc; d=d/cc;
                shizi=a+"/"+b+" "+fu+" "+c+"/"+d+" = ?";
            }
            if(e==2)
            {
                fu="*";
                while(a>=b||c>=d||b==0||d==0)
                {
                     a=(int)(Math.random()*(r+1));
                     b=(int)(Math.random()*(r+1));
                     c=(int)(Math.random()*(r+1));
                     d=(int)(Math.random()*(r+1));
                }
                int aa=(int) getGcd(a,b);
                int cc=(int) getGcd(c,d);
                a=a/aa; b=b/aa;
                c=c/cc; d=d/cc;
                shizi=a+"/"+b+" "+fu+" "+c+"/"+d+" = ?";
            }
            if(e==3)
            {
                fu="/";
                while(a>=b||c>=d||b==0||d==0||c==0)
                {
                     a=(int)(Math.random()*(r+1));
                     b=(int)(Math.random()*(r+1));
                     c=(int)(Math.random()*(r+1));
                     d=(int)(Math.random()*(r+1));
                }
                int aa=(int) getGcd(a,b);
                int cc=(int) getGcd(c,d);
                a=a/aa; b=b/aa;
                c=c/cc; d=d/cc;
                shizi=a+"/"+b+" "+fu+" "+c+"/"+d+" = ?";
            }
            }
            //1有乘除法2减法无负数***1
            if(fun==1)
            {
            if(e==0)
            {
                fu="+";
                while(a>=b||c>=d||b==0||d==0)
                {
                     a=(int)(Math.random()*(r+1));
                     b=(int)(Math.random()*(r+1));
                     c=(int)(Math.random()*(r+1));
                     d=(int)(Math.random()*(r+1));
                }
                int aa=(int) getGcd(a,b);
                int cc=(int) getGcd(c,d);
                a=a/aa; b=b/aa;
                c=c/cc; d=d/cc;
                shizi=a+"/"+b+" "+fu+" "+c+"/"+d+" = ?";
            }
            if(e==1)
            {
                fu="-";
                while(a>=b||c>=d||b==0||d==0)
                {
                     a=(int)(Math.random()*(r+1));
                     b=(int)(Math.random()*(r+1));
                     c=(int)(Math.random()*(r+1));
                     d=(int)(Math.random()*(r+1));
                }
                int aa=(int) getGcd(a,b);
                int cc=(int) getGcd(c,d);
                a=a/aa; b=b/aa;
                c=c/cc; d=d/cc;
                shizi=a+"/"+b+" "+fu+" "+c+"/"+d+" = ?";
            }
            if(e==2)
            {
                fu="*";
                while(a>=b||c>=d||b==0||d==0)
                {
                     a=(int)(Math.random()*(r+1));
                     b=(int)(Math.random()*(r+1));
                     c=(int)(Math.random()*(r+1));
                     d=(int)(Math.random()*(r+1));
                }
                int aa=(int) getGcd(a,b);
                int cc=(int) getGcd(c,d);
                a=a/aa; b=b/aa;
                c=c/cc; d=d/cc;
                shizi=a+"/"+b+" "+fu+" "+c+"/"+d+" = ?";
            }
            if(e==3)
            {
                fu="/";
                while(a>=b||c>=d||b==0||d==0||c==0)
                {
                     a=(int)(Math.random()*(r+1));
                     b=(int)(Math.random()*(r+1));
                     c=(int)(Math.random()*(r+1));
                     d=(int)(Math.random()*(r+1));
                }
                int aa=(int) getGcd(a,b);
                int cc=(int) getGcd(c,d);
                a=a/aa; b=b/aa;
                c=c/cc; d=d/cc;
                shizi=a+"/"+b+" "+fu+" "+c+"/"+d+" = ?";
            }
            }
            //1有乘除法2减法无负数***2
            if(fun==2)
            {
            if(e==0)
            {
                fu="+";
                while(a>=b||c>=d||b==0||d==0)
                {
                     a=(int)(Math.random()*(r+1));
                     b=(int)(Math.random()*(r+1));
                     c=(int)(Math.random()*(r+1));
                     d=(int)(Math.random()*(r+1));
                }
                int aa=(int) getGcd(a,b);
                int cc=(int) getGcd(c,d);
                a=a/aa; b=b/aa;
                c=c/cc; d=d/cc;
                shizi=a+"/"+b+" "+fu+" "+c+"/"+d+" = ?";
            }
            if(e==1)
            {
                fu="-";
                double y=getLcm(b,d);
                double a1=y/b;
                double c1=y/d;
                double a2=a*a1;
                double c2=c*c1;
                while(a>=b||c>=d||b==0||d==0||a2<c2)
                {
                     a=(int)(Math.random()*(r+1));
                     b=(int)(Math.random()*(r+1));
                     c=(int)(Math.random()*(r+1));
                     d=(int)(Math.random()*(r+1));
                      y=getLcm(b,d);
                         a1=y/b;
                         c1=y/d;
                         a2=a*a1;
                         c2=c*c1;
                }
                int aa=(int) getGcd(a,b);
                int cc=(int) getGcd(c,d);
                a=a/aa; b=b/aa;
                c=c/cc; d=d/cc;
                shizi=a+"/"+b+" "+fu+" "+c+"/"+d+" = ?";
            }
            if(e==2)
            {
                fu="+";
                while(a>=b||c>=d||b==0||d==0)
                {
                     a=(int)(Math.random()*(r+1));
                     b=(int)(Math.random()*(r+1));
                     c=(int)(Math.random()*(r+1));
                     d=(int)(Math.random()*(r+1));
                }
                int aa=(int) getGcd(a,b);
                int cc=(int) getGcd(c,d);
                a=a/aa; b=b/aa;
                c=c/cc; d=d/cc;
                shizi=a+"/"+b+" "+fu+" "+c+"/"+d+" = ?";
            }
            if(e==3)
            {
                fu="-";
                double y=getLcm(b,d);
                double a1=y/b;
                double c1=y/d;
                double a2=a*a1;
                double c2=c*c1;
                while(a>=b||c>=d||b==0||d==0||a2<c2)
                {
                     a=(int)(Math.random()*(r+1));
                     b=(int)(Math.random()*(r+1));
                     c=(int)(Math.random()*(r+1));
                     d=(int)(Math.random()*(r+1));
                      y=getLcm(b,d);
                         a1=y/b;
                         c1=y/d;
                         a2=a*a1;
                         c2=c*c1;
                }
                int aa=(int) getGcd(a,b);
                int cc=(int) getGcd(c,d);
                a=a/aa; b=b/aa;
                c=c/cc; d=d/cc;
                shizi=a+"/"+b+" "+fu+" "+c+"/"+d+" = ?";
            }
            }
            //1有乘除法2减法无负数***0
            if(fun==0)
            {
            if(e==0)
            {
                fu="+";
                while(a>=b||c>=d||b==0||d==0)
                {
                     a=(int)(Math.random()*(r+1));
                     b=(int)(Math.random()*(r+1));
                     c=(int)(Math.random()*(r+1));
                     d=(int)(Math.random()*(r+1));
                }
                int aa=(int) getGcd(a,b);
                int cc=(int) getGcd(c,d);
                a=a/aa; b=b/aa;
                c=c/cc; d=d/cc;
                shizi=a+"/"+b+" "+fu+" "+c+"/"+d+" = ?";
            }
            if(e==1)
            {
                fu="-";
                while(a>=b||c>=d||b==0||d==0)
                {
                     a=(int)(Math.random()*(r+1));
                     b=(int)(Math.random()*(r+1));
                     c=(int)(Math.random()*(r+1));
                     d=(int)(Math.random()*(r+1));
                }
                int aa=(int) getGcd(a,b);
                int cc=(int) getGcd(c,d);
                a=a/aa; b=b/aa;
                c=c/cc; d=d/cc;
                shizi=a+"/"+b+" "+fu+" "+c+"/"+d+" = ?";
            }
            if(e==2)
            {
                fu="+";
                while(a>=b||c>=d||b==0||d==0)
                {
                     a=(int)(Math.random()*(r+1));
                     b=(int)(Math.random()*(r+1));
                     c=(int)(Math.random()*(r+1));
                     d=(int)(Math.random()*(r+1));
                }
                int aa=(int) getGcd(a,b);
                int cc=(int) getGcd(c,d);
                a=a/aa; b=b/aa;
                c=c/cc; d=d/cc;
                shizi=a+"/"+b+" "+fu+" "+c+"/"+d+" = ?";
            }
            if(e==3)
            {
                fu="-";
                while(a>=b||c>=d||b==0||d==0)
                {
                     a=(int)(Math.random()*(r+1));
                     b=(int)(Math.random()*(r+1));
                     c=(int)(Math.random()*(r+1));
                     d=(int)(Math.random()*(r+1));
                }
                int aa=(int) getGcd(a,b);
                int cc=(int) getGcd(c,d);
                a=a/aa; b=b/aa;
                c=c/cc; d=d/cc;
                shizi=a+"/"+b+" "+fu+" "+c+"/"+d+" = ?";
            }
            }
            return shizi;
        }
        //生成整数式子的函数******************************

    static String function(int r ,int q, int fun)//int fun为功能选项 { //1有乘除法 2加减无负数 3除法无余数(123,12,1,13, 2,0) String fu =""; String shizi=""; int a=(int)(Math.random()*(r)%(r-q+1)+q); int b=(int)(Math.random()*(r)%(r-q+1)+q); int c=(int)(Math.random()*4); //1乘除法 2加减无负数 3除法无余数****123 if(fun==123) { if(c==0) { fu="+"; shizi=a+" "+fu+" "+b+" = ?"; } if(c==1) { fu="-"; //排除负数可能性 while(a-b<0) { a=(int)(Math.random()*(r)%(r-q+1)+q); b=(int)(Math.random()*(r)%(r-q+1)+q); } shizi=a+" "+fu+" "+b+" = ?"; } if(c==2) { fu="*"; shizi=a+" "+fu+" "+b+" = ?"; } if(c==3) { fu="/"; //排除分母为0的可能性 while(b==0||a%b!=0) { a=(int)(Math.random()*(r)%(r-q+1)+q); b=(int)(Math.random()*(r)%(r-q+1)+q); } shizi=a+" "+fu+" "+b+" = ?"; } } //1乘除法 2加减无负数 3除法无余数****12 if(fun==12) { if(c==0) { fu="+"; shizi=a+" "+fu+" "+b+" = ?"; } if(c==1) { fu="-"; //排除负数可能性 while(a-b<0) { a=(int)(Math.random()*(r)%(r-q+1)+q); b=(int)(Math.random()*(r)%(r-q+1)+q); } shizi=a+" "+fu+" "+b+" = ?"; } if(c==2) { fu="*"; shizi=a+" "+fu+" "+b+" = ?"; } if(c==3) { fu="/"; //排除分母为0的可能性 while(b==0) { b=(int)(Math.random()*(r)%(r-q+1)+q); } shizi=a+" "+fu+" "+b+" = ?"; } } //1乘除法 2加减无负数 3除法无余数****13 if(fun==13) { if(c==0) { fu="+"; shizi=a+" "+fu+" "+b+" = ?"; } if(c==1) { fu="-"; shizi=a+" "+fu+" "+b+" = ?"; } if(c==2) { fu="*"; shizi=a+" "+fu+" "+b+" = ?"; } if(c==3) { fu="/"; //排除分母为0和余数的可能性 while(b==0||a%b!=0) { a=(int)(Math.random()*(r)%(r-q+1)+q); b=(int)(Math.random()*(r)%(r-q+1)+q); } shizi=a+" "+fu+" "+b+" = ?"; } } //1乘除法 2加减无负数 3除法无余数****1 if(fun==1) { if(c==0) { fu="+"; shizi=a+" "+fu+" "+b+" = ?"; } if(c==1) { fu="-"; shizi=a+" "+fu+" "+b+" = ?"; } if(c==2) { fu="*"; shizi=a+" "+fu+" "+b+" = ?"; } if(c==3) { fu="/"; //排除分母为0的可能性 while(b==0) { b=(int)(Math.random()*(r)%(r-q+1)+q); } shizi=a+" "+fu+" "+b+" = ?"; } } //1乘除法 2加减无负数 3除法无余数****2 if(fun==2) { if(c==0) { fu="+"; shizi=a+" "+fu+" "+b+" = ?"; } if(c==1) { fu="-"; //排除负数可能性 while(a-b<0) { a=(int)(Math.random()*(r)%(r-q+1)+q); b=(int)(Math.random()*(r)%(r-q+1)+q); } shizi=a+" "+fu+" "+b+" = ?"; } if(c==2) { fu="+"; shizi=a+" "+fu+" "+b+" = ?"; } if(c==3) { fu="-"; //排除负数可能性 while(a-b<0) { a=(int)(Math.random()*(r)%(r-q+1)+q); b=(int)(Math.random()*(r)%(r-q+1)+q); } shizi=a+" "+fu+" "+b+" = ?"; } } //1乘除法 2加减无负数 3除法无余数****0 if(fun==0) { if(c==0) { fu="+"; shizi=a+" "+fu+" "+b+" = ?"; } if(c==1) { fu="-"; shizi=a+" "+fu+" "+b+" = ?"; } if(c==2) { fu="+"; shizi=a+" "+fu+" "+b+" = ?"; } if(c==3) { fu="-"; shizi=a+" "+fu+" "+b+" = ?"; } } return shizi; } @SuppressWarnings("resource") public static void main(String[] args) { int num1,r = 0,q = 0,r1,m=0,fun ; while(m==0) { int flag=0; System.out.print("1:真分数 2:数整 3:退出 请输入:"); Scanner in2 = new Scanner(System.in); r1 = in2.nextInt(); if(r1==1) { num1=num(); String Array1[]=new String[num1]; System.out.print("请输入算数题中出现的数的最大值:"); Scanner in1 = new Scanner(System.in); r = in1.nextInt(); System.out.println("请输入算数题的控制项(1有乘除法 2加减无负数 0都未选择)"); System.out.println("例如:12是有乘除法,加减法无负数"); System.out.print("请输入控制项:"); Scanner in21 = new Scanner(System.in); fun = in21.nextInt(); while(flag==0) { if(fun==12||fun==1||fun==2||fun==0) { for(int i=0;i<num1;i++) { Array1[i]=fun(r,fun); //查重 for(int z=0;z<i;z++) { if(Array1[z].equals(Array1[i])) { Array1[i]=fun(r,fun); z=0; } } flag=1; if(i%3==0) System.out.println(); System.out.print(Array1[i]+" "); } } else { System.out.println("输入错误,请重新输入!"); flag=1; } } } if(r1==2) { num1=num(); String Array[]=new String[num1]; //进行最大值最小值的顺序判断*** int w1=0;; while(w1==0) { System.out.print("请输入算数题中出现的数的最大值和最小值:"); Scanner in1 = new Scanner(System.in); r = in1.nextInt(); q = in1.nextInt(); if(r>=q) w1=1; else { w1=0; System.out.println("输入错误!"); } } System.out.println("请输入算数题的控制项(1有乘除法 2加减无负数 3除法无余数 0都未选择)"); System.out.println("例如:123是有乘除法,加减法无负数,除法无余数"); System.out.print("请输入控制项:"); Scanner in211 = new Scanner(System.in); fun = in211.nextInt(); while(flag==0) { if(fun==123||fun==12||fun==1||fun==13||fun==2||fun==0) { for(int i=0;i<num1;i++) { Array[i]=function(r,q,fun); //查重 for(int z=0;z<i;z++) { if(Array[z].equals(Array[i])) { Array[i]=function(r,q,fun); z=0; } } flag=1; if(i%3==0) System.out.println(); System.out.print(Array[i]+" "); } } if(fun!=123&&fun!=12&&fun!=1&&fun!=13&&fun!=2&&fun!=0) { System.out.println("输入错误,请重新输入!"); flag=1; } } } if(r1==3) { m=1; System.out.print("谢谢使用!"); } System.out.println(); } } }

    结果截图:

    过程中产生的错误和不足:分数的除法只想到了每一个分数的分母不能等于0,没想到被除数也不能等于0,开始会生成1/2 / 0/1=?这样的式子,其实这样的式子是不正确的。后来在while语句中加了一个c==0的情况排除上面的情况。还有分数开始时候没有约分,之后运用最大公约数最小公倍数进行约分。

  • 相关阅读:
    理解session
    java ee后台运行原理(Servlet)
    XML:是什么?怎样工作的?可以做什么?将来的发展有会怎样?
    互联网应用与企业级应用的区别
    自我介绍
    补充第一周
    第一周代码(四则运算)
    自我介绍
    程序1:自动生成小学四则运算题目
    初读《构建之法现代软件工程》的5个疑问
  • 原文地址:https://www.cnblogs.com/lhj1017/p/6531479.html
Copyright © 2011-2022 走看看