반응형

문제).

아래의 출력 예와 같이 keyboard로 부터 2차 방정식의 a, b, c(입력조건: a, b, c는 실수이며, a는 0이 아닌 실수)를 입력받아, 이 방정식의 해를 구하여 소수 2자리까지 출력하는 프로그램을 작성하시오.(다, 입력이 조건에 맞지 않을 때는 조건에 맞는 입력이 들어올 때까지 지속적으로 입력받도록 하고, 4개 이상의 함수로 구성된 프로그램을 작성할 것)

f(x) = ax² + bx + c

 

 

입출력 예제1)

<<< 계수 a 입력: 0

>>> 입력오류!!!

<<< 계수 a 입력:

 

입출력 예제2)

<<< 계수 a 입력: 15.5
<<< 계수 b 입력: 3.8
<<< 계수 c 입력: 26.7

>>> 15.500x² + 3.800x + 26.700
>>> 허근1 = -0.123 + 1.307i
>>> 허근2 = -0.123 - 1.307i

계속하려면 아무키나 누르시오.

 

입출력 예제3)

<<< 계수 a 입력: 42.1
<<< 계수 b 입력: -2.0
<<< 계수 c 입력: -25.4

>>> 42.100x² + -2.000x + -25.400
>>> 실근1 = 0.801
>>> 실근2 = -0.753


계속하려면 아무키나 누르시오

 

입출력 예제4)

<<< 계수 a 입력: 1.0
<<< 계수 b 입력: 4.0
<<< 계수 c 입력: 4.0

>>> 1.000x² + 4.000x + 4.000
>>>  중근 = -2.000


계속하려면 아무키나 누르시오

 

답은 아래에... ↓

 

 


 

 

 

 

스스로 풀어보시고... ↓

 

 

 

 


 

 

 

 

 

아래 답과 비교해보세요. ↓

 

 

 

 

 

 


 

/*
이차방적식: f(x) = ax² + bx + c
근의 공식: D = b*b - 4ac
x1 = (-b + sqrt(b * b - 4 * a * c)) / (2 * a);
x2 = (b + sqrt(b * b - 4 * a * c)) / (2 * a);
*/

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

int input_data(double *a, double *b, double *c)
{
    printf("<<< 계수 a 입력: ");
    scanf("%lf", a);
    
    if(*a == 0) {
        return 0;
    }
    
    printf("<<< 계수 b 입력: ");
    scanf("%lf", b);
    
    printf("<<< 계수 c 입력: ");
    scanf("%lf", c);

    return 1;
}

void fx(double a, double b, double c)
{
    printf("\n>>> %.3lfx² + %.3lfx + %.3lf\n", a, b, c);
}

void calculate(double a, double b, double c)
{
    double D;
    double x1, x2;
    
    /* 2차 방정식의 판별식 */
    D = b * b - 4 * a *c;
        
    if(D == 0)     /* 중근이면 */
    {
        printf(">>>  중근 = %.3lf\n", -b / (2 * a));
    }
    else if(D < 0) /* 허근이면 */
    {
        printf(">>> 허근1 = %.3lf + %.3lfi\n", -b / (2 * a), sqrt(-D) / (2 * a));
        printf(">>> 허근2 = %.3lf - %.3lfi\n", -b / (2 * a), sqrt(-D) / (2 * a));
    } 
    else           /* 실근이면 */
    {
        printf(">>> 실근1 = %.3lf\n", -b / (2 * a) + sqrt(D) / (2 * a));
        printf(">>> 실근2 = %.3lf\n", -b / (2 * a) - sqrt(D) / (2 * a));
    }
}

void press_key(void)
{
    while(getchar() != '\n');
    
    printf("\n\n계속하려면 아무키나 누르시오. ");
    getch();
}

int main(int argc, char **argv)
{
    double a, b, c;
    
    while(1)
    {
        if(input_data(&a, &b, &c) == 0) {
            continue;
        }
        
        fx(a, b, c);
        
        calculate(a, b, c);
        
        press_key();
    }
}
반응형
블로그 이미지

자연&사람

행복한 개발자 programmer since 1995.

,