Skip to main content

[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++든 증가 자체는 루프의 끝에서 일어나기 때문에 결과는 똑같다.