如何既复习线性代数又复习C语言?

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <math.h>
int main() {
    float a[100][100],b[100];
    int i, j, n;
    //intro
    printf("///////////////////////////////////////\n");
    printf("/*      Programmed by Cherry Ye      */\n");
    printf("/*    只能计算有唯一解的线性方程组   */\n");
    printf("///////////////////////////////////////\n\n");
    //输入
    printf("有n个未知数,n=");
    scanf("%d", &n);
    printf("请输入方程组的增广矩阵:\n");
    for (i = 1; i <= n; i++) {
        for (j = 1; j <= n; j++) {
            scanf("%f", &a[i][j]);
        }
        scanf("%f", &b[i]);
    }
    printf("\n");
    printf("您输入的方程组是:\n");
    for (i = 1; i <= n; i++) {
        printf("%5.2fx%d", a[i][1], 1);
        for (j = 2; j <= n; j++) {
            if (a[i][j] < 0) printf("-%5.2fx%d", -a[i][j], j);
            else printf("+%5.2fx%d", a[i][j], j);
        }
        printf("=%5.2f\n", b[i]);
    }
    printf("\n");
    //消元
    float k;
    int t;
    for (i = 1; i <= n-1; i++) {
        for (j = i + 1; j <= n; j++) {
            k = a[j][i] / a[i][i];
            for (t = i; t <= n; t++) {
                a[j][t] -= a[i][t] * k;
            }
            b[j] -= b[i] * k;
        }
    }
    printf("消元后的方程组是:\n");
    for (i = 1; i <= n; i++) {
        printf("%5.2fx%d", a[i][1], 1);
        for (j = 2; j <= n; j++) {
            if (a[i][j] < 0) printf("-%5.2fx%d", -a[i][j], j);
            else printf("+%5.2fx%d", a[i][j], j);
        }
        printf("=%5.2f\n", b[i]);
    }
    printf("\n");
    //计算答案
    float ans[100];
    for (i = n; i >= 1; i--) {
        ans[i] = b[i] / a[i][i];
        for (j = n - 1; j >= 1; j--) {
            b[j] -= a[j][i] * ans[i];
        }
    }
    //输出答案
    printf("方程的解为:\n");
    for (i = 1; i <= n; i++) {
        printf("x%d=%5.2f\n", i, ans[i]);
    }
    return 0;
}
高斯消元

 

 posted on 2015-09-28 22:52  Sky-Grey  阅读(138)  评论(0编辑  收藏  举报