#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int func(int**a,int n);
int main()
{
int n;
int i,j;
printf("r(A)=");
scanf("%d",&n);
int**a=(int**)malloc(n*sizeof(int));
for(i=0;i<n;i++)
{
a[i]=(int*)malloc(n*sizeof(int));
} //动态分配内存
printf("\n输入行列式:\n");
for(i=0;i<n;i++)
{
printf("/\n");
for(j=0;j<n;j++)
{
scanf("%3d",&a[i][j]);
}
} //输入行列式
system("cls");
printf("你输入的是:");
for(i=0;i<n;i++)
{
printf("\n");
for(j=0;j<n;j++)
{
printf("%d",a[i][j]);
}
} //确认行列式输入正确
int temp;
temp=func(a,n); //调用函数
printf("\n|A|=%d",temp);
free(a); //释放内存
return 0;
}
func(int**a,int n)
{
int r;
int i,j,k;
int sum=0;
r=n-1;
int**p=(int**)malloc(r*sizeof(int));
for(i=0;i<r;i++)
{
p[i]=(int*)malloc(r*sizeof(int));
} //动态分配余子式空间
if(n==1)
{
sum=a[0][0];
}
else
{
for(k=0;k<n;k++)
{
for(i=0;i<r;i++)
{
for(j=0;j<r;j++)
{
if(k>i)
{
p[i][j]=a[i][j+1];
}
else if(k<=i)
{
p[i][j]=a[i+1][j+1];
}
}
}
sum=sum+pow(-1,k)*a[k][0]*func(p,r);//递归
}
}
free(p); //释放内存
return sum;
}
|