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

2023 정보처리기사 실기 1회 프로그래밍 문제 해설(1번, 2번, 3번)

by picker_life 2024. 3. 10.
반응형

2023 정보처리기사 실기 1회 14번

 

문제

1. 자바 코드 출력되는 값을 작성.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Static{
 
    public int a = 20;
    static int b = 0;
    
}
 
public class Main{
    public static void main(String[] args) {
        
        int a;
        a = 10;
        Static.b = a;
 
        Static st = new Static();
 
        System.out.println(Static.b++);
        System.out.println(st.b);
        System.out.println(a);
        System.out.print(st.a);
    }
}
cs
 

정답

10

11

10

20

 

해설

  1. 지역 변수 a가 선언되고 10으로 초기화된다.
  2. 정적 변수 Static.b는 지역 변수 a의 값, 즉 10으로 설정된다. (지역변수와 전역변수가 같은 이름의 변수를 선언했을 경우에는 지역변수의 선언이 우선순위가 높다.)
  3. Static 클래스의 인스턴스 st가 생성된다.

출력:

  1. System.out.println(Static.b++);: 이 구문은 현재 Static.b의 값(10)을 출력하고 나서 Static.b를 1만큼 증가시킨다. 따라서 출력값은 10이다.
  2. System.out.println(st.b);: 이 구문은 Static.b의 현재 값을 출력한다. 이전 단계에서 Static.b가 1만큼 증가되었으므로 현재 값은 11이다. 정적 변수는 클래스의 모든 인스턴스에 대해 공유되기 때문에 st.b 역시 11을 출력한다.
  3. System.out.println(a);: 10으로 초기화된 지역 변수 a의 값을 출력한다. 
  4. System.out.print(st.a);: 마지막으로 20으로 초기화된 st 인스턴스의 인스턴스 변수 a의 값을 출력한다. 

문제

2. C언어의 출력값 작성.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
 
int main(){
 
    char a[] = "Art";
    char* p = NULL;
    p = a;
 
    printf("%s\n", a);
    printf("%c\n"*p);
    printf("%c\n"*a);
    printf("%s\n", p);
 
    for(int i = 0; a[i] != '\0'; i++)
    printf("%c", a[i]);
 
}
cs

 

정답

Art

A

A

Art

Art

 

해설

  1. char a[] = "Art";: 문자열 "Art"를 저장하는 문자 배열 a를 선언합니다. 이 배열은 'A', 'r', 't', '\0'의 네 글자를 포함합니다('\0'은 문자열의 끝을 나타내는 널 문자입니다).
  2. char* p = NULL; p = a;: 문자 포인터 p를 선언하고, a의 주소로 초기화합니다. 따라서 p는 문자열 "Art"를 가리킵니다.

출력:

  1. printf("%s\n", a);: 문자열 a를 출력한다. 결과는 "Art"
  2. printf("%c\n", *p);: 포인터 p가 가리키는 위치의 문자를 출력한다. p는 a의 첫 번째 원소, 즉 'A'를 가리키므로 결과는 "A"
  3. printf("%c\n", *a);: 배열 a의 이름은 배열의 첫 번째 원소의 주소를 나타낸다. 따라서 *a는 'A'를 의미하고, 결과는  "A"
  4. printf("%s\n", p);: 포인터 p가 가리키는 문자열을 출력한다. p는 "Art"를 가리키므로 결과는 "Art"
  5. 마지막으로 for 루프를 통해 배열 a의 각 문자를 순차적으로 출력한다. 루프는 널 문자 '\0'를 만날 때까지 각 문자를 출력하므로, 결과는 "Art"이다.

 

문제

3. C언어의 출력값 작성.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
 
int main(){
 
    char* a = "qwer";
    char* b = "qwtety";
 
    for(int i = 0; a[i] != '\0' ; i++){
        for(int j = 0; b[j] != '\0'; j++){
            if(a[i] == b[j]) printf("%c", a[i]);
        }
    }
 
}
 
cs
 

정답

qwe

 

해설

프로그램은 두 개의 중첩된 for 루프를 사용하여 이 작업을 수행한다. 외부 루프는 문자열 a의 각 문자에 대해 반복하고, 내부 루프는 문자열 b의 각 문자에 대해 반복한다. 두 루프 모두 NULL 문자('\0')를 만날 때까지 반복된다.

내부 for 루프 내에서, 만약 a의 i번째 문자와 b의 j번째 문자가 같다면, 해당 문자는 두 문자열 모두에 존재하는 것이므로, 그 문자는 printf를 사용해 출력된다.

두 문자열을 비교할 때, 공통으로 등장하는 문자는 다음과 같다.

  • 'q': a와 b의 첫 번째 문자로 공통됩니다.
  • 'w': a의 두 번째 문자와 b의 세 번째 문자로 공통됩니다.
  • 'e': a의 네 번째 문자와 b의 다섯 번째 문자로 공통됩니다.

그러므로 출력되는값은 qwe 이다.