|
||||||||||
그림 7.1은 6주차강의에서 다룬 반복 구조를 다시 보여준다. 여기서 처리 과정은 루프의 본체를 구성하는 것으로, C의 문장들로 구성된다고 설명하였다. C의 문장으로는 이미 다룬 배정문, if 문 등의 선택 구조를 포함하여 또 다른 while 문, for 문, do while 문과 같이 반복 구조(루프)일 수 있다. 본체를 구성하는 문장으로 루프 이외에는 6주차에서 모두 살펴보았고, 여기서는 또 다른 루프인 경우에 대해서 다룬다.
반복 구조의 본체가 또 다른 반복 구조를 포함한 경우에 이러한 반복 구조를 중첩 루프(nested loops)라 부른다. 다음은 중첩 반복 구조(루프)의 구조를 보여준다.
중첩 루프는 그림 7-1의 본체가 또 다른 반복 구조를 포함하는 것을 알 수 있다. 이 때, 바깥쪽에 위치한 반복 구조를 외곽 루프(outer loop)라 하고, 안쪽에 위치한 반복 구조를 내곽 루프(inner loop)라 부른다. 중첩 반복 구조의 실행 흐름은 다음과 같다: 먼저, 조건1을 평가하여, 그 결과 값이 참이면 본체에 포함된 내곽 루프에 진입한다. 이제 내곽 루프의 실행이 시작된다. 내곽 루프의 실행은 6주차에서 다루었던 반복 구조의 실행 흐름과 동일하다. 즉, 조건2를 평가하여 그 결과 값이 참이면 본체인 처리 과정을 수행하고, 다음번째 반복으로 이동한다. 이러한 과정은 조건2가 거짓으로 평가될 때까지 반복된다. 내곽 루프의 조건2가 거짓으로 평가될 경우에 내곽 루프의 실행이 종료되어 내곽 루프를 빠져나온다. 다음의 실행의 지점은 어디인가? 내곽 루프의 실행 종료는 외곽 루프의 본체 실행 종료를 의미한다. 따라서 다음의 실행 지점은 외곽 루프의 다음번째 반복이다. 따라서 조건1이 다시 평가되고, 반복 수행 여부를 판단한다. 조건1의 평가 결과 값이 참이면 다시 본체가 반복 수행된다. 이것은 내곽 루프의 재실행을 의미한다. 그러나 조건1의 평가 결과 값이 거짓이면 전체 중첩 루프의 실행 종료하고 빠져나온다. 다음은 외곽 루프의 반복 회수가 3이고, 내곽 루프의 반복 회수가 4일 때, 중첩 루프의 실행 흐름을
보여준다. 위에서 살펴보았듯이, 외곽 루프의 각 반복에 대해서 매번 내곽 루프가 실행된다는 것을 알 수 있다. 가령, 외곽 루프의 반복 회수가 n이고, 내곽 루프의 반복 회수가 m이면, 전체 중첩 루프의 실행 결과로 내곽 루프의 반복 회수는 n*m번이다. 다음 프로그램은 중첩 루프의 간단한 예를 보여준다.
위의 프로그램은 중첩 루프를 포함하고 있고, 이 중첩 루프의 외곽 루프와 내곽 루프 모두 for 문으로 표현되었음을 알 수 있다. 위 프로그램의 실행 결과는 무엇일까? 그림 7.3은 프로그램 7-1의 중첩 루프의 실행 흐름을 순서도로 표현한 것이다. 외곽 루프의 본체는 루프제어변수 i의 값을 출력하는 문장, 내곽 루프, 그리고 i의 값을 변경시키는 문장으로 구성된다. 내곽 루프는 루프제어변수 j의 값을 초기화하는 문장, 반복 여부의 판단 구조, 그리고 본체로 구성되는데, 본체는 j의 값을 출력하는 문장과 j의 값을 변경시키는 문장으로 구성되는 것을 알 수 있다. 외곽 루프가 i의 값이 1부터 3일 때까지 1씩 증가하면서 3번 반복하고, 내곽 루프가 j의 값이 1부터 4일 때까지 1씩 증가하면서 4번 반복된다. 외곽 루프의 각 반복에 대해서 내곽 루프가 수행되므로, 중첩 루프 실행 결과로 외곽 루프는 3번 반복되고, 내곽 루프는 모두 12번 반복되는 것을 알 수 있다.
|
|
[프로그램 단위 입력 실행] 다음 실습창을 통해서 프로그램 7-1의 실행과정을 알아본다 (여러분은 실습창의 왼편에 위치한 '새프로그램 입력' 버튼을 클릭하여 새로운 프로그램을 입력하여 실행시켜 볼 수 있다. ) |
|
[문장 단위 입력 실행] 여러분은 다음 실습창에서 C 프로그램을 한 문장씩 입력하여 실행시켜 볼 수 있다. 새로운 프로그램을 한 문장씩 입력하고 오른쪽 창에서 그 실행 결과를 살펴 보시오. |
사용법
|
1.아래의 실습창중 <
C 문장 입력 > 란을 통하여 C문장 한문장씩 입력하고 Enter
키나 입력 버튼을 클릭하 면 해당 문장에
대한 시각화가 오른쪽에 나타나게 됩니다. 자세한 사용법은 여기를
클릭하여 주십시요
|
가장 바깥쪽에 위치한 for 문을 중첩 수준이 1인 루프라 하고, 가운데 위치한 for 문을 중첩 수준이 2인 루프라 하고, 가장 안쪽에 위치한 for 문을 중첩 수준이 3인 루프라고 한다. 3개의 루프가 중첩되어 있는 반복 구조의 실행 흐름은 어떻게 이루어지는가? 2개의 루프가 중첩되어 있는 프로그램 7-1의 실행 흐름 관점에서 생각할 수 있다. 즉, 바깥쪽 루프의 각 반복에 대해서 중첩 수준 2의 루프가 실행되고, 중첩 수준 2의 루프의 각 반복에 대해서 가장 안쪽 루프가 실행된다. 바깥쪽 루프의 반복 회수가 3이므로, 가운데 루프의 반복 회수는 총 12(= 3*4)이고, 안쪽 루프의 반복 회수는 총 60(= 3*4*5)이다. 그림 7.4는 프로그램 7-2의 실행 흐름을 순서도로 보여준다. 다음은 위 중첩 루프의 실행 과정을 단계별로 설명한다.
중첩 루프는 임의의 수준의 중첩 깊이를 갖는 루프를 포함할 수 있다. 다음은 중첩 깊이가 n인 중첩 루프의 구조를 보여준다.
위에서 중첩 수준이 1은 루프를 최외곽 루프(outermost loop)라 하고, 중첩 수준이 n인 루프를 최내곽(innermost loop)라 한다. 중첩 수준이 i(1≤i≤n)인 루프를 Li라고 하고, Li의 반복 회수를 Ni라고 하자. 그러면 중첩 깊이가 n인 중첩 루프가 실행 끝내는 시점에서 중첩 수준이 n인 루프의 총 반복 회수는 다음과 같다
|
|
|