c++

20210712 반복문 for, while, do while

TIN9 2021. 7. 13.
반응형

안녕하세요 틴구입니다.

오늘도 역시 오늘 배운 내용에 대해 글을 써볼까 해요.

오늘은 반복문에 대해서 배웠는데 어우 머리가 아프더라고요....

갈수록 어려워지는 기분이...

그럼 한 번 볼까요??

반복문

반복문이란 어떤 코드를 반복해서 동작시켜주고자 할 때 사용하는 문법입니다.

반복문에는

for, while, do while의 3가지 종류가 있습니다.

먼저 for문부터 살펴볼게요

for

for(초기값; 조건식; 증감값)

{

     반복시키고자 하는 코드

}

로 구성되어 있는데 여기서 초기값, 조건식, 증감값에 대해서 설명해 드릴게요

 

초기값이란 for문에 진입할 때 처음 한 번만 동작이 되는 구문입니다.

for문에서 사용할 값을 초기화시켜주는 용도로 사용이 된다고 합니다.

 

조건식이란 for문이 동작되는 동안 계속해서 체크되는 구문입니다.

조건식이 true가 되면 for문이 동작되고 fals가 되면 for문을 빠져나가게 됩니다

 

증감값이란 for문이 동작되는동안 증감값을 처리하는 구문입니다

for문에서 사용하는 값을 증가 혹은 감소를 시켜줄 경우 사용할 수 있습니다.

 

for 문의 실행 순서는 : 초기값 - 조건식(true일 경우) - 코드 - 증감값 - 조건식(true일 경우) - 코드 - 증감값 - 조건식(false일 경우) for문 종료 순입니다.

말 그대로 조건식이 true일 때는 계속해서 다음 구문으로 진행을 하고 조건식이 false일 경우 for문을 빠져나오는 형태입니다.

 

예를 들어서

for (int i = 0; i < 50; ++i)

{

     cout << "i : " << i << endl;

}

이렇게 코드를 출력하면

i : 0

i : 1

i : 2

 ~

i : 50 까지 출력이 됩니다.

또 for문 초기값에 값을 두 개를 넣어 아래 내용처럼 활용할 수도 있다고 합니다...

    

for (int i = 0, j = 0; i < 100 && j == 0; i += 2)
    {
        std::cout << "i : " << i << std::endl;
        std::cout << "j : " << j << std::endl;
    }
잘 쓰이지는 않을 거 같아요.

 

또 for문과 if문을 활용하여 ?의 배수 값의 코드를 만들 수 도 있습니다.

    for (int i = 1; i <= 100; ++i)
    {
        // 나머지 연산자를 이용해 3의 배수 값을 알 수 있다.

        // 3으로 나눴을 때 0이 되는 값만이 출력이 된다.
        if (i % 3 == 0)
            std::cout << "i : " << i << std::endl;
    }

결과를 보면

i : 3

i : 6

i : 9

 ~

i : 99 가 나오는 것을 확인할 수 있다.

 

또 두 개의 공배수를 확인하는 방법도 배웠는데 위의 코드에서 앤드연산자와 나머지 연산자를 이용해서

    for (int i = 1; i <= 100; ++i)
    {
        // 앤드연산자를 활용한 3과 5의 공배수 확인
        if (i % 3 == 0 && i % 5 == 0)
            ::cout << "i : " << i << ::endl;
    }

이런 식의 코드도 만들 수 있습니다.

이렇게 출력을 하게 되면

3과 5의 공배수 값이 출력이 됩니다.

 

또 for문에 continue; 와 break;도 있으니 알아봅시다.

 

continue;의 경우에는 해당 값에서 for문의 증감값으로 이동시켜준다고 생각하면 됩니다

for (int i = 0; i < 5; ++i)
{

     if ( i == 2)

       continue;    // i 가 1에서 2로 바뀌지 않고 증감값 ++i로 이동하여 다음 숫자인 3이 출력된다

      cout << "i : " << i << endl;

}

출력 값을 확인해보면

i : 0

i : 1

i : 3

i : 4 로 출력되게 된다.

 

break; 의 경우에는 해당 값 시점부터 for문을 종료시킨다 생각하면 된다.

for (int i = 0; i < 5; ++i)

{

     if (i == 3)

       break;

     cout << "i : " << i << endl;

}

값을 출력해보면

i : 0

i : 1

i : 2 로 for문이 종료되게 된다.

또 for문의 경우에는 중첩포문이라고 포문 안에 포문을 넣을 수 있습니다.

for (int i = 0; i < 10; ++i)

{

     for (int j = 0; j < 5: ++j)

         cout << "i : " << i << " , j : " << j << endl;

}

을 출력하게 되면

i : 0, j : 0

i : 0, j : 1

i : 0, j : 2

i : 0, j : 3

i : 0, j : 4

i : 1, j : 0

    ~

i : 9, j : 4 로 출력이 된다.

한번 코드를 분석해보자

i값에 0을 넣었을 경우 j값의 포문으로 들어가 int j = 0; j < 5; ++j

값에 의해 0부터 4까지 출력을 하고 j포문을 빠져나간 후 i포문으로 돌아와

증감값을 계산 후 i가 1이 되어 다시 j포문을 들어가 값을 계산 ~ 반복 후 

두 개의 포문 조건값이 false가 되어 무한 루프가 종료되게 된다.

while

while문은 반복문의 한 종류입니다.

while문의 코드 구성은

while(조건식)

{

     반복될 코드

}

로 구성되어 있습니다.

while문은 조건식이 if문과 마찬가지로 조건식이 true일 때 동작이 되고 false가 되면 while문을 빠져나오게 됩니다.

while문의 경우에는 주로 무한루프를 돌리거나 특정 조건이 체크될 때까지 계속해서 반복되어야 할 경우 사용을 합니다.

while문에서 주의해야 할 점은

코드 블록 안에 break;가 없으면 종료가 안되고 계속해서 반복되기 때문에 반드시 break;를 넣어야 합니다.

do while

do while문도 반복문의 한 종류입니다.

do while문의 코드 구성은

do

{

     반복할 코드

}while(조건식);

의 형태로 구성되어 있습니다.

 

do while문은 다른 반복문과 다르게 처음 1번은 무조건 동작이 되고 그 뒤로부터 조건식을 체크하여 true일 경우에 동작되는 방식입니다.

do while문은 거의 사용하지 않는 반복문이라고 하네요. 구성은 알고 있자고요!!

 

오늘 강사님께서 숙제를 내 주셨습니다.

과제

1 - 1
*****
****
***
**
*
 
1 - 2
    *
   **
  ***
 ****
*****

1 - 3
*****
 ****
  ***
   **
    *

1 - 4
   *
  ***
 *****
*******
 *****
  ***
   *

 

for문을 활용하여 별짓기를 만들어 보는 건데 한번 코드를 작성해봅시다.

 

#include <iostream>

 

using namespace std;

 

int main()
{
/*
1 - 1
*****
****
***
**
*
*/
    for (int i = 0; i < 5; ++i)
    {
        for (int j = 0; j < 5 - i; ++j)
        {
             cout << "*";
        }

             cout << endl;
    }

/*
1 - 2
    *
   **
  ***
 ****
*****
*/
    for (int i = 0; i < 5; ++i)
    {
        for (int j = 0; j < 4 - i; ++j)
        {
            cout << " ";
        }

        for (int j = 0; j < 1 + i; ++j)
        {
            cout << "*";
        }

        cout << endl;
    }

cout << endl;

/*
1 - 3
*****
 ****
  ***
   **
    *
*/
    for (int i = 0; i < 5; ++i)
    {
        for (int j = 0; j < 0 + i; ++j)
        {
            cout << " ";
        }

        for (int j = 0; j < 5 - i; ++j)
        {
            cout << "*";
        }

        cout << endl;
    }

 

    for (int i = 0; i < 7; ++i)
    {
        if (i < 4)
        {
            for (int j = i; j < 3; ++j)
            {
                cout << " ";
            }
            for (int j = 0; j < i * 2 + 1; ++j)
            {
                cout << "*";
            }
        }
        else
        {
            for (int j = 0; j < i - 3; ++j)
            {
                cout << " ";
            }
            for (int j = 0; j < i * -2 + 13; ++j)
            {
                cout << "*";
            }
        }
        cout << endl;
    }



return 0;
}

 

이렇게 코드를 짜 보았습니다.!!

반응형

댓글