학습 목표
변수표에 반복 회차, 조건, 갱신값, 출력값을 한 줄씩 쓴다.
본문
핵심 이론
if/else는 참인 경로만 실행한다. 일반적인 C·
for는 초기화 → 조건 → 본문 → 갱신 순서다. while은 조건부터, do-while은 본문부터 실행한다. 경계의 <와 <= 차이가 반복 횟수를 바꾼다.
break는 가장 가까운 반복문·switch를 끝내며 continue는 다음 반복으로 이동한다. 중첩 반복에서 내부와 외부 인덱스를 섞지 않는다.
배열 인덱스는 0부터 시작한다. 이차원·가변 길이 배열은 행마다 길이가 다를 수 있다. 갱신 전 값과 갱신 후 값을 나눠 쓰면 누적합·역순·정렬 추적이 쉬워진다.
반복문은 한 바퀴의 실행 순서부터
for(초기식; 조건식; 증감식)은 초기식 한 번 → 조건 확인 → 본문 → 증감식 → 조건 확인 순서다. continue는 현재 본문의 남은 부분을 건너뛰지만 for문의 증감식은 실행한다. break는 가장 가까운 반복문 또는 switch를 끝낸다. 중첩 반복 전체를 무조건 끝내는 명령이 아니다.
배열에서 a[i]는 i번째 저장 칸이다. 길이가 4이면 유효한 인덱스는 0~3이고 i <= 4까지 접근하면 범위를 벗어난다. 반복 중 배열을 바꾸면 다음 반복은 바뀐 배열을 읽는다.
| i | 조건 | 실행 | 누적 s |
|---|---|---|---|
| 0 | i < 4 | 0 더함 | 0 |
| 1 | i < 4 | 1 더함 | 1 |
| 2 | i < 4 | continue로 더하기 생략 | 1 |
| 3 | i < 4 | 3 더함 | 4 |
| 4 | 거짓 | 종료 | 4 |
이는 s=0; for(i=0;i<4;i++){if(i==2)continue; s+=i;}의 추적이다. 중첩 반복은 바깥 인덱스를 고정한 채 안쪽 표를 끝까지 작성한 다음 바깥 인덱스를 바꾼다. Java 가변 길이 배열에서는 행마다 길이가 다를 수 있으므로 열 조건을 실제 행의 길이와 대조한다.
풀이 예시
다음 C17 프로그램이 표준 출력에 기록하는 내용을 쓰시오. 마지막 줄바꿈의 유무는 답안에서 구별하지 않는다.
#include <stdio.h>
int main(void) {
int a[2][3] = {{2, 1, 4}, {3, 5, 2}};
for (int r = 0; r < 2; r++)
for (int c = 1; c < 3; c++)
a[r][c] += a[r][c - 1];
printf("%d %d\n", a[0][2], a[1][2] - a[0][1]);
return 0;
}
정답과 풀이 보기
예시 정답
7 7
풀이 과정
각 행을 왼쪽부터 제자리 누적한다. 첫 행은 [2,3,7], 둘째 행은 [3,8,10]이다. 따라서 7과 10-3=7을 출력한다.