프로그래밍 C언어

분기문(Branch)과 조건문(Condition)

게임첫걸음 2024. 8. 9. 17:40

이번 글은 분기문과 조건문 그리고 부록입니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
#include <stdio.h>
 
#define POISON 0 //#: 전처리기(Pre-Proccessing) / define: 정의 / 이 문서에서는 0을 POISON으로 명명
//리터럴 상수 표현할 때 전체 대문자 표기
int main(void
{
    //분기문(Branch)
    //조건문(Condition)
    //비교연산자(Compare Operators)
    int lhs = 3;
    int rhs = 5;
 
    //참(True), 거짓(False)                   true 1, false 2
    printf("lhs < rhs: %d\n", lhs < rhs);
    printf("lhs <= rhs: %d\n", lhs <= rhs);
    printf("lhs > rhs: %d\n", lhs > rhs);
    printf("lhs >= rhs: %d\n", lhs >= rhs);
    printf("lhs == rhs: %d\n", lhs == rhs);
    printf("lhs != rhs: %d\n", lhs != rhs);
 
    //논리연산자(Logical Operatiors)
    printf("1 && 1: %d\n"1 && 1);            // &&: AND
    printf(" 0 || 1: %d\n"0 || 1);         // ||: OR
    printf("!1: %d\n"!1);                    // !: NOT
 
    ////////////////////////////////////////////////////////////////////////
 
    //if문: if (조건문) { } 
 
    if (1)         // 조건문에 0 은 거짓으로 취급해 출력값이 나오지 않고 나머지 모든 값은 참
    {
        printf("lhs is bigger than rhs\n");
    }
 
    //if else문: if(조건문) { } else { }
    if (lhs > 5)
    {
        printf("if else True\n");
    }
    else
    {
        printf("if else false\n");
    }
    
    //if else if문
    if (lhs > 5)
    {
        printf("lhs > 5\n");
    }
    
    /*
    else if (lhs <= 5)                        
    {
        if (lhs > 0) 
        {
            printf("lhs <= 5 && lhs > 0\n");
        }
    }
    */
 
    else if (lhs <= 5 && lhs > 0)            //위의 코드와 같은 결과지만 이 방식을 더 고수
    {
        printf("lhs <= 5 && lhs > 0\n");
    }
 
    else if (lhs < 0
    {
        printf("lhs < 0\n");
    }
 
    else
    {
        printf("No_Life");
    }
 
    //범위에 대한 조건문에도 순서가 있음 > / >= && > / > / < 
 
    ///////////////////////////////////////////////////////////////
 
    // switch문 switch는 조건문 대신 값이 등장함. case가 없어도 된다.
    // case문에는 정수만 들어간다. 상수화도 안되고 리터럴 상수만 가능하다. 
//문자 'A'같은 거도 사용가능하지만 문자열인 'Hello'같은건 사용 안됨.
 
    rhs = 10;
    const int case0 = 0;
    switch (rhs)
    {
    //case case0:
    //case POISON:
    //case kPoison:
    case 0:
        //int case0 = 0;
        printf("rhs is 0\n");
        break;
    case 3:
    {
        int case0 = 0;
        printf("rhs is 3\n");
        break;
    }
    default:
        printf("Default\n");
        break;
    }
 
    /*
    int a = 9, b = 4, c = 7, d = 1, e = 3;
    
    if ((a = 1) == 1 && (b = 2) == 3 && (c = 3) == 3 || (d = 4) == 4 || (e = 5) == 7)
    {
        printf("%d %d %d %d %d", a, b, c, d, e);
    }
    */
 
    return 0;
}
cs

 

 분기문과 조건문에서 많이 사용되는 대표적 연산자 2가지를 먼저 살펴보겠습니다.

<비교 연산자> (Compare)

 비교 연산자는 참(True)과 거짓(False)으로 값을 매길 때 사용하는 연산자입니다. >, >=, <, <=, ==, != 등이 존재합니다.

int lhs = 3;
int rhs = 5;

printf("lhs < rhs: %d\n", lhs < rhs);            // 미만
printf("lhs <= rhs: %d\n", lhs <= rhs);        // 이하
printf("lhs > rhs: %d\n", lhs > rhs);            // 초과
printf("lhs >= rhs: %d\n", lhs >= rhs);        // 이상
printf("lhs == rhs: %d\n", lhs == rhs);        // 동일한지
printf("lhs != rhs: %d\n", lhs != rhs);          // 동일하지 않은지

비교 연산자에서 true와 false에 대한 특수 지정이 없으면 자동으로 true면 1 false면 0으로 출력된다. 따라서 위의 코드들의 출력값은 1 1 0 0 0 1이 됩니다.

 

<논리 연산자> (Logical)

 논리 연산자는 AND, OR, NOT과 같은 곳에 사용되는 연산자로 &&, ||, ! 등이 있습니다.

printf("1 && 1: %d\n", 1 && 1);     // &&: AND
printf(" 0 || 1: %d\n", 0 || 1);         // ||: OR
printf("!1: %d\n", !1);                    // !: NOT

논리 연산자도 비교 연산자와 마찬가지로 특수 지정이 없으면 자동 1과 0으로 true, false를 출력합니다. 위의 코드들의 출력값은 1 1 0이 됩니다.

 

<조건문> (if)

 조건문 if에는 3가지로 if문, if else문, if else if문이 있습니다.

if (1) // 조건문에 0 은 거짓으로 취급해 출력값이 나오지 않고 나머지 모든 값은 다 나옴
{
printf("lhs is bigger than rhs\n");
}

위의 코드에서 if(1)의 주석에 따라 0은 false와 같은 성질을 가지고 있어 출력값 자체가 나오지않습니다. 그러나, 1 또는 다른 수나 함수, 수식을 사용하면 우선 true로 지정되어 출력이 됩니다.

 

if (lhs > 5)
{
printf("if else True\n");
}
else
{
printf("if else false\n");
}

 위의 코드는 if else문으로 if(조건)에 대한 나머지 값을 다루는 조건문입니다. 위의 코드상 lhs는 3이기 때문에 if의 조건에 부합하지 않아 else문의 if else false가 출력됩니다.

 

if (lhs > 5)
{
printf("lhs > 5\n");
}

else if (lhs <= 5 && lhs > 0) //위의 코드와 같은 결과지만 이 방식을 더 고수
{
printf("lhs <= 5 && lhs > 0\n");
}

else if (lhs < 0) 
{
printf("lhs < 0\n");
}

else
{
printf("No_Life");
}

 

 위는 if else if문으로 if else문의 처음과 시작이 같지만 중간값에 대한 else if문이 추가되었습니다. 이 조건문은 범위에 대한 조건에서 좀더 세분화된 범위에 대한 출력값을 원할 때 사용됩니다. 보통은 조건 내 변수값에 대해 Big -> Small( > / >= && > / > / < )방식으로 조건문이 쓰여지고 else if는 i <= n && i > nn 과 같이 중간값의 조건문을 다룰 때 사용됩니다. 

 

<조건문> (switch ~ case문)

 switch문은 if문의 사용이 잦을 때 가독성을 높이기 위해 사용됩니다. 쉽게 생각해 범위에 대해 분류를 하신다고 생각하면 됩니다. 단점은 정수 자료형인 char와 int만 사용이 가능합니다. float, double 등은 사용할 수 없습니다.

 

rhs = 10;
switch (rhs)
{
case 0:
printf("rhs is 0\n");
break;
case 3:
{
printf("rhs is 3\n");
break;
}
default:
printf("Default\n");
break;
}

case 0, 과 case 3, 나머지 default 3가지로 분류되었는데 분류하고난 뒤에는 각 case별로 break 코드를 꼭 넣어야합니다. rhs 변수 초기값은 10이기 때문에 case 0, case 3은 발동되지않고 default에 대한 출력값만 발동합니다. 그러므로 출력값은 Default입니다. 

 

 

 

'프로그래밍 C언어' 카테고리의 다른 글

배열 (Array)  (0) 2024.08.12
반복문(Loop)  (1) 2024.08.11
연산자(Operators)와 형변환(Type Casting)  (0) 2024.08.09
변수(Variable)와 상수(Constant)  (0) 2024.08.08
고정소수점과 부동소수점의 이해  (0) 2024.08.08