[lv1/C++] 반복문 for문
for문은 반복 횟수가 정해져 있는 형태가 주로 사용된다.
물론 무한루프를 구현할 때도 사용하긴 하지만 또다른 형태의 반복문과 함께 작성하는 사람이 좀더 편하고 익숙한 방식으로 사용된다.
기본적인 구조는 다음과 같다.
for((1)초기값;(2)조건식;(3)반복식)
{
(4)반복할 문장;
}
* (1) 초기 값 : 최초 한 번만 실행되는 초기화 과정으로 보통 반복을 제어하는 변수의 초기값을 설정한다.
* (2) 조건식 : 반복을 빠져나오기 위한 조건으로 반복을 할 때마다 조사한다. 조건식이 참인 경우 계속 반복하고 거짓인 경우 반복을 그만하고 for문을 빠져 나간다.
* (3) 반복식 : 일반적으로 반복을 제어하는 변수의 값을 증가 또는 감소시키는 식(증감식)이 들어간다.
* (4) 반복할 문장 : (2) 조건식이 참일 경우 해당 문장을 수행한다.
for구문의 반복 순서는 (1) > (2) > (4) > (3) > (2) > (4) > (3) > (2) > (4) > (3) 이다.
아래는 1부터 10까지 더하는 것을 for구문을 이용해 구현한 것이다.
#include <iostream>
using namespace std;
int main()
{
int sum = 0;
for (int i = 0; i <= 10; i++) {
sum += i;
}
cout << sum << endl;
return 0;
}
초기식 : i는 0으로 초기화 하고
조건식 : i가 10보다 작을때만 반복한다.
반복내용 : 정수타입 변수 sum에 i를 더해준다.
반복식 : 후위증감식을 사용하여 i를 1씩 증가시킨다.
i는 1부터 시작해도 되지만 후에 배울 배열이나 리스트 등 0부터 시작하는 것이 많기에 0부터 시작하는 것이 습관화 된 것 뿐이니 크게 신경쓰지 말자.
아래 코드는 위와 결과는 똑같지만 for구문의 생략 가능성을 보여준다.
초기식, 조건식, 반복식은 생략이 가능하다.
#include <iostream>
using namespace std;
int main()
{
int sum = 0;
int i = 0;
for (; i <= 10;) {
sum += i;
i++;
}
cout << sum << endl;
return 0;
}
#include <iostream>
using namespace std;
int main()
{
int sum = 0;
int i = 0;
for (;;) {
sum += i;
i++;
if (i > 10) break;
}
cout << sum << endl;
return 0;
}
생략시 주의점은 반복문을 탈출하기 위한 방법이 있어야 한다는 것이다. 반복문을 중지하는 것이 없는 경우 해당 반복문은 무한루프에 빠지게 된다.
위 코드는 if문 안에 있는 break 명령으로 대신 했다.
하단 결과를 예상해보자
#include <iostream>
using namespace std;
int main()
{
for (int i = 0, j = 0;i < 3, j <= 10;i++, j++) {
cout << i << " , " << j << endl;
}
return 0;
}
for 구문에 콤마 연산자를 사용하여 생각보다 복잡해 보인다.
초기식 : i와 j를 0으로 초기화
조건식 : i는 3보다 작은가?, j는 10보다 작거나 같은가?
반복내용 : i 와 j를 콤마로 구분해 출력
반복식 : i와 j를 1씩 증가
초기식에 있는 i와 j는 콤마연산자의 도움으로 0으로 잘 초기화 된다.
반복식에 있는 증감식도 콤마연산자의 도움을 받아 1씩 증가된다.
반복 내용에 있는 문자 콤마도 출력이 잘 된다.
하지만 조건식에 있는 콤마 연산자는 어떤 것을 기준으로 비교해야 하는지 감이 안잡힐 것이다.
콤마연산자는 제일 낮은 연산 순위를 가지고 있으며 왼쪽부터 오른쪽으로 결합되는 법칙을 가지고 있다.
결합 법칙에 따라 왼쪽에서 오른쪽으로 결합되어 맨 마지막 항목이 계산결과가 된다.
따라서 i < 3 의 조건식은 실행되지만 무시되고 j <= 10 이 조건 결과가 되어 i와 j는 10까지 출력될 것이다.
조건식에서 콤마 연산자는 일반적으로 사용되지 않는다.
하지만 공부를 하는 사람이라면 한 번 쯤 해봐야 하는 시도라고 생각된다.
'Programming > C, C++' 카테고리의 다른 글
LV1 C++ 배열 Array 정리 (0) | 2022.09.06 |
---|---|
LV1 C++ 반복문 while, do - while (0) | 2022.09.02 |
LV1 C++ 조건문 (선택문) switch case문 (0) | 2022.09.02 |
LV1 C++ 조건문 if, else if, else (0) | 2022.09.02 |
lv1 C++ 연산자와 우선순위 (0) | 2022.08.12 |