C++: 조건문(if, else), 반복문(for, while)
C++: 조건문(if, else), 반복문(for, while)
조건문(Conditional Statement)
- 조건에 따른 명령 수행을 구현, 다양한 상황에 대해 올바른 동작을 보장
if: 주어진 조건이 참이면 실행
1 2 3 4 5 6 7
int main(){ int a = 1; //if(condition) {statement;} if(a > 0){ cout << "hello world" << endl; } }
else: 앞선 if의 조건이 거짓이면 실행
1 2 3 4 5 6 7 8 9
int main(){ int a = 1; if(a < 0){ //실행되지 않음! cout << "hello world" << endl; } else{ //if 조건 불만족했으니 실행! cout << "else!" << endl; } }
else if: else와 if의 조합, 앞선 if가 조건을 불만족하고 else if의 조건이 만족되면 실행.
- 여러개의 else if 가 있어도 상관 없음
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
int main(){ int a = 1; if(a < 0){ //실행되지 않음! cout << "hello world" << endl; } else if(false){ //실행되지 않음! cout << "first else if!" << endl; } else if(a > 0){ //조건 맞으니 실행! cout << "second else if!" << endl; } else{ //else if 조건 성립으로 실행 안됨! cout << "else!" << endl; } }
- 여러개의 else if 가 있어도 상관 없음
- if - else if - else 구조중 단 하나만 실행됨
- if 안에 다른 if가 있어도 됨(중첩 반복문, nested if)
&&(and) 와 (or)등을 이용해 조건문 안에 여러 조건을 넣을 수 있음. - 간단한 계산기 코드 예시(사칙연산 선택 기능 추가)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
int main() { int val1; cout << "첫번 째 값을 입력하세요: "; cin >> val1; // val1에 입력값 저장 char opChar; cout << "수행할 계산을 입력하세요(+,-,*,/): "; cin >> opChar; // val1에 입력값 저장 int val2; cout << "두번 째 값을 입력하세요: "; cin >> val2; // val2에 입력값 저장 if(opChar == '+') cout << val1 << " + " << val2 << " = " << val1 + val2 << endl; //입력값들의 더하기 출력 else if(opChar == '-') cout << val1 << " - " << val2 << " = " << val1 - val2 << endl; //입력값들의 빼기 출력 else if(opChar == '*') cout << val1 << " * " << val2 << " = " << val1 * val2 << endl; //입력값들의 곱하기 출력 else if(opChar == '/') cout << val1 << " / " << val2 << " = " << (float) val1 / val2 << endl; //입력값들의 나누기 출력 else cout << "입력에 오류가 있습니다!" << endl; }
switch
- 여러개의 조건문의 늘어지는 코드 구조를 간결하게 바꿔주는 문법, 주어진 값의 상태에 따라 case를 나누어 작동.
- break를 통해 case 실행 후 switch문에서 이탈시키지 않으면 뒤이어 오는 다른 case와 명령어들까지 수행함.
- switch의 상수 조건값이 무엇인지에 따라 분기하기 때문에 범위조건(ex- 양수, 3보다 크다)은 if를 사용해야함.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
//위 계산기 코드의 switch버전 int main() { int val1; cout << "첫번 째 값을 입력하세요: "; cin >> val1; // val1에 입력값 저장 char opChar; cout << "수행할 계산을 입력하세요(+,-,*,/): "; cin >> opChar; // val1에 입력값 저장 int val2; cout << "두번 째 값을 입력하세요: "; cin >> val2; // val2에 입력값 저장 switch(opChar){ case '+': cout << val1 << " + " << val2 << " = " << val1 + val2 << endl; //입력값들의 더하기 출력 break; case '-': cout << val1 << " - " << val2 << " = " << val1 - val2 << endl; //입력값들의 빼기 출력 break; case '*': cout << val1 << " * " << val2 << " = " << val1 * val2 << endl; //입력값들의 곱하기 출력 break; case '/': cout << val1 << " / " << val2 << " = " << (float) val1 / val2 << endl; //입력값들의 나누기 출력 break; default: cout << "입력에 오류가 있습니다!" << endl; break; } }
반복문(Loop Statement)
- 필요한만큼 명령어를 반복하여 실행하여 코드의 반복을 줄임
for
- 반복자(iterator)의 값에 따라 수행되는 반복문
- 반복해야 하는 횟수가 명확할 때(ex-배열 탐색등) 사용하면 좋음
1 2 3 4 5 6 7
int main(){ //0부터 9까지 출력 //for(초기화식;조건식;증감식) for(int i = 0; i< 10; i++){ cout << i << endl; } }
foreach
- for의 변형으로, 배열, std::array, std::vector등을 순회할 때 반복자를 인덱스로 사용해야 하던 구조 없이, 각 요소를 순회하며 반복 수행
- 범위 기반 for문
1 2 3 4 5 6 7 8 9 10 11 12 13
int main(){ int a[5] = {1,2,3,4,5}; //복사형 //for(요소자료형 요소명: 컨테이너) for(int num: a){ cout << num << endl; } //참조형(const & 사용) for(const int& num: a){ cout << num << endl; } }
- std::for_each std에 정의되어있는 반복문으로, 주어진 메모리 영역의 값들에 대해 함수를 수행
1 2 3 4 5 6
int main(){ std::vector<int> a = {1,2,3,4,5}; //std::for_each(시작주소값, 종료주소값, 반복할 함수) //람다함수를 이용한 for_each 출력 예시 std::for_each(a.begin(), a.end(), [](int num){cout << num << endl;}); }
- 범위 기반 for문
- for의 변형으로, 배열, std::array, std::vector등을 순회할 때 반복자를 인덱스로 사용해야 하던 구조 없이, 각 요소를 순회하며 반복 수행
while
- 조건이 참인 동안 계속해서 실행되는 반복문, 반복자가 필요 없으며, 조건만 만족하면 계속해서 작동함.
1 2 3 4 5 6 7 8 9
int main(){ int num = 0; //0부터 9까지 출력 //while(조건문) {명령문;} while(num < 10){ cout << num << endl; num++; } }
- 조건이 참인 동안 계속해서 실행되는 반복문, 반복자가 필요 없으며, 조건만 만족하면 계속해서 작동함.
do while
- while문의 변형으로, 명령의 최소 1회 실행을 보장함.
- 실행 후에 조건을 판단.
1 2 3 4 5 6 7 8 9
int main(){ int num = 1; //이미 num이 1이여서 조건이 안맞아도 hello world 출력 //do {명령문;} while(조건문); do{ cout << "hello world"<< endl; num++; }while(num < 1); }
- 조건문과 마찬가지로 반복문 안에 반복문이 들어갈 수 있음(지나친 중첩 반복문은 성능에 악영향을 줄 수 있음)
- 조건식이 항상 참이라면 무한 반복문이됨 (infinite loop)
- for와 while 모두 구현 가능하지만 while로 보통 구현하는편
- 중간에 반복 탈출을 위한 조건문이 필요함.(break) 탈출하지 못하는 무한 반복문은 망가진 프로그램.
1 2 3 4 5 6 7 8 9 10 11 12
int main(){ int num = 0; //hello world를 5번 출력 while(true){ cout << "hello world"<< endl; num++; //5번 반복했으면 반복문 탈출 if(num >= 5){ break; } } }
- 흔한 반복문 연습용 별 피라미드 만들기
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
int main(){ for(int i = 0; i< 5; i++){ //5열 //9행 출력 //왼쪽 공백 for(int j = 0; j < 4 - i; j++){ cout << ' '; } //별 for(int j = 0; j < i * 2 + 1; j++){ cout << '*'; } //오른쪽 공백 for(int j = 0; j < 4 - i; j++){ cout << ' '; } cout << endl; } }
This post is licensed under CC BY 4.0 by the author.