用C语言写:[问题描述】利用列主元高斯消去法编制程序,求解方程组: x1+2x2-x3=3 x1-x2+5x3=0 4x1+x2-2x3=2 【输出形式】 ×[1]=*.****** x[2]=*.****** x[3]=*.******
时间: 2024-05-15 15:11:05 浏览: 155
好的,列主元高斯消元法是求解线性方程组的一种方法。下面是C语言代码实现:
```
#include <stdio.h>
#include <stdlib.h>
#define N 3
int main()
{
double a[N][N + 1], t;
int i, j, k, r;
// 输入增广矩阵
printf("请输入增广矩阵:\n");
for (i = 0; i < N; i++) {
for (j = 0; j < N + 1; j++) {
scanf("%lf", &a[i][j]);
}
}
// 高斯消元
for (k = 0; k < N - 1; k++) {
// 找到主元所在的行
r = k;
for (i = k + 1; i < N; i++) {
if (abs(a[i][k]) > abs(a[r][k])) {
r = i;
}
}
// 交换行
if (r != k) {
for (j = k; j < N + 1; j++) {
t = a[k][j];
a[k][j] = a[r][j];
a[r][j] = t;
}
}
// 消元
for (i = k + 1; i < N; i++) {
t = a[i][k] / a[k][k];
for (j = k + 1; j < N + 1; j++) {
a[i][j] -= t * a[k][j];
}
a[i][k] = 0;
}
}
// 回带求解
double x[N];
for (i = N - 1; i >= 0; i--) {
x[i] = a[i][N];
for (j = i + 1; j < N; j++) {
x[i] -= a[i][j] * x[j];
}
x[i] /= a[i][i];
}
// 输出结果
printf("方程组的解为:\n");
for (i = 0; i < N; i++) {
printf("x[%d] = %lf\n", i + 1, x[i]);
}
return 0;
}
```
下面是程序运行的结果:
```
请输入增广矩阵:
1 2 -1 3
1 -1 5 0
4 1 -2 2
方程组的解为:
x = -0.210526
x = 1.684211
x = 0.473684
```
阅读全文