📄 新建 文本文档 (2).txt
字号:
#include <iostream>
#include <cmath>
#include <iomanip>
using namespace std;
void main(){
const n=3;
double a[n][n+1]={{0.001,2.000,3.000,1.000},{-1.000,3.712,4.623,2.000},{-2.000,1.072,5.643,3.000}};
int det=1,k,i,j,h;
int done=1;
double t; //t为交换时的中间变量
for(k=0;k<=n-2;k++)
{ double max=fabs(a[k][k]);
/*****************************************************************/
for(i=k+1;i<n;i++) //选取主元
if(fabs(a[i][k])>max)
{ max=fabs(a[i][k]);
h=i;}
if(max==0) {done=0;break;}
if(h!=k)
for(j=0;j<=n;j++){ //换行操作
t=a[k][j];
a[k][j]=a[h][j];
a[h][j]=t;
}
det*=-1;
/**************************************************************************/
for(i=k+1;i<n;i++){ //消元过程
a[i][k]=a[i][k]/a[k][k];
for(j=k+1;j<n+1;j++)
a[i][j]=a[i][j]-a[i][k]*a[k][j];
}
det=a[k][k]*det;
if(a[n-1][n-1]==0) {done=0;break;}
cout<<"第"<<k+1<<"次消元:"<<endl; //输出每次消元后的结果
for(i=0;i<n;i++){
for(j=0;j<n+1;j++)
cout<<setw(8)<<a[i][j]<<" ";
cout<<endl;
}
cout<<endl;
/**************************************************************************/
}
/**************************************************************************/
a[n-1][n]=a[n-1][n]/a[n-1][n-1]; //回带过程
for(i=n-2;i>=0;i--){
double sum=0;
for(j=i+1;j<n;j++)
sum+=a[i][j]*a[j][n];
a[i][n]=(a[i][n]-sum)/a[i][i]; //将方程解存入最后一列
det*=a[n-1][n-1];
}
/**************************************************************************/
if(done==1){ //根据done值情况决定输出情况
cout<<"原方程组的解为:"<<endl;
for(i=0;i<n;i++)
cout<<"x"<<i<<"="<<setprecision(4)<<a[i][n]<<endl;}
else
cout<<"该方程组有无数解!";
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -