Programming Practice

此程式作習作是寫一個 C 語言的遞迴副程式以計算方陣的行列式 (determinant)。假設 A 是一個 n´n 方陣 (square matrix),即是列數和行數都為 n 的矩陣;如果列索引 (row index) 為 i 和行索引 (column index) 為 j ,則 0 ≤ i, j<n如果 A 是 1´1 的方陣 ,則 A 的行列式即是 A 的元素值;如果 A 是一個 n´n 的方陣和 det(A) 為方陣 A 的行列式,則其遞迴定義 (recursive definition) (依第 i 列展開):

cofactor(Ai,j ) 為在方陣 A 中將第 i 列及第 j 行移除後的 (n-1)´(n-1) 之子方陣。

你的主程式應包含下列的步驟:

  1. 宣告一個全域變數 cnt 以記錄遞迴副程式被呼叫的次數;

  2. 宣告一個二維浮點數陣列的指標 float **A;

  3. 讀入一個 1 至 15 (含) 之間的正整數 n,此為方陣 A 的列數與行數;

  4. 使用 malloc() 分配方陣的記憶體,並使用 rand() 產生一個 n´n 方陣的元素值,每個元素為介 0 與 2 之間的浮點數;

  5. 計算方陣 A 的行列式 (每次呼叫副程式 determinant() 時,將 cnt 加一);

  6. 輸出方陣 A (至小數點兩位) 和其行列式的值至小數點六位;

  7. 輸出 determinant() 呼叫的總次數及計算時間。

 

Enter the row and column size of square matrix: 8
Square matrix A (n=8):

1.95 1.64 1.59 1.86 1.96 1.08 1.87 1.39
1.22 1.02 1.27 1.23 1.90 1.17 1.69 1.47
1.08 1.36 1.27 1.94 1.02 1.33 1.65 1.23
1.16 1.55 1.35 1.11 1.48 1.80 1.58 1.12
1.31 1.61 1.88 1.79 1.75 1.95 1.38 1.70
1.90 1.30 1.54 1.12 1.79 1.96 1.10 1.29
1.40 1.80 1.87 1.97 1.28 1.16 1.33 1.56
1.49 1.52 1.50 1.28 1.72 1.95 1.93 1.38

Determinant: 0.020548

The number of function calls to determinant() is 69281.
The computing time of determinant is : 0.016000 seconds
 

--------------------------------------------------------------------------------------------------

  

Enter the row and column size of square matrix: 10
Square matrix A (n=10):

1.37 1.08 1.14 1.29 1.76 1.76 1.48 1.18 1.26 1.79
1.11 1.44 1.91 1.78 1.92 1.94 1.07 1.36 1.40 1.21
1.13 1.55 1.41 1.26 1.61 1.79 1.95 1.84 1.36 1.92
1.27 1.78 1.23 1.68 1.68 1.03 1.11 1.24 1.44 1.30
1.71 1.35 1.45 1.49 1.35 1.03 1.52 1.24 1.63 1.19
1.37 1.59 1.79 1.72 1.13 1.00 1.57 1.72 1.64 1.89
1.55 1.59 1.83 1.34 1.07 1.44 1.22 1.94 1.45 1.44
1.13 1.64 1.00 1.62 1.44 1.72 1.15 1.71 1.90 1.86
1.45 1.90 1.34 1.73 1.46 1.82 1.41 1.44 1.77 1.74
1.55 1.09 1.38 1.18 1.90 1.11 1.97 1.01 1.47 1.74

Determinant: -0.153526

The number of function calls to determinant() is 6235301.
The computing time of determinant is : 1.172000 seconds

  

--------------------------------------------------------------------------------------------------

  

Enter the row and column size of square matrix: 12
Square matrix A (n=12):

1.05 1.64 1.21 1.26 1.36 1.37 1.67 1.19 1.00 1.05 1.83 1.01
1.54 1.33 1.29 1.21 1.25 1.05 1.15 1.85 1.43 1.69 1.67 1.97
1.93 1.23 1.52 1.01 1.12 1.02 1.65 1.80 1.66 1.71 1.65 1.34
1.16 1.46 1.88 1.37 1.05 1.15 1.53 1.30 1.12 1.33 1.80 1.79
1.05 1.39 1.05 1.40 1.77 1.97 1.82 1.02 1.94 1.26 1.22 1.45
1.97 1.51 1.23 1.57 1.95 1.90 1.89 1.52 1.34 1.28 1.91 1.91
1.29 1.15 1.01 1.19 1.41 1.28 1.87 1.93 1.81 1.09 1.29 1.00
1.28 1.74 1.19 1.74 1.10 1.97 1.55 1.34 1.92 1.55 1.85 1.64
1.04 1.77 1.14 1.49 1.81 1.02 1.84 1.84 1.78 1.97 1.44 1.09
1.13 1.31 1.65 1.73 1.57 1.34 1.89 1.71 1.36 1.37 1.61 1.14
1.95 1.75 1.74 1.30 1.35 1.29 1.25 1.19 1.22 1.43 1.99 1.36
1.12 1.90 1.30 1.80 1.18 1.37 1.74 1.51 1.64 1.92 1.23 1.19

Determinant: 0.121899

The number of function calls to determinant() is 823059745.
The computing time of determinant is : 160.177000 seconds