#include <iostream>
#include <string>
#include <vector>
#include <iomanip>
using namespace std;
const int n=3; //设置方程组的维
void input_data(float a[n][n]) //输入行列式的相关数据
{
cout<<"输入要计算的行列式a["<<n<<"]["<<n<<"]:"<<endl;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
cin>>a[i][j];
}
//
//
//find_line():找出行(i,,,n)、列为i的最大主元素所在的行,并返回行值
//
//
int find_line(int i,float a[n][n])
{
int max_a_line=i; //max_a_line为最大元素所在的行
float max_a=a[i][i]; //max_a为最大元素的值
int out_i=i; //out_i为i的初始值
for(i=i+1;i<n;i++)
{
if(a[i][out_i]<0)
if(max_a<-a[i][out_i])
{
max_a=-a[i][out_i];
max_a_line=i;
};
if(max_a<a[i][out_i])
{
max_a=a[i][out_i];
max_a_line=i;
};
}
return max_a_line;
}
//
//
//chang_line():交换两行的从line列到n列的元素
//
//
void chang_line(int line,int other_line,float a[n][n])
{
float m; //m为中间变量
for(int j=line;j<n;j++)
{
m=a[line][j];
a[line][j]=a[other_line][j];
a[other_line][j]=m;
}
}
//
//
//clear_num():消去第i列、i行以下的元素
//
//
void clear_num(int i,float a[n][n])
{
int line=i,j;
float m;
for(i=i+1;i<n;i++)
{
m=-a[i][line]/a[line][line];
for(j=line;j<n;j++)
{
a[i][j]=a[i][j]+m*a[line][j];
};
}
}
//
//
//print_num():输出行列式的元素
//
//
void print_num(float a[n][n])
{
cout << setiosflags(ios::fixed); //和下一句结合起来用来设定小数位的位数
cout << setprecision(6);
for(int i=0;i<n;i++)
{
cout<<"┃ ";
for(int j=0;j<n;j++)
cout<<a[i][j]<<" ";
cout<<"┃"<<endl;
}
cout<<endl<<endl;
}
//
//
//calculate_det():计算行列式的值
//
//
float calculate_det(float a[n][n])
{
float det=1;
int i=0,j;
input_data(a);
do{
//print_num(a);
j=find_line(i,a);
if(i!=j)
{
chang_line(i,j,a);
det=-det;
};
if(a[i][i]==0)
return 0;
det=det*a[i][i];
if(i<n-1)
clear_num(i,a);
i++;
}while(i<n);
return det;
}
void main ()
{
float a[n][n];
cout<<"行列式的值为:"<<calculate_det(a)<<endl;
}