Control Flow 제어문
statement와 block
x = 0
i++
printf(...)
와 같은 것에 ;
이 붙으면 문장(statement)가 된다.
{}
는 declaration과 statement를 한 곳에 모아준다. 이를 compound statement 혹은 block이라고한다.
block은 하나의 statement와 동일하게 취급한다. 그래서 for, if while, else 등에 쓰이는 {}
에는 ;
이 안붙는 것이다.
If - else문
if (expression)
statement1
else
statement2
다들 알다시피 expression이 맞으면 statement1이 동작하고 아니면 statement2가 동작한다.
물론 else문은 넣어도 되고 안넣어도 된다.
참고로 expression을 작성할 때, if(expression)
과 if(expression != 0)
은 같은 의미가 된다.
if-else문을 중복해서 사용하면, 어디에서 else를 사용할 지에 따라서 {}
를 잘 사용해야한다.
if(n > 0)
if(a > b)
z = a;
else
z = b;
이 코드는 아래의 코드와는 다르다.
if(n > 0){}
if(a > b)
z = a;
}
else
z = b;
if(n >= 0)
for(i = 0; i < n; i++)
if(s[i] > 0){
printf("...");
return i;
}
else
printf("error --n is negative\n");
이렇게 indent를 사용하면 어느 if에 연결된 else인지 상당히 헷갈린다.
따라서 연결된 if에 같은 줄에 있게 indent를 조절하자.
if(n >= 0)
for(i = 0; i < n; i++)
if(s[i] > 0){
printf("...");
return i;
}
else
printf("error --n is negative\n");
이런 indent에 의한 버그는 찾기 어려우므로, 중복된 if문의 경우 {}
를 적극적으로 사용하는 것이 좋다.
If - else if -else문
if (expression)
statement
else if (expression)
statement
else if (expression)
statement
else if (expression)
statement
...
else
statement
expression은 위에서 아래로 평가되며 하나의 expression이 참이면 그에 해당하는 statement가 실행되고, If - else if -else문에서 탈출한다.
else 부분은 위에 있는 모든 경우를 제외한 것을 의미하므로 default한 문장을 실행할 때, 혹은 오류 처리에 적절히 사용하면 된다. 물론 생략할 수 있다.
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 - 1;
else if (x > v[mid])
low = mid + 1;
else
return mid;
}
return -1;
}