C언어 공부 0004
조건문
- 프로그램을 수행하면서 사용자가 조건을 제시하고, 이를 만족하거나 그렇지 못할 때 수행할 내용을 기술함으로써, 프로그램에 일종의 가지치기를 할 수 있는 기능이다.
- 아주 간단한 일상 예를 들어보면,
비가 오면 우산을 써야해. 일기예보에서 내일은 비가 온대.
라는 문장에서, 내일은 비가 올 것이고, 비가 오면 우산을 써야한다고 한다. 따라서 비가 온다는 조건을 만족했으므로, 우산을 써야하는 것이다.
조건이란
- 국어 문장의
만약 ~라면, ~할 것이다
에서만약 ~라면
부분을 조건이라 할 수 있다.~할 것이다
부분은 조건이 만족될 때, 행해야 할 동작을 나타낸 부분이다.
- 따라서 지정한 조건이 만족하냐 못하냐를 이용해, 경우에 따른 동작을 달리하여 프로그램에 일종의 분기점을 줄 수 있다.
if문
- 가장 기본적인 조건문의 형태로, 조건이 만족될 때 수행할 내용을 적는 구문이다.
- 형태
if(조건식)
{
수행할 내용
}
if-else문
- if문에서 발전한 형태로, if문의 조건이 만족되지 않았을 때의 경우에 수행할 내용을 추가한 구문이다.
- 형태
if(조건식)
{
수행할 내용 1
}
else
{
수행할 내용 2
}
- 위 예시에서
조건식
이 만족되면수행할 내용 1
이, 그렇지 않으면수행할 내용 2
가 실행된다.
if-else if-else문
- if-else문에서 발전한 형태로, if문의 조건을 만족하지 않을 때, 추가적인 조건을 제시하여 해당 조건을 만족할 경우에 수행할 내용을 추가한 구문이다.
- else if는 여러 번 쓸 수 있다.
- 형태
if(조건식 1)
{
수행할 내용 1
}
else if(조건식 2)
{
수행할 내용 2
}
.
.
.
else if(조건식 N-1)
{
수행할 내용 N-1
}
else
{
수행할 내용 N
}
- 위 예시에서
조건식 1
이 만족되면수행할 내용 1
이, 조건식 1을 만족하지 못한 상태로조건식 2
를 만족하면수행할 내용 2
, 조건식 N-2을 만족하지 못한 상태로조건식 N-1
를 만족하면수행할 내용 2
, 그렇지 않으면수행할 내용 N
이 실행된다.
Nested if statement
- 조건문은 중첩하여 사용할 수 있다.
- 예
if(조건식 1)
{
수행할 내용 1
if(조건식 2)
{
수행할 내용 2
}
수행할 내용 3
}
- 위 예시에서
조건식 1
을 만족하면수행할 내용 1
이 실행되며, 그 상태에서조건식 2
를 만족하면수행할 내용 2
를 실행한 다음수행할 내용 3
이 실행되고,조건식 2
를 만족하지 않으면수행할 내용 3
이수행할 내용 1
을 이어서 실행된다. - 위 예시에서는 if문 안에 if문이 들어갔지만, else if문이나 else문 안에도 조건문이 들어갈 수 있다.
switch문
- switch문은 if문에서 조건의 결과가 여러 값으로 나올 때, 편하게 사용하기 위한 if문이라고 생각하면 편하다.
- 형태
switch(조건식)
{
case 값1:
수행할 내용 1
break;
case 값2:
수행할 내용 2
break;
case 값N-1:
수행할 내용 N-1
break;
case default:
수행할 내용 N
break;
}
- if-else if-else 구문과 거의 비슷한 모습을 볼 수 있다.
- if는 첫 번째 case, else if는 k번째 case, else는 default에 대응한다.
- 수행할 내용 밑 줄에는
break;
가 있는데, 이를 작성하지 않으면break;
를 만날 때까지 있는 모든 case의 수행할 내용이 수행되게 된다.- 의도적으로 이를 이용하여 필요한 곳에 쓸 수도 있다.
goto문
- goto문은 코드에 특정 분기를 기록하여,
goto 분기명;
을 만나면 해당 분기점으로 이동하여 코드를 실행하는 구문이다. - 따라서 사용을 하게되면 프로그램의 흐름을 따라잡는데 어려움이 발생한다.
- goto를 이용하여 loop를 만들 수 도 있지만, 권장하지 않는다.
- 예
goto A;
printf("HELLO\n");
A:
printf("BYE\n");
- 위의 예에서
HELLO
는 출력되지 않고BYE
가 출력된다.
최종 예제
- 이 글에서 다룬 내용들을 모두 담은 예제 소스를 작성해보았다. 개연성이 전혀 없는 코드이지만, 프로그래밍을 처음 배운다면 코드의 흐름을 파악하는 것에 좋은 연습이 될 수 있을거라 믿는다.
#include <stdio.h>
int main()
{
int a = 3;
int b = 4;
int c, d = 0;
if(a + b > 10)
{
c = a * 2;
printf("Case 1 -- ");
}
else if(a + b > 8)
{
c = b * 2;
printf("Case 2 -- ");
}
else
{
if(a + b >= 6)
{
c = a + b + a * b;
printf("Case 3 -- ");
}
else
{
c = a * ++b;
printf("Case 4 -- ");
}
}
cond:
if(d == 4)
{
printf("// GOTO IS BAD...");
goto end;
}
switch(c)
{
case 6:
d = 1;
break;
case 8:
d = 2;
case 15:
d = 3;
break;
case 19:
d = 4;
break;
default:
d = 0;
break;
}
goto cond;
end:
printf("d = %d ", d);
return 0;
}
- 이 예제의 출력값은
Case 3 -- d = 4 // GOTO IS BAD...
이다.