4.1 Relational, Equality, and Logical Operators

관계, 등가, 논리 연산자

  • 관계 연산자
    -> ~ 보다 작다 : <
    -> ~ 보다 크다 : >
    -> ~ 보다 작거나 같다 : <=
    -> ~ 보다 크거나 같다 : >=

  • 등가 연산자
    -> 같다 : ==
    -> 같지 않다 : !=

  • 논리 연산자
    -> (단항) 부정 : !
    -> 논리곱 : &&
    -> 논리합 : ||

  • 연산 결과
    -> false : zero
    -> true : nonzero

우선순위, 결합법칙 (시험문제에 나옴) (무조건 외워라)

연산자결합법칙
(), ++(postfix), --(postfix)L->R
+(unary), -(unary), ++(prefix), --(prefix)R->L
*/%L->R
+ -L->R
<, <=, >, >=L->R
==, !=L->R
&&L->R
'
?:R->L
=, +=, -=, *=, /= etc.R->L
,L->R

4.2 Relational Operators and Expressions

관계 연산자와 수식

  • 관계연산자(이항연산자)
    -> <, >, <=, >=


  • -> a < 3
    -> a > b -> (a-b) < 0 으로 구현
    -> -1.3 >= (2.0 x + 3.3)
    -> a < b < c /
    syntactically correct, but confusing */

틀린 예

  • a =< b
  • a < = b
  • a >> b

a - b의 값과 관계식

시험문제에 나옴

4.3 Equality Operators and Expressions

등가 연산자와 수식

  • 등가 연산자 == 와 != 는 이항 연산자

  • -> c=='A'
    -> k !=2
    -> x + y == 3*z -7

잘못된 사용 예

  • a = b
  • a = = b - 1
  • (x + y) =! 44

(연산의 우선순위) (굉장히 중요함)

Common Programming Error

if (a = 1)

a == 1이라고 해야함. a=1은 assign이라고 부름

4.4 Logical Operators and Expressions

논리 부정 연산자 !

  • 식이 0 값을 가지면 그것의 부정인 정수값 1이 생성.
  • 식이 0이 아닌 값을 가지고 있으면 그것의 부정인 정수값 0을 생성

  • -> !a
    -> !(x + 7.7)
    -> !(a < b || c < d)

잘못 사용된 예

  • a!
  • a != b

  • 논리학 not(not s) = s

  • !!5 의 값은 1

(시험문제에 나옴)

예시

  • a && b
  • a || b
  • !(a<b) && c
  • 3 && (-2 * a + 7)

잘못 사용된 예

  • a &&
  • a | | b
  • a & b
  • &b

단축 평가 (Short-Circuit Evaluation)

  • 결과가 참인지 거짓인지 판명되면 더 이상 다음 수식을 평가하지 않는다

  • expr1 && expr2
    -> expr1이 0이면 어차피 0이므로 expr2 평가하지 않음

  • expr1 || expr2
    -> expr1이 1이면 어차피 1이므로 expr2 평가하지 않음


  • -> if ((3<2) && (4<5)) a = 4;
    -> if ((3>2) || (4<5)) a = 4;

단축평가를 사용한 간단한 예

4.5 The compound Statement

복합문

  • 복합문은 중괄호 {} 로 묶여진 선언문과 실행문.
  • compound_statement := {{declaration}_0+ {statement}_0+}

수식 문장과 공백 문장

  • expr_statement ::= {expr}_opt ;
  • 예:

4.7 The if and if-else Statements

if 와 else 문

  • if (expr)
    statement

-> 만일 expr이 0이 아니면 (true) statement 실행
-> 그렇지 않으면 statement는 실행되지 않고 다음 문장으로 넘어감

  • if (grade >= 90)
    printf("Congratulations!\n");
    printf("your grade is %d.\n", grade);

    올바른 If 문의 예

  • if (y!= 0.0)
    x/=y;

  • if (c == ' ') {
    ++blank_cnt
    printf()
    }

    참조

    if-else 문

4.8 The while Statement

While 문

  • while (expr)
    statement
    -> expr이 0이 아니면 statement를 실행한 후, 다시 while루프의 시작 부분으로 돌아감
    -> expr이 0이면 다음 문장으로 진행함

  • while (i++ < n)
    factorial *= i;

4.9 The for statement

for 문

  • for (expr1; expr2; expr3)
    statement
    -> 우선 expr1을 실행 후 expr2가 0이 아니면, statement를 실행한 후, expr3를 수행함
    -> expr2가 0이면, 다음 문장으로 진행

4.11 The commpa Operator

  • expr1, expr2
    -> expr1이 먼저 평가되고, 그 다음 expr2가 평가됨
    -> 전체 수식의 값과 형은 가장 오른쪽 피연산자를 따름
    -> 가장 낮은 우선순위 갖는 이항 연산자
    -> L-> R 결합법칙

  • 프로그램 상의 대부분의 콤마는 콤마 연산자가 아님
    -> 함수의 인자 목록에서 수식을 분리하는데 사용된 콤마
    -> 초기화 목록에서 사용된 콤마

4.12 The do Statement

do 문

  • do
    statement
    while (expr);
    -> 먼저 statement를 실행한 후, expr이 0이 아니면 do문의 시작 부분으로 돌아감
    -> expr이 0이면 다음 문장으로 진행
    -> do문은 while문의 변형된 형태
    -> while문은 루프 상단에서 조건을 검사하는 반면 do문은 루프 하단에서 조건을 검사


4.14 The goto Statement

goto 문 (중요하지 않음)

  • 현대 프로그래밍 방법론에서 유해한 구조물로 간주
  • 현재 함수내의 레이블이 붙은 문장으로 무조건 분기함으로써 다른 제어 흐름 매커니즘들이 제공하는 유용한 구조를 파괴

4.15 The break and Continue Statements

Break 문

  • break와 continue는 정상적인 제어의 흐름을 중단시킴
  • break 문은 루프의 내부나 switch 문으로 부터 빠져나옴

Continue 문

  • continue 문은 for, while, do 루프의 현재 반복 동작을 멈추고 즉시 다음 반복을 하게 함

4.16 The Switch Statement

switch 문

  • Switch 문은 if-else 문을 일반화한 다중 조건문
  • switch 다음에 오는 괄호안에 사용되는 제어식은 반드시 정수적형
  • 제어식의 평가 결과에 따라 제어는 해당되는 case레이블로 분기

4.17 The Conditional Operator(시험문제에 나옴)

-> min(y, z)를 뜻함

HomeWork

  • Exercises : 1, 11, 13, 19, 33

0개의 댓글