본문 바로가기
정보처리기사

정보처리기사 실기 C언어 기출문제 모음 (최근 5개년)

by 셈이 2025. 4. 16.
728x90
반응형

안녕하세요. 정보처리기사 실기 시험 기출문제 중 C언어 관련 문제들만 선별하여 정리한 자료입니다.

 

2020년 정보처리기사가 개편된 이후부터 최근 5개년 간의 기출문제를 유형별로 정리하였습니다.

 

시험을 준비하시는 분들께 도움이 되기를 바랍니다.

 

 

아래는 이 자료에 포함된 기출문제 회차 목록입니다.

  • 2024년 1회 / 2회 / 3회
  • 2023년 1회 / 2회 / 3회
  • 2022년 1회 / 2회 / 3회
  • 2021년 1회 / 2회 / 3회
  • 2020년 1회 / 2회 / 3회

 

1. 2020년 1회차 (1)

int main(void)
{
    int i, j;
    int temp;
    int a[5] = {75, 95, 85, 100, 50};

    for (i = 0; i < 4; i++) {
        for (j = 0; j < 4 - i; j++) {
            if (a[j] > a[j + 1]) {
                temp = a[j];
                a[j] = a[j + 1];
                a[j + 1] = temp;
            }
        }
    }

    for (i = 0; i < 5; i++) {
        printf("%d ", a[i]);
    }

    return 0;
}

 

답) 50 75 85 95 100

 

 

2. 2020년 3회차 (1)

 

#include <stdio.h>

int r1()
{
    return 4;
}

int r10()
{
    return 30 + r1();
}

int r100()
{
    return 200 + r10();
}

int main()
{
    printf("%d\n", r100());
    return 0;
}

 

답) 234

 

 

3. 2020년 3회차 (2)

#include <stdio.h>

int main(void)
{
    int i = 0, c = 1; // c를 1로 초기화하여 곱셈 가능
    while (i < 10)
    {
        i++;
        c *= i;
    }
    printf("%d", c);
    return 0;
}

답) 3628800

 

 

4. 2020년 4회차 (1)

#include <stdio.h>

int main(void)
{
    char *p = "KOREA";

    printf("%s\n", p);       // 전체 문자열 출력: KOREA
    printf("%s\n", p + 3);   // 4번째 문자부터 출력: EA
    printf("%c\n", *p);      // 첫 문자: K
    printf("%c\n", *(p + 3)); // 4번째 문자: E
    printf("%c\n", *(p + 2)); // 3번째 문자: R

    return 0;
}

답)

KOREA  
EA  
K  
E  
R

 

 

5. 2021년 1회차 (1)

#include <stdio.h>

struct good 
{
    char name[10];
    int age;
};

int main(void)
{
    struct good s[] = {
        "Kim", 28,
        "Lee", 38,
        "Seo", 50,
        "Park", 35
    };

    struct good *p;
    p = s;
    p++; // 포인터를 다음 구조체로 이동

    printf("%s\n", p->name); // "Lee"
    printf("%d\n", p->age);  // 38

    return 0;
}

답)

Lee  
38

 

 

6. 2021년 2회차 (1)

#include <stdio.h>

int main()
{
    int arr[3];
    int s = 0;

    *(arr + 0) = 1;
    arr[1] = *(arr + 0) + 2;
    arr[2] = *arr + 3;

    for (int i = 0; i < 3; i++)
    {
        s = s + arr[i];
    }

    printf("%d", s); // 결과 출력

    return 0;
}

답) 8

 

 

7. 2021년 2회차 (2)

#include <stdio.h>

int mp(int base, int exp);  // 함수 원형 선언

int main()
{
   int res;
   res = mp(2, 10);
   printf("%d", res);
   return 0;
}

int mp(int base, int exp)
{
   int res = 1;
   for(int i = 0; i < exp; i++)
   {
      res = res * base;
   }
   return res;
}

답) 1024

 

 

8.2021년 3회차 (1)

#include <stdio.h>
 
struct jsu 
{
  char name[12];
  int os, db, hab, hhab;
};
 
int main()
{
   struct jsu st[3] = {{"데이터1", 95, 88}, {"데이터2", 84, 91}, {"데이터3", 86, 75}};
   struct jsu* p;
 
   p = &st[0];
 
   (p + 1)->hab = (p + 1)->os + (p + 2)->db;
   (p + 1)->hhab = (p+1)->hab + p->os + p->db;
 
   printf("%d\n", (p+1)->hab + (p+1)->hhab);
}

답) 501

 

 

9. 2021년 3회차 (2)

int main()
{
	int *arr[3];
	int a = 12, b = 24, c = 36;

	arr[0] = &a;
	arr[1] = &b;
	arr[2] = &c;
 
	printf("%d\n", *arr[1] + **arr + 1);
}

답) 37

 

 

10. 2022년 1회차 (1)

int isPrime(int number) 
{ 
  int i; 
  for (i=2; i<number; i++) 
  { 
    if (number % i == 0) return 0; 
  } 
  return 1; 
} 
 
int main(void) 
{ 
  int number = 13195, max_div=0, i; 
  for (i=2; i<number; i++) 
  	if (isPrime(i) == 1 && number % i == 0) 
		max_div = i; 
  
  printf("%d", max_div); 
  return 0; 
}

답) 29

 

 

11. 2022년 1회차 (2)

int main() 
{
  int number = 1234;
  int div = 10;
  int result = 0;
 
  while (number ( 1 ) 0) 
  {
    result = result * div;
    result = result + number ( 2 ) div;
    number = number ( 3 ) div;
  }
  
  printf("%d", result);
  return 0;
}

답) 

(1) != or >
(2) %  
(3) /

 

 

12. 2022년 1회차 (3)

int func(int a) 
{
  if (a <= 1) return 1;
  return a * func(a - 1);
}
 
int main() 
{
  int a;
  scanf("%d", &a);
  printf("%d", func(a));
}

답) 5

 

 

13. 2022년 1회차 (4)

int func(int a) 
{
  if (a <= 1) return 1;
  return a * func(a - 1);
}
 
int main() 
{
  int a;
  scanf("%d", &a);
  printf("%d", func(a));
}

답) 120

 

 

14. 2022년 2회차 (1)

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; 
}

답) 22

 

 

15. 2022년 2회차 (2)

#include <stdio.h>

int len(char* p); // 함수 원형

int main()
{ 
    char* p1 = "2022"; 
    char* p2 = "202207";   
    
    int a = len(p1); 
    int b = len(p2); 

    printf("%d", a + b); 
    return 0;
} 

int len(char* p)
{ 
    int r = 0;      
    while (*p != '\0')
    { 
        p++; 
        r++;
    }
    return r;
}

답) 10

 

 

16. 2022년 3회차 (3)

#include <stdio.h>

int calculate(int w, int h, int j, int i) {
    if (i >= 0 && i < h && j >= 0 && j < w) return 1;
    return 0;
}

int main(void) {
    int field[4][4] = {
        {0, 1, 0, 1},
        {0, 0, 0, 1},
        {1, 1, 1, 0},
        {0, 1, 1, 1}
    };
    
    int mines[4][4] = {0};  // 초기값 모두 0
    int w = 4, h = 4;
    
    int x, y, i, j;
    
    for (y = 0; y < h; y++) {
        for (x = 0; x < w; x++) {
            if (field[y][x] == 0) continue;
            
            // 주변 8방향 순회
            for (i = y - 1; i <= y + 1; i++) {
                for (j = x - 1; j <= x + 1; j++) {
                    if (calculate(w, h, j, i) && !(i == y && j == x)) {
                        mines[i][j] += 1;
                    }
                }
            }
        }
    }

    // 결과 출력
    for (y = 0; y < h; y++) {
        for (x = 0; x < w; x++) {
            printf("%d ", mines[y][x]);
        }
        printf("\n");
    }

    return 0;
}

답)
1 1 3 2  
3 4 5 3  
3 5 6 4  
3 5 5 3

 

 

17. 2023년 1회차 (1)

int main(){

    char a[] = "Art";
    char* p = NULL;
    p = a;
 
    printf("%s\n", a);
    printf("%c\n", *p);
    printf("%c\n", *a);
    printf("%s\n", p);
 
    for(int i = 0; a[i] != '\0'; i++)
    printf("%c", a[i]);
 
}

답) 

Art
A
A
Art
Art

 

 

18. 2023년 1회차 (2)

int main(){
 
    char* a = "qwer";
    char* b = "qwtety";
 
    for(int i = 0; a[i] != '\0' ; i++){
        for(int j = 0; b[j] != '\0'; j++){
            if(a[i] == b[j]) printf("%c", a[i]);
        }
    }
 
}

답) qwe

 

 

19. 2023년 2회차 (1)

 

조건 : 입력값이 54321일 경우 출력값이 43215여야 한다.

int main(void) {
 
    int n[5];
    int i;
 
    for (i = 0; i < 5; i++) {
        printf("숫자를 입력해주세요 : ");
        scanf("%d", &n[i]);
    }
 
    for (i = 0; i < 5; i++) {
        printf("%d", (            ) );
    }
 
  return 0;
 
}

답)  n[(i+1) % 5]

 

 

20. 2023년 2회차 (2)

 

조건 : 홍길동, 김철수, 박영희 순서로 주어진다.

#include <stdio.h>
#include <string.h>

char n[30];

char *test() {
    printf("입력하세요 : ");
    fgets(n, sizeof(n), stdin);
    
    // 개행 문자 제거 (fgets는 개행까지 읽어옴)
    n[strcspn(n, "\n")] = '\0';
    
    return n;
}

int main() {
    char *test1;
    char *test2;
    char *test3;

    test1 = test();   // 첫 번째 입력
    test2 = test();   // 두 번째 입력 (n 덮어쓰기)
    test3 = test();   // 세 번째 입력 (n 덮어쓰기)

    printf("%s\n", test1);
    printf("%s\n", test2);
    printf("%s", test3);

    return 0;
}

답) 

박영희

박영희

박영희

 

 

21. 2023년 2회차 (3)

void main(){
    int n[3] = {73, 95, 82};
    int sum = 0;
 
    for(int i=0;i<3;i++){
        sum += n[i];
    }
 
    switch(sum/30){
        case 10:
        case 9: printf("A");
        case 8: printf("B");
        case 7:
        case 6: printf("C");
        default: printf("D");
    }
}

답) BCD

 

 

22.2023년 2회차 (4)

#include <stdio.h>
#define MAX_SIZE 10

int isWhat[MAX_SIZE];
int point = -1;

int isEmpty() {
    return point == -1;
}

int isFull() {
    return point == MAX_SIZE - 1;
}

void into(int num) {
    if (isFull()) {
        printf("Full\n");
    } else {
        isWhat[++point] = num;
    }
}

int take() {
    if (isEmpty()) {
        printf("Empty\n");
        return -1; // 에러 상황에 대한 반환값
    } else {
        return isWhat[point--];
    }
}

int main() {
    int e;
    into(5); into(2);

    while (!isEmpty()) {
        printf("%d ", take());
        into(4); into(1); printf("%d ", take());
        into(3); printf("%d ", take()); printf("%d ", take());
        into(6); printf("%d ", take()); printf("%d ", take());
    }

    return 0;
}

답)  213465

 

 

23. 2023년 3회차 (1)

#include <stdio.h>
#include <stdlib.h>

typedef struct Data {
    char c;
    int *numPtr;
} Data;

int main() {
    int num = 10;
    Data d1;
    Data *d2 = malloc(sizeof(Data));  // struct Data도 OK지만 typedef 썼으니 그냥 Data로

    d1.numPtr = &num;
    d2 (  빈칸  )  numPtr = &num; 

    printf("%d\n", *d1.numPtr);   // → 10
    printf("%d\n", *d2->numPtr);  // → 10

    free(d2);
    return 0;
}

출력결과

10

10

 

답) 

 

 

24. 2023년 3회차 (2)

#include <stdio.h> 

int f(int n) {
    if (n <= 1) return 1;
    else return n * f(n - 1);
}

int main() {
    printf("%d", f(7));  // 7! = 5040
    return 0;
}

답) 5040

 

 

25. 2023년 3회차 (3)

#include <stdio.h>

int main() {
    char* p = "KOREA";

    printf("%s\n", p);        // 전체 문자열 출력: "KOREA"
    printf("%s\n", p + 1);    // 2번째 문자부터 출력: "OREA"
    printf("%c\n", *p);       // 첫 문자 출력: 'K'
    printf("%c\n", *(p + 3)); // 4번째 문자 출력: 'E'
    printf("%c\n", *p + 4);   // 'K'의 아스키값(75) + 4 = 79 → 문자 'O'
    
    return 0;
}

답)

KOREA  
OREA  
K  
E  
O

 

 

26.2024년 1회차 (1)

#include <stdio.h>
 
int main() {
 
    int v1 = 0, v2 = 35, v3 = 29;
    
    if(v1 > v2 ? v2 : v1) {
        v2 = v2 << 2;
    }else{
        v3 = v3 << 2;
    }
    
    printf("%d", v2+v3);

답) 151

 

 

27.2024년 1회차 (2)

#include <stdio.h>
#include <string.h>
 
void reverse(char* str){
    int len = strlen(str);
    char temp;
    char*p1 = str;
    char*p2 = str + len - 1;
    while(p1<p2){
        temp = *p1;
        *p1 = *p2;
        *p2 = temp;
        p1++;
        p2--;
    }
}
 
int main(int argc, char* argv[]){
    char str[100] = "ABCDEFGH";
 
    reverse(str);
 
    int len = strlen(str);
 
    for(int i=1; i<len; i+=2){
        printf("%c",str[i]);
    }
 
    printf("\n");
 
    return 0;
 
}

답) GECA

 

 

28. 2024년 1회차 (3)

#include <stdio.h>
#include <stdlib.h>

typedef struct {
    int accNum;
    double bal;
} BankAcc;

// 거듭제곱 계산 함수 (복리 계산용)
double calcPower(double base, int year) {
    double r = 1.0;
    for (int i = 0; i < year; i++) {
        r *= base;
    }
    return r;
}

// 계좌 초기화 함수
void initAcc(BankAcc *acc, int accNumber, double balance) {
    acc->accNum = accNumber;
    acc->bal = balance;
}

// 입출금 처리 함수
void transact(BankAcc *acc, double *amount) {
    if (*amount > 0 && *amount < acc->bal) {
        acc->bal -= *amount;  // 출금
    } else {
        acc->bal += *amount;  // 입금
    }
}

// 복리 이자 적용 함수 (3년간 연 10%)
void applyInterest(BankAcc *acc) {
    acc->bal *= calcPower(1 + 0.1, 3);  // 1.1^3 = 약 1.331
}

int main() {
    BankAcc myAcc;
    initAcc(&myAcc, 9981, 2200.0);

    double amount = 100.0;

    transact(&myAcc, &amount);   // 100 출금
    applyInterest(&myAcc);       // 복리 적용

    printf("%d and %.2f\n", myAcc.accNum, myAcc.bal);

    return 0;
}

답) 9981 and 2795.10

 

 

29. 2024년 1회차 (4)

#include <stdio.h>
#include <ctype.h>

int main() {
    char* p = "It is 8";
    char result[100];
    int i;

    for (i = 0; p[i] != '\0'; i++) {
        if (isupper(p[i]))
            result[i] = (p[i] - 'A' + 5) % 26 + 'A';  // 
        else if (islower(p[i]))
            result[i] = (p[i] - 'a' + 10) % 26 + 'a';
        else if (isdigit(p[i]))
            result[i] = (p[i] - '0' + 3) % 10 + '0';
        else
            result[i] = p[i];
    }

    result[i] = '\0';
    printf("%s\n", result);

    return 0;
}

답) Nd s c 1

 

.

30. 2024년 2회차 (1)

#include <stdio.h>
 
int main() {
    int arr[3][3] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
    int* parr[2] = {arr[1], arr[2]};
    printf("%d", parr[1][1] + *(parr[1]+2) + **parr);
    
    return 0;
}

답)21

 

 

31. 2024년 2회차 (2)

#include <stdio.h>
#include <string.h>
 
void sumFn(char* d, const char* s) {
 
    while (*s) {
        *d = *s;
        d++;
        s++;
    }
    *d = '\0'; 
}
 
int main() {
   const char* str1 = "first";
    char str2[50] = "teststring";  
    int result=0;
    sumFn(str2, str1);
 
    for (int i = 0; str2[i] != '\0'; i++) {
        result += i;
    }
    printf("%d", result);
    
    return 0;
}

답)10

 

 

32.2024년 2회차 (3) 

#include <stdio.h>
 
void swap(int a, int b) {
    int t = a;
    a = b;
    b = t;
}
 
int main() {
    
    int a = 11;
    int b = 19;
    swap(a, b);
    
    switch(a) {
        case 1:
            b += 1;
        case 11:
            b += 2;
        default:
            b += 3;
        break;
    }
    
    printf("%d", a-b);
}

답) -13 

 

 

33. 2024년 2회차 (4)

#include <stdio.h>
 
struct node {
    int n1;
    struct node *n2;
};
 
int main() {
 
    struct node a = {10, NULL};
    struct node b = {20, NULL};
    struct node c = {30, NULL};
 
    struct node *head = &a;
    a.n2 = &b;
    b.n2 = &c;
 
    printf("%d\n", head->n2->n1);
 
    return 0;
}

답) 20

 

 

34. 2024년 3회차 (1)

#include <stdio.h>
 
int func(){
 static int x =0; 
  x+=2; 
  return x;
}
 
int main(){
  int x = 1; 
  int sum=0; 
  for(int i=0;i<4;i++) {
    x++; 
    sum+=func();
  } 
  printf("%d", sum);
 
  return 0;
}

답)20

 

 

35. 2024년 3회차 (2)

#include <stdio.h>
 
struct Node {
 int value;
 struct Node* next;
};
 
void func(struct Node* node){
  while(node != NULL && node->next != NULL){
     int t = node->value;
     node->value = node->next->value;
     node->next->value = t;
     node = node->next->next;
  }
}
 
int main(){
  struct Node n1 = {1, NULL};
  struct Node n2 = {2, NULL};
  struct Node n3 = {3, NULL};
  
  n1.next = &n3;
  n3.next = &n2;
 
  func(&n1);  
 
  struct Node* current = &n1;
 
  while(current != NULL){
    printf("%d", current->value);
    current = current->next;
 }
 
 return 0;
 
}

답) 312

 

 

36. 2024년 3회차 (3)

#include <stdio.h>
 
void func(int** arr, int size){
  for(int i=0; i<size; i++){
     *(*arr + i) = (*(*arr+i) + i) % size;
  }
}
 
int main(){
  int arr[] = {3,1, 4, 1, 5};
  int* p = arr;
  int** pp = &p;
  int num = 6;
  
  func(pp, 5);  
  num = arr[2];
  printf("%d", num);  
 
  return 0;
}

 

답)1

 

 

 

 

 

 

 

 

 

728x90
반응형