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

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

by picker_life 2024. 4. 25.
반응형

2022 정보처리기사 필기 2회 62번

문제

62. 다음 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 = 5, b = 3, c = 12;
    int t1, t2, t3;
 
    t1 = a && b;
    t2 = a || b;
    t3 = !c;
 
    printf("%d", t1 + t2 + t3);
    return 0;
}
 
cs
 
  1. 0
  2. 2
  3. 5
  4. 14

정답 

2번

해설

  • a는 5, b는 3, c는 12로 초기화되어 있습니다.
  • t1은 a && b 연산의 결과입니다. &&는 논리 AND 연산자이므로, 두 변수 모두 0이 아닌 값이면 참(1)을 반환합니다. a와 b 모두 0이 아니므로 t1은 1이 됩니다.
  • t2는 a || b 연산의 결과입니다. ||는 논리 OR 연산자이므로, 두 변수 중 하나라도 0이 아닌 값이면 참(1)을 반환합니다. 여기서도 a와 b 모두 0이 아니기 때문에 t2는 1입니다.
  • t3는 !c 연산의 결과입니다. !는 논리 NOT 연산자이며, 변수 c가 0이 아니면 !c는 거짓(0)을 반환합니다. c는 12이므로 t3는 0입니다.

최종적으로 printf 함수는 t1, t2, t3를 모두 더한 값을 출력합니다. 즉, 1 + 1 + 0을 계산하여 2를 출력합니다.

따라서 정답은 2 입니다.

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

문제

63. 다음 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
#include <stdio.h>
struct st{
    int a;
    int c[10];
};
 
int main(int argc, char *argv[]) {
    int i = 0;
    struct st ob1;
    struct st ob2;
    ob1.a = 0;
    ob2.a = 0;
 
    for(i = 0; i < 10; i++) {
        ob1.c[i] = i;
        ob2.c[i] = ob1.c[i] + i;
    }
 
    for(i = 0; i < 10; i = i+2) {
        ob1.a = ob1.a + ob1.c[i];
        ob2.a = ob2.a + ob2.c[i];
    }
 
    printf("%d", ob1.a + ob2.a);
    return 0;
}
 
cs

 

  1. 30
  2. 60
  3. 80
  4. 120

정답 

2번

해설

  1. 구조체 st의 두 인스턴스 ob1과 ob2가 선언되었습니다. ob1과 ob2의 a 멤버는 0으로 초기화되었습니다.
  2. 첫 번째 for 루프에서 ob1.c 배열은 인덱스 값, 즉 0부터 9까지 순서대로 채워집니다. 동시에 ob2.c 배열은 ob1.c 배열의 각 값에 해당 인덱스 값을 더해 저장합니다.
    • 예를 들어, ob1.c[0]은 0, ob2.c[0]은 0 + 0 = 0이 됩니다.
    • ob1.c[1]은 1, ob2.c[1]은 1 + 1 = 2가 됩니다.
    • 이 패턴은 ob1.c[9]와 ob2.c[9]까지 계속됩니다.
  3. 두 번째 for 루프에서는 인덱스가 짝수인 ob1.c와 ob2.c의 값들만 ob1.a와 ob2.a에 더해집니다.
    • ob1.a에는 ob1.c[0], ob1.c[2], ob1.c[4], ..., ob1.c[8]의 값이 더해집니다.
    • ob2.a에는 ob2.c[0], ob2.c[2], ob2.c[4], ..., ob2.c[8]의 값이 더해집니다.
  4. 마지막으로 printf 문은 ob1.a와 ob2.a의 합을 출력합니다. 계산 결과, 이 값은 60이 됩니다.

2022 정보처리기사 필기 2회 65번

문제

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

 

1
2
3
4
5
6
7
8
9
x = 20
 
if x == 10:
    print('10')
(       ) x == 20:
    print('20')
else:
    print('other')
 
cs
  1. either
  2. elif
  3. else if
  4. else

정답 

2번

해설

elif 키워드가 가장 적절한 이유는 Python에서 조건부 논리를 구성할 때 if를 사용해 첫 번째 조건을, 그리고 elif를 사용해 추가 조건들을 나열합니다. 이는 'else if'의 줄임말이며, 첫 번째 if 조건이 False일 때 실행됩니다. 'else if'라는 구문 자체는 Python에서 사용되지 않습니다. Python의 elif는 다른 언어에서 흔히 볼 수 있는 else if와 같은 역할을 하지만, Python에서는 elif라는 특정 키워드로 사용됩니다. 마지막으로 else는 앞선 모든 조건이 False일 때 실행되는 부분입니다.

문제에서 x의 값이 20일 때, 첫 번째 if 문 (if x == 10:)은 거짓이므로 건너뛰게 됩니다. 그 다음 올바른 문법으로 연결된 조건부 명령어가 필요한데, 여기서 elif x == 20:이 정확한 문법입니다. 따라서 x의 값이 20일 때 print('20')을 실행하게 됩니다.

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

문제

70. Python 데이터 타입 중 시퀀스(Sequence) 데이터 타입에 해당하며 다양한 데이터 타입들을 주어진 순서에 따라 저장 할 수 있으나 저장된 내용을 변경할 수 없는 것은?

  1. 복소수(complex) 타입
  2. 리스트(list) 타입
  3. 사전(dict) 타입
  4. 튜플(tuple) 타입

정답 

4번

해설

시퀀스 데이터 타입은 주어진 순서에 따라 데이터가 정렬되는 타입을 말하며, 그 중 불변성(immutability)이 있는 타입은 튜플(tuple)입니다. 리스트와 사전은 가변성이 있으므로 내용을 변경할 수 있습니다.

2022 정보처리기사 필기 2회 71번

문제

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

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class RArr {
    static int[] marr() {
        int temp[] = new int[4];
        for(int i=0; i<temp.length; i++)
            temp[i] = i;
        return temp;
    }
    public static void main(String[] args) {
        int iarr[];
        iarr = marr();
        for(int i = 0; i<iarr.length; i++)
            System.out.print(iarr[i] + " -> ");
    }
}
 
cs
  1. 1 2 3 4
  2. 0 1 2 3
  3. 1 2 3
  4. 0 1 2

정답 

2번

해설

 marr() 메서드는 길이가 4인 정수 배열을 생성한 뒤, 0부터 3까지의 값을 각 인덱스에 채우고 이를 반환합니다. main() 메서드에서는 이 반환된 배열을 iarr에 저장하고, 이를 출력하는 반복문을 실행합니다.

Java 프로그램은 Rarr라는 이름의 클래스를 정의하고 있으며, marr()라는 정적 메소드와 main 메소드를 포함하고 있습니다. marr() 메소드는 길이가 4인 정수 배열을 생성하고, 각 요소를 해당 인덱스의 값으로 초기화한 다음 이 배열을 반환합니다. main 메소드는 marr() 메소드를 호출하여 반환된 배열을 iarr에 할당하고, 배열의 모든 요소를 화살표와 함께 출력합니다.   

결과적으로 0 -> 1 -> 2 -> 3 ->  을 출력하며, 따라서 정답은 2번 입니다.

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

문제

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

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class ovr {
    public static void main(String[] args) {
        int a = 1, b = 2, c = 3, d = 4;
        int mx, mn;
        mx = a < b ? b : a;
        if (mx == 1) {
            mn = a > mx ? b : a;
        } else {
            mn = b < mx ? d : c;
        }
        System.out.println(mn);
    }
}
 
cs
  1. 1
  2. 2
  3. 3
  4. 4

정답 

3번

해설

먼저, a = 1, b = 2, c = 3, d = 4라는 초기화된 값이 있습니다. 그 다음에 mx와 mn이라는 두 변수가 선언됩니다.

  • mx는 a < b라는 조건을 기반으로 계산됩니다. a < b가 참이므로, mx는 b의 값인 2가 됩니다.
  • if(mx == 1) 조건을 확인합니다. mx는 2이므로 이 조건은 거짓입니다. 따라서 else 블록으로 이동합니다.
  • else 블록에서 mn이 설정됩니다. mn은 b < mx 조건에 따라 계산됩니다. b < mx는 거짓이므로, mn은 c의 값인 3이 됩니다.
  • 마지막으로, System.out.println(mn);이 mn의 값을 출력합니다.

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

2022 정보처리기사 필기 2회 74번

문제

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

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
 
int main(int arge, char *argv[]) {
    int n1 = 1, n2 = 2, n3 = 3;
    int r1, r2, r3;
 
    r1 = (n2 <= 2|| (n3 > 3);
    r2 = !n3;
    r3 = (n1 > 1&& (n2 < 3);
 
    printf("%d", r3 - r2 + r1);
    return 0;
}
 
cs

 

  1. 0
  2. 1
  3. 2
  4. 3

정답 

2번

해설

  • n1, n2, n3는 각각 1, 2, 3으로 초기화됩니다.
  • r1은 (n2 <= 2) || (n3 > 3)의 결과를 받는데, 이는 논리 연산자 OR를 사용하여 두 조건 중 하나라도 참이면 r1은 참(1)이 됩니다. n2 <= 2는 참이므로 r1은 1입니다.
  • r2는 !n3의 결과를 받는데, 이는 n3의 논리 부정입니다. n3가 3, 즉 참(0이 아닌 모든 값)이므로 !n3은 거짓(0)이 됩니다. 따라서 r2는 0입니다.
  • r3는 (n1 > 1) && (n2 < 3)의 결과를 받는데, 이는 논리 연산자 AND를 사용하여 두 조건 모두 참이어야 합니다. n1 > 1은 거짓이지만 n2 < 3은 참입니다. 두 조건 모두 참이 아니므로 r3는 거짓(0)입니다.
  • printf는 r3 - r2 + r1을 계산하여 출력하는데, 이는 0 - 0 + 1이므로 결과는 1입니다.

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

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

문제

79. a[0]의 주소값이 10일 경우 다음 C언어 프로그램이 실행되 었을 때의 결과는? (단, int 형의 크기는 4Byte로 가정한다.)

 

1
2
3
4
5
6
7
8
#include <stdio.h>
int main(int argc, char *argv[]) {
    int a[] = {14223038};
    printf("%u, "&a[2]);
    printf("%u", a);
    return 0;
}
 
cs
  1. 14, 10
  2. 14, 14
  3. 18, 10
  4. 18, 14

정답 

3번

해설

주어진 코드에서는 int형 배열의 주소값을 출력하고 있습니다. a[2]의 주소값은 a[0]의 주소값에 int 형의 크기인 4바이트를 2번 더한 값이 됩니다. 따라서, a[2]의 주소는 10 + 4 * 2 = 18이 됩니다.

a의 주소값은 그대로 주어진 값인 10입니다.

따라서 출력 결과는 "18, 10"입니다.

정답은 3번 입니다.