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

2022 정보처리기사 실기 2회 프로그래밍 문제 해설(15번, 16번, 17번)

by picker_life 2024. 3. 17.
반응형

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

문제

15. 다음 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
#include <stdio.h>
 
int len(char *p);
 
int main(){
 
  char *p1 = "2022";
  char *p2 = "202207";  
  
  int a = p1;
  int b = p2;
  
  printf("%d", len(a) + len(b));
 
}
 
int len(char*p){
  int r = 0;
  while(*!= '\0'){
    p++;
    r++;
  }
return r;
}
cs

 

정답

10

해설

printf를 통해 출력되는 값은 a와 b의 길이의 합이다. 2022의 길이는 4에 해당하고, 202207의 길이는 6에 해당하기 때문에 합은 10이다. 따라서 10이 출력된다.

2022 정보처리기사 실기 2회 16번

문제

16. 다음 C언어 코드에서 알맞는 출력값을 작성하시오.

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 argc, char *argv[]) {
int a[4= {0248};
int b[3= {};
int i = 1;
int sum = 0;
int *p1;
 
for (i; i < 4; i++) {
p1 = a + i;
b[i-1= *p1 - a[i-1];
sum = sum + b[i-1+ a[i];
}
 
printf("%d", sum);
 
return 0;
}
cs

 

정답

22

해설

이 코드는 a와 b의 계산결과를 sum에 저장하고 출력하는 코드이다.

  1. 배열 a는 {0, 2, 4, 8}로 초기화된다.
  2. 배열 b는 크기가 3인데, 모든 원소가 기본적으로 0으로 초기화된다.
  3. sum 변수는 0으로 초기화된다.
  4. p1은 정수형 포인터이다.

for 루프는 i가 1부터 시작하여 3까지 반복된다. 

  • p1은 배열 a의 i 번째 원소를 가리킨다 (a[i]의 주소).
  • b[i-1] = *p1 - a[i-1]; 이 계산은 b[i-1]에 a[i] - a[i-1]의 값을 저장
  • sum = sum + b[i-1] + a[i]; 이 계산은 sum에 b[i-1]과 a[i]의 합을 더한다.

루프 반복

  1. 첫 번째 반복 (i=1):
    • p1 = a + 1; (즉, p1은 a[1]을 가리킨다)
    • b[0] = a[1] - a[0] = 2 - 0 = 2;
    • sum = 0 + 2 + a[1] = 0 + 2 + 2 = 4;
  2. 두 번째 반복 (i=2):
    • p1 = a + 2; (즉, p1은 a[2]을 가리킨다)
    • b[1] = a[2] - a[1] = 4 - 2 = 2;
    • sum = 4 + 2 + a[2] = 4 + 2 + 4 = 10;
  3. 세 번째 반복 (i=3):
    • p1 = a + 3; (즉, p1은 a[3]을 가리킨다)
    • b[2] = a[3] - a[2] = 8 - 4 = 4;
    • sum = 10 + 4 + a[3] = 10 + 4 + 8 = 22;

따라서 최종 sum 값은 22이며, 프로그램의 출력값은 22이다.

 

2022 정보처리기사 실기 2회 17번

문제

17. 다음 자바코드에서 알맞는 출력값을 작성하시오.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class Conv{ 
public Conv(int a) {
this.a = a;
int func() {
int b =1
for (int i=1; i<a; i++){ 
= a * i + b; 
}
return a +b;
}
int a;
}
 
public static void main(String[] args){
Conv obj = new Conv(3);
obj.a=5
int b = obj.func();
System.out.print(obj.a + b);
i
}
cs

 

 

 

정답

61

해설

 

main 메서드는 Conv 객체 obj를 생성하고, 생성자에 3을 전달하여 a를 3으로 초기화한다. 다음, obj.a를 5로 변경한다.

이제 obj.func()가 호출될 때 다음과 같이 작동한다.

  • 클래스의 멤버 변수 a는 5
  • func 메서드에서, 변수 b는 1로 초기화된다.
  • for 루프는 i = 1부터 시작하여 i < a (즉, i < 5)이 될 때까지 실행된다. 따라서 루프는 i = 1, 2, 3, 4에 대해 실행된다.
  • 각 반복에서, b는 a * i + b로 업데이트된다. 즉, b는 다음과 같이 변화한다:
    • 첫 번째 반복: b = 5 * 1 + 1 = 6
    • 두 번째 반복: b = 5 * 2 + 6 = 16
    • 세 번째 반복: b = 5 * 3 + 16 = 31
    • 네 번째 반복: b = 5 * 4 + 31 = 51
  • func 메서드는 a + b, 즉 5 + 51 = 56을 반환한다.

마지막으로, main 메서드는 obj.a + b, 즉 5 + 56 = 61을 출력한다.