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

CBeginner
立即练习

简介

在本实验中,你将学习如何在 C 程序中对两个矩阵进行减法运算。本实验涵盖以下步骤:

首先,你将学习如何从用户输入中读取两个矩阵的维度和元素。你将创建一个 C 程序,提示用户输入行数和列数,然后输入两个矩阵的元素。

接下来,你将实现矩阵减法运算,即减去两个矩阵的对应元素,并将结果存储在一个新矩阵中。最后,你将学习如何打印结果矩阵。

读取维度和元素

在这一步中,你将学习如何在用于矩阵减法的 C 程序中从用户输入读取矩阵的维度和元素。我们将创建一个程序,允许用户输入两个矩阵的大小和值。

首先,为我们的矩阵减法程序创建一个新的 C 文件:

cd ~/project
nano matrix_subtraction.c

现在,将以下代码添加到该文件中:

#include <stdio.h>

#define MAX_SIZE 100

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

    // 读取矩阵维度
    printf("输入行数:");
    scanf("%d", &rows);
    printf("输入列数:");
    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;
}

示例输出:

输入行数:2
输入列数:2
输入第一个矩阵的元素:
输入元素 [0][0]:5
输入元素 [0][1]:6
输入元素 [1][0]:7
输入元素 [1][1]:8
输入第二个矩阵的元素:
输入元素 [0][0]:1
输入元素 [0][1]:2
输入元素 [1][0]:3
输入元素 [1][1]:4

让我们编译并运行该程序:

gcc matrix_subtraction.c -o matrix_subtraction
./matrix_subtraction

代码解释:

  • 我们使用 MAX_SIZE 定义了最大矩阵大小为 100x100
  • rowscols 存储矩阵的维度
  • 创建了两个二维数组 matrix1matrix2 来存储矩阵元素
  • 使用 scanf() 从用户输入读取矩阵维度和元素
  • 使用嵌套循环为两个矩阵输入元素

减去对应元素

在这一步中,你将学习如何减去两个矩阵的对应元素,并将结果存储在一个新矩阵中。我们将扩展上一个程序来执行矩阵减法。

打开现有文件并修改代码:

cd ~/project
nano matrix_subtraction.c

用矩阵减法逻辑更新代码:

#include <stdio.h>

#define MAX_SIZE 100

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

    // 读取矩阵维度
    printf("输入行数:");
    scanf("%d", &rows);
    printf("输入列数:");
    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]);
        }
    }

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

    return 0;
}

示例输出:

输入行数:2
输入列数:2
输入第一个矩阵的元素:
输入元素 [0][0]:5
输入元素 [0][1]:6
输入元素 [1][0]:7
输入元素 [1][1]:8
输入第二个矩阵的元素:
输入元素 [0][0]:1
输入元素 [0][1]:2
输入元素 [1][0]:3
输入元素 [1][1]:4

代码解释:

  • 创建了一个新的二维数组 result 来存储减法结果
  • 嵌套循环遍历每个矩阵元素
  • result[i][j] 通过从 matrix1matrix2 中减去对应元素来计算
  • 减法遵循按元素的矩阵减法规则

让我们编译程序:

gcc matrix_subtraction.c -o matrix_subtraction

打印结果矩阵

在这一步中,你将学习如何在减法运算后打印结果矩阵。我们将修改上一个程序以显示减法结果。

打开现有文件并更新代码:

cd ~/project
nano matrix_subtraction.c

用矩阵打印逻辑更新代码:

#include <stdio.h>

#define MAX_SIZE 100

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

    // 读取矩阵维度
    printf("输入行数:");
    scanf("%d", &rows);
    printf("输入列数:");
    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]);
        }
    }

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

    // 打印结果矩阵
    printf("\n减法运算后的结果矩阵:\n");
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            printf("%d ", result[i][j]);
        }
        printf("\n");
    }

    return 0;
}

编译并运行程序:

gcc matrix_subtraction.c -o matrix_subtraction
./matrix_subtraction

示例输出:

输入行数:2
输入列数:2
输入第一个矩阵的元素:
输入元素 [0][0]:5
输入元素 [0][1]:6
输入元素 [1][0]:7
输入元素 [1][1]:8
输入第二个矩阵的元素:
输入元素 [0][0]:1
输入元素 [0][1]:2
输入元素 [1][0]:3
输入元素 [1][1]:4

减法运算后的结果矩阵:
4 4
4 4

代码解释:

  • 添加了一个新的嵌套循环来打印 result 矩阵
  • printf("%d ", result[i][j]) 打印每个元素
  • 额外的 printf("\n") 在每行之后创建一个新行
  • 输出显示了减去值后的矩阵

总结

在本实验中,你学习了如何在用于矩阵减法的 C 程序中从用户输入读取矩阵维度和元素。该程序允许用户输入两个矩阵的大小和值,然后将它们存储在两个二维数组中。这一步为后续减去两个矩阵的对应元素并打印结果矩阵奠定了基础。

程序提示用户输入行数和列数,然后引导他们输入第一个和第二个矩阵的元素。这确保程序能够正确处理不同大小的矩阵,并存储输入数据以供进一步处理。