一.题目描述:

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

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

Myapp.exe -n 10

二.需求分析
a.需要能够实现对整数和分数的四则运算;

b.能够处理用户输入,能够对用户输入的答案做出比较,求正确率;

c.能够处理用户输入的真分数;

d.随机生成练习题;
e.最好可以让用户自行选择难度,低年级就做简单四则运算,高年级就加入分数,负数等;
三.程序实现
程序实现大体可以分为3个阶段:

①设计整体架构,用选择结构(if或者Swith)对整数和分数分别处理;

②实现整数四则运算的程序编写;

③实现对真分数四则运算的程序编写。

四.代码说明

①整数部分功能较为简单,随机生成2个整数以及整数四则运算方法的编写,低年级不应出现整数过大,负数,不整除情况。(关键代码)

		for (int i = 1; i <= N; i++) {
			int a = (int) (Math.random() * 10 + 1);/*防止出现不好处理的0,很不严谨不可取*/
			int b = (int) (Math.random() * 10 + 1);
			int c = (int) (Math.random() * 4);
			int result = 0;
			switch (c) {
			case 0:
				System.out.print("第" + i + "题" + ": ");
				System.out.print(a + " + " + b + " = ");
				result = a + b;
				break;
			case 1:
				if (a < b) {
					int t = a;/*保证不出现负数*/
					a = b;
					b = t;
				}
				System.out.print("第" + i + "题" + ": ");
				System.out.print(a + " - " + b + " = ");
				result = a - b;
				break;
			case 2:
				System.out.print("第" + i + "题" + ": ");
				System.out.print(a + " × " + b + " = ");
				result = a * b;
				break;
			case 3:
				System.out.print("第" + i + "题" + ": ");
				if (a < b) {
					int t = a;
					a = b;
					b = t;
				}
				if (a % b != 0) {
					a = (int) (Math.random() * 10 + 1) * b;/*保证能整除*/
				}

				System.out.print(a + " ÷ " + b + " = ");
				result = a / b;
				break;
			}

②真分数部分比较复杂,进行分数的加减运算时,需要进行分母的通分,结果得进行约分,保证结果是最简分数(关键代码)。
1.求最大公约数函数:
package yunsun;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.math.RoundingMode;
import java.text.DecimalFormat;
import java.util.Scanner;

public class lastdemo {

private static int Gcd(int num1, int num2) {// 求最大公约数
	num1 = Math.abs(num1);// 负数取绝对值
	num2 = Math.abs(num2);
	int min = Math.min(num1, num2);
	int maxSubmultiple = 1;
	for (int i = min; i >= 1; i--) {
		if (num1 % i == 0 && num2 % i == 0) {
			maxSubmultiple = i;
			break;
		}

	}
	return maxSubmultiple;
}

2.随机生成真分数,以及真分数的四则运算方法具体实现以及用户输入真分数处理,标准答案与用户输入答案比对,正确率计算参见源码。

五.测试运行
1.低年级简单整数四则运算测试结果图:

2.中高年级真分数四则运算测试结果图:



六。PSP图展示:

七.心得体会
java编程基础太差,遇到的问题太多了。每次发现一个小问题都要花费很多时间学习,希望经过今后的多练习能有所改善吧。哇,这个可能是别人的一个小小的作业,对于我,可能是个“小课设”。悲哀。。。
附源代码:https://git.coding.net/a434961671/goujian.git