?? 逆陣.c
字號:
#include "stdio.h"
float z[4][4],*y=z; /*定義一個全局二維數(shù)組用來存放N-1階余子式,因為A的伴隨矩陣除以|A|時會產(chǎn)生小數(shù),因此定義成float而非int*/
int js(int *p,int n) /*計算行列式的函數(shù)*/
{int k=0,i,s2=0,s1=0,j,s,t;
printf("\n");
for(j=0;j<n;j++)
{ k=j;t=1;
for(i=1;i<=n;i++)
{ t=t*p[k];
if ((k+1)%n==0) k=k+1;
else k=k+n+1;
}
s1=s1+t;
}
for(j=0;j<n;j++)
{ k=j;t=1;
for(i=1;i<=n;i++)
{ t=t*p[k];
if (k%n==0) k=k+(2*n-1);
else k=k+(n-1);
}
s2=s2+t;
}
s=s1-s2;
return s;
}
void n_1(int b[][4]) /*把除第i行j列后的N-1階矩陣的每個元素賦給一維數(shù)組d[]的函數(shù)*/
{int i,j,e,f,l,m,d[9],*q='\0';
int js(int *p,int n);
printf("\n");
for(i=0;i<4;i++)
{l=i;
for(j=0;j<4;j++)
{ m=j;q=d;
for (e=0;e<4;e++)
{ if(e==l) continue;
for(f=0;f<4;f++)
{ if(f==m) continue;
*q=b[e][f];
q++;
}
}
/*每得到一個一維數(shù)組d[]的值,便調(diào)用JS()函數(shù),得到除第i行j列后的N-1階矩陣的行列式的值,也即是余子式M[j]*/
*(y++)=js(d,3); /*并把余子式的值存放在全局二維數(shù)組z[]中*/
}
}
}
prt(int *p,int n) /*矩陣打印函數(shù)*/
{int i;
for(i=0;i<n*n;i++)
{if(i%n==0) printf("\n");
printf("%4d",p);
}
}
main()
{int a[4][4]={1,2,3,4,5,6,7,8,9,9,11,12,13,14,15,16};
int m=4,r,i,j,ch;
printf("The old juzhen is:\n");
prt(*a,m);
r=js(*a,m);
printf("\nThe old juzhen hanglieshi is:|A|==%d",r);
printf("\nPress Enter continue......"); /*控制屏幕*/
ch=getchar();
if (r==0) printf("Because |A|==0,the juzhen have no nijuzhen!");
else
{n_1(a); /*調(diào)用n_1()函數(shù)*/
for(i=0;i<m;i++) /*求代數(shù)余子式*/
for(j=0;j<m;j++)
if((i+j)%2!=0 && z[i][j]!=0) z[i][j]=-z[i][j];
printf("Because |A|!=0,the juzhen have nijuzhen!\n");
printf("The bansuijuzhen A* is:\n"); /*打印伴隨矩陣A* ,i,j對調(diào)用于轉(zhuǎn)置*/
for(i=0;i<m;i++)
{for(j=0;j<m;j++)
if ((i+j)%2==0) printf("%4.0f\t",z[j][i]);
else
printf("%4.0f\t",z[i][j]);
printf("\n");
}
printf("\nThe nijuzhen is:(*A)/|A|\n");
for(i=0;i<m;i++) /*打印A的逆矩陣*/
{for(j=0;j<m;j++)
if ((i+j)%2==0) printf("%.3f\t",z[i][j]/r);
else
printf("%.3f\t",z[j][i]/r);
printf("\n");
}
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -