Сложение двух матриц на 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];

    // Предыдущий код ввода остается неизменным
    // ... (ввод размеров и элементов матриц matrix1 и matrix2)

    // Сложение соответствующих элементов
    printf("\nРезультирующая матрица (Matrix1 + Matrix2):\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

Результирующая матрица (Matrix1 + Matrix2):
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];

    // Предыдущий код ввода остается неизменным
    // ... (ввод размеров и элементов матриц matrix1 и matrix2)

    // Сложение соответствующих элементов
    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, "First Matrix");
    printMatrix(matrix2, rows, cols, "Second Matrix");
    printMatrix(result, rows, cols, "Resulting Matrix (Matrix1 + Matrix2)");

    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

First Matrix:
   1    2    3

Second Matrix:
   7    8    9

Resulting Matrix (Matrix1 + Matrix2):
   8   10   12

  14   16   18

Объяснение Кода

  • Создана функция printMatrix() для вывода матриц с согласованным форматированием
  • Спецификатор формата %4d обеспечивает выравнивание столбцов при выводе
  • Функция принимает матрицу, размеры и имя в качестве параметров
  • Матрицы выводятся с описательными заголовками
  • Вложенные циклы перебирают элементы матрицы для вывода

Резюме

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

После считывания размеров и элементов матриц следующим шагом является сложение соответствующих элементов двух матриц и сохранение результирующей матрицы.