Chapter5: 반복문

Joosi_Cool·2022년 6월 27일
2

C++

목록 보기
4/20
post-thumbnail

🐣반복문

후위 표현식과 전위 표현식

  1. 후위 표현식 => ex) x++
    이는 피연산자 뒤에 연산자가 오는것을 말한다. 이는 값을 먼저 리턴하고 부가효과가 일어난다.

  2. 전위 표현식 => ex) ++x
    이는 피연산자 앞에 연산자가 오는 것을 말한다. 이는 부가효과가 일어난 후에 값을 리턴한다.
#include<iostream>
using namespace std;
int main() {
	unsigned int c{ 5 };
	cout << "후위표현식 예시" << endl;
	cout << c << endl; //5
	cout << c++ << endl; //5
	cout << c << endl; //6
	c = 5;
	cout << "전위표현식 예시" << endl;
	cout << c << endl; //5
	cout << ++c << endl; //6
	cout << c << endl; //6
	return 0;
}

이처럼 후위표현식은 값을 리턴한 후, 부가효과(+1)을 해준다. 반대로 전위표현식은 부과효과(+1)을 먼저하고, 값을 리턴한다.

반복문의 종류

반복문에는 while문, for문 do-while문이 존재한다.

1. while 반복문

while 문은 조건이 참이면 문장을 실행한다. 그 후에 다시 조건으로 가서 참, 거짓을 판별한다. 참이면 또 실행해서 거짓일 때까지 문장을 실행하는 방식이다.

카운트 제어 while문

이는 while문의 대표적인 예시이다. 반복문 이전에 카운터 변수를 초기화 및 선언을 해준다. 그 이후에 반복문 내부에서 이 값을 증가 또는 감소시켜, 반복문을 활용하고 종료시킨다.

  //카운트 제어 while문 예시
  #include<iostream>
using namespace std;
int main() {
	int counter = 0; //카운터 변수 선언 및 초기화
	while (counter < 5) { //5회 반복
		cout << "Hello world!!" << endl;
		counter++;
	}
	return 0;
}

이벤트 제어 while문 (센티널 제어)

이 while문은 특정 이벤트가 발생하면 반복문을 종료한다. 데이터 처리에서 센티널은 처리 중지를 나타내기 위해 데이터 리스트에 존재하는 특별한 항목이다. 말이 어렵기 때문에 코드로 바로 보겠다.

  #include<iostream>
using namespace std;
int main() {
	int sum = 0;
	int num;
	cout << "정수를 입력하시오(종료하려면 -1 입력): ";
	cin >> num;
	while (num != -1) {
		sum += num;
		cout << "정수를 입력하시오(종료하려면 -1 입력): ";
		cin >> num;
	}
	cout << "합 = " << sum;
	return 0;
}

여기서는 센티넬이 -1 이다. -1을 받으면 반복문 종료

EOF제어 while 반복문

우선 EOF란, End Of File의 약자로 더이상 데이터를 읽지 않을때 쓴다. 사용 방법은 Ctrl+z이다.

#include<iostream>
using namespace std;
int main() {
	int sum = 0;
	int num;
	cout << "첫 번째 숫자를 입력하세요(종료하려면 EOF 입력): ";
	while (cin >> num) {
		sum += num;
		cout << "다음 숫자를 입력하세요: ";
	}
	cout << "합 = " << sum;
	return 0;
}

여기서 중요한것은 while문 조건에 들어있는 cin>>num이다. 이는 원래 값을 받는 역할을 하지만, 조건문 안에 들어있다면, true or false로 값을 가진다. 처음에 int형으로 선언을 해줬기 때문에 정수를 입력하면 true인 것이다. 만약 비정상적으로 EOF, 'a' 같은 다른 자료형이 들어간다면 이는 false로 취급한다.

플래그 제어 반복문

#include<iostream>
using namespace std;
int main() {
	int num;
	bool flag = true;
	
	while (flag) {
		cout << "입력하세요: ";
		flag=static_cast<bool>(cin >> num);
	}
}

플래그 제어 반복문은 while 조건 안에 bool형을 넣는 것이다. 이 코드에서도 flag를 조건으로 세워 값이 잘 들어갔다면 반복, 비정상적인 값이 들어가면 while 문을 탈출하게 했다.

do-while 반복문

do-while문의 경우, 앞서 설명한 이벤트 제어 반복문으로 사용하는 것이 일반적이다. 이것에 가장 중요한 점은 적어도 한번의 반복이다. 본문을 적어도 한번은 실행할 때 많이 사용된다.

#include<iostream>
using namespace std;
int main() {
	int num;
	short leftDigit;

	cout << "음수가 아닌 정수를 입력하세요: ";
	cin >> num;

	do
	{
		leftDigit = num % 10;
		num = num / 10;
	} while (num > 0);

	cout << "가장 왼쪽의 숫자 = " << leftDigit << endl;

	return 0;

이렇듯 적어도 반복문을 한번은 실행한다. 이렇듯 적어도 한번은 실행할 때 do-while문을 사용하면 된다.

for 반복문

for문의 구조는 for(초기화(변수); 조건; 변경){실행할 문장} 이다.

#include<iostream>
using namespace std;
int main() {

	for (int num{0}; num<10; num++){ //0~9까지 출력
		cout << num << endl;
	}
                         
	return 0;
}
                         

반복문과 관련된 구문

  • return 구문
    => 이 구분은 현재 함수를 종료하고 함수를 호출한 쪽으로 제어를 리턴한다. 반복문에서 return 구문을 사용하면 반복문이 종료되며, 동시에 반복문이 소속된 함수(main함수 등)도 종료

  • break문
    => 반복문 내부에서 break 구문을 사용하면 반복을 중간에 종료하고 반복문을 벗어남.

  • continue 구문
    => 이 구문을 만나면 아래 문장을 실행하지 않고, 곧바로 다시 올라가 표현식부터 실행하게 된다.

  • goto 구문
    => 이 구문을 만나면 goto 레이블에서 그 레이블로 곧바로 이동한다. 하지만 이는 코드가 어지러워질 수 있기 때문에 쓰지말자.
//continue 예시 코드![](https://velog.velcdn.com/images/sean2337/post/a69a1b88-640b-4481-a740-7d9b9d88edd0/image.png)

#include<iostream>
using namespace std;
int main() {
	int num;
	short leftDigit;

	for (int i = 0; i < 10; i++) {
		if (i == 5) {
			continue;
		}
		cout << i << endl;
	}

	return 0;
}

이처럼 i가 5일때는 출력하는 문장을 실행하지 않고 곧바로 올라간다.

                       
profile
집돌이 FE개발자의 노트

0개의 댓글