Skip to Content
독학사독학사 2단계C프로그래밍26. 독학사 2단계 C프로그래밍 모의고사 ② (난이도 강화)

이 편은 실제 기출 문제가 아닙니다. 독학사 2단계 C프로그래밍 관련 reference/ 기출 원문은 확보되어 있지 않습니다. 아래 22개 문항은 국가평생교육진흥원 독학학위제 독학사 2단계 C프로그래밍 출제기준(평가영역) 중에서도 포인터·동적 메모리·구조체·파일 입출력·선행처리기처럼 오답률이 높은 영역을 근거로 새로 구성한 실전형 모의 문항입니다. 실제 시험의 문장·코드·보기 배열과 다를 수 있습니다.

회차별 실제 출제 문항 수·배점·시간은 매 공고마다 다를 수 있으므로, 응시 전 국가평생교육진흥원 공고 원문을 반드시 확인하십시오.

이 편이 다루는 범위와 접근법

26편이 06~22편 전 범위를 균형 있게 점검하는 모의고사였다면, 이 편은 그중에서도 독학사 응시자들이 가장 자주 틀리는 고난도 영역만을 추려 난이도를 강화했습니다. 함수 포인터와 포인터 배열, 2차원 배열과 포인터의 관계, 구조체 포인터와 중첩 구조체, realloc·댕글링 포인터·이중 해제 같은 동적 메모리 함정, 파일 입출력의 세부 규칙, 매크로의 텍스트 치환이 만드는 부작용, 그리고 이 모든 개념이 뒤섞인 오류 찾기형·통합형 문제까지 다룹니다.

이 영역의 공통점은 “겉보기에는 그럴듯하지만 실제로는 정의되지 않은 동작(undefined behavior)이거나 규칙을 잘못 적용한 코드”가 많다는 것입니다. 문제를 풀 때는 다음 순서를 지키십시오. ① 선언부에서 각 변수·포인터가 정확히 무엇을 가리키는지 표시한다. ② 포인터 연산이나 함수 호출이 일어날 때마다 그 대상이 스택인지 힙인지 구분한다. ③ 매크로나 조건부 컴파일처럼 컴파일 이전 단계에서 일어나는 치환을 먼저 손으로 펼쳐 본 뒤에 나머지 로직을 추적한다. 틀린 문항은 괄호로 표시된 관련 편으로 돌아가 개념을 다시 확인하십시오.

마무리 복습

1~3번 — 포인터 심화: 함수 포인터·포인터 배열 (12, 13편)

#include <stdio.h> int add(int a, int b) { return a + b; } int sub(int a, int b) { return a - b; } int main(void) { int (*fp)(int, int) = add; int result = fp(10, 3); fp = sub; result += fp(10, 3); printf("%d\n", result); return 0; }
문제 14지선다
위 프로그램의 실행 결과로 옳은 것은?
#include <stdio.h> int main(void) { char *fruits[3] = {"apple", "banana", "cherry"}; char **p = fruits; printf("%s\n", *(p + 1)); return 0; }
문제 24지선다
위 프로그램의 실행 결과로 옳은 것은?
문제 34지선다
포인터와 배열의 관계에 대한 설명으로 옳지 않은 것은?

4~6번 — 배열과 포인터의 고급 관계 (11, 12편)

#include <stdio.h> int main(void) { int arr[2][3] = {{1, 2, 3}, {4, 5, 6}}; printf("%d %d\n", arr[1][2], *(*(arr + 1) + 2)); return 0; }
문제 44지선다
위 프로그램의 실행 결과로 옳은 것은?
문제 54지선다
다음 두 선언에 대한 설명으로 옳은 것은?
int *arr1[5];
int (*arr2)[5];
문제 64지선다
2차원 배열 int arr[3][4]를 함수의 매개변수로 선언할 때의 규칙에 대한 설명으로 옳은 것은?

7~9번 — 구조체 심화: 구조체 포인터·중첩 구조체·동적 배열 (14, 18편)

#include <stdio.h> struct Point { int x, y; }; int main(void) { struct Point p1 = {3, 4}; struct Point *ptr = &p1; ptr->x = ptr->x + 10; (*ptr).y = (*ptr).y + 20; printf("%d %d\n", p1.x, p1.y); return 0; }
문제 74지선다
위 프로그램의 실행 결과로 옳은 것은?
struct Address { char city[20]; }; struct Person { char name[20]; struct Address addr; };

struct Person p;struct Person *pp = &p;가 선언되어 있다고 할 때,

문제 84지선다
p.addr.city와 같은 값을 pp를 통해 표현하는 방법으로 옳은 것은?
#include <stdio.h> #include <stdlib.h> struct Item { int id; }; int main(void) { struct Item *arr = (struct Item *)malloc(3 * sizeof(struct Item)); for (int i = 0; i < 3; i++) { arr[i].id = i * 10; } printf("%d\n", arr[1].id); free(arr); return 0; }
문제 94지선다
위 프로그램의 실행 결과로 옳은 것은?

10~12번 — 동적 메모리 심화: realloc·댕글링 포인터·이중 해제 (17편)

문제 104지선다
동적 배열의 크기를 늘리기 위해 realloc을 사용할 때의 설명으로 옳지 않은 것은?
int *createArray(void) { int arr[5] = {1, 2, 3, 4, 5}; return arr; }
문제 114지선다
위 함수에 대한 설명으로 가장 적절한 것은?
#include <stdlib.h> int main(void) { int *p = (int *)malloc(sizeof(int)); *p = 5; free(p); free(p); return 0; }
문제 124지선다
위 코드를 실행했을 때 나타날 수 있는 문제로 가장 적절한 것은?

13~15번 — 파일 입출력 심화 (16, 18편)

문제 134지선다
파일에 정수와 문자열을 순서대로 저장한 뒤 다시 읽어오는 절차에 대한 설명으로 옳지 않은 것은?
문제 144지선다
파일 열기 모드에 대한 설명으로 옳지 않은 것은?
#include <stdio.h> struct Record { int id; double score; }; int main(void) { struct Record r1 = {1, 95.5}; FILE *fp = fopen("data.bin", "wb"); fwrite(&r1, sizeof(struct Record), 1, fp); fclose(fp); struct Record r2; fp = fopen("data.bin", "rb"); fread(&r2, sizeof(struct Record), 1, fp); fclose(fp); printf("%d %.1f\n", r2.id, r2.score); return 0; }
문제 154지선다
위 프로그램의 실행 결과로 옳은 것은?

16~18번 — 선행처리기 심화 (15편)

#include <stdio.h> #define SQUARE(x) x * x int main(void) { int i = 3; int result = SQUARE(i++); printf("%d\n", result); return 0; }
문제 164지선다
위 코드에 대한 설명으로 가장 적절한 것은?
#include <stdio.h> #define DEBUG int main(void) { #ifdef DEBUG printf("debug mode\n"); #else printf("release mode\n"); #endif printf("done\n"); return 0; }
문제 174지선다
위 프로그램을 실행하면 콘솔에 출력되는 내용으로 옳은 것은?
문제 184지선다
#define과 관련한 설명으로 옳지 않은 것은?

19~20번 — 오류 찾기 고난도 (21편)

#include <stdio.h> int main(void) { int arr[5] = {1, 2, 3, 4, 5}; int sum = 0; for (int i = 0; i <= 5; i++) { sum += arr[i]; } printf("%d\n", sum); return 0; }
문제 194지선다
위 코드의 문제점으로 가장 적절한 것은?
#include <string.h> void appendMessage(char *dest) { strcat(dest, " World"); } int main(void) { char *msg; appendMessage(msg); printf("%s\n", msg); return 0; }
문제 204지선다
위 코드의 문제점으로 가장 적절한 것은?

21~22번 — 통합 문제 (18, 20편)

#include <stdio.h> #include <stdlib.h> struct Node { int data; struct Node *next; }; int main(void) { struct Node *head = (struct Node *)malloc(sizeof(struct Node)); head->data = 1; head->next = (struct Node *)malloc(sizeof(struct Node)); head->next->data = 2; head->next->next = NULL; printf("%d %d\n", head->data, head->next->data); free(head->next); free(head); return 0; }
문제 214지선다
위 프로그램의 실행 결과로 옳은 것은?
#include <stdio.h> #include <stdlib.h> int main(void) { char *str = "1234"; int num = atoi(str); printf("%d\n", num + 1); return 0; }
문제 224지선다
위 프로그램의 실행 결과로 옳은 것은?

참고 자료

Last updated on