5-2 while문

주어진 조건이 만족되는 동안 문장들을 반복 실행하는 문장구조를 while이라고한다.

while문 순서도 1while문 순서도

위와 같은 구조를 가지며, while문의 형식은

1
2
3
4
while (i<10) // 조건식
{
    printf("Hello World!\n")
}
cs

조건식의 값이 참인 동안에는 주어진 문장을 반복 실행한다.

조건식의 값이 거짓이 되면 반복을 중단하며, 조건식은 참, 거짓으로 계산 될 수 있는 수식으로 값이 0이면 거짓으로 간주되고, 

그렇지 않으면 참으로 간주된다.


5-1 에서 언급하였던 Hello World!를 5번 출력하는 프로그램을 while문으로 작성하는 예시는 다음과 같다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
 
int main()
{
    int i = 0;
 
    while (i<5)
    {
        printf("Hello World!\n");
        i++;
    }
 
    return 0;
}
cs

위의 코드에서 반복 조건에 해당하는 것은 수식 i<5이며, 반복되는 내용은 중괄호 안에 있어야한다.


위으 코드는 변수 i가 0으로 초기화된 후에 한번 반복을 할때마다 i++를 이용하여 i값을 1씩 증가시킨다. 결국은 5보다 작지 않게 될것이고 그러면 반복이 종료된다.



//while문을 이용한 구구단 출력 프로그램

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
 
int main()
{
    int i = 1; // 루프 제어 변수
    int n;
 
    printf("출력하고 싶은 단 : "); // 구구단 단수를 입력받아 n에 저장.
    scanf("%d"&n);
 
    while (i <= 9) // 9보다 작거나 같을때 까지 반복한다.
    {
        printf("%d*%d = %d\n",n,i,n*i);
        i++;
    }
 
    return 0;
}
cs

while문 구구단 출력결과출력 결과





위 예제는 반복횟수가 고정되어있었지만  사용자로부터 값을 받아서 이것을 반복의 횟수로 하면 훨씬 더 융통성 있는 프로그램을 만들 수 있다.

// 사용자로부터 정수 n을 입력받아서 1부터 n까지의 합을 구하는 문제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
 
int main()
{
    int i, n, sum;
 
    printf("정수를 입력하세요 : ");
    scanf("%d"&n);
 
    i = 1;
    sum = 0;
 
    while (i<=n)
    {
        sum += i;
        i++;
    }
 
    printf("1부터 %d까지의 합은 %d입니다.", n, sum);
    return 0;
}
cs

1부터 n까지 출력결과출력결과


scanf가 while루프 안으로 들어갈수도있다. 

//사용자가 입력하는 5개의 값을 합하여 결과를 출력

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
 
int main()
{
    int i, n, sum;
 
    i = 0;
    sum = 0;
 
    while (i<5)
    {
        printf("값을 입력하세요 : ");
        scanf("%d"&n);
        sum = sum + n;
        i++;
    }
 
    printf("합은 %d입니다.", sum);
    return 0;
}
cs

5번 입력받아 더하기 출력결과출력결과




while문 작성시 주의할 점

1
2
3
4
5
6
int i = 0;
while (i < 3)
    printf("반복중");
    i++
cs

위 while문은 3번 반복할것같지만 무한히 반복하게 된다.

왜냐하면 i++문장은 while루프안에 있지 않기 때문이다. 위에서 말했지만 while문 안에있는 문장들은 모두 중괄호{}로 묶어 줘야한다. 단순히 들여쓰기를 한다고 while루프안의 문장이 되지 않는것이다.

1
2
3
4
5
6
int i = 0;
while (i < 3)
{
    printf("반복중");
    i++
}
cs

이런식으로 써줘야 3번 반복하고 종료하게된다.



1
2
while (i < 3);
i++;
cs

while문 조건식에 ;을 넣는경우 무한이 반복하게 된다.

;을 하나의 문장으로 인식하기때문에 프로그램은 무한히 반복되게된다.

'C 프로그래밍 > 5. 반복문' 카테고리의 다른 글

5-5-2 for 문 2  (0) 2019.05.21
5-5-1 for 문 1  (0) 2019.05.21
5-4 do_while문  (0) 2019.05.21
5-3 반복 루프에서 보초값 사용하기  (0) 2019.05.21
5-1 반복의 개념  (0) 2019.05.18