C/C++——计算矩阵的行列式

#include<stdio.h>
#include<stdlib.h>
double det(double **D,int n) //输入代表矩阵的二维数组、矩阵阶数,返回矩阵的行列式
{
	double d=0;
	
	// 一阶二阶直接计算
	if(n==1)d=D[0][0];
	if(n==2)d=D[0][0]*D[1][1]-D[0][1]*D[1][0];
	else{
	for(int k=0;k<n;k++){
		// 为代数余子式申请内存
		double **M;
		M=(double**)malloc((n-1)*sizeof(double*));
		for(int i=0;i<n-1;i++)
			M[i]=(double*)malloc((n-1)*sizeof(double));
			
		// 为代数余子式赋值
		for(int i=0;i<n-1;i++)
			for(int j=0;j<n-1;j++)
				M[i][j]=D[i+1][j<k?j:j+1];
				
		// 按第一行展开,递归计算行列式,注意元素0则不展开可以加快计算速度
		if(D[0][k])
			d+=D[0][k]*det(M,n-1)*(((2+k)%2)?-1:1);
		
		// 释放内存
		for(int i=0;i<n-1;i++)free(M[i]);
		free(M);
		}
	}
	return d;                   
}
int main()
{
	// 输入矩阵阶数
	int n;
	printf("n:");scanf("%d",&n); 
	
	// 为矩阵申请内存
	double **D;
	D=(double**)malloc(n*sizeof(double*));
	for(int i=0;i<n;i++)
		D[i]=(double*)malloc(n*sizeof(double));
	
	// 矩阵输入
	for(int i=0;i<n;i++)
		for(int j=0;j<n;j++)
			//scanf("%lf",&D[i][j]);
			D[i][j]=rand()%10;
	printf("D:\n");
	
	// 打印矩阵
	for(int i=0;i<n;i++){
		{for(int j=0;j<n;j++)
			printf("%g\t",D[i][j]);}
		printf("\n");
	}

	// 输出行列式
	printf("det(D)=%g\n",det(D,n));
	//system("pause");

	// 释放内存
	for(int i=0;i<n;i++)free(D[i]);
		free(D);
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值