2015년 5월 18일 월요일

C/C++ 의 while 반복문

 while 반복문은 for문에 비해서 구조가 간단하다.

while (조건문) {
   실행문1;
   …
   실행문n;
}

while 명령 바로 다음에 오는 조건문이 참이면 중괄호 안의 명령어들이 수행되고 거짓이라면 while 문을 빠져 나가게 된다. 만약 조건이 참이어서 실행문들이 다 수행되고 난 후에는 다시 조건문을 검사하여 참이면 다시 수행한다.

 조건문이 참이면 소속된 실행문을 수행하므로 다음 예는 무한 루프에 빠지게 된다.

while (1) {
printf(“hi\n”);
}

반면에 다음과 같은 반복문은 절대로 수행되지 않는다. 조건이 항상 거짓(0)이기 때문이다.

while (0) {
printf(“bye.\n”);
}

화면에 문자열 “hi”가 딱 10 번만 출력 되게 하려면 다음과 같이 외부 변수를 이용해야 할 것이다.

int icnt = 0;
while (icnt < 10) {
   printf(“hi\n”);
   icnt++;
}

위의 프로그램은 다음과 같이 조금 더 간략하게 작성할 수 있다. while 반목문에 속한 실행문이 하나일 경우 중괄호를 생략할 수 있다.

int icnt = 0;
while (icnt++ < 10)
printf(“hi\n”);

 다음 예제는 1부터 100까지의 합을 구하는 것을 while문으로 구현한 것이다.

int ia = 1, isum = 0;
while (ia <= 100) {
   isum += ia;
   ia++;
}

for문에서의 초기실행문이 while문 바깥에 나와있다. 그리고 변환식은 while문 안으로 들어가 있다. 이 예제는 다음과 같이 간결하게 만들 수 있다.

int ia = 1, isum = 0;
while (ia <= 100)
   isum += ia++;

반복문이 하나의 명령이라면 중괄호를 생략할 수 있다. 단항연산자 ++가 ia뒤에 붙었으므로 먼저 isum변수에 ia값을 더한 후 1이 증가함에 유의하자. 만약

isum += ++ia;

이렇게 바뀌면 어떻게 동작을 할 지 생각해 보라. 단항연산자 ++, --의 동작에 대해서 한 번 더 이해가 갈 것이다.
 또 다른 예로 1부터 숫자를 더해나갈 때 어느 수까지 더하면 10000이 처음으로 넘는지를 알아내는 프로그램을 작성해 보자. 이 경우 while 반복문을 사용하면 다음과 같이 간단하게 작성할 수 있다.

#include <stdio.h>
int main(void)
{
   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앞에 붙였다. 이렇게 해야만 정확한 결과가 얻어진다는 것을 유의해야 한다. (왜인지 생각해 보자.)


댓글 없음:

댓글 쓰기