• 个人作业1——四则运算题目生成程序(基于控制台)


    一.题目描述:

    1.除了整数以外,还要支持真分数的四则运算,真分数的运算,例如:1/6 + 1/8 = 7/24

    2.运算符为 +, −, ×, ÷

    3.并且要求能处理用户的输入,并判断对错,打分统计正确率。

    4.要求能处理用户输入的真分数, 如 1/2, 5/12 等

    5.使用 -n 参数控制生成题目的个数,例如执行下面命令将生成10个题目

    6.Myapp.exe -n 10

    二.需求分析:

    1.能随机生成整数和分数的四则运算

    2.能够判断用户的回答是否正确,并计算其准确率

    3.能用参数控制生成题目个数

    三.功能设计:

    1.随机产生四则运算符

    2.随机产生整数或真分数

    3.根据用户需求确定出题数目

    4.处理用户输入并判断正误,计算正确率

    四.代码说明:

    1.随机分数生成方法

    public static int[] createFraction(){    
    int[] n = new int[2];
        int n1 = (int)(Math.random()*10+1);
        int n2 = (int)(Math.random()*10+1);
        if(n1 != n2){
            n[0] = n2;
            n[1] = n1;
        }else
            createFraction();
        return n;
    }
    2.辗转相除法求最大公约数函数

    int maxGYS(int a,int b){
    
        return a%b==0?b:maxGYS(b,a%b);
    
    }
    
    int minGBS(int a,int b)
    
    {
    
        int min, max;
    
        int r;
    
        max=a>b?a:b;
    
        min=a<b?a:b;
    
        if(max%min==0)
    
            return max;
    
        while(max%min!=0)
    
        {
    
            r=max%min;
    
            max=min;
    
            min=r;
    
        }
    
        return a*b/min;
    
    }

    3.四则运算

    int a = (int)(Math.random()*4+1);
                if(a==1){//
                    Question.add("("+fn1[0]+"/"+fn1[1]+")+("+fn2[0]+"/"+fn2[1]+")=");
                    int sum = gbs/fn1[1]*fn1[0] + (gbs / fn2[1]*fn2[0]);
                    int gys1 = GCD(sum,gbs);
                    Answer.add(sum/gys1+"/"+gbs/gys1+"");//化简结果并存储
                }
                if(a==2){//
                    Question.add("("+fn1[0]+"/"+fn1[1]+")-("+fn2[0]+"/"+fn2[1]+")=");
                    int cha = gbs/fn1[1]*fn1[0] - (gbs / fn2[1]*fn2[0]);
                    int gys2 = GCD(cha,gbs);
                    Answer.add(cha/gys2+"/"+gbs/gys2+"");
                }
                if(a==3){//
                    Question.add("("+fn1[0]+"/"+fn1[1]+")×("+fn2[0]+"/"+fn2[1]+")=");
                    int mult1 = fn1[0]*fn2[0]; 
                    int mult2 = fn1[1]*fn2[1];
                    int gys3 = GCD(mult1,mult2);
                    Answer.add(mult1/gys3+"/"+mult2/gys3+"");//
                }
                if(a==4){//
                    Question.add("("+fn1[0]+"/"+fn1[1]+")÷("+fn2[0]+"/"+fn2[1]+")=");
                    int div1 = fn1[0]*fn2[1]; //转化为乘法
                    int div2 = fn1[1]*fn2[0];
                    int gys4 = GCD(div1,div2);
                    Answer.add(div1/gys4+"/"+div2/gys4+"");
                }               
            }

    五.测试运行

    PSP展示:

    PSP2.1 Personal Software Process Stages Time (%) Senior Student Time (%)
    Planning 计划 10 8
    · Estimate 估计这个任务需要多少时间 30 32
    Development 开发 25 23.5
    · Analysis 需求分析 (包括学习新技术) 6 10
    · Design Spec 生成设计文档 5 6
    · Design Review 设计复审 4 6
    · Coding Standard 代码规范 3 2.5
    · Design 具体设计 5 4.5
    · Coding 具体编码 36 21
    · Code Review 代码复审 3 2
    · Test 测试(自我测试,修改代码,提交修改) 8 7
    Reporting 报告 2 2.5
    · 测试报告 4 6
    · 计算工作量 2 1
    · 并提出过程改进计划 4 3.5
     

    总结:

    看到代码实在是头痛,自己的编程能力太弱,一开始拿到题目不知道怎么入手,网上查找了很多资料,才慢慢理清思路,先构思需要的程序公共,再逐步去完成。但是代码实现得并不好,在编程的过程中,碰到许多问题,应该多找找资料,逐步去解决。学习新东西,应该要有耐心。

  • 相关阅读:
    安卓学习57
    安卓学习56
    安卓学习55
    安卓学习54
    安卓学习53
    安卓学习52
    安卓学习51
    安卓学习50
    安卓学习49
    安卓学习48
  • 原文地址:https://www.cnblogs.com/ly-35/p/6517946.html
Copyright © 2020-2023  润新知