[C언어] 반복문 : 활용

조아리 ㅣ 2024. 8. 9. 11:11

반응형

중첩 반복문

중첩 반복문은 반복문 안에 실행할 문장으로 반복문이 포함된 것입니다. 다음 예시를 보고 설명을 이어가겠습니다.

반응형
#include <stdio.h>

int main(void){
    int i,j;

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

    return 0;
}

 

실행 결과

*****
*****
*****

 

위 코드는 중첩 반복문을 활용해 별을 5개씩 3줄 그린 코드입니다. i가 0일 때 j가 0부터 4까지 총 5번 반복하며 별(*)을 그리고 i가 1, 2 일 때도 마찬가지로 j가 0부터 4까지 반복하며 별(*)을 그립니다.

 

중첩 반복문을 사용하실 땐 각 반복문이 독립적인 제어 변수를 사용해야 합니다. 위 코드에서 j대신 i를 사용했다면 별(*) 5개만 출력하고 프로그램이 종료가 됐을 겁니다. 이처럼 같은 제어 변수를 사용하면 원치 않는 결과를 낳을 수 있으니 독립적인 제어 변수를 사용해야 합니다.

 

 

break와 continue 분기문

break는 반복문 안에서 반복을 즉시 끝낼 때 사용합니다. 모든 반복문은 조건식이 거짓일 때 반복이 끝납니다. 반복문 중간에서 임의로 반복을 끝내고 싶을 때 사용합니다.

 

#include <stdio.h>

int main(void){
    int i, j;

    // Case 1
    printf("Case 1\n");
    for(i = 1; i < 10; i++){
        if(i > 5){
            break;
        }

        printf("%3d", i);
    }

    printf("\n");
    // Case 2
    printf("Case 2\n");
    for(j = 1; j < 10; j++){
        for(i = 2; i < 10; i++){
            if(j >= 6 && i%2 == 1){
                break;
            }
            printf("%2d x%2d =%3d|", i, j, i*j);
        }
        printf("\n");
    }

    printf("\n");

    return 0;
}

 

실행 결과 

Case 1
1 2 3 4 5
Case 2
2 x 1 = 2| 3 x 1 = 3| 4 x 1 = 4| 5 x 1 = 5| 6 x 1 = 6| 7 x 1 = 7| 8 x 1 = 8| 9 x 1 = 9|
2 x 2 = 4| 3 x 2 = 6| 4 x 2 = 8| 5 x 2 = 10| 6 x 2 = 12| 7 x 2 = 14| 8 x 2 = 16| 9 x 2 = 18|
2 x 3 = 6| 3 x 3 = 9| 4 x 3 = 12| 5 x 3 = 15| 6 x 3 = 18| 7 x 3 = 21| 8 x 3 = 24| 9 x 3 = 27|
2 x 4 = 8| 3 x 4 = 12| 4 x 4 = 16| 5 x 4 = 20| 6 x 4 = 24| 7 x 4 = 28| 8 x 4 = 32| 9 x 4 = 36|
2 x 5 = 10| 3 x 5 = 15| 4 x 5 = 20| 5 x 5 = 25| 6 x 5 = 30| 7 x 5 = 35| 8 x 5 = 40| 9 x 5 = 45|
2 x 6 = 12|
2 x 7 = 14|
2 x 8 = 16|
2 x 9 = 18|

 

위 코드를 Case별로 확인하겠습니다.

  • Case 1
    i가 1부터 9까지 증가하는 동안 i를 출력하는데, i가 5를 넘어가는 순간 break가 실행됩니다. 이는 i가 6이 되는 순간 for문이 종료됨을 의미합니다. if문 내부에 작성되었지만, if문은 반복문이 아니기 때문에 for문이 종료되는 것을 확인할 수 있습니다.
  • Case 2
    이 코드는 구구단을 각 단별로 세로로 출력하는 코드입니다. 하지만 j가 6 이상이고 i가 홀수인 경우 break가 실행됩니다. 이때, 구구단 전체가 종료되지 않고 break문이 있는 내부의 for문만 종료되며, 외부의 for문은 계속해서 실행됩니다. 이를 통해 break문이 속한 반복문만 종료되는 것을 확인할 수 있습니다.

 

 

continue는 반복문의 일부를 건너 뜁니다. 반복문 안에서 continue문을 사용하면 다음 실행 위치가 반복문의 블록 끝이 됩니다. 반복문의 일부를 무시하게 되는 것이죠.

 

#include <stdio.h>

int main(void){
    int i, j;

    // Case 1
    printf("Case 1\n");
    for(i = 1; i < 10; i++){
        if(i%2 == 1){
            continue;
        }

        printf("%3d", i);
    }

    printf("\n");
    // Case 2
    printf("Case 2\n");
    for(j = 1; j < 10; j++){
        for(i = 2; i < 10; i++){
            if(j >= 6 && i%2 == 1){
                printf("           |");
                continue;
            }
            printf("%2d x%2d =%3d|", i, j, i*j);
        }
        printf("\n");
    }

    printf("\n");

    return 0;
}

 

실행 결과

Case1
2 4 6 8
Case 2
2 x 1 =  2| 3 x 1 =  3| 4 x 1 =  4| 5 x 1 =  5| 6 x 1 =  6| 7 x 1 =  7| 8 x 1 =  8| 9 x 1 =  9|
2 x 2 =  4| 3 x 2 =  6| 4 x 2 =  8| 5 x 2 = 10| 6 x 2 = 12| 7 x 2 = 14| 8 x 2 = 16| 9 x 2 = 18|
2 x 3 =  6| 3 x 3 =  9| 4 x 3 = 12| 5 x 3 = 15| 6 x 3 = 18| 7 x 3 = 21| 8 x 3 = 24| 9 x 3 = 27|
2 x 4 =  8| 3 x 4 = 12| 4 x 4 = 16| 5 x 4 = 20| 6 x 4 = 24| 7 x 4 = 28| 8 x 4 = 32| 9 x 4 = 36|
2 x 5 = 10| 3 x 5 = 15| 4 x 5 = 20| 5 x 5 = 25| 6 x 5 = 30| 7 x 5 = 35| 8 x 5 = 40| 9 x 5 = 45|
2 x 6 = 12|                 | 4 x 6 = 24|                 | 6 x 6 = 36|                 | 8 x 6 = 48|                 |
2 x 7 = 14|                 | 4 x 7 = 28|                 | 6 x 7 = 42|                 | 8 x 7 = 56|                 |
2 x 8 = 16|                 | 4 x 8 = 32|                 | 6 x 8 = 48|                 | 8 x 8 = 64|                 |
2 x 9 = 18|                 | 4 x 9 = 36|                 | 6 x 9 = 54|                 | 8 x 9 = 72|                 |

 

이번에도 Case별로 설명을 하겠습니다.

  • Case1
    이번에는 i가 홀수인 경우에 continue를 실행하라는 코드입니다. 그렇다면 i가 홀수인 경우에는 반복문 블록 끝으로 건너뛰어 printf를 수행하지 않게 됩니다. 결국 실행 결과와 같이 짝수만 출력하게 됩니다.
  • Case2
    이번에는 break를 continue로 바꿔주고 "           |"를 출력하는 코드를 추가해줬습니다. 그래서 for문을 아예 종료시켰던 break와는 달리 그때만 넘겨주게 되어 결과적으로 구구단을 홀수단만 곱하기 6부터 보이지 않게 출력하는 코드가 됐습니다.

continue문을 while문에서 사용할 때 유의하셔야 합니다. 예를 들어 조건식을 증감문을 통해 제어를 하는데 continue를 잘못 쓰게 된다면 증감문이 작동하지 않게 되어 무한 루프에 빠지고 말게 됩니다.

반응형