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

coding.net地址:https://git.coding.net/YJc_/First-homework.git

 


 

a.题目描述:

从《构建之法》第一章的 “程序” 例子出发,像阿超那样,花二十分钟写一个能自动生成小学四则运算题目的命令行 “软件”,满足以下需求:

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

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

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

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

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


 

b.程序分析:

从题目出发完成基本要求

  1. 完成四则基本运算
  2. 能处理真分数
  3. 按用户要求出题目数量
  4. 能得出用户做题的正确率

 

c.实现步骤

  1. 根据用户输入的参数(整数n),生成n道简单的分数运算题
  2. 获取用户输入的答案
  3. 校验用户输入的答案和正确的答案
  4. 给出用户的答题正确率
Fraction类

 

class Fraction {
    private int c;
    private int d;
}

主要四则运算代码:

    // ----- plus
    public Fraction minus(Fraction f2) {
        int newNumerator = c * f2.getDinominator() - d * f2.getNumerator();
        int newDinominator = d * f2.getDinominator();

        int maxCommon = commonDivisor(newNumerator, newDinominator);
        return new Fraction(newNumerator / maxCommon, newDinominator
                / maxCommon);
    }

    // ----- minus
    public Fraction plus(Fraction f2) {
        int newNumerator = c * f2.getDinominator() + d * f2.getNumerator();
        int newDinominator = d * f2.getDinominator();

        int maxCommon = commonDivisor(newNumerator, newDinominator);
        return new Fraction(newNumerator / maxCommon, newDinominator
                / maxCommon);
    }

    // ----- mutiply
    public Fraction multiply(Fraction f2) // 两个分数相乘。
    {
        int newNumerator = c * f2.getNumerator();
        int newDinominator = d * f2.getDinominator();

        int maxCommon = commonDivisor(newNumerator, newDinominator);
        return new Fraction(newNumerator / maxCommon, newDinominator
                / maxCommon);
    }

    // ----- divide
    public Fraction divide(Fraction f2) {
        if (f2.getNumerator() == 0) {
            System.out.println("0不能做除数!");
            // System.exit(0);
        }
        Fraction result = new Fraction();
        int newNumerator = c * f2.getDinominator();
        int newDinominator = d * f2.getNumerator();

        int maxCommon = commonDivisor(newNumerator, newDinominator);
        return new Fraction(newNumerator / maxCommon, newDinominator
                / maxCommon);
    }

主要算法:

    public static int commonDivisor(int x, int y) // 计算2个数的最大公约数。按绝对值计算。
    {
        if (x == 0 || y == 0) {
            return 1;
        }
        int x1;
        int y1;

        x1 = (Math.abs(x) > Math.abs(y)) ? Math.abs(x) : Math.abs(y); // 使x1>y1.
        y1 = (Math.abs(x) > Math.abs(y)) ? Math.abs(y) : Math.abs(x);
        int z = 1;
        while (z != 0) {
            z = x1 % y1;
            x1 = y1;
            y1 = z;
        }
        return x1;
    }

d.程序测试


e.实验总结和自我评价

  • 第一次编写博客随笔,参考了一些同学的博客,有一些不足的地方。
  • 使用java语言编程这个程序的时候遇到一些函数的使用,经常要翻看参考手册,所以在编程的时候周期较长。
  • 本身编程能力不足,有的功能实现不了,但是会继续学习,多参考专业同学的实现方法。

 

psp表格

 

posted @ 2017-03-05 13:21  _YJc  阅读(241)  评论(0编辑  收藏  举报