C语言实现n阶行列式,一个简单的小计算

以下为尝试计算n阶行列式的代码,
若发现不当,或有其他宝贵意见和建议,欢迎大家提出!

大致思路为将其化为上三角行列式(代码附有输出),然后对角元素连乘。
当用于消元的元素为0(matrix[k][k]=0)时,该行将与下一行交换。
注:本程序仅适用于matrix[k][k]下一行元素matrix[k+1][k]不为零的情况,反之则会出现bug。

#include 
#include 
int main()
{
	int n,k,i,j,cnt=0;
	double ratio,det=1;
	printf("请输入行列式阶数n:"); 
	scanf("%d",&n);
	double matrix[n][n]; 
	double m[n][n]; /*临时数组,作为行之间交换媒介*/
	printf("按顺序输入元素:"); 
	for(i=0;i<n;i++){
		for(j=0;j<n;j++){
			scanf("%lf",&matrix[i][j]); 
		}
	} /*行列式输入*/  

	for(k=0;k<n-1;k++){
		if(matrix[k][k]==0){
			for(j=0;j<n;j++){
				matrix[k+1][j]=matrix[k][j];
			}
			for(j=0;j<n;j++){
				matrix[k][j]=m[k+1][j];
			}
			cnt++;
		} /*若matrix[k][k]为0,则与下一行交换*/

		for(i=1;i<n-k;i++){
			ratio=matrix[k+i][k]/matrix[k][k];
			for(j=0;j<n;j++){
				matrix[k+i][j]+=(-1)*ratio*matrix[k][j];
				m[k+i][j]=matrix[k+i][j];
			}
		}
	} /*以上将行列式化为上三角 */

	printf("化为上三角行列式:\n");
	for(i=0;i<n;i++){
		for(j=0;j<n;j++){
			printf("%.2lf\t",matrix[i][j]);
		}
		printf("\n");
	}
	printf("共换行%d次\n",cnt);
	for(k=0;k<n;k++){
		det*=matrix[k][k];
	}
	det=pow(-1,cnt)*det;
	printf("则该行列式的值为:\ndet=%.2f",det);
	return 0;
}

你可能感兴趣的:(C语言实现n阶行列式,一个简单的小计算)