기말고사 대비 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;
}
|
댓글 없음:
댓글 쓰기