无糖— 2022-01-29 22:11 采纳率: 85.7%
浏览 29
已结题

c语言——求矩阵的运算

img

  • 写回答

1条回答 默认 最新

  • _GX_ 2022-01-30 06:52
    关注
    #include <stdio.h>
    #include <assert.h>
    #include <stdlib.h>
    
    typedef struct
    {
        int *data;
        int n;
    } SquareMatrix;
    
    SquareMatrix *create(int n)
    {
        assert(n >= 1);
        SquareMatrix *matrix = (SquareMatrix *)malloc(sizeof(SquareMatrix));
        matrix->data = (int *)malloc(n * n * sizeof(int));
        matrix->n = n;
        return matrix;
    }
    
    void destroy(SquareMatrix *matrix)
    {
        free(matrix->data);
        free(matrix);
    }
    
    void input(SquareMatrix *matrix)
    {
        int n = matrix->n;
        for (int i = 0; i < n; i++)
            for (int j = 0; j < n; j++)
                scanf("%d", &matrix->data[i * n + j]);
    }
    
    void print(const SquareMatrix *matrix)
    {
        int n = matrix->n;
        for (int i = 0; i < n; i++)
        {
            for (int j = 0; j < n; j++)
                printf("%5d", matrix->data[i * n + j]);
            printf("\n");
        }
    }
    
    // matrix1 += matirx2
    void add(SquareMatrix *matrix1, const SquareMatrix *matrix2)
    {
        assert(matrix1->n == matrix2->n);
        int n = matrix1->n;
        for (int i = 0; i < n; i++)
            for (int j = 0; j < n; j++)
                matrix1->data[i * n + j] += matrix2->data[i * n + j];
    }
    
    // matrix1 -= matrix2
    void subtract(SquareMatrix *matrix1, const SquareMatrix *matrix2)
    {
        assert(matrix1->n == matrix2->n);
        int n = matrix1->n;
        for (int i = 0; i < n; i++)
            for (int j = 0; j < n; j++)
                matrix1->data[i * n + j] -= matrix2->data[i * n + j];
    }
    
    int main()
    {
        int n;
        scanf("%d", &n);
        SquareMatrix *matrix1 = create(n);
        SquareMatrix *matrix2 = create(n);
        input(matrix1);
        while (1)
        {
            char op;
            scanf(" %c", &op);
            if (op == '#')
            {
                print(matrix1);
                break;
            }
            input(matrix2);
            if (op == '+')
                add(matrix1, matrix2);
            else if (op == '-')
                subtract(matrix1, matrix2);
        }
        destroy(matrix1);
        destroy(matrix2);
        return 0;
    }
    
    $ gcc -Wall main.c
    $ ./a.out
    3
    1 -2 7
    2 8 -5
    3 6 9
    +
    3 5 7
    -1 2 6
    3 7 10
    -
    1 -2 7
    2 8 -5
    3 6 9
    #
        3    5    7
       -1    2    6
        3    7   10
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 2月7日
  • 已采纳回答 1月30日
  • 创建了问题 1月29日