질문 자체는 이해되는데
향상된 포문 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]부터 시작이라 그렇게 쓴건가요?
안녕하세요.
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에서 시작합니다.
오늘도 즐거운 하루되세요.