/*注意: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;
}
比如下面的例子: