最近在学习线性代数,但是由于粗心,总是导致算错,于是我突发奇想,想着用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;
}
我特意抽选了书上的几个行列式带入,目前为止都是正确的。