<정보처리기사 실기> Daily 문제 (3) for 문

.·2024년 8월 20일
0

[자격증]

목록 보기
3/10

정처기 공부 조금 하고 러닝하러 가야지,,, 이번주 태풍온다고 하는데 오늘까지 뛸수 있겠군,,,


출처 : 수제비

당연히 sum 인줄알고 10적었다가, i 였네,,, 이렇게 나올수 이겠구나..

i = 1일 때, sum = sum + 1 → sum = 1
i = 2일 때, sum = sum + 2 → sum = 3
i = 3일 때, sum = sum + 3 → sum = 6
i = 4일 때, sum = sum + 4 → sum = 10

루프가 종료된 후, i는 5가 되고, 조건 i < 5가 성립하지 않으므로 루프가 종료

따라서 printf("%d", i);는 최종적으로 5를 출력

i = 1일 때, 루프는 실행되지만 아무 동작도 하지 않음.
i = 2일 때, 루프는 다시 실행되지만 역시 아무 동작도 하지 않음.
i = 3이 되면 i < 3 조건이 더 이상 충족되지 않으므로 루프가 종료.
루프가 종료된 후, i는 3

for(i=1; i<3; i++);: i를 1로 초기화한 후, i가 3보다 작을 때까지 반복
루프 본문이 세미콜론(;)으로 끝나므로, 루프 내에서 아무런 동작도 하지 않음. 이 루프는 i를 단순히 증가시키는 역할만 수행.

i = 1: 루프 실행, 세미콜론 때문에 아무 동작 없이 i가 증가하여 i = 2
i = 2: 루프 실행, 마찬가지로 i가 증가하여 i = 3
i = 3: i < 3 조건이 성립하지 않으므로 루프가 종료

루프가 종료된 후, i는 3

차이점 분석

세미콜론 없는 경우 (for(i=1; i<3; i++){ })

이 코드에서 for 루프는 i가 1부터 2까지 증가하며 반복

루프 본문에 { }가 있어, 반복 시 아무 동작도 하지 않음

루프가 끝나고 나면 i는 3

마지막으로 printf("%d", i);가 호출되어 i의 값을 출력

세미콜론 있는 경우 (for(i=1; i<3; i++);)

이 코드에서 for 루프 뒤에 세미콜론(;)이 붙어 있음
이 세미콜론은 루프 본문이 없는 것을 의미하며, for 루프 자체가 단독으로 동작.

for(i=1; i<3; i++);은 사실상 for 루프가 i가 3이 될 때까지 아무런 동작 없이 반복을 수행.
루프가 종료된 후, i는 3이 되며, 그 후에 printf("%d", i);가 호출되어 3을 출력.

4.

for( ; ; ): 조건과 증감식을 모두 생략한 for 루프 이러한 루프는 조건 없이 무한히 반복

루프 실행 과정

첫 번째 반복:
i = 0이 출력되고, i는 1로 증가
조건 i == 3이 성립하지 않으므로 루프는 계속

두 번째 반복:
i = 1이 출력되고, i는 2로 증가
조건 i == 3이 성립하지 않으므로 루프는 계속

세 번째 반복:
i = 2가 출력되고, i는 3으로 증가
이제 if(i == 3) 조건이 참이 되어 break 문이 실행되고 루프가 종료

루프가 종료되기 전에 출력된 i의 값들은 0, 1, 2, 따라서 이 코드의 출력은 012

코드 분석

변수 선언 및 초기화:

char x = 'A' - 1;: char형 변수 x를 선언하고 초기화
'A'는 아스키 코드 값으로 65에 해당합니다. 따라서 'A' - 1은 64
이 시점에서 x는 64로 초기화

for 루프:

for( ; x ; x /= 2): 이 루프는 조건식 없이 x가 0이 아닌 동안 계속 반복
매 반복마다 x의 값을 2로 나누고 그 결과를 x에 다시 저장
루프 내에서는 printf("%d", x);로 현재 x의 값을 정수형으로 출력

루프 실행 과정

첫 번째 반복:

x = 64일 때, printf("%d", x);는 64를 출력
이후 x /= 2가 실행되어 x는 32

두 번째 반복:

x = 32일 때, printf("%d", x);는 32를 출력
이후 x /= 2가 실행되어 x는 16

세 번째 반복:

x = 16일 때, printf("%d", x);는 16을 출력
이후 x /= 2가 실행되어 x는 8

네 번째 반복:

x = 8일 때, printf("%d", x);는 8을 출력
이후 x /= 2가 실행되어 x는 4

다섯 번째 반복:

x = 4일 때, printf("%d", x);는 4를 출력
이후 x /= 2가 실행되어 x는 2

여섯 번째 반복:

x = 2일 때, printf("%d", x);는 2를 출력합니다.
이후 x /= 2가 실행되어 x는 1이 됩니다.

일곱 번째 반복:

x = 1일 때, printf("%d", x);는 1을 출력
이후 x /= 2가 실행되어 x는 0

종료:

x = 0이 되면, x가 0이므로 조건식에서 거짓이 되어 루프가 종료

출력 결과
따라서 이 코드의 출력은 6432168421

외부루프 for(i=1; i<3; i++)

첫번째 외부루프 (i=1)

i 1~4까지 출력되고 i=5가 되었을 때 내부루프 성립이 맞지 않으므로 내부루프 종료하고 외부루프로 가게 된다. i=5이기 때문에 외부루프 조건에 맞지 않기에 바로 i=5 출력

전체 출력 값 : 12345


profile
해야 되는 일이 하고 싶은 일로

0개의 댓글