C 언어로 파스칼 삼각형의 특정 행 생성하기

CBeginner
지금 연습하기

소개

이 실습에서는 C 프로그래밍을 사용하여 파스칼 삼각형의 한 행을 생성하는 방법을 배웁니다. 이 실습은 사용자로부터 행 번호를 읽고, 행에 대한 이항 계수를 계산하고, 행을 출력하는 세 가지 주요 단계로 구성됩니다. 먼저 사용자가 원하는 행 번호를 입력하도록 프롬프트하는 프로그램을 만들고, 이항 계수를 계산하는 함수를 구현하고, 마지막으로 파스칼 삼각형의 행을 표시합니다. 이 실습을 마치면 수론 및 이산수학 개념에 대한 확실한 이해와 함께 C 프로그래밍을 사용하여 이러한 개념을 적용하는 실질적인 경험을 갖게 될 것입니다.

행 번호 읽기

이 단계에서는 C 프로그래밍을 사용하여 파스칼 삼각형의 한 행을 생성하기 위한 행 번호를 읽는 방법을 배웁니다. 사용자가 원하는 행 번호를 입력하도록 프롬프트하는 프로그램을 만들 것입니다.

먼저 프로젝트 디렉토리에 새로운 C 파일을 생성합니다.

cd ~/project
nano pascal_triangle.c

이제 행 번호를 읽는 다음 코드를 추가합니다.

#include <stdio.h>

int main() {
    int rowNumber;

    printf("파스칼 삼각형의 행 번호를 입력하세요: ");
    scanf("%d", &rowNumber);

    printf("입력한 행 번호: %d\n", rowNumber);

    return 0;
}

이제 프로그램을 컴파일하고 실행해 봅시다.

gcc pascal_triangle.c -o pascal_triangle
./pascal_triangle

예시 출력:

파스칼 삼각형의 행 번호를 입력하세요: 5
입력한 행 번호: 5

코드 설명:

  • #include <stdio.h>는 표준 입력/출력 라이브러리를 포함합니다.
  • scanf()는 사용자로부터 정수 입력을 읽습니다.
  • printf()는 입력된 행 번호를 표시합니다.
  • 이 프로그램은 행 번호에 대한 기본적인 사용자 입력을 검증합니다.

핵심 내용:

  • scanf()를 사용하여 정수 입력을 읽습니다.
  • 행 번호는 파스칼 삼각형의 특정 행을 생성하는 데 사용됩니다.
  • 후속 단계에서 입력 유효성 검사가 추가될 예정입니다.

이항 계수 계산

이 단계에서는 파스칼 삼각형의 특정 행을 생성하기 위한 이항 계수를 계산하는 방법을 배웁니다. 이전 프로그램을 수정하여 함수를 사용하여 계수를 계산할 것입니다.

기존 파일을 엽니다.

cd ~/project
nano pascal_triangle.c

이전 코드를 다음 구현으로 바꿉니다.

#include <stdio.h>

// 이항 계수를 계산하는 함수
int binomialCoeff(int n, int k) {
    // 기저 사례
    if (k == 0 || k == n)
        return 1;

    // 파스칼 삼각형의 성질을 이용한 재귀 계산
    return binomialCoeff(n-1, k-1) + binomialCoeff(n-1, k);
}

int main() {
    int rowNumber;

    printf("파스칼 삼각형의 행 번호를 입력하세요: ");
    scanf("%d", &rowNumber);

    printf("행 %d의 이항 계수:\n", rowNumber);

    // 계수를 생성하고 출력
    for (int k = 0; k < rowNumber; k++) {
        printf("%d ", binomialCoeff(rowNumber - 1, k));
    }
    printf("\n");

    return 0;
}

프로그램을 컴파일하고 실행합니다.

gcc pascal_triangle.c -o pascal_triangle
./pascal_triangle

예시 출력:

파스칼 삼각형의 행 번호를 입력하세요: 5
행 5의 이항 계수:
1 4 6 4 1

코드 설명:

  • binomialCoeff() 함수는 이항 계수를 재귀적으로 계산합니다.
  • 기저 사례는 각 행의 첫 번째 및 마지막 요소를 처리합니다.
  • 이 함수는 파스칼 삼각형의 재귀적 성질을 사용합니다.
  • 중첩 루프는 지정된 행의 계수를 생성합니다.

핵심 내용:

  • 이항 계수는 파스칼 삼각형의 각 행에 있는 숫자를 나타냅니다.
  • 재귀 계산은 수학적 관계를 보여줍니다.
  • 재귀적 접근 방식으로 인해 시간 복잡도는 지수적입니다.

행 출력

이 단계에서는 파스칼 삼각형 프로그램을 개선하여 적절한 간격과 정렬로 행을 포맷하고 출력하여 시각적으로 매력적인 출력을 생성합니다.

기존 파일을 엽니다.

cd ~/project
nano pascal_triangle.c

이전 코드를 다음 구현으로 바꿉니다.

#include <stdio.h>

// 이항 계수를 계산하는 함수
int binomialCoeff(int n, int k) {
    if (k == 0 || k == n)
        return 1;
    return binomialCoeff(n-1, k-1) + binomialCoeff(n-1, k);
}

// 파스칼 삼각형 행을 출력하는 함수
void printPascalRow(int rowNumber) {
    // 정렬을 위해 앞쪽 공백 출력
    for (int space = 0; space < rowNumber; space++) {
        printf("   ");
    }

    // 계수를 생성하고 출력
    for (int k = 0; k < rowNumber; k++) {
        int coefficient = binomialCoeff(rowNumber - 1, k);
        printf("%4d ", coefficient);
    }
    printf("\n");
}

int main() {
    int rowNumber;

    printf("파스칼 삼각형의 행 번호를 입력하세요 (1-10): ");
    scanf("%d", &rowNumber);

    if (rowNumber < 1 || rowNumber > 10) {
        printf("행 번호는 1 과 10 사이의 값을 입력해야 합니다.\n");
        return 1;
    }

    printf("파스칼 삼각형 행 %d:\n", rowNumber);

    // 지정된 행 출력
    printPascalRow(rowNumber);

    return 0;
}

프로그램을 컴파일하고 실행합니다.

gcc pascal_triangle.c -o pascal_triangle
./pascal_triangle

예시 출력:

파스칼 삼각형의 행 번호를 입력하세요 (1-10): 5
파스칼 삼각형 행 5:
            1    4    6    4    1

코드 설명:

  • printPascalRow() 함수는 행 포맷팅을 처리합니다.
  • 시각적 정렬을 위해 앞쪽 공백을 추가했습니다.
  • 일관된 열 너비를 위해 %4d 포맷 지정자를 사용했습니다.
  • 행 번호 제한을 위한 입력 유효성 검사를 추가했습니다.
  • 적절한 간격으로 전체 행을 출력합니다.

핵심 내용:

  • 포맷팅을 통해 파스칼 삼각형의 가독성이 향상되었습니다.
  • 입력 유효성 검사를 통해 예기치 않은 동작을 방지합니다.
  • C 에서 기본 포맷팅 기법을 보여줍니다.

요약

이 실습에서는 C 프로그래밍을 사용하여 파스칼 삼각형의 특정 행을 생성하기 위한 행 번호를 읽고, 이항 계수를 계산하여 행을 출력하는 방법을 배웁니다. 먼저, 사용자가 원하는 행 번호를 입력하도록 프롬프트하는 프로그램을 작성합니다. 그런 다음, 파스칼 삼각형의 재귀적 성질을 사용하여 이항 계수를 계산하는 함수를 구현합니다. 마지막으로, 계산된 계수를 기반으로 파스칼 삼각형의 행을 출력합니다. 이 실습에서 다루는 주요 내용은 사용자 입력을 읽기 위한 scanf() 사용, 이항 계수를 계산하기 위한 재귀 함수 구현, 생성된 행 출력 등입니다.