반복문의 중첩
‘*‘를 5번 반복해서 출력하는 반복문이 있다고 한다. 여기서 이 반복문을 4번 또 반복하는 경우도 있는데, 사실 이러는 경우는 5 × 4 = 20으로 그냥 *을 20번 반복하면 될 것 같지만, 이와 다른 경우에는 반복문을 2개 끼워 넣는 것이 효과적일 수가 있다. 여기서 반복문이 반복문에 들어있는 경우를 ’반복문의 중첩’ 이라고 한다.
이 반복문의 중첩을 슈도코드를 예로 들어서 설명할 수 있다. (여기서 슈도코드 ‘pseudo code’ 란, 의사코드라고도 하는데, 풀어서 말하면 코드를 흉내 내서 논리를 표현한 자유로운 표현과 언어로 쓴 코드다.)
만약에 백화점에서 쇼핑을 하는 여자가 하는 일을 코드로 작성한다면, while(둘러볼 매장이 있는가?)로 조건을 세울 것이다. 그리고 그 반복문 안에 추가로 while(볼만한 옷이 있는가?)로 조건을 세우고, 그 실행문으로 옷을 보고 if(구매 할 것인가?) 구매한다; 로 구성되어 있을 것이다. 이 코드가 반복문의 중첩이다.
while(볼만한 옷이 있는가?) { 실행문; } 같은 반복문이 while(둘러볼 매장이 있는가?)라는 조건 한에, 둘러볼 매장이 없을 때까지(조건식을 만족하지 않을 때까지) 반복문이 반복되게 된다. 여기서 만약에 반복문을 추가로 집어넣어서 3중 중첩을 만들고 싶다면,
while(둘러볼 매장이 있는가?)위에 스코프로{ } 감싸고 while(방문할 백화점이 있는가?) 같은 반복문을 씌우면 될 것이다. 사실상, 이것이 반복문의 중첩이다. 사실 반복문은 8.1에서 배운 내용처럼 기초형식으로 쓰이는 것은 초보 때이고, 이렇게 반복문을 중첩해서 복잡하게 쓴다. 그런데 사실 반복문의 중첩이 위의 슈도코드로 설명한 것과 같다고 알면 복잡하지 않다는 걸 알 수 있다.
예시
그러면 아까 맨 처음 이야기한 *를 연달아 출력하는 중첩된 반복문을 만들어 보자. 여기서는 추가로 *과 *사이는 탭 키로 띄우고, *의 반복문이 한번 끝났을 경우 엔터키로 다음 행으로 *이 출력하도록 했다. 이런 경우에서 코드는 우선 (헤더파일과 mian함수 선언은 생략한다) int x = 0, y = 0; 으로 선언하고, while(y < 5) { 해서 스코프를 연다. 그리고 *을 출력하는 반복문의 변수x를 반복되었을 때 다시 x가 0이되어서 x++; 될 때 반복문의 조건식이 4번 출력될 수 있도록, x = 0;으로 해준 다음, while(x < 4) { printf("*\t"); x++; }를 넣어준다. 이 반복문이 끝나면 출력이 다음 줄로 넘어가게, putchar('\n'); 과 y를 계수하는 y++; 도 넣고, }로 스코프를 닫아주면 끝이다. 영상에서 문제로 이 중첩 반복문을 for문으로 바꿔보게 제시했는데, 간단하게 for(y = 0; y < 5; y++) { for(x = 0; x < 4; x++) { printf("*\t");
} putchar('\n'); } 으로 작성해서 위의 예제보다 쉽게 작성할 수 있다.
'c언어 > 워딩(미정리)' 카테고리의 다른 글
문자열과 배열 복습 (0) | 2019.07.08 |
---|---|
별찍기 (0) | 2019.07.08 |
do while문, for문 (0) | 2019.07.08 |
반복문, while문 (0) | 2019.07.08 |
switch/case 문, goto 문 (0) | 2019.07.08 |