문제 9번 관련 공부 도중 궁금한 내용이 있어 질문 드립니다.
문제에서는 for 문() 작성 후 numAry[]를 더했는데, 제가 작성한 코드처럼
#include <stdio.h>
int main(void) {
int numary[] = { 0,0,0,0,3 };
int i, j;
for (j = 4; j >= 0; --j)
for (i = 4; i > j; --i, numary[j] += numary[i]);
for (j = 0; j < 5; ++j)
printf("%d", numary[j]);
return 0;
}
for문 () 안에 numAry[]를 더하면 결과가 원래 값인 0 0 0 0 3 이 나오는 걸 확인할 수 있었습니다. 책의 문제와 제가 작성한 코드의 차이점을 책 해설의 디버깅과 같이 보여주시면 감사하겠습니다!
안녕하세요 길벗수험서 운영팀입니다.
for(i) 부분만 풀어보면 쉽게 나오는 문제입니다.
for(①; ②; ③)
④;
위의 for문이 5회 수행된다고 가정할 때,
1회 : ①, ②(조건 참), ④
2회 : ③, ②(조건 참), ④
3회 : ③, ②(조건 참), ④
4회 : ③, ②(조건 참), ④
5회 : ③, ②(조건 참), ④
종료 : ③, ②(조건 거짓) <탈출>
와 같이 수행되며
증가식이 2개가 된다면 ③이 2개로 나눠질 뿐 수행 순서는 같습니다.
그럼, 본래 문제에서는 numAry[j] += numAry[i]; 가 처음 수행될 때 i는 증가하지 않은 상태가 되겠죠. 즉, numAry[4]부터 더하기 시작한다는 의미입니다.
반면, 회원님과 같이 증가식에 넣어버리게 되면, 앞의 --i가 무조건 먼저 실행되게 됩니다.
numAry[3]부터 더해지기 시작한다는 의미입니다.
numAry[3]에 값이 처음 더해지는 값이 본래 numAry[4]여야 하는데 자기 수부터 더하기 시작하니 0=0+0이 성립되어 아무 값의 변화도 일어나지 않게 되죠.
numAry[2]~numAry[0]도 마찬가지 입니다.
증가식으로 동일한 코드를 완성하고 싶으시다면,
for (i = 4; i > j; --i, numary[j] += numary[i]); 를
for (i = 4; i > j; numary[j] += numary[i], --i); 로 바꿔 수행해보세요.
정상적으로 결과가 나타남을 확인하실 수 있습니다.
행복한 하루되세요 :)
-
관리자2021-08-12 13:30:38
안녕하세요 길벗수험서 운영팀입니다.
for(i) 부분만 풀어보면 쉽게 나오는 문제입니다.
for(①; ②; ③)
④;
위의 for문이 5회 수행된다고 가정할 때,
1회 : ①, ②(조건 참), ④
2회 : ③, ②(조건 참), ④
3회 : ③, ②(조건 참), ④
4회 : ③, ②(조건 참), ④
5회 : ③, ②(조건 참), ④
종료 : ③, ②(조건 거짓) <탈출>
와 같이 수행되며
증가식이 2개가 된다면 ③이 2개로 나눠질 뿐 수행 순서는 같습니다.
그럼, 본래 문제에서는 numAry[j] += numAry[i]; 가 처음 수행될 때 i는 증가하지 않은 상태가 되겠죠. 즉, numAry[4]부터 더하기 시작한다는 의미입니다.
반면, 회원님과 같이 증가식에 넣어버리게 되면, 앞의 --i가 무조건 먼저 실행되게 됩니다.
numAry[3]부터 더해지기 시작한다는 의미입니다.
numAry[3]에 값이 처음 더해지는 값이 본래 numAry[4]여야 하는데 자기 수부터 더하기 시작하니 0=0+0이 성립되어 아무 값의 변화도 일어나지 않게 되죠.
numAry[2]~numAry[0]도 마찬가지 입니다.
증가식으로 동일한 코드를 완성하고 싶으시다면,
for (i = 4; i > j; --i, numary[j] += numary[i]); 를
for (i = 4; i > j; numary[j] += numary[i], --i); 로 바꿔 수행해보세요.
정상적으로 결과가 나타남을 확인하실 수 있습니다.
행복한 하루되세요 :)