다음은 숫자를 처리하는 C 프로그램이다. 프로그램에서 ㉠과 ㉡에 들어갈… | [계리직 컴퓨터일반] 19년 1회차 기출문제 상세 페이지
1[계리직 컴퓨터일반] 19년 1회차
다음은 숫자를 처리하는 C 프로그램이다. 프로그램에서 ㉠과 ㉡에 들어갈 내용과 3 2 1 4를 입력하였을 때의 출력결과를 바르게 짝지은 것은? (단, 다음 프로그램에 문법적 오류는 없다고 가정한다.) (순서대로 ㉠, ㉡, 출력 결과)#include <stdio.h>
#include <stdlib.h>
void a (int n, int *num) {
for (int i = 0; i < n; i++)
scanf("%d", &(num[i]));
}
void c(int *a, int *b) {
int t;
t = *a; *a = *b; *b = t;
}
void b(int n, int *lt) {
int a, b;
for (a = 0; a < n-1; a++)
for (b = a + 1; b < n; b++)
if (lt[a] > lt[b]) c ( ㉠ , ㉡ )
;
} int main() {
int n;
int *num;
printf("How many numbers?");
scanf("%d", &n);
num = (int *)malloc(sizeof(int) * n);
a(n, num);
b(n, num);
for (int i = 0; i < n; i++)
printf("%d ", num[i]);
}
1
lt+a, lt+b, 1 2 3 4
2
lt+a, lt+b, 1 2 4
3
lt[a], lt[b], 4 3 2 1
4
lt[a], lt[b], 4 2 1
해설
㉠은 lt+a, ㉡은 lt+b이고 출력 결과는 1 2 4이다.
함수 c는 int 포인터 두 개를 받아 가리키는 값을 교환하므로, 배열 원소의 주소인 lt+a(=<[a])와 lt+b를 넘겨야 한다. 함수 b는 앞 원소가 더 크면 교환하는 선택 정렬 방식의 오름차순 정렬이다.
입력 3 2 1 4에서 첫 값 3은 개수 n으로 읽히고, 이어지는 2 1 4만 배열에 저장된다. 이를 오름차순 정렬하면 1 2 4가 출력된다.
- lt+a, lt+b, 1 2 3 4: 첫 입력 3을 개수가 아닌 데이터로 본 결과다.
- lt[a], lt[b], 4 3 2 1: lt[a]는 int 값이므로 포인터 매개변수에 넘길 수 없고, 정렬도 오름차순이다.
- lt[a], lt[b], 4 2 1: 인자 형식이 맞지 않으며 정렬 방향도 반대다.
오류나 개정된 내용이 보이면 알려주세요