안녕하세요! 코딩하는 경제학도 쏘코입니다.
이번 포스팅에서는 조건문과 함께 프로그램의 핵심 요소인 반복문에 대해서 알아보도록 하겠습니다!
목차
0. while
반복문의 기초, while문입니다.
while문은 조건이 만족하면 명령문을 계속해서 반복합니다. 조건이 만족하지 않을 때까지 계속 반복합니다.
while문의 사용방법은 if와 사실상 동일합니다. 대신 끝나면 다시 while문의 조건을 따진다는 차이가 있겠네요!
아래는 while문의 예시입니다.
count가 5보다 작으면 count를 출력하고 count를 1씩 늘려가다가, count가 6이 되는 순간 while문을 빠져나오게 됩니다.
아래 예시는 조금 더 복잡합니다.
while문의 조건 안에 done라는 bool타입의 변수가 들어갔습니다.
done이 false로 초기화 되어있는 상황인데, 그렇다면 !done은 true겠죠?
조건을 만족하기 때문에 while문이 돌아갑니다.
(done이 true가 되는 순간 !done이 false가 되어서 while문을 빠져나가게 됩니다)
while문의 명령문에서는 count를 출력하고, Y/N을 입력하라는 말을 출력하고 입력값을 받습니다.
이 입력값이 Y/y/N/n이 아니라면 유효하지 않은 선택이라는 메시지를 띄우고 while문의 처음으로 돌아갑니다.
Y/y를 누르면 count를 1 증가시키고 while문의 처음으로 돌아갑니다.
N/n을 누르면 done를 true로 바꾸고 while문의 처음으로 돌아갑니다. 이 경우 while문의 조건문에서 걸려서 while문을 빠져나가게 됩니다!
간단히 프로그램을 요약하면 Y를 누르면 count를 1 증가, N을 누르면 프로그램 종료가 되겠네요!
당연히 while문 안에 while문이 들어갈 수도 있습니다.
아래 예시에서는 값을 하나 받아서 정사각행렬을 만드는 프로그램입니다.
값을 하나 받고, 그 값보다 커질 때까지 row와 column을 1씩 증가시키면서 product를 계산해서 출력합니다.
1. 반복문의 제어
만약 명령문에서 강제로 빠져나가고 싶으면 어떻게 하면 될까요?
원하는 곳에다 break; 을 넣어주면 됩니다.
문장이 쭉 실행되다가 break를 만나면 바로 while문 밖으로 빠져나가게 됩니다.
정리하면 break는 가장 가까운 반복문에서 벗어나게 해줍니다. (아래 나오는 다른 반복문에도 사용할 수 있습니다)
아래 예시는 0 또는 양의 정수를 넣으면 계속해서 sum에 더해주고, 음의 정수를 넣으면 while문을 빠져나가는 예시입니다.
while문의 조건에 true가 있기 때문에 break가 걸리지 않으면 영원히 돌아가게 되는 것을 유의깊게 확인하시면 됩니다.
(break를 쓰는 경우의 대부분은 이렇게 while문의 조건으로 true, 혹은 1과 같은 양수를 넣는 경우가 많습니다. 무한히 돌아가거든요!)
그렇다면 명령문을 진행하다가 다시 반복문의 처음으로 돌아가고 싶다면 어떻게 하면 될까요?
원하는 곳에다 continue;를 넣어주면 됩니다.
문장이 쭉 실행되다가 continue를 만나면 바로 while문의 처음으로 돌아갑니다. (조건식 비교부터 다시 하는거죠!)
정리하면 continue는 가장 가까운 반복문의 시작위치로 돌아가게 해줍니다.
아래 예시는 양의 정수 / 0을 넣으면 sum에 더해주고, 음의 정수를 넣으면 ignored를 출력하고, 999를 넣으면 결과값을 출력하고 프로그램을 종료하는 코드입니다.
if문이 연속으로 2개가 걸려있지만, coutinue에 걸려서 아래 if/else가 실행이 되지 않는 모습입니다.
만약 continue를 쓰지 않으려면 아래 999 조건에서 else if를 사용하면 됩니다.
continue의 구조를 그림으로 표현하면 아래와 같습니다.
continue를 제거하기 위해서는 else를 사용해야하죠.
편의에 따라 사용하시면 됩니다!
추가로 goto문도 있는데, 명령문의 특정 부분으로 점프할 수 있도록 해 주는 기능을 가집니다.
하지만 이 goto문은 C++에서는 되도록이면 사용하지 않습니다.
문장의 실행 순서가 뒤죽박죽이 되어서 스파게티 코드(지저분한 코드)를 생성할 가능성이 높기 때문이죠!
그리고 굳이 goto문을 쓰지 않아도 다른 제어문을 통해 동일한 실행을 만들어주는 프로그램을 만들 수 있습니다.
따라서 이런 것이 있구나~ 정도만 알고 넘어가시면 됩니다.
사용법은 statement label을 설정하고(top:, end:) goto 뒤에 라벨을 넣으면 그 부분으로 점프하게 됩니다.
아래 코드는 top에서 계속 반복하다가 count가 6이 되면 end로 점프해서 프로그램이 종료되겠죠?
2. do/while
do while문은 명령문이 맨 처음 한 번은 반드시 실행되고 그 후 조건문을 통해 명령문을 반복하고 싶을 때 사용합니다.
만약 같은 상황에서 while문만 사용하는 경우 같은 명령문을 두 번 적어야 하기 때문에 보다 비효율적이겠죠?
아래는 while과 do while을 사용하여 같은 프로그램을 만든 예시입니다.
do while을 통해 무조건 값을 먼저 받고 조건문을 돌릴 수 있게 만들었습니다.
while문만 사용한 경우에는 in_value값이 처음에 존재하지 않기 때문에 반드시 초기화를 한 후에 while문을 돌려줘야 합니다.
(아래 예시에서는 do while이 크게 효율적이지는 않아 보이는 게 함정.. ㅋㅋㅋㅋ)
3. for
while과 함께 반복문의 양대산맥을 이루고 있는 for입니다.
for문은 변수설정, 조건문, 변수조작을 ( ) 안에서 한번에 해결할 수 있습니다.
while문의 경우 변수는 밖에서 초기화해주고, 조건식만 ( ) 안에서 지정하고 나머지 조작은 명령문 안에서 했었죠?
for문은 조건문에 들어가는 변수의 값을 while문보다 쉽게 정의, 초기화 및 변경할 수 있습니다.
반복문을 몇 번 돌릴 지 정확히 알고 있는 경우 보다 쉽고 가독성 좋게 반복문을 만들 수 있습니다.
먼저 쉬운 예시입니다. 0부터 4까지 출력하는 프로그램입니다.
for문의 ( ) 안에서는 초기화, 조건문, 변수조작이 모두 존재한다고 했죠?
int i를 0으로 초기화하고, 그 i가 5보다 작으면 계속 for문이 돌게 됩니다.
처음에 0이었고, 0은 5보다 작으니 명령문이 실행되겠죠?
그래서 0이 출력됩니다.
이렇게 for문이 끝나고 나면 변수조작부에 적어놓았던 i++이 작동하여 i가 1 증가합니다.
그리고 다시 조건문으로 돌아와서 1은 5보다 작으니 명령문이 실행되고, 1이 출력됩니다.
이게 반복되어서 i가 5가 되는 순간 for문 밖으로 빠져나오고 프로그램이 종료됩니다.
아래는 조금 심화된 예제입니다.
아래 예시는 값을 받아서 그 값까지의 소수(prime number)를 모두 출력하는 프로그램입니다.
사용자로부터 max_value값을 받습니다.
for문 안에서 value 변수를 생성한 후 2로 초기화하고, max_value가 value보다 크거나 같은 경우 for문을 계속 돌립니다.
그리고 for문이 끝날 때 value값을 1 증가시키고 다시 조건문을 확인하게 됩니다.
첫 for문의 명령문에서는 is_prime 변수를 true로 초기화합니다.
안쪽의 for문에서는 trial_factor를 2로 초기화하고 is_prime이 true이고 value가 trial_factor보다 작다면 계속 반복합니다.
그리고 for문이 끝날 때 trial_factor값을 1 증가시키고 다시 조건문을 확인하게 됩니다.
두 번째 for문의 명력문에서는 is_prime을 (value % trial_factor != 0)으로 초기화합니다.
이게 무슨 뜻이냐면, 소수는 1과 자기 자신으로만 나누어 떨어져야만 하기 때문에 무언가로 나누어 떨어져서 나머지가 0이 나온다면 is_prime이 false가 되는 것입니다.
그리고 마지막까지 돌렸는데 is_prime이라면 그 수는 소수가 되는 것이죠. 그 수를 출력해줍니다.
이걸 이해할 정도면 for문의 이해는 마스터하셨다고 봐도 됩니다!!
이전 포스팅의 조건문과 이번 포스팅의 반복문을 배웠으니, 여러분은 대부분의 프로그램을 짜실 수 있게 되었습니다 :)
다음 포스팅에서는 C++의 꽃, 함수에 대해서 배워보도록 하겠습니다.
오늘도 읽어주셔서 감사합니다!!
최근댓글