https://git.oschina.net/DzXzz/operation
題目描述:
從《建構之法》第一章的 “程式” 例子出發,像阿超那樣,花二十分鐘寫一個能自動生成國小四則運算題目的指令行 “軟體”,滿足以下需求:
除了整數以外,還要支援真分數的四則運算,真分數的運算,例如:1/6 + 1/8 = 7/24
-
- 運算符為 +, −, ×, ÷
- 并且要求能處理使用者的輸入,并判斷對錯,打分統計正确率。
- 要求能處理使用者輸入的真分數, 如 1/2, 5/12 等
-
使用 -n 參數控制生成題目的個數,例如執行下面指令将生成10個題目
Myapp.exe -n 10
分析:
程式要求:
- 自動生成題目
- 除了整數,還要支援真分數運算
- 判斷答案正确與否(可以識别真分數答案),如果錯誤顯示正确答案,并顯示正确率
- 可以控制生成題目數量
實作步驟:
- 根據輸入的n,生成相應的題目。
- 擷取答案并檢驗對錯
- 傳回結果并顯示正确率
- 生成題目方面,根據擷取的n設定循環,随機加減乘除依靠生成1~4的随機數switch選擇
- 整數和分數的加減乘除方法分開寫。整數的很簡單,不多叙述。分數在正常的運算規則下多了約分的步驟,進而需要求取最大公約數,這裡搜尋查閱後使用了輾轉相除法。
int GCD(int k,int l) //求最大公約數
{
int temp; /*定義整型變量*/
if(k<l) /*通過比較求出兩個數中的最大值和最小值*/
{
temp=k;
k=l;
l=temp;
} /*設定中間變量進行兩數交換*/
while(l!=0) /*通過循環求兩數的餘數,直到餘數為0*/
{
temp=k%l;
k=l; /*變量數值交換*/
l=temp;
}
return k;
}
- 生成題目方面依靠随機數,唯一需要注意的是分數要求生成真分數,是以多了個判斷和轉換。
1 if(num1>num2)
2 {
3 num5=num1;
4 num1=num2;
5 num2=num5;
6 }
7 printf("\n(%d/%d)",num1,num2);
其他的代碼就不多贅述了,比較關鍵的就這些。
下面是截圖:

實驗回顧:
這個實驗剛開始做的時候感覺還是挺簡單的,用c很快就寫完了整數的四則運算,寫到分數的時候有點卡住了,有點沒想明白怎麼驗證結果,去網上參考了一下才完成。可能主要的時間都花在這方面了。之後的測試什麼的倒是挺順利的,不過感覺在送出代碼的花費的時間感覺比我寫代碼的時間都長,還是沒什麼經驗啊。
實驗總結:
寫完之後看了一下同學的,基本用java寫的,跟他們的最大差別可能就是他們是一次性全部生成題目而我的是做完一題後生成一題,因為用的是循環,沒有用棧(其實是當時沒想起來棧怎麼用的了),書上寫的是可以列印出來,那我的确實有點不合要求。(基礎還是不牢啊)之後再改進一下。
PSP2.1 | Personal Software Process Stages | Time Senior Student | Time |
Planning | 計劃 | 1h | 2h |
· Estimate | 估計這個任務需要多少時間 | 10h | |
Development | 開發 | 8h | 7h |
· Analysis | 需求分析 (包括學習新技術) | 30min | |
· Design Spec | 生成設計文檔 | ||
· Design Review | 設計複審 | ||
· Coding Standard | 代碼規範 | ||
· Design | 具體設計 | ||
· Coding | 具體編碼 | 6h | 5h |
· Code Review | 代碼複審 | ||
· Test | 測試(自我測試,修改代碼,送出修改) | ||
Reporting | 報告 | ||
· | 測試報告 | ||
計算工作量 | |||
并提出過程改進計劃 |