Guass Jordan求线性方程组解最后一步有点小问题

图片说明

图片说明

如图上面是我程序算出来的值,前面都还好,就是在step3最后一步的地方,矩阵的第三列那里第一行第二行没有变成0,不知道是计算步骤的哪里出了问题

#include

#define N 100

void output(int n, int st, double a[100][N], double b[100])

{
int i, j;

printf("\n\nStep  %3d\n", st);
for (i = 1;i <= n;i++) {
    for (j = 1;j <= n;j++)
        printf("   %8.2f", a[i][j]);
    printf("   %8.2f\n", b[i]);
}

}
int main(void)
{
int i, j, k, n, q, w, e;
double p;
double a[N][N], b[N], x[N];

printf("namber of demension(n) =");        
scanf("%d", &n);
for (i = 1;i <= n;i++) {
    for (j = 1;j <= n;j++) {
        printf("a[%d][%d] =", i, j);
        scanf("%lf", &a[i][j]);
    }
    printf("b[%d] =", i);
    scanf("%lf", &b[i]);
}

printf("\n\nGauss eliminaition method\n\n");
printf("input data\n");
for (j = 1;j <= n;j++)
    printf("         x%d", j);
printf("       rhs\n");
for (i = 1;i <= n;i++) {
    for (j = 1;j <= n;j++)
        printf("   %8.2f", a[i][j]);
    printf("   %8.2f\n", b[i]);
}

for (i = 1;i <= n;i++) {
    p = a[i][i];
    for (j = i;j <= n;j++) 
        a[i][j] = a[i][j] / p;
    b[i] = b[i] / p;
    for (k = 1;k <= n;k++) {
        if (k != i) {
            q = a[k][i];
            for (j = i;j <= n;j++)
                a[k][j] = a[k][j] - q * a[i][j];
            b[k] = b[k] - q * b[i];
        }
    }
    output(n, i, a, b);
}


printf("\n\n solution :\n\n");
for (i = 1; i <= n; i++)
    printf(" x[%d] = b[%d] = %8.2f \n", i, i, b[i]);

return 0;
}

https://wenku.baidu.com/view/9c201a03eff9aef8941e0618.html