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 <= 1) return 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 == 0) return 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가 된다.