C 언어로 이차 방정식 풀기

CBeginner
지금 연습하기

소개

이 실습에서는 C 프로그래밍으로 이차 방정식을 푸는 방법을 배웁니다. 이 실습은 이차 방정식의 계수를 읽는 것부터 판별식을 계산하고 실수 또는 복소수 근을 결정하는 전체 과정을 다룹니다. 사용자에게 계수를 입력받고 필요한 계산을 수행하며 해를 출력하는 C 프로그램을 작성할 것입니다.

이 실습은 두 가지 주요 단계로 나뉩니다. 첫째, 사용자로부터 계수 a, b, 및 c 를 읽는 방법을 배우게 됩니다. 둘째, 프로그램을 수정하여 판별식을 계산하고 이차 공식을 사용하여 방정식의 근을 찾고 실수 및 복소수 해를 모두 처리하게 됩니다.

a, b, c 입력

이 단계에서는 C 에서 이차 방정식의 입력 값을 읽는 방법을 배웁니다. 사용자로부터 계수 a, b, 및 c 를 받는 프로그램을 만들 것입니다.

먼저 이차 방정식 해결 프로그램을 위한 새 파일을 만듭니다.

cd ~/project
nano quadratic_solver.c

이제 다음 코드를 파일에 추가합니다.

#include <stdio.h>

int main() {
    double a, b, c;

    // 사용자에게 입력을 요청합니다.
    printf("계수 a 를 입력하세요: ");
    scanf("%lf", &a);

    printf("계수 b 를 입력하세요: ");
    scanf("%lf", &b);

    printf("계수 c 를 입력하세요: ");
    scanf("%lf", &c);

    // 입력된 계수를 출력합니다.
    printf("입력된 계수:\n");
    printf("a = %.2f\n", a);
    printf("b = %.2f\n", b);
    printf("c = %.2f\n", c);

    return 0;
}

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

gcc quadratic_solver.c -o quadratic_solver

프로그램을 실행합니다.

./quadratic_solver

예시 출력:

계수 a를 입력하세요: 1
계수 b를 입력하세요: -5
계수 c를 입력하세요: 6
입력된 계수:
a = 1.00
b = -5.00
c = 6.00

코드의 주요 부분을 살펴보겠습니다.

  • scanf()는 각 계수에 대한 사용자 입력을 읽는 데 사용됩니다.
  • %lf는 배정밀도 부동소수점 숫자를 위한 형식 지정자입니다.
  • 계수는 변수 a, b, 및 c 에 저장됩니다.
  • 프로그램은 입력 확인을 위해 입력된 계수를 다시 출력합니다.

판별식 계산 및 근 결정

이 단계에서는 이전 프로그램을 수정하여 판별식을 계산하고 이차 공식을 사용하여 이차 방정식의 근을 결정합니다.

기존 파일을 열고 코드를 업데이트합니다.

cd ~/project
nano quadratic_solver.c

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

#include <stdio.h>
#include <math.h>

int main() {
    double a, b, c;
    double discriminant, root1, root2;

    // 사용자에게 입력을 요청합니다.
    printf("계수 a 를 입력하세요: ");
    scanf("%lf", &a);

    printf("계수 b 를 입력하세요: ");
    scanf("%lf", &b);

    printf("계수 c 를 입력하세요: ");
    scanf("%lf", &c);

    // 판별식 계산
    discriminant = b * b - 4 * a * c;

    // 판별식을 확인하여 근의 유형을 결정합니다.
    if (discriminant > 0) {
        // 서로 다른 두 실수 근
        root1 = (-b + sqrt(discriminant)) / (2 * a);
        root2 = (-b - sqrt(discriminant)) / (2 * a);
        printf("서로 다른 두 실수 근:\n");
        printf("근 1 = %.2f\n", root1);
        printf("근 2 = %.2f\n", root2);
    } else if (discriminant == 0) {
        // 중복되는 하나의 실수 근
        root1 = -b / (2 * a);
        printf("중복되는 하나의 실수 근:\n");
        printf("근 = %.2f\n", root1);
    } else {
        // 복소수 근
        double realPart = -b / (2 * a);
        double imaginaryPart = sqrt(-discriminant) / (2 * a);
        printf("복소수 근:\n");
        printf("근 1 = %.2f + %.2fi\n", realPart, imaginaryPart);
        printf("근 2 = %.2f - %.2fi\n", realPart, imaginaryPart);
    }

    return 0;
}

수학 라이브러리와 함께 프로그램을 컴파일합니다.

gcc quadratic_solver.c -o quadratic_solver -lm

다양한 시나리오로 프로그램을 실행합니다.

./quadratic_solver

예시 출력 (두 실수 근):

계수 a를 입력하세요: 1
계수 b를 입력하세요: -5
계수 c를 입력하세요: 6
서로 다른 두 실수 근:
근 1 = 3.00
근 2 = 2.00

예시 출력 (하나의 실수 근):

계수 a를 입력하세요: 1
계수 b를 입력하세요: -2
계수 c를 입력하세요: 1
중복되는 하나의 실수 근:
근 = 1.00

예시 출력 (복소수 근):

계수 a를 입력하세요: 1
계수 b를 입력하세요: 2
계수 c를 입력하세요: 5
복소수 근:
근 1 = -1.00 + 2.00i
근 2 = -1.00 - 2.00i

코드의 주요 내용:

  • 이차 공식을 사용하여 근을 계산합니다.
  • 판별식을 확인하여 근의 유형을 결정합니다.
  • 두 실수 근, 하나의 실수 근, 복소수 근의 세 가지 시나리오를 처리합니다.
  • math.h 라이브러리의 sqrt() 함수를 사용합니다.
  • 수학 라이브러리를 연결하기 위해 -lm 플래그로 컴파일합니다.

실수 또는 복소수 해 출력

이 단계에서는 이차 방정식 해결 프로그램을 개선하여 더 자세한 출력을 제공하고 개선된 서식으로 서로 다른 해의 유형을 처리합니다.

기존 파일을 열고 코드를 업데이트합니다.

cd ~/project
nano quadratic_solver.c

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

#include <stdio.h>
#include <math.h>

void printQuadraticSolutions(double a, double b, double c) {
    double discriminant = b * b - 4 * a * c;

    printf("이차 방정식: %.2fx² + %.2fx + %.2f = 0\n", a, b, c);
    printf("판별식: %.2f\n", discriminant);

    if (discriminant > 0) {
        double root1 = (-b + sqrt(discriminant)) / (2 * a);
        double root2 = (-b - sqrt(discriminant)) / (2 * a);

        printf("해의 유형: 서로 다른 두 실수 근\n");
        printf("근 1: %.2f\n", root1);
        printf("근 2: %.2f\n", root2);
    } else if (discriminant == 0) {
        double root = -b / (2 * a);

        printf("해의 유형: 중복되는 하나의 실수 근\n");
        printf("근: %.2f\n", root);
    } else {
        double realPart = -b / (2 * a);
        double imaginaryPart = sqrt(-discriminant) / (2 * a);

        printf("해의 유형: 복소수 켤레 근\n");
        printf("근 1: %.2f + %.2fi\n", realPart, imaginaryPart);
        printf("근 2: %.2f - %.2fi\n", realPart, imaginaryPart);
    }
}

int main() {
    double a, b, c;

    printf("이차 방정식 해결기\n");
    printf("--------------------\n");

    printf("계수 a 를 입력하세요: ");
    scanf("%lf", &a);

    printf("계수 b 를 입력하세요: ");
    scanf("%lf", &b);

    printf("계수 c 를 입력하세요: ");
    scanf("%lf", &c);

    printf("\n");
    printQuadraticSolutions(a, b, c);

    return 0;
}

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

gcc quadratic_solver.c -o quadratic_solver -lm

다양한 시나리오로 프로그램을 실행합니다.

./quadratic_solver

예시 출력 (두 실수 근):

이차 방정식 해결기
--------------------
계수 a를 입력하세요: 1
계수 b를 입력하세요: -5
계수 c를 입력하세요: 6

이차 방정식: 1.00x² + -5.00x + 6.00 = 0
판별식: 1.00
해의 유형: 서로 다른 두 실수 근
근 1: 3.00
근 2: 2.00

(나머지 예시 출력은 생략)

주요 개선 사항:

  • 코드 구성을 개선하기 위해 별도의 함수 printQuadraticSolutions()를 만들었습니다.
  • 해의 유형과 방정식 세부 정보가 포함된 더욱 설명적인 출력을 추가했습니다.
  • 이전 단계의 근 계산 논리를 유지했습니다.
  • 제목과 명확한 서식을 사용하여 사용자 인터페이스를 개선했습니다.

요약

이 실습에서는 C 언어로 이차 방정식의 입력 값을 읽고, 판별식을 계산하며, 이차 공식을 사용하여 실수 또는 복소수 근을 결정하는 방법을 배웁니다. 프로그램은 사용자에게 계수 a, b, c 를 입력하도록 요청하고, 판별식을 계산하여 근의 성질을 결정합니다. 마지막으로 프로그램은 실수 또는 복소수 해를 출력합니다.

이 실습에서 다루는 주요 단계는 계수에 대한 사용자 입력을 읽고, 판별식을 계산하고, 이차 공식을 적용하여 근을 찾는 것입니다. 프로그램은 또한 입력 계수를 확인하고 계산된 해를 제공합니다.