天天看點

個人作業1——四則運算題目生成程式(基于控制台)

1.分析與設計

a.題目要求: 

    寫一個能自動生成國小四則運算題目的指令行 “軟體”,滿足以下需求:

  1. 除了整數以外,還要支援真分數的四則運算,真分數的運算,例如:1/6 + 1/8 = 7/24
  2. 運算符為 +, −, ×, ÷
  3. 并且要求能處理使用者的輸入,并判斷對錯,打分統計正确率。
  4. 要求能處理使用者輸入的真分數, 如 1/2, 5/12 等
  5. 使用 -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.測試運作: 

個人作業1——四則運算題目生成程式(基于控制台)

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