본문 바로가기

문제로 함께하는 C언어

문제5. 온도 변환표 출력

문제:

다음은 화씨온도를 섭씨온도로 변환하는 프로그램이다.

다음 프로그램을 실행시켜보고, 발생하는 문제와 원인을 설명하고 소스를 수정하시오.


단, 공식은 다음을 참고하라.


소스:


#include <stdio.h>
int main(void){
 double f_temp;
 double c_temp;
 printf("Fahrenheit(F) : ");
 scanf(" %lf", &f_temp);
 c_temp = 5 / 9 * (f_temp - 32);
 printf("Celsius(C) : %lf", c_temp);
 return 0;
}


설명:


문제: 어느 수에게나 0을 출력한다.


원인: c_temp에 넣는 계산식을 살펴보면, 5 / 9가 원인임을 알 수 있다.

정수 끼리의 연산이기 때문에 해당 연산 결과는 0이 되는 것이다. 그러므로 어떠한 값을 받아도 결과값은 0이 된다.

둘 중의 하나를 실수형으로 바꾸어 계산하여 문제를 시정할 수 있다.


주의:

정수 연산 정수 → 정수

정수(실수로 승격) 연산 실수 → 실수

실수 연산 실수 → 실수


수정 소스:


#include <stdio.h>
int main(void){
 double f_temp;
 double c_temp;
 printf("Fahrenheit(F) : ");
 scanf(" %lf", &f_temp);
 c_temp = 5.0 / 9.0 * (f_temp - 32);
 printf("Celsius(C) : %lf", c_temp);
 return 0;
}


처음 소스 화면:




수정 소스 화면: