2023 정보처리기사 실기 3회 5번
문제
C언어에서 구조체의 멤버에 접근하기 위해 괄호안의 기호를 작성하시오.
#include <stdio.h>
#include <stdlib.h>
typedef struct Data{
char c;
int *numPtr;
} Data;
int main(){
int num = 10;
Data d1;
Data *d2 = malloc(sizeof(struct Data));
d1.numPtr = #
d2 ( ) numPtr = #
printf("%d\n", *d1.numPtr);
printf("%d\n", *d2 ( ) numPtr);
free(d2);
return 0;
}
정답
→
해설
C언어에서 구조체 포인터를 통해 구조체의 멤버에 접근할 때는 화살표 연산자(->)를 사용해야 합니다. 따라서, '괄호' 자리에는 '->' 연산자가 들어가야 합니다.
2023 정보처리기사 실기 3회 8번
문제
8. 다음 C언어 코드에 알맞는 출력값을 작성하시오.
#include <stdio.h>
int f(int n) {
if(n<=1) return 1;
else return n*f(n-1);
}
int main() {
printf("%d", f(7));
}
정답
5040
해설
C 코드는 재귀 함수를 사용하여 팩토리얼 값을 계산하고 있다. 주어진 함수 f는 정수 n을 매개변수로 받아, n이 1 이하일 경우 1을 반환하고, 그렇지 않을 경우 n * f(n-1)을 반환한다. 이는 팩토리얼을 계산하는 전형적인 방식이며 f(7)을 호출하면 다음과 같은 연산을 수행한다.
(7) = 7 * f(6)
= 7 * 6 * f(5)
= 7 * 6 * 5 * f(4)
= 7 * 6 * 5 * 4 * f(3)
= 7 * 6 * 5 * 4 * 3 * f(2)
= 7 * 6 * 5 * 4 * 3 * 2 * f(1)
= 7 * 6 * 5 * 4 * 3 * 2 * 1
= 5040
2023 정보처리기사 실기 3회 10번
문제
C언어의 포인터의 알맞는 출력값 작성
#include <stdio.h>
int main() {
char* p = "KOREA";
printf("%s ", p);
printf("%s ", p+1);
printf("%c ", *p);
printf("%c ", *(p+3));
printf("%c ", *p+4);
}
정답
KOREA
OREA
K
E
O
해설
이 C 코드는 문자열 포인터와 포인터 연산에 관한 것이다. 여기서 p는 "KOREA"라는 문자열을 가리키는 포인터다. 코드의 printf 함수들은 다양한 방식으로 이 문자열과 그 요소들을 출력한다. 아래는 각 printf 호출이 출력하는 내용이다.
- printf("%s ", p); - 이는 포인터 p가 가리키는 문자열 전체, 즉 "KOREA"를 출력
- printf("%s ", p+1); - p+1은 문자열의 두 번째 문자를 가리키므로, "OREA"를 출력 (첫 번째 문자 'K'를 건너뛰고 출력한다.)
- printf("%c ", *p); - *p는 포인터 p가 가리키는 첫 번째 문자, 즉 'K'를 출력
- printf("%c ", *(p+3)); - *(p+3)는 문자열의 네 번째 문자를 가리키므로, 'E'를 출력
- printf("%c ", *p+4); - *p+4는 포인터 p가 가리키는 첫 번째 문자 'K'의 ASCII 값에 4를 더한 것이다. 'K'의 ASCII 값은 75이므로, 이는 75 + 4 = 79와 같고, ASCII에서 79는 'O'이다.