책 내용 질문하기
84쪽 3번문제 이해가 잘안됩니다.
도서
2017 시나공 정보처리기사 실기(산업기사 포함) 특별개정판
페이지
84
조회수
153
작성일
2017-04-05
작성자
탈퇴*원
첨부파일

#include

main()

{

int numAry[]={1,0,0,0,0,}'

int i, j ;

for ( j = 0 ; j < 5 ; j++)

for ( i = 0 ; i < j ; ++i )

numAry[j] += numAry[i]

for(j=0; j < 5; ++;)

printf("%d\n", numAry[j]);

}

여기에서 첫번째 for문은 2번째 for문을 j가 5보다 낮을때 loop하여라라는뜻입니다.

2번째 for문은 i가j보다 작을때 numAry[j]=numAry[j]+numAry[i]를 하여라 라는말입니다.

그렇다면 첫번째 j와i가 둘다 0일때에는 1번째 for문의 j의 값을 1올려줍니다.

그다음 j = 1 , i = 0 일때 조건에 참이되게되고 numAry[j]=numAry[j]+numAry[i]

를 수행합니다. 그렇담 numAry[j]에는 1이 저장되고 그다음 j=1,i=1 은 조건에 부적합하여 j값이 2가되고 i값은다시 0이됩니다 그럼 또 j=2,i=0일때 식은 numAry[j]=numAry[j]+numAry[i]?이니깐 2+0 으로인해 2가나오게됩니다. 여기까지 디버깅이 1 1 2 가되는건알꺼같은데 그다음 j=3이며 i가 0일때 numAry[j]=numAry[j]+numAry[i]?에서 numAry[j]=numAry[j]+numAry[i] //3+0 아닌가요? 그다음은 3+1 그다음은 3+2 잘이해가안됩니다. 책에는 어떤것을 몇번수행하라는데 그 어떤것이 이해가안되서요...

답변
2017-04-06 10:30:50

안녕하세요.

numAry에는 1, 0, 0, 0, 0 이 저장되어 있습니다.

numAry[0]에는 1이

numAry[1]에는 0이

numAry[2]에는 0이

numAry[3]에는 0이

numAry[4]에는 0이 저장되어 있는 것이죠.

바깥쪽 for문

j는 초기값 0을 가지고 종료값 j<5 조건에 만족하므로 안쪽 for문을 수행합니다.

안쪽 for문

i는 초기값 0을 가지고 종료값 i

다시

바깥쪽 for문

j는 증가값 ++j로 인해 1 증가되어 1이된 상태에서 종료값 j<5 조건에 만족하므로 안쪽 for문을 수행합니다.

안쪽 for문

i는 초기값 0을 가지고 종료값 i

numAry[J] += numAry[i];를 수행하여

numAry[1]에 numAry[0]의 값을 누적합니다. 그러면 아래와 같이 numAry[1]의 값이 변경됩니다.

numAry[0]에는 1

numAry[1]에는 1

numAry[2]에는 0

numAry[3]에는 0

numAry[4]에는 0이 저장되어 있습니다.

안쪽 for문

i는 증가값 ++i로 인해 1 증가되어 1이된 상태에서 종료값 i

다시

바깥쪽 for문

j는 증가값 ++j로 인해 1 증가되어 2가된 상태에서 종료값 j<5 조건에 만족하므로 안쪽 for문을 수행합니다.

안쪽 for문

i는 초기값 0을 가지고 종료값 i

numAry[J] += numAry[i];를 수행하여

numAry[2]에 numAry[0]의 값을 누적합니다. 그러면 아래와 같이 numAry[2]의 값이 변경됩니다.

numAry[0]에는 1

numAry[1]에는 1

numAry[2]에는 1

numAry[3]에는 0

numAry[4]에는 0이 저장되어 있습니다.

안쪽 for문

i는 증가값 ++i로 인해 1 증가되어 1이된 상태에서 종료값 i

numAry[J] += numAry[i];를 수행하여

numAry[2]에 numAry[1]의 값을 누적합니다. 그러면 아래와 같이 numAry[2]의 값이 변경됩니다.

numAry[0]에는 1

numAry[1]에는 1

numAry[2]에는 2

numAry[3]에는 0

numAry[4]에는 0이 저장되어 있습니다.

안쪽 for문

i는 증가값 ++i로 인해 1 증가되어 2가된 상태에서 종료값 i

위와 같은 과정으로 이후 과정을 계속해서 수행합니다.


즉 j가 3일 때

numAry[3]은 처음에 0이 었지만

i가 0일 때

numAry[0]의 값이 1이 누적되어 numAry[3]은 1이 됩니다.

이어서 i가 증가하여 1일 때

numAry[1]의 값이 1이 누적되어 numAry[3]은 2가 됩니다.

이어서 i가 증가하여 2일 때

numAry[2]의 값이 2가 누적되어 numAry[3]은 4가 됩니다.

이어서 i가 증가하여 3일 때 i

같은 원리로 j가 4일 때는

numAry[4]에 numAry[0]~numAry[3]까지의 값이 누적되어

i가 0일 때 numAry[4]는 1

i가 1일 때 numAry[4]는 2

i가 2일 때 numAry[4]는 4

i가 3일 때 numAry[4]는 8

이 됩니다.

그래서 결국 최종적으로 nuymAry 배열의 값은

1 1 2 4 8이 되므로 화면에는 한 줄씩 출력되어

1

1

2

4

8

이 된 것입니다

수행 과정을 469쪽 디비겅 표와 함께 이해하시면 쉽게 이해하실 수 있습니다.

오늘도 즐거운 하루 되세요.

  • *
    2017-04-06 10:30:50

    안녕하세요.

    numAry에는 1, 0, 0, 0, 0 이 저장되어 있습니다.

    numAry[0]에는 1이

    numAry[1]에는 0이

    numAry[2]에는 0이

    numAry[3]에는 0이

    numAry[4]에는 0이 저장되어 있는 것이죠.

    바깥쪽 for문

    j는 초기값 0을 가지고 종료값 j<5 조건에 만족하므로 안쪽 for문을 수행합니다.

    안쪽 for문

    i는 초기값 0을 가지고 종료값 i

    다시

    바깥쪽 for문

    j는 증가값 ++j로 인해 1 증가되어 1이된 상태에서 종료값 j<5 조건에 만족하므로 안쪽 for문을 수행합니다.

    안쪽 for문

    i는 초기값 0을 가지고 종료값 i

    numAry[J] += numAry[i];를 수행하여

    numAry[1]에 numAry[0]의 값을 누적합니다. 그러면 아래와 같이 numAry[1]의 값이 변경됩니다.

    numAry[0]에는 1

    numAry[1]에는 1

    numAry[2]에는 0

    numAry[3]에는 0

    numAry[4]에는 0이 저장되어 있습니다.

    안쪽 for문

    i는 증가값 ++i로 인해 1 증가되어 1이된 상태에서 종료값 i

    다시

    바깥쪽 for문

    j는 증가값 ++j로 인해 1 증가되어 2가된 상태에서 종료값 j<5 조건에 만족하므로 안쪽 for문을 수행합니다.

    안쪽 for문

    i는 초기값 0을 가지고 종료값 i

    numAry[J] += numAry[i];를 수행하여

    numAry[2]에 numAry[0]의 값을 누적합니다. 그러면 아래와 같이 numAry[2]의 값이 변경됩니다.

    numAry[0]에는 1

    numAry[1]에는 1

    numAry[2]에는 1

    numAry[3]에는 0

    numAry[4]에는 0이 저장되어 있습니다.

    안쪽 for문

    i는 증가값 ++i로 인해 1 증가되어 1이된 상태에서 종료값 i

    numAry[J] += numAry[i];를 수행하여

    numAry[2]에 numAry[1]의 값을 누적합니다. 그러면 아래와 같이 numAry[2]의 값이 변경됩니다.

    numAry[0]에는 1

    numAry[1]에는 1

    numAry[2]에는 2

    numAry[3]에는 0

    numAry[4]에는 0이 저장되어 있습니다.

    안쪽 for문

    i는 증가값 ++i로 인해 1 증가되어 2가된 상태에서 종료값 i

    위와 같은 과정으로 이후 과정을 계속해서 수행합니다.


    즉 j가 3일 때

    numAry[3]은 처음에 0이 었지만

    i가 0일 때

    numAry[0]의 값이 1이 누적되어 numAry[3]은 1이 됩니다.

    이어서 i가 증가하여 1일 때

    numAry[1]의 값이 1이 누적되어 numAry[3]은 2가 됩니다.

    이어서 i가 증가하여 2일 때

    numAry[2]의 값이 2가 누적되어 numAry[3]은 4가 됩니다.

    이어서 i가 증가하여 3일 때 i

    같은 원리로 j가 4일 때는

    numAry[4]에 numAry[0]~numAry[3]까지의 값이 누적되어

    i가 0일 때 numAry[4]는 1

    i가 1일 때 numAry[4]는 2

    i가 2일 때 numAry[4]는 4

    i가 3일 때 numAry[4]는 8

    이 됩니다.

    그래서 결국 최종적으로 nuymAry 배열의 값은

    1 1 2 4 8이 되므로 화면에는 한 줄씩 출력되어

    1

    1

    2

    4

    8

    이 된 것입니다

    수행 과정을 469쪽 디비겅 표와 함께 이해하시면 쉽게 이해하실 수 있습니다.

    오늘도 즐거운 하루 되세요.

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