逆矩阵c语言

以递归的形式写的一个求逆矩阵的c语音程序源码在后面

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bCP5a2p5LiN5ZOt5ZGA,size_20,color_FFFFFF,t_70,g_se,x_16

 watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bCP5a2p5LiN5ZOt5ZGA,size_20,color_FFFFFF,t_70,g_se,x_16

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bCP5a2p5LiN5ZOt5ZGA,size_20,color_FFFFFF,t_70,g_se,x_16 

 #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");
          }
    }
}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值