문제 28번. 다음 C언어로 구현된 프로그램을 분석하여 그 실행 결과를 쓰시오.
switch문인데, case에 해당되는게 없어 default로 왔습니다.
p=1;
for(int i=0; i<5; i++, p*=1);
printf("%.3f",p);
위와 같은 상황에서 i가 0이고 5보다 작으니까 i++한다음 p*=i을 한다고 생각하면
i++는 후치연산자니까 p*=0이라고 생각하고 하게 되면 0이랑 어떤 수를 곱해도 0이 되서
결국 답이 0된다고 생각했는데 해답을 보니 제가 생각한답이랑 완전 달랐습니다.
문제풀때 위와같은 경우와 맞닥뜨린 경우가 별로 없어 이해가 잘안됩니다.
i++는 해당 라인의 계산이 끝나야 증감되는게 아닌가요?
++i일때와 i++일때 달라지기도 하나요?
안녕하세요 길벗수험서 운영팀입니다.
전치/후치 연산자는 하나의 식 내에서만 전후의 의미가 있습니다.
(라인x 식o)
단순히 i++;와 ++i;는 i=i+1;과 다름이 없죠.
for문의 증가식에 써져있는 i++, p*=i도 마찬가지입니다.
쉼표(,)는 식을 구분하는 연산자로, i++이라는 식이 완료된 후, p*=i를 수행하게 됩니다.
즉, p*=i가 처음 수행될 때 i는 이미 증가한 값 1의 값을 갖고 있게 되는 것이죠.
행복한 하루되세요 :)
-
관리자2020-07-06 15:07:32
안녕하세요 길벗수험서 운영팀입니다.
전치/후치 연산자는 하나의 식 내에서만 전후의 의미가 있습니다.
(라인x 식o)
단순히 i++;와 ++i;는 i=i+1;과 다름이 없죠.
for문의 증가식에 써져있는 i++, p*=i도 마찬가지입니다.
쉼표(,)는 식을 구분하는 연산자로, i++이라는 식이 완료된 후, p*=i를 수행하게 됩니다.
즉, p*=i가 처음 수행될 때 i는 이미 증가한 값 1의 값을 갖고 있게 되는 것이죠.
행복한 하루되세요 :)