zoukankan      html  css  js  c++  java
  • 个人作业1——四则运算题目生成程序

    Coding地址:

    https://git.coding.net/lianlian/96.1.git

    题目:能自动生成小学四则运算题目的命令行 “软件”

    第一部分:

    a.需求分析:

    1. 除了整数以外,还要支持真分数的四则运算,真分数的运算,例如:1/6 + 1/8 = 7/24
    2. 运算符为 +, −, ×, ÷
    3. 并且要求能处理用户的输入,并判断对错,打分统计正确率。
    4. 要求能处理用户输入的真分数, 如 1/2, 5/12 等
    5. 使用 -n 参数控制生成题目的个数,例如执行下面命令将生成10个题目
      Myapp.exe -n 10


    b.功能设计:

        基本功能:实现简单的四则运算出题

        扩展功能:验证对错,如果错误显示正确答案并统计正确率

        高级功能:能够进行记时

     

    c.设计实现:

     分数类 Fraction:

                 属性:numerator//分子

                       denominator//分母

                 方法:creatfraction() //创建分数   

                       GCD(int m, int n) //计算最大公约数

                       Reduction(int m, int n) //约分

                              compare(String m, String n) //比较输入结果与答案

    计算类 Calculator

                           方法add(Fraction a, Fraction b) //加法

                        sub(Fraction a, Fraction b) //减法 

                        mul(Fraction a, Fraction b)//乘法

                        div(Fraction a, Fraction b)//除法

    运行类 Test:

                   main函数执行

    d.代码说明:

    计算公约数:

    public static int GCD(int m, int n) {//辗转相除法
            while (m % n != 0) {
                int t = m % n;
                m = n;
                n = t;
            }
            return n;
        }

    约分:

    public static String Reduction(int m, int n) //约分
        {
            String t;
            if (n == 1) {
                t = m + "";
            } else {
                t = (m) + "" + "/" + (n) + "";
            }
            return t;
        }

    加法运算: 

    public static String add(Fraction a, Fraction b) //加法
            {
                int m = a.getNumerator() *b.getDenominator()  + a.getDenominator() * b.getNumerator();
                int n = a.getDenominator() * b.getDenominator();
                int t = Fraction.GCD(m,n);
                return Fraction.Reduction(m / t, n / t);
            }

    减法运算:

    public static String sub(Fraction a, Fraction b)//减法
            {    
                int m = a.getNumerator() * b.getDenominator() - a.getDenominator() * b.getNumerator();
                int n = a.getDenominator() * b.getDenominator();
                int t = Fraction.GCD(m,n);
                return Fraction.Reduction(m / t, n / t);
            }

    乘法运算:

    public static String mul(Fraction a, Fraction b)//乘法
            {
                int m = a.getNumerator() * b.getNumerator();
                int n = a.getDenominator() * b.getDenominator();
                int t = Fraction.GCD(m,n);
                return Fraction.Reduction(m / t, n / t);
            }

    除法部分 :

    public static String div(Fraction a, Fraction b)//除法
            {
                int m = a.getNumerator() * b.getDenominator();
                int n = a.getDenominator() * b.getNumerator();
                int t = Fraction.GCD(m,n);
                return Fraction.Reduction(m / t, n / t);
            }

     验证对错,如果错误显示正确答案:

    public static boolean compare(String m, String n) //比较输入结果与答案
            {
                if (m.equals(n))
                    {System.out.println("恭喜你,回答正确!");
                    return true;}
                else
                    {
                    System.out.println("回答错误,再接再厉,正确答案是:" + n);
                    return false;
                    }
            }

    统计正确率、记时:

    public class Test {
        @SuppressWarnings("resource")
        public static void main(String[] args) {
            Fraction f1 = new Fraction();
            Fraction f2 = new Fraction();
            int operator;
            int right=0,wrong=0;
            String answer;       
            Scanner s1 = new Scanner(System.in);
            System.out.println("请输入想要完成的题目数 :");
            int i = s1.nextInt();
            long begin = System.currentTimeMillis();
    ...
    long end = System.currentTimeMillis(); long hour = (end - begin)/3600000; long minute = (end - begin-hour*36000000)/60000; long second = (end - begin-hour*36000000-minute*60000)/1000; double total = (double)right+wrong; System.out.println(" 您已完成练习!"); System.out.println("你所用的时间是:" + hour+"小时"+minute+"分钟"+ second+"秒"); System.out.println(' '+"一共有"+i+"题"+" ,"+"做对"+right+"题"+" ,"+"做错"+wrong+"题"); System.out.printf("正确率:%f",right/total *100 ); System.out.println("%"); } }

    e测试运行:

     

    第二部分:

    展示PSP:

    PSP2.1

    Personal Software Process Stages

    Time (%) Senior Student

    Time (%)

    Planning

    计划

    2h

    2h

    · Estimate

    估计这个任务需要多少时间

    40h

    43h

    · Analysis

    需求分析 (包括学习新技术)

    4h

    5h

    · Coding Standard

    代码规范

    1.5h

    2h

    · Design

    具体设计

    3h

    2h

    · Coding

    具体编码

    27h

    30h

    · Test

    测试(自我测试,修改代码,提交修改)

    1.5h

    1h

    Reporting

    报告

    1h

    1h

     

    第三部分:

    小结:在百度加同学的帮助之下终于完成了这次的作业,程序主要实现基本的四则运算,不能支持多个运算符,代码真的需要不断地练习与尝试。

  • 相关阅读:
    阻止事件冒泡
    移动端开发
    angular6 管道多参数传输 Pipe
    在div上添加小三角
    angular6 使用@Input() @Output()
    angular6 想要获取页面某些事件 如 点击 window宽高等等
    如何将项目添加到git上
    使用vue-cli 搭建element-admin后台
    bootstrap4 常用样式类名 (供自己参考)
    键盘按下 keyCode 的值
  • 原文地址:https://www.cnblogs.com/lianlianya/p/6516100.html
Copyright © 2011-2022 走看看