for문
C++에서는 반복의 처리를 할 수 있는데 반복문(loop statement)이라는 구문으로 기술할 수 있다.
C++의 반복문에는 for문, while문, do ~ while문의 3 종류가 있다.
먼저 for문의 형식을 살펴보도록 한다.
[구문 : for문]
for (초기식1; 조건식2; 증감식3)
문장;
for (int i; i <= 10; i++)
문장;
for문은 일정한 횟수 동안 반복할 경우에 많이 쓰이는 문장이다. 여기서 초기식은 반복을 제어하는 제어 변수에 초기값을 할당하는 배정문, 조건식은 최종 값이라고도 하며 루프 제어 변수의 조건 범위를 검사하는 관계식 또는 논리식, 증감식은 제어 변수가 문장을 한 번 수행할 때마다 변화하는 증감량을 나타내고 있다.
또한 for문에서는 if문과 똑같이 여러 개의 문장에 관해서도 처리할 수 있다. 여러 개의 문장을 반복하고 싶은 경우는 if문일 때와 똑같이 {}로 둘러싸고 블록으로 한다.
for (초기식1; 조건식2; 증감식3) {
문장1;
문장2;
}
for문에서 블록을 사용하면 블록 내의 문장1, 문장2, ...라는 처리를 반복할 수 있다.
예제) for문의 사용
for문을 사용하여 "반복을 하고 있습니다."를 5번 반복 출력하는 코드를 작성해 보도록 한다.
#include <iostream>
using namespace std;
int main()
{
for (int i = 1; i <= 5; i++) {
cout << "반복을 하고 있습니다.\n";
}
cout << "반복을 종료했습니다.\n";
return 0;
}
for문에서는 반복 횟수를 카운트하기 위해 변수를 이용한다. 예를 들면, 이 코드에서는 변수 i를 사용하고 있다.
이 for문에서는 변수 i를 1로 초기화한 후 조건 i <= 5가 false로 될 때까지 i++를 반복하여, [반복을 하고 있습니다]라고 출력하는 문장을 처리하는 것이다.
변수를 루프 내에 사용
예제) for문의 사용
for문을 사용하여 반복 횟수를 출력하는 코드를 작성해 보도록 한다.
#include <iostream>
using namespace std;
int main()
{
for (int i = 1; i <= 5; i++) {
cout << i <<"번 반복을 하고 있습니다.\n";
}
cout << "반복을 종료했습니다.\n";
return 0;
}
반복문 내에는 횟수의 카운트로 사용하고 있는 변수 i의 값을 출력할 수 있다. 이 코드를 실행하면 블록 내에서 변수 i의 값이 1씩 증가하면서 반복되고 있는 것을 잘 알 수 있다.
for (i = 1; i <= 5; i++) {
cout << i << "번째의 반복이다.\n";
}
이 for문 내에 선언한 변수 i는 이 for문 내에서만 출력할 수 있다. 이 i는 for문의 블록 바깥에서는 사용할 수 없다. 만약 블록의 바깥에서도 i를 사용할 경우에는 for문을 시작하기 전에 i를 선언해 두어야 한다.
int i; //for문 바깥에 i를 선언하면...
for (i = 1; i <= 5; i++) {
cout << i << "번째의 반복이다.\n";
}
cout << i << "반복하였다\n"; //for문 바깥에서도 사용된다.
for문의 응용
예제) for문의 응용
for문을 사용하여 키보드로부터 입력한 숫자만큼 *를 출력하는 코드를 작성해 보도록 한다.
#include <iostream>
using namespace std;
int main()
{
int num;
cout << "몇 개의 *을 출력합니까? ";
cin >> num;
for (int i = 1; i <= num; i++) {
cout << '*';
}
cout << '\n';
return 0;
}
코드를 실행하면 입력한 수만큼 *이 출력된다. for문을 사용해서 입력한 수만큼 *의 출력을 반복 처리한 것이다. *의 부분을 다른 문자로 변경하면 여러 가지 기호와 문자를 출력할 수 있다.
예제) 입력한 수까지의 합계 계산
1부터 입력한 수까지를 순서대로 덧셈한 합계를 구하는 코드를 작성해 보도록 한다.
#include <iostream>
using namespace std;
int main()
{
int num;
int sum = 0; //덧셈의 합계로 누적할 변수 sum을 0으로 초기화한다.
cout << "몇 개까지의 합계를 구합니까? ";
cin >> num;
for (int i = 1; i <= num; i++) {
sum += i; //i가 입력한 수로 될 때까지 덧셈을 반복한다.
}
cout << "1부터 " << num << "까지의 합계는 " << sum << "입니다. \n";
return 0;
}
for문 내에서는 변수 sum에 변수 i의 값을 고쳐 쓰고 있다. 변수 i의 값은 1부터 1씩 증가해가면서 이 반복 처리로 1부터 입력한 수치까지 합계한 수를 구할 수 있다.
예제) 팩토리얼 계산
반복문을 사용하여 팩토리얼(factorial)을 계산하는 코드를 작성해 보도록 한다.
#include <iostream>
using namespace std;
int main()
{
int num, fact = 1; //팩토리얼의 결과값인 곱셈을 누적할 fact 변수를 1로 초기화한다.
cout << "팩토리얼을 구할 수를 입력하세요=> ";
cin >> num; //계산할 팩토리얼 수인 num을 입력한다.
cout << num << "! = ";
for (int i = num; i >= 1; i--) { //for문은 num에서부터 1까지 1씩 감소시켜 팩토리얼 값을 계산한다.
fact *= i;
cout << i << "x";
}
cout << '\b' << '=' << fact << '\n';
/*특수 기호인 '\b'를 사용하여 현재 커서의 한칸 앞(왼쪽 방향)으로 이동한다.
그 후 계산한 팩토리얼 결과값인 fact를 출력한다.*/
return 0;
}
while 문
C++에서는 for문과 같이 지정한 문장을 반복할 수 있는 구문이 있다. 그중 하나가 while문이다. 이것은 조건이 성립되는 동안 문장을 반복 처리하는 것이며, 조건이 성립되지 않으면 한 번도 문장을 수행하지 않는다.
[구문 : while문]
while (조건) { //조건이 true인 경우에...
문장; //블록 내의 문장을 순서대로 반복 처리한다.
...
}
예제) while문의 사용
while문을 사용하여 문장을 반복 출력하는 코드를 작성해보도록 한다.
#include <iostream>
using namespace std;
int main()
{
int i = 1;
while (i <= 5) { //①...
cout << i << "번째의 반복입니다.\n"; //② 블록 내의 처리가 순서대로 반복한다.
i++; //③ 이 블록 내에서는 조건이 false에 가까워지도록 변수 i의 값을 증가하고 있다.
}
cout << "반복을 종료했습니다.\n";
return 0;
}
① 조건이 true인 경우에 ②, ③을 수행한다. 사실은 이 while문의 코드 처리 내용은 위 for문 예제의 처리와 똑같다. 이 while문에서는 조건 i <= 5가 false로 될 때까지 반복을 계속하기 때문이다.
일반적으로 반복문에서는 반복을 하는지 안 하는지를 판단하기 위한 조건이 변화하도록 해 두지 않으면 영원히 반복 처리가 수행되는 것으로 되어 버린다.
예를 들면, 다음의 코드를 살펴보도록 한다.
int i = 1;
while (i <= 5) { //조건을 결정해서 false로 되지 않기 때문에 블록이 영원히 반복됨
cout << i << "번째의 반복입니다.\n";
}
조건 기술의 생략
if문과 while문 등에서 관용적으로 사용되고 있는 조건의 사용법에 관해 살펴보기로 한다.
예제) 관용적인 조건을 사용
0이 입력될 때까지 입력한 정수를 반복 출력하는 코드를 작성해 보도록 한다.
#include <iostream>
using namespace std;
int main()
{
int num = 1;
while (num) { //num이 0일 때(거짓일 때) 반복을 종료한다.
cout << "정수를 입력해 주세요.(0이면 종료)=> ";
cin >> num;
cout << num << "가 입력되었습니다.\n";
}
cout << "반복을 종료했습니다.\n";
return 0;
}
이 코드는 입력한 정수를 반복 출력하는 것이다. 이 반복은 사용자가 0을 입력했을 때 종료한다. 그러면 이 코드의 while문의 조건을 살펴보도록 한다. 이 while문은
while(num){
...
로 되어 있다. 이것은 어떠한 의미인가?
조건문에서 설명한 것 같이 정수형의 값은 true 또는 false로 변환된다. 따라서 여기서는 int형의 변수 num의 값이 0 이외일 때는 true, 0일 때는 false로 변환된다. 즉, 이 while문은 [num이 0일 때] 즉, 사용자가 0을 입력한 경우에 false로 되고, 종료하는 것을 의미한다. 0 이외의 값인 경우는 while문의 처리를 반복하는 것이다.
이 조건을 관계 연산자를 사용해서 쓰면 다음과 같이 기술할 수 있다.
while(num != 0){
...
이것은 관계 연산자를 사용해서 입력된 수치가 0이 아닌가의 여부를 판단하는 것이다.
또한 역으로 식이 0 이외의 값일 때에 반복을 종료시키는 조건도 자주 사용한다. 이 조건은 다음과 같이 쓴다.
while(!num){
...
!는 부정을 나타내는 논리 연산자이다. 이 조건은 아래와 같은 조건과 똑같은 것을 나타내고 있다.
while(num == 0){
...
출처: 박흥복, 서정희. 2015. C++ 프로그래밍 (초보자를 위한). 문운당