[C++] 제어문


Study/C , C++ , MFC  2020. 3. 12. 23:33

안녕하세요. 명월입니다.


이 글은 C++에서 사용되는 제어문에 대한 글입니다.


C++에서 사용되는 제어문은 Java와 C#과 크게 다르지 않습니다. 사실 Java와 C#이 C와 C++를 모델로 탄생된 언어이기 때문에 Java와 C#이 문법을 따라한 것입니다.

제어문은 프로그램에서 가장 중요하고 핵심적인 문법입니다. 이 제어문으로 많은 알고리즘이 만들어지고 패턴이 만들어지기 때문입니다.

제어문은 거의 많은 프로그램 언어가 문법이 비슷하기 때문에, 아니 C와 C++에서 많이 모델링을 했기 때문에 비슷비슷합니다. 하나만 제대로 익혀도 다른 언어에서도 사용할 수 있기 때문에 잘 알아두는게 좋습니다.

제어문의 종류는 선택문, 반복문, 분기문이 있습니다.


선택문

선택문은 조건에 따리 처리하는 명령을 달리하는 문법입니다. 종류 : if ~ eles문, switch~case 문

1. if ~ else문

- if의 조건이 true(참)이면 if에 영역을 실행하고 false(거짓)이면 else를 실행합니다.

#include <stdio.h>
#include <iostream>
using namespace std;
// 실행 함수
int main()
{
  // a의 변수에 1를 넣는다.
  int a = 1;
  // a가 1인가? true(참)면 아래의 실행한다.
  if (a == 1)
  {
    // 콘솔 출력
    wcout << " if a == 1 ? " << endl;
  }
  // a가 0인가? true(참)면 아래를 실행한다.
  if (a == 0)
  {
    // 콘솔 출력
    wcout << " if a == 0 ? " << endl;
  }
  // false(거짓)면 아래를 실행한다.
  else
  {
    // 콘솔 출력
    wcout << " if a == 0 else . " << endl;
  }
  // a가 0인가? true(참)면 아래를 실행한다.
  if (a == 0) 
  {
    // 콘솔 출력
    wcout << " if a == 0 ? " << endl;
  }
  // a가 1인가? true(참)면 아래를 실행한다.
  else if (a == 1)
  {
    // 콘솔 출력
    wcout << " else if a == 1 ? " << endl;
  }
  // 위 조건 모두 false(거짓)면 아래를 실행한다.
  else
  {
    // 콘솔 출력
    wcout << " if a == 0 else . " << endl;
  }
  return 0;
}

if문은 if문을 단독으로 실행 가능하고 if ~ else, if ~ else if ~ else로도 실행 가능합니다.

그러나 else if나 else는 실행 불가능합니다.


2. switch ~ case 문

- switch ~ case 문은 그 수식값이 맞는 곳을 처리하는 다중 선택문입니다.

#include <stdio.h>
#include <iostream>
using namespace std;
// 실행 함수
int main()
{
  // a의 변수에 1를 넣는다.
  int a = 1;
  // a를 다중 선택한다.
  switch (a)
  {
  // 0이면 아래 영역을 실행
  case 0:
    // 콘솔 출력
    wcout << " switch case 0 " << endl;
    break;
  // 1이면 아래 영역을 실행
  case 1:
    // 콘솔 출력
    wcout << " switch case 1 " << endl;
    break;
  // 2이면 아래 영역을 실행
  case 2:
    // 콘솔 출력
    wcout << " switch case 2 " << endl;
    break;
  // 위 모든 조건이 맞지 않을 경우 실행
  default:
    // 콘솔 출력
    wcout << " default " << endl;
    break;
  }
  return 0;
}

switch ~ case에서 a의 변수에 관해 값이 1이기 때문에 「switch case 1」이 출력됩니다.

그리고 break를 만나 switch 영역을 벗어납니다.

기본적으로 switch ~ case에서 break 키워드를 사용해서 특정 조건을 선택합니다.

break를 사용 안하면, 다중 선택이긴 하는데 다중 실행도 가능합니다.

#include <stdio.h>
#include <iostream>
using namespace std;
// 실행 함수
int main()
{
  // a의 변수에 1를 넣는다.
  int a = 1;
  // a를 다중 선택한다.
  switch (a)
  {
  // 0이면 아래 영역부터 실행
  case 0:
    // 콘솔 출력
    wcout << " switch case 0 " << endl;
  // 1이면 아래 영역부터 실행
  case 1:
    // 콘솔 출력
    wcout << " switch case 1 " << endl;
  // 2이면 아래 영역부터 실행
  case 2:
    // 콘솔 출력
    wcout << " switch case 2 " << endl;
  // 위 모든 조건이 맞지 않을 경우 실행
  default:
    // 콘솔 출력
    wcout << " default " << endl;
  }
  return 0;
}

a가 1이기 때문에 case 1 영역을 실행하고 끝이 아니라 break가 없어서 case2, default도 실행이 됩니다.

반복문

일정한 조건이 만족할 때까지 같은 명령을 반복적으로 처리하는 문법입니다. 종류 : for문, while문, do~while문

1. for문

for문은 초기값부터 종료 조건이 거짓이 될 때까지 증감치를 변화시키며 반복적인 명령을 수행하는 제어문입니다.

#include <stdio.h>
#include <iostream>
using namespace std;
// 실행 함수
int main()
{
  // for문의 초기 값은 i를 0으로 설정
  // 조건식은 i < 10가 true(참)이면 아래의 영역을 실행한다.
  // 아래의 영역을 실행후 증감치를 변환해서 i를 1 증가(i++), 다시 조건식을 비교하여 true(참)이면 실행, 다시 증감식을 실행 반복한다.
  // 조건식이 false(거짓)이면 반복문을 멈춘다.
  for (int i = 0; i < 10; i++) 
  {
    // 콘솔 출력
    wcout << " for 문 : i 값 - " << i << endl;
  }
  return 0;
}

2. while 문

- for문과 비슷합니다만 초기식과 증감식을 설정하는 것없이 조건식만 있는 반복문입니다.

#include <stdio.h>
#include <iostream>
using namespace std;
// 실행 함수
int main()
{
  // 변수 선언
  int i = 0;
  // 조건식 i < 10가 true(참)이면 아래의 영역을 실행한다.
  while(i < 10)
  {
    // 콘솔 출력
    wcout << " while 문 : i 값 - " << i << endl;
    // 변수 i에 1을 증가한다.
    i++;
  }
  return 0;
}

위 while문은 for문과 같은 결과가 나오게 구현했습니다.


3. do ~ while문

- do ~ while문은 while과 비슷합니다.

대신 조건식이 반복문을 실행하기 전이 아닌 일단 한번 실행하고 나서 조건을 비교하는 것이 특징입니다.

#include <stdio.h>
#include <iostream>
using namespace std;
// 실행 함수
int main()
{
  // 변수 선언
  int i = 0;
  // 일단 한번 실행한다.
  do
  {
    // 콘솔 출력
    wcout << " do while 문 : i 값 - " << i << endl;
    // 변수 i에 1을 증가한다.
    i++;
  }
  // 조건식 true(참)면 do로 다시 올라가서 반복문ㅇ르 실행ㅎ나다.
  while (i < 0);
  return 0;
}

보통은 반복문을 for와 while를 많이 사용합니다만, 사양에 따라 무조건 한번 실행하고 반복을 하는 조건이 있는데 그럴 때 사용하면 좋습니다.


분기문

강제로 명령어의 처리 순서를 바꾸는 문법입니다. 종류 : break문, continue문

1. break문

- break문은 switch ~ case에서도 사용했었네요.

분기문 for문이나 while문에서 조건식에 상관없이 반복문을 멈출때 사용할 수 있습니다.

#include <stdio.h>
#include <iostream>
using namespace std;
// 실행 함수
int main()
{
  // 변수 선언
  int i = 0;
  // 조건식이 true(참)이기 때문에 무한 루프가 된다.
  while (true) 
  {
    // if 선택문에서 i의 값이 1일 경우,
    if (i == 1)
    {
      // break실행, 즉 while 반복문 탈출
      break;
    }
    // 콘솔 출력
    wcout << " while 문 : i 값 - " << i << endl;
    // i의 값이 1증가
    i++;
  }
  return 0;
}

2. continue

- continue는 break와 비슷합니다. break는 반복문을 벗어나는 기능이지만 continue는 시작 지점으로 되돌리는 기능입니다.

#include <stdio.h>
#include <iostream>
using namespace std;
// 실행 함수
int main()
{
  // 변수 선언
  int i = 0;
  // 조건식이 true(참)이기 때문에 무한 루프가 된다.
  while (true) 
  {
    // if 선택문에서 i의 값이 10일 경우,
    if (i == 10)
    {
      // break실행, 즉 while 반복문 탈출
      break;
    }
    // if 선택문에서 i의 값이 1일 경우,
    if (i == 1) 
    {
      // i의 값을 10을 설정
      i = 10;
      // while (true)문으로 다시 시작
      continue;
    }
    // 콘솔 출력
    wcout << " while 문 : i 값 - " << i << endl;
    // i의 값이 1증가
    i++;
  }
  return 0;
}

분기문의 종류에는 goto문도 있습니다만, goto문은 사용을 권장하지 않기 때문에 생략했습니다.


여기까지 C++에서 사용되는 제어문에 대한 글이었습니다.


궁금한 점이나 잘못된 점이 있으면 댓글 부탁드립니다.