본문 바로가기
Basic/C/C++

[C언어] 제 8 강 : 제어문

by boxbop 2012. 1. 11.
반응형

 프로그램의 흐름을 제어해주는 제어문에 대해서 알아보겠습니다.
대표적으로 조건문이나 반복문이 있지요~

1. if 문

 프로그래머가 정의한 조건을 만족시길때만 실행하도록 해주는 함수입니다.
예를들어 '내가 컴퓨터를 가지고 있다' 라는 조건을 만족하면 특정 기능을 수행하고 그렇지 않다면 수행하지 않도록 합니다.

int main(void)
{
    int n = 10;
    if( n>5)
    {
         printf("5보다 크다.\n");
     }
 }

 n이라는 값은 5보다 크므로(n>5) printf문을 수행합니다. 만약 n이 5보다 크지 않다면 printf문은 무시가 되겠죠~? 사실 if문은 else문과 항상 같이 다닙니다. else문은 if문을 만족시키지 않을때 수행됩니다.

int main(void)
{
    int n = 1;
    if( n>5)
    {
         printf("5보다 크다.\n");
     }
    else
     {
         printf("5보다 같거나 작다.\n");
      }
 }

 n은 5보다 작기때문에 n>5 라는 조건을 만족하지 않으므로 else문이 실행됩니다. 따라서 출력값은 "5보다 같거나 작다."가 되겠죠? 그렇다면 if문은 하나의 조건만 사용할 수 있느냐? 아닙니다. 여러가지의 조건을 사용할 수 있습니다.

 if( n > 0) ....
 else if (n == 0 ) ....
 else if (n < 0 )....
 else

이러한 식으로 여러개의 조건을 검사할 수 도 있습니다. 경우에 따라서는 if~else문을 대신하여 사용할 수 있는 연산자가 있습니다. 이러한 연산자를 '조건 연산자'라고하며 '삼 항 연산자'라고 부르기도 합니다.

 '조건' ? A : B    -> 조건이 참이면 A, 거짓이면 B를 반환합니다.

예를 들어보면 

 (y > 0) ? 1 : 2  라고 나타낸다면 y가 0보다 크다면 1을, 같거나 작다면 2를 반환합니다. 

 int x = (y > 0) ? 1 : 2;

 이렇게 실제 프로그램 코드에서 사용할 수 있습니다.

2. switch 문

 if, else if, else 문을 좀 더 간략화 하여 표현할 수 있는 것이 switch문 입니다.

if (n == 1 ) printf("1 입니다.");
else if (n == 2 ) printf("2 입니다.");
else if (n == 3 ) printf("3 입니다.");
else printf(" 1,2,3 도 아닙니다.");

 이러한 if ~ else 문과 아래에 나타나 있는 switch문은 동일합니다.

 switch (n)
 {
    case 1:
          printf("1입니다.");
          break;
    case 2:
          printf("2입니다.");
          break;
    case 3:
          printf("3입니다.");
          break;
    default:
          printf("1,2,3 도 아닙니다.");
  }

 여기서 못 보던것이 등장했습니다. 'break'라는 것은 switch문을 빠져나가겠다는 소리입니다. switch (n) 에서 n에 들어가는 숫자를 검사합니다. 이 숫자가 case 1, case 2, case 3에 의하여 조건검사 후에 만족하는 case문을 실행합니다. 실행후에 break문을 만나 빠져나오게 되는거죠. 만약 break문이 없다면 문장을 실행 후에도 switch문을 빠져나가지 않고 계속 실행합니다. 만약 n의 값이 2라면 case 2라는 문장을 실행 시킵니다. "2입니다."라고 출력이 되겠죠? 그리고 break문이 없기때문에 n값은 2임에도 불구하고 case 3의 문장을 실행합니다. 마찬가지로 default문장까지 쭉~~~실행이 되겠죠~? 어때요 이해가 좀 가셨나요? 결정적으로 switch문은 조건을 위한 비교 연산이 올 수 없습니다. 단지 정수형의 값을 검사하는 정도에서 그치고 말죠...

3. while 문

 3번 부터는 반복문에 대한 내용입니다. 말그대로 일정한 내용을 반복해서 출력하거나 반복해서 입력받고 싶을때 반복문을 사용합니다. 반복문에서 정의된 내용을 원하는 횟수 또는 조건을 충족시킬때까지 반복합니다.

 while (n < 5)
 {
     n++;
     printf("while문 입니다.\n");
  }


 n 이 5보다 작다면 아래와 같은 반복문을 계속 실행합니다. 즉 조건검사를 한번하고 이 값을 만족한다면 {, }의 문장을 한 번 수행하고 다시 조건검사를 수행한 뒤 만족하면 다시 문장을 수행합니다.

 while문의 조건검사 부분은 사실상 거짓값 0이 되면 수행되지 않습니다. 즉 0 이외의 값, 참값일 경우만 블록 부분의 문장을 수행하게 되죠. 만약 while(1)이라고 프로그램을 제작한다면 죽을때까지 while문만 실행하겠죠? 이러한 루프를 무한루프라고 합니다.

while(1)
{
     printf("종료하려면 1을 입력해 주세요.\n");
     scanf("%d",&number);
     if( number == 1) break;
 }

 이러한 문장은 사용자가 1을 입력하기 전까지는 무한적으로 반복문이 실행합니다. 그러다가 1을 입력하게되면 break문을 만나서 while문을 벗어나게 되는거죠. break문은 유용하게 쓰이니까 기억해두시면 좋습니다. 아~~ 그리고 break문은 자신을 감싸고있는 하나의 문장만 탈출을 합니다.^-^ 참고해두세요~

 break문과 대충? 비슷한 기능을 가지고 있는 것이 하나 있는데요 바로 continue입니다. continue문은 실행하던 반복문의 나머지 부분을 생략하고 다시 조건검사 부분으로 이동합니다.

while(1)
{
     printf("종료하려면 1을 입력해 주세요.\n");
     scanf("%d",&number);
     if( number == 1) contiue;
     printf("contiue가 실행되지 않았습니다.");
 }

 만약 사용자가 1을 입력한다면 continue문을 만났기 때문에 continue가 실행되지 않았다는 출력함수를 실행하지 않고 다시 조건 검사 부분으로 건너뛰며 진행합니다. break와 마찬가지로 continue도 유용하게 사용되므로 알아두세요

4. do ~ while 문

 while문과는 비슷하지만 한가지 차이점이 존재하는데요, while문은 앞에서 조건검사를 먼저 수행했지만 do while문은 조건 검사를 뒷 부분에서 합니다.

 do
 {
       n++;
       printf("do while문 입니다.\n");
  }while(n<10);

 즉 조건검사 부분이 뒤에 존재하기 때문에 적어도 1번은 수행된다는 이야기 입니다. 이러한 do ~ while문이 사용되는 좋은 예는 사용자로부터 어떠한 값을 먼저 입력받을때 적어도 한번은 실행되어야 하므로 do ~ while문을 사용하는 것이 좋습니다.

 5. for 문

 반복문 중에서 제일 많이 사용하는 문장이 for문 입니다. 그만큼 깔끔하기 때문입니다.

 for( 초기식 ; 조건식 ; 증감식)
 {
      구현 내용
  }

 이러한 모습이 for문의 일반적인 모습입니다. 직접 예를 들어보겠습니다.

for ( int i = 0 ; i < 5 ; i++ )
{
    printf("for문 입니다.\n");
 }

 이러한 for문은 i라는 변수에 0을 대입하고 i가 5보다 작기 때문에 printf문을 수행한 다음 i의 값을 1증가시킨뒤 다시 i가 5보다 작은지 검사합니다. 즉 초기식은 for문이 실행될때 단 한번만 실행이 되구요 그다음부터는 조건식 -> 구현 내용 -> 증감식 -> 조건식 -> 구현내용 .... 이러한 순서로 반복됩니다.

 여기까지 C언어의 조건문과 반복문에 대하여 알아보았습니다. 조건문과 반복문 모두 중첩이 가능합니다. 즉 조건문 내에 또 다른 조건문, 반복문 내에 또다른 반복문이 존재 할 수 있다는 점이죠. 코감기 때문에 포스팅하면서 답답해 죽는 줄 알았습니다...ㅠㅠㅠ 재채기는 나올랑 말랑.... 코는 막혀있고..ㅠㅠㅠㅠ왜 저는 남들 안걸릴때 잘 걸리는지 모르겠더군요...ㅠㅠㅠㅠ 무튼 건강관리 잘하기실 바라겠습니다. 오늘 C언어는 요기까지만 공부하도록 하겠습니다^-^
감사합니다~~~(--)(__)(--)!!!
반응형