다음 C 프로그램의 출력값을 쓰시오.
#include <stdio.h>
int main(void) {
int a[] = {3, 1, 4, 1, 5};
int *p = a + 1;
for (int i = 0; i < 3; i++) {
*(p + i) += *(p + i - 1);
}
printf("%d %d %d", a[1], a[2], a[3]);
return 0;
}모범답안
4 8 9
풀이와 판단 근거
p는 a[1]을 가리킨다. 첫 반복에서 a[1]은 기존 1에 a[0]의 3을 더해 4가 되고, 두 번째 반복은 이미 바뀐 a[1]을 사용해 a[2]를 8로 만든다.
세 번째도 갱신된 a[2]를 사용하므로 a[3]은 1+8인 9가 된다. 원본 값이 아니라 직전 단계에서 변경된 배열 값을 계속 읽는 점이 핵심이다.
자주 틀리는 지점
- 각 단계에서 초기 배열만 참조해 4 5 5로 계산
- p가 a[0]을 가리킨다고 판단
- 복합 대입의 왼쪽과 오른쪽 인덱스를 혼동
자동 판정 방식
한글·영문 동의어와 문항별 필수 개념을 확인하며, 정답 단어가 부정되거나 반대 개념과 함께 쓰이면 자동 정답으로 확정하지 않습니다. 부분점수는 ITPASSLAB의 학습용 예상 점수입니다.