C언어에서 제어문은 계산순서를 정하는 것으로서 if ~ else, else if 문, switch 문등이 있습니다.
1. 문장과 블럭 (Statements and Block)
x=0 또는 i++, printf(...) 같은 것은 수식 (expression)이라고 하며, 이들이 세미콜론(;)으로 끝이 나면 문장(statement)이 됩니다.
i = 0;
x++;
printf("hello, world!\n");
C언어에서 세미콜론은 문장의 끝을 나타냅니다.
중괄호 { }는 여러개의 선언문이나 문장을 모아서 복합문(compound statement)이나 블럭(block)을 만드는데 쓰입니다.
2. if ~ else 문
if ~ else문은 프로그램 흐름을 결정하기 위해 사용되는데 문법은 아래와 같습니다.
if (expression)
statement1
else
statement2
여기서 else 이하의 부분은 있을 수도 있고 없을 수도 있습니다. 먼저 if문의 괄호안의 expression을 계산하여 값이 참이면 statement1이 수행되고, 참이 아니면 statement2가 수행됩니다. 예제를 보겠습니다.
if (a > b)
z = a;
else
z = b;
a의 값이 b보다 크면 z에 a를 대입하고, 그렇지 않으면 z에 b값을 넣는 간단한 예제입니다.
if ~ else문이 여러개가 중첩되어 있는 경우 문장의 의미가 모호해 져 의도와 다른 엉뚱한 결과가 나올 수 있습니다.
if (n > 0)
if (a > b)
z = a;
else
z = b;
이 경우 else는 안쪽의 if와 쌍을 이룹니다. 만약 바깥쪽 if와 쌍을 이루려고 한다면,
if (n > 0) {
if (a > b)
z = a;
} else
z = b;
중괄호로 명확하게 표현을 해야 합니다.
3. else if 문
if (expression1)
statement1
else if (expression2)
statement2
else if (expression3)
statement3
else
statement4
검사해야할 조건이 많고 그에 따라 다른 수행을 하여야 하는 경우 많이 사용되는 형식입니다. 수식(expression)은 순서에 따라 계산되는데 말하자면 첫번째 expression1을 검사하여 참이면 statement1을 수행하고, 거짓이면 expression2를 검사하여 참이면 statement2를 수행하는 식으로 순차적으로 진행을 합니다.
아래의 이진 탐색함수 코드를 보며 else ~ if의 사용 예를 보도록 하죠.
int binsearch(int x, int v[], int n)
{
int low, high, mid;
low = 0;
high = n-1;
while (low <= high) {
mid = (low+high) / 2;
if (x < v[mid])
high = mid;
else if (x > v[mid])
low = mid + 1;
else
return mid;
}
return -1;
}
예제에서는 x의 값이 배열의 중간값인 v[mid]와 비교하여 큰지 작은지 같은지 여부를 검사하는 예입니다.
4. switch ~ case문
switch ~ case문은 다중결정의 하나로 수식이 상수값에 일치하는지 알이보고 그에 따라 분기합니다. 아래와 같은 if~else~if 문장이 있다고 합시다. 예제는 month를 검사하여 해당 월이 31일인지, 30일인지, 28일인지 (윤년 계산은 안함) 판단하는 기능을 합니다.
if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12)
days = 31;
else if (month == 4 || month == 6 || month == 9 || month == 11)
days = 30;
else
days = 28;
이 예제를 switch ~ case문으로 바꿔보면 아래와 같습니다.
switch (month) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
days = 31;
break;
case 4:
case 6:
case 9:
case 11:
days = 30;
break;
default:
days = 28;
break;
}
month의 값에 따라 여러 case로 분기를 하게 되는데 if~else~if문처럼 3가지 종류의 case로 분기를 시켜줍니다. 그리고 break문은 switch~case 블럭에서 빠져나가는 역할을 하게 되는데, break를 쓰지 않으면 모든 case를 다 검사하게 됩니다.
지금까지 제어문 중 if~else~if, switch~case 제어문에 대해 알아봤습니다. 다음시간에는 순환문에 대해 알아보겠습니다. 일단 순환문까지 공부를 마치면 웬만한 기본 예제는 이해하는데 어려움이 없을 겁니다. 그럼 안녕~
'프로그래밍 > C언어' 카테고리의 다른 글
C언어 공부하기 - 순환문(2) do~while, break, continue, goto (0) | 2020.07.25 |
---|---|
C언어 공부하기 - 순환문(1) while, for (0) | 2020.07.23 |
C언어 공부하기 - 연산자 (0) | 2020.07.20 |
C언어 공부하기 - 변수와 상수 (0) | 2020.07.18 |
C언어 공부하기 - 시작하기 (0) | 2020.07.16 |
댓글