Atopiano 2023. 3. 31. 09:50

2020년 4, 5회 정보처리기사 8번 문제

다음은 C언어로 작성된 프로그램이다. 이를 실행한 출력 결과를 쓰시오.

#include <stdio.h>

void main()
{
    char *p = "KOREA";

    printf("%s\n", p);
    printf("%s\n", p+3);
    printf("%c\n", *p);
    printf("%c\n", *(p+3));
    printf("%c\n", *p+2);
}

 

정답 :

KOREA
EA
K
E
M

 

해설(chatGPT):

이것은 포인터와 문자열 조작의 사용을 보여주는 C 프로그램입니다.

 

프로그램은 문자열 리터럴 "KOREA"를 가리키는 포인터 p를 정의합니다. 그런 다음 프로그램은 printf() 함수를 사용하여 포인터 p와 해당 오프셋을 기반으로 다양한 값을 인쇄합니다.

 

다음은 각 줄이 수행하는 작업입니다.

 

char *p = "KOREA";

이 줄은 문자열 리터럴 "KOREA"를 가리키는 포인터 변수 p를 선언합니다.

 

printf("%s\n", p);

이 줄은 "KOREA" 문자열을 콘솔에 출력합니다.

 

printf("%s\n", p+3);

이 줄은 네 번째 문자('E')부터 문자열을 인쇄하므로 "EA"가 인쇄됩니다.

 

printf("%c\n", *p);

이 줄은 %c 형식 지정자를 사용하여 문자열의 첫 번째 문자('K')를 인쇄합니다.

 

printf("%c\n", *(p+3));

이 줄은 포인터 p를 오프셋 3으로 역참조하여 문자열의 네 번째 문자('E')를 인쇄합니다.

 

printf("%c\n", *p+2);

이 줄은 문자열의 첫 번째 문자('M') 다음 두 위치에 있는 문자를 인쇄합니다. 이는 연산자 우선 순위 때문입니다. 더하기 + 연산자는 역참조 * 연산자보다 우선 순위가 높으므로 *p+2는 먼저 첫 문자('K')의 ASCII 코드에 2를 더합니다. (ASCII 코드 75를 가짐), 문자 'M'의 ASCII 코드인 77이 됩니다. 따라서 이 줄은 문자 'M'을 인쇄합니다.

 

이 프로그램의 예상 출력은 다음과 같습니다.

KOREA
EA
K
E
M