15 반복문(for 문)을 사용한 구간 반복

  • 44 minutes to read

반복문을 사용하면 반복적으로 처리해야할 일을 컴퓨터에게 빠르게 시킬 수 있습니다. 이번 강의는 반복문의 첫 번째인 for 문(for 루프)에 대해서 알아보겠습니다.

> // for 문(for 루프): 초기식부터 조건식을 만족하는 동안 실행문을 실행하고 증감식을 진행

15.1 for 문으로 반복하기

for 문은 특정 구문을 여러 번 반복(Iteration)해서 실행할 때 사용됩니다. for 문의 형식은 다음과 같습니다. 일반적으로, for 문을 말할 때 for 루프(Loop)라고도 말합니다.

for (초기식; 조건식; 증감식)
{
    실행문;
}

for 문은 초기식부터 조건식까지 증감식 크기만큼 증가 또는 감소를 시키면서 실행문을 반복하여 실행합니다. 말이 조금 어렵죠? 걱정하실 필요없이 실제 사용 가능한 코드를 여러 번 반복하다보면 금방 이해할 수 있습니다. 이 강의의 글이 어렵게 느껴지면 그냥 쭉 읽어보면서 넘어가도 전혀 문제가 되지 않습니다. 중요한 것은 소스는 반드시 타이핑 후 결과를 본 후 그리고 나서 내용을 이해하려고 노력해야한다는 점입니다.

참고로, for 문을 순서도로 표현해보면 다음과 같습니다. 3가지 스타일 모두 반복문을 표현합니다.

그림: for 문 순서도

for-statement-flowchart.png

for-loop-flowchart.png

for-loop-function-style-flowchart.png

15.2 for 문을 사용하여 "안녕하세요." 3번 출력하기

for 문을 사용하여 반복해서 출력하는 내용을 다루어 보겠습니다. 가장 간단한 예제로 화면에 "안녕하세요."를 3번 출력하는 예제입니다. 참고로 Visual Studio 편집기에서 for 입력 후 탭 키를 두 번 입력하면 자동으로 for 문에 대한 코드 조각을 생성해줍니다.

코드: for_description.c

//[?] for 문을 사용하여 "안녕하세요." 3번 출력하기
#include <stdio.h>

int main(void)
{
    int i = 0; // 반복 변수 선언

    //[!] for (초기식; 조건식; 증감식) { 실행문; }
    for (i = 0; i < 3; i++) // i가 0, 1, 2 순서로 3번 반복
    {
        printf("안녕하세요.\n");
    }

    return 0;
}
안녕하세요.
안녕하세요.
안녕하세요.

for (초기식;조건식;증감식) { 실행문; } 형태의 구문에 "안녕하세요."를 출력하는 코드를 넣어서 3번 출력하는 구문입니다.

실행 순서를 정리해보면 다음과 같습니다.

  1. i = 0; 초기식 할당
  2. 0 < 3; 비교하여 true가 되어 for 문 진입
  3. printf("안녕하세요."); 출력
  4. **i++;**를 실행하여 i 변수 1 증가
  5. 1 < 3; 비교하여 true가 되어 for 문 다시 진입
  6. printf("안녕하세요."); 다시 출력
  7. **i++;**를 실행하여 i 변수 1 증가
  8. 2 < 3; 비교하여 true가 되어 for 문 다시 진입
  9. printf("안녕하세요."); 다시 출력
  10. **i++;**를 실행하여 i 변수 1 증가
  11. 3 < 3; 비교하여 false가 되어 for 문 종료

참고로, 이 강의 부록의 "디버거 사용하기" 내용을 참고하여 F10번을 여러 번 눌러가면서 for 문의 진행 순서를 하나씩 살펴볼 수 있습니다.

for 문의 반복을 저장해 놓을 i와 같은 변수는 for 문 밖에서 미리 선언해 놓는 방식이 기본이지만, 다음 코드처럼 for 문에 int i = 0;과 같이 포함해서 관리하면 더 편리합니다.

코드: for_description_up.c

#include <stdio.h>

int main(void)
{
    // 초기식 영역에 int i = 0 형태로 직접 변수 선언 가능
    for (int i = 0; i < 3; i++)
    {
        printf("안녕하세요.\n");
    }

    return 0;
}
안녕하세요.
안녕하세요.
안녕하세요.

반복 변수인 i 변수를 for 문 안에서 선언하고 사용하는 것도 실행 결과는 동일합니다.

NOTE

for 문의 증감식 영역에는 i++가 기본인데요. ++i를 써도 됩니다. 하지만, 추천 코드이면서 기본 코드는 i++입니다. 이에 대한 근거를 찾게되면 이 문서를 더 보충하겠습니다만, 확실한 것은 ++i를 쓰지 말고 i++ 형태를 쓰라는 것입니다. 한 가지 더 혼동되는 부분은 ++i를 써야되는 부분도 있습니다. 그래서 결론적으로 학습 입장에서는 둘 중 아무거나 사용하세요...

15.3 for 루프를 사용하여 1부터 5까지 출력하기

for 루프를 사용하여 1부터 5까지 증가되는 숫자를 출력해 보도록 하겠습니다.

코드: for.c

//[?] for 루프를 사용하여 1부터 5까지 출력하기
#include <stdio.h>

int main(void)
{
    int i = 0;

    // 1부터 5까지 1씩 증가 => 5번 반복
    for (i = 1; i <= 5; i++)
    {
        printf("Count: %d\n", i); // 1부터 5까지 출력
    }

    return 0;
}
Count: 1
Count: 2
Count: 3
Count: 4
Count: 5

for (i = 1; i <= 5; i++) 코드 형태에 의해서 1부터 5까지 1씩 증가하여 총 5번을 반복하여 출력문을 실행합니다. 이때 i의 값은 1부터 5까지 출력됩니다.

15.4 for 문으로 0부터 4까지 2씩 증가시켜 출력하기

for 문의 증감식 영역은 기본 값은 1씩 증가를 합니다. 만약, 2씩 증가를 시키려면 i = i + 2 형태로 지정하면 됩니다. 물론, 증감식 영역을 건드리지 않고 실행문 영역에서 다른 형태의 코드를 사용해도 되지만 지금은 for 문의 여러 가지 모양을 살펴보겠습니다.

코드: for_increment.c

//[?] for 문으로 0부터 4까지 2씩 증가시켜 출력하기 
#include <stdio.h>

int main(void)
{
    // 0부터 4까지 2씩 증가
    for (int i = 0; i < 5; i = i + 2)
    {
        printf("%d\n", i); // 0, 2, 4
    }

    return 0;
}
0
2
4

for 문의 증감식 영역에 i++ 대신에 i = i + 2 형태를 지정해서 i의 값을 2씩 증가시킬 수 있습니다.

15.5. 1부터 3까지의 합계 구하기

1부터 3까지의 합계 구하기

이번에는 for 문을 사용하여 변수 i를 1부터 3까지 반복하여 합계를 구하는 방법에 대해 알아봅니다.

다음은 1부터 3까지의 합계를 구하는 C 코드입니다:

코드: for_sum.c

//[?] 1부터 3까지의 합계 구하기
#include <stdio.h>

int main(void)
{
    int n = 3; // n까지 반복
    int sum = 0; // 합계 저장

    for (int i = 1; i <= n; i++)
    {
        sum = sum + i; // 반복하면서 i 값을 계속 합해서 합계(SUM) 기능 구현
    }

    printf("1부터 %d까지의 합: %d\n", n, sum); // 1부터 3까지의 합: 6
}
1부터 3까지의 합: 6

for 문을 사용하면 지정된 범위의 수의 합계를 쉽게 구할 수 있습니다. 이 예제에서는 1부터 3까지의 수를 sum 변수에 누적하여 합계를 구합니다. sum = sum + i; 라는 코드는 sum += i;로 간단히 줄여서 표현할 수 있습니다.

15.6 짝수의 합계 구하기

지정된 범위의 수 중에서 짝수의 합계만 구하는 예제를 for 문을 사용하여 만들겠습니다.

코드: for_sum_even.c

//[?] 1부터 n까지 정수 중 짝수의 합을 구하는 프로그램
#include <stdio.h>

int main(void)
{
    int n = 5;
    int sum = 0;

    for (int i = 1; i <= n; i++) // n == 5이므로 i가 0, 1, 2, 3, 4일 때
    {
        if (i % 2 == 0) // 모든 숫자를 2로 나누었을 때 0과 같으면 짝수 
        {
            sum += i; // 짝수만(2, 4) 더하기 
        }
    }

    printf("1부터 %d까지 짝수의 합: %d\n", n, sum); // 1부터 5까지 짝수의 합: 6

    return 0;
}
1부터 5까지 짝수의 합: 6

for 문으로 1부터 5까지 반복을 하면서 다시 if 문을 사용하여 짝수(2로 나누었을 때 0)일 때에만 i의 값을 합(누적)하여 합계를 구할 수 있습니다.

15.7 1부터 100까지 정수의 합계 구하기

for 문을 사용하여 1부터 100까지 정수의 합을 구하는 방법을 알아보겠습니다.

코드: sum100.c

//[?] 1부터 100까지 정수의 합계 구하기
#include <stdio.h>

int main(void)
{
    //[1] Input(입력)
    int sum = 0;

    //[2] Process(처리)
    for (int i = 1; i <= 100; i++) // i가 1에서 100까지 100번 반복
    {
        sum += i; // sum = sum + i; // 누적(SUM)
    }

    //[3] Output(출력)
    printf("1부터 100까지 정수의 합: %d\n", sum); // 1부터 100까지 정수의 합: 5050

    return 0;
}
1부터 100까지 정수의 합: 5050

사람이 직접 수작업으로 1부터 100까지의 정수의 합계를 구하려면 시간이 많이 필요합니다. 하지만, 컴퓨터를 사용하여 프로그래밍을 하게 되면 아주 빠른 시간에 구할 수 있습니다. 1부터 1,000까지 또는 1부터 10,000까지도 for 문의 조건식만 바꾸면 바로 구할 수 있습니다.

15.8 숫자를 증가시키거나 감소시켜 출력하기

for 문에 대한 일반적인 코드 모양은 0번째 인덱스부터 특정 값까지 증가하는 모양인데, 다음 코드처럼 그 반대로 값을 감소시켜가면서 반복을 진행할 수 있습니다. for 문에 대한 모양은 이처럼 다양하게 사용될 수 있습니다. 자, 그러면 for 문을 사용하여 숫자를 증가시키거나 감소시키는 방법을 알아보겠습니다.

코드: for_demo_countdown.c


```C 
//[?] 숫자를 증가시키거나 감소시켜 출력하기
#include <stdio.h>

int main(void)
{
    //[1] i 변수의 값이 0, 1, 2, 3, 4로 증가
    for (int i = 0; i < 5; i++)
    {
        printf("%d\t", (i + 1)); // 탭(\t)으로 간격 띄우기 
    }
    printf("\n");

    //[2] i 변수의 값이 5, 4, 3, 2, 1로 감소
    for (int i = 5; i > 0; i--)
    {
        printf("%d\t", i); // 탭(\t)으로 간격 띄우기 
    }
    printf("\n");

    return 0;
}
1       2       3       4       5
5       4       3       2       1

일반적인 경우에는 0부터 인덱스 변수가 시작합니다. 초기식에서 i의 값을 5로 설정한 후 조건 판별 후 증감식에서 i--형태로 지정하면 5부터 하나씩 감소하면서 반복을 진행합니다.

15.9 1부터 100까지 짝수의 합 구하기

1부터 100까지 짝수의 합을 구하는 방법을 알아보겠습니다.

코드: for_even.c

//[?] 1부터 100까지 짝수의 합을 구하는 프로그램
#include <stdio.h>

int main(void)
{
    //[1] Input(입력)
    int sum = 0;

    //[2] Process(처리) : 주어진 범위(`for` 문)에 주어진 조건(if 문)
    for (int i = 1; i <= 100; i++) // 1부터 100까지 범위 지정
    {
        if (i % 2 == 0) // 짝수만 필터링(조회)
        {
            sum += i; // 짝수일 때만 합 구하기 
        }
    }

    //[3] Output(출력)
    printf("1부터 100까지 짝수의 합: %d\n", sum);

    return 0;
}
1부터 100까지 짝수의 합: 2550

프로그래밍에서 알고리즘은 주어진 문제를 해결하는 절차를 의미합니다. 일반적인 알고리즘은 입력(Input), 처리(Process), 출력(Output)의 절차를 가집니다. 1부터 100까지 짝수의 합을 구하려면 1부터 100까지의 범위와 짝수라는 조건이 필요한데 이를 각각 for 문과 if 문을 사용하여 처리할 수 있습니다.

15.10 반복문과 연산자 함께 사용하기

반복문과 연산자와 함께 사용하면 여러 형태로 값을 출력할 수 있습니다.

코드: for_demo.c

//[?] 반복문과 연산자 함께 사용하기
#include <stdio.h>

int main(void)
{
    //[1] 1부터 5까지 3개씩 출력하는 프로그램
    for (int i = 1; i <= 5; i++)
    {
        printf("%d\t", i);
        if (i % 3 == 0)
        {
            printf("\n");
        }
    }
    printf("\n");

    //[2] 1~100까지 정수의 합을 구하는 프로그램
    int sum = 0; // 합을 저장할 변수
    for (int i = 1; i <= 100; i++)
    {
        sum += i; // 누적
    }
    printf("1부터 100까지의 합: %d\n", sum);

    //[3] 1~100까지 정수 중 짝수의 합을 구하는 프로그램
    int even = 0;
    for (int i = 1; i <= 100; ++i)
    {
        if (i % 2 == 0)
        {
            even += i; // 짝수만...
        }
    }
    printf("1부터 100까지의 짝수의 합: %d\n", even);

    return 0;
}
1       2       3
4       5
1부터 100까지의 합: 5050
1부터 100까지의 짝수의 합: 2550

for 문과 같은 반복문은 if 문에 지정한 여러 연산자와 함께 쓰여 필요한 데이터만 필터링해서 가져오는 여러 가지 모양을 구현할 수 있습니다.

15.11 for 문을 사용하여 별표 기호로 삼각형 만들기

2개의 for 문을 사용하여 특정 문자열을 반복해서 출력하는 내용을 다루어 보겠습니다.

코드: for_triangle.c

//[?] for 문을 사용하여 별표 기호로 삼각형 만들기
#include <stdio.h>

int main(void)
{
    int i, j;

    for (i = 1; i <= 5; i++)
    {
        for (j = 1; j <= i; j++) // 행 번호에 맞게 별표 출력(1부터 5까지) 
        {
            printf("*");
        }
        printf("\n");
    }

    return 0;
}
*
**
***
****
*****

바깥 쪽 for 문은 일반적으로 행을 반복하는데 사용됩니다. 그리고 안 쪽 for 문은 열을 반복할 때 사용됩니다.

15.12 프로그램이 계속 실행되는 무한 루프 만들기

프로그래밍에서 무한 루프(Infinite Loop)는 루프(반복문)가 멈추지 않고 계속 실행하여 프로그램이 종료하지 않음을 말합니다. 잘못 작성된 코드에 의해서 무한 루프가 발생하면 프로그램에 심각한 문제가 발생합니다. 이번에 작성하는 프로그램은 실행하면 무한 루프가 발생하여 "무한 루프" 문자열을 계속해서 출력됩니다. 명령 프롬프트에서 무한 루프를 종료하려면 닫기 버튼을 클릭하거나 단축키로 [Ctrl + C]를 눌러 종료할 수 있습니다.

코드: infinite_loop.c

//[?] 무한 루프 만들기 
#include <stdio.h>

int main(void)
{
    // 무한 루프
    for ( ; ; ) // for 문에 아무런 코드를 표현하지 않으면 무한 루프 코드로 실행
    {
        printf("무한 루프\n");
    }

    return 0;
}
무한 루프
무한 루프
무한 루프
무한 루프
^C

위 실행 결과는 4개만 실행된 모양으로 보여지지만 실제로는 강제로 종료하기 전까지는 무한 루프 문자열이 계속 출력됩니다.

15.13 for 문을 사용하여 1부터 4까지의 팩토리얼 값을 출력하는 프로그램

for 문으로 약간 복잡한 수학의 팩토리얼 값을 구하는 예제를 다루어 보겠습니다. 팩토리얼이란 1부터 양의 정수 n까지의 정수를 모두 곱한 것을 말합니다. 1~4의 팩토리얼 값이라면 1 * 2 * 3 * 4의 결괏값인 24가 나옵니다.

코드: for_factorial.c

//[?] for 문을 사용하여 1부터 4까지의 팩토리얼 값을 출력하는 프로그램
#include <stdio.h>

int main(void)
{
    int fact = 0;

    for (int i = 1; i <= 4; i++) // 1부터 4까지 팩토리얼 구하기 
    {
        printf("%d! -> ", i);
        fact = 1; // 1로 초기화
        for (int j = 1; j <= i; j++) // 1부터 i까지 반복해서 곱해서 누적하기 
        {
            fact = fact * j; // (((1 * 1) * 2) * 3) * 4
        }
        printf("%2d\n", fact);
    }

    return 0;
}
1! ->  1
2! ->  2
3! ->  6
4! -> 24

팩토리얼을 구하는 방법은 굉장히 많이 있는데요. 가장 단순한 형태로 fact 변수에 1부터 n까지의 정수의 값을 곱해서 누적하는 방법이 있습니다. %2d 형태를 사용하여 2자릿수를 잡고 숫자를 출력하고 있습니다.

15.14 구구단을 가로로 출력하기

for 문을 2개 사용하는 예제를 소개하고자 합니다. 프로그래밍을 학습할 때 가장 많이 사용되는 구구단 프로그램을 세로로 출력하는게 아닌 가로로 출력하는 프로그램을 다음과 같이 작성해 볼 수 있습니다.

구구단

구구단을 가로로 출력하는 프로그램을 만들어보겠습니다.

코드: timestable.c

// 구구단 출력하기 
#include <stdio.h>

int main(void)
{
    for (int i = 2; i <= 9; i++)
    {
        printf("%4d단  ", i);
    }
    printf("\n");

    for (int i = 1; i <= 9; i++)        // 행 반복: 구구단 세로 출력
    {
        for (int j = 2; j <= 9; j++)    // 열 반복: 구구단 가로 출력
        {
            printf("%d*%d=%2d  ", j, i, j * i); // i와 j의 위치를 바꿔서 출력
        }
        printf("\n");                   // 1줄 출력 후 줄바꿈
    }

    return 0;
}
2단     3단     4단     5단     6단     7단     8단     9단
2*1= 2  3*1= 3  4*1= 4  5*1= 5  6*1= 6  7*1= 7  8*1= 8  9*1= 9
2*2= 4  3*2= 6  4*2= 8  5*2=10  6*2=12  7*2=14  8*2=16  9*2=18
2*3= 6  3*3= 9  4*3=12  5*3=15  6*3=18  7*3=21  8*3=24  9*3=27
2*4= 8  3*4=12  4*4=16  5*4=20  6*4=24  7*4=28  8*4=32  9*4=36
2*5=10  3*5=15  4*5=20  5*5=25  6*5=30  7*5=35  8*5=40  9*5=45
2*6=12  3*6=18  4*6=24  5*6=30  6*6=36  7*6=42  8*6=48  9*6=54
2*7=14  3*7=21  4*7=28  5*7=35  6*7=42  7*7=49  8*7=56  9*7=63
2*8=16  3*8=24  4*8=32  5*8=40  6*8=48  7*8=56  8*8=64  9*8=72
2*9=18  3*9=27  4*9=36  5*9=45  6*9=54  7*9=63  8*9=72  9*9=81

이 프로그램은 중첩된 for 문을 활용하여, 첫 번째 열에서는 2부터 9까지의 수를 곱하는 단을 반복하고, 각 행에서는 1부터 9까지 곱하는 값을 순차적으로 증가시키며 구구단을 가로로 출력합니다. 결과적으로, 첫 행에는 각 단의 1을 곱한 값이, 두 번째 행에는 2를 곱한 값이 출력되는 식으로, 전체 구구단이 가독성 좋게 가로로 표현됩니다.

for 반복문으로 알파벳 순서대로 출력하기

이 프로그램은 for 반복문을 활용하여 알파벳을 순서대로 출력합니다. 대문자 A부터 Z까지, 그리고 소문자 a부터 z까지 각각의 알파벳을 출력한 후, 다시 대문자를 출력합니다.

코드: for_alphabet.c

//[?] for 반복문으로 알파벳 순서대로 출력하기 
#include <stdio.h>

int main(void)
{
    for (int i = 65; i <= 90; i++) // A(65)부터 Z(90)까지 반복
    {
        printf("%c", i); // ABCDEFGHIJKLMNOPQRSTUVWXYZ 
    }
    printf("\n");
    for (int i = 97; i <= 122; i++) // a(97)부터 z(122)까지 반복
    {
        printf("%c", i); // abcdefghijklmnopqrstuvwxyz 
    }
    printf("\n");
    for (char c = 'A'; c <= 'Z'; c++) // 'A'부터 'Z'까지 반복
    {
        printf("%c", c); // ABCDEFGHIJKLMNOPQRSTUVWXYZ 
    }
    printf("\n");

    return 0;
}
ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz
ABCDEFGHIJKLMNOPQRSTUVWXYZ

C 언어 for 문 2씩 증가

for 반복문을 사용하여 알파벳을 2씩 증가시키며 출력할 때는 i++ 대신에 i = i + 2 또는 i += 2를 사용합니다. 이 방식으로 대문자와 소문자 알파벳을 번갈아 출력합니다.

코드: for_alphabet_2.c

//[?] for 반복문으로 알파벳 2씩 증가해서 출력하기 
#include <stdio.h>

int main(void)
{
    for (int i = 65; i <= 90; i = i + 2) // i++ 대신에 i = i + 2를 사용 2씩 증가 
    {
        printf("%c", i); // ACEGIKMOQSUWY 
    }
    printf("\n");
    for (int i = 97; i <= 122; i = i + 2)
    {
        printf("%c", i); // acegikmoqsuwy 
    }
    printf("\n");
    for (char c = 'A'; c <= 'Z'; c = c + 2)
    {
        printf("%c", c); // ACEGIKMOQSUWY 
    }
    printf("\n");

    return 0;
}
ACEGIKMOQSUWY
acegikmoqsuwy
ACEGIKMOQSUWY

이 코드들은 각각 알파벳을 연속적으로 또는 두 개씩 건너뛰며 출력하는 두 가지 방법을 보여줍니다.

퀴즈

  1. 다음 for문에서 빈칸에 들어갈 키워드로 올바른 것은?
for (int i = 0; i < 10; i++)
{
    if (i % 2 == 0)
    {
        ___;
    }
    printf("%d\n", i);
}

a. break b. continue c. return d. exit e. 모든 답변이 올바르지 않다.

정답: b

해설: for문 내부에서 continue 키워드를 사용하면 현재 반복을 중지하고 다음 반복으로 넘어간다. 위의 코드에서는 i가 짝수인 경우에만 continue 키워드가 실행되므로, 짝수인 경우에는 printf("%d\n", i)가 실행되지 않고 다음 반복으로 넘어가게 된다.

  1. 다음 for문에서 실행 결과로 올바른 것은?
for (int i = 5; i > 0; i--)
{
    printf("%d ", i);
}

a. 5 4 3 2 1 b. 1 2 3 4 5 c. 1 1 1 1 1 d. 5 5 5 5 5 e. 모든 답변이 올바르지 않다.

정답: a 해설: 위의 for문은 5부터 1까지의 i 값을 출력하는 코드이다. 따라서 실행 결과는 5, 4, 3, 2, 1이 된다.

  1. 다음 중 for문의 특징이 아닌 것은?

a. 초기화식, 조건식, 증감식의 구성으로 이루어진다. b. 주어진 조건이 참인 동안 반복해서 실행된다. c. 반복 횟수가 정해져 있어야 한다. d. 중첩해서 사용할 수 있다. e. 모든 답변이 for문의 특징이다.

정답: e

해설: for문은 초기화식, 조건식, 증감식의 구성으로 이루어지며, 주어진 조건이 참인 동안 반복해서 실행된다. 또한, 반복 횟수가 정해져 있어야 하고, 중첩해서 사용할 수 있다. 따라서 정답은 e가 아닌 나머지 답변들이 for문의 특징이다.

  1. 다음 for문에서 빈칸에 들어갈 코드로 올바른 것은?
for (int i = 0; i < 10; i++)
{
    if (i == 5)
    {
        ___;
    }
    printf("%d\n", i);
}

a. continue; b. break; c. return 0; d. exit(0); e. 모든 답변이 올바르지 않다.

정답: b

해설: for문 내부에서 break 키워드를 사용하면 반복문을 완전히 종료할 수 있다. 위의 코드에서는 i가 5일 때 break 키워드가 실행되므로, 반복문이 5번째 실행에서 완전히 종료되고 printf("%d\n", i)가 실행되지 않는다.

  1. 다음 for문에서 실행 결과로 올바른 것은?
for (int i = 1; i <= 10; i++)
{
    if (i % 2 == 0)
    {
        continue;
    }
    printf("%d\n", i);
}

a. 1 3 5 7 9 b. 2 4 6 8 10 c. 1 3 5 7 9 d. 2 4 6 8 10 e. 모든 답변이 올바르지 않다.

정답: a

해설: 위의 for문은 1부터 10까지의 i 값 중에서 홀수만 출력하는 코드이다. 따라서 실행 결과는 1, 3, 5, 7, 9가 된다.

15.15 장 요약

모든 프로그래밍 언어는 for 문과 같은 반복문을 가지고 있습니다. 컴퓨터는 사람과 달리 연산 처리가 굉장히 빠르기에 반복 사용되어야 하는 부분은 for 문을 사용하여 컴퓨터에게 프로그래밍을 시키면 효율적으로 빠르게 작업을 완료할 수 있습니다. 이러한 for 문과 비슷한 기능을 하는 추가적인 반복문들을 계속해서 학습해 나가도록 하겠습니다.

for 반복문으로 알파벳 순서대로 출력하기

이 프로그램은 for 반복문을 활용하여 알파벳을 순서대로 출력합니다. 대문자 A부터 Z까지, 그리고 소문자 a부터 z까지 각각의 알파벳을 출력한 후, 다시 대문자를 출력합니다.

코드: for_alphabet.c

//[?] for 반복문으로 알파벳 순서대로 출력하기 
#include <stdio.h>

int main(void)
{
    for (int i = 65; i <= 90; i++) // A(65)부터 Z(90)까지 반복
    {
        printf("%c", i); // ABCDEFGHIJKLMNOPQRSTUVWXYZ 
    }
    printf("\n");
    for (int i = 97; i <= 122; i++) // a(97)부터 z(122)까지 반복
    {
        printf("%c", i); // abcdefghijklmnopqrstuvwxyz 
    }
    printf("\n");
    for (char c = 'A'; c <= 'Z'; c++) // 'A'부터 'Z'까지 반복
    {
        printf("%c", c); // ABCDEFGHIJKLMNOPQRSTUVWXYZ 
    }
    printf("\n");

    return 0;
}
ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz
ABCDEFGHIJKLMNOPQRSTUVWXYZ

C 언어 for 문 2씩 증가

for 반복문을 사용하여 알파벳을 2씩 증가시키며 출력할 때는 i++ 대신에 i = i + 2 또는 i += 2를 사용합니다. 이 방식으로 대문자와 소문자 알파벳을 번갈아 출력합니다.

코드: for_alphabet_2.c

//[?] for 반복문으로 알파벳 2씩 증가해서 출력하기 
#include <stdio.h>

int main(void)
{
    for (int i = 65; i <= 90; i = i + 2) // i++ 대신에 i = i + 2를 사용 2씩 증가 
    {
        printf("%c", i); // ACEGIKMOQSUWY 
    }
    printf("\n");
    for (int i = 97; i <= 122; i = i + 2)
    {
        printf("%c", i); // acegikmoqsuwy 
    }
    printf("\n");
    for (char c = 'A'; c <= 'Z'; c = c + 2)
    {
        printf("%c", c); // ACEGIKMOQSUWY 
    }
    printf("\n");

    return 0;
}
ACEGIKMOQSUWY
acegikmoqsuwy
ACEGIKMOQSUWY

이 코드들은 각각 알파벳을 연속적으로 또는 두 개씩 건너뛰며 출력하는 두 가지 방법을 보여줍니다.

문제 풀이

정보처리기능사 실기 문제: 완전수의 개수 계산하기

이 문제에서는 C 언어를 사용하여 특정 범위 내에서 완전수(perfect number)의 개수를 계산하고 출력하는 프로그램을 작성하는 것이 목표입니다. 완전수란 자기 자신을 제외한 양의 약수들의 합이 자기 자신과 같은 수를 의미합니다. 예를 들어, 6의 경우 1, 2, 3의 합이 6이므로 완전수입니다.

문제: 6부터 30까지의 수 중에서 완전수의 개수를 계산하여 출력하는 C 프로그램을 작성하시오.

#include <stdio.h>

main() {
    int s, el = 0;
    for (int i = 6; i <= 30; i++) {
        s = 0;
        for (int j = 1; j <= i / 2; j++)
            if (i % j == 0)
                s = s + j;
        if (s == i)
            el++;
    }
    printf("%d", el);
}

해결 방법:

  1. #include <stdio.h>를 사용하여 표준 입출력 라이브러리를 포함합니다.
  2. main 함수를 정의하여 프로그램의 시작점을 만듭니다.
  3. 완전수의 개수를 저장할 변수 el을 선언하고 0으로 초기화합니다.
  4. 6부터 30까지의 모든 수에 대해 반복문을 실행합니다. 각 숫자 i에 대해, 그 약수의 합을 계산하기 위한 내부 반복문을 실행합니다.
  5. 내부 반복문에서는 i의 절반까지의 모든 수를 검사하여, i의 약수인 경우 그 약수를 합(s)에 더합니다.
  6. 내부 반복문이 종료된 후, 약수들의 합이 해당 숫자와 같은지 확인합니다. 완전수인 경우, 완전수의 개수를 저장하는 변수 el의 값을 1 증가시킵니다.
  7. 모든 수에 대한 검사가 완료되면, 완전수의 총 개수를 출력합니다.

이 문제는 반복문과 조건문, 그리고 약수를 찾는 기본적인 알고리즘에 대한 이해를 평가합니다. 완전수를 찾는 문제는 알고리즘과 프로그래밍 기본 개념을 점검하는 데 자주 사용됩니다.

정보처리기능사 실기 문제: 배열 내 홀수의 개수 세기

이 문제에서는 C 언어를 사용하여 사용자로부터 5개의 정수를 입력받아 배열에 저장한 후, 배열 내 홀수의 개수를 계산하고 출력하는 프로그램을 작성하는 것을 목표로 합니다. 이 과정에서 배열의 사용법과 반복문, 조건문을 활용하는 방법에 대해 이해해야 합니다.

문제: 사용자로부터 5개의 정수를 입력받아 배열에 저장한 후, 해당 배열 내에서 홀수의 개수를 계산하여 출력하는 C 프로그램을 작성하시오.

#include <stdio.h>

main() {
    int i, a[5], cnt = 0;
    // 사용자로부터 5개의 정수 입력받기
    for (i = 0; i < 5; i++)
        scanf("%d", &a[i]);
    // 배열 내 홀수의 개수 계산
    for (i = 0; i < 5; i++) {
        if (a[i] % 2 != 0)
            cnt = cnt + 1;
    }
    // 홀수의 개수 출력
    printf("홀수의 개수 : %d개", cnt);
}

해결 방법:

  1. #include <stdio.h>를 사용하여 표준 입출력 라이브러리를 포함합니다.
  2. main 함수를 정의하여 프로그램의 시작점을 만듭니다.
  3. 정수형 배열 a[5]와 카운트 변수 cnt를 선언합니다. cnt는 홀수의 개수를 세기 위해 0으로 초기화합니다.
  4. 첫 번째 for 반복문을 사용하여 사용자로부터 5개의 정수를 입력받아 배열 a에 저장합니다.
  5. 두 번째 for 반복문을 통해 배열 a를 순회하면서 각 요소가 홀수인지 검사합니다. 홀수인 경우, cnt의 값을 1 증가시킵니다.
  6. 모든 요소의 검사가 끝난 후, printf 함수를 사용하여 홀수의 총 개수를 출력합니다.

이 문제는 배열과 반복문, 조건문을 사용하여 기본적인 데이터 처리를 수행하는 능력을 평가합니다. 사용자 입력을 배열에 저장하고, 특정 조건에 따라 배열 내 요소를 분석하는 기본적인 알고리즘 구현 능력이 중점적으로 다뤄집니다.

정보처리기사 실기 시험 기출 문제 - 짝수와 홀수의 개수 계산

문제

다음 C 프로그램이 실행되었을 때의 동작을 설명하고, 출력 결과를 예측하시오.

소스 코드 파일명: even_odd_count.c

#include <stdio.h>

main() {
	int num = 35, evencnt = 0, oddcnt = 0;
	for (int i = 1; i <= num; i++) {
		if (i % 2 == 0)
			evencnt++;
		else
			oddcnt++;
	}
	printf("%d %d", evencnt, oddcnt);
}

입력 예시

이 프로그램은 사용자로부터 입력을 받지 않습니다.

출력 예시

정답 예시에 해당하는 숫자를 여기에 작성합니다. (계산 필요)

해설

이 프로그램은 1부터 주어진 숫자(num)까지의 범위 내에서 짝수와 홀수의 개수를 계산합니다.

  1. int num = 35;는 주어진 숫자를 선언하고 35로 초기화합니다.
  2. int evencnt = 0, oddcnt = 0;는 짝수와 홀수를 세기 위한 카운터를 각각 0으로 초기화합니다.
  3. for (int i = 1; i <= num; i++)는 1부터 num까지의 숫자에 대해 반복합니다.
  4. if (i % 2 == 0) 조건문을 통해 숫자가 짝수인 경우 evencnt를 1 증가시킵니다.
  5. 그렇지 않은 경우(홀수인 경우) oddcnt를 1 증가시킵니다.
  6. printf("%d %d", evencnt, oddcnt);는 계산된 짝수와 홀수의 개수를 출력합니다.

이 프로그램은 기본적인 반복문과 조건문을 사용하여 주어진 범위 내에서 짝수와 홀수의 개수를 계산하는 방법을 보여줍니다.

정보처리산업기사 실기 시험 기출 문제 - 평균값 계산

문제

다음 C 프로그램이 실행되었을 때의 동작을 설명하고, 출력 결과를 예측하시오.

소스 코드 파일명: average_calculation.c

#include <stdio.h>

main() {
	int arr[6];
	int max = 0, min = 99;
	int sum = 0;
	for (int i = 0; i < 6; i++) {
		arr[i] = i * i;
		sum += arr[i];
	}
	for (int i = 0; i < 6; i++) {
		if (max < arr[i])
			max = arr[i];
		if (min > arr[i])
			min = arr[i];
	}
	printf("%.2f", (sum - max - min) / 4.0);
}

입력 예시

이 프로그램은 사용자로부터 입력을 받지 않습니다.

출력 예시

정답 예시에 해당하는 숫자를 여기에 작성합니다. (계산 필요)

해설

이 프로그램은 크기가 6인 정수 배열에 각 인덱스의 제곱 값을 할당한 후, 배열 내 최대값과 최소값을 제외한 나머지 값들의 평균을 계산하여 출력합니다.

  1. int arr[6];는 크기가 6인 정수 배열을 선언합니다.
  2. 배열에는 각 인덱스 위치의 제곱값이 저장됩니다. 예를 들어, arr[0] = 0, arr[1] = 1, arr[2] = 4 등입니다.
  3. int max = 0, min = 99;는 최대값과 최소값을 추적하기 위한 변수를 초기화합니다.
  4. 첫 번째 for 루프를 통해 배열의 각 요소에 제곱값을 할당하고, 그 합계를 계산합니다.
  5. 두 번째 for 루프를 통해 배열에서 최대값과 최소값을 찾습니다.
  6. printf("%.2f", (sum - max - min) / 4.0);는 최대값과 최소값을 제외한 나머지 값들의 평균을 계산하여 출력합니다. 평균은 소수점 이하 두 자리까지 표시됩니다.

이 프로그램은 배열의 사용, 반복문, 조건문을 통한 기본적인 알고리즘 처리 및 평균 계산 방법을 보여줍니다.

정보처리기사 실기 시험 기출 문제 - 최대공약수와 최소공배수 계산

문제

다음 C 프로그램이 실행되었을 때의 동작을 설명하고, 출력 결과를 예측하시오.

소스 코드 파일명: gcd_lcm_calculation.c

#include <stdio.h>

main() {
    int a = 27, b = 12;
    int l, g;
    for (int i = b; i > 0; i--) {
        if (a % i == 0 && b % i == 0) {
            g = i;
            break;
        }
    }
    l = a * b / g;
    printf("%d", g + l);
}

입력 예시

이 프로그램은 사용자로부터 입력을 받지 않습니다.

출력 예시

정답 예시에 해당하는 숫자를 여기에 작성합니다. (계산 필요)

해설

이 프로그램은 두 정수 ab에 대해 최대공약수(g)와 최소공배수(l)를 계산하고, 이 둘을 더한 값을 출력합니다.

  1. int a = 27, b = 12;는 두 정수 ab를 선언하고 각각 27과 12로 초기화합니다.
  2. int l, g;는 최소공배수(l)와 최대공약수(g)를 저장할 변수를 선언합니다.
  3. for (int i = b; i > 0; i--) 루프를 통해 b부터 1까지 반복하면서 ab의 최대공약수를 찾습니다.
  4. if (a % i == 0 && b % i == 0) 조건을 만족하는 최초의 i가 최대공약수(g)입니다.
  5. l = a * b / g;는 최소공배수(l)를 계산합니다.
  6. printf("%d", g + l);는 최대공약수와 최소공배수의 합을 출력합니다.

이 프로그램은 반복문과 조건문을 사용하여 두 정수의 최대공약수와 최소공배수를 계산하고, 이를 활용하는 방법을 보여줍니다.

VisualAcademy Docs의 모든 콘텐츠, 이미지, 동영상의 저작권은 박용준에게 있습니다. 저작권법에 의해 보호를 받는 저작물이므로 무단 전재와 복제를 금합니다. 사이트의 콘텐츠를 복제하여 블로그, 웹사이트 등에 게시할 수 없습니다. 단, 링크와 SNS 공유, Youtube 동영상 공유는 허용합니다. www.VisualAcademy.com
박용준 강사의 모든 동영상 강의는 데브렉에서 독점으로 제공됩니다. www.devlec.com