一.題目描述:java
從《構建之法》第一章的 「程序」 例子出發,像阿超那樣,花二十分鐘寫一個能自動生成小學四則運算題目的命令行 「軟件」,知足如下需求:git
除了整數之外,還要支持真分數的四則運算,真分數的運算,例如:1/6 + 1/8 = 7/24
運算符爲 +, −, ×, ÷而且要求能處理用戶的輸入,並判斷對錯,打分統計正確率,要求能處理用戶輸入的真分數, 如 1/2, 5/12 等
用 -n 參數控制生成題目的個數,例如執行下面命令將生成10個題目編程
Myapp.exe -n 10架構
二.需求分析
a.須要可以實現對整數和分數的四則運算;app
b.可以處理用戶輸入,可以對用戶輸入的答案作出比較,求正確率;dom
c.可以處理用戶輸入的真分數;函數
d.隨機生成練習題;
e.最好可讓用戶自行選擇難度,低年級就作簡單四則運算,高年級就加入分數,負數等;
三.程序實現
程序實現大致能夠分爲3個階段:學習
①設計總體架構,用選擇結構(if或者Swith)對整數和分數分別處理;測試
②實現整數四則運算的程序編寫;.net
③實現對真分數四則運算的程序編寫。
四.代碼說明
①整數部分功能較爲簡單,隨機生成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