#include<bits/stdc++.h> using namespace std; int n; double D[105]; double JZ[105][105];//存储矩阵 void XY() { for(int i=0;i<n;i++) { int r=i; for(int k=i+1;k<n;k++) { if(abs(JZ[r][i])<abs(JZ[k][i])) r=k;//寻找第i列元素最大值所在行数 } if(r!=i) for(int j=i;j<=n;j++) swap(JZ[r][j],JZ[i][j]);//交换位置 double a=JZ[i][i]; if(a) { for(int j=i+1;j<n;j++) { double b=JZ[j][i]; for(int k=i;k<=n;k++) JZ[j][k]-=JZ[i][k]*b/a; } } } } void Q()//求解 { D[n-1]=JZ[n-1][n]/JZ[n-1][n-1]; for(int i=n-2;i>=0;i--) { for(int j=i+1;j<n;j++) JZ[i][n]-=D[j]*JZ[i][j]; D[i]=JZ[i][n]/JZ[i][i]; } for(int i=0;i<n;i++) { int g=D[i]+0.5;//注意这里要+0.5才能保证正确 cout<<g<<" "; } } int main() { cin>>n; for(int i=0;i<n;i++) { for(int j=0;j<=n;j++) { cin>>JZ[i][j]; } } XY(); for(int i=0;i<n;i++) { for(int j=0;j<=n;j++) { cout<<JZ[i][j]<<" "; } cout<<endl; } Q(); }
原文:https://www.cnblogs.com/Charls/p/12650724.html