【内容概述】
本文主要讲述行列式应该怎么样用C语言来求值。
行列式可以按行展开,利用代数余子式来求值,其中运用到递归的算法
【代码呈现】
/*利用递归的算法来求行列式的值*/
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
void readin ( int n , int det[100][100] );
int calculate ( int n , int det[100][100] );
int minor ( int det[100][100] , int i , int n );
int main (void)
{
int n , det[100][100] = {0};
printf ("请输入行列式的阶数:(少于100)");
scanf ("%d", &n);
readin ( n , det );
printf("行列式的值为 %d",calculate ( n , det ));
system ( "pause" );
return 0;
}
/*输入行列式的每一个元素*/
void readin ( int n , int det[100][100] )
{
printf ("请输入行列式每行每列的元素,同行元素用空格隔开");
int i , j;
for ( i = 0; i < n; i++ )
{
for ( j = 0; j < n; j++ )
{
scanf("%d", &det[i][j]);
}
}
return;
}
/*用递归的算法来求出行列式的值*/
int calculate ( int n , int det[100][100] )
{
int i , m , sum = 0;
if ( n == 1 )
{
return det[0][0];
}
else
{
for ( i = 0; i < n; i++ ) //按第一行展开
{
m = minor ( det , i , n );
sum += pow (-1 , i+2) * m * det[0][i];
}
return sum;
}
}
int minor ( int det[100][100] , int i , int n )
{
int j , k;
int det2[100][100];
for (j = 0; j < n - 1; j++) //构造出余子式
{
for (k = 0; k < n - 1; k++)
{
if (k < i)
det2[j][k] = det[j + 1][k];
else if (k >= i)
det2[j][k] = det[j + 1][k + 1];
}
}
return calculate ( n-1 , det2 ); //回到calculate函数