Skip to content

Latest commit

 

History

History
267 lines (188 loc) · 7.55 KB

chapter05.md

File metadata and controls

267 lines (188 loc) · 7.55 KB

반복적으로 실행하기

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씩 증가시키며 더해주면 원하는 값을 얻을 수 있죠.

반복문은 크게

  1. 일정 횟수만큼 반복하기
  2. 조건을 만족하는 동안 반복하기

두 가지로 생각할 수 있습니다.

일정 횟수만큼 반복하기

먼저, 일정 횟수만큼 반복하는 반복문에 대해 알아보도록 하겠습니다.
일정 횟수만큼 반복할 때는 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 문은 주로

  1. 어떤 숫자부터 다른 숫자까지 일정 간격으로 사용할 때
  2. 특정 횟수만큼 실행할 때

사용됩니다.

조건을 만족하는 동안 반복하기

조건을 만족하는 동안 반복할 땐 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:

다들 알다싶이 팩토리얼은 1부터 어떤 정수까지의 모든 정수를 곱한 값입니다.
for 문을 이용하여 양의 정수 n 에 대하여 n 팩토리얼을 구하는 프로그램을 작성해봅시다.

입력 예: 6
출력 예: 720

과제 2:

입력된 모든 정수의 합을 구하는 프로그램을 작성해봅시다.
이 때, 0 이 입력되면 덧셈을 멈추고 지금까지 입력된 모든 정수의 합을 출력하고 프로그램을 종료합니다.

입력 예:

21
36
51
-30
0

출력 예:

78