C语言实现行列式计算
前言
行列式的计算有多种方法,其中按行(列)展开法最为直观,因此也最容易编写为程序。本文使用C语言,利用函数的递归,计算任意阶行列式的值。注意:本程序中,在计算行列式之前,需输入行列式的阶数。 C语言在数学计算领域有诸多不便之处,例如数组的长度不可更改,这一点对于行列式的计算来说是极不方便的,因为余子式的阶数比原行列式的阶数要小,而在递归的过程中涉及到数组的长度。为此,设立两个函数,第一个函数DET为计算的主要部分,第二个函数Minor专门用于计算余子式的值,而第二个函数中会调用第一个函数。
代码展示
代码如下(示例):
#include <stdio.h>
#include <math.h>
#define MAX 20
int DET(int arr1[MAX][MAX], int n);
int Minor(int arr1[MAX][MAX], int i, int n);
int DET(int arr1[MAX][MAX], int n)
{
int i, M, sum = 0;
if (n == 1)
return arr1[0][0];
else if (n > 1)
{
for (i = 0; i < n; i++)
{
M = Minor(arr1, i, n);
sum += pow(-1, i + 2) * arr1[0][i] * M;
}
}
return sum;
}
int Minor(int arr1[MAX][MAX],int i,int n)
{
int j, k,result;
int arr2[MAX][MAX];
for (j = 0; j < n - 1; j++)
{
for (k = 0; k < n - 1; k++)
{
if (k < i)
arr2[j][k] = arr1[j + 1][k];
else if (k >= i)
arr2[j][k] = arr1[j + 1][k + 1];
}
}
return DET(arr2, n - 1);
}
int main()
{
int arr1[MAX][MAX];
int a,b,n;
printf("请输入行列式阶数:");
scanf_s("%d", &n);
printf("请输入行列式:\n");
for (a = 0; a < n; a++) {
for (b = 0; b < n; b++) {
scanf_s("%d", &arr1[a][b]);
}
}
printf("%d", DET(arr1, n));
}
|