个人作业1——四则运算题目生成程序

一、需求分析
(1)除了整数以外,还要支持真分数的四则运算,真分数的运算,例如:1/6 + 1/8 = 7/24
(2)运算符为 +, −, ×, ÷
(3)并且要求能处理用户的输入,并判断对错,打分统计正确率。
(4)要求能处理用户输入的真分数, 如 1/2, 5/12 等
(5)使用 -n 参数控制生成题目的个数,例如执行下面命令将生成10个题目Myapp.exe -n 10
二、功能设计
(1)可以随机产生真分数以及四则运算式,除了整数以外,也支持真分数的四则运算
(2)可以实现对用户要求的题目数量的计算
(3)该程序可计算出正确的答案并与用户输入的答案进行比较,最后统计出正确率
三、设计实现
该程序通过JAVA实现,主要设计了一个类(class zuoye1)和四个函数(Fraction、GCD、LCM、主函数main)
(1)Fraction函数:用来实现对随机真分数的产生
(2)GCD:用来求两个数之间的最大公约数,通过递归算法求出,使整体计算简便
(3)LCM:用来求两个数之间的最小公倍数,通过递归算法求出,使整体计算简便
(4)主函数main:随机生成四则运算式,计算正确答案并与用户的答案对比,统计正确率
四、代码说明
Fraction函数:

  public static int[] Fraction(){//随机生成真分数
        int[] n = new int[2];
        int q = (int)(Math.random()*10+1);//随机生成分母,分母≠0
        int Q = (int)(Math.random()*10+1);//随机生成分子,分母>分子,分子≠0
        if(q != Q){
            n[0] = Q;
            n[1] = q;
        }else
            Fraction();
        return n;
        }

GCD:

  public static int GCD(int m, int n) {//递归法求最大公约数
        if(m < n){//保证m>n,否则进行交换
            int t = m;
            m = n;
            n= t;
        }
        if(m % n == 0){//若余数为0,返回最大公约数
            return n;
        }else{//否则进行递归
            return GCD(n, m % n);
        }
    }

LCM:

   public static int LCM(int m, int n){//求最小公倍数
        return m * n / GCD(m,n);
    }

部分主函数:

   public static void main(String[] args){//随机生成四则运算式
        ArrayList<String>Question = new ArrayList<String>();//题目存储列表
        ArrayList<String>Answer = new ArrayList<String>();//答案存储列表
        System.out.println("请输入题目数量:");
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int m = (int)(Math.random()*n);//随机整数题目和分数题目的题量
        int x;
        int y;
        for(int i = 0;i<(n-m);i++){//先随机出整数题型
            x = (int)(Math.random()*10);
            y = (int)(Math.random()*10);
            if(y != 0){//当进行除法时,0不能作为除数
                int a = (int)(Math.random()*4+1);//随机决定运算类型
                if(a == 1){
                    Question.add(x+"+"+y+"=");
                    Answer.add(x+y+"");
                }
                if(a == 2){
                    Question.add(x+"-"+y+"=");
                    Answer.add(x-y+"");
                }
                if(a == 3){
                    Question.add(x+"×"+y+"=");
                    Answer.add(x*y+"");
                }
                if(a == 4){
                    Question.add(x+"÷"+y+"=");
                    BigDecimal b =new BigDecimal((float)x/y);
                    float ans = b.setScale(1,BigDecimal.ROUND_UP).floatValue();//保留一位小数,四舍五入
                    Answer.add(ans+"");
                }


                }else{//当y值为0时不产生除法运算
                    int a = (int)(Math.random()*3+1);
                    if(a == 1){
                        Question.add(x+"+"+y+"=");
                        Answer.add(x+y+"");
                    }
                    if(a == 2){
                        Question.add(x+"-"+y+"=");
                        Answer.add(x-y+"");
                    }
                    if(a == 3){
                        Question.add(x+"×"+y+"=");
                        Answer.add(x*y+"");
                    }
            }
        }

五:运行截图

六:PSP

小结:这次实验对我来来说较为困难,经过查看了一些资料,还借鉴了其他同学对本次实验代码的实现,最终决定采用JAVA。在网上找了一些类似的代码,经过修修改改,大抵完成了这次实验。但是整体上还是存在问题的,比如代码的扩展性不是很好,这个还需修改完善。

码市链接:https://coding.net/u/hjyaaa/p/zuoye1/git/blob/master/zuoye1.java

posted @ 2017-03-07 20:14  星期三  阅读(261)  评论(1编辑  收藏  举报