본문 바로가기
자격증/정보처리기사 실기 문제 풀이

흥달쌤 정보처리기사 실기 프로그램 문제(C언어 문제 31~40)

by 리드민 2023. 4. 10.
반응형

Q31) 다음 C 프로그램의 실행 결과를 쓰시오.

#include <stdio.h>
void align(int a[]) {
int temp;
for (int i = 0; i < 4; i++) {
for (int j=0; j < 4 - i; j++){
if(a[i] > a[j+1]) {
temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
}
}
int main() {
int a[ ] = {85, 75, 50, 100, 95};
align(a);
for (int i = 0; i < 5; i++)
printf("%d ", a[i]);
return 0;
}

A) 50 75 85 95 100

해설)

for (int i = 0; i < 4; i++) {
for (int j=0; j < 4 - i; j++){
if(a[i] > a[j+1]) {
temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}

-> 버블 정렬 코드이다. 앞뒤로 값을 계속 비교해서 정렬한다.

a[i] > a[j+1] -> 앞의 값이 뒤의 값보다 크면 앞뒤 값을 바꾸므로 값이 점점 커지게 정렬된다. 고로 오름차순인 50 75 85 95 100가 답이다.

 

Q32) 다음 C 프로그램의 실행 결과를 쓰시오.

#include <stdio.h>
int main() {
int count = 2;
int sum = 0;
while(count <= 10) {
sum += count;
count += 2;
}
printf("%d", sum);
return 0;
}

A)

30

해설)

반복되어 값이 누적되는 프로그램이다.

while(count <= 10) {
sum += count;
count += 2;
}

count 값이 2, 4, 6, 8, 10일때 sum += count가 된다. 고로 답은 2+4+6+8+12인 30이다.

 

Q33) 다음의 출력 결과를 쓰시오.

#include <stdio.h>
int main() {
int c = 0;
int i =0;
while(i<10) {
i++
c *= i;
}
printf("%d", c);
return 0;
}

A)

0

해설)

while 반복문으로 i가 0부터 9까지 반복한다. c *= i 계산식이 계속 반복되지만 처음 c의 값이 0이기 때문에 c는 반복이 종료된 후에도 0이다. 그래서 답은 0

 

Q34) 다음 C 프로그램의 실행 결과는?

#include <stdio.h>
void main() {
int a, b;
a = 2;
while(a-- > 0) {
printf("a = %d \n", a);
}
for(b = 0; b < 2; b++) {
printf("a = %d \n", a++);
}
}

A)

a = 1

a = 0

a = -1

a = -2

해설)

a=2일때 a--이므로 a=1 출력

a=1일때 a--이므로 a=0 출력

[추가해야 함]

 

Q35) 다음 C 프로그램의 실행 결과를 쓰시오.

#include <stdio.h>
int main() {
int a=120, b=45;
while (a != b) {
if(a > b) a= a - b;
else b = b -a;
}
printf("%d", a);
return 0;
}

A)

15

해설)

a=120이고 b=45일때 a!=b가 참이므로 while 문 안의 문장이 실행된다. a>b이므로 a=a-b 연산이 실행되서 a값은 75가 된다.

a=75이고 b=45일때 a! = b가 참이므로 while문 안의 문장이 실행된다. a>b이므로 a=a-b 연산이 실행되서 a값은 30이 된다.

a=30이고 b=45일때 a! = b가 참이므로 while문 안의 문장이 실행된다. a>b가 아니므로 b=b-a 연산이 실행되서 b값은 15가 된다.

a=30이고 b=15일때 a != b가 참이므로 while문 안의 문장이 실행된다. a>b이므로 a=a-b 연산이 실행되서 a값은 15가 된다.

a=15이고 b=15일때 a != b가 거짓이므로 while문을 빠져나온다. a값을 출력하면 답은 15이다.

 

Q36) 다음 C 프로그램의 실행 결과를 쓰시오.

#include <stdio.h>
int main() {
int i, sum=0;
for( i=1; i <= 10; i +=2) {
if( i % 2 && i % 3) continue;
sum += i;
}
printf("%d", sum);
return 0;
}

A)

12

해설)

i가 1부터 10까지 2씩 증가하며 반복한다.

i=1일때 if 조건절을 만족하므로 continue문이 실행된다. 다음 반복으로 넘어간다.

i=3일때 sum =sum + i; sum = 3이다.

i=5일때 if 조건절을 만족하므로 continue 문이 실행된다. 다음 반복으로 넘어간다.

i=7일때 if 조건절을 만족하므로 continue 문이 실행된다. 다음 반복으로 넘어간다.

i=9일때 if조건절을 만족하지 않으므로 실행문이 실행되지 않는다. sum=sum+i->12이다.

 

Q37) 다음 C 프로그램의 실행 결과는?

#include <stdio.h>
void main() {
int i, j, sum=0;
for(i = 1; i< 10; i++ ) 
for ( j=1; j<10; j++) {
if(j%3 == 0) continue;
if(i%4 == 0) break;
sum++
}
}
printf("%d", sum);
}

A)

42

해설)

continue : 다음 반복으로 바로 간다.

break : 지금 현재 반복문을 빠져나온다.

if(j%3 == 0) continue;
if(i%4 == 0) break;
sum++

실행문은 이렇게 3개다. j가 3의 배수면 남은 코드를 무시하고 다음 반복으로 바로 간다.

i가 4의 배수면 현재 반복문을 바로 빠져나온다.

이중 for문이다. sum에 1씩 가산된다. j가 3의 배수가 아닌 경우 1씩 가산된다. 총 sum++가 6번 실행된다. 그러므로 sum이 6이 된다.

i가 4의 배수가 아닌경우 반복되므로 총 7회 반복된다.

6*7하면 42이다.

 

Q38) 다음 C 프로그램의 실행 결과는?

int main(int argc, char *argv[]) {
int a=1, sum=0;
while (a++ <= 5) {
if (a%2 != 0)
continue;
sum = sum + a;
}
printf("%d", sum);
return 0;
}

A)

12

해설)

while 조건에서 a는 후위 연산이기 때문에 비교 후 a의 값이 가산된다.

a=1일때 <=5를 만족한다. 그러므로 조건문을 만족하므로 실행문이 실행된다. 실행문이 실행되기 전에 윗줄에서 a++이므로 a=2이다. if (a%2 != 0) 조건문이 false이므로 if문의 실행문이 실행되지않는다. sum = 0 + 2이므로 sum은 2이다.

a=2일때 <=5를 만족한다. 그후 a++이므로 a는 3이 된다. if (a%2 != 0) 조건문을 만족하므로 continue를 실행한다. 남은 코드를 무시하고 다음 반복으로 간다.

이런식으로 a=가 짝수일때 sum 값에 더해지게된다.

주의해야 할 것은 while (a++ <= 5) 조건식에서 a++ 이므로 a=5일때 조건식을 만족하고 실행문으로 갔을때 a=6가 된다는 것이다. 반복문이 한번 더 실행되는 것이다.

그래서 sum값은 2+4+6해서 12가 된다.

 

Q39) 다음 C 프로그램의 실행 결과는?

int main(int argc, char *argv[]) {
int i = 0;
while(1){
if(i==4){
break;
}
++i;
}
printf("i = %d", i);
return 0;
}

A)

i = 4

해설)

while(1) 반복은 무한 반복이다.

break는 현재 반복문과 case문을 빠져나온다.

if(i==4)
{
break;
}

i가 4면 while문을 빠져나온다.

i에 저장된 값은 4이다.

 

Q40) 다음 C 프로그램의 출력 결과는?

int main() {
char ch[5];
char str[] = "abcde";
int num[] = {1, 2, 3, 4, 5};
printf("%d, ", sizeof(ch));
printf("%d, ', sizeof(str));
printf("%d\n", sizeof(num)/sizeof(int));
return 0;

A)5, 6, 5

해설)

char 배열 str에 abcde를 대입한다.

int 배열 num에 1, 2, 3, 4, 5를 대입한다.

각각의 배열의 구성을 보게 되면,

ch 배열은, 5개의 공간을 확보하라고 했지 때문에 5개의 길이를 갖게 된다.

         

str 배열은, 아래와 같이 null 문자가 포함되어 6개의 길이를 갖게 된다.

a b c d e \0

num 배열은, 아래와 같이 null 문자가 포함되어 있지 않기 때문에 4Byte 씩 5개의 공간이 된다.

1 2 3 4 5

sizeof 는 해당 공간의 Byte 수를 구하는 함수이고, sizeof(num)은 4Byte씩 5개 20Byte가 된다. sizeof(int); int 자료형은 4Byte 이므로, 20/4 = 5가 된다.

 

반응형