2025년 12월 9일 화요일

기말고사 대비 C언어 모의고사 문제

기말고사 대비 C언어 모의고사

문제 1.

다음 프로그램은 10진수 50을 2진수로 변환하여 8비트로 출력하는 코드이다.

빈칸 ㉠, ㉡에 들어갈 코드를 쓰고, 프로그램 실행 결과를 쓰시오.

#include <stdio.h>

int main(void){
    int bin[8];
    int n = 50;

    for(int i = 7; i >= 0; i--){
        bin[i] = n % 2;
        n = n / ㉠;
    }

    for(int i = 0; i < 8; i++)
        printf("%d", ㉡);

    return 0;
}

문제 2.

다음 프로그램을 실행했을 때 화면에 출력되는 두 개의 정수를 위에서부터 차례대로 쓰시오.

#include <stdio.h>

int main(void){
    int a[] = {8, 14, 22, 31, 47, 53};
    int *p = a + 2;
    int *q = a + 5;

    printf("%d\n", *(q - 3) + *p);

    p = a;
    q = p + 4;
    printf("%d\n", *q - *(p + 1));

    return 0;
}

문제 3.

다음 프로그램은 배열을 선택 정렬로 오름차순 정렬한 후, 값 42를 이진 탐색으로 찾아 위치를 출력하는 코드이다.

(1) ㉠에 들어갈 while문의 조건식을 쓰고,

(2) ㉡에 들어갈 비교 연산자를 쓰고,

(3) 프로그램 실행 결과로 출력되는 정수를 쓰시오.

#include <stdio.h>

int main(void){
    int x[] = {42, 7, 19, 56, 33};
    int n = 5;
    int key = 42;
    int l = 0, r = n - 1, m;

    for(int i = 0; i < n - 1; i++){
        int idx = i;
        for(int j = i + 1; j < n; j++)
            if(x[j] < x[idx])
                idx = j;
        int t = x[i];
        x[i] = x[idx];
        x[idx] = t;
    }

    while(㉠){
        m = (l + r) / 2;

        if(key == x[m]) break;
        else if(key < x[m])
            r = m - 1;
        else
            l = m + 1;
    }

    if(key ㉡ x[m])
        printf("%d\n", m);

    return 0;
}

문제 4.

다음 프로그램은 3×3 정수 배열의 각 행에서 가장 작은 값을 찾아 출력하는 코드이다.

(1) ㉠, ㉡에 들어갈 코드를 쓰고,

(2) 프로그램 실행 결과로 출력되는 세 정수를 순서대로 쓰시오.

#include <stdio.h>

int main(void){
    int d[3][3] = {
        {9, 4, 7},
        {2, 15, 3},
        {6, 8, 1}
    };

    for(int i = 0; i < 3; i++){
        int m = ㉠;
        for(int j = 0; j < 3; j++)
            if(d[i][j] < m)
                m = d[i][j];
        printf("%d ", ㉡);
    }

    return 0;
}

문제 5.

다음 프로그램은 정수 5개를 입력받아 평균을 구하고, 값의 구간별 개수를 출력하는 코드이다.

사용자가 순서대로 70 55 90 40 50을 입력한다고 할 때,

(1) ㉠, ㉡, ㉢, ㉣에 들어갈 코드를 쓰고,

(2) 프로그램 실행 결과를 모두 쓰시오.

#include <stdio.h>

int main(void){
    int v[5];
    int tot = 0;
    int big = 0, mid = 0, small = 0;

    for(int i = 0; i < 5; i++){
        printf("%d번째 값: ", ㉠);
        scanf("%d", ㉡);
        tot += v[i];

        if(㉢)
            big++;
        else if(v[i] >= 30)
            mid++;
        else
            small++;
    }

    printf("평균: %d\n", ㉣);
    printf("50 이상: %d\n", big);
    printf("30~49: %d\n", mid);
    printf("30 미만: %d\n", small);

    return 0;
}

문제 6.

다음 프로그램은 먼저 학생 수를 입력받고, 각 학생의 학번과 점수를 입력받은 뒤, 입력된 점수 중 최저 점수를 출력하는 코드이다.

입력이 다음과 같다고 할 때,

  • 첫 줄: 학생 수 4
  • 이후 입력(학번, 점수 순서로 4명):
    • 101 76
    • 102 88
    • 103 69
    • 104 90

(1) ㉠, ㉡, ㉢에 들어갈 코드를 쓰고,
(2) 프로그램 실행 결과로 출력되는 값을 쓰시오.

#include <stdio.h>
#define MAX 10

int main(void){
    int id[MAX], sc[MAX];
    int n;
    int min = 101;

    scanf("%d", &n);

    for(int i = 0; ㉠; i++){
        scanf("%d", &id[i]);
        scanf("%d", &sc[i]);

        if(㉡)
            min = sc[i];
    }

    printf("%d\n", ㉢);

    return 0;
}

문제 7.

다음 프로그램은 입력받은 정수 n의 팩토리얼(n! = 1 × 2 × ... × n)을 구하는 코드이다.

사용자가 정수 4를 입력했다고 할 때,

(1) ㉠, ㉡에 들어갈 코드를 쓰고,

(2) 프로그램 실행 결과를 쓰시오.

#include <stdio.h>

int main(void){
    int n;
    int res = 1;

    printf("정수 입력: ");
    scanf("%d", &n);

    for(int i = 1; i <= n; i++){
        ㉠ 
    }

    printf("%d", ㉡);

    return 0;
}

문제 8.

다음 프로그램을 실행했을 때 화면에 출력되는 두 개의 정수를 위에서부터 차례대로 쓰시오.

#include <stdio.h>

int main(void){
    int arr[] = {3, 6, 9, 12, 15};
    int *p = &arr[1]; 
    int *q = arr + 4; 

    printf("%d\n", *q - *p);

    p++; 
    q = q - 2; 
    printf("%d\n", *p + *q);

    return 0;
}

문제 9.

다음 프로그램은 배열에서 가장 큰 값(최댓값)의 인덱스(위치)를 찾아 출력하는 코드이다.

(1) ㉠에 들어갈 비교 연산자를 쓰고,

(2) ㉡에 들어갈 코드를 쓰고,

(3) 프로그램 실행 결과로 출력되는 정수를 쓰시오.

#include <stdio.h>

int main(void){
    int data[] = {12, 45, 7, 23, 56, 9};
    int n = 6;
    int max_idx = 0;

    for(int i = 1; i < n; i++){
        if(data[i] ㉠ data[max_idx]){
            max_idx = ㉡;
        }
    }

    printf("%d\n", max_idx);

    return 0;
}

문제 10.

다음 프로그램은 2행 3열 배열의 모든 요소를 순회하며 10보다 큰 수의 합계를 구하는 코드이다.

(1) ㉠, ㉡에 들어갈 코드를 쓰고,

(2) 프로그램 실행 결과를 쓰시오.

#include <stdio.h>

int main(void){
    int arr[2][3] = {
        {5, 12, 8},
        {15, 3, 20}
    };
    int sum = 0;

    for(int i = 0; i < 2; i++){
        for(int j = 0; j < 3; j++){
            if(arr[i][j] > 10)
                sum += ㉠;
        }
    }

    printf("%d", ㉡);

    return 0;
}

문제 11.

다음 프로그램은 정수 5개가 저장된 배열을 역순(거꾸로)으로 뒤집는 코드이다.

(1) ㉠, ㉡에 들어갈 코드를 쓰고,

(2) 프로그램 실행 결과를 모두 쓰시오.

#include <stdio.h>

int main(void){
    int arr[5] = {1, 2, 3, 4, 5};
    int temp;

    for(int i = 0; i < 2; i++){
        temp = arr[i];
        arr[i] = arr[4 - i];
        arr[4 - i] = ㉠;
    }

    for(int i = 0; i < 5; i++)
        printf("%d ", ㉡);

    return 0;
}

문제 12.

다음 프로그램은 1부터 입력받은 정수 n까지의 합(누적 합)을 구하여 출력하는 코드이다.

사용자가 정수 5를 입력했다고 할 때,

(1) 빈칸 ㉠, ㉡에 들어갈 코드를 쓰고,

(2) 프로그램 실행 결과를 쓰시오.

#include <stdio.h>

int main(void){
    int n, sum = 0;
    
    printf("정수 입력: ");
    scanf("%d", &n);

    for(int i = 1;  ㉠ ; i++){
         ㉡ 
    }

    printf("%d", sum);

    return 0;
}

문제 13.

다음 프로그램을 실행했을 때 화면에 출력되는 두 개의 정수를 위에서부터 차례대로 쓰시오.

#include <stdio.h>

int main(void){
    int arr[] = {10, 20, 30, 40, 50};
    int *p = arr;      
    int *q = arr + 3;  

    printf("%d\n", *(p + 1) + *q);

    p++;
    q--;
    printf("%d\n", *q - *p);

    return 0;
}

문제 14.

다음 프로그램은 정수 배열을 버블 정렬(Bubble Sort)을 이용하여 오름차순으로 정렬하는 코드이다.

(1) ㉠에 들어갈 비교 연산자를 쓰고,

(2) ㉡에 들어갈 변수명을 쓰고,

(3) 프로그램 실행 결과로 출력되는 정수를 쓰시오.

#include <stdio.h>

int main(void){
    int a[] = {8, 3, 5, 1, 9};
    int n = 5;
    int temp;

    for(int i = 0; i < n - 1; i++){
        for(int j = 0; j < n - 1 - i; j++){
            if(a[j] ㉠ a[j+1]){
                temp = a[j];
                a[j] = a[j+1];
                a[j+1] = ㉡;
            }
        }
    }

    printf("%d\n", a[2]); 

    return 0;
}

문제 15.

다음 프로그램은 3×3 정수 배열의 대각선 요소(왼쪽 위에서 오른쪽 아래로)의 합계를 구하는 코드이다.

(1) ㉠, ㉡에 들어갈 코드를 쓰고,

(2) 프로그램 실행 결과를 쓰시오.

#include <stdio.h>

int main(void){
    int m[3][3] = {
        {10, 2, 3},
        {4, 20, 6},
        {7, 8, 30}
    };
    int sum = 0;

    for(int i = 0; i < 3; i++){
        sum += ㉠;
    }

    printf("%d", ㉡);

    return 0;
}

문제 16.

다음 프로그램은 정수 5개를 입력받아 그중 짝수의 개수와 홀수의 합을 출력하는 코드이다.

사용자가 순서대로 2 5 8 11 14를 입력한다고 할 때,

(1) ㉠, ㉡, ㉢에 들어갈 코드를 쓰고,

(2) 프로그램 실행 결과를 모두 쓰시오.

#include <stdio.h>

int main(void){
    int num[5];
    int even_cnt = 0;
    int odd_sum = 0;

    for(int i = 0; i < 5; i++){
        scanf("%d", &num[i]);

        if(num[i] % 2 ㉠ 0)
            even_cnt++;
        else
            odd_sum ㉡ num[i];
    }

    printf("짝수 개수: %d\n", ㉢);
    printf("홀수 합: %d\n", odd_sum);

    return 0;
}

문제 17.

다음 프로그램은 10진수 37을 2진수로 변환하여 8비트로 출력하는 코드이다.

빈칸 ㉠, ㉡에 들어갈 코드를 쓰고, 프로그램 실행 결과를 쓰시오.

#include <stdio.h>

int main(void){
    int bin[8];
    ㉠;

    for(int i = 7; i >= 0; i--){
        bin[i] = n % 2;
        ㉡;
    }

    for(int i = 0; i < 8; i++)
        printf("%d", bin[i]);

    return 0;
}

문제 18.

다음 프로그램을 실행했을 때 화면에 출력되는 두 개의 정수를 위에서부터 차례대로 쓰시오.

#include <stdio.h>

int main(void){
    int a[] = {3, 5, 9, 12, 20, 25};
    int *p = a + 1;
    int *q = a + 4;

    printf("%d\n", *q - *(p - 1));

    p = a + 2;
    q = a + 3;
    printf("%d\n", *q + *(p + 1));

    return 0;
}

문제 19.

다음 프로그램은 정수 배열을 선택 정렬로 오름차순 정렬한 후, 값 25를 선형 탐색으로 찾아 위치를 출력하는 코드이다.

(1) ㉠에 들어갈 while문의 조건식을 쓰고,

(2) ㉡에 들어갈 if문의 조건식을 쓰고,

(3) 프로그램 실행 결과로 출력되는 정수를 쓰시오.

#include <stdio.h>

int main(void){
    int x[] = {30, 12, 7, 25, 18};
    int n = 5;
    int key = 25;
    int pos = -1;

    for(int i = 0; i < n - 1; i++){
        int idx = i;
        for(int j = i + 1; j < n; j++)
            if(x[j] < x[idx])
                idx = j;
        int t = x[i];
        x[i] = x[idx];
        x[idx] = t;
    }

    int i = 0;
    while(㉠){
        if(x[i] == key){
            pos = i;
            break;
        }
        i++;
    }

    if(㉡)
        printf("%d\n", pos);

    return 0;
}

문제 20.

다음 프로그램은 3×3 정수 배열의 각 열에서 가장 큰 값을 찾아 출력하는 코드이다.

(1) ㉠, ㉡에 들어갈 코드를 쓰고,

(2) 프로그램 실행 결과로 출력되는 세 정수를 순서대로 쓰시오.

#include <stdio.h>

int main(void){
    int d[3][3] = {
        {5, 9, 2},
        {11, 4, 7},
        {6, 8, 10}
    };

    for(int j = 0; j < 3; j++){
        int m = ㉠;
        for(int i = 0; i < 3; i++)
            if(d[i][j] > m)
                m = d[i][j];
        printf("%d ", ㉡);
    }

    return 0;
}

문제 21.

다음 프로그램은 정수 5개를 입력받아 평균을 구하고, 값의 구간별 개수를 출력하는 코드이다.

사용자가 순서대로 80 35 70 55 20을 입력한다고 할 때,

(1) ㉠, ㉡, ㉢, ㉣에 들어갈 코드를 쓰고,

(2) 프로그램 실행 결과를 모두 쓰시오.

#include <stdio.h>

int main(void){
    int v[5];
    int tot = 0;
    int high = 0, mid = 0, low = 0;

    for(int i = 0; i < 5; i++){
        printf("%d번째 값: ", ㉠);
        scanf("%d", ㉡);
        tot += v[i];

        if(㉢)
            high++;
        else if(v[i] >= 40)
            mid++;
        else
            low++;
    }

    printf("평균: %d\n", ㉣);
    printf("70 이상: %d\n", high);
    printf("40~69: %d\n", mid);
    printf("40 미만: %d\n", low);

    return 0;
}

문제 22.

다음 프로그램은 먼저 학생 수를 입력받고, 각 학생의 학번과 점수를 입력받은 뒤, 입력된 점수 중 최고 점수를 받은 학생의 학번을 출력하는 코드이다.

입력이 다음과 같다고 할 때,

  • 첫 줄: 학생 수 4
  • 이후 입력(학번, 점수 순서로 4명):
    • 101 76
    • 102 88
    • 103 69
    • 104 90

(1) ㉠, ㉡, ㉢에 들어갈 코드를 쓰고,

(2) 프로그램 실행 결과로 출력되는 값을 쓰시오.

#include <stdio.h>
#define MAX 10

int main(void){
    int id[MAX], sc[MAX];
    int n;
    int max = -1;
    int max_id = 0;

    scanf("%d", &n);

    for(int i = 0; i < ㉠; i++){
        scanf("%d", &id[i]);
        scanf("%d", &sc[i]);

        if(㉡){
            max = sc[i];
            max_id = id[i];
        }
    }

    printf("%d\n", ㉢);

    return 0;
}

문제 23.

다음 프로그램은 크기가 5인 정수 배열의 모든 요소를 왼쪽으로 한 칸씩 이동(회전)시키고, 맨 앞에 있던 값은 맨 뒤로 이동시키는 코드이다.
(1) ㉠, ㉡에 들어갈 코드를 쓰고,
(2) 프로그램 실행 결과를 모두 쓰시오.

#include <stdio.h>

int main(void){
    int a[5] = {10, 20, 30, 40, 50};
    int temp = a[0];

    for(int i = 0; i < 4; i++){
        a[i] = ㉠;
    }
    a[4] = ㉡;

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

    return 0;
}

문제 24.

다음 프로그램에서 포인터 연산을 이용하여 배열의 값을 계산하는 코드이다. 프로그램 실행 결과로 출력되는 두 개의 정수를 위에서부터 차례대로 쓰시오.

#include <stdio.h>

int main(void){
    int a[] = {5, 12, 20, 27, 35, 42};
    int *p = a + 1;
    int *q = a + 4;

    printf("%d\n", *(q - 2) + 5);

    p = a;
    printf("%d\n", *(p + 3));

    return 0;
}

문제 25.

다음 프로그램은 배열을 버블 정렬로 오름차순 정렬한 뒤, 값 25의 위치(인덱스)를 출력하는 코드이다.

(1) ㉠, ㉡에 들어갈 for문의 조건식을 쓰고,

(2) 프로그램 실행 결과로 출력되는 정수를 쓰시오.

#include <stdio.h>

int main(void){
    int x[] = {25, 9, 31, 17, 40};
    int n = 5;
    int key = 25;
    int idx = -1;

    for(int i = 0; ㉠; i++){
        for(int j = 0;  ㉡; j++){
            if(x[j] > x[j + 1]){
                int t = x[j];
                x[j] = x[j + 1];
                x[j + 1] = t;
            }
        }
    }

    for(int i = 0; i < n; i++){
        if(x[i] == key){
            idx = i;
            break;
        }
    }

    if(idx != -1)
        printf("%d\n", idx);

    return 0;
}

문제 26.

다음 프로그램은 3×3 정수 배열에서 각 행의 합을 구하여 출력하는 코드이다.

(1) ㉠, ㉡에 들어갈 코드를 쓰고,

(2) 프로그램 실행 결과로 출력되는 세 정수를 순서대로 쓰시오.

#include <stdio.h>

int main(void){
    int d[3][3] = {
        {2, 5, 7},
        {4, 1, 9},
        {6, 3, 8}
    };

    for(int i = 0; i < 3; i++){
        int s = 0;
        for(int j = 0; j < 3; j++)
            ㉠
        printf("%d ", ㉡);
    }

    return 0;
}

문제 27.

다음 프로그램은 정수 4개를 입력받아 평균을 구하고, 점수 구간별로 개수를 세어 출력하는 코드이다.

사용자가 순서대로 85 60 45 90을 입력한다고 할 때,

(1) ㉠, ㉡, ㉢에 들어갈 코드를 쓰고,

(2) 프로그램 실행 결과를 모두 쓰시오.

#include <stdio.h>

int main(void){
    int v[4];
    int tot = 0;
    int high = 0, mid = 0, low = 0;

    for(int i = 0; i < 4; i++){
        scanf("%d", &v[i]);
        tot += ㉠;

        if(v[i] >= 80)
            high++;
        else if(㉡)
            mid++;
        else
            low++;
    }

    printf("평균: %d\n", tot / ㉢);
    printf("80 이상: %d\n", high);
    printf("60~79: %d\n", mid);
    printf("60 미만: %d\n", low);

    return 0;
}

문제 28.

다음 프로그램은 먼저 학생 수를 입력받고, 각 학생의 학번과 점수를 입력받은 뒤, 최댓값을 가진 학생의 학번을 출력하는 코드이다.

입력이 다음과 같다고 할 때,

  • 첫 줄: 학생 수 4
  • 이후 입력(학번, 점수 순서로 4명):
    • 201 70
    • 202 95
    • 203 88
    • 204 95

(1) ㉠, ㉡, ㉢에 들어갈 코드를 쓰고,

(2) 프로그램 실행 결과로 출력되는 값을 쓰시오.

#include <stdio.h>
#define MAX 10

int main(void){
    int id[MAX], sc[MAX];
    int n;
    int max = -1;
    int max_id = 0;

    scanf("%d", &n);

    for(int i = 0; i < n; i++){
        scanf("%d", &id[i]);
        scanf("%d", &sc[i]);

        if(㉠){
            max = sc[i];
            ㉡ = id[i];
        }
    }

    printf("%d\n", ㉢);

    return 0;
}

댓글 없음:

댓글 쓰기