반복문 중첩
영어로는 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 까지 하고 프로그램이 종료되게 됩니다.