반응형
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
해설
- 지역 변수 a가 선언되고 10으로 초기화된다.
- 정적 변수 Static.b는 지역 변수 a의 값, 즉 10으로 설정된다. (지역변수와 전역변수가 같은 이름의 변수를 선언했을 경우에는 지역변수의 선언이 우선순위가 높다.)
- Static 클래스의 인스턴스 st가 생성된다.
출력:
- System.out.println(Static.b++);: 이 구문은 현재 Static.b의 값(10)을 출력하고 나서 Static.b를 1만큼 증가시킨다. 따라서 출력값은 10이다.
- System.out.println(st.b);: 이 구문은 Static.b의 현재 값을 출력한다. 이전 단계에서 Static.b가 1만큼 증가되었으므로 현재 값은 11이다. 정적 변수는 클래스의 모든 인스턴스에 대해 공유되기 때문에 st.b 역시 11을 출력한다.
- System.out.println(a);: 10으로 초기화된 지역 변수 a의 값을 출력한다.
- 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
해설
- char a[] = "Art";: 문자열 "Art"를 저장하는 문자 배열 a를 선언합니다. 이 배열은 'A', 'r', 't', '\0'의 네 글자를 포함합니다('\0'은 문자열의 끝을 나타내는 널 문자입니다).
- char* p = NULL; p = a;: 문자 포인터 p를 선언하고, a의 주소로 초기화합니다. 따라서 p는 문자열 "Art"를 가리킵니다.
출력:
- printf("%s\n", a);: 문자열 a를 출력한다. 결과는 "Art"
- printf("%c\n", *p);: 포인터 p가 가리키는 위치의 문자를 출력한다. p는 a의 첫 번째 원소, 즉 'A'를 가리키므로 결과는 "A"
- printf("%c\n", *a);: 배열 a의 이름은 배열의 첫 번째 원소의 주소를 나타낸다. 따라서 *a는 'A'를 의미하고, 결과는 "A"
- printf("%s\n", p);: 포인터 p가 가리키는 문자열을 출력한다. p는 "Art"를 가리키므로 결과는 "Art"
- 마지막으로 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 이다.