C 언어로 분수 간소화 (최대공약수)

CBeginner
지금 연습하기

소개

이 실습에서는 C 프로그래밍에서 최대 공약수 (GCD) 알고리즘을 사용하여 분수를 간소화하는 방법을 배우게 됩니다. 이 실습은 사용자 입력으로 분자와 분모를 읽고, GCD 를 계산한 다음, GCD 로 분자와 분모를 나누어 간소화된 분수를 얻는 다음 단계를 다룹니다. 이 실습은 분수 간소화 개념을 이해하고 C 프로그래밍 기법을 사용하여 구현하는 데 도움을 주기 위한 것입니다.

분자와 분모 읽기

이 단계에서는 분수 간소화를 위한 C 프로그램에서 사용자 입력으로 분자와 분모를 읽는 방법을 배웁니다.

먼저, 분수 간소화 프로그램을 위한 새로운 C 파일을 생성합니다.

cd ~/project
nano fraction_simplify.c

이제 분자와 분모를 읽는 다음 코드를 추가합니다.

#include <stdio.h>

int main() {
    int numerator, denominator;

    printf("분자를 입력하세요: ");
    scanf("%d", &numerator);

    printf("분모를 입력하세요: ");
    scanf("%d", &denominator);

    printf("분자: %d\n", numerator);
    printf("분모: %d\n", denominator);

    return 0;
}

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

gcc fraction_simplify.c -o fraction_simplify
./fraction_simplify

예시 출력:

분자를 입력하세요: 12
분모를 입력하세요: 18
분자: 12
분모: 18

코드 설명:

  • scanf()는 사용자로부터 정수 입력을 읽는 데 사용됩니다.
  • %d는 정수 형식 지정자입니다.
  • &numerator&denominator는 입력 값을 저장할 메모리 주소를 전달합니다.
  • printf()는 입력된 분자와 분모를 표시하는 데 사용됩니다.

최대 공약수 (GCD) 계산 및 분수 간소화

이 단계에서는 최대 공약수 (GCD) 알고리즘을 구현하고 이를 사용하여 분수를 간소화합니다.

이전 프로그램을 수정하여 GCD 계산 함수를 추가해 봅시다.

cd ~/project
nano fraction_simplify.c

다음 구현으로 코드를 업데이트합니다.

#include <stdio.h>

// 유클리드 알고리즘을 사용하여 GCD 를 계산하는 함수
int computeGCD(int a, int b) {
    // 양수로 변환
    a = (a > 0) ? a : -a;
    b = (b > 0) ? b : -b;

    // 유클리드 알고리즘
    while (b != 0) {
        int temp = b;
        b = a % b;
        a = temp;
    }

    return a;
}

int main() {
    int numerator, denominator, gcd;

    printf("분자를 입력하세요: ");
    scanf("%d", &numerator);

    printf("분모를 입력하세요: ");
    scanf("%d", &denominator);

    // GCD 계산
    gcd = computeGCD(numerator, denominator);

    // 분수 간소화
    int simplified_numerator = numerator / gcd;
    int simplified_denominator = denominator / gcd;

    printf("원래 분수: %d/%d\n", numerator, denominator);
    printf("간소화된 분수: %d/%d\n", simplified_numerator, simplified_denominator);

    return 0;
}

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

gcc fraction_simplify.c -o fraction_simplify
./fraction_simplify

예시 출력:

분자를 입력하세요: 12
분모를 입력하세요: 18
원래 분수: 12/18
간소화된 분수: 2/3

코드 설명:

  • computeGCD()는 유클리드 알고리즘을 사용하여 최대 공약수를 찾습니다.
  • 함수는 양수와 음수 모두 처리합니다.
  • 분수는 분자와 분모를 그들의 최대 공약수로 나누어 간소화합니다.
  • 0 과 음수와 같은 예외적인 경우를 처리합니다.

간소화된 분수 출력

이 단계에서는 다양한 입력 시나리오를 처리하고 명확한 출력 형식을 제공하도록 분수 간소화 프로그램을 개선합니다.

보다 강력한 분수 출력을 포함하도록 프로그램을 업데이트해 봅시다.

cd ~/project
nano fraction_simplify.c

다음 구현으로 코드를 업데이트합니다.

#include <stdio.h>

// 유클리드 알고리즘을 사용하여 GCD 를 계산하는 함수
int computeGCD(int a, int b) {
    a = (a > 0) ? a : -a;
    b = (b > 0) ? b : -b;

    while (b != 0) {
        int temp = b;
        b = a % b;
        a = temp;
    }

    return a;
}

// 특수 케이스 처리를 포함한 분수 출력 함수
void printFraction(int numerator, int denominator) {
    // 0 으로 나누는 경우 처리
    if (denominator == 0) {
        printf("Error: 0 으로 나눌 수 없습니다.\n");
        return;
    }

    // GCD 계산
    int gcd = computeGCD(numerator, denominator);

    // 분수 간소화
    int simplified_numerator = numerator / gcd;
    int simplified_denominator = denominator / gcd;

    // 부호 처리
    if (simplified_denominator < 0) {
        simplified_numerator = -simplified_numerator;
        simplified_denominator = -simplified_denominator;
    }

    // 결과 출력
    printf("원래 분수: %d/%d\n", numerator, denominator);

    // 정수와 분수에 대한 다른 출력
    if (simplified_denominator == 1) {
        printf("간소화된 분수: %d\n", simplified_numerator);
    } else {
        printf("간소화된 분수: %d/%d\n",
               simplified_numerator, simplified_denominator);
    }
}

int main() {
    int numerator, denominator;

    printf("분자를 입력하세요: ");
    scanf("%d", &numerator);

    printf("분모를 입력하세요: ");
    scanf("%d", &denominator);

    // 분수 출력 함수 호출
    printFraction(numerator, denominator);

    return 0;
}

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

gcc fraction_simplify.c -o fraction_simplify
./fraction_simplify

예시 출력:

분자를 입력하세요: 12
분모를 입력하세요: 18
원래 분수: 12/18
간소화된 분수: 2/3

분자를 입력하세요: 15
분모를 입력하세요: 5
원래 분수: 15/5
간소화된 분수: 3

분자를 입력하세요: -12
분모를 입력하세요: 18
원래 분수: -12/18
간소화된 분수: -2/3

코드 설명:

  • 분수 출력을 처리하는 printFraction() 함수를 추가했습니다.
  • 0 으로 나누는 경우와 같은 특수 케이스를 처리합니다.
  • 간소화된 분수의 부호를 관리합니다.
  • 분모가 1 일 때 정수로 출력합니다.
  • 분수의 원래 부호를 유지합니다.

요약

이 실습에서는 사용자 입력으로 분자와 분모를 읽고, 유클리드 알고리즘을 사용하여 최대 공약수 (GCD) 를 계산한 다음, GCD 로 분자와 분모를 나누어 분수를 간소화하는 방법을 배웁니다. 간소화된 분수가 출력됩니다.

핵심 단계는 다음과 같습니다. 1) 사용자 입력으로 분자와 분모를 읽고, 2) 최대 공약수를 찾기 위해 GCD 알고리즘을 구현하고, 3) GCD 로 분자와 분모를 나누어 간소화된 분수를 얻습니다.