농담곰담곰이의곰담농

C 프로그래밍 : 현대적 접근 05 | 선택문

by 브이담곰

1 논리표현식

관계 연산자

표현식에 사용되었을 때 결과값으로 0 또는 1이 나온다.

 

동등 연산자

 

논리 연산자

! 는 단항, && ❘❘ 는 이항

 

 

2 if문

표현식의 값을 사용하여 두 가지 선택지 중 하나를 고르게 만든다.

if  (  expression  )  statement

 

복합문

만약 if문이 여러 구문을 제어하게 만들고 싶다면 복합문compound statement를 이용하면 된다.

{  statements  }

 

복합문 내에 있는 구문이라도 반드시 세미콜론으로 끝나야하지만, 복합문 자체는 세미콜론으로 끝나지 않는다.

if (line_num == MAX_LINES) {
    line_num = 0;
    page_num++;
}

 

else 절

if 문은 else문을 포함할 수 있다.

if (  expresssion  ) statement else statement

 

else 뒤에 나오는 구문은 괄호 안의 표현식이 값이 0일때 실행된다.

 

 

조건 표현식

조건연산자conditional operator은 두 가지 기호(?와:)로 구성되어있으며, 다음과 같이 동시에 사용된다.

expr1 ? expr2 : expr3

3개의 피연산자를 필요로하기 때문에 삼중연산자 ternary operator이라고 부른다.

 

int i;
int j;
int k;

i = 1;
j = 2;
k = i > j ? i : j;           /* k의 값은 2이다 */
k = (i >= 0 ? i : 0) + j;    /* k의 값은 3이다 */

 

C89와 C99에서 불 방식의 값

수년간 C언어는 제대로된 불리언형이 없었고, C89 표준도 마찬가지었다. 따라서 int 변수를 정의해 0 또는 1을 할당해서 사용하였다. 가독성을 높이기 위해 아래와 같이 매크로 정의를 하여 사용하였다.

#define TRUE (1)
#define FALSE (0)

 

C99에선 _Bool 형식을 제공하기 때문에, 불리언 형식이 존재한다.

<stdbool.h> 헤더파일은 true와 false라는 매크로를 갖고 있고, 각각 1과 0을 의미한다.

아래와 같이 코드를 작성할 수 있다.

flag = false;
…
flag = true;
3 switch문
switch (grade) {
case 4:
    printf("훌륭해요!")
    break;
case 3:
    printf("좋아요!");
    break;
case 2:
    printf("평균이네요!");
    break;
case 1:
    printf("좋지 않아요!");
    break;
case 0:
    printf("좀 더 노력하세요!");
    break;
default:
    printf("잘못된 학점입니다");
    break;
}

 

계단식 if문보다 switch문이 더 가독성이 좋고 특히 조건이 많을수록 실행속도도 더욱 빠르다.

 

● 제어식controlling expression. switch라는 단어 다음엔 반드시 괄호로 둘러싸인 정수 표현식이 나와야한다. C에서는 문자를 정수로 취급하므로 switch문에 사용할 수 있다. 하지만 고정소수는 사용할 수 없음.
● 조건 부호case label. 각 조건은 다음 형식으로 부호가 붙여져야한다.
● 구문statements. 각 조건부호 다음엔 한 개 이상의 구문이 올 수 있다. 굳이 복합문처럼 중괄호를 써줄 필요가 없다. 각 조건부호의 구문은 주로 break문으로 끝난다.

 

break 구문의 역할

break → switch문에서 나오게 만든다.

switch문은 "계산된 도약computed jump"이기 때문.

제어식이 평가될 때 제어는 switch문의 표현식의 값에 해당되는 조건부호로 도약jump하게 된다.

조건부호 = switch문 내에서의 이동지점.

switch (grade) {
case 4:
    printf("훌륭해요!")
case 3:
    printf("좋아요!");
case 2:
    printf("평균이네요!");
case 1:
    printf("좋지 않아요!");
case 0:
    printf("좀 더 노력하세요!");
default:
    printf("잘못된 학점입니다");
}

 

블로그의 정보

농담곰담곰이의곰담농

브이담곰

활동하기