C Study 0004

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...이다.

Reference

0%