반응형
문제).
아래의 출력 예와 같이 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();
}
}
반응형
'C언어 문제 > 수학 문제' 카테고리의 다른 글
연립방정식 x, y의 값을 구하시오. (0) | 2019.12.18 |
---|---|
소수 여부 판단하는 알고리즘 (제곱근 범위 나누기법) (0) | 2019.12.04 |
입력한 자연수보다 작은 모든 소수를 출력하기 (0) | 2019.11.19 |
최대 공약수, 최소 공배수 구하기 (0) | 2019.11.19 |
주사위를 n번 던져 무중복 합이 k인 경우 나열하기 (0) | 2019.11.04 |