본문 바로가기
C++/뇌를 자극하는 C++

[C++] 챕터 7-2 - 분기와 반복 : 프로그램의 흐름 조절

by Minkyu Lee 2023. 4. 25.

// 7-23 : while의 사용

#include <iostream>
using namespace std;

int main()
{
    int i = 1;
    int sum = 0;

    while (i <= 10)
    {
        sum += i;
        ++i;
    }

    cout << i << "\n"; // 현재 i의 값
    cout << sum << "\n"; // 1~10의 합

    return 0;
}

/*
--- 결과 ---
11
55
*/

 

// 7-24 : while에 ++i 적용

#include <iostream>
using namespace std;

int main()
{
    int i = 0; // i를 0에서 시작한다. 아래 while에서 더해지면서 시작하기 때문이다.
    int sum = 0;

    while (++i <= 10) // 전치와 후치 결과가 다르다. 더하고 비교하냐, 비교하고 더하냐이다.
    {
        sum += i;
    }

    cout << i << "\n"; // 현재 i의 값
    cout << sum << "\n"; // 1~10의 합

    return 0;
}

/*
조건 부분을 보라.

--- 결과 ---
11
55
*/
 

 

// 7-25 : 10부터 1까지 더하기

#include <iostream>
using namespace std;

int main()
{
    int i = 11;
    int sum = 0;

    while (--i) // while (--1 != 0)과 같은 의미이다. 0이 되면 False가 된다는 점을 이용하였다.
    {
        sum += i;
    }

    cout << i << "\n"; // 현재 i의 값
    cout << sum << "\n"; // 1~10의 합

    return 0;
}

/*
조건 부분을 보라.

--- 결과 ---
0
55

*/

 

// 7-26 : break 사용

#include <iostream>
using namespace std;

int main()
{
    int i = 1;
    int sum = 0;

    while (true) //
    {
        sum += i;
        ++i;
        if (i > 10)
        {
            break;
        }
    }

    cout << i << "\n"; // 현재 i의 값
    cout << sum << "\n"; // 1~10의 합

    return 0;
}

/*
break 사용하기.

--- 결과 ---
11
55

*/

 

// 7-27 : for의 사용

#include <iostream>
using namespace std;

int main()
{
    int sum = 0;
    int i;
    for (i = 1; i <= 10; ++i)
    {
        sum += i;
    }

    cout << i << "\n"; // 현재 i의 값
    cout << sum << "\n"; // 1~10의 합

    return 0;
}

/*
for문으로 바꾼거 밖에 없다.

--- 결과 ---
11
55

*/

 

// 7-28, 29 : for의 증가치 부분 사용하지 않기

/*
for문 증가치를 사용하지 않을 수 있다.
for(int i = 1; i <=10; )
{
    sum += i;
    ++i;
}
*/

/*
초기화, 반복조건, 증가치 모두 사용하지 않을 수 있다.
int i = 1;
for(;;)
{
    sum += i;
    ++i;

    if( i > 10)
        break;
}
*/

 

// 7-30 : 5를 제외한 1~10의 합 (continue)

#include <iostream>
using namespace std;

int main()
{
    int sum = 0;
    int i;
    for (i = 1; i <= 10; ++i)
    {
        if (5 == i) // 5라면 스킵한다.
        {
            continue;
        }
        sum += i;
    }

    cout << i << "\n"; // 현재 i의 값
    cout << sum << "\n"; // 1~10의 합

    return 0;
}

/*
continue 사용하기.

--- 결과 ---
11
50

*/

 

// 7-31 : for, while 실수

/*
while(i < 10) ;
과 같이 세미콜론 붙이면 무한루프에 빠진다.

다음의 코드와 동일하기 때문이다.
while(i < 10)
{
}
{
    i++
}
*/

 

// 7-32 : 구구단 프로그램 (중첩 반복)

#include <iostream>
using namespace std;

int main()
{
    for (int i = 2; i <= 9; ++i)
    {
        cout << i << "단 ------\n";

        for (int j = 1; j <= 9; ++j)
        {
            cout << j << "x" << j << " = " << i * j << "\n";
        }
    }

    return 0;
}
/*
중첩된 반복문을 활용하여, 구구단을 만든다.
i는 2~9까지 반복한다.
j는 1~9까지 반복한다.
*/

 

// 7-33 : do while 사용

#include <iostream>
using namespace std;

int main()
{
    int i = 1;
    int sum = 0;

    do // while자리에 do가 온다.
    {
        sum += i;
        ++i;
    } while (i <= 10); // 중괄호 끝에 while이 위치한다. 세미콜론 주의.

    cout << i << "\n";
    cout << sum << "\n";
}
/*
do while 사용

--- 결과 ---
11
55
*/

 

// 7-34, 35 : do while 사용하기 좋은 경우, while로만 구현하기

/* 7 - 34
do while 사용하기 좋은 경우는 다음과 같다.

int n; // 값을 받을 변수이다.

do
{
    cin >> n; // 사용자로부터 값을 받는다.
} while(10 != n);

*/

/* 7 - 35
do while 대신 while로만 구현하면 다음과 같다.
cin >> n이 두 부분으로, 중복이 생긴다.
코드 수정시 두군데를 수정해야한다는 치명적 문제점이 있다.

int n;
cin >> n;

while(10 != n)
{
    cin >> n;
}

*/

 

댓글