관계연산자의 종류
참은 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을 출력
'iOS > 정보처리기사' 카테고리의 다른 글
[정보처리기사] C언어 - 진법전환(2진수,8진수,16진수) / 비트연산(&,|,^,<<,>>) (0) | 2022.05.26 |
---|---|
[정보처리기사] C언어 - 출력 변환 기호(%d, %f, %c, %s, %x, %o, 16진수, 8진수 변환) (0) | 2022.05.24 |
[정보처리기사] C언어 - 연산자 우선순위 (0) | 2022.05.23 |
[정보처리기사] C언어 - 산술연산자(a++, ++a, a+= 등) (0) | 2022.05.20 |
[정보처리기사] C언어 - 변수의 종류와 유효범위(지역변수, 전역변수, 정적변수, 동적변수) (0) | 2022.05.20 |