체질량 지수(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문을 사용하는 방법도 있다.
'C and C++ > C and C++ Examples' 카테고리의 다른 글
[C Examples] 7 Digit ISSN, 8번째 숫자 산출하기 예제코드: if(), else(), %d (0) | 2023.02.15 |
---|---|
[C Examples] 달러를 동전으로 바꾸는 예제코드 (0) | 2023.02.08 |
[C Examples] Circle area, circumference of circle 계산기 (0) | 2023.01.31 |
[C Examples] 총 지불액 계산기(팁, 세금 포함): float, scanf, %.f (0) | 2023.01.30 |
[C Examples] 도시의 인구 수 예측하기, 예제코드: scanf(), putchar() (0) | 2023.01.30 |
댓글