본문 바로가기

Programming Languages/C++

흐름제어 구문

C++에서 프로그램은 앞에서부터 뒤로 차례로 실행되는 것이 기본이지만, 여러 가지 조건에 따라 순서를 바꾸거나 반복하는 등의 작업을 할 수 있다. 이러한 흐름제어 구문을 조건문 및 반복문이라고 한다. 

조건문

조건문은 지정된 조건에 따라 실행 흐름을 제어하는 문장이다. C++에서 사용할 수 있는 조건문은 if문과 switch문이 있다.

if문 ▶ if문장은 조건의 참, 거짓에 따라 문장을 선택적으로 실행할 수 있도록 하는 구문이다. 

if(조건)
 문장1; // 조건이 참일 때 실행할 문장
else
 문장2; // 조건이 거짓일 때 실행할 문장

 

만일 문장1 또는 문장2가 여러 문장으로 구성되어야 할 때는 { 와 } 로 문장들을 묶어 블록을 만들면 된다. else절은 조건이 거짓일때 처리할 문장이 있을 경우에만 사용하면 되고, 필요 없으면 생략한다.

다음 문장은 int형 변수 a와 b에 저장된 값 중 큰 것을 a, 작은 것을 b에 넣게 하는 문장이다. 조건이 참일 때 실행할 문장이 여러 개이므로 이들을 블록으로 묶어서 작성한 것을 볼 수 있다.

if(a < b) {
 int t = a; // t는 블록 내에서만 사용되는 지역변수
 a = b;
 b = t;
}

 

switch문 ▶ 만일 정수 자료형에 해당되는 수식의 값에 따라 해당되는 처리를 하고자 할 때에는 if문 대신 switch문을 사용하면 편리하다.

switch(정수형_수식){
 case 값1;
  문장1;  // 정수형 수식의 값이 값1일 때 실행할 문장들을 나열
  break; // switch문을 빠져 나가게 함
 case 값2;
  문장2;  // 정수형 수식의 값이 값2일 때 실행할 문장들을 나열
  break; // switch문을 빠져 나가게 함
   ...
 default : // 정수형 수식의 값과 일치하는 case 값이 없을 때
  문장n;  // 실행할 문장들을 실행
 }

 

위 문장은 지정된 정수형 수식의 값이 나열된 case 값과 일치할 경우 그 위치에 나열된 문장으로 프로그램의 흐름이 이동된다. 문장1, 문장2, 등에는 하나 또는 여러 개의 문장이 사용될 수 있다. 이때 case 값들은 마치 문장의 위치를 알리는 주소와 같은 역할만 하므로, 일단 분기가 이루어지면 지정된 위치의 문장만 실행하는 것이 아니라 다음 case 값에 해당되는 문장으로 계속 진행하게 된다. 그러므로 이와 같은 진행을 막기 위해 break라는 명령을 이용하여 해당되는 문장만 실행한 후 switch문을 빠져 나가도록 한다.

다음은 int형 변수 score의 값에 따라 90~100은 A, 80~89는 B등의 학점 기호를 char형 변수 grade에 부여하는 예이다.

switch(score / 10){
 case 10 : // score가 100인 경우 아래로 계속 진행한다.
 case 9 : grade = 'A'; // score가 90~100인 경우
          break;
 case 8 : grade = 'B'; // score가 80~89인 경우
          break;
 case 7 : grade = 'C'; // score가 70~79인 경우
          break;
 case 6 : grade = 'D'; // score가 60~69인 경우
          break;          
 default : grade = 'F' // 그 외의 모든 경우
}

 

반복문

반복문은 일정 범위의 문장을 반복하여 실행하고자 할 때 사용하는 구문으로, for, while, do ... while 구문이 있다.

for문 ▶ 

for(초기화 ; 반복조건 ; 증감)
 문장;

 

일반적으로 하나의 루프제어변수를 두어 이변수를 초기화한 후 반복저건이 참이면 지정된 문장을 반복한다. 1회 반복할 때마다 루프제어변수에 대해 지정된 증감 명령을 실행한다. 초기화나 증감 명령이 비어 있다면 해당 동작은 일어나지 않는다. 반복조건이 비어 있다면 그 조건은 항상 참으로 취급한다.

// 10개의 정수값을 읽어 합을 구하는 예

int val, total = 0;
for(int = 0 ; i < 10; i++){
 cin >> val;
 total += val;
}

 

C++11에는 범위 기반 for 루프라는 구문이 추가되었다. 범위 기반 for 루프는 배열과 같이 여러 원소로 구성된 데이터 집합에 대해 첫 원소부터 마지막 원소까지 반복하여 실행하도록 지시하는 것으로 그 형식은 다음과 같다.

// 형식
for(원소선언: 데이터집합)
 문장;
 
 ================================================
 
 // 범위 기반 for 루프의 예
 
 int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
 int sum = 0;
 for(int a : arr)
  sum += a;
 cout << "합계 = " << sum << endl;
 

 

위 코드에서 a는 각각의 arr 원소의 값을 받기 때문에 arr의 값을 변경하고자 할 때는 참조를 활용해야 한다.

int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
for(int a : arr)
 ++a;

 

위 코드에서 ++a는 a의 값이 증가하는 것이지 arr의 각각의 원소의 값이 증가하는 것이 아니기 때문에 arr의 내용헤는 변화가 없다.만일 arr의 내용이 변하게 하려면 for(int a : arr)을 for(int &a : arr)와 같이 작성해야 한다.

이처럼 a를 참조변수로 선언하면 반복문 내에서 a는 arr의 각각의 원소를 참조하게 되어 arr의 내용이 증가되는 결과를 얻을 수 있다.

while문 ▶ 

반복조건이 참이라면 주어진 문장을 반복한다.

// 형식
while(반복조건)
 문장;
==================================================================================

// 반복적으로 정숫값을 입력하여 합산한다. 만일 음수가 입력되면 데이터가 끝인 것으로 판단하여 종료한다.
int val, total = 0;
cin >> val;
while(val > 0){
 tatal += val;
 cin >> val;
}

==================================================================================

// 위 코드는 다음과 같은 for문과 동일하다
int val, total = 0;
for(cin >> val ; val > 0; cin >> val)
 total += val;

 

do ... while문 ▶ while문과 유사하나 먼저 블록 안에 있는 문장을 실행한 후 반복 여부를 결정하는 조건을  판단하여 조건이 참이면 반복한다.

 

break 및 continue 명령 ▶ 반복문의 흐름은 필요헤 따라 break 및 continue 명령으로 바꿀 수 있다.

'Programming Languages > C++' 카테고리의 다른 글

클래스  (0) 2020.04.29
구조체  (0) 2020.04.23
자료형의 변환  (0) 2020.04.17
연산자  (0) 2020.04.16
기본 자료형 및 상수와 변수  (0) 2020.04.15