计算n阶行列式的C语言实现
在这里插入代码片
```#include<stdio.h>
int main ()
{
int i,j,n,x,k;
float t,h,det;
printf("Enter value n:\t");//输入阶数n//
scanf("%d",&n);
float a[n][n],b[n][n];
printf("Enter the array:\n");//读入数组//
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
scanf("%f",&a[i][j]);
}
printf("\n\nThe array you enter:\n");
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf("%10f\t",a[i][j]);
printf("\n\n");
}
//核心代码//
for(j=0;j<n-1;j++)//第一次化归//
{
for(i=n-1,t=0;i>=j;i--)
{
if(a[i][j]!=0)
{
t=a[i][j];
x=i;
}
}
if(t!=0)
{
for(h=0,i=n-1;i>=j+1;i--)
{
if(i!=x)
{ h=a[i][j];
for(k=0;k<n;k++)
{
a[i][k]-=h*a[x][k]/t;//error//
}
}
}
}
}
#ifdef CHECK
printf("\n\n第一次化归\n");
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)//打印数组//
printf("%f\t",a[i][j]);
printf("\n");
}
#endif
for(i=0;i<n;i++)//旋转数组//
{
for(j=0;j<n;j++)
{
b[i][j]=a[n-j-1][n-i-1];
}
}
#ifdef CHECK
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)//打印旋转后的数组//
printf("%f\t",b[i][j]);
printf("\n");
}
#endif
for(j=0;j<n-1;j++)//第2次化归//
{
for(i=n-1,t=0;i>=j;i--)
{
if(b[i][j]!=0)
{
t=b[i][j];
x=i;
}
}
if(t!=0)
{
for(i=n-1;i>=j+1;i--)
{
h=b[i][j];
if(i!=x)
{
for(k=0;k<n;k++)
{
b[i][k]-=h*b[x][k]/t;//error//
}
}
}
}
}
#ifdef CHECK
printf("\n\n第二次化归\n");
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)//打印第二次化归后数组//
printf("%f\t",b[i][j]);
printf("\n");
}
#endif
for(i=0;i<n;i++)//旋转回去//
{
for(j=0;j<n;j++)
{
a[i][j]=b[n-j-1][n-i-1];
}
}
printf("\n\nThe array can be changed to:\n") ;//输出上三角阵//
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf("%10f\t",a[i][j]);
printf("\n\n");
}
for(det=1,i=0;i<n;i++)
{
det*=a[i][i];
}
printf("\n\ndet=%10f\n",det);
return 0;
}