Programming/C Basic

9. C 언어 반복문 중첩 - 구구단 만들기

양디 2016. 1. 30. 20:02




반복문 중첩


영어로는 Nested Loop로, 반복문 안에 다른 반복문이 들어갑니다.


반복 횟수를 찾는것은 간단하게 곱셈으로 구할 수 있습니다.


예를 들어, 5번 반복하는 반복문 안에 10번 반복하는 반복문을 넣으면 50번을 반복하게 됩니다.


1
2
3
4
5
6
7
8
9
10
#include <stdio.h>
#include <stdlib.h>
 
void main(){
    for(int i = 0;i < 5;i++){
        for(int j = 0; j < 10; j++){
            scanf("%d & %d\n", i, j);
        }
    }
}
cs


예를 들어 위와 같은 코드가 있다고 생각해봅시다.


변수 i를 가지고 5회 반복하는데, 그 반복문 안에 반복문이 또 있습니다.


i가 0부터 4까지 5회인데 ,


i가 0일때 j는 0 ~ 9 의 10회,


i가 1일 때 j가 0 ~ 9 의 10회,


이런 식으로 출력되게 됩니다.


구구단 만들기


1
2
3
4
5
6
7
8
9
10
#include <stdio.h>
#include <stdlib.h>
 
void main(){
    for(int i = 1;i < 10;i++){
        for(int j = 1; j < 10; j++){
            scanf("%d * %d = %d\n", i, j, i*j);
        }
    }
}
cs


구구단은 반복문의 중첩을 이해한다면 굉장히 간단하게 만들 수 있습니다.


위의 코드가 전부입니다. 


i가 1일때부터 시작해서, j는 1~9까지 9회를 반복합니다.


9회 반복이 끝나면 i가 2 , 3 , .... 이런식으로 증가하면서 반복문이 진행됩니다.


따라서 1 * 1 = 1, 1 * 2 = 2 , ..... 이 반복되게 되는거죠. 


반복 중첩문 전체 break


반복문을 사용하다 보면, 조건문으로 특정한 조건이면 반복문을 탈출하기 위하여 break를 사용합니다.


1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
#include <stdlib.h>
 
void main(){
    for(int i = 1;i < 10;i++){
        for(int j = 1; j < 10; j++){
            if(j == 5)
                break;
            scanf("%d * %d = %d\n", i, j, i*j);
        }
    }
}
cs

예를 들어 위와 같은 식에서는, j가 5일때 안에 있는 반복문을 탈출합니다.


따라서 구구단은 1*1 = 1, 1*2 = 2, 1*3=3, 1*4=4 까지 한 후에 j가 5가 되므로 반복문을 탈출합니다.


그러나 전체 반복문이 종료되는것이 아니라, 가장 가까운 반복문만 종료됩니다.


따라서 1*4=4가 끝나면 2*1=2 , ... 로 반복되겠죠 ?


따라서 내부 반복문에서 전체 반복문을 종료하기 위해서는 전체 반복문의 조건식을 false로 만들어주어야 합니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
#include <stdlib.h>
 
void main(){
    for(int i = 1;i < 10;i++){
        for(int j = 1; j < 10; j++){
            if(j == 5){
                i = 100
                break;
            }
            scanf("%d * %d = %d\n", i, j, i*j);
        }
    }
}
cs


위와 같은 방식으로 해주시면 됩니다.


i에 100을 넣었으므로, j 반복문을 탈출하고 나서 i 반복문의 조건식을 검사할 때에 false가 되므로 전체 반복문을 탈출하게 됩니다.


따라서 


1*1=1 , ... 1*4=4 까지 하고 프로그램이 종료되게 됩니다.






댓글