모두의 코드 커뮤니티

작은 차이이지만 궁금해서 여쭤봐요

요즘 씨언어 너무 재밌어서 열심히 공부중인데. c언어 for while 빙글뱅글 공부하다가 궁금한게 있어서요.
#include <stdio.h>
int main()
{
int i,subject,score;
double sum=0;
printf(“총몇개의 과목을 들으십니까?”);
scanf("%d",&subject);
printf(“각 과목의 점수를 입력해주세요\n”);
for(i=1;i<=subject;i++)
{
printf(“과목%d:”,i);
scanf("%d",&score);
sum=sum+score;

}
printf("과목의 총 균은 %.2f이다 ",sum/subject);
return 0;
}

로 작성해서 얻는 답은 91.00이구
#include <stdio.h>
int main()
{
int i,subject,score;
double sum=0;
printf(“총몇개의 과목을 들으십니까?”);
scanf("%d",&subject);
printf(“각 과목의 점수를 입력해주세요\n”);
for(i=1;i<=subject;i++)
{
printf(“과목%d:”,i);
scanf("%d",&score);
sum=sum+score/subject;

}
printf("과목의 총 균은 %.2f이다 ",sum);
return 0;
}

여기서 얻는 답은 90.00인데 겨우 1이 차이나는거지만 왜 괄호 안에 든거랑 밖에 든거랑 차이가 나는지 이해가 안 가서요 .(에러라면 겨우 1이 차이나는것도 이해가 안 가요)
이런 부분은 그냥 외워야 하나요 ?
아 참고로 subject은 4이구 점수는 각각 100,99,89,76 이에요.
읽어주셔서 감사해요 !

1 Like

두 번째의 경우 sum=sum+score/subject; 을 하셨는데 이 경우데 sum + score/subject 의 결과가 int 로 바뀌어서 sum 에 들어갑니다. double 에서 int 로 캐스팅 될 때의 주의할 점은 변환 시에 소수점을 버리게 된다는 점이지요.

따라서 첫 번째의 경우 (100 + 99 + 89 + 76) 을 먼저 한 후에 4 로 나누어서 91 이 되는데 두 번째의 경우에는

처음에는 sum = 25
다음에는 25 + 99 / 4 = 49
다음에는 49 + 89 / 4 = 71
그리고 마지막에 71 + 76 / 4 = 90

이 됩니다.

이해했어요 정말 감사합니다. !!