#2 다음 C언어로 구현된 프로그램을 분석하여 그 실행 결과를 쓰시오
#include <stdio.h>
main () {
int i = 10, j =10, k = 30;
i /= j;
j -= i;
k %= j;
printf("%d, %d, %d\n", i, j, k);
}
풀이
i | j | k |
10 | 10 | 30 |
1 | 9 | 3 |
처음 i j k는 10 10 30 인 것을 알 수 있다.
여기서 i /= j; 가 10/10인 값을 다시 i에 집어넣으라는 뜻인데 그래서 답이 1로 나온다.
다음 j 역시 10- 1 로 계산을 하게 되니 9로 나오게 되고
마지막으로 k 30은 30%9로 계산으로 하여 나머지 값 3이 나오게 되니
정답이 1, 9, 3으로 나온다.
문제#4 다음 C언어로 구현된 프로그램을 분석하여 그 실행 결과를 쓰시오
#include <stdio.h>
main () {
int result, a = 100, b = 200, c= 300;
result = a < b? b++ : --c;
printf("%d, %d, %d\n", result, b, c);
}
풀이
result = a < b ? b++ : --c;
여기서 a < b ? 가 조건문이고 참이면 b++이며 거짓이면 --c를 계산하면 된다
100보다 200이 큰게 참이기 때문에 b++로 b에는 1이 더해져 201의 값이 나온다.
그리고 b 의 값은 result에 넣는다.
그래서 출력 결과 값은 100, 201, 300 으로 나옴
result | a | b | c |
200 | 100 | 200 | 300 |
201 |
문제 5
#include <stdio.h>
main () {
int i, j;
scanf ("%o#%x", &i, &j);
printf("%d %d", i, j);
}
<입력>
15#22
풀이
정수형으로 i, j 선언
%o는 8진수로 입력 받아라 %x는 16진수로 입력 받으라는 뜻
입력 받은 데이터는 i랑 j에 넣어라
입력은 #을 기준으로 하여 15가 i 변수로 들어가고 22는 j변수값으로 들어감
15(8)을 2진수로 고치면 1101 이걸 다시 10진수로 고치면 13(10)
22(16)을 2진수로 100010 역시 10진수로 고치면 32(10)
그래서 답이 13, 34 이렇게 출력됨
**** 다시 풀어보기
문제 6
#include <stdio.h>
main() {
int j = 024, k =24, L = 0x24, hap;
hap = j + k + L ;
printf("%d, %d, %d, %d\n", j, k, L, hap);
}
풀이
int j = 024, k =24, L = 0x24, hap;
이 부분에서 j는 숫자 앞에 0으로 시작하게 되면 8진수라는 걸 알아야함
즉 j에는 24(8) L에는 0x니깐 16진수여서 24(16)
이제 이걸 다 10진수로 바꿔야 함
j= 2x8¹ + 4x8⁰
= 16 + 4
= 20(10)
L = 2 x 16¹ + 4 x 16⁰
= 32 + 4
= 36 (10)
hap = j + k + L ;
이걸 다 더하면 hap은 80이 나옴
printf("%d, %d, %d, %d\n", j, k, L, h
j | k | L | hap |
24(8) | 24(10) | 24(16) |
문제 7
#include <stdio.h>
main(){
int i= 5, j = 4, k = 1, L, m;
L = i > 5 || j != 0;
m = j <= 4 && k < 1;
printf("%d, %d\n", L, m);
}
L = i > 5 || j != 0;
이거는 or 연산인데 하나라도 참 값이 있으면 참이라는 뜻
앞은 거짓이고 뒤에가 참이니깐
0(거짓) || 1(참) = 1(참)이 되어 L에 1이 저장된다.
m = j <= 4 && k < 1;
여기서는 4<= 4 여서 참이고 뒤에 k<1 역시 1<1 인데 거짓이다.
이 두가지를 and연산자로 받는다 둘다 참일 때 참 값으로 받는데 하나만 참이라서 m에는 0이 나온다.
출력되는 결과값은 1, 0 이 된다.
문제 10
#include<stdio.h>
main (){
int a = 5, b = 10, c = 15, d = 30, result;
result = a * 3 + b > d || c - b / a <= d && 1;
printf("%d\n", result);
}
산술 관계 논리 연산 섞여 있는데
우선 순위에 맞게 계산하면 됨
제일 처음 계산 해야하는거 산술 연산
result = a * 3 + b > d || c - b / a <= d && 1;
첫번째 앞에 있는 곱하기 먼저 계산
a *3
두번째 -b / a
세번째 a * 3 + b
네번째 c - b / a
다섯번째 a * 3 + b > d
여섯번째 c - b / a <= d
이렇게 산술 관계 연산이 끝나면
그 다음 해야할게 논리 연산 and랑 or 중 우선 순위 높은건 and이다
그래서 and를 먼저 해주고 마지막으로 or을 함.
'자격증공부 > 정보처리기사' 카테고리의 다른 글
파이썬 기출문제 풀기 (0) | 2023.10.05 |
---|---|
c언어 포인터 문제 (0) | 2023.10.05 |
[정처기] C언어 제어문 (0) | 2023.09.21 |
[정처기 실기] 기출문제 사이트 (0) | 2023.03.25 |
비전공자를 위한 정보처리기사 필기 단기간 합격하기 (1) | 2023.03.18 |