게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
저기 생초보 c언어인데 이런 질문도 받아주시나여? ㅜㅜ
게시물ID : programmer_21468짧은주소 복사하기
작성자 : 010705
추천 : 0
조회수 : 910회
댓글수 : 11개
등록시간 : 2017/10/03 20:26:11
옵션
  • 본인삭제금지
#include
int main(void)
{
 int kg ;
 int cm ;
 double BML;
 
 
 scanf("%d %d", &kg ,&cm);
 BML = kg / cm*cm;
 printf("%.1lf", &BML);
 /*if (20.0 <= BML <= 25.0)
 {
  printf("표준");
 }
 else
 {
  printf("체중관리가 필요합니다");
 }*/
 
 return 0;
 
}
여기서 자꾸 BML 값이 안들어가는데 왜그러는지 아시나요?ㅠㅠ
 
전체 추천리스트 보기
2017-10-03 20:26:36추천 0

디버그??했는데 값이 안들어가는거같아요;;
댓글 0개 ▲
2017-10-03 20:32:01추천 1
답을 해드리고 싶지만 질문글은 본삭금 궈궈!
댓글 0개 ▲
2017-10-03 22:52:49추천 1
세가지 문제가 있습니다. 디버그 까지도 필요 없어요.

1. kg과 cm변수에는 값이 들어갔겠죠? (위의 그림에서 65와 185가 들어있군요) 출력해보세요.
2. 연산 결과의 형변환 규칙에 대해 알아보세요.
3. 연산의 우선순위에 대해 알아보세요.

그리고... 글 지우지 마세요. 위에 본삭금을 요구하는 글... 답변 달다보면 충분히 이해하게 됩니다.
댓글 4개 ▲
2017-10-03 22:58:00추천 0
참... 이건 프로그래밍과 관련 없지만, bmi 지수를 구하는 식에서 단위도 점검해보세요.
2017-10-03 23:24:16추천 0
본삭했어요! 저이제여기다질문많이올릴거같은데
많이도와주세요 사부!
2017-10-04 00:04:02추천 1
자... 그럼...

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)) 로 나눠줘야 합니다.

C언어는 다룬지 오래되서... 기억나는대로 썼습니다. (조금은 틀릴지도...)
2017-10-04 00:07:54추천 1
역시... 오타가 있네요. 위 1번에서 예제는
scanf ("%d %d", &kg, &cm);
이였습니다.
2017-10-04 19:12:27추천 1
scanf("%d %d", &kg ,&cm);
BML = ((double)kg) / ((double)cm*cm*0.0001);
printf("%.1lf", &BML);
댓글 2개 ▲
2017-10-05 08:43:09추천 1
printf("%.1lf", BML);
2017-10-05 15:47:49추천 0
모르는 사람이 봐도 엄청 자세히 알려주신다는건 알겠네요..ㄷㄷ
2017-10-05 18:17:04추천 1
엄밀히 말하자면...
BML = ((double)kg) / ((((double)cm) / 100.0) * (((double)cm) / 100.0));
입니다. 그런데, 단항연산자는 이항연산자보다 우선순위가 높습니다. 그래서...
BML = (double)kg / (((double)cm / 100.0) * ((double)cm / 100.0));

숫자 부분을 미리 계산하면...
BML = 10000.0 * (double)kg / (double)(cm * cm);
실수와 정수 연산의 묵시적 형변환 규칙에 따라 이것은 아래와 같습니다.

BML = 10000.0 * kg / (cm * cm);
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호