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