책 내용 질문하기
정보처리기능사 실기 202페이지 문제 9번 관련해 질문합니다.
도서
2021 시나공 정보처리기능사 실기
페이지
202
조회수
342
작성일
2021-08-10
작성자
탈퇴*원
첨부파일

문제 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 이 나오는 걸 확인할 수 있었습니다. 책의 문제와 제가 작성한 코드의 차이점을 책 해설의 디버깅과 같이 보여주시면 감사하겠습니다!

답변
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); 로 바꿔 수행해보세요. 

 

정상적으로 결과가 나타남을 확인하실 수 있습니다.

 

행복한 하루되세요 :)

  • 관리자
    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); 로 바꿔 수행해보세요. 

     

    정상적으로 결과가 나타남을 확인하실 수 있습니다.

     

    행복한 하루되세요 :)

· 5MB 이하의 zip, 문서, 이미지 파일만 가능합니다.
· 폭언, 욕설, 비방 등은 관리자에 의해 경고없이 삭제됩니다.