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

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

by picker_life 2024. 4. 12.
반응형

2021 정보처리기사 필기 2회 63번

문제

63. 다음 C언어 프로그램이 실행되었을 때의 결과는?   

1
2
3
4
5
6
7
8
9
10
 
#include <stdio.h>
int main(int argc, char *argv[]) {
    int a = 4;
    int b = 7;
    int c = a | b;
 
    printf("%d", c);
    return 0;
}
cs

 

① 3

② 4     

③ 7

④ 10

정답 

3번

 

해설

 

이 C 언어 프로그램의 주요 부분은 두 정수 변수 a와 b를 비트 OR 연산하는 것입니다. 비트 OR 연산은 각 비트 위치에 대해 두 연산자 중 하나라도 1이면 결과의 해당 비트를 1로 설정합니다.

변수 a의 값은 4이고, 이를 이진수로 표현하면 0100입니다. 변수 b의 값은 7이고, 이를 이진수로 표현하면 0111입니다.

두 이진수를 비트 OR 연산하면 결과는 0111이 됩니다, 이는 십진수로 7입니다.

따라서, 이 프로그램을 실행했을 때의 결과는 7이므로, 정답은 ③ 7 입니다.

 

2021 정보처리기사 필기 2회 64번

문제

64. 다음 파이썬(Python) 프로그램이 실행되었을 때의 결과는?          

1
2
3
4
5
6
7
8
9
10
11
12
class FourCal:
    def setdata(self, fir, sec):
        self.fir = fir
        self.sec = sec
    
    def add(self):
        result = self.fir + self.sec
        return result
 
a = FourCal()
a.setdata(4, 2)
print(a.add())
cs

 

① 0

② 2     

③ 4

④ 6

정답 

4번

해설

이 코드는 FourCal이라는 이름의 클래스를 정의하고 있으며, 이 클래스에는 setdata와 add라는 두 개의 메소드가 있습니다. setdata 메소드는 객체의 fir와 sec 속성을 설정하고, add 메소드는 이 두 속성을 더한 결과를 반환합니다.

코드의 마지막 세 줄에서는 FourCal 클래스의 객체 a를 생성하고, setdata 메소드를 호출하여 fir에는 4, sec에는 2를 설정합니다. 그리고 add 메소드를 호출하여 이 두 값을 더한 결과를 출력합니다.

4와 2를 더하면 결과는 6이므로, 이 프로그램을 실행하면 출력 결과는 6입니다.

정답은 ④ 6입니다.

 

2021 정보처리기사 필기 2회 67번

문제

67. 다음 JAVA 프로그램이 실행되었을 때의 결과는?    

1
2
3
4
5
6
7
8
9
public class Operator{
    public static void main(String[] args) {
        int x=5, y=0, z=0;
        y = x++;
        z = --x;
        System.out.print(x + " , " + y + " , " + z);
    }
}
 
cs

 

① 5, 5, 5

② 5, 6, 5     

③ 6, 5, 5

④ 5, 6, 4

정답 

1번

해설

  1. x는 5로 초기화됩니다.
  2. y는 x++에 의해 x의 현재 값인 5로 설정되고, 이후 x는 1 증가하여 6이 됩니다.
  3. z는 --x에 의해 x의 값이 먼저 1 감소하므로, x는 5가 되고, 그 값이 z에 할당됩니다.
  4. 따라서 System.out.print(x + " , " + y + " , " + z); 이 구문은 5 , 5 , 5를 출력합니다.

따라서 정답은 1번 입니다.

 

2021 정보처리기사 필기 2회 70번

문제

70. 다음 JAVA 프로그램이 실행되었을 때의 결과는?         

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class array1 {
    public static void main(String[] args) {
        int cnt = 0;
        do {
            cnt++;
        } while (cnt < 0);
        if(cnt==1)
            cnt++;
        else
            cnt = cnt + 3;
        System.out.printf("%d", cnt);
    }
}
 
cs

 

① 2

② 3     

③ 4

④ 5

정답 

1번

해설

코드는 cnt라는 정수 변수를 0으로 초기화한 다음, do-while 루프에 진입합니다. 이 루프는 cnt를 1 증가시킵니다. while 루프의 조건은 cnt < 0입니다. 하지만 do-while은 루프 조건을 확인하기 전에 블록 내의 명령어를 최소 한 번 실행하기 때문에, cnt는 1 증가한 상태가 됩니다. 그래서 조건이 바로 거짓이 되고, 루프는 단 한 번만 실행됩니다.

루프 다음에는 if-else 문이 있습니다. 루프 후 cnt는 1이므로 if 브랜치에 들어가 cnt를 한 번 더 증가시켜, 2가 됩니다. else 블록은 실행되지 않습니다.

마지막으로, 코드는 cnt의 값을 출력합니다. 결과적으로 cnt의 값은 2이므로 프로그램의 출력값은 2가 됩니다.

따라서 질문에 대한 답은 ① 2입니다.

 

2021 정보처리기사 필기 2회 72번

문제

72. 다음 C언어 프로그램이 실행되었을 때의 결과는?          

1
2
3
4
5
6
7
8
#include <stdio.h>
int main(int argc, char *argv[]) {
    char a;
    a = 'A' + 1;
    printf("%d", a);
    return 0;
}
 
cs

 

① 1

② 11     

③ 66

④ 98

정답 

3번

해설

이 코드에서 변수 a는 문자 'A'의 아스키 코드 값에 1을 더한 값으로 초기화됩니다. 'A'의 아스키 코드 값은 65이므로, 1을 더하면 66이 됩니다. printf 함수는 이 값을 정수 형태로 출력하므로, 프로그램은 66을 출력합니다.

정답은 ③ 66입니다.

 

2021 정보처리기사 필기 2회 73번

문제

73. 다음 C언어 프로그램이 실행되었을 때의 결과는?          

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
int main(int argc, char *argv[]) {
    int a[2][2= {{1122}, {4455}};
    int i, sum = 0;
    int *p;
    p = a[0];
    for(i = 1; i < 4; i++)
    {
        sum += *(+ i);
    }
    printf("%d", sum);
    return 0;
}
 
cs

 

① 55

② 77     

③ 121

④ 132

정답 

3번

해설

 
 

이 코드를 실행하면, 2차원 배열 a에 있는 원소들의 값을 포인터를 통해 합산하는 연산을 수행합니다. 포인터 p는 배열 a의 첫 번째 원소인 11을 가리키고, for 루프 안에서는 p + i를 통해 배열의 다음 원소들을 참조하여 그 값들을 sum에 누적합니다.

루프는 i가 1부터 3까지 변하면서 다음을 수행합니다:

  • 첫 번째 반복에서: sum += *(p + 1); => sum = 0 + 22; => sum = 22;
  • 두 번째 반복에서: sum += *(p + 2); => sum = 22 + 44; => sum = 66;
  • 세 번째 반복에서: sum += *(p + 3); => sum = 66 + 55; => sum = 121;

따라서, 프로그램의 결과는 sum의 값인 121을 출력하는 것입니다. 선택지 중 ③ 121이 정답입니다.

 

2021 정보처리기사 필기 2회 77번

문제

77. C언어에서 연산자 우선순위가 높은 것에서 낮은 것으로 바 르게 나열된 것은?          

1
2
3
4
5
6
㉠ - ()
㉡ - ==
㉢ - <
㉣ - <<
㉤ - ||
㉥ - /
cs

 

① ㉠, ㉥, ㉣, ㉢, ㉡, ㉤

② ㉠, ㉣, ㉥, ㉢, ㉡, ㉤     

③ ㉠, ㉣, ㉥, ㉢, ㉤, ㉡

④ ㉠, ㉥, ㉣, ㉤, ㉡, ㉢

정답 

1번

해설

C언어에서 연산자의 우선순위는 다음과 같습니다:

  1. 괄호 ()
  2. 논리 AND &&
  3. 비트 시프트 <<, >>
  4. 관계 <, >
  5. 동등 ==, !=
  6. 논리 OR ||

이를 바탕으로 연산자의 우선순위를 높은 것부터 낮은 것으로 나열하면, ㉠, ㉥, ㉡, ㉢, ㉣, ㉤의 순서가 됩니다.

따라서 정답은 ① ㉠, ㉥, ㉣, ㉢, ㉡, ㉤ 입니다.

 

2021 정보처리기사 필기 2회 78번

문제

78. C언어 라이브러리 중 stdlib.h에 대한설명으로 옳은 것은?     

 

① 문자열을 수치 데이터로 바꾸는 문자 변환함수와 수치를 문자열로 바꿔주는 변환함수 등이 있다.     

② 문자열 처리 함수로 strlen()이 포함되어 있다.     

③ 표준 입출력 라이브러리이다.     

④ 삼각 함수, 제곱근, 지수 등 수학적인 함수를 내장하고 있다.

정답 

1번

해설

stdlib.h는 C 표준 라이브러리의 일부로, 일반 유틸리티 함수들을 제공합니다. 여기에는 동적 메모리 관리, 난수 생성, 환경 제어, 정렬 및 검색, 수치 변환 등의 함수가 포함됩니다. 특히 문자열을 수치 데이터로 변환하는 atoi, atof 등의 함수와 수치를 문자열로 변환하는 itoa 같은 함수(이것은 표준이 아니지만 일반적으로 사용됨)가 포함되어 있습니다.

  • ①은 stdlib.h에 포함된 함수의 설명으로 정확합니다.
  • ②의 strlen() 함수는 string.h 라이브러리에 포함되어 있습니다.
  • ③은 stdio.h 라이브러리의 설명입니다.
  • ④는 math.h 라이브러리의 함수를 설명하고 있습니다.

따라서 정답은 ①입니다.

 

2021 정보처리기사 필기 2회 79번

문제

79. 자바스크립트(JavaScript)와 관련한 설명으로 틀린 것은?

(문제 오류로 가답안 발표시 2번으로 발표되었지만 확정 답 안 발표시 모두 정답처리 되었습니다. )     

 

① 프로토타입(Prototype)의 개념이 존재한다.     

② 클래스 기반으로 객체 상속을 지원한다.    

③ Prototype Link와 Prototype Object를 활용할 수 있다.     

④ 객체지향 언어이다