作業四:個人專案---小學四則運算
本次作業要求來自:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/2186
我的github遠端倉庫的地址:https://github.com/Ingramm/lxc
一、題目要求
像《構建之法》的人物阿超那樣,寫一個能自動生成小學四則運算題目的命令列 “軟體”。
具體要求:任何程式語言都可以,命令列程式接受一個數字輸入,然後輸出相應數目的四則運算題目和答案。例如輸入數字是 30, 那就輸出 30 道題目和答案。 運算式子必須至少有兩個運算子,運算數字是在 100 之內的正整數,答案不能是負數。 如:23 - 3 * 4 = 11。
擴充套件要求:
1) 要求能出和真分數 (二分之一, 十二分之五,等)相關的練習題。
2) 並且要求能處理使用者的輸入,並判斷對錯,打分統計。 要求能處理使用者輸入的真分數, 如 1/2, 5/12 等。
二、設計思路
開發工具:Code::Blocks
程式語言:C語言
程式碼主要函式:
main()函式、randomNumber(int n)函式、add(int m,int n)函式、jianfa(int m,int n)函式、chengfa(int m,int n)函式、chufa(int m,int n)函式。
程式碼實現思路:
用結構體定義運算式子,包含運算式子的屬性。在main()函式中,使用者輸入式子數量後,呼叫randomNumber(int n)函式隨機產生式子,並存入結構體變數中,然後通過switch語句來判斷式子符號優先順序,計算式子結果,並存入結構體變數中。最後判斷使用者輸入的答案是否正確並給出本次做題總分。
三、主要程式碼
main()函式主要程式碼:
for(i=0;i<n;i++) { if(formula[i].m >= 2 && formula[i].n <2) { switch(formula[i].m) { case 2: sum1[i] = chengfa(formula[i].firstNumber,formula[i].secondNumber); break; case 3: sum1[i] = chufa(formula[i].firstNumber,formula[i].secondNumber); break; } switch(formula[i].n) { case 0: formula[i].sum = add(sum1[i],formula[i].thirdNumber); break; case 1: formula[i].sum = jianfa(sum1[i],formula[i].thirdNumber); break; } } else if(formula[i].n >= 2 && formula[i].m <2) { switch(formula[i].n) { case 2: sum1[i] = chengfa(formula[i].secondNumber,formula[i].thirdNumber); break; case 3: sum1[i] = chufa(formula[i].secondNumber,formula[i].thirdNumber); break; } switch(formula[i].m) { case 0: formula[i].sum = add(formula[i].firstNumber,sum1[i]); break; case 1: formula[i].sum = jianfa(formula[i].firstNumber,sum1[i]); break; } }
randomNumber(int n)函式的主要程式碼:
void randomNumber(int n) { int i; srand(time(NULL)); for(i=0;i<n;i++) { formula[i].firstNumber = rand()%100 + 1; formula[i].secondNumber = rand()%100 + 1; formula[i].thirdNumber = rand()%100 + 1; formula[i].m = rand()%4; switch(formula[i].m) { case 0: formula[i].fuhao1 = '+'; break; case 1: formula[i].fuhao1 = '-'; break; case 2: formula[i].fuhao1 = '*'; break; case 3: formula[i].fuhao1 = '/'; break; } formula[i].n = rand()%4; switch(formula[i].n) { case 0: formula[i].fuhao2 = '+'; break; case 1: formula[i].fuhao2 = '-'; break; case 2: formula[i].fuhao2 = '*'; break; case 3: formula[i].fuhao2 = '/'; break; } } }
運算函式程式碼:
int add(int m,int n) { int sum = 0; sum = m + n; return sum; } int jianfa(int m,int n) { int sum = 0; sum = m - n; return sum; } int chengfa(int m,int n) { int sum = 0; sum = m * n; return sum; } int chufa(int m,int n) { int sum = 0; sum = m / n; return sum; }
四、執行結果
五、主要問題
主要問題:本次作業主要是用結構體來實現的,用結構體來對運算式子進行儲存。但做完作業後,發現其實用結構體是有弊端的,在記憶體資源上,結構體陣列要固定給它分配記憶體空間,如果用不完,就會出現記憶體浪費的情況,而用指標來對式子進行儲存,就不用預留記憶體空間,就比結構體要好。不過,由於本次作業做好了,只能課後再進行更改。
六、時間估計
PSP2.1 | Personal Software Process Stages | Time Senior Student | Time |
Planning | 計劃 | 8 | 6 |
· Estimate | 估計這個任務需要多少時間 | 12 | 10 |
Development | 開發 | 85 | 80 |
· Analysis | 需求分析 (包括學習新技術) | 8 | 10 |
· Design Spec | 生成設計文件 | 0 | 0 |
· Design Review | 設計複審 | 3 | 5 |
· Coding Standard | 程式碼規範 | 4 | 3 |
· Design | 具體設計 | 10 | 15 |
· Coding | 具體編碼 | 30 | 30 |
· Code Review | 程式碼複審 | 10 | 10 |
· Test | 測試(自我測試,修改程式碼,提交修改) | 15 | 30 |
Reporting | 報告 | 9 | 6 |
· | 測試報告 | 5 | 9 |
· | 計算工作量 | 5 | 2 |
· | 並提出過程改進計劃 | 0 |