내용 참고
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문은 주로 반복횟수가 정해져 있거나 미리 알 수 있을 때 사용된다.