C 과제: Unit Conversion

2 분 소요

질문

내용

온도를 입력받아 섭씨 온도는 화씨 온도로, 화씨 온도는 섭씨 온도로 변환하는 프로그램을 작성하시오.

“27 C” 또는 “27 F”처럼 섭씨인지 화씨인지 구분할 수 있는 문자를 함께 입력받는다.

함께 입력된 문자가 ‘C’이면 섭씨 온도이므로 화씨 온도를 구해서 출력하고, 입력된 문자가 ‘F’면 화씨 온도이므로 섭씨 온도를 구해서 출력한다.

공식

섭씨 -> 화씨

\[\frac{9}{5}C+32=F\]

화씨 -> 섭씨

\[(F-32)\frac{5}{9}=C\]

실행 결과

온도? 27 C
27.00 C == 80.60 F

답변

내용

이 문제는 공식이 주어져 있어 쉽게 풀이가 가능하다.

먼저 printf, scanf 함수 사용에 필요한 헤더파일(stdio.h)을 선언해준 후, 사용자에게 입력을 요구하는, 실행 결과처럼 출력하는 출력문을 main 함수 내에 작성해주자.

#include <stdio.h>

int main(void) {
    printf("온도? ");

    return 0;
}

출력문을 구성해주었으니 입력문을 구성해줄 차례인데 실행 결과부터 살펴보면, 사용자로부터 입력을 받을 때 온도와 그것의 단위 사이가 한 칸 떨어져 있는 것을 확인할 수 있다.

즉, 구분자(Separator) 역할을 하는 공백 문자 하나를 서식문자 사이에 삽입하여 온도와 단위의 입력을 구분해준 것이다.

또한, 정수 값의 온도 뿐 아니라 소수점이 있는 실수 값의 온도도 사용자가 입력할 수 있기 때문에 온도 값을 저장하는 변수를 선언할 때 이것의 자료형을 실수형으로 작성해주자. (이때 필자는 실수형에서 보편적으로 많이 사용되는 double형을 선택하였다.)

물론 단위도 사용자로부터 입력받아야 하므로 문자형 변수도 선언해주자.

#include <stdio.h>

int main(void) {
    double temp;        // 사용자로부터 온도를 입력받아 저장하는 변수
    char unit;          // 사용자로부터 단위를 입력받아 저장하는 변수

    printf("온도? ");
    scanf("%lf %c", &temp, &unit);      // 사용자로부터 온도와 단위를 입력받음, 온도와 단위를 구분짓는 구분자(Separator)는 하나의 공백이다.

    return 0;
}

이제 입력한 단위에 대해 프로그램의 흐름을 분기시켜주면 된다.

즉, unit에 저장된 값이 C인 경우나 F인 경우, 또는 그 외의 경우에 대한 조건문을 작성해주자.

그러므로 전체적인 틀은 다음과 같다.

if(unit == 'C') {       // unit의 값이 C라면

}else if(unit == 'F') {         // unit의 값이 F라면

}else {     // 그 외

}

각 조건 내에 적절한 구문을 작성해주기 전에 실행 결과를 다시 살펴보면,

27.00 C == 80.60 F

사용자로부터 입력받은 온도값과 변환된 온도 값들이 모두 소수점 둘째자리까지 표현되어 있음을 확인할 수 있다.

그러므로 printf 함수의 첫 번째 인자 내에 실수형 서식문자 f를 다음처럼 작성해주자.

%.2f

이는 소수점 둘째자리까지의 실수 출력을 의미한다.

이러한 정보들을 종합하여 각 조건 내에 실행될 적절한 구문을 작성해주면 다음과 같다.

if(unit == 'C')
    printf("%.2f %c == %.2f %c\n", temp, unit, (temp*9/5)+32, 'F');
else if(unit == 'F')
    printf("%.2f %c == %.2f %c\n", temp, unit, (temp-32)*5/9, 'C');
else 
    printf("잘못된 문자 입력\n");

위 코드에서 unit이 C인 경우의 printf를 살펴보면,

printf("%.2f %c == %.2f %c\n", temp, unit, (temp*9/5)+32, 'F');

두 번째 인자와 세 번째 인자에는 온도 값을 저장하는 변수 temp와 단위 값을 저장하는 변수 unit이 위치하고, 네 번째와 다섯 번째 인자에는 섭씨 온도를 화씨 온도로 변환하는 식인 (temp*9/5)+32와 문자 ‘F’가 위치하고 있다.

즉, 두 번째 인자와 세 번째 인자는 첫 번째 인자인 문자열 내부의 서식문자 %.2f와 %c에 각각 대응되고 네 번째 인자와 다섯 번째 인자는 첫 번째 인자인 문자열 내부의 == 이후(오른쪽)의 %.2f와 %c에 각각 대응된다.

그러므로 실행 결과에서처럼 사용자가 온도로 27을 입력하고, 단위로 문자 ‘C’를 입력했다면, 다음과 같이 출력될 것이다.

27.00 C == 80.60 F

unit이 F일 때에도 unit이 C일 때와 동일한 방식으로 이해하면 되겠다.

마지막으로 전체 코드를 보이면서 이번 포스팅을 마무리 짓겠다.

전체 코드

#include <stdio.h>

int main(void) {
    double temp; 
    char unit;   

    printf("온도? ");
    scanf("%lf %c", &temp, &unit);

    if(unit == 'C')
        printf("%.2f %c == %.2f %c\n", temp, unit, (temp*9/5)+32, 'F');
    else if(unit == 'F')
        printf("%.2f %c == %.2f %c\n", temp, unit, (temp-32)*5/9, 'C');
    else         
        printf("잘못된 문자 입력\n");
    
    return 0;
}

댓글남기기