1부터 10까지의 합을 구하는 프로그램을 작성한다고 합시다.
다음과 같이 1부터 10까지의 정수를 더한 값을 출력할 수 있습니다.
#include <stdio.h>
int main(void) {
int sum = 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10;
printf("%d\n", sum);
return 0;
}그런데 만약 10까지가 아니라 100 혹은 1000, 아니면 더 큰 숫자까지의 합을 구한다면 어떻게 할까요?
때로는 임의의 n 까지의 숫자의 합을 구하고 싶을 수도 있는데 말입니다.
이런 경우에 사용할 수 있는 것이 반복문입니다.
반복할 때마다 더하고자 하는 값을 1씩 증가시키며 더해주면 원하는 값을 얻을 수 있죠.
반복문은 크게
- 일정 횟수만큼 반복하기
- 조건을 만족하는 동안 반복하기
두 가지로 생각할 수 있습니다.
먼저, 일정 횟수만큼 반복하는 반복문에 대해 알아보도록 하겠습니다.
일정 횟수만큼 반복할 때는 for 문을 사용합니다.
for 문의 기본 구조는 다음과 같습니다.
for (초기화; 조건식; 증감식) {
반복할코드;
}초기화 부분은 for 문이 시작할 때 단 한 번만 실행되며, 반복의 기준이 될 변수의 값을 초기화하는 코드를 작성합니다.
조건식 부분은 for 문의 코드블록이 끝날 때마다 한 번씩 실행되며, 조건식 을 만족하지 않을 경우 반복을 종료하고 다음 코드로 넘어갑니다.
증감식 부분은 조건식 을 검사하기 직전에 실행되며, 반복의 기준이 되는 변수를 증가시키거나 감소시킵니다.
예를 들어, 어떤 코드를 10번 반복하고자 할 때 다음과 같이 작성할 수 있습니다.
for (int i = 0; i < 10; i++) {
반복할코드;
}for 문 내에서만 사용하도록 선언된 변수 i 가 0으로 초기화된 채 코드블록이 실행되고, 1 더해진 채 다시 실행되고, 반복하다가 0, 1, 2, ..., 9까지 실행된 후, i==10 이 되면 i < 10 을 만족하지 않게 되어 반복이 종료됩니다.
앞서 언급된 0부터 10까지의 숫자를 더하는 코드는 for 문을 사용하여 다음과 같이 구현할 수 있습니다.
#include <stdio.h>
int main(void) {
int sum = 0;
for (int i = 1; i <= 10; i++) {
sum += i;
}
printf("%d\n", sum);
return 0;
}이제 10이 아닌 다른 숫자까지의 합을 구하고 싶다면 단순히 for 문의 조건식만 수정하면 됩니다.
for 문의 변수는 반드시 증가하는 방향으로 갈 필요는 없습니다.
다음과 같이 감소하는 for 문도 있을 수 있죠.
#include <stdio.h>
#include <unistd.h> // Windows 에서는 #include <windows.h>
int main(void) {
for (int count = 5; count > 0; count--) {
printf("%d...\n", count);
sleep(1); // Windows 에서는 Sleep(1000);
}
printf("BOOOOOM!!!!!\n");
return 0;
}이 코드를 실행하면 다음과 같은 내용이 1초 간격으로 한 줄씩 출력됩니다.
5...
4...
3...
2...
1...
BOOOOOM!!!!!
때로는 다음과 같이 1보다 큰 숫자만큼 증감할 수도 있습니다.
#include <stdio.h>
int main(void) {
printf("10보다 작은 홀수는 ");
for (int i = 1; i < 10; i+=2) {
printf("%d ", i);
}
printf("입니다.\n");
return 0;
}for 문은 주로
- 어떤 숫자부터 다른 숫자까지 일정 간격으로 사용할 때
- 특정 횟수만큼 실행할 때
사용됩니다.
조건을 만족하는 동안 반복할 땐 while 문을 사용합니다.
물론 for 문을 사용할 수도 있는 조건 반복문도 있긴 합니다.
가령, 다음과 같은 while 문은 앞서 살펴본 것과 같이 for 문으로도 작성할 수 있습니다.
#include <stdio.h>
int main(void) {
int n = 1;
int sum = 0;
while (n <= 10) {
sum += n;
}
printf("%d\n", sum);
return 0;사실 그 외에도 앞서 살펴본 for 문 예제들은 전부 while 문으로도 작성할 수 있습니다.
다만 해당 예제들은 for 문을 사용하는 편이 반복 조건을 더 직관적으로 이해하기 쉽습니다.
때로는 for 문을 사용하기 어려운 반복문도 있습니다.
예를 들어, 다음과 같이 사용자 입력에 따라 반복 여부를 결정하는 경우에는 while 문을 사용합니다.
#include <stdio.h>
int main(void) {
int num;
printf("짝수를 입력하세요: ");
scanf("%d", &num);
while (num % 2 == 1) {
printf("짝수가 아닙니다. 다시 입력하세요: ");
scanf("%d", &num);
}
printf("%d은(는) 짝수입니다.\n", num);
return 0;
}위 코드는 사용자가 짝수를 입력할 때까지 정수를 다시 입력받습니다.
이와 같은 코드는 몇 번을 반복해야 할 지 알 수 없으므로 for 문을 사용할 수 없습니다.
while 문의 기본 구조는 다음과 같습니다.
while (조건식) {
반복할코드;
}while 문을 시작할 때 조건식 을 검사하고 코드블록이 끝날 때마다 다시 검사하여 조건식 을 만족하는 동안 코드블록을 반복하며, 만약 처음부터 조건식 을 만족하지 않는다면 코드블록 안에 있는 코드가 단 한 번도 실행되지 않습니다.
만약 최소한 한 번이라도 코드블록이 실행되도록 하고 싶다면 do while 문을 사용할 수 있습니다.
do while 문은 while 문과 기본적인 흐름은 큰 차이 없지만, 조건식을 먼저 검사하고 코드블록을 실행하는 게 아니라 코드블록을 실행한 후에 조건식을 검사합니다.
반복문을 시작하는 시점에서 조건문을 검사할 것인가 아닌가의 차이일 뿐이죠.
do while 문의 기본 구조는 다음과 같습니다.
do {
반복할코드;
} while (조건식);다음과 같은 상황에서 do while 문을 사용할 수 있습니다.
#include <stdio.h>
int main(void) {
int choice;
do {
printf("--- MENU ---\n");
printf("1. 전체 보기\n");
printf("2. 추가하기\n");
printf("3. 제거하기\n");
printf("4. 검색하기\n");
printf("5. 종료\n");
scanf("%d", &choice);
printf("%d번 메뉴를 선택했습니다.\n", choice);
} while (choice != 5);
printf("종료합니다.\n");
return 0;
}이제 여러분이 직접 반복문을 작성해볼 시간입니다.
주어진 과제를 수행하고 작성한 C 파일과 실행 결과 스크린샷을 제출해주시기 바랍니다.
지난 과제와 마찬가지로, 모든 과제는 정해진 형식의 입력값 외의 입력에 대한 예외처리를 하지 않아도 됩니다.
다들 알다싶이 팩토리얼은 1부터 어떤 정수까지의 모든 정수를 곱한 값입니다.
for 문을 이용하여 양의 정수 n 에 대하여 n 팩토리얼을 구하는 프로그램을 작성해봅시다.
입력 예: 6
출력 예: 720
입력된 모든 정수의 합을 구하는 프로그램을 작성해봅시다.
이 때, 0 이 입력되면 덧셈을 멈추고 지금까지 입력된 모든 정수의 합을 출력하고 프로그램을 종료합니다.
입력 예:
21
36
51
-30
0
출력 예:
78