본문 바로가기
C and C++/C and C++ Examples

[C Examples/Q&A] 체질량 지수(BMI) 계산하는 예제코드: if, else if, &&

by Henry Cho 2023. 2. 7.
728x90

체질량 지수(BMI) 계산하는 예제코드: if, else if, &&

포스트 난이도: HOO_Junior


# Example code 1

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int bmi, height, weight;

    printf("Enter the weight: ");
    scanf("%d",&weight);

    printf("Enter the height: ");
    scanf("%d", &height);


    bmi= (703*weight)/(height*height);

    if(bmi< 18.5)
    printf("Underweight");

    if(18.5 <bmi< 24.9)
    printf("Normal");

    if(25.0 <bmi< 29.9)
    printf("Overweight");

    if(30.0<= bmi)
    printf("Obese");


    return 0;
}

Enter the weight: 300
Enter the height: 70
NormalOverweightObese

위에 나와있는 브로의 예제코드를 살펴보면 에러가 없지만 출력된 값을 보면 문제가 있음을 알 수 있다. 우선 if문을 사용했음에도 조건식이 제대로 프로세싱이 되지 않아서 결과가 모두 산출된다. 코드를 몰라서 하는 실수보다는 사실상 프로그래밍 언어를 잘 알기에 하는 실수 중에 하나이다. 바로 And와 Or를 조건식에 넣어줘야 한다는 것이다. C를 사용할 때에는 &&와 || 조건식을 잊지 말도록 하자. 글쓴이도 파이썬 기반으로 프로젝트를 하다가 갑자기 C 언어를 보고선 뭐가 문제인지 답답해하다가 순간 깨닫는 부분이기도 하다.

 

사실 이 부분만 수정해 줘도 원하는 값이 출력이 되지만 if문도 수정해 주는 것이 좋다. if문을 여러 번 사용하는 것보단 else if문을 사용하는 것이 좋다. 또한 몸무게와 키는 소수점까지 표현이 되기 때문에 int보다는 float data type을 사용해야 한다. 데이터 타입이 바뀌면 입력받는 데이터 타입도 %f로 바꿔줘야 한다.


# Example code 2

 

#include <stdio.h>
#include <stdlib.h>

int main()
{
    float bmiWeight, bmiHeight, bmi, height, weight;

    printf("Enter the weight: ");
    scanf("%f",&weight);

    printf("Enter the height: ");
    scanf("%f", &height);
    
    bmiWeight=(703*weight);
    bmiHeight=(height*height);
    bmi= bmiWeight/bmiHeight;

    if (bmi < 18.5){
        printf("Underweight\n");
    }
    else if (18.5 <= bmi <= 24.9){
        printf("Normal\n");
    }
    else if(25.0 <= bmi <= 29.9){
        printf("Overweight\n");
    }
    else if(30.0 <= bmi){
        printf("Obese\n");
    }
    else if{
        printf("Please type the number.");
    }


    return 0;
}

main.c: In function ‘main’:
main.c:30:12: error: expected ‘(’ before ‘{’ token
   30 |     else if{
      |            ^
      |            (

이 예제코드의 경우에는 두가지 문제를 확인할 수 있다. 첫 번째로는 위와 마찬가지로 And와 Or를 사용하지 않아서 else if문에서 에러가 발생할 것이다. 예를 들면 obese가 산출되어야 하는데 지속적으로 normal만 출력되는 if문 알고리즘 문제가 발생한다.

두 번째로는 마지막에 else를 사용하지 않고 else if문을 사용하고자 한다면 조건식을 넣어줘야 한다는 것이다. else는 조건식이 별도로 필요하지 않지만 else if문은 if문과 같이 조건식이 필요하다.


# Final code(Answer)

 

#include <stdio.h>
#include <stdlib.h>

int main()
{
    float bmiWeight, bmiHeight, bmi, height, weight;

    printf("Enter the weight: ");
    scanf("%f",&weight);

    printf("Enter the height: ");
    scanf("%f", &height);
    
    bmiWeight=(703*weight);
    bmiHeight=(height*height);
    bmi= bmiWeight/bmiHeight;

    if (bmi < 18.5){
        printf("Underweight\n");
    }
    else if (18.5 <= bmi && bmi <= 24.9){
        printf("Normal\n");
    }
    else if(25.0 <= bmi && bmi <= 29.9){
        printf("Overweight\n");
    }
    else if(30.0 <= bmi){
        printf("Obese\n");
    }
    else{
        printf("Please type the number.");
    }
    printf("Posted by HOO.");
    return 0;
}

Enter the weight: 300
Enter the height: 70
Obese
Posted by HOO.

위의 마지막 예제코드를 사용하면 원하는 결과를 산출할 수 있다. 조금 변형을 해보자면 else if문을 전부 사용하지 않고 하나만 사용하고 nested if문을 사용하는 방법도 있다.


 

728x90

댓글