<개인공부>/[C언어, C++]

[C언어/C++] while 반복문 설명 및 예제

BlockDMask 2020. 12. 25. 00:30
반응형

안녕하세요. BlockDMask 입니다.
오늘은 C언어, C++에서 반복하는 행위를 편하게 해주는 반복문에 대해서 알아보려합니다. 반복문 for와 while중 오늘은 while에 대해서 알아보려고 합니다


반복문 for에 대해서 알고 싶으신 분은 [바로가기] 여기에 가면 반복문 for 포스팅이있습니다.


<목차>
1. 반복문 while이란?
2. 반복문 while과 continue, break
3. 반복문 while예제.




1. C언어, C++ while 반복문?



1-1) 반복문은 언제 사용하는것일까?


반복이라는 것은 특정한 행위를 계속해서 한다는 것을 말하는데요. 우리는 이런걸 많이 합니다.

예를들어 1부터 100까지 짝수값만 더하고 싶을때 일일히 하나하나 더하죠. 2 + 4 + 6 + 8 + .. + 100 이러한 반복적인 행위를 일정한 규칙에 따라서 묶어 주기만하면 반복문 안에서 쉽게 계산 할 수 있습니다.


또, 완벽히 똑같은 행위를 99번 999번 9999번 반복하고 싶을때도 반복문을 사용하면 편리합니다. 예를들어서 복사기나 프린트 같은 경우에 우리가 N번 출력 혹은 복사를 하죠? 그것또한 자세한 내부는 모르지만 반복문에 의해서 특정 횟수 동안 복사나 출력을 하라고 명령 되어있을 것 입니다.


이렇게 특정 행위를 반복해서 사용할 수 있을때 반복문을 사용하면 매우 편리합니다.



1-2) while 문의 기본 구조


while(조건문)

{

.... 반복할 로직 수행

}


반복문은 딱 한줄로 말하면 이렇습니다. 

"while 뒤에 오는 조건문이 만족할 동안 중괄호{} 내부의 로직을 수행하라"


이런식으로 while 이라는 키워드 뒤에 조건문이 들어오게 됩니다. 해당 로직을 만족하는 동안 아래 중괄호{} 내부에 있는 로직을 반복하게 되고, 조건문을 만족하지 않게 되면 while문을 끝내게 됩니다. 조금 더 순서를 자세히 보면 이렇습니다.


1
2
3
4
5
while (조건문)
{
    //..
    //..
}
cs


1번이 실행되면서 조건문이 만족하는지 확인하고 조건문이 만족하면 중괄호의 시작점을 찾아서 2번 라인 -> 3번라인 -> 4번 라인을 수행합니다.
중괄호가 끝나는 5번으로 가면 다시 1번라인으로 가서 다시 조건문이 만족하는지 확인합니다. 

그렇게 조건문이 맞으면 1 -> 2 -> 3 -> 4 -> 5 -> 1 -> 2 -> 3 -> 4 -> 5  이런식으로 계속 반복하게 됩니다.

5번이 되고 드디어 1번으로 와서 조건문을 다시 확인하는데 조건문이 만족하지 않으면

5번 뒤에있는 곳으로 가게 되고 while 반복문을 벗어나게 됩니다.



1-3) while 반복문 사용 방법


그럼 조건문이 계속 맞다가 어느순간에 안맞게 하려면 어떻게 해야할까요?

그건 예제에서 바로 확인을 해볼까요?


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include<stdio.h>
 
int main(void)
{
    int i = 0;
    printf("반복문 들어가기 전입니다.\n");
    
    while (i < 5)
    {
        printf("%d\n", i);
        ++i;
    }
 
    printf("반복문이 끝났습니다.");
 
    return 0;
}
 
cs



i라는 변수를 0으로 선언


while(i < 5)

- "while 반복문을 사용할것인데 i 라는 변수가 5보다 작을 동안만 반복할것이다." 라고 조건을 걸어줍니다.


printf("%d\n", i);

- 변수 i를 출력해줍니다.


++i;

- i를 하나 씩 증가 시켜 줍니다. 이렇게 i를 증가시켜 줌으로써 나중에 while(i < 5) 조건문을 알맞게 5번만 돌고 6번째 나올수 있도록 할 수 있습니다.
만약  ++i가 없다면 while(i < 5)의 조건이 항상 만족하기 때문에 "무한번" while문이 반복하게 될 것 입니다.


결과를 보면 0 부터 4까지 총 5회 반복문을 돌고, 반복문이 끝난 것을 알 수 있습니다.





2. C언어, C++ while 과 continue, break



2-1) while과 continue


while 반복문을 수행할때 제가 위에서 } 닫힌 중괄호 까지 로직을 수행한 다음에 다시 while(조건문) 쪽에 와서 조건문을 수행한다고 이야기를 했었습니다.


그런데 continue를 사용하면 while문의 끝인 닫힌 중괄호 } 까지 가지 않고 바로 위에있는 while(조건문)으로 점프 할 수 있습니다.


즉, 굳이 "while 반복문 끝까지 가지 않아도 되는 상황이다. 다시 while(조건문)으로 가서 시작해라." 라고 할때 사용하는 키워드가 continue 입니다.


모양을 보면 이렇습니다.

while(조건문)

{

[수행1]

[수행2]

if(특정조건) continue;


[수행3]

[수행4]

}


while 반복문이 시작해서 [수행1] -> [수행2] 를 가고
if (특정조건)을 만족하지 않으면 [수행3] -> [수행4] -> 다시 while(조건문) -> [수행1] -> [수행2] ... 이런식으로 반복문이 진행이 될 것 입니다.


하지만 if(특정조건)을 만족하면 아래와 같이 흐르게 됩니다.

while(조건문) -> [수행1] -> [수행2] -> if(특정조건 만족) continue -> 다시 while(조건문 -> [수행1] -> [수행2] 이런식 입니다.


continue아래 부분은 싹 무시하고 다시 위로 올라와서 while 조건문을 확인하게 되는 것 입니다.


예제로 한번 확인해 볼까요?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include<stdio.h>
 
int main(void)
{
    int i = 1;
 
    // 1 부터 10까지 10회 반복
    // 짝수만 출력하는 프로그램
    while (i < 11)
    {
        // 홀수면 continue;
        if (i % 2 != 0)
        {
            // i는 증가
            ++i;
            continue;
        }
 
        printf("i : %d\n", i);
        ++i;
    }
 
    return 0;
}
 
cs



if(i % 2 != 0)

{

++i;

continue;

}

- 위 코드를 보면 i가 홀수가 되면 continue; 키워드를 이용해서 아래 문장을 더이상 수행하지 않고 바로 while 문으로 보낼 수 있습니다.


홀수가 되면 continue;를 통해서 아래 printf 를 거치지 않고 바로 while 조건문으로 가기 때문에 홀수는 스킵되고 짝수인 경우에만 printf 코드 까지 가는 것을 알 수 있습니다.





2-2) while과 break


위에서 소개한 continue와 달리, 특정 조건을 이미 만족했을때 while 반복문을 중간에 나와야 할 때가 있습니다.


묻지도 따지지도 말고 while 반복문을 끝내고 나와라. 할 때 사용하는 키워드가 바로 break 입니다.


while(조건문)

{

[수행1]

[수행2]

if(특정조건) break;


[수행3]

[수행4]

}


[다음코드]


중간에 되돌아 가는 continue와 달리 break 키워드는 아예 while 반복문을 나오게 됩니다.

특정조건을 만족하면 [수행1] -> [수행2] -> if (특정조건 만족) break -> [다음코드]

이런식으로 while문을 거기서 바로 뛰쳐나오게 됩니다.


예제로 한번 볼까요?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include<stdio.h>
 
int main(void)
{
    int i = 0;
    int sum = 0;
 
    // 0 부터 9까지 10회 반복
    while (i < 10)
    {
        // 합이 50보다 크면 break;
        if (sum > 5break;
 
        sum += i;
        printf("%d회\n", i + 1);
        ++i;
    }
 
    printf("sum : %d", sum);
 
    return 0;
}
 
cs



반복문을 통해서 0 부터 9까지의 숫자를 더하는 프로그램입니다. 

하지만, 중간에 if ( sum > 5 ) break; 를 통해서 0 부터 9까지 반복문을 통해서 더하는 중에 덧셈의 결과 값이 5를 넘은 경우 break를 시키도록 코드를 작성해보았습니다.

1회 : sum = 0

2회 : sum = 0 + 1 = 1

3회 : sum = 0 + 1 + 2 = 3

4회 : sum = 0 + 1 + 2 + 3 = 6 

이렇게 4회를 돌고 sum의 결과 값이 6이 되었을때 if ( sum > 5) 를 만족하게 되어 break 가 걸리게 됩니다.


그렇게 break 키워드에 의해서 반복문에서 바로 빠져나오게 됩니다.





3. C언어, C++ while 예제



3-1) 1~100까지 홀수의 합


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include<stdio.h>
 
int main(void)
{
    int n = 1;
    int oddSum = 0;
 
    // 1~100 까지 100회 반복
    while (n <= 100)
    {
        // 2로 나누었을 때 나머지가 1이면 홀수
        if (n % 2 == 1)
        {
            oddSum += n;
        }
        ++n;
    }
 
    printf("1부터 100까지 홀수의 합 : %d", oddSum);
 
    return 0;
}
 
cs



이렇게 1부터 100까지의 홀수의 합을 while 반복문을 통해서 구해보았습니다.





3-2) 별 찍기


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include<stdio.h>
 
int main(void)
{
    int i = 1;
    int j = 0;
 
    // 1 포함 ~ 10 포함 까지 10회 반복
    while (i <= 10)
    {
        j = 0;
        // i 가 1이면 j는 1 반복, 2면 2반복 ... 
        while (j < i)
        {
            printf("*");
            ++j;
        }
        printf("\n"); // 개행
        ++i;
    }
 
    return 0;
}
 
cs



이렇게 반복문을 통해서 별을 찍어보았습니다.
반복문 안에 반복문이 들어가는 2중 while문으로 만들어 보았습니다.
i가 1~10까지돌면서
j는 1번 별을찍고, 2번 별을찍고 ... 9번 별을 찍고, 10번 별을 찍는 방식입니다.

i가 큰 횟수의 10번이고, j는 그 사이사이에서 횟수만큼 가로로 별을 찍는것 입니다.



감사합니다. 이상으로 C언어, C++의 while 반복문에 대해서 알아보았습니다.

반응형