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를 출력한다.
'자격증 > 정보처리기사 실기 문제 풀이' 카테고리의 다른 글
흥달쌤 정보처리기사 실기 프로그램 문제(C언어 문제 31~40) (0) | 2023.04.10 |
---|---|
흥달쌤 정보처리기사 실기 프로그램 문제(C언어 문제 21~30) (0) | 2023.04.09 |
흥달쌤 정보처리기사 실기 프로그램 문제(C언어 문제 1~10) (0) | 2023.04.07 |
흥달쌤 정보처리기사 실기 데이터베이스 문제(DML(Data Manipulation Language)) (0) | 2023.04.06 |
흥달쌤 정보처리기사 실기 데이터베이스 문제(DCL) (0) | 2023.04.05 |