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

CCBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

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

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

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


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL c(("C")) -.-> c/BasicsGroup(["Basics"]) c(("C")) -.-> c/ControlFlowGroup(["Control Flow"]) c(("C")) -.-> c/CompoundTypesGroup(["Compound Types"]) c(("C")) -.-> c/UserInteractionGroup(["User Interaction"]) c/BasicsGroup -.-> c/operators("Operators") c/ControlFlowGroup -.-> c/for_loop("For Loop") c/CompoundTypesGroup -.-> c/arrays("Arrays") c/UserInteractionGroup -.-> c/user_input("User Input") c/UserInteractionGroup -.-> c/output("Output") subgraph Lab Skills c/operators -.-> lab-435200{{"用 C 语言实现两个矩阵相减"}} c/for_loop -.-> lab-435200{{"用 C 语言实现两个矩阵相减"}} c/arrays -.-> lab-435200{{"用 C 语言实现两个矩阵相减"}} c/user_input -.-> lab-435200{{"用 C 语言实现两个矩阵相减"}} c/output -.-> lab-435200{{"用 C 语言实现两个矩阵相减"}} end

读取维度和元素

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

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