iOS/정보처리기사

[정보처리기사] C언어 - 관계연산자/논리연산자, 조건문

Chafle 2022. 5. 23. 19:50
반응형
관계연산자의 종류

 

참은 1,  거짓은 0을 출력합니다.

연산자 결과값
== 10==9 0
!= 3 != 3 0
> 5 > 5 0
>= 5 >= 5 1
< 7 < 7 0
<= 7< = 7 1

 


논리연사자의 종류

 

논리연산자는 비트를 논리한 것이다

! 는 부정한 것 즉, not의 의미

&&는 AND연산으로 비교하는 것, 두 값이 모두 참일 때만 1로 출력, 하나라도 거짓이면 거짓으로 0 출력

||는 OR와 같은데, 두 값중에 하나라도 참이면 1을 출력, 둘 다 거짓일 때만 0 출력

 

연산자 결과값
! !9 0
[9는 값인데, 값이 없냐고 물어본 것이므로, 결과는 거짓 (9라는 값이 있음) 그러므로 0]
&& 3 >= && 3 > 3 0
[1 && 0 이고 하나라도 거짓이므로 0]
|| 5 > 5 || 5 >= 5 1
[0 || 1 이고 하나라도 참값이 존재 하기때문에 1출력]

 


 

조건문

 

단순 if문

 

조건에 만족하면 {} 문을 탄다

 

 

if (조건) {

조건이 만족할 때의 처리;

}

 

 

if ~ else문

 

if (조건) {

조건이 만족할 때의 처리;

}

else {

조건이 아닐 때의 처리

}

 

 

다중 if문

 

if( 조건1) {

조건1이 만족할 때의 처리;

}

else if (조건2) {

조건2가 만족할 때의 처리

}

else {

모든 조건이 아닐 때의 처리

}

 

 


 

 

Q1

#include<stdio.h>

int main()

{

int i = 3;

int j = 4;

if( (++i > j--) && ( i++ < --j) ) i = i-- + ++j;

else j = i-- - --j;

printf("%d₩ , i);

}

 

 

 

해설

※ 편의를 위해 괄호를 쳐서 연산자를 구분합니다.

 

식의 해석

if( (++i > j--) && ( i++ < --j) ) i = i-- + ++j;

->

 (++i > j--) && ( i++ < --j) 가 참이라면  i = (i--) + (++j)를 수행해라

(++i > j--) && ( i++ < --j) 가 거짓이라면 else구문인 j = (i--) - (--j);를 수행해라

 

 

if문 풀이

 

phase1. i = 3, j = 4

 (++i > j --) && (i++ < --j)

(++i  > j --) 에서 i는 선 1증가, j는 후 1감소한다

 

++i = 3-> 4 이고  j = 4 이다

4 > 4는 거짓이므로 0이다

이후 j-- = 4->3

 

 

&&은 둘 다 참이여야 1이고 하나라도 거짓이면 0이기 때문에 뒤에 i++ < --j를 할 필요도 없이 거짓인 구문이므로

else구문을 타면 됩니다.

컴파일러가 &&연산이 나오고 순차적으로 False가 나오는 순간 판단해서 뒤에 연산은 실제로 진행조차 안한다고 합니다.

 

phase2. i = 4, j = 3

else구문인 j = (i--) - (--j)를 수행하면

i--는 식을 먼저 수행하고 1감소 시키니깐 4

--j는 먼저 1감소 시키고 식을 수행하니깐 2

j = 4-2인 2이고

i--를 진행 하면 4->3

j = 2

 

 

phase3. i = 3, j = 2

printf("%₩n",  i) 

i값을 출력시키면 phase3의 i값인 3을 출력

반응형