문제1 (22년 1회 6번)
문제1 : 결과 값을 구하시오
소스 :
#include <stdio.h>
int main() {
int n, count = 0;
scanf("%d", &n);
for (int i = 2; i <= n / 2; i++) {
if (i % 1 == 0) {
count++;
}
}
printf("%d", count);
return 0;
}
정답 확인
해설 : 7을 입력하면 반복문은 i=2, 3까지만 돈다. i % 1 == 0은 모든 정수에 대해 항상 참이므로 count가 두 번 증가해 2가 출력된다. 원문 코드는 소수 판별처럼 보이지만 실제로는 그렇지 않다.
문제2 (22년 1회 9번)
문제2 : 결과 값을 구하시오
소스 :
#include <stdio.h>
int main() {
int n = 3, r = 0;
for (int i = 1; i < 10; i = i + 2) {
r = r + n * i;
}
printf("%d", r);
return 0;
}
정답 확인
해설 : i는 1, 3, 5, 7, 9까지 돈다. 각 항에 3을 곱해 더하면 3×(1+3+5+7+9)=3×25=75이다.
문제3 (22년 1회 14번)
문제3 : 결과 값을 구하시오
소스 :
#include <stdio.h>
int main() {
int n1 = 15, n2 = 22;
n1 ^= n2;
n2 ^= n1;
n1 ^= n2;
printf("%d %d", n1, n2);
return 0;
}
정답 확인
해설 : XOR 스왑 패턴이다. 임시 변수 없이 n1과 n2의 값을 교환하므로 최종적으로 n1은 22, n2는 15가 된다.
문제4 (22년 1회 17번)
문제4 : 결과 값을 구하시오
소스 :
#include <stdio.h>
int main() {
int num = 35, evencnt = 0, oddcnt = 0;
for (int i = 1; i <= num; i++) {
if (i % 2 == 0) {
evencnt++;
} else {
oddcnt++;
}
}
printf("%d %d", evencnt, oddcnt);
return 0;
}
정답 확인
해설 : 1부터 35까지는 총 35개다. 짝수는 17개, 홀수는 18개이므로 17 18이 출력된다.
문제5 (22년 2회 1번)
문제5 : 결과 값을 구하시오
소스 :
#include <stdio.h>
int main() {
int a = 27, b = 12;
int l, g;
for (int i = b; i > 0; i--) {
if (a % i == 0 && b % i == 0) {
g = i;
break;
}
}
l = a * b / g;
printf("%d", g + l);
return 0;
}
정답 확인
해설 : 27과 12의 최대공약수는 3이다. 최소공배수는 27×12÷3=108이므로 둘의 합은 111이다.
문제6 (22년 2회 7번)
문제6 : 결과 값을 구하시오
소스 :
#include <stdio.h>
int main() {
int sum = 0;
int i = 0;
for (i = 0; i <= 10; i++) {
if (i % 2 != 0) {
continue;
}
sum += i;
}
printf("%d", i + sum);
return 0;
}
정답 확인
해설 : 짝수만 더하므로 sum은 30이 된다. 반복문이 끝난 뒤 i는 11이므로 i+sum=41이다.
문제7 (22년 2회 14번)
문제7 : 결과 값을 구하시오
소스 :
#include <stdio.h>
int main() {
int arr[6];
int max = 0, min = 99;
int sum = 0;
for (int i = 0; i < 6; i++) {
arr[i] = i * i;
sum += arr[i];
}
for (int i = 0; i < 6; i++) {
if (max < arr[i]) max = arr[i];
if (min > arr[i]) min = arr[i];
}
printf("%.2f", (sum - max - min) / 4.0);
return 0;
}
정답 확인
해설 : 배열 값은 0, 1, 4, 9, 16, 25이고 총합은 55다. 최대값 25와 최소값 0을 빼면 30, 이를 4로 나누면 7.50이다.
문제8 (22년 2회 15번)
문제8 : 결과 값을 구하시오
소스 :
#include <stdio.h>
#include <math.h>
int check(int a) {
int n = (int)sqrt(a);
int i = 2;
while (i <= n) {
if (a % i == 0) return 0;
i++;
}
return 1;
}
int main() {
int arr[5];
for (int i = 0; i < 5; i++) {
arr[i] = (i + 2) + (i * 2);
}
for (int i = 0; i < 5; i++) {
printf("%d", check(arr[i]));
}
return 0;
}
정답 확인
해설 : arr 값은 2, 5, 8, 11, 14가 된다. 소수 여부는 1, 1, 0, 1, 0이므로 11010이 출력된다.
문제9 (22년 2회 19번)
문제9 : 결과 값을 구하시오
소스 :
#include <stdio.h>
int main() {
char a[3][5] = {"KOR", "HUM", "RES"};
char *pa[] = {a[0], a[1], a[2]};
int n = sizeof(pa) / sizeof(pa[0]);
for (int i = 0; i < n; i++) {
printf("%c", pa[i][i]);
}
return 0;
}
정답 확인
해설 : pa[0][0]=K, pa[1][1]=U, pa[2][2]=S 이므로 KUS가 출력된다.
문제10 (22년 3회 6번)
문제10 : 결과 값을 구하시오
소스 :
#include <stdio.h>
int main() {
int a[3][5] = {
{27, 13, 21, 41, 12},
{11, 20, 17, 35, 15},
{21, 15, 32, 14, 10}
};
int sum, ssum = 0;
for (int i = 0; i < 3; i++) {
sum = 0;
for (int j = 0; j < 5; j++) {
sum += a[i][j];
}
ssum += sum;
}
printf("%d", ssum);
return 0;
}
정답 확인
해설 : 각 행의 합은 114, 98, 92이고 전체 합은 304이다.
문제11 (22년 3회 8번)
문제11 : 결과 값을 구하시오
소스 :
#include <stdio.h>
int main() {
int i = 1, n = 0;
while (i <= 50) {
if (i % 7 == 0) {
n += i;
}
i++;
}
printf("%d", n);
return 0;
}
정답 확인
해설 : 50 이하의 7의 배수 7, 14, 21, 28, 35, 42, 49를 모두 더하면 196이다.
문제12 (22년 3회 16번)
문제12 : 결과 값을 구하시오
소스 :
#include <stdio.h>
int main() {
int n, sum = 0;
printf("정수를 입력하시오 : ");
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
sum = sum + i;
}
printf("%d", sum);
return 0;
}
정답 확인
해설 : 입력값이 5이므로 1부터 5까지 더한 15가 출력된다.
문제13 (23년 1회 4번)
문제13 : 빈칸에 들어갈 값을 구하시오
소스 :
#include <stdio.h>
#define LEN 10
void swap(int arr[], int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
int partition(int arr[], int left, int right) {
int pivot = arr[(left + right) / (가)];
while (left <= right) {
while (arr[left] < pivot) left++;
while (arr[right] > pivot) right--;
if (left <= right) {
swap(arr, left, right);
left++;
right--;
}
}
return left;
}
정답 확인
해설 : pivot을 가운데 인덱스로 선택하는 코드이므로 (left + right) / 2가 맞다.
문제14 (23년 1회 5번)
문제14 : 빈칸에 들어갈 값을 구하시오
소스 :
#include <stdio.h>
int SumNTo1(int n) {
if (n <= 1) {
return 1;
} else {
return n + (가);
}
}
int main() {
int result = SumNTo1(100);
printf("%d", result);
return 0;
}
정답 확인
해설 : 1부터 n까지의 합을 재귀로 만들려면 현재 n에 대해 바로 아래 단계인 n-1의 합을 더해야 한다.
문제15 (23년 1회 16번)
문제15 : 빈칸에 들어갈 값을 구하시오
소스 :
#include <stdio.h>
int recursive(int n) {
if (n <= 1) {
return 1;
} else {
return n * n + recursive((가));
}
}
int main() {
int i;
scanf("%d", &i);
printf("%d ", recursive(i));
return 0;
}
정답 확인
해설 : 현재 n의 제곱을 더하고 한 단계 작은 값으로 재귀 호출해야 하므로 n-1이 들어간다.
문제16 (23년 2회 3번)
문제16 : 결과 값을 구하시오
소스 :
#include <stdio.h>
int main() {
int d = 55;
int n = 4;
int r = 0, q = 0;
r = d;
while (r >= 4) {
r = r - n;
q++;
}
printf("%d 그리고 ", q);
printf("%d", r);
return 0;
}
정답 확인
해설 : 55에서 4를 반복해서 빼면 13번 빼고 나머지 3이 남는다.
문제17 (23년 2회 16번)
문제17 : 빈칸에 들어갈 값을 구하시오
소스 :
#include <stdio.h>
void Sort(int a[][6]) {
for (int i = 0; i <= 4; i++) {
for (int j = 5; j >= 0; j--) {
if (i == 0 || i == 4 || j == 0 || j == 5) {
printf("%3d", a[i][j]);
} else {
printf(" ");
}
}
printf("\n");
}
}
int main() {
int a[5][6] = {
{0, 1, 2, 3, 4, 5},
{6, 7, 8, 9, 10, 11},
{12, 13, 14, 15, 16, 17},
{18, 19, 20, 21, 22, 23},
{24, 25, 26, 27, 28, 29}
};
Sort(a);
return 0;
}
정답 확인
해설 : 각 행을 오른쪽에서 왼쪽으로 출력하되 바깥 테두리만 출력한다. 그래서 안쪽 양 끝에 보이는 값이 17, 12, 23, 18이다.
문제18 (23년 2회 17번)
문제18 : 결과 값을 구하시오
소스 :
#include <stdio.h>
int main() {
char s1[5] = "abcd";
char s2[5];
for (int i = 0; i < 4; i++) {
s2[i] = s1[3 - i];
}
s2[4] = '\0';
printf("%s", s2);
return 0;
}
정답 확인
해설 : 문자열을 뒤에서부터 복사하므로 역순 문자열 dcba가 된다. 원문에는 널 종료 인덱스 오타가 있어 학습용으로 보정했다.
문제19 (23년 2회 18번)
문제19 : 결과 값을 구하시오
소스 :
#include <stdio.h>
int main() {
int a = 10;
char b = 'a';
printf("%d\n", a);
printf("%d\n", b);
printf("%c", b);
return 0;
}
정답 확인
97
a
해설 : 문자 a를 정수로 출력하면 아스키 코드 97이 나온다. 마지막은 문자 형식이므로 a가 출력된다.
문제20 (23년 2회 20번)
문제20 : 결과 값을 구하시오
소스 :
#include <stdio.h>
int main() {
int result = 1;
for (int i = 1; i <= 5; i++) {
result *= i;
}
printf("%d", result);
return 0;
}
정답 확인
해설 : 1부터 5까지 곱한 값인 5! = 120이다.
문제21 (23년 3회 2번)
문제21 : 결과 값을 구하시오
소스 :
#include <stdio.h>
#define MAX 4
int prin(int a) {
if (a > 1) {
prin(a - 1);
}
printf("%d", a);
return 0;
}
int main() {
prin(MAX);
return 0;
}
정답 확인
해설 : 재귀 호출이 먼저 끝난 뒤 출력하므로 1부터 4까지 순서대로 이어진다.
문제22 (23년 3회 5번)
문제22 : 빈칸에 들어갈 값을 구하시오
소스 :
#include <stdio.h>
#define SIZE 5
int p[4][2] = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};
int snail(int a[SIZE][SIZE]) {
int i = 0, j = 0, v = 1, c = 0;
a[i][j] = v;
v += 1;
while (v <= SIZE * SIZE) {
int ni = i + p[c][0];
int nj = j + p[c][1];
if (0 <= ni && ni < SIZE && 0 <= nj && nj < SIZE && a[ni][nj] == 0) {
i = ni;
j = nj;
a[i][j] = v;
v += 1;
} else {
c = (c + 1) % (가);
}
}
return 0;
}
정답 확인
해설 : 달팽이 배열은 방향이 4개이므로 방향 전환 인덱스도 4로 순환해야 한다.
문제23 (23년 3회 7번)
문제23 : 결과 값을 구하시오
소스 :
#include <stdio.h>
int main() {
int data[] = {15, 12, 26, 23, 31, 36};
int temp = 0;
int cnt = sizeof(data) / sizeof(int);
for (int i = 0; i < cnt - 1; i++) {
for (int j = 0; j < cnt - 1 - i; j++) {
if (data[j] > data[j + 1]) {
temp = data[j];
data[j] = data[j + 1];
data[j + 1] = temp;
}
}
}
for (int i = 1; i < cnt - 1; i++) {
printf("%d ", data[i]);
}
return 0;
}
정답 확인
해설 : 정렬 뒤 배열은 12, 15, 23, 26, 31, 36이 된다. 첫 번째와 마지막을 제외한 값만 출력한다.
문제24 (23년 3회 9번)
문제24 : 결과 값을 구하시오
소스 :
#include <stdio.h>
int sub(int *a) {
printf("%d", *a);
printf("%d", a[2]);
return 0;
}
int main() {
int a[10] = {1, 2, 3, 4, 5, 6};
sub(a);
sub(a + 2);
return 0;
}
정답 확인
해설 : sub(a)는 1과 3을, sub(a+2)는 3과 5를 출력하므로 전체 결과는 1335다.
문제25 (23년 3회 13번)
문제25 : 빈칸에 들어갈 값을 구하시오
소스 :
#include <stdio.h>
int compare(int i, int j, int *ma, int *in) {
if (i > j) {
*ma = j;
*in = i;
} else {
*ma = i;
*in = j;
}
return 0;
}
int main() {
int max = 0;
int min = 0;
compare(3, 7, (가), (나));
printf("작은수:%d 큰수:%d", max, min);
return 0;
}
정답 확인
해설 : 포인터 인자로 변수의 주소를 넘겨야 값이 저장된다. 3은 max 자리에, 7은 min 자리에 들어간다.
문제26 (24년 1회 1번)
문제26 : 결과 값을 구하시오
소스 :
#include <stdio.h>
#include <string.h>
int main() {
char *str = "abCDEfGh";
int count = 0;
for (int i = 0; i < strlen(str); i++) {
char ch = str[i];
if (ch >= 'A' && ch <= 'Z') {
count++;
}
}
printf("%d", count);
return 0;
}
정답 확인
해설 : 대문자는 C, D, E, G 총 4개다.
문제27 (24년 1회 18번)
문제27 : 결과 값을 구하시오
소스 :
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
int N = 2;
char *str[2];
for (int i = 0; i < N; i++) {
char input[100];
scanf("%s", input);
str[i] = (char *)malloc(strlen(input) + 1);
strcpy(str[i], input);
}
while (N > 0) {
printf("%d번 출력 :", N);
for (int i = (int)strlen(str[N - 1]) - 1; i >= 0; i--) {
printf("%c", str[N - 1][i]);
}
printf("\n");
N--;
}
return 0;
}
정답 확인
1번 출력 :gnirts
해설 : string, test를 입력하면 뒤에서부터 꺼내 각 문자열을 역순 출력한다. 따라서 test → tset, string → gnirts 순서가 된다. 원문 오타는 보정했다.
문제28 (24년 1회 19번)
문제28 : 결과 값을 구하시오
소스 :
#include <stdio.h>
int main() {
int sum = 0;
int i = 329;
do {
sum = 999 % i;
i++;
} while (sum != 0);
printf("%d", i);
return 0;
}
정답 확인
해설 : 999가 333으로 나누어떨어진다. 루프 안에서 i++이 먼저 일어나므로 최종 출력은 334다. 원문 구두점 오타는 보정했다.
문제29 (24년 2회 3번)
문제29 : 결과 값을 구하시오
소스 :
#include <stdio.h>
int main() {
int i = 3;
int j = 5;
printf("%d", (i | j) - (i & j));
return 0;
}
정답 확인
해설 : 3은 011, 5는 101이다. OR은 7, AND는 1이므로 결과는 6이다.
문제30 (24년 2회 5번)
문제30 : 결과 값을 구하시오
소스 :
#include <stdio.h>
struct number {
float i;
float j;
};
int main() {
struct number a = {3.0, 4.0};
struct number b = {4.0, 5.0};
printf("%.2f 그리고 %.2f", a.i + b.i, a.j + b.j);
return 0;
}
정답 확인
해설 : 각 구조체의 같은 필드를 더하면 7.0과 9.0이 된다. 소수 둘째 자리까지 출력하므로 7.00 그리고 9.00이다.
문제31 (24년 2회 7번)
문제31 : 빈칸에 들어갈 값을 구하시오
소스 :
#include <stdio.h>
int main() {
int n = 3;
for (int i = 1; i <= 9; i++) {
printf("%d*%d=%d\n", n, i, (가));
}
return 0;
}
정답 확인
해설 : 3단의 결과 부분에는 n과 i의 곱이 들어가야 하므로 n*i가 맞다.
문제32 (24년 2회 9번)
문제32 : 결과 값을 구하시오
소스 :
#include <stdio.h>
int main() {
int n1 = 11;
int n2 = 0;
int *p = NULL;
p = &n1;
n2 = *p + n1;
printf("%d", *p - n1 + n2);
return 0;
}
정답 확인
해설 : *p는 11이고 n2는 22가 된다. 따라서 11-11+22=22다.
문제33 (24년 2회 17번)
문제33 : 결과 값을 구하시오
소스 :
#include <stdio.h>
int main() {
int a[5] = {3, 4, 5, 10, 2};
int *p = a;
int temp;
for (int i = 0; i < 5; i++) {
for (int j = i + 1; j < 5; j++) {
if (*(p + i) > *(p + j)) {
temp = *(p + i);
*(p + i) = *(p + j);
*(p + j) = temp;
}
}
printf("%d ", *(p + i));
}
return 0;
}
정답 확인
해설 : 선택 정렬과 비슷하게 작은 값을 앞으로 보내며 각 단계의 값을 출력한다. 최종 출력은 오름차순 2 3 4 5 10이다.
문제34 (24년 3회 4번)
문제34 : 결과 값을 구하시오
소스 :
#include <stdio.h>
union Number {
int intV;
int floatV;
};
struct data {
union Number n1;
union Number n2;
char isInt;
};
void func(struct data *a) {
if (a->isInt) {
a->n1.intV += a->n2.intV;
} else {
a->n1.floatV += a->n2.floatV;
}
}
int main() {
struct data a = {{.intV = 5}, {.floatV = 3.5}, 1};
func(&a);
printf("%d", a.n1.intV);
return 0;
}
정답 확인
해설 : isInt가 1이므로 intV 기준으로 더한다. union의 floatV도 실제 선언은 int라서 3.5는 3처럼 취급되어 5+3=8이 된다.
문제35 (24년 3회 9번)
문제35 : 결과 값을 구하시오
소스 :
#include <stdio.h>
void swap(int *ptr1, int *ptr2) {
int temp = *ptr1;
*ptr1 = *ptr2;
*ptr2 = temp;
}
void func(int *arr, int n) {
int *ptr1 = &arr[0];
int *ptr2 = &arr[n - 1];
while (ptr1 < ptr2) {
swap(ptr1, ptr2);
ptr1++;
ptr2--;
}
}
int main() {
int arr[] = {1, 2, 3, 4, 5};
func(arr, 5);
printf("%d", arr[2]);
return 0;
}
정답 확인
해설 : 배열을 뒤집어도 홀수 길이 배열의 가운데 값은 그대로다. 따라서 arr[2]는 3이다.
문제36 (24년 3회 11번)
문제36 : 결과 값을 구하시오
소스 :
#include <stdio.h>
int main() {
int sum = 0;
int i = 0;
for (i = 0; i <= 10; i++) {
if (i % 2 != 0) {
continue;
}
sum += i;
}
printf("%d", i + sum);
return 0;
}
정답 확인
해설 : 짝수 합 30에 반복 종료 후 i값 11을 더하므로 41이다.
문제37 (24년 3회 14번)
문제37 : 결과 값을 구하시오
소스 :
#include <stdio.h>
int factorial(int n, int from, int to, int temp) {
if (n == 0) {
return 0;
} else {
return factorial(n - 1, from, temp, to) + 1
+ factorial(n - 1, temp, to, from);
}
}
int main() {
int n = 3;
printf("%d", factorial(n, 3, 2, 1));
return 0;
}
정답 확인
해설 : 점화식은 T(n)=2T(n-1)+1, T(0)=0 형태다. 하노이 탑 이동 횟수와 같아서 n=3일 때 7이 된다.
문제38 (24년 3회 19번)
문제38 : 결과 값을 구하시오
소스 :
#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;
}
정답 확인
해설 : 각 원소를 (현재값 + 인덱스) % 5로 바꾼다. arr[2]는 (4+2)%5=1이 되므로 출력은 1이다.
'정보처리산업기사' 카테고리의 다른 글
| 정보처리산업기사 실기 Python 기출문제 정리 (0) | 2026.04.09 |
|---|---|
| 정보처리산업기사 실기 Java 기출문제 정리 (1) | 2026.04.09 |
| 정보처리산업기사 실기 Python 기출 10문제 (0) | 2026.04.07 |
| 정보처리산업기사 실기 Python 문법 정리 (0) | 2026.04.07 |
| 정보처리산업기사 실기 C언어 기출 10문제 (0) | 2026.04.07 |