리메이크 중/C,C++ 이론 중심

C(&C++) 이론 13. 제어구조 / 조건문과 반복문

라이피 (Lypi) 2023. 1. 4. 18:01
반응형

목록용 썸네일 이미지


내용 참고

YES C (정보공학연구소/생능출판사)

혼자 연구하는 C/C++ (SoEn.kr /와우북스)

Microsoft Docs (구 MSDN)


조건문과 반복문

■ 제어문의 대상이 되는 목표 문장이 한 문장일때는 블록을 쓰지 않아도 의도한대로 동작한다.

■ 하지만 확장성과 가독성 그리고 실수를 방지하기 위해서 목표 문장이 한 문장이더라도 블록으로 묶는 것을 추천한다.


Ⅰ. 조건문(Alternative Statement)

ⅰ. if문 

■ 구문 : if ( test_expression ) statement;

■ 조건식의 값이 참일 때만 목표 문장을 실행한다.

 


ⅱ. if-else문 

■ 구문 : if ( test_expression ) statement1; else statement2;

■ 조건식의 값이 참이면 statement1을, 거짓이면 statement2를 실행한다.


ⅲ. 다중 if문 

■ 구문 : if ( test_expression1 ) statement1; else if( test_expression2) statement2; else statement3;

■ 조건식1의 값이 참이면 statement1을, 조건식1이 거짓이고 조건식2가 참이면 statement2를, 모두 거짓이면 statement3을 실행한다.

■ 중요한 것은 조건식 1이 참이면 조건식 2는 아예 검사되지 않는다는 것이다.

■ 즉, 조건식1과 2가 모두 참이면 statement1만 실행될 뿐, statement1,2가 모두 실행되는 것이 아니다.


ⅳ. switch문

■ 기본 구문 : switch ( expression ) case-statement;

■ 일반적인 형태: switch ( expression ) { case constant : statement; ... default : statement; }

■ switch문에 뒤따르는 case-statement의 case가 하나뿐이라면 괄호를 생략할 수도 있다.

		switch (i) case 1 : i++;

■ 하지만 일반적으로 switch문에는 2개 이상의 case문이 포함되므로 괄호가 꼭 필요하다.

■ if문에 포함되는 조건식은 bool형으로 해석되지만 switch문의 조건식은 하나의 정수값으로 해석된다.

■ case문은 label문으로 구분되며, 예약어인 case 뒤에는 반드시 정수인 상수가 와야한다.

■ 하나의 switch문 안에는 동일한 상수값을 갖는 case문이 2개 이상 존재할 수 없다.

■ default문은 조건식의 값에 상관없이 참인 case문이며, 생략될 수 있다.

■ switch문은 조건식의 값과 일치하는 case문부터 실행되며 switch문이 끝나거나 break;문을 만나야지 switch문에서 빠져나간다.

■ 즉, 아래와 같은 경우 case1만 실행되는 것이 아니라 case2까지 실행된 뒤 break;문으로 switch문을 빠져나가게 된다.

		int i = 1;

		switch(i) {
			case 1 : i += 1;
	    		case 2 : i += 2; break;
	    		case 3 : i += 3; break;
		}

■ 대응되는 case문이 없고, default문도 없다면 바로 switch문을 빠져나간다.

■ break;는 C언어 전체에서 사용되는 키워드지만, case와 default는 switch문 안에서만 쓰이는 키워드이다.


Ⅱ. 반복문(Iterative Statement)

ⅰ. while문

■ 구문 :  while ( condition-expression ) statement;

■ 조건식만 갖는 가장 기본적인 반복문.

■ 조건식이 참일 동안 목표 문장을 반복 실행한다.

■ 조건식은 목표 문장을 실행하기 전에 검사되므로, while문 진입시 조건식이 거짓이라면 목표문장이 한번도 실행되지 않을 수 있다.

■ 조건식에서 제어변수를 선언할 수도 있지만 일반적으로 while문의 제어변수는 while문 밖에서 미리 선언한다.

■ 또한 while문의 목표 문장 안에 조건식을 거짓으로 만드는 문장이 없다면 무한루프에 빠지게 되므로 주의해야 한다.


ⅰ. do-while문

■ 구문 :  do statement; while ( condition-expression )

■ 목표 문장을 최소 한번은 실행하게 하는 while문. 

■ 조건문을 목표 문장 실행 후 검사한다는 점을 제외하면 while문과 동일한 구문이다.


반응형

ⅰ. for문

■ 구문 : for ( initialize-expression; condition-expression; loop-expression ) statement;

■ 구문적으로 initialize-expression(초기식), condition-expression(조건식), loop-expression(증감식)을 갖는 반복문

■ initialize-expression(초기식) : 반복문을 통제하는 제어 변수의 초기값을 지정하는 식. 루프 진입 전 한번만 실행된다.

■ C99 이후의 C나 C++에서는 제어변수를 초기식 내에서 선언할 수 있다. 이 경우 제어변수는 for문 내에서만 통용되는 지역변수가 된다.

■ condition-expression(조건식) : 매 루프를 실행하기 전에 루프의 지속 여부를 결정하는 식. 

■ 실행되었을 때 조건식의 값이 거짓이면 루프를 빠져나간다.

■ loop-expression(증감식) : 매 루프의 마지막에 실행되는 식.

■ 주로 제어변수의 값을 변형시키는데 사용되지만 꼭 제어변수와 관련된 식을 써야하는 것은 아니다.

#include <iostream>
using namespace std;


int main() {
	//일반적인 경우
	for (int i = 0; i < 10; i++) {
 		cout << i << endl;
	}

	//이런식으로 써도 컴파일러는 뭐라고 하지 않는다.
	for (int i = 0; i < 10; cout << i << endl) {
		i++;
	}
    
	return 0;
}

■ 초기식, 조건식, 증감식 모두 생략할 수 있다.

■ 조건식이 없을 경우 따로 for문을 빠져나갈 수 있는 조건이 없다면 무한 루프가 된다.

■ for문은 주로 반복횟수가 정해져 있거나 미리 알 수 있을 때 사용된다.


 

반응형