java로 구현된 프로그램을 분석하여 실행 결과를 쓰라는 문제입니다.
반복문을 실행할 때 이해가 안되고 자꾸 틀리는 부분인데 이해할 수 있도록 설명 부탁드립니다.
int i = 0, hap = 0
for(i = 1 ; i <= 5; ++i, hap += i)
이렇게 되어있는데 제가 반복문을 실행해보면
처음 시작은 0부터니까
i hap
0 0
두번째는 for문에서 i에 1값을 주고 시작하고 i는 5보다 작으니까 넘어가고 전치연산이니까 i에 1을 더합니다. hap은 i값과 hap값을 더하니까 2입니다. 두번째는 i가 2니까 5보다 작고 전치연산으로 해서 i는 3 hap값은 이전에 2와 i를 더해서 5 이런식으로 반복합니다.
i hap
0 0
1 2
2 5
3 9
4 14
5 20
6
이렇게 결과가 나왔으며 답은 i 1번부터 하는데 전치연산에 의해 6까지 나왔으니까 6에 20까지 해야하는게 아닙니까?? 다른거 풀 때도 항상 전치 후치 때문에 답이 틀리는데 ㅠㅠ
합은1 0입니다.
합은2 2입니다.
합은3 5입니다.
합은4 9입니다.
합은5 14입니다.
합은6 20입니다.
안녕하세요 길벗수험서 운영팀입니다.
for(i=1; i<=5; ++i, hap+=i)
System.out.printf("합은%d %4d입니다.\n", i, hap);
위의 코드를 아래로 단순화 시켜 보죠.
for(①; ②; ③)
④;
해당 문제에서 내부의 출력문은 i가 1일 때부터, 5일 때까지 총 5회 수행됩니다.
1회 : ①, ②(조건 참), ④
2회 : ③, ②(조건 참), ④
3회 : ③, ②(조건 참), ④
4회 : ③, ②(조건 참), ④
5회 : ③, ②(조건 참), ④
종료 : ③, ②(조건 거짓) <탈출>
여기서 이상한 점을 느끼셔야 합니다.
회원님께서 "for문에서 i에 1값을 주고 시작하고 i는 5보다 작으니까 넘어가고 전치연산이니까 i에 1을 더합니다. hap은 i값과 hap값을 더하니까 2입니다." 라고 하셨음에도 불구하고 실제 코드의 첫 회전에서는 ④번(합은? ?입니다.)을 출력할 때 ++i와 hap+=i가 수행조차 되지 않고 있음을 알 수 있죠.
그리고 마지막에 ③(++i, hap+=i)을 수행하고, ②에서 조건이 거짓이 되며 반복문을 빠져나가므로 i의 값은 6으로 증가하지만 출력은 하지 않는 상황이 오는 것이죠.
for문의 기본적인 수행 과정을 착각하고 계신 점이 있는 것 같습니다. QR을 통해 강의 영상도 함께 확인하시면서 for문의 정확한 수행 과정을 기억해 두세요.
추가로 전치/후치 증감 연산자가 식에 영향을 주는 것은 '하나의 식' 안에서 뿐입니다. 즉, sum = sum + i++; 과 같이 세미콜론(;) 또는 쉼표(,)로 구분되는 각 식 내에서만 전/후가 의미가 있을 뿐, 문제와 같이 쉼표로 두 식이 구분되어 때는 그저 1을 증가시키는 것 외의 다른 것을 고려치 않으셔도 됩니다.
행복한 하루되세요 :)
-
관리자2021-07-02 09:53:32
안녕하세요 길벗수험서 운영팀입니다.
for(i=1; i<=5; ++i, hap+=i)
System.out.printf("합은%d %4d입니다.\n", i, hap);
위의 코드를 아래로 단순화 시켜 보죠.
for(①; ②; ③)
④;
해당 문제에서 내부의 출력문은 i가 1일 때부터, 5일 때까지 총 5회 수행됩니다.
1회 : ①, ②(조건 참), ④
2회 : ③, ②(조건 참), ④
3회 : ③, ②(조건 참), ④
4회 : ③, ②(조건 참), ④
5회 : ③, ②(조건 참), ④
종료 : ③, ②(조건 거짓) <탈출>
여기서 이상한 점을 느끼셔야 합니다.
회원님께서 "for문에서 i에 1값을 주고 시작하고 i는 5보다 작으니까 넘어가고 전치연산이니까 i에 1을 더합니다. hap은 i값과 hap값을 더하니까 2입니다." 라고 하셨음에도 불구하고 실제 코드의 첫 회전에서는 ④번(합은? ?입니다.)을 출력할 때 ++i와 hap+=i가 수행조차 되지 않고 있음을 알 수 있죠.
그리고 마지막에 ③(++i, hap+=i)을 수행하고, ②에서 조건이 거짓이 되며 반복문을 빠져나가므로 i의 값은 6으로 증가하지만 출력은 하지 않는 상황이 오는 것이죠.
for문의 기본적인 수행 과정을 착각하고 계신 점이 있는 것 같습니다. QR을 통해 강의 영상도 함께 확인하시면서 for문의 정확한 수행 과정을 기억해 두세요.
추가로 전치/후치 증감 연산자가 식에 영향을 주는 것은 '하나의 식' 안에서 뿐입니다. 즉, sum = sum + i++; 과 같이 세미콜론(;) 또는 쉼표(,)로 구분되는 각 식 내에서만 전/후가 의미가 있을 뿐, 문제와 같이 쉼표로 두 식이 구분되어 때는 그저 1을 증가시키는 것 외의 다른 것을 고려치 않으셔도 됩니다.
행복한 하루되세요 :)