티스토리 뷰

 

 

 

 

 

문제

화씨온도를 섭씨온도로, 섭씨온도를 화씨온도로 바꾸려고 합니다. 두 온도 사이의 환산 공식은 다음과 같습니다

 

환산공식

  • 화씨온도에서 섭씨온도로 환산 : (화씨온도 - 32) / 1.8 = 섭씨온도
  • 섭씨온도에서 화씨온도로 환산 : (섭씨온도 * 1.8) + 32 = 화씨온도

현재 온도 value와 현재 단위 unit이 매개변수로 주어질 때, 환산한 온도의 정수 부분을 return 하도록 solution함수를 작성했습니다.

그러나, 코드 일부분이 잘못되어있기 때문에, 몇몇 입력에 대해서는 올바르게 동작하지 않습니다.

주어진 코드에서 한 줄 만 변경해서 모든 입력에 대해 올바르게 동작하도록 수정하세요.

 

 

 

 

 


 

 

 

 

 

주어진 코드

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
int solution(int value, char* unit) {
    int converted = 0;
    if (unit[0] == 'C')
        converted = value * 1.8 + 32;
    if (unit[0] == 'F')
        converted = value - 32 / 1.8;
    return converted;
}
int main() {
    int value = 527;
    char* unit = "C";
    int ret = solution(value, unit);

    printf("solution 함수의 반환 값은 %d 입니다.\n", ret);

    value = 980;
    unit = "F";
    ret = solution(value, unit);

    printf("solution 함수의 반환 값은 %d 입니다.\n", ret);
}

 

 

결과(오류) => 화씨 908도는 섭씨 526도이다.

value unit return
527 "C" 980
980 "F" 962

 

 

 

 


 

 

 

 

코드분석(오류해결)

단계 과정
main 변환할 온도가 담겨있는 변수 value와 그것의 방식이 무엇인지가 담겨있는 변수 unit를 선언한 후 solution함수를 호출한다.
solution 변환한 값을 넣을 변수 converted를 선언한다.
방식(unit)이 섭씨(C)일때,
이 값은 화씨(F)로 변환해야 하기 때문에 변환식 converted = value * 1.8 + 32;를 진행한다.
방식(unit)이 화씨(F)일때,
이 값은 섭씨(C)로 변환해야 하기 때문에 변환식 converted = value - 32 / 1.8;를 진행한다.
오류 화씨 -> 섭씨로 변환하는 식에서 converted = value - 32 / 1.8;를 그대로 진행하면
연산자 우선순위에 의하여 32/1.8이 진행되고 난 후에 value와 뺄셈식이 적용된다.
따라서 비교적 우선순위가 낮은 -식에 괄호를 사용해야 한다.
solution 변환값 converted를 반환한다. 
main 결과를 출력한 후 프로그램을 종료한다.

 

 

 

 

 

 

 

 

 

결과코드(최종)

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
int solution(int value, char* unit) {
    int converted = 0;
    if (unit[0] == 'C')
        converted = value * 1.8 + 32;
    if (unit[0] == 'F')
        converted = (value - 32) / 1.8;
    return converted;
}
int main() {
    int value = 527;
    char* unit = "C";
    int ret = solution(value, unit);

    printf("solution 함수의 반환 값은 %d 입니다.\n", ret);

    value = 980;
    unit = "F";
    ret = solution(value, unit);

    printf("solution 함수의 반환 값은 %d 입니다.\n", ret);
}

 

 

 

결과

value unit return
527 "C" 980
980 "F" 526

 

 

 

 

 

 

 

 

 

 

 

 

GroomEdu

 

goorm

구름은 클라우드 기술을 이용하여 누구나 코딩을 배우고, 실력을 평가하고, 소프트웨어를 개발할 수 있는 클라우드 소프트웨어 생태계입니다.

www.goorm.io

 

 

 

 

댓글