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
해설
- a = 100: 변수 a에 100을 할당합니다. 100의 이진 표현은 1100100입니다.
- result = 0: 초기 결과값을 0으로 설정합니다.
- 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이 됩니다.
- 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승을 계산하고, 그 결과를 출력합니다.
프로그램의 주요 부분을 분석해 보겠습니다:
- mp 함수 정의: mp 함수는 두 개의 정수 인자, base와 exp를 받습니다. res 변수를 1로 초기화하고, for 루프를 사용하여 exp의 값만큼 base를 res에 곱합니다. 최종적으로 거듭제곱의 결과를 반환합니다.
- 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
해설
- int ary[3];는 크기가 3인 정수형 배열 ary를 선언합니다.
- *(ary+0) = 1;는 배열의 첫 번째 요소(즉, ary[0])에 1을 할당합니다.
- ary[1] = *(ary+0) + 2;는 ary[0]의 값(1)에 2를 더한 값을 ary[1]에 할당합니다. 따라서 ary[1]의 값은 3이 됩니다.
- ary[2] = *ary + 3;는 배열의 첫 번째 요소의 값(1)에 3을 더한 값을 ary[2]에 할당합니다. 따라서 ary[2]의 값은 4가 됩니다.
- for 루프를 통해 배열의 모든 요소를 순회하며, s에 각 요소의 값을 더합니다. 즉, s는 1 + 3 + 4 = 8이 됩니다.
- 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
해설
- over1 클래스에는 main 메서드가 있으며, 여기서 ovr1과 ovr2 인스턴스, 즉 객체가 생성됩니다. 코드에서는 ovr1과 ovr가 혼용되어 사용되었는데, 이는 같은 클래스를 가리키는 것으로 가정하겠습니다.
- ovr1 클래스에는 sun 메서드가 있어야 하는데, 이 메서드는 두 정수를 더하는 기능을 수행합니다.
- 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이 됩니다.