기출문제/정보처리기사

2022년 2회 정보처리기사 기출문제 63번

엉클지니 2025. 2. 26. 21:55

63. 다음 C언어 프로그램이 실행되었을 때, 실행 결과는?

30      60

 80    120

 

<해설>

C 프로그램 실행 결과 분석

📌 주어진 코드

#include <stdio.h>

struct st {
    int a;
    int c[10];
};

int main(int argc, char *argv[]) {
    int i = 0;
    struct st ob1;
    struct st ob2;

    ob1.a = 0;
    ob2.a = 0;

    // 첫 번째 for문: 배열 초기화 및 값 저장
    for(i = 0; i < 10; i++) {
        ob1.c[i] = i;
        ob2.c[i] = ob1.c[i] + i;
    }

    // 두 번째 for문: 특정 인덱스의 값만 누적
    for(i = 0; i < 10; i += 2) {
        ob1.a = ob1.a + ob1.c[i];  // ob1.a에 ob1.c[i]의 짝수 번째 인덱스 값 누적
        ob2.a = ob2.a + ob2.c[i];  // ob2.a에 ob2.c[i]의 짝수 번째 인덱스 값 누적
    }

    printf("%d", ob1.a + ob2.a);
    return 0;
}

1️⃣ 첫 번째 for 루프 (배열 값 초기화)

for(i = 0; i < 10; i++) {
    ob1.c[i] = i;
    ob2.c[i] = ob1.c[i] + i;
}
  • ob1.c[i] = i; → ob1.c 배열에는 0~9까지의 값이 저장됨.
  • ob2.c[i] = ob1.c[i] + i; → ob2.c[i] = i + i = 2 * i;

i ob1.c[i] ob2.c[i]

0 0 0
1 1 2
2 2 4
3 3 6
4 4 8
5 5 10
6 6 12
7 7 14
8 8 16
9 9 18

2️⃣ 두 번째 for 루프 (짝수 인덱스 값 누적)

for(i = 0; i < 10; i += 2) {
    ob1.a = ob1.a + ob1.c[i];  // ob1.a 누적
    ob2.a = ob2.a + ob2.c[i];  // ob2.a 누적
}
  • i는 0, 2, 4, 6, 8에서 실행됨.
  • ob1.a와 ob2.a에 각 ob1.c[i]와 ob2.c[i] 값이 누적됨.

각 값의 누적

  • ob1.a = 0 + 0 + 2 + 4 + 6 + 8 = 20
  • ob2.a = 0 + 0 + 4 + 8 + 12 + 16 = 40

3️⃣ 최종 결과

printf("%d", ob1.a + ob2.a);
  • ob1.a + ob2.a = 20 + 40 = 60
  • 출력 결과: 60

정답: ② 60

선택지 값 설명

① 30 계산 값보다 작음
② 60 올바른 결과
③ 80 잘못된 합산
④ 120 두 배로 잘못 계산

💡 결론

📌 짝수 인덱스(0, 2, 4, 6, 8)에서만 누적하는 점이 핵심!
📌 ob1.a = 20, ob2.a = 40이므로 최종 결과는 60
정답: ②

 

 

반응형