[정보처리기사] 실기 기출문제(2023) 풀이 C언어

728x90

문제 출처: https://newbt.kr/%EC%8B%9C%ED%97%98/%EC%A0%95%EB%B3%B4%EC%B2%98%EB%A6%AC%EA%B8%B0%EC%82%AC+%EC%8B%A4%EA%B8%B0

 

뉴비티 기출문제 문제은행 - 완전 새로운 CBT, iBT 문제풀이 시스템

기사, 공무원, 공인중개사 등 로그인 필요 없는 수백가지 시험 기출문제 문제은행 시험 자격증 족보 2024년 최신

newbt.kr

https://www.youtube.com/watch?v=L7-_T6IliK8&t=373

 

 

2023년 3회_1

#include <stdio.h>
int complete(int n) {
	int sum = 0;
    for(int j = 1; j <= n/2;, j++) {
    	if(n%j == 0) {
        	sum = sum + j;
        }
    }
    if(sum==n) {
    	return 1;
    } else{
    	return 0;
    }
}
int main() {
	int s = 0;
    for(int i = 1; i <= 100; i++) {
    	if(complete(i))
        	s += i;
    }
    printf("%d", s);
}
  • main(): 1부터 100까지의 숫자 중 완전수인 경우 s에 합계 저장
  • 완전수: 자기 자신을 제외한 약수의 합 = 자기 자신
    • ex) 1 + 2 + 3 = 6
  • complete 함수
complete(int n) n j j <= n/2 n%j == 0 sum
complete(6) 6 1 1 <= 3  T T 0 + 1 = 1
2 2 <= 3  T T 1 + 2 = 3
3 3 <= 3  T T 3 + 3 = 6
4 4 <= 3  F    
  • 완전수 6, 28, 496, 8128 ... 그냥 외우기

 

답: 34

 

 

2023년 3회_2

#include <stdio.h>

int main() {
	struct insa {
    	char name[10];
        int age;
	} a[] = {"Kim", 28, "Lee", 38, "Park", 41, "Choi", 30};		# 구조체 배열 선언
	
    struct insa *p;
    p = a;
    p++;
    printf("%s\n", p(  )name);
    printf("%d\n", p(  )age);
 }
 
 # 출력
 # LEE
 # 38
  a[0] a[1] a[2] a[3]
name Kim Lee Park Choi
age 28 38 41 30

 

화살표 연산자(- >)

  • 구조체 포인터 변수가 구조체 멤버에 접근할 때 사용하는 연산자

 

답: ->

 

 

2023년 3회_3

f(7) = 7 *f(6)
f(6) = 6 * f(5)
f(5) = 5 * f(4)
f(4) = 4 * f(3)
f(3) = 3 * f(2)
f(2) = 2 *  f(1)
f(1) = 1

 

답: 5040

 

 

2023년 3회_4

p[0] p[1] p[2] p[3] p[4]
K O R E A
1000번지 1001번지 1002번지 1003번지 1004번지

 

  • %s \n, p: 시작 위치부터 끝까지 출력 후 줄 바꿈
  • %s \n, p+1: 시작 위치 + 1부터 끝까지 출력 후 줄 바꿈
  • %c \n, *p: 포인터 변수 p에 저장된 값 출력 후 줄 바꿈
  • %c \n, *(p+3): 포인터 변수 p+3에 저장된 값 출력 후 줄 바꿈
  • %c, *p+4: *p에서('K') +4칸( K L M N 'O'), O 출력

답:

KOREA

OREA

K

E

O

 

 

2023년 2회_1

 

0 1 2 3 4
5 4 3 2 1
  • n[1] = 4이므로 n[0]이 4가 되려면 n[i+1]로 출력 가능
  • n[2] = 3, n[3] = 2, n[4] = 1
  • i < 5이므로 n[5]가 없어서 배열을 벗어나게 됨 
  • 배열을 로테이션해서 출력하기 위해서는 배열의 크기만큼 나머지 연산자를 이용하면 됨
  • n[i+1] % 5로 출력 가능
0 1 2 3 4
4 3 2 1 5

 

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

 

 

2023년 2회_2

 

  • sum = 250
  • sum / 30 = 8
  • case 8부터 끝까지 실행, break문으로 종료

답:BCD

 

 

2023년 2회_3

 

  • 스택 : 리스트의 한 쪽으로만 삽입과 삭제(출력)가 이루어지는 후입선출(LIFO) 형식의 자료구조
  • into / take,  push / pop
int main(int argc, char const *argv[]){
	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;
 }


# 다른 표현


int main(){
	int e;
    push(5);
    push(2)
    while(!isEmpty()){
    	printf("%d", pop());
        push(4); 
        push(1); 
        printf("%d", pop());
        push(3); printf("%d", pop); printf("%d", pop);
        push(6); printf("%d", pop); printf("%d", pop);
    }
   	return 0;
}

 

답: 213465

 

 

2023년 2회_4

  • 1부터 2023까지의 4의 배수 수

답: 505

 

 

2023년 2회_5

  • E[0] = 64, E[1] = 25, E[2] = 12, E[3] = 22, E[4] = 11
  • sizeof: 데이터 타입의 크기를 반환, int형은 4byte
  • n = sizeof(E) / sizeof(E[0]) = 5 * 4 / 4 = 5
  • swap 알고리즘 사용, E[i]와 E[j]를 비교해서 swap해야 함
  • 오름차순(디폴트)이면 >, 내림차순이면 < 

답: >

 

 

2023년 1회_1

%s\n, %c\n임

  • %s : 해당 포인터부터 문자열 출력
  • %c : 해당 포인터의 문자 하나 출력
  • char* p = NULL;    p = a; 했을 때, p에는 변수 a의 주소가 들어감 (NULL = 1000)
A r t
a[0] a[1] a[2]
1000번지 1001번지 1002번지

 

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

 

 

2023년 1회_2

  • a[i]와 a[j] 같은 경우 출력
a[0] a[1] a[2] a[3] a[4]
q w e r \0

 

b[0] b[1] b[2] b[3] b[4] b[5] b[6]
q w t e t y \0

 

답: qwe

 

 

2023년 1회_3

  • 2진수를 10진수로 변환하는 알고리즘을 구현한 while
input input == 0 sum di
      1
101110 → 10111 F 0 + (101110%10) * 1 = 0 2
10111 → 1011 F 0 + (10111%10) * 2 = 2 4
1011 → 101 F 2 + (1011%10) * 4 = 6 8
101 → 10 F 6 + (101%10) * 8 = 14 16
10 → 1 F 14 + (10%10) *16 = 14 32
1 → 0 F 14 + (1%10) * 32 = 46 32
0 T    

 

답: (a): % (b): 10

 

 

 

 

 

 

 

728x90