C语言求行列式的值

/*注意:det == detminant*/
#include <stdio.h>
#include <math.h>
float det[100][100];
main()
{
    unsigned char i,j,l,a,order;
    char note;
    float value,k;
        
    note=1;
    value=1;    
    printf("Please enter the order of the determinant: ");
scanf("%d",&order);
/*输入行列式*/
    for(i=0;i<order;i++)
    { 
        printf("Please enter the elements on line %d, separated by spaces.\n",i+1); 
        for(j=0;j<order;j++)
            scanf("%f",&det[i][j]);
    }    
/*输出你输入的行列式*/
	for(i = 0;i < order;i++)
	{
		printf("\n");
		for(j = 0;j < order;j++)
			printf("%.1lf    ",det[i][j]);	
	}
/*下面进行行列式值的运算*/
/*特殊类型1:如果行列式的两行成比例,则行列式的值为0*/
	for(i = 0;i < order;i++)
	{
		for(j = 1;i+j < order;j++)
		{
			k = det[i][0]/det[i+j][0];
			for(l = 1;l < order;l++)
			{
				if(det[i][l]/det[i+j][l] != k)
					break;
			}
			if(l == order && det[i][order-1]/det[i+j][order-1] == k)
			{				
				value = 0;
				break;
			}
		}
		if(value == 0)
			break;
	}

/*特殊类型2:如果行列式的两列成比例,则行列式的值为0*/
/*如果行列式的两行不成比例*/
	if(value != 0)
	{
		for(i = 0;i < order;i++)
		{
			
			for(j = 1;i+j < order;j++)
			{
				k = det[0][i] / det[0][j+i];
				for(l = 1;l < order;l++)
				{
					if(det[l][i] / det[l][i+j] != k)
						break;
				}
				if(l==order && det[order-1][i]/det[order-1][j+i]==k)
				{
					value = 0;
					break;
				}
			}
			if(value == 0)
				break;
		}
	}
/*一般类型:如果行列式的两行与两列都不成比例*/
/*把行列式化为三角行列式(上三角)*/
	if(value != 0)
	{
		a = 0;
		for(i = 0;i < order;i++)
		{
			if(det[i][a] == 0)
			{
				for(j = i+1;j < order;j++)
					if(det[j][a] != 0)
						break;	
/*如果对角线上的数值为0(i行),则把自上而下第一个首元素不为0的行与第i行互换*/
				for(l = 0;l < order;l++)
				{
					det[99][l] = det[j][l];
					det[j][l] = det[i][l];
					det[i][l] = det[99][l];
				}
				/*记录:换一次要乘以一次(-1)*/
				note *= -1;
			}
			/*把对角线下的元素都化为0*/
			for(j = 1;i+j < order;j++)
			{
				k = -det[i+j][a]/det[i][a];
				for(l = a;l < order;l++)
				{
					det[i+j][l] = det[i+j][l] + k*det[i][l];
				}
			}
			a++;	
		}
		/*得到三角行列式之后,对角线元素乘积即为行列式得值*/
		for(i = 0;i<order;i++)
		{
			value = value*det[i][i];
		}
		value = value*note;
/*输出三角行列式*/
		printf("\n");
		printf("Transformed trigonometric determinant:\n");
		for(i = 0;i < order;i++)
		{
			printf("\n");
			for(j = 0;j < order;j++)
			{
				if(det[i][j] < 0.0001)
					det[i][j] = 0;
				printf("%5.2g",det[i][j]);
			}
		}	
	}

	printf("\n");
	if(value < 0.0001)
		value = 0;
	printf("The value of the determinant is%g\n",value);
	return 0;
} 

比如下面的例子:

 

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值