1. kg과 cm변수에는 65와 185가 들어있습니다. 이 값을 출력하려면 printf ("%d %d\n", kg, cm); 라고 하면 됩니다. scanf() 함수와 형지정 문자열 사용방식이 다르죠? scanf ("%d %d", kg, cm); 라고 한 것은 scanf() 함수가 kg변수와 cm변수의 내용을 변경할 필요가 있기 때문입니다.
변수라고 하는 것은 세가지 다른 개념을 하나로 묶어 부릅니다. kg이나 cm같은 변수의 이름이 우선 눈에 띄네요. 그리고 65와 185같은 변수의 값이 있겠고요... 그 변수의 값이 어딘가 저장될테니 그 저장되는 공간의 주소가 있습니다.
scanf() 함수는 그 저장되는 공간에 실제로 어떤 값을 기록해야 하니까 &kg 이나 &cm 처럼 그 공간의 주소를 인자로 줘야 합니다. printf() 함수는 kg이나 cm에 값을 복사해서 써도 상관 없으니 그냥 kg이나 cm라고 씁니다.
보다 자세한 사항은 call by reference 와 call by value 항목을 알아보세요.
2. 65를 185로 나누면 얼마가 될까요? 답은 0 입니다. 0에 185를 곱하면 얼마가 될까요? 역시 0 입니다. 그래서 BML변수에는 0.0 이 들어갑니다. BML = kg / cm*cm; 대신 BML = (double)kg / cm*cm; 또는 BML = 1.0 * kg / cm*cm; 라고 했다면 BML변수에 65.0이 들어있을 것 입니다.
3. BML 변수에 들어가는 값이 의도와 다르죠? 아마도 이것을 의도했을 것 같네요. BML = (double)kg / (cm*cm);
4. 그런데, 이 값을 연산한 후 20.0과 25.0과 비교하려 합니다. 단위가 다릅니다. BMI 공식은 미터단위입니다. 받은 값은 센티미터입니다. 미터로 변환해줘야겠네요. 그럴 필요 없이 BML = 10000.0 * kg / (cm * cm); 라고 해줘도 됩니다. 간단한 수학이죠.
5. 주석 처리한 조건문이 있는데... (20.0 <= BML <= 25.0) 조건을 한번에 처리할만큼 컴퓨터가 똑똑하지 않습니다. ((20.0 <= BML) && (BML <= 25.0)) 로 나눠줘야 합니다.