4.4 while 반복문 [doc] [smts]
while 반복문은 for문에 비해서 구조가 간단하다.
while (조건문) {실행문1;…실행문n;} |
while 명령 바로 다음에 오는 조건문이 참이면 중괄호 안의 명령어들이 수행되고 거짓이라면 while 문을 빠져 나가게 된다. 만약 조건이 참이어서 실행문들이 다 수행되고 난 후에는 다시 조건문을 검사하여 참이면 다시 수행한다.
조건문이 참이면 소속된 실행문을 수행하므로 다음 예는 무한 루프에 빠지게 된다.
while (1) {printf(“hi\n”);} |
반면에 다음과 같은 반복문은 절대로 수행되지 않는다. 조건이 항상 거짓(0)이기 때문이다.
while (0) {printf(“bye.\n”);} |
화면에 문자열 “hi”가 딱 10 번만 출력 되게 하려면 다음과 같이 외부 변수를 이용해야 할 것이다.
0404-01.c |
#include <stdio.h>int main() {int icnt = 0;while (icnt < 10) {printf("hi ");icnt++;}} |
실행 결과 |
hi hi hi hi hi hi hi hi hi hi |
위의 프로그램은 다음과 같이 조금 더 간략하게 작성할 수 있다. while 반목문에 속한 실행문이 하나일 경우 중괄호를 생략할 수 있다.
0404-01b.c |
#include <stdio.h>int main() {int icnt = 0;while (icnt++ < 10) {printf("hi ");}} |
실행 결과 |
hi hi hi hi hi hi hi hi hi hi |
다음 예제는 1부터 100까지의 합을 구하는 것을 while문으로 구현한 것이다.
0404-02 |
#include <stdio.h>int main() {int ia = 1, isum = 0;while (ia <= 100) {isum += ia;ia++;}printf("isum = %d", isum);} |
실행 결과 |
isum = 5050 |
for문과 비교해 보면 초기실행문이 while문 바깥에 나와 있고 변환식은 while문 안으로 들어가 있다. 이 예제는 다음과 같이 조금 더 간결하게 만들 수 있다.
0404-02 |
#include <stdio.h>int main() {int ia = 1, isum = 0;while (ia <= 100) {isum += ia++;}printf("isum = %d", isum);} |
실행 결과 |
isum = 5050 |
반복문이 하나의 명령이라면 중괄호를 생략할 수 있다. 단항연산자 ++가 ia뒤에 붙었으므로 먼저 isum변수에 ia값을 더한 후 1이 증가함에 유의하자. 만약
isum += ++ia; |
이렇게 바뀌면 어떻게 동작을 할 지 생각해 보라. 단항연산자 ++, --의 동작에 대해서 한 번 더 이해가 갈 것이다.
또 다른 예로 1부터 숫자를 더해나갈 때 어느 수까지 더하면 10000이 처음으로 넘는지를 알아내는 프로그램을 작성해 보자. 이 경우 while 반복문을 사용하면 다음과 같이 간단하게 작성할 수 있다.
0404-03.c |
#include <stdio.h>int main() {int ia=0, isum=0;while(isum < 10000) {isum += ++ia;}printf("Sum from 1 to %d is %d.\n", ia, isum);} |
실행 결과 |
Sum from 1 to 141 is 10011. |
이 예제에서는 ia=0으로 초기화 시킨 다음에 isum += ++ia 와 같이 ++연산자를 ia앞에 붙였다. 이렇게 해야만 정확한 결과가 얻어진다는 것을 유의해야 한다. (왜인지 생각해 보자.)
'프로그래밍언어.Lib > C,C++' 카테고리의 다른 글
C/C++의 break 명령 (0) | 2015.05.19 |
---|---|
C/C++ 의 do ~ while 반복문 (0) | 2015.05.18 |
C/C++의 for 반복문 (0) | 2015.05.18 |
C/C++ 의 switch ~ case 제어문 (0) | 2015.05.18 |
C/C++ 의 if ~ else 조건 제어문 (0) | 2015.05.18 |