个人作业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.程序分析:
从题目出发完成基本要求
- 完成四则基本运算
- 能处理真分数
- 按用户要求出题目数量
- 能得出用户做题的正确率
c.实现步骤
- 根据用户输入的参数(整数n),生成n道简单的分数运算题
- 获取用户输入的答案
- 校验用户输入的答案和正确的答案
- 给出用户的答题正确率
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表格