본문 바로가기
자격증공부/정보처리기사

[정처기]c언어 문제 데이터입출력 연습하기

by jyee 2023. 9. 20.
728x90
반응형

 #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을 함. 

 

 

 

 

 

728x90
반응형