본문 바로가기
카테고리 없음

2022 정보처리기사 실기 1회 프로그래밍 문제 해설(14번, 15번, 19번)

by picker_life 2024. 3. 19.
반응형

2022 정보처리기사 실기 1회 14번

문제

14. 다음 소스코드에서 입력값이 5가 들어왔을때 출력되는 값을 작성하시오.

 

1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
int func(int a) {
  if (a <= 1return 1;
  return a * func(a - 1);
}
 
int main() {
  int a;
  scanf("%d"&a);
  printf("%d", func(a));
 
}
cs

 

정답

120

해설

함수 func는 재귀 함수로 정의되어 있으며, 팩토리얼을 계산한다. if (a <= 1) return 1;은 재귀 호출의 기본 사례로, a가 1 이하일 경우 1을 반환한다. 이는 팩토리얼 계산에서 0!과 1! 둘 다 1이기 때문이다. 그렇지 않은 경우, func 함수는

a * func(a - 1)을 반환하여 팩토리얼을 계산한다.

main 함수에서는 사용자로부터 정수 a를 입력 받고, func(a)를 호출하여 그 결과를 출력한다.

 

2022 정보처리기사 실기 1회 15번

문제

15. 다음 중, 괄호 ( ) 안에 들어갈 연산자를 써서 정수를 역순으로 출력하는 알맞는 답을 작성하시오.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
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;
 
}
cs

 

 

결과 : 4321

정답

1. >

2. %

3. /

해설

이 코드는 주어진 정수 number의 각 자릿수를 반대로 뒤집어서 result에 저장한 후, 그 결과를 출력하는 프로그램이다.

우선 while문이 정상적으로 동작하려면 1번 괄호를 통해 while조건이 true상태가 되어야 한다. 그런데 number에는 1234가 들어있고, 4321이라는 값을 출력하려면 number가 0보다 클 경우에만 계산하면 된다. 따라서 1번 괄호는 > 이 된다.

 

2번 괄호에는 number의 마지막 숫자를 result에 더하는 역할을 한다. 따라서 %연산자를 넣어서 10으로 나눈 나머지 값을 result에 넣어줄 수 있게 한다.

 

3번 괄호에는 number를 10으로 나눠서 다음 자리수를 계산하도록 해야한다. 따라서 나눗셈 연산자인 / 을 넣어줘야 한다.

 

 

2022 정보처리기사 실기 1회 19번

문제

19. 다음 소스코드가 실행할 때의 출력값을 작성하시오.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h> 
int isPrime(int number) { 
  int i; 
  for (i=2; i<number; i++) { 
    if (number % i == 0return 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
}
 
cs

 

 

정답

29

해설

이 C 프로그램은 주어진 숫자 number의 가장 큰 소수(prime) 약수를 찾아 출력한다. 소수 약수는 자기 자신과 1 이외에는 어떤 수로도 나눌 수 없는 약수를 의미한다.

함수 isPrime(int number)는 주어진 수가 소수인지 확인하여, 소수이면 1을, 소수가 아니면 0을 반환한다. main 함수에서는 주어진 숫자 number = 13195에 대하여 2부터 number보다 작은 수까지 반복하면서, 해당 수가 number의 약수이며 소수인지 확인한다. 그 중에서 가장 큰 값을 max_div에 저장한다.

이 경우, number인 13195의 소수 약수들을 찾아보면, 이들 중 가장 큰 값은 29이다. 따라서 프로그램의 출력값은 29가 된다.