책 내용 질문하기
120page q34질문이요
도서
2018 시나공 정보처리기사 실기(산업기사 포함)
페이지
120
조회수
207
작성일
2018-05-04
작성자
탈퇴*원
첨부파일

질문 자체는 이해되는데

향상된 포문 for(i=1;i<=5;++i, hap+=i)

에서 왜 첫번째 실행에 hap+=i 가 0 인가요? i=1 부터 시작했으니 합은 합+=1이 제일 먼저 처리되야하는것 아닌가요?

아니면 향상된 포문이라서 첫실행은 그냥 실행하는건가요?

그리고 일반 포문에서 맨뒤에 증가 ++i i++ 의 차이가 뭔가요 제가 이해한거로는 for(i=1;i<=5;++i)에서

++i의 경우 i가 2~6 까지 i++의 경우 i가 1~5까지로 이해했는데 그게 아니더라구요

혹시 이해가 되도록 설명좀부탁드려도 될까요?

주말중 공부하다 질문이 더 생겨 추가질문드려요 P 186쪽 플로우차트에서 1번 빈칸에 a[k-2]=k 인줄알았는데 a[k-1]=k 더라구요 배열의 첫째항은 배열[0]인줄 알았는데 플로우차트에서는 [1]부터 시작이라 그렇게 쓴건가요?

답변
2018-05-08 09:57:30

안녕하세요.

1)
먼저 i가 1인 상태에서 종료값을 비교합니다. i<=5에서 Yes이므로 반복문을 진입합니다.
system.out.printf("합은%d %4d입니다.\n", i, hap); 에 의해
출력은 : 합은1 0입니다.

그런 다음 증가값 부분의 수식을 순차적으로 진행하여
++i로 인해 i는 2가되고 hap += i에 의해 hap은 2가 됩니다.
이어서 종료값을 비교합니다. i<=5에서 Yes이므로 반복문을 진입합니다.
system.out.printf("합은%d %4d입니다.\n", i, hap); 에 의해
출력은 : 합은2 2입니다.

그런 다음 증가값 부분의 수식을 순차적으로 진행하여
++i로 인해 i는 3이되고 hap += i에 의해 hap은 5가 됩니다.
이어서 종료값을 비교합니다. i<=5에서 Yes이므로 반복문을 진입합니다.
system.out.printf("합은%d %4d입니다.\n", i, hap); 에 의해
출력은 : 합은3 5입니다.

그런 다음 증가값 부분의 수식을 순차적으로 진행하여
++i로 인해 i는 4가되고 hap += i에 의해 hap은 9가 됩니다.
이어서 종료값을 비교합니다. i<=5에서 Yes이므로 반복문을 진입합니다.
system.out.printf("합은%d %4d입니다.\n", i, hap); 에 의해
출력은 : 합은4 9입니다.

그런 다음 증가값 부분의 수식을 순차적으로 진행하여
++i로 인해 i는 5가되고 hap += i에 의해 hap은 14가 됩니다.
이어서 종료값을 비교합니다. i<=5에서 Yes이므로 반복문을 진입합니다.
system.out.printf("합은%d %4d입니다.\n", i, hap); 에 의해
출력은 : 합은5 14입니다.

그런 다음 증가값 부분의 수식을 순차적으로 진행하여
++i로 인해 i는 6이되고 hap += i에 의해 hap은 20이 됩니다.
이어서 종료값을 비교합니다. i<=5에서 No이므로 반복문을 벗어난 후 프로그램을 종료합니다.

2)

for문의 증가값 위치에 단독으로 ++i나 i++이 있는 경우는 단순히 1만 증가하는 것으로 동일합니다.

단 hap += i++ 이나 hap += ++i와 같이 증감 연산자와 다른 식이 함께 적용된 경우에는

hap += i++ 의 경우 먼저 현재 i의 값을 hap에 누적한 후 1을 증가하고

hap += ++i 의 경우 먼저 i를 증가한 후 그 값을 hap에 누적합니다.

3)

예, 맞습니다.

순서도의 경우 배열의 위치가 1에 시작하는 경우가 있고 0에서 시작하는 경우가 있으므로

순서도에 배열의 사용될 경우 처리조건에서 배열의 시작 위치를 제시합니다.

혹 제시되지 않는 경우에는 배열 위치에 사용되는 변수의 초기값을 보고 확인할 수 있습니다.

순서도와 달리 C나 JAVA는 배열의 위치가 항상 0에서 시작합니다.


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

  • *
    2018-05-08 09:57:30

    안녕하세요.

    1)
    먼저 i가 1인 상태에서 종료값을 비교합니다. i<=5에서 Yes이므로 반복문을 진입합니다.
    system.out.printf("합은%d %4d입니다.\n", i, hap); 에 의해
    출력은 : 합은1 0입니다.

    그런 다음 증가값 부분의 수식을 순차적으로 진행하여
    ++i로 인해 i는 2가되고 hap += i에 의해 hap은 2가 됩니다.
    이어서 종료값을 비교합니다. i<=5에서 Yes이므로 반복문을 진입합니다.
    system.out.printf("합은%d %4d입니다.\n", i, hap); 에 의해
    출력은 : 합은2 2입니다.

    그런 다음 증가값 부분의 수식을 순차적으로 진행하여
    ++i로 인해 i는 3이되고 hap += i에 의해 hap은 5가 됩니다.
    이어서 종료값을 비교합니다. i<=5에서 Yes이므로 반복문을 진입합니다.
    system.out.printf("합은%d %4d입니다.\n", i, hap); 에 의해
    출력은 : 합은3 5입니다.

    그런 다음 증가값 부분의 수식을 순차적으로 진행하여
    ++i로 인해 i는 4가되고 hap += i에 의해 hap은 9가 됩니다.
    이어서 종료값을 비교합니다. i<=5에서 Yes이므로 반복문을 진입합니다.
    system.out.printf("합은%d %4d입니다.\n", i, hap); 에 의해
    출력은 : 합은4 9입니다.

    그런 다음 증가값 부분의 수식을 순차적으로 진행하여
    ++i로 인해 i는 5가되고 hap += i에 의해 hap은 14가 됩니다.
    이어서 종료값을 비교합니다. i<=5에서 Yes이므로 반복문을 진입합니다.
    system.out.printf("합은%d %4d입니다.\n", i, hap); 에 의해
    출력은 : 합은5 14입니다.

    그런 다음 증가값 부분의 수식을 순차적으로 진행하여
    ++i로 인해 i는 6이되고 hap += i에 의해 hap은 20이 됩니다.
    이어서 종료값을 비교합니다. i<=5에서 No이므로 반복문을 벗어난 후 프로그램을 종료합니다.

    2)

    for문의 증가값 위치에 단독으로 ++i나 i++이 있는 경우는 단순히 1만 증가하는 것으로 동일합니다.

    단 hap += i++ 이나 hap += ++i와 같이 증감 연산자와 다른 식이 함께 적용된 경우에는

    hap += i++ 의 경우 먼저 현재 i의 값을 hap에 누적한 후 1을 증가하고

    hap += ++i 의 경우 먼저 i를 증가한 후 그 값을 hap에 누적합니다.

    3)

    예, 맞습니다.

    순서도의 경우 배열의 위치가 1에 시작하는 경우가 있고 0에서 시작하는 경우가 있으므로

    순서도에 배열의 사용될 경우 처리조건에서 배열의 시작 위치를 제시합니다.

    혹 제시되지 않는 경우에는 배열 위치에 사용되는 변수의 초기값을 보고 확인할 수 있습니다.

    순서도와 달리 C나 JAVA는 배열의 위치가 항상 0에서 시작합니다.


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

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