用C語言計算行列式

如何用C語言計算行列式?
首先我們來看一個一般的三階行列式
對于這么一個行列式我們可以用利用余子式來計算,具體一點就是取這個行列式第一行的每一個元素分別乘以對應(yīng)的代數(shù)余子式,再相加
每個余子式又都是二階行列式,這時就可以用對角線法則來計算。這樣就得到了D的值。

下面來考慮如何用代碼實現(xiàn)這一過程。
1. 創(chuàng)建一個N階行列式
為了便于得到余子式,可以用結(jié)構(gòu)體儲存每一行的元素,并用鏈表鏈接這些結(jié)構(gòu)體
參數(shù):N 行列式階數(shù)
2. 創(chuàng)建余子式
創(chuàng)建余子式與創(chuàng)建行列式異曲同工,先得到已經(jīng)創(chuàng)建好的行列式指針,再創(chuàng)建一個N-1階行列式,并對新行列式賦上舊行列式除第一行第c列的元素
????
此處c為2,即得
參數(shù):p 原行列式指針、N 原行列式階數(shù)、c去除的列數(shù)
3. 計算
計算行列式要根據(jù)階數(shù)分情況討論
參數(shù):p 待計算的行列式指針、N 行列式階數(shù)
4. main函數(shù)
所需的函數(shù)已經(jīng)準(zhǔn)備好,接下來看看main函數(shù)。
主要的就是創(chuàng)建行列式,并且對每一行賦值
*使用的是scanf_s,而非scanf
整體代碼如下

最后開始計算!
1.
輸入:
????1
????5
輸出:

2.
輸入:
????2
????2????3
????4????7
輸出:

3.
輸入:
????6
????5????4????6????1????9????5
????4????9????5????2????4????7
????3????6????9????2????5????7
????1????6????2????4????7????8
????2????3????8????9????4????2
????4????5????6????8????1????3
輸出:

?4.
輸入:
????5
????1????8????9????4????6
????0????2????6????8????7
????0????0????3????5????9
????0????0????0????4????7
????0????0????0????0????5
輸出:


好像算到10多階的時候,算的時間就比較長了,階數(shù)再大一點就會崩潰,可能是沒有free內(nèi)存的緣故,又或者是棧溢出?不過我懶管了啊啊啊啊啊哈哈哈哈哈哈哈哈哈。