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

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

by picker_life 2024. 4. 15.
반응형

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

문제

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

1
2
3
4
5
6
7
8
def cs(n):
    s = 0
    for num in range(n+1):
        s += num
    return s
 
print(cs(11))
 
cs
  1. 45
  2. 55
  3. 66
  4. 78

정답 

3번

 

해설

이 코드는 0부터 n까지의 모든 수를 더합니다. range(n+1) 함수는 0에서 n까지의 숫자를 생성합니다, 그래서 만약 n이 11이면, 0부터 11까지의 합을 구할 것입니다.

이제 이 함수가 반환하는 값을 계산해야 합니다. cs(11)을 호출하면, 0 + 1 + 2 + ... + 10 + 11 의 합을 구하는 과정을 거칩니다. 이후 과정에 따라 등차수열의 합 공식에 의해서 간단히 계산됩니다.

S = n(n+1)​ / 2

 

여기서 n = 11이므로, 계산하면

S = 11(11+1) / 2 = 11×122 = 66
 

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

 

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

문제

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

1
2
3
4
5
6
7
8
9
10
#include <stdio.h>
#include <string.h>
int main(void) {
    char str[50= "nation";
    char *p2 = "alter";
    strcat(str, p2);
    printf("%s", str);
    return 0;
}
 
cs
  1. nation
  2. nationalter
  3. alter
  4. alternation

정답 

2번

해설

  1. 크기가 50인 문자 배열 str이 선언되고 "nation" 문자열로 초기화됩니다.
  2. 문자 포인터 *p2가 선언되고 "alter" 문자열을 가리키도록 초기화됩니다.
  3. strcat 함수가 호출되는데, 이 함수는 p2가 가리키는 문자열("alter")을 str의 끝("nation"으로 시작)에 연결합니다.
  4. printf 함수가 호출되어 strcat 후의 str의 내용을 출력합니다.
  5. 프로그램이 성공적으로 실행되었음을 나타내는 0을 반환합니다.

이러한 단계에 따르면, strcat이 호출된 후에 str은 "nationalter"를 포함하게 되므로, printf 함수는 이 결합된 문자열을 출력하게 됩니다.

 

첫 번째 줄의 stdio.h는 입출력 작업을 위한 것이고, 두 번쨰 줄의 string.h는 문자열 조작 함수를 위한 것입니다.

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

문제

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
 
int main(void) {
    int a = 3, b = 4, c = 2;
    int r1, r2, r3;
 
    r1 = b <= 4 || c == 2;
    r2 = (a > 0&& (b < 5);
    r3 = !c;
 
    printf("%d", r1+r2+r3);
    return 0;
}
 
cs
  1. 0
  2. 1
  3. 2
  4. 3

정답 

2번

해설

각 변수 r1, r2, r3를 계산하는 순서는 다음과 같습니다.

  1. r1 = b <= 4 || c == 2;
    • b는 4이고, c는 2입니다. 조건 b <= 4는 참입니다. 또한 c == 2도 참입니다. 이 논리적 OR 연산의 결과는 참이므로, r1은 1이 됩니다.
  2. r2 = (a > 0) && (b < 5);
    • a는 3이므로 a > 0은 참입니다. b는 4이므로 b < 5도 참입니다. 이 논리적 AND 연산의 결과는 참이므로, r2 역시 1이 됩니다.
  3. r3 = !c;
    • c는 2입니다. !c는 c가 0이 아닐 때 거짓이 되며, 이 연산의 결과는 0이 됩니다.

따라서 printf("%d", r1+r2+r3);는 1+1+0, 즉 2를 출력합니다.

정답은 2번 입니다.

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

문제

67. 다음 중 JAVA에서 우선순위가 가장 낮은 연산자는?

  1. --
  2. %
  3. &
  4. =

정답 

4번

 

해설

자바에서 연산자의 우선순위는 언어 명세에 따라 결정됩니다. 할당 연산자 =는 대부분의 프로그래밍 언어에서 우선순위가 가장 낮은 연산자 중 하나입니다. 그 이유는 대입은 보통 수식이나 다른 연산이 다 계산된 후에 수행되어야 하기 때문입니다. 이에 반해, 증감 연산자 --, 나머지 연산자 %, 비트 연산자 & 등은 할당 연산자보다 높은 우선순위를 가집니다.

자바의 연산자 우선순위에서 가장 낮은 것은 할당 연산자들이며, 이들 중 = 연산자가 가장 대표적인 예입니다.

 

정답은 4번 입니다.

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

문제

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

1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
 
int main(void) {
    int n = 4;
    int* pt = NULL;
    pt = &n;
 
    printf("%d "&+ *pt - *&pt + n);
    return 0;
}
 
cs
  1. 0
  2. 4
  3. 8
  4. 12

정답 

2번

해설

이 코드는 변수 n을 선언하고 4로 초기화합니다. 그런 다음, 정수형 포인터 pt를 선언하고 NULL로 초기화한 다음 n의 주소로 설정합니다.

printf 함수는 다소 혼란스러운 표현을 사용하여 계산을 수행합니다. 여기서 중요한 점은 연산자의 우선순위와 피연산자의 타입을 이해하는 것입니다. 포인터 연산에는 자료형의 크기가 고려되어야 합니다. int형 포인터가 가리키는 주소에 int의 크기(보통 4 바이트)를 더하거나 빼면, 그 결과는 int 하나가 메모리에 차지하는 크기만큼 이동합니다.

printf의 인자를 분석해보겠습니다:

  • &n: n의 주소입니다.
  • *pt: pt가 가리키는 주소에 있는 값, 즉 n의 값인 4입니다.
  • *&pt: pt의 주소에 있는 값, 즉 pt 자체입니다. 여기서는 &와 *가 상쇄되어 pt가 됩니다. 즉, n의 주소가 됩니다.
  • n: n의 값인 4입니다.

&n + *pt는 주소 값에 4를 더하는 것인데, 이것은 포인터 연산으로 처리되므로 &n 주소 다음의 int 주소를 가리키게 됩니다. *&pt는 pt 자체이고, 여기서 pt는 n의 주소이므로 &n과 같습니다. 이 주소에서 &n을 빼면 0이 됩니다. 그런 다음 여기에 n의 값인 4를 더하면, 최종 결과는 단순히 4가 됩니다.

따라서 printf는 4를 출력하게 됩니다.

 

정답은 2번 입니다.

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

문제

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class ovr {
    public static void main(String [] arg) {
        int arr[];
        int i = 0;
        arr = new int[10];
        arr[0= 0;
        arr[1= 1;
        while(i<8) {
            arr[i+2= arr[i+1+ arr[i];
            i++;
        }
        System.out.println(arr[9]);
    }
}
 
cs
  1. 13
  2. 21
  3. 34
  4. 55

정답 

3번

해설

이 프로그램은 피보나치 수열의 앞부분을 계산하고, 10번째 원소(인덱스 9)를 출력하는 코드입니다. 피보나치 수열은 각 숫자가 바로 앞의 두 숫자의 합인 수열입니다. 이 경우 arr[0]과 arr[1]이 이미 정의되어 있으므로, while 루프는 이후의 원소를 다음과 같이 채웁니다:

  • arr[2] = arr[1] + arr[0] = 1 + 0 = 1
  • arr[3] = arr[2] + arr[1] = 1 + 1 = 2
  • arr[4] = arr[3] + arr[2] = 2 + 1 = 3
  • arr[5] = arr[4] + arr[3] = 3 + 2 = 5
  • arr[6] = arr[5] + arr[4] = 5 + 3 = 8
  • arr[7] = arr[6] + arr[5] = 8 + 5 = 13
  • arr[8] = arr[7] + arr[6] = 13 + 8 = 21
  • arr[9] = arr[8] + arr[7] = 21 + 13 = 34

따라서 System.out.println(arr[9]);는 34를 출력합니다.

정답은 3번 입니다.

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

문제

79. C언어에서의 변수 선언으로 틀린 것은?

  1. int else;
  2. int Test2;
  3. int pc;
  4. int True;

정답 

1번

 

해설

예약어(reserved word)란 프로그래밍 언어에서 이미 문법적인 용도로 사용되고 있어서 사용자가 변수명, 함수명 등의 식별자로 사용할 수 없는 단어를 의미합니다. else는 조건문에서 사용되는 예약어로서 변수 이름으로 사용될 수 없습니다.

Test2와 pc는 예약어가 아니므로, 유효한 변수 이름입니다. True는 대부분의 언어에서 불리언 값의 참을 나타내는 예약어로 취급되지만, 자바에서는 대소문자가 구분되기 때문에 True와 true는 서로 다른 것으로 간주됩니다. 그래서 자바에서 int True;는 문법적으로 허용됩니다.

정답은 1번 입니다.