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

2021 정보처리기사 실기 2회 프로그래밍 문제 해설

by picker_life 2024. 3. 24.
반응형

2021 정보처리기사 실기 2회 7번

문제

7. 파이썬 비트 연산자 코드 결과

 

1
2
3
4
5
6
a = 100
result = 0
for i in range(1,3);
   result = a >> i
   result = result + 1
pirnt(result)
cs

 

정답

26

해설

  1. a = 100: 변수 a에 100을 할당합니다. 100의 이진 표현은 1100100입니다.
  2. result = 0: 초기 결과값을 0으로 설정합니다.
  3. for i in range(1, 3): i의 값이 1부터 2까지 변하면서 루프가 두 번 실행됩니다.
    • 첫 번째 반복(i = 1): a를 오른쪽으로 1비트 시프트합니다. 100 (10진수)은 이진수로 1100100, 오른쪽으로 1비트 시프트하면 0110010이 됩니다. 10진수로 변환하면 50이 됩니다. 여기에 1을 더하면 result는 51이 됩니다.
    • 두 번째 반복(i = 2): a를 오른쪽으로 2비트 시프트합니다. 100 (10진수)의 이진 표현을 오른쪽으로 2비트 시프트하면 0011001이 되고, 이는 10진수로 25입니다. 여기에 1을 더하면 result는 26이 됩니다.
  4. print(result): 최종 결과를 출력합니다. 따라서 이 코드의 출력은 26이 됩니다.

 

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

문제

16. 다음은 C언어에 관한 소스코드이다. 실행 결과값을 작성

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int main(){
   int res;
   res = mp(2,10);
   printf("%d",res);
   return 0;
}
 
int mp(int base, int exp) {
   int res = 1;
   for(int i=0; i < exp; i++){
      res = res * base;
   }
   
   return res;
}
cs

 

 

정답

1024

해설

이 C 프로그램은 mp라는 함수를 정의하고 사용하여, 주어진 기본값(base)을 주어진 지수(exp)만큼 거듭제곱하는 연산을 수행합니다. main 함수에서는 mp 함수를 호출하여 2의 10승을 계산하고, 그 결과를 출력합니다.

프로그램의 주요 부분을 분석해 보겠습니다:

  1. mp 함수 정의: mp 함수는 두 개의 정수 인자, base와 exp를 받습니다. res 변수를 1로 초기화하고, for 루프를 사용하여 exp의 값만큼 base를 res에 곱합니다. 최종적으로 거듭제곱의 결과를 반환합니다.
  2. main 함수 실행:
    • res 변수를 선언합니다.
    • mp(2,10)을 호출하여 2의 10승을 계산하고, 그 결과를 res에 저장합니다.
    • printf를 사용하여 res의 값을 출력합니다.
    • 프로그램은 0을 반환하여 정상 종료를 나타냅니다.

mp(2, 10)의 호출은 2를 10번 거듭제곱하는 연산을 수행합니다. 이는 210=1024입니다.

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

문제

17. 클래스 내에서 객체 생성 없이 사용할 수 있는 메소드로 괄호안에 들어갈 알맞은 값을 작성

 

1
2
3
4
5
6
7
8
9
public class Test {
   public static void main(String[] args){
     System.out.print(test.check(1));
   }
   
   (    )  String check (int num) {
      return (num >= 0) ? "positive" : "negative";
   }
}
cs

 

정답

static

해설

괄호 안에는 check 메서드를 클래스 메서드(정적 메서드)로 만들기 위해 static이라는 키워드가 들어가야 합니다. 또한 이 메서드를 외부에서 접근 가능하게 하려면 public 접근 지정자도 사용하면 됩니다. 다만 이 경우에는 객체 생성 없이 사용할 수 있는 메소드로 만들기 위한 값이 들어가야 함으로 정답은 static이 됩니다.

 

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

문제

18. 음은 C언어 출력값을 작성

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
int main(){
 
int ary[3];
int s = 0;
*(ary+0)=1;
ary[1= *(ary+0)+2;
ary[2= *ary+3;
for(int i=0; i<3; i++){
  s=s+ary[i]
}
 
print("%d",s);
 
}
cs

 

 

정답

8

해설

  1. int ary[3];는 크기가 3인 정수형 배열 ary를 선언합니다.
  2. *(ary+0) = 1;는 배열의 첫 번째 요소(즉, ary[0])에 1을 할당합니다.
  3. ary[1] = *(ary+0) + 2;는 ary[0]의 값(1)에 2를 더한 값을 ary[1]에 할당합니다. 따라서 ary[1]의 값은 3이 됩니다.
  4. ary[2] = *ary + 3;는 배열의 첫 번째 요소의 값(1)에 3을 더한 값을 ary[2]에 할당합니다. 따라서 ary[2]의 값은 4가 됩니다.
  5. for 루프를 통해 배열의 모든 요소를 순회하며, s에 각 요소의 값을 더합니다. 즉, s는 1 + 3 + 4 = 8이 됩니다.
  6. printf("%d", s);는 합계 s의 값을 출력합니다. 따라서 출력값은 8입니다.

 

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

문제

19. JAVA 알맞는 출력값을 작성

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class over1 {
    public static void main(String[] args){
        ovr a1 = new ovr1();
        ovr a2 = new ovr2();
        System.out.println(a1.sun(3,2+ a2.sun(3,2));
    }
    
    int sun(int x, int y){
        return x + y;
    }
}
 
class ovr2 extends ovr1 {
 
    int sun(int x, int y){
        return x - y + super.sun(x,y);
    }
 
}
cs

 

정답

11

해설

  1. over1 클래스에는 main 메서드가 있으며, 여기서 ovr1과 ovr2 인스턴스, 즉 객체가 생성됩니다. 코드에서는 ovr1과 ovr가 혼용되어 사용되었는데, 이는 같은 클래스를 가리키는 것으로 가정하겠습니다.
  2. ovr1 클래스에는 sun 메서드가 있어야 하는데, 이 메서드는 두 정수를 더하는 기능을 수행합니다.
  3. ovr2 클래스는 ovr1을 상속받아 sun 메서드를 오버라이드합니다. 여기서는 두 번째 정수를 첫 번째 정수에서 빼고, 부모 클래스의 sun 메서드의 결과를 더합니다.

자바 코드에서 수정된 가정 하에, a1.sun(3,2)는 3과 2를 더해 5를 반환하고, a2.sun(3,2)는 3에서 2를 빼고 그 결과에 super.sun(x,y) 즉, 3과 2를 더한 결과(5)를 더해 최종적으로 6을 반환합니다. 따라서 자바 프로그램의 출력 결과는 5( a1.sun(3,2)의 결과)와 6(a2.sun(3,2)의 결과)를 더한 11이 됩니다.