一.專案作者姓名:陳煒烽 麥潤澤
學號:3122004776 3122004785
Github專案地址:https://github.com/iFortheFuture/teamwork
二.PSP表格## Personal Software Process Stages
Personal Software Process Stages | 預估時間 (分鐘) | 實際時間 (分鐘) |
---|---|---|
Planning | 30 | 30 |
Estimate | 45 | 45 |
Development | 120 | 140 |
Analysis | 60 | 55 |
Design Spec | 90 | 75 |
Design Review | 45 | 50 |
Coding Standard | 30 | 35 |
Design | 120 | 135 |
Coding | 180 | 175 |
Code Review | 60 | 65 |
Test | 90 | 95 |
Reporting | 45 | 30 |
Test Report | 30 | 25 |
Size Measurement | 60 | 55 |
Postmortem | 60 | 45 |
合計 | 1135 | 1055 |
三.效能分析
四.設計實現過程
在給定的程式碼中,主要有以下幾個函式:
-
jianhua
: 這個函式用於簡化分數,將分數化為最簡形式。 -
chufa
: 這個函式用於進行除法運算,包括整除、帶分數和真分數。 -
chachong
: 這個函式用於檢查生成的題目是否重複,避免生成重複的題目。 -
shengcheng
: 這個函式是主要的函式,用於生成題目。它根據輸入的數量和範圍,在指定範圍內生成不重複的題目,並同時計算出題目的答案。 -
dayintimu
: 這個函式用於列印題目到控制檯。 -
dayindaan
: 這個函式用於列印答案到控制檯。
這些函式之間的關係如下:
-
shengcheng
函式是整個程式的核心,它負責生成題目並呼叫其他函式來輔助生成答案和檢查重複。 -
chachong
函式在生成題目時用於檢查是否有重複的題目,避免生成相同的題目。 -
chufa
函式用於處理除法運算,包括整除、帶分數和真分數的情況。 -
jianhua
函式是chufa
函式的一個輔助函式,用於簡化分數。 -
dayintimu
和dayindaan
函式負責列印題目和答案到控制檯。
在進行修改的過程中,關鍵的函式是 shengcheng
,因為它是整個程式的主要邏輯,負責生成題目和呼叫其他函式來輔助完成任務。
關鍵函式的流程圖見附件1.
五.程式碼說明
關鍵程式碼:
// 生成運算
void shengcheng(int n, int r, int daan[100], int timu[100][10]) {
if (n < 1 || r < 10 || n > 100) {
printf("規定:n應該大於0,小於100,r不能小於10");
return;
}
int i = 0;
float sum = 0;
while (i < n) {
// 生成隨機數和運算子
int num1 = rand() % r;
int num2 = rand() % r;
int fuhao[4] = {'+', '-', '*', '/'};
int f = rand() % 4;
int a[5] = {0, 0, 0, 0, 0};
switch (f) {
case 0:
// 加法
sum = num1 + num2;
a[0] = sum;
a[1] = '?';
break;
case 1:
// 減法
sum = num1 - num2;
a[0] = sum;
a[1] = '?';
break;
case 2:
// 乘法
sum = num1 * num2;
a[0] = sum;
a[1] = '?';
break;
case 3:
// 除法
chufa(num1, num2, sum, a);
break;
default:
break;
}
// 把答案和題目填入陣列
daan[i] = (int)sum;
timu[i][0] = num1;
timu[i][1] = fuhao[f];
timu[i][2] = num2;
timu[i][3] = '=';
timu[i][4] = a[0];
timu[i][5] = a[1];
if (a[1] != '?') {
timu[i][6] = a[2];
timu[i][7] = a[3];
if (a[3] != '?') {
timu[i][8] = a[4];
timu[i][9] = '?';
}
}
// 檢查重複
int flag = 0;
flag = chachong(i, daan, timu);
if (flag == 1) {
i--;
}
i++;
}
}
關鍵思路與註釋說明:
引數檢查: 首先,函式檢查輸入引數 n 是否大於 0 且小於 100, r 是否大於等於 10。若引數不符合規定,則輸出錯誤資訊並結束函式。
隨機數生成: 使用 rand() 函式生成兩個範圍在 0 到 r-1 之間的隨機整數 num1 和 num2,並生成一個隨機運算子。
運算和填充陣列: 根據隨機生成的運算子,計算運算結果 sum。如果是除法,則呼叫 chufa 函式處理分數情況。然後將題目和答案填入陣列 timu 和 daan 中。
檢查重複: 檢查當前生成的題目是否與之前的題目重複。如果有重複,則重新生成當前題目。
迴圈生成: 透過迴圈執行以上步驟,直到生成了 n 條不重複的題目為止。
六.測試執行
七.專案小結:
成功之處:
完成了基本功能,能夠生成指定數量、指定範圍的四則運算題目。
程式碼邏輯清晰,函式模組化,易於理解和維護。
使用了適當的註釋,提高了程式碼的可讀性。
結對合作促進了程式碼質量和效率的提升。
失敗或不足之處:
缺乏錯誤處理機制,對於無效輸入或異常情況處理不夠完善。
程式碼中可能存在潛在的漏洞或錯誤,需要進一步測試和除錯。
沒有考慮到生成的題目和答案可能會很大,導致陣列越界或記憶體溢位的風險。
結對感受:
在結對程式設計過程中,我學會了更好地傾聽和理解他人的意見,也學會了更有效地表達自己的想法
附件1: