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 |
- 0
- 2
- 5
- 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 |
- 30
- 60
- 80
- 120
정답
2번
해설
- 구조체 st의 두 인스턴스 ob1과 ob2가 선언되었습니다. ob1과 ob2의 a 멤버는 0으로 초기화되었습니다.
- 첫 번째 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]까지 계속됩니다.
- 두 번째 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]의 값이 더해집니다.
- 마지막으로 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 |
- either
- elif
- else if
- 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) 데이터 타입에 해당하며 다양한 데이터 타입들을 주어진 순서에 따라 저장 할 수 있으나 저장된 내용을 변경할 수 없는 것은?
- 복소수(complex) 타입
- 리스트(list) 타입
- 사전(dict) 타입
- 튜플(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 2 3 4
- 0 1 2 3
- 1 2 3
- 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
- 2
- 3
- 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 |
- 0
- 1
- 2
- 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[] = {14, 22, 30, 38};
printf("%u, ", &a[2]);
printf("%u", a);
return 0;
}
|
cs |
- 14, 10
- 14, 14
- 18, 10
- 18, 14
정답
3번
해설
주어진 코드에서는 int형 배열의 주소값을 출력하고 있습니다. a[2]의 주소값은 a[0]의 주소값에 int 형의 크기인 4바이트를 2번 더한 값이 됩니다. 따라서, a[2]의 주소는 10 + 4 * 2 = 18이 됩니다.
a의 주소값은 그대로 주어진 값인 10입니다.
따라서 출력 결과는 "18, 10"입니다.
정답은 3번 입니다.