정보처리기사 실기 - 2022년 2회 C언어 기출 풀이(배열 & 포인터 연산 문제)

Alchemist·2025년 9월 10일

정보처리기사

목록 보기
14/114

✨ 문제

다음 C언어 코드에서 알맞는 출력값을 작성하시오.

#include <stdio.h>
 
int main(int argc, char *argv[]) {
    int a[4] = {0, 2, 4, 8};
    int b[3] = {};
    int i = 1;
    int sum = 0;
    int *p1;
 
    for (i; i < 4; i++) {
        p1 = a + i;
        b[i-1] = *p1 - a[i-1];
        sum = sum + b[i-1] + a[i];
    }
 
    printf("%d", sum);
    return 0;
}

🎯 출제 의도

  • 배열과 포인터의 관계(p1 = a + i, *p1 == a[i]) 이해
  • 포인터 연산인덱스 연산의 동치성 확인
  • 루프 내에서의 누적 합 계산 로직 추적
  • 보조 배열 b에 계산 결과를 저장하고 활용하는 흐름 파악

📘 개념 정리

1. 배열 이름과 포인터

  • a는 배열의 첫 번째 원소 주소와 동일한 포인터 상수처럼 동작.
  • a + i&a[i]와 같고, *(a + i)a[i]와 같음.
    • 따라서 p1 = a + i;*p1 == a[i].

2. 보조 배열 초기화

  • int b[3] = {};는 일부 컴파일러에서 모두 0으로 초기화하는 확장 문법입니다.
    표준적인 표기는 int b[3] = {0}; 이며, 실제 계산에서는 곧바로 b[i-1]에 대입하므로 초기값이 결과에 영향은 없음.

3. 루프 인덱스 주의

  • for (i; i < 4; i++)에서 i1부터 시작.
  • 루프 바디에서 b[i-1]를 쓰므로 인덱스는 0, 1, 2로 안전하게 접근.

📝 풀이 과정

배열: a = {0, 2, 4, 8}

ip1 = a+i → *p1b[i-1] = *p1 - a[i-1]a[i]sum 누적식sum
1a=22sum = 0 + 2 + 24
2a=24sum = 4 + 2 + 410
3a=48sum = 10 + 4 + 822

루프 종료 후 sum = 22.


✅ 최종 출력 결과

22

💡 정리

이 문제에서 꼭 알아야 할 개념:

  • p1 = a + i;*p1 == a[i]
  • b[i-1] = a[i] - a[i-1]가 되어, 결과적으로
    sum은 각 단계에서 b[i-1] + a[i] = (a[i]-a[i-1]) + a[i] = 2*a[i] - a[i-1]를 누적하는 형태.
  • 인덱스 경계(특히 b[i-1])를 신경 쓰기 위해 초깃값 i=1이 중요.
profile
html_programming_language

0개의 댓글