[C语言]行列式计算器

最近在学习线性代数,但是由于粗心,总是导致算错,于是我突发奇想,想着用c语言写一个行列式计算器,在我懒经犯了的时候偷一下懒。

由于我也是c语言初学者,所以做的不太好,而且我认为我写的代码有些过于啰嗦了,希望有好心人愿意帮我简化一下代码或给一些指导性的意见,不胜感激。

/*行列式计算系统*/
#include<stdio.h>

/*2阶行列式计算函数*/
void Deter2(){
    float de2[2][2];
    for(int i=0;i<2;i++){
        for(int j=0;j<2;j++){
            scanf("%f",&de2[i][j]);
        }
    }
    printf("%f",de2[0][0]*de2[1][1]-(de2[0][1]*de2[1][0]));
}

/*3阶行列式计算函数*/
void Deter3(){
    float de3[3][3];
    float a1,a2,a3,a4,a5,a6,total;
    for(int i=0;i<3;i++){
        for(int j=0;j<3;j++){
            scanf("%f",&de3[i][j]);
        }
    }
    a1=de3[0][0]*de3[1][1]*de3[2][2];
    a2=de3[0][1]*de3[1][2]*de3[2][0];
    a3=de3[0][2]*de3[1][0]*de3[2][1];
    a4=de3[0][2]*de3[1][1]*de3[2][0];
    a5=de3[0][1]*de3[1][0]*de3[2][2];
    a6=de3[0][0]*de3[1][2]*de3[2][1];
    total=a1+a2+a3-a4-a5-a6;
    printf("%f",total);
}

/*阶数选择函数*/
int ChooseRank(){
    int choosen;
    printf("请输入您所需要计算行列式的阶数(2 or 3):");
    scanf("%d",&choosen);
    return choosen;
}


/*3阶行列式计算函数(可传入参数)*/
float Deter3Plus(float a1,float a2,float a3,float a4,float a5,float a6,float a7,float a8,float a9){
    float b1,b2,b3,b4,b5,b6,total;
    b1=a1*a5*a9;
    b2=a2*a6*a7;
    b3=a3*a4*a8;
    b4=a3*a5*a7;
    b5=a2*a4*a9;
    b6=a1*a6*a8;
    total=b1+b2+b3-b4-b5-b6;
    return total;
}

/*4阶行列式计函数*/
void Deter4(){
    float de4[4][4];
    float a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,total;
    for(int i=0;i<4;i++){
        for(int j=0;j<4;j++){
            scanf("%f",&de4[i][j]);
        }
    }
    a1=de4[0][0];
    a2=de4[0][1];
    a3=de4[0][2];
    a4=de4[0][3];
    a5=de4[1][0];
    a6=de4[1][1];
    a7=de4[1][2];
    a8=de4[1][3];
    a9=de4[2][0];
    a10=de4[2][1];
    a11=de4[2][2];
    a12=de4[2][3];
    a13=de4[3][0];
    a14=de4[3][1];
    a15=de4[3][2];
    a16=de4[3][3];
    total=a1*Deter3Plus(a6,a7,a8,a10,a11,a12,a14,a15,a16)-a2*Deter3Plus(a5,a7,a8,a9,a11,a12,a13,a15,a16)+a3*Deter3Plus(a5,a6,a8,a9,a10,a12,a13,a14,a16)-a4*Deter3Plus(a5,a6,a7,a9,a10,a11,a13,a14,a15);
    printf("%f",total);
}

int main(){
    switch(ChooseRank()){
        case 2:
            printf("按行依次输入行列式各元素:");
            Deter2();
            break;
        case 3:
            printf("按行依次输入行列式各元素:");
            Deter3();
            break;
        case 4:
            printf("按行依次输入行列式各元素:");
            Deter4();
            break;
        default:
            printf("暂不支持");
            break;
    }
    return 0;
}

我特意抽选了书上的几个行列式带入,目前为止都是正确的。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值