2023 정보처리기사 실기 2회 5번
문제
5. C언어 문제 알맞은 출력 값 작성
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
int n[3] = [73, 95, 82]
sum = 0
for(i=0;i<3;i++){
sum += n[i];
}
switch(sum/30){
case 10:
case 9: printf("A");
case 8: printf("B");
case 7:
case 6: printf("C");
default: printf("D");
|
cs |
정답
BCD
해설
이 C 언어 코드는 배열 n의 모든 요소의 합을 계산하고, 그 합을 30으로 나눈 값을 기준으로 등급을 출력한다. 우선 n 배열의 합을 구하는 코드 부분이다.
1
2
3
4
5
6
|
int n[3] = [73, 95, 82];
sum = 0;
for(i = 0; i < 3; i++){
sum += n[i];
}
|
cs |
이 코드는 배열 n의 세 요소, 즉 73, 95, 82의 합을 구한다. 이들의 합은 73 + 95 + 82 = 250이다.
다음으로, 이 합을 30으로 나누고 그 결과에 따라 등급을 출력하는 부분이다.
1
2
3
4
5
6
7
8
|
switch(sum/30){
case 10:
case 9: printf("A");
case 8: printf("B");
case 7:
case 6: printf("C");
default: printf("D");
}
|
cs |
이 코드의 sum/30은 250을 30으로 나눈 값, 즉 8.33이다. C언어에서 정수 나눗셈은 결과를 정수로 반환하기 때문에, 8.33도 정수 부분인 8로 처리된다.
따라서 switch 문은 case 8:에 해당되며, 여기서 printf("B");를 실행하게 된다. 그러나 C언어에서 switch 문에 break;가 없으면, 일치하는 case를 만나더라도 다음 case로 계속 진행한다. 이 코드에서는 case 8: 다음에 break;가 없으므로 "B"를 출력한 다음 case 7:, case 6:, default:도 실행되어 최종적으로 "BCD"를 출력하게 된다.
따라서 이 코드의 최종 출력값은 "BCD"이다.
2023 정보처리기사 실기 2회 7번
문제
7. 소스코드의 알맞은 출력 작성
1
2
3
4
5
6
7
8
9
10
11
|
#include <stdio.h>
int main(){
int c = 0;
for(int i = 1; i <=2023; i++) {
if(i%4 == 0) c++;
}
printf("%d", c);
}
|
cs |
정답
505
해설
이 C언어 프로그램은 1부터 2023까지의 정수 중에서 4로 나누어떨어지는 수, 즉 4의 배수의 개수를 세어 출력한다.
4의 배수는 매 4년마다 한 번씩 나타나므로, 1부터 2023까지의 범위 안에서 4로 나누어떨어지는 숫자의 총 개수를 찾는다.이는 기본적으로 2023을 4로 나눈 몫과 같다.
2023을 4로 나누면 몫은 505이므로 2020년까지 포함된 4의 배수의 개수이다.
따라서 이 프로그램은 505를 출력한다.
2023 정보처리기사 실기 2회 9번
문제
9. C언어 문제 알맞은 출력값을 작성
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
30
31
32
33
34
35
36
37
|
#include <stdio.h>
#define MAX_SIZE 10
int isWhat[MAX_SIZE];
int point= -1;
void into(int num) {
if (point >= 10) printf("Full");
isWhat[++point] = num;
}
int take() {
if (isEmpty() == 1) printf("Empty");
return isWhat[point--];
}
int isEmpty() {
if (point == -1) return 1;
return 0;
}
int isFull() {
if (point == 10) return 1;
return 0;
}
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;
}
|
cs |
정답
213465
해설
이 코드는 스택을 구현하는 C언어 프로그램이다. 스택은 '후입선출'(Last In, First Out, LIFO)의 속성을 가진 자료구조로, 마지막에 들어간 요소가 가장 먼저 나오는 특성을 가지고 있다.
여기에서 into 함수는 스택에 새로운 요소를 추가하고, take 함수는 스택에서 최상단(가장 마지막에 추가된) 요소를 제거하고 그 값을 반환한다. isEmpty 함수는 스택이 비어 있는지를 확인하고, isFull 함수는 스택이 가득 찼는지를 확인한다.
프로그램의 흐름을 따라가 보면 다음과 같다.
- 스택에 5와 2를 추가합니다 (into(5); into(2);).
- isEmpty()가 false를 반환하는 동안 (즉, 스택이 비어 있지 않는 동안) 다음 명령을 반복 실행한다.
- 스택에서 요소를 하나 꺼내 출력 (printf("%d", take());). 처음에는 2가 출력된다
- 그 후 4와 1을 스택에 추가
- 다시 스택에서 요소를 하나 꺼내 1을 출력 (printf("%d", take());).
- 3을 스택에 추가
- 스택에서 요소 두 개를 연속해서 꺼내 출력 이때 3과 4가 순서대로 출력된다
- 6을 스택에 추가
- 마지막으로 스택에서 요소 두 개를 꺼내 출력. 6과 5가 순서대로 출력된다
이 과정을 코드의 로직에 따라 실행하면, 스택의 특성상 마지막에 추가된 요소부터 차례대로 꺼내어 출력하므로 출력되는 숫자의 순서는 2, 1, 4, 3, 6, 5가 된다. 그리고 이후에는 while 루프를 탈출하게 되어 추가적인 출력은 없다.
따라서 프로그램의 최종 출력값은 214365이다.