本文共 1732 字,大约阅读时间需要 5 分钟。
#include#include const int maxn = 15;double a[maxn][maxn], b[maxn];int main(){ int n; freopen("gauss.txt", "r", stdin); //读入数据 scanf("%d", &n); for(int i = 1; i <= n; i++) { for(int j = 1; j <= n; j++) scanf("%lf", &a[i][j]); scanf("%lf", &b[i]); } /*打印数据文件 for(int i = 1; i <= n; i++) { for(int j = 1; j <= n; j++) printf("%10f", a[i][j]); printf("%10f\n", b[i]); } printf("\n"); */ for(int k = 1; k <= n - 1; k++) //n - 1列 { int column = k; double mainelement = a[k][k]; for(int i = k; i <= n; i++) //找主元素 if(fabs(a[i][k]) > mainelement) { mainelement = fabs(a[i][k]); column = i; } for(int j = k; j <= n; j++) //交换两行 { double atemp = a[k][j]; a[k][j] = a[column][j]; a[column][j] = atemp; } double btemp = b[k]; b[k] = b[column]; b[column] = btemp; for(int i = k + 1; i <= n; i++) //消元过程 { double Mik = a[i][k] / a[k][k]; for(int j = k; j <= n; j++) a[i][j] -= Mik * a[k][j]; b[i] -= Mik * b[k]; } } for(int i = 1; i <= n; i++) //经列主元高斯消去法得到的上三角阵(最后一列为常系数) { for(int j = 1; j <= n; j++) printf("%10f", a[i][j]); printf("%10f\n", b[i]); } printf("\n"); b[n] /= a[n][n]; //回代过程 for(int i = n - 1; i >= 1; i--) { double sum = 0; for(int j = i + 1; j <= n; j++) sum += a[i][j] * b[j]; b[i] = (b[i] - sum) / a[i][i]; } for(int i = 1; i <= n; i++) printf("x%d = %10f\n", i, b[i]); //小优化b[]->x[] return 0;}
数据文件
实验结果