用 C 语言实现两个矩阵相加

CBeginner
立即练习

简介

在这个实验中,你将学习如何在 C 编程中添加两个矩阵。该实验涵盖以下步骤:读取两个矩阵的维度和元素,将对应元素相加,并打印结果矩阵。你将首先创建一个 C 程序来读取矩阵的维度和元素,然后实现矩阵加法逻辑,最后输出最终矩阵。该实验旨在提供使用 C 处理矩阵和线性代数的实践经验。

读取两个矩阵的维度和元素

在这一步中,你将学习如何在 C 程序中读取两个矩阵的维度和元素。矩阵加法要求矩阵大小相同,所以我们首先要实现矩阵维度和元素的输入。

创建矩阵加法程序

首先,创建一个用于矩阵加法的新 C 文件:

cd ~/project
nano matrix_addition.c

现在,让我们编写读取矩阵维度和元素的代码:

#include <stdio.h>

#define MAX_SIZE 10

int main() {
    int rows, cols;
    int matrix1[MAX_SIZE][MAX_SIZE], matrix2[MAX_SIZE][MAX_SIZE];

    // 读取矩阵的维度
    printf("输入行数 (最大 %d): ", MAX_SIZE);
    scanf("%d", &rows);
    printf("输入列数 (最大 %d): ", MAX_SIZE);
    scanf("%d", &cols);

    // 输入第一个矩阵的元素
    printf("输入第一个矩阵的元素:\n");
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            printf("输入元素 [%d][%d]: ", i, j);
            scanf("%d", &matrix1[i][j]);
        }
    }

    // 输入第二个矩阵的元素
    printf("输入第二个矩阵的元素:\n");
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            printf("输入元素 [%d][%d]: ", i, j);
            scanf("%d", &matrix2[i][j]);
        }
    }

    return 0;
}

编译并运行程序

编译程序:

gcc matrix_addition.c -o matrix_addition

示例输出

当你运行程序时,它会提示你输入矩阵的维度和元素:

输入行数(最大 10): 2
输入列数(最大 10): 3
输入第一个矩阵的元素:
输入元素 [0][0]: 1
输入元素 [0][1]: 2
输入元素 [0][2]: 3
输入元素 [1][0]: 4
输入元素 [1][1]: 5
输入元素 [1][2]: 6
输入第二个矩阵的元素:
输入元素 [0][0]: 7
输入元素 [0][1]: 8
输入元素 [0][2]: 9
输入元素 [1][0]: 10
输入元素 [1][1]: 11
输入元素 [1][2]: 12

代码解释

  • #define MAX_SIZE 10 设置矩阵维度的最大限制
  • scanf() 用于读取行数、列数和矩阵元素的整数输入
  • 嵌套的 for 循环用于输入两个矩阵的元素
  • 程序确保矩阵维度在定义的最大大小范围内

相加对应元素

在这一步中,你将学习如何将两个矩阵的对应元素相加,并将结果存储在一个新矩阵中。

更新矩阵加法程序

打开之前的 C 文件:

cd ~/project
nano matrix_addition.c

修改程序以相加矩阵元素:

#include <stdio.h>

#define MAX_SIZE 10

int main() {
    int rows, cols;
    int matrix1[MAX_SIZE][MAX_SIZE], matrix2[MAX_SIZE][MAX_SIZE], result[MAX_SIZE][MAX_SIZE];

    // 之前的输入代码保持不变
    //...(输入矩阵 1 和矩阵 2 的维度和元素)

    // 相加对应元素
    printf("\n结果矩阵 (矩阵 1 + 矩阵 2):\n");
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            result[i][j] = matrix1[i][j] + matrix2[i][j];
            printf("%d ", result[i][j]);
        }
        printf("\n");
    }

    return 0;
}

编译并运行程序

编译更新后的程序:

gcc matrix_addition.c -o matrix_addition

运行程序:

./matrix_addition

示例输出

输入行数(最大 10): 2
输入列数(最大 10): 3
输入第一个矩阵的元素:
输入元素 [0][0]: 1
输入元素 [0][1]: 2
输入元素 [0][2]: 3
输入元素 [1][0]: 4
输入元素 [1][1]: 5
输入元素 [1][2]: 6
输入第二个矩阵的元素:
输入元素 [0][0]: 7
输入元素 [0][1]: 8
输入元素 [0][2]: 9
输入元素 [1][0]: 10
输入元素 [1][1]: 11
输入元素 [1][2]: 12

结果矩阵 (矩阵1 + 矩阵2):
8 10 12
14 16 18

代码解释

  • 创建一个新的二维数组 result 来存储矩阵元素的和
  • 嵌套的 for 循环遍历两个矩阵的每个元素
  • result[i][j] = matrix1[i][j] + matrix2[i][j] 相加对应元素
  • printf() 用于显示结果矩阵

打印结果矩阵

在这一步中,你将学习如何以清晰、易读的方式格式化并打印结果矩阵。

增强矩阵打印功能

打开之前的 C 文件:

cd ~/project
nano matrix_addition.c

使用一个专门的矩阵打印函数更新程序:

#include <stdio.h>

#define MAX_SIZE 10

// 打印矩阵的函数
void printMatrix(int matrix[MAX_SIZE][MAX_SIZE], int rows, int cols, const char* matrixName) {
    printf("%s:\n", matrixName);
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            printf("%4d ", matrix[i][j]);
        }
        printf("\n");
    }
    printf("\n");
}

int main() {
    int rows, cols;
    int matrix1[MAX_SIZE][MAX_SIZE], matrix2[MAX_SIZE][MAX_SIZE], result[MAX_SIZE][MAX_SIZE];

    // 之前的输入代码保持不变
    //...(输入矩阵 1 和矩阵 2 的维度和元素)

    // 相加对应元素
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            result[i][j] = matrix1[i][j] + matrix2[i][j];
        }
    }

    // 打印矩阵
    printMatrix(matrix1, rows, cols, "第一个矩阵");
    printMatrix(matrix2, rows, cols, "第二个矩阵");
    printMatrix(result, rows, cols, "结果矩阵 (矩阵 1 + 矩阵 2)");

    return 0;
}

编译并运行程序

编译更新后的程序:

gcc matrix_addition.c -o matrix_addition

运行程序:

./matrix_addition

示例输出

输入行数(最大 10): 2
输入列数(最大 10): 3
输入第一个矩阵的元素:
输入元素 [0][0]: 1
输入元素 [0][1]: 2
输入元素 [0][2]: 3
输入元素 [1][0]: 4
输入元素 [1][1]: 5
输入元素 [1][2]: 6
输入第二个矩阵的元素:
输入元素 [0][0]: 7
输入元素 [0][1]: 8
输入元素 [0][2]: 9
输入元素 [1][0]: 10
输入元素 [1][1]: 11
输入元素 [1][2]: 12

第一个矩阵:
   1    2    3
   4    5    6

第二个矩阵:
   7    8    9
  10   11   12

结果矩阵 (矩阵1 + 矩阵2):
   8   10   12
  14   16   18

代码解释

  • 创建了 printMatrix() 函数来以一致的格式打印矩阵
  • %4d 格式说明符确保列打印对齐
  • 函数将矩阵、维度和名称作为参数
  • 矩阵以描述性标题打印
  • 嵌套循环遍历矩阵元素进行打印

总结

在这个实验中,你学习了如何在 C 程序中读取两个矩阵的维度和元素。这是矩阵加法的一个重要步骤,因为矩阵加法要求矩阵大小相同。你实现了矩阵维度和元素的输入,确保程序能够处理最大尺寸为 10x10 的矩阵。

在读取矩阵维度和元素之后,下一步是将两个矩阵的对应元素相加,并存储结果矩阵。