🍉 2020년 1회 12번
출력 결과
#include <stdio.h>
void main() {
int i, j;
int temp;
int a[5] = {75, 95, 85, 100, 50};
for(i = 0;i < 4;i++) {
for(j = 0;j < 4 - i;j++) {
if(a[j] > a[j + 1]) {
temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}
for(i = 0;i < 5;i++) {
printf("%d ", a[i]);
}
}
답 : 50 75 85 95 100
i는 0~3까지 반복하고 j는 4-i만큼 반복한다.
버블 정렬(Bubble Sort, 인접한 두 요소를 비교하여 정렬하는 방법)을 이용하였다.
현재 요소와 다음 요소를 비교했을 때, 현재 요소가 더 크면 다음 요소와 값을 바꾼다.
🍉 2020년 3회 2번
출력 결과
#include <stdio.h>
void main() {
int i = 0, c = 0;
while(i < 10) {
i++;
c *= i;
}
printf("%d", c);
}
답 : 0
c의 초기값이 0이므로, c *= i에서 계속 0이 될 수 밖에 없다.
🍉 2020년 3회 13번
출력 결과
#include <stdio.h>
int r1() {
return 4;
}
int r10() {
return (30 + r1());
}
int r100() {
return (200 + r10());
}
int main() {
printf("%d\n", r100());
return 0;
}
답 : 234
r100() 메서드부터 순서대로 호출하면 된다.
🍉 2020년 4회 18번
출력 결과
#include <stdio.h>
void main() {
char* p = "KOREA";
printf("%s \n", p);
printf("%s \n", p + 3);
printf("%s \n", *p);
printf("%s \n", *(p + 3));
printf("%s \n", *p + 2);
}
답 :
KOREA
EA
K
E
M
printf("%s \n", p) => %s는 주소값을 받아서 맨 끝까지의 문자열을 출력한다. 즉, 포인터 변수의 시작 주소를 표현하는 p는 K부터 시작하여 KOREA를 출력한다.
printf("%s \n", p + 3) => 마찬가지로 %s로 주소값을 받아서 출력해 준다. 이 때, p라는 주소값에 3을 더해주는 연산 과정이 보인다. 1을 더하는 산술 연산과 달리 다음 데이터를 의미하는 주소 연산이다. 따라서 3만큼의 다음 데이터를 가리키는 것이므로, p + 3에 해당하는 주소의 실제 값인 E부터 시작하여 EA를 출력한다.
printf("%c \n", *p) => %c는 글자 하나를 출력해준다. *p는 실제 값을 나타내기에, p가 가리키는 시작 주소값의 실제 값인 K를 출력한다.
printf("%c \n", *(p + 3)) => 위와 마찬가지로, p의 주소값보다 3만큼 큰 주소값의 실제 값인 E를 출력한다.
printf("%c \n", *p + 2) => *p의 값은 KOREA이다. 이 때, 서식 지정자 %c를 사용하였기에 K 한 글자만을 출력한다. 즉, *p + 2는 'K'+ 2란 값을 문자의 형태로 출력하고자 하는 것이다.
아스키 코드에서 알파벳은 순서대로 나열되어 있기에, K에서 2개 뒤의 알파벳인 M을 출력한다.
'정보처리기사 > 기출' 카테고리의 다른 글
[정보처리기사] 기출문제_C언어 (2022년 실기) (0) | 2024.04.18 |
---|---|
[정보처리기사] 기출문제_C언어 (2021년 실기) (0) | 2024.04.18 |
[정보처리기사] 기출문제_JAVA (2023년 실기) (0) | 2024.04.17 |
[정보처리기사] 기출문제_JAVA (2022년 실기) (0) | 2024.04.17 |
[정보처리기사] 기출문제_JAVA (2021년 실기) (0) | 2024.04.17 |