1.分析與設計
a.題目要求:
寫一個能自動生成國小四則運算題目的指令行 “軟體”,滿足以下需求:
- 除了整數以外,還要支援真分數的四則運算,真分數的運算,例如:1/6 + 1/8 = 7/24
- 運算符為 +, −, ×, ÷
- 并且要求能處理使用者的輸入,并判斷對錯,打分統計正确率。
- 要求能處理使用者輸入的真分數, 如 1/2, 5/12 等
-
使用 -n 參數控制生成題目的個數,例如執行下面指令将生成10個題目
Myapp.exe -n 10
b.需求分析:
能夠自動生成國小生加減乘除四則運算題目,包括整數和真分數的運算。其需求包括:(1)能夠控制生成題目的個數。(2)判斷對錯并統計正确率。
c.功能設計:
1.基本功能:實作基本的加減乘除四則運算。
2.擴充功能:能夠處理真分數的四則運算。
3.進階功能:判斷對錯并統計正确率。
d.設計實作:
1.本實驗采用java語言。
2.程式包含三個類:(1)Fraction:包括mole、deno兩個屬性,分别是構成分數的分子和分母。
(2)Calculate:包括FraAdd、FraSub、FraMul、FraDiv 四個方法,實作加、減、乘、除四則運算;
以及FraSim和Gcd兩個方法,實作分數的化簡及最大公約數的計算
(3)Test:主函數。可以根據輸入的n,生成相應的題數;
擷取使用者的answer,通過與正确答案的比較,判斷對錯,用right記錄。
e.代碼說明:
求最大公約數:
public int Gcd(int a, int b) {
int temp, r;
if (a < b) {
temp = a;
a = b;
b = temp;
}
while (b != 0) {
r = a % b;
a = b;
b = r;
}
return a;
}
}
分數化簡:
public Fraction FraSim(Fraction f) {
int gcd = Gcd(f.deno, f.mole);
f.deno /= gcd;
f.mole /= gcd;
return f;
}
整數運算:
sign = ran.nextInt(4);
a = ran.nextInt(100);
b = ran.nextInt(100);
System.out.print(a);
switch (sign) {
case 0:
IntRes = a + b;
System.out.print("+");
break;
case 1:
IntRes = a - b;
System.out.print("-");
break;
case 2:
IntRes = a * b;
System.out.print("*");
break;
case 3:
IntRes = a / b;
System.out.print("/");
break;
}
System.out.print(b + "=");
answer = sc.nextInt();
if (answer == IntRes) {
right++;
}
分數運算:
sign = ran.nextInt(4);
f1.deno = ran.nextInt(50) + 1;
f1.mole = ran.nextInt(50);
f2.deno = ran.nextInt(50) + 1;
f2.mole = ran.nextInt(50);
System.out.print(f1.mole + "/" + f1.deno);
switch (sign) {
case 0:
FraRes = cal.FraAdd(f1, f2);
System.out.print("+");
break;
case 1:
FraRes = cal.FraSub(f1, f2);
System.out.print("-");
break;
case 2:
FraRes = cal.FraMul(f1, f2);
System.out.print("*");
break;
case 3:
FraRes = cal.FraDiv(f1, f2);
System.out.print("/");
break;
}
System.out.print(f2.mole + "/" + f2.deno + "=");
FraAns = sc.next();
fras = FraAns.split("/");
FraM = Integer.parseInt(fras[0]);
FraD = Integer.parseInt(fras[1]);
if (FraM == FraRes.mole && FraD == FraRes.deno) {
right++;
}
f.測試運作:

2.展示psp
PSP2.1 | Personal Software Process Stages | Time (h) Senior Student | Time (h) |
Planning | 計劃 | 1 | 1.5 |
Estimate | 估計這個任務需要多少時間 | 10 | 13 |
Analysis | 需求分析 (包括學習新技術) | 0.5 | |
Coding Standard | 代碼規範 | 2 | |
Design | 具體設計 | 3 | |
具體編碼 | 5 | 6 | |
Test | 測試(自我測試,修改代碼,送出修改) | ||
Reporting | 報告 |
3.小結
a.在實驗過程中,由于java知識的遺忘,導緻時常需要查閱資料,用時過長,需多加鞏固練習。
b.在實驗主要遇到的問題是随機數的生成,後采用Random類的nextInt()方法擷取。
c.在生成題目時,将整數和分數分成兩種類型運算,導緻無法進行整數與分數的計算。
d.在使用者輸入中,沒有進行異常的處理,還需加強完善。
e.通過本次實驗,進一步提升了我在程式設計中分析問題,解決問題的能力,希望有今後的實驗中有更多的進步。
4.具體代碼
https://git.coding.net/byc-xiong/test1.git