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("Enter number of rows (max %d): ", MAX_SIZE);
    scanf("%d", &rows);
    printf("Enter number of columns (max %d): ", MAX_SIZE);
    scanf("%d", &cols);

    // 첫 번째 행렬 요소 입력
    printf("Enter elements of first matrix:\n");
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            printf("Enter element [%d][%d]: ", i, j);
            scanf("%d", &matrix1[i][j]);
        }
    }

    // 두 번째 행렬 요소 입력
    printf("Enter elements of second matrix:\n");
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            printf("Enter element [%d][%d]: ", i, j);
            scanf("%d", &matrix2[i][j]);
        }
    }

    return 0;
}

프로그램 컴파일 및 실행

프로그램을 컴파일합니다.

gcc matrix_addition.c -o matrix_addition

예시 출력

프로그램을 실행하면 행렬 차원과 요소를 입력하라는 메시지가 표시됩니다.

Enter number of rows (max 10): 2
Enter number of columns (max 10): 3
Enter elements of first matrix:
Enter element [0][0]: 1
Enter element [0][1]: 2
Enter element [0][2]: 3
Enter element [1][0]: 4
Enter element [1][1]: 5
Enter element [1][2]: 6
Enter elements of second matrix:
Enter element [0][0]: 7
Enter element [0][1]: 8
Enter element [0][2]: 9
Enter element [1][0]: 10
Enter element [1][1]: 11
Enter element [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("\nResulting Matrix (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

예시 출력

Enter number of rows (max 10): 2
Enter number of columns (max 10): 3
Enter elements of first matrix:
Enter element [0][0]: 1
Enter element [0][1]: 2
Enter element [0][2]: 3
Enter element [1][0]: 4
Enter element [1][1]: 5
Enter element [1][2]: 6
Enter elements of second matrix:
Enter element [0][0]: 7
Enter element [0][1]: 8
Enter element [0][2]: 9
Enter element [1][0]: 10
Enter element [1][1]: 11
Enter element [1][2]: 12

Resulting Matrix (Matrix1 + Matrix2):
8 10 12
14 16 18

코드 설명

  • 행렬 요소의 합을 저장하기 위한 새로운 2 차원 배열 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

예시 출력

Enter number of rows (max 10): 2
Enter number of columns (max 10): 3
Enter elements of first matrix:
Enter element [0][0]: 1
Enter element [0][1]: 2
Enter element [0][2]: 3
Enter element [1][0]: 4
Enter element [1][1]: 5
Enter element [1][2]: 6
Enter elements of second matrix:
Enter element [0][0]: 7
Enter element [0][1]: 8
Enter element [0][2]: 9
Enter element [1][0]: 10
Enter element [1][1]: 11
Enter element [1][2]: 12

First Matrix:
   1    2    3

Second Matrix:
   7    8    9

Resulting Matrix (Matrix1 + Matrix2):
   8   10   12

코드 설명

  • printMatrix() 함수는 일관된 서식으로 행렬을 출력하도록 만들어졌습니다.
  • %4d 서식 지정자는 정렬된 열 출력을 보장합니다.
  • 함수는 행렬, 차원 및 이름을 매개변수로 받습니다.
  • 행렬은 설명적인 헤더와 함께 출력됩니다.
  • 중첩된 루프는 출력을 위해 행렬 요소를 반복합니다.

요약

이 실험에서 C 프로그램에서 두 행렬의 차원과 요소를 읽는 방법을 배웠습니다. 이것은 행렬 덧셈에 필수적인 단계로, 같은 크기의 행렬이 필요하기 때문입니다. 행렬 차원과 요소에 대한 입력을 구현하여 프로그램이 최대 10x10 크기의 행렬을 처리할 수 있도록 했습니다.

행렬 차원과 요소를 읽은 후 다음 단계는 두 행렬의 대응하는 요소를 더하고 결과 행렬을 저장하는 것입니다.