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는 행렬의 차원을 저장합니다.
  • 두 개의 2 차원 배열 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

코드 설명:

  • 뺄셈 결과를 저장하기 위한 새로운 2 차원 배열 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 프로그램에서 사용자 입력으로 행렬 차원과 요소를 읽어 행렬 뺄셈을 수행하는 방법을 배웠습니다. 이 프로그램은 사용자가 두 행렬의 크기와 값을 입력하도록 하며, 이 값들은 두 개의 2 차원 배열에 저장됩니다. 이 단계는 두 행렬의 대응하는 요소를 빼고 결과 행렬을 출력하는 후속 단계의 기반을 마련합니다.

프로그램은 사용자에게 행과 열의 개수를 입력하도록 요청하고, 그런 다음 첫 번째 및 두 번째 행렬의 요소 입력을 안내합니다. 이를 통해 프로그램이 서로 다른 크기의 행렬을 적절하게 처리하고 추가 처리를 위해 입력 데이터를 저장할 수 있도록 합니다.