본문 바로가기
GD's IT Lectures : 기초부터 시리즈/C, C++ 기초부터 ~

[C/C++ 프로그래밍] 7. 반복문

by GDNGY 2023. 5. 15.

Chapter 7. 반복문

이 장에서는 반복문이 무엇인지, 그리고 왜 필요한지에 대해 배울 수 있습니다. 그 후, 여러 종류의 반복문이 어떻게 동작하는지, 그리고 어떻게 활용할 수 있는지에 대한 상세한 설명과 예제코드를 통해 살펴보게 됩니다.

이 장에서 다루는 반복문에는 for문, while문, 그리고 do-while문이 포함되며, 이들은 프로그래밍에서 자주 사용되는 구조입니다. 또한 반복문과 함께 사용되는 break문과 continue문에 대해서도 배울 수 있습니다. 이들은 반복문의 흐름을 제어하는 데 유용합니다.

또한, 중첩된 반복문에 대해서도 배우게 됩니다. 중첩된 반복문은 반복문 내부에 또 다른 반복문이 있는 구조를 말합니다. 이런 구조는 복잡한 프로그램을 작성할 때 흔히 사용됩니다.

마지막으로, 반복문을 활용한 다양한 예제를 통해 반복문의 활용법을 익히게 될 것입니다.

 


 

반응형

 


[Chapter 7. 반복문]


7.1. 반복문이란?
7.1.1. 반복문의 개념
7.1.2. 반복문의 필요성

7.2. for문
7.2.1. for문의 기본 구조
7.2.2. for문의 활용

7.3. while문
7.3.1. while문의 기본 구조
7.3.2. while문의 활용

7.4. do-while문
7.4.1. do-while문의 기본 구조
7.4.2. do-while문의 활용

7.5. 반복문과 break문
7.5.1. break문의 개념
7.5.2. break문의 활용

7.6. 반복문과 continue문
7.6.1. continue문의 개념
7.6.2. continue문의 활용

7.7. 중첩 반복문
7.7.1. 중첩 반복문의 개념
7.7.2. 중첩 반복문의 활용

7.8. 반복문을 사용한 프로그램 예제
7.8.1. 별 찍기 프로그램 작성
7.8.2. 구구단 출력 프로그램 작성

7.9. 반복문에 대한 고급 주제
7.9.1. 반복문과 배열
7.9.2. 반복문과 함수

 


7.1. 반복문이란?

반복문은 주어진 조건이 참인 동안, 특정 코드 블록을 계속 실행하는 구조입니다. 예를 들어, 주어진 조건이 참일 때까지 특정 동작을 반복하거나, 리스트나 배열의 모든 요소에 대해 동작을 실행하고자 할 때 반복문을 사용합니다. 이는 코드의 효율성을 향상하며, 유지보수를 용이하게 합니다.

7.1.1. 반복문의 개념

반복문은 어떤 조건이 참인 동안, 주어진 코드 블록을 계속 실행하는 구조입니다. 이것은 C/C++에서 프로그램의 흐름을 제어하는 핵심적인 부분입니다. 예를 들어, 주어진 조건이 참이 될 때까지 특정 코드를 반복적으로 실행하거나, 특정 리스트나 배열의 모든 요소에 대해 동작을 수행하고자 할 때 반복문을 사용합니다.

 

다음은 C와 C++ 언어로 작성된 간단한 for 반복문의 예제입니다.

 

[예제] : C 언어

#include <stdio.h>

int main() {
    for(int i=0; i<5; i++) {
        printf("Hello, World! %d\n", i);
    }
    return 0;
}


[예제] : C++ 언어

#include <iostream>

int main() {
    for(int i=0; i<5; i++) {
        std::cout << "Hello, World! " << i << std::endl;
    }
    return 0;
}


위 코드는 "Hello, World!"라는 문장을 5번 반복하여 출력하는 간단한 예제입니다. 여기서 'i<5'가 반복 조건이며, 이 조건이 참인 동안에 코드 블록이 반복됩니다.

 

7.1.2. 반복문의 필요성

반복문은 프로그램에서 반복적인 동작을 수행하는 데 필요합니다. 예를 들어, 사용자로부터 입력을 10번 받아야 하는 상황이나, 어떤 배열의 모든 요소에 같은 동작을 적용해야 하는 경우에 반복문을 사용합니다. 반복문이 없다면, 같은 코드를 여러 번 작성해야 할 것입니다. 이는 코드의 효율성을 저하시키고 유지보수를 어렵게 만듭니다. 반복문은 이런 문제를 해결하고, 코드의 간결성과 유지보수성을 향상합니다.

 


7.2. for문

"for문"은 C/C++ 프로그래밍에서 반복적인 작업을 수행할 때 사용하는 구조입니다. 초기화, 조건 검사, 그리고 갱신의 세 부분으로 구성되어 있으며, 이를 통해 코드의 일정 부분을 원하는 횟수만큼 반복 실행할 수 있습니다. 이 구조를 이해하고 사용하는 것은 프로그래밍 기초 중 하나이며, 다양한 문제 해결에 사용됩니다.

 

7.2.1. for문의 기본 구조

for문은 반복적인 작업을 수행하기 위한 프로그래밍 구조입니다. C/C++에서는 for문이 특정 조건이 만족되는 동안 코드 블록을 반복 실행하게 합니다. 기본 구조는 다음과 같습니다:

 

[예제]

for (초기화; 조건; 갱신){
    // 반복할 코드
}

여기서 "초기화"는 반복문이 시작되기 전에 한 번만 실행되는 표현식이며, 대체로 반복문의 제어 변수를 초기화하는 데 사용됩니다. "조건"은 각 반복에서 평가되며, 이 조건이 참인 동안에만 반복문이 실행됩니다. "갱신"은 반복문의 각 실행 뒤에 실행되는 표현식으로, 주로 반복문의 제어 변수를 갱신하는 데 사용됩니다. 

 

7.2.2. for문의 활용

이제 for문을 사용하여 1부터 10까지 출력하는 예제를 보겠습니다.

 

[예제] : C 언어

#include <stdio.h>

int main() {
    for (int i = 1; i <= 10; i++) {
        printf("%d\n", i);
    }
    return 0;
}


[예제] : C++

#include <iostream>

int main() {
    for (int i = 1; i <= 10; i++) {
        std::cout << i << std::endl;
    }
    return 0;
}

 

여기서 for (int i = 1; i <= 10; i++) 부분이 for문입니다. int i = 1이 초기화 부분이고, i <= 10이 조건 부분, i++이 갱신 부분입니다. 따라서 이 코드는 1부터 10까지의 수를 출력하게 됩니다.

 

이번에는 for문을 활용해 1부터 100까지의 숫자 중 홀수만 출력하는 프로그램을 작성해 보겠습니다.

 

[예제] : C 언어

#include <stdio.h>

int main() {
    for (int i = 1; i <= 100; i++) {
        if (i % 2 != 0) {
            printf("%d\n", i);
        }
    }
    return 0;
}

 

[예제] : C++

#include <iostream>

int main() {
    for (int i = 1; i <= 100; i++) {
        if (i % 2 != 0) {
            std::cout << i << std::endl;
        }
    }
    return 0;
}

 

이 코드에서는 for문을 사용해 1부터 100까지 순회하면서 if문으로 홀수를 판별합니다. i % 2 != 0은 i가 홀수인지를 검사하는 조건입니다. 만약 i가 홀수라면, 해당 숫자를 출력하게 됩니다.

 

결국 for문은 동일한 작업을 여러 번 반복하거나, 특정 조건을 만족하는 동안 작업을 반복할 때 사용하는 강력한 도구입니다.

 


7.3. while문

C/C++ 프로그래밍에서 반복적인 작업을 처리하는 데 사용되는 제어 구조입니다. 주어진 조건이 참인 동안, while문 내의 코드 블록이 반복적으로 실행됩니다. 이를 통해, 프로그래머는 동일한 작업의 반복적인 실행을 쉽게 처리할 수 있습니다.

7.3.1. while문의 기본 구조

'while문'은 C/C++에서 조건이 참인 동안 특정 명령문을 계속해서 반복 실행하는데 사용하는 제어 구조입니다. while문의 기본 구조는 다음과 같습니다:


[예제] : C

while (조건식) {
    // 실행할 명령문
}

 

[예제] : C++

while (조건식) {
    // 실행할 명령문
}

 

조건식이 참인 동안에만 명령문이 반복해서 실행됩니다. 만약 조건식이 거짓으로 평가되면, 반복문은 종료되고 프로그램은 while문 바로 다음의 코드를 실행하게 됩니다.

 

7.3.2. while문의 활용

다음은 while문을 사용한 간단한 예제입니다.

 

[예제] : C

int i = 0;
while (i < 5) {
    printf("%d\n", i);
    i++;
}


[예제] : C++

int i = 0;
while (i < 5) {
    std::cout << i << std::endl;
    i++;
}

 

이 예제에서는 i라는 변수를 0부터 시작하여 5 미만인 동안 1씩 증가시키며 출력하는 것을 반복하고 있습니다. 따라서 이 코드는 0부터 4까지의 숫자를 출력합니다.

 

while문을 이해하고 사용하면, 반복적인 작업을 쉽게 처리할 수 있습니다. 주어진 조건이 참인 동안 특정 작업을 계속 실행할 수 있으므로, 일련의 작업을 자동화하거나, 특정 조건이 만족될 때까지 작업을 반복할 수 있습니다.

 


7.4. do-while문

C/C++ 프로그래밍의 또 다른 반복문 형식입니다. 이것은 조건 검사가 루프의 끝에서 수행되므로, 루프의 본문이 최소한 한 번은 실행됩니다. 이러한 특성 때문에 do-while문은 '후행 검사 루프'라고도 합니다.

7.4.1. do-while문의 기본 구조

do-while문의 기본적인 구조는 다음과 같습니다. 이 구조를 보면, "do" 키워드로 시작하여 중괄호({}) 안에 실행할 코드 블록을 작성하고, "while" 키워드를 사용하여 조건을 체크하는 구조임을 확인할 수 있습니다.

 

[예제]

do {
    // 실행할 코드
} while (조건);

 

이 구조에서 특징적인 점은 조건 검사가 코드 블럭의 뒷부분에서 일어난다는 것입니다. 이는 do-while문이 최소 한 번은 반드시 실행될 것임을 보장합니다.

 

7.4.2. do-while문의 활용

do-while문은 사용자로부터 입력을 받거나, 적어도 한 번은 실행되어야 하는 작업을 처리할 때 유용하게 사용됩니다.

 

[예제]

int main() {
    int input;
    do {
        printf("1. 사과\n");
        printf("2. 배\n");
        printf("3. 복숭아\n");
        printf("4. 종료\n");
        printf("메뉴를 선택하세요: ");
        scanf("%d", &input);
    } while (input != 4);

    return 0;
}

 

이 예제에서는 사용자가 '4'를 입력하여 프로그램을 종료하기 전까지 계속해서 메뉴를 출력하게 됩니다. 이처럼 do-while문은 사용자의 선택에 따라 반복을 제어할 때 매우 효과적입니다.

 


7.5. 반복문과 break문

프로그래밍에서 자주 사용되는 개념으로, 반복문의 진행을 중단하고 반복문을 벗어나는 역할을 합니다. 이를 통해 조건에 따라 반복을 즉시 종료하거나, 특정 조건에서만 반복을 빠져나가게 할 수 있습니다.

7.5.1. break문의 개념

break문은 반복문 안에서 사용되며, break문을 만나게 되면 그 즉시 해당 반복문을 벗어나게 됩니다. 반복문의 종류(while, do-while, for 등)에 상관없이 동일하게 작동합니다.

 

[예제]

for(int i=0; i<10; i++) {
    if(i == 5) {
        break;
    }
    printf("%d\n", i);
}

 

위 예제에서는 0부터 시작하여 1씩 증가하는 i값을 출력합니다. 그러나 i가 5가 되는 순간 break문을 만나게 되어 for문을 즉시 종료하게 됩니다. 따라서, 출력은 0부터 4까지만 이루어집니다.

 

7.5.2. break문의 활용

break문은 무한 루프 내에서 특정 조건을 만족하면 루프를 종료하도록 하는 등 다양한 상황에서 활용됩니다.

 

[예제]

while(1) {
    int input;
    printf("1. 사과\n");
    printf("2. 배\n");
    printf("3. 복숭아\n");
    printf("4. 종료\n");
    printf("메뉴를 선택하세요: ");
    scanf("%d", &input);
    
    if(input == 4) {
        break;
    }
}

 

위 예제에서는 사용자가 '4'를 입력하면 break문을 만나게 되어 while문을 벗어나게 됩니다. 이처럼, break문은 사용자의 입력에 따라 반복을 제어하는 데 매우 유용합니다.

 


7.6. 반복문과 continue문

프로그래밍에서 사용하는 구문으로서, 특정 조건을 만족하면 그 이후의 명령문을 건너뛰고 다음 반복으로 넘어가게 하는 역할을 합니다. 이를 통해 특정 조건에서만 명령을 수행하지 않도록 제어할 수 있습니다.

 

7.6.1. continue문의 개념

continue문은 반복문 내에서 사용되며, 해당 반복문의 나머지 부분을 건너뛰고 바로 다음 반복으로 넘어가게 합니다. 다시 말해, continue문 아래에 있는 코드는 해당 반복에서 실행되지 않습니다.

 

[예제]

for(int i=0; i<10; i++) {
    if(i % 2 == 0) {
        continue;
    }
    printf("%d\n", i);
}

 

위 코드에서, i가 짝수일 때는 continue문에 의해 printf문이 건너뛰어지고, i가 홀수일 때만 printf문이 실행되어 홀수만 출력됩니다.

 

7.6.2. continue문의 활용

continue문은 조건에 따라 특정 반복에서만 명령을 건너뛰어야 할 때 유용합니다. 이는 반복문의 복잡도를 줄이고 가독성을 높여줍니다.

 

[예제]

for(int i=1; i<=100; i++) {
    if(i % 3 != 0 && i % 5 != 0) {
        continue;
    }
    printf("%d\n", i);
}

 

이 예제에서는 1부터 100까지의 숫자 중 3의 배수 또는 5의 배수만 출력합니다. continue문을 사용하여, 3의 배수도 아니고 5의 배수도 아닌 숫자는 출력 구문을 건너뛰게 했습니다.

 


7.7. 중첩 반복문

반복문 내에 또 다른 반복문이 있는 구조를 말합니다. 이를 통해 복잡한 패턴의 반복을 구현하거나, 다차원 배열 등을 처리할 때 유용합니다.

 

7.7.1. 중첩 반복문의 개념

중첩 반복문은 반복문 안에 또 다른 반복문이 존재하는 구조입니다. 외부 반복문 한 번 실행에 대해 내부 반복문은 모두 실행됩니다. 그러므로 내부 반복문이 완전히 끝나야 외부 반복문의 다음 회차로 넘어갑니다.

 

[예제]

for(int i=0; i<5; i++) {
    for(int j=0; j<5; j++) {
        printf("%d ", j);
    }
    printf("\n");
}

 

위 코드에서는 i가 0부터 4까지 반복되는 외부 반복문 안에, j가 0부터 4까지 반복되는 내부 반복문이 있습니다. 내부 반복문이 끝나야 외부 반복문의 다음 회차로 넘어갑니다.

 

7.7.2. 중첩 반복문의 활용

중첩 반복문은 주로 다차원 데이터의 처리, 복잡한 패턴의 출력 등에 사용됩니다. 예를 들어, 2차원 배열의 모든 요소를 순회하거나, 별표(*)로 이루어진 사각형, 삼각형 등을 출력할 때 사용됩니다.

 

[예제]

for(int i=0; i<5; i++) {
    for(int j=0; j<=i; j++) {
        printf("*");
    }
    printf("\n");
}

 

위 코드는 외부 반복문이 한 번 실행될 때마다 내부 반복문이 i번만큼 실행되어, i+1개의 별표()를 출력합니다. 따라서 별표()로 이루어진 삼각형을 출력할 수 있습니다.

 


7.8. 반복문을 사용한 프로그램 예제

실제로 반복문이 어떻게 활용될 수 있는지를 설명하고 구체적인 코드를 통해 보여주는 내용입니다. 이 섹션에서는 별 찍기 프로그램과 구구단 출력 프로그램을 예로 들어 반복문의 활용법을 설명합니다.

 

7.8.1. 별찍기 프로그램 작성

별 찍기 프로그램은 중첩 반복문의 대표적인 활용 사례입니다. 행과 열의 반복을 통해 별 모양을 찍는 프로그램을 작성해 보겠습니다.

 

[예제]

#include <stdio.h>

int main() {
    for(int i=0; i<5; i++) { // 행의 반복
        for(int j=0; j<=i; j++) { // 열의 반복
            printf("*");
        }
        printf("\n");
    }
    return 0;
}

 

위의 코드는 가장 기본적인 별 찍기 프로그램입니다. 반복문 안에 또 다른 반복문이 있는 중첩 반복문 형태로, 행과 열을 반복하여 별을 찍습니다.

 

7.8.2. 구구단 출력 프로그램 작성

구구단은 반복문을 이용해 쉽게 구현할 수 있습니다. 이때도 중첩 반복문을 이용하여 간단히 구현할 수 있습니다.

 

[예제]

#include <stdio.h>

int main() {
    for(int i=1; i<=9; i++) { // 1단부터 9단까지
        for(int j=1; j<=9; j++) { // 각 단의 1곱부터 9곱까지
            printf("%d * %d = %d\n", i, j, i*j);
        }
    }
    return 0;
}


위의 코드는 간단한 구구단 출력 프로그램입니다. 반복문 안에 또 다른 반복문을 이용하여 1단부터 9단까지, 그리고 각 단의 1곱부터 9곱까지를 출력합니다.

 


7.9. 반복문에 대한 고급 주제

초급 단계에서 이해하고 활용한 반복문을 조금 더 깊게 이해하고 실제 코드에서 더 효율적으로 활용하는 방법에 대해 설명하는 섹션입니다. 배열과 함수를 이용한 반복문 활용에 대해 다룰 예정입니다.

 

7.9.1. 반복문과 배열

반복문은 배열의 원소에 접근하거나 처리할 때 매우 유용합니다. 아래는 C 언어에서의 간단한 배열 처리 코드입니다.

[예제]

#include <stdio.h>

int main() {
    int arr[5] = {1, 2, 3, 4, 5};
    for(int i=0; i<5; i++) {
        printf("%d\n", arr[i]);
    }
    return 0;
}

 

위 코드는 배열의 모든 원소를 순서대로 출력합니다. 반복문의 인덱스 i는 배열의 인덱스로 활용되어 배열의 모든 원소에 접근하게 됩니다.

 

7.9.2. 반복문과 함수

함수와 반복문을 결합하면 코드의 가독성과 재사용성을 높일 수 있습니다. 아래의 C++ 코드는 함수 내부에서 반복문을 이용해 배열의 합을 계산하는 예입니다.

 

[예제]

#include <iostream>

int arraySum(int arr[], int size) {
    int sum = 0;
    for(int i=0; i<size; i++) {
        sum += arr[i];
    }
    return sum;
}

int main() {
    int arr[5] = {1, 2, 3, 4, 5};
    std::cout << arraySum(arr, 5) << std::endl;
    return 0;
}

 

위 코드에서 arraySum 함수는 인자로 받은 배열의 모든 원소의 합을 계산하고 그 결과를 반환합니다. 이렇게 함수와 반복문을 함께 사용하면 특정 작업을 반복적으로 수행해야 할 때 코드를 간결하게 유지할 수 있습니다.

 

 

 

2023.05.15 - [GD's IT Lectures : 기초부터 시리즈/C, C++ 기초부터 ~] - [C/C++ 프로그래밍] 6. 조건문

 

[C/C++ 프로그래밍] 6. 조건문

Chapter 6. 조건문 '조건문'은 프로그래밍에서 매우 중요한 개념입니다. 조건문은 특정 조건에 따라 다른 코드 블록이 실행되게 하는 데 사용됩니다. 즉, 프로그램의 흐름을 제어하는 역할을 합니

gdngy.tistory.com

 

반응형

댓글