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表格