以递归的形式写的一个求逆矩阵的c语音程序源码在后面
#include<stdio.h>
#include<math.h>
#define N 9
float hang_lie_shi(int n,double a[N][N]){
double b[N][N];
int i,j;
double sum=0;
int c=0,p=0;
if(n==1){
return a[0][0];
}
for(i=0;i<n;i++){
for(c=0;c<n-1;c++){
for(j=0;j<n-1;j++){
if(c<i){
p=0;
}
else{
p=1;
}
b[c][j]=a[c+p][j+1];
}
}
sum=sum+a[i][0]*hang_lie_shi(n-1,b)*pow(-1,i);
}
return sum;
}
int main(){
int n;//阶数
int i,j,i1,i2,j1,j2;
double a[N][N],b[N][N],c[N][N];
double d;//行列式的值
printf("请输入矩阵的阶数\n");
scanf("%d",&n);
printf("请输入矩阵\n");
for (i=0;i<n;i++)
{
for(j=0;j<n;j++){
scanf("%lf",&a[i][j]);
}
}
printf("原矩阵为:\n");
for(i=0;i<n;i++){
for(j=0;j<n;j++){
printf("%10lf",a[i][j]);
}
printf("\n");
}
d=hang_lie_shi(n,a);
if(d==0)
printf("该矩阵无逆矩阵");
else{
printf("矩阵的行列式为%f\n",d);
if(n==1)
c[0][0]=1.0/d;
else if(n>1){
for(i=0;i<=n-1;i++){
for(j=0;j<=n-1;j++){
for(i1=0,i2=0;i2<n-1;i1++,i2++){
for(j1=0,j2=0;j2<n-1;j1++,j2++){
if(i1==i){
i1++;
}
if(j1==j){
j1++;
}
b[i2][j2]=a[i1][j1];
}
}
if(pow(-1,i+j)*hang_lie_shi(n-1,b)==0||d==0){
c[j][i]=0.000000;
}else{
c[j][i]=pow(-1,i+j)*hang_lie_shi(n-1,b)/d;
}
}
}
}
printf("逆矩阵为\n");
for(i=0;i<n;i++){
for(j=0;j<n;j++){
printf("%10lf",c[i][j]);
}
printf("\n");
}
}
}