📄 gauss(3).txt
字号:
#include<iostream>
#include<iomanip>
using namespace std;
void gauss();
void colu(int k);//选取主元
int n;
float a[100][100],b[100];
int main()
{
while(cin>>n){
int i,j;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
cin>>a[i][j];
for(i=0;i<n;i++)
cin>>b[i];
gauss();
for(i=1;i<=n;i++){
if(i%5==0)cout<<endl;
cout<<setprecision(4)<<"X"<<i<<" = "<<b[i-1]<<" ";
}
cout<<endl;
}
return 0;
}
void gauss(){
int i,j,k;
for(k=0;k<n-1;k++){ //消去
colu(k); //交换行选取主元,确保 a[k][k]为最大
for(i=k+1;i<n;i++){
a[i][k]/=a[k][k];
for(j=k+1;j<n;j++)
a[i][j]-=a[i][k]*a[k][j];
b[i]-=a[i][k]*b[k];
}
}
b[n-1]/=a[n-1][n-1]; //回代
for(i=n-2;i>=0;i--){
for(j=i+1;j<n;j++)
b[i]-=a[i][j]*b[j];
b[i]/=a[i][i];
}
}
void colu(int k){ //换行,选主元
int i,j=k;
float t;
for(i=k+1;i<n;i++)
if(a[j][k]<a[i][k]) //找第 k 列中元素最大的一个
j=i;
if(j==k)return ;
for(i=k;i<n;i++){
t=a[k][i];
a[k][i]=a[j][i];
a[j][i]=t;
}
t=b[k];
b[k]=b[j];
b[j]=t;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -