본문 바로가기

내가 꾸는 꿈

반복문의 제어, 중첩 [노베이스 게임개발 6일차]

반응형

 

오늘은 반복문의 제어와 중첩에 대해서 배웠다.

 

break와 continue구문에 대해서 알아보았다.

먼저 for (; ;) {   은 무한반복 for구문으로 안에 아무 내용이 없으므로 무한히 반복되는 반복문이다.

이때 이를 제어할수 있는 키워드가 continue와 break 구문이다.

사용자로부터 값을 할당받아 0을 입력했을때 continue가 실행되면 반복문이 다시 시작된다.

다시 1을 입력하여 break가 실행되면 반복문이 종료되고 하단의 "프로그램이 종료되었습니다" 가 출력된다.

 

이를 이용하여 반복문을 만들때 제어할 수 있다고 한다. 나중에 여러가지 방식으로 응용될 것 같았다.

 

 

 

그림처럼 0을 입력하면 continue가 실행되어 맨처음의 "반복문입니다. 숫자를 입력하세요 : 가 출력이 되면서 계속 반복되고, 2를 입력하면 조건문의 0과 1 모두 성립하지 않으므로 조건문 밖에 그리고 반복문의 마지막인 "반복문의 마지막 입니다"가 출력이 된다.

마지막으로 1을 입력하면 반복문이 종료되고 "프로그램이 종료되었습니다." 가 출력이 된다.

 

 

그 다음으로는 반복문의 중첩에 대하여 알아보았다.

말 그래도 반복문 안에 반복문이 또 들어가 중첩이 되게 만들수 있다는것이다.

위 그림처럼 먼저 i가 5번 반복되는 프로그램 안에 k가 10번 반복되는 프로그램이 있을때

먼저 i가 1번 실행되면 그 밑에 있는 k반복문이 실행이 되고 그 k반복문이 *를 10번 반복하여 수행한다. 

그 후 i반복문의 마지막 줄바꿈인 \n이 실행되고나면 i반복문이 총 1번 실행된것이고 다시 줄바꿈 후 2번째 i반복문이 실행된다. 

 

그렇게 5번 i반복문이 실행되고 나면 총 10개의 *이 5줄 그려진 프로그램이 완성이 된다.

 

강의 내용은 짧았지만 이 내용들을 정말 잘 이용할줄 알아야 하기 때문에 여러가지 연습문제가 있었다.

 

 

 

*사용자로부터 숫자를 입력받아 입력받은 크기만큼의 가로세로 사각형을 출력하세요.

먼저 지난시간에 배웠던 scanf를 해주는 함수를 만든 후

가로와 세로를 입력받은 후 각 입력받은 a와 b를 i < a로 설정하여 세로는 a만큼 반복하고

가로는 b만큼 반복하게 하여 프로그램을 만들었다.

 

 

그리하여 세로와 가로를 입력받아 3x6의 사각형을 만들었다.

 

 

 

그리고 다음문제

 

*사용자로부터 숫자를 입력받아 입력받은 크기만큼의 직각삼각형을 출력하세요.

 

먼저 기본적인 틀은 그대로 하는데

두번째 k 반복문의 구조에서 변화를 주었다.

직각삼각형이라면 첫번째 줄에서는 *하나를

두번째 줄에서는 *두개를 해야하므로

줄의 수와 *의 갯수를 같이 하면 직각삼각형이 될거라고 생각하였다.

 

그래서 k반복문의 두번째 조건을 (k <= i)로 하였다. (=를 넣은 이유는 i가 마지막 줄을 출력할때 k가 종료되어 한줄이 적게 출력되기 때문이었다.)

 

 

그래서 나온 프로그램. 잘 작동이 된 모습이다.

 

 

그리고 오늘의 마지막 문제

 

*사용자로부터 숫자를 입력받아 입력받은 크기만큼의 역삼각형을 출력하세요.

이 문제가 접근하기가 어려웠는데 아까완 다르게 첫줄에 입력받은 수를 모두 가로로 출력해야했고

그 다음으로 하나씩 줄어갔어야 했다.

그래서 반대로 생각하여 입력받은 수를 i에 할당하고 하나씩 빼서 0까지 가도록 만들었다.

그렇게 하면 k반복문에서 k를 입력받은 i(=a)만큼 *을 출력하고

그 다음 i의 수가 하나 빠지기 때문데 그다음 줄은 k-1만큼... 이렇게 되면 역삼각형의 모양으로 하나씩 줄어들게 표현 할 수 있다.

여기서 k < a로 한다면 a의 수는 고정되기 때문에 *의 수가 줄어들지 않아 일반적인 사각형이 되어버린다.

 

그리하여 정상적으로 잘 출력이 되었다.

 

후기:

기본 내용은 정말 간단했지만 응용을 시작하니 끝도 없이 어려워 질 수 있다는걸 알았다.

아무리 쉬워 보이는 내용이라도 잘 공부해야 겠다고 생각했다.

 

*본 포스팅은 학생의 입장에서 쓴 글로 정확하지 않을 수 있으며 댓글로 피드백해 주시면 감사하겠습니다.

클래스 101 개발자 라라 님의 강의를 통해 학습한 내용을 기반으로 두고 있습니다.

반응형