[C언어] for루프의 실행 순서 (정보처리기사 25년 1회 실기)
10. 다음은 C언어에 대한 문제이다. 아래 코드를 확인하여 알맞는 출력값을 작성하시오.
#include <stdio.h>
char Data[5] = {'B', 'A', 'D', 'E'};
char c;
int main(){
int i, temp, temp2;
c = 'C';
printf("%d\n", Data[3]-Data[1]);
for(i=0;i<5;++i){
if(Data[i]>c)
break;
}
temp = Data[i];
Data[i] = c;
i++;
for(;i<5;++i){
temp2 = Data[i];
Data[i] = temp;
temp = temp2;
}
for(i=0;i<5;i++){
printf("%c", Data[i]);
}
}
정답 :
4
BACDE
1. ASCII 숫자로 변환할 때
- 0 → 48
- A → 65
- a → 97
2. for 루프의 실행 순서
char Data[5] = {'B', 'A', 'D', 'E'}; // 인덱스 0~3만 값 있음
char c = 'C';
for(i=0;i<5;++i){
if(Data[i]>c)
break;
}
break한 시점에서의 i 값은 뭐야?
- 초기화: i = 0
- 조건 검사: i < 5
- 본문 실행: { if (Data[i] > c) break; }
- 증가 연산: ++i
- 다시 조건 검사 → i는 루프 한 번 돌고 나서 다음 반복 전에 증가한다. (현재 루프 안에서 증가하는 것이 아님)
++i는 다음 루프 시작 시에만 영향을 주므로, break 시점의 i는 여전히 2인 것이다.
++i든 i++든 증가 자체는 루프의 끝에서 일어나기 때문에 결과는 똑같다.