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

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

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

Q 11) 아래 C 프로그램의 출력은?

#include <studio.h>
int main()
{
int i = 3;
int j = 4;
if( (++i > j --) || (i++ < --j) ) i = i-- + ++j;
else j = i-- - --j;
printf("%d %d\n", i, j);
}

A)

4 4

해설)

첫 번째 조건에서 ++i > j--를 수행한다.

i는 전위 연산이기 때문에 4를 가지고 비교하고, j는 후위 연산이기 때문에 현재값 4를 가지고 비교하고, 1를 감소시킨다.

4 > 4라는 조건이 성립이 되고 거짓이 된다.

좌항이 거짓이지만 || 연산을 수행하기 때문에 우항도 수행을 하게 된다.

i는 후위 연산이기 때문에, 4를 가지고 비교하게 되고, j는 전위 연산이기 때문에 2값을 가지고 비교하게 된다.

4<2를 수행하게 되면 거짓이 되고,

j = i-- - --j;를 수행한다.

j = 5-- - --2;를 수행하고, j는 5 - 1의 결과값 4가 대입되고, i 는 연산 수행 후에 4가 대입된다.

 

Q 12) 다음 코드를 수행할 때, 수행결과는?

#include <stdio.h>
int main()
{
int a=20, b=30;
if (a++ <= 20 || ++b > 30)
b++;
printf("%d, %d\n", a++, b);
return 0;
)

A)

21, 31

해설)

조건 문의 좌항에서는 a가 후위 연산이기 때문에,

20 <= 20을 수행 후 a 값을 1 증가시키게 된다.

좌항은 참이라는 결과값이 나오게 되고, || 연산이기 때누에 우항은 수행하기 않는다.

참값의 실행 b++를 수행하여 b에는 31을 대입하게 된다.

a는 조건 실행 후 1을 증가했기 때문에, 21일 출력되고, b는 참이라는 조건에 의해서 31이라는 결과가 출력된다

 

Q 13) 다음 C언어 프로그램이 실행되었을 때의 결과는?

#include <stdio.h>
int main(void) {
int a = 3, b = 4, c = 2;
int r1, r2, r3;

r1 = b <= 4 || c == 2;
r2 = (a>0) && (b<5);

printf("%d", r1+r2);
return 0;
}

A)

2

해설)

b <= 4 || c == 2이 결과값을 r1에 대입한다.

|| 연산자는 좌항과 우항 둘 중 하나만 참이 되어도 참 값이 리턴된다.

b <= 4, b는 4보다 작지 않지만, 같기 때문에 참 값을 리턴하고,

c == 2, c는 c가 저장되어 있어 참 값을 리턴한다.

r1에는 참 값인 1이 대입된다.

 

(a > 0) && (b < 5) 이 결과값을 r2에 대입한다.

&& 연산자는 좌항과 우항 모두 참이 되어야 참값이 리턴된다.

a > 0, a의 값 3은 0보다 크기 때문에 참 값을 리턴하고,

b < 5, b의 값 4는 5보다 작기 때문에 참 값을 리턴한다.

 

출력문에서 r1의 값 1과, r2의 값 2, r3는 현재 비어 있기 때문에 0

세 변수를 더해서 2가 출력된다.

(r3에 초기값을 지정하지 않았기 때문에 원하지 않는 출력 결과를 만나는 컴파일이 있을 수 있지만, 시험에서 이런 문제가 출제될 경우 2라고 답안을 작성한다.)

 

Q14) 아래 C 프로그램의 실행 결과는?

#include <stdio.h>
int main() {
int a = 3+5, b=1, c;
int ap, bp;
ap = a++;
bp = ++b;
b = 3 * (ap == 8);
c = 5 * (ap != 8);
printf("%d %d %d %d %d", a, b, c, ap, bp);
}

A)

9 3 0 8 2

해설)

초기값으로 a 변수는 8, b 변수는 1이 대입된다.

ap에는 a 변수의 값 8을 대입하고, a 변수를 후위 증가하여 a는 9가 된다.

bp에는 b 변수의 값 1을 선 증가하여 다입하기 때문에 bp 와 b 변수 모두 2가 된다.

b에는 3 * (ap==8), 괄호 연산을 먼저 수행하여 참 값이 리턴되고, 3 * 1이 b에 대입된다.

c에는 5 * (ap!=8), 괄호 연산을 먼저 수행하여 거짓 값이 리턴되고, 5 * 0이 c에 대입된다.

 

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

#include<stdio.h>
void main() {
double d_value;
float f_value = 5.65;
int n;
d_value = f_value;
d_value = d_value+0.5;
n = (int)d_value;
printf("%3.1f, %d", d_value, n);
}

A)

6.2, 6

해설)

d_value = f_value;에서 5.65를 d_value에 대입한다.

d_value 의 값을 0.5 증가시켜 6.15를 만든다.

n 변수에는 6.15를 형변환시켜 정수값인 6만 n에 대입한다.

출력시 %3.1f 는 3개의 공간을 확보하고, 1자리의 소주점을 표현하는데, 반올림이 발생하여 6.2가 출력된다.

 

Q16) 다음 c프로그램의 실행 결과는?

#include<stdio.h>
void main() {
int a = 16;
printf("%d, ", a);
printf("%o, ", a);
printf("%x", a);

int b = 17;
printf("\n%d, ", b);
printf("%o, ", b);
printf("%x ",b);
}

A)

16, 20, 10

17, 21, 11

해설)

printf("%d, ", a);은 10진수 출력 printf("%o, ", a);은 8진수 출력 printf("%x", a);은 16진수 출력이다.

그래서 출력값은 16, 20, 10이된다.

printf("\n%d, ", b);은 10진수 출력 printf("%o, ", b);은 8진수 출력 printf("%x ",b);은 16진수 출력이다.

그래서 출력값은 17, 21, 11이 된다.


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

#include<stdio.h>
void main() {
int x = 0x11;
int y,  z;
y = x & 0x0f;
z = x | 0x0f;
printf("x=%d, y=%d, z=%d", x, y, z);
}

A) x=17, y=1, z=31

해설)

x=0x11이다. 16진수로 11이다. 10진수 변환하면 17

변수 x에 저장된 값 17과 15를 &연산하면 2진수 변환해서 &연산 하면된다. 둘다 &일때 1이므로 &연산하면 1이다.

변수 x에 저장된 값 17과 15를 | 연산하면 하나라도 1이면 1이므로 31이 된다.

x, y, z에 저장된 값을 10진수로 출력해주면 되므로 답은 x=17, y=1, z=31

 

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

#include <stdio.h>
int main(int argc, char *argv[]) {
int a = 4;
int b = 7;
int  c = a | b;

printf("%d", c);
return 0;
}

A) 7

해설)

변수 a에 저장된 값과 변수 b에 저장된 값은 |(or) 연산한다.

a 0 1 0 0
b 0 1 1 1
결과   1 1 1

이진수로 111이 결과값이 된다. 10진수 형태로 출력하면 7이 된다.

 

Q19) C 언어에서 정수 변수 a, b에 각각 1, 2가 저장되어 있을 때 다음 식의 연산 결과를 쓰시오.

a < b + 2 && a << 1 <= b

A)

1

해설)

논리 연산자 &&를 기준으로 좌항과 우항으로 나누어 참 거짓을 확인한다.

a < b+2는 참이므로 1를 반환한다.

a << 1 <= b는 참이므로 1를 반환한다.

1과 1를 &&(and)연산하면 1이다. 고로 답은 1이다.

 

Q20) C에서 '^'는 비트 간 XOR 연산을 나타낸다. 5^13의 결과는?

A)

8

해설)

5를 2진수로 변경하면 0101, 13를 2진수로 변경하면 1101이다.

XOR 연산을 하게 되면 두 비트가 다를 때 1을 리턴하기 때문에, 2진수 1000, 10진수 8를 출력한다.

 

 

반응형