c语言程序设计伴随矩阵,c语言求方阵的行列式、伴随矩阵算法

#include

#include

#define N 100 //N比输入的阶数大即可

int main()

{   int n,a[N][N],b[N][N],i,j;

int row_col_times(int b[N][N],int n);

void adgujate_matrix(int s[N][N],int n);

printf("请输入方阵阶数:\n");

scanf("%d",&n);

printf("请输入%d阶的方阵(用空格隔开)\n",n);

for(i=0;i

for(j=0;j

scanf("%d",&a[i][j]);

printf("您输入的%d阶方阵是:\n");

for(i=0;i

{for(j=0;j

{printf("%3d",a[i][j]);

b[i][j]=a[i][j];

}//右对齐输出矩阵

printf("\n");}

printf("该矩阵的伴随矩阵是;:\n");

adgujate_matrix(b,n);//调用伴随矩阵函数

printf("该矩阵的行列式为: %d\n",row_col_times(a,n));//调用行列式乘积函数

return 0;

}

int row_col_times(int b[N][N],int n)

{ int change_col(int c[N][N],int n,int i);

int product(int d[N][N],int n,int p);

int i,j,k,p=0;

for(i=0;i

{

if(b[i][i]==0)//当对角线元素为零时调换列

{ p=p+change_col(b,n,i);}

for(j=i+1;j

{

for(k=i+1;k

b[k][j]=b[k][j]*b[i][i]-b[k][i]*b[i][j];//最重要的操作

}

}

return product(b,n,p);

}

int change_col(int c[N][N],int n,int i)

{ int temp,j,k,flag=0;

for(k=i;k

{ if(c[i][k]!=0)

{

for(j=i;j

{

temp=c[j][i];

c[j][i]=c[j][k];

c[j][k]=temp;//调换列

}

flag++;//列调换符号记录

break;

}

}

return flag;//返回调换符号记录数

}

int product(int d[N][N],int n,int p)

{   int product=1,i;

for(i=0;i

product=product*d[i][i];//对角线乘积

for(i=0;i

product=product/pow(d[i][i],n-i-1);//除回来

product=product*pow(-1,p);//乘上列调换符号

return product;

}

void adgujate_matrix(int s[N][N],int n)

{

int b[n][n],c[N][N],f[n][n];

int i,j,k,l,a,e,g=1;

for(j=0;j

for(i=0;i

f[i][j]=s[i][j];//赋值防止改变原矩阵

for(j=0;j

{

for(i=0;i

{

for(k=0;k

for(l=j;l

{

s[k][l]=s[k][l+1];

//右边往左挪

}

for(k=i;k

for(l=0;l

{

s[k][l]=s[k+1][l];

//下边往上挪

}

for(k=0;k

for(l=0;l

{

c[k][l]=s[k][l];

}

if((i+j)%2==1)

g=-1;

printf("%3d",row_col_times(c,n-1)*g);

for(a=0;a

for(e=0;e

s[a][e]=f[a][e];

g=1;

}

printf("\n");

}

}

你可能感兴趣的:(c语言程序设计伴随矩阵)