Вычитание двух матриц на языке 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

Описание кода:

  • Мы определяем максимальный размер матрицы 100x100 с помощью MAX_SIZE
  • rows и cols хранят размеры матриц
  • Создаются два двумерных массива matrix1 и matrix2 для хранения элементов матриц
  • 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] вычисляется путем вычитания соответствующих элементов из matrix1 и matrix2
  • Вычитание выполняется по правилам поэлементного вычитания матриц

Теперь скомпилируем программу:

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 для вычитания матриц. Программа позволяет пользователю ввести размер и значения двух матриц, которые затем сохраняются в двух двумерных массивах. Этот шаг закладывает основу для последующего шага вычитания соответствующих элементов двух матриц и вывода результирующей матрицы.

Программа запрашивает у пользователя количество строк и столбцов, а затем направляет его по вводу элементов первой и второй матриц. Это гарантирует, что программа может правильно обрабатывать матрицы разных размеров и хранить введенные данные для дальнейшей обработки.