4-3.while 반복문

4-3-가.while

while문은 for 문과 유사한 반복문이되 성격이 조금 다르다. 기본 형식은 다음과 같으며 키워드 while을 사용한다는 것 외에는 if문과 동일하다. if문은 딱 한 번만 조건을 판단하여 명령의 실행 여부를 결정하는데 비해 while문은 조건이 만족하는동안 명령을 계속 실행한다는 점이 다르다.

 

while (조건) 명령;

 

명령 자리에는 물론 여러 개의 명령을 묶어 놓은 복문이 올 수 있으므로 while (조건) {명령들} 이라고 외워두는 것도 좋다. while의 영어 뜻 그대로 조건이 참인 "동안" 명령을 계속 반복한다. 초기식이나 증감식 같은 것은 따로 없으므로 명령 블록에서 루프를 끝낼 수 있도록 해야 한다. 1~100까지 더하는 예제를 while문으로 다시 작성해 보았다.

 

: whilesum

#include <Turboc.h>

 

void main()

{

     int i,sum;

 

     sum=0;

     i=1;

     while (i<=100) {

          sum=sum+i;

          i=i+1;

     }

     printf("1~100까지의 합 = %d\n",sum);

}

 

for문에 비해 초기식이 루프 이전에 있고 증감식은 루프 내부에 있으며 조건식만 while 문에 포함되어 있다. 루프에 들어가기 전에 i를 1로 초기화하고 i가 100이하인 동안 i를 1씩 증가시키면서 sum에 누적시킨다. 실행 결과는 물론 for문의 경우와 동일하며 5050을 출력할 것이다.

while문은 조건이 고정되어 있기 때문에 루프 내부에서 조건의 진위를 바꿀 수 있는 처리를 하지 않으면 무한루프가 되어 버린다. 위 예제는 while 루프에서 i값을 1씩 증가시키고 있기 때문에 언젠가는 i가 100보다 커질 수 있도록 하고 있다. 루프에서 i=i+1을 빼 버리면 while 루프의 조건은 항상 참이므로 언제까지나 sum=sum+1만 무한히 반복하게 될 것이다.

while문으로도 while (TRUE) 명령; 형식으로 무한 루프를 만들 수 있다. 조건이 TRUE로 고정되어 있으므로 while의 조건은 항상 참이 되어 명령을 무한히 반복할 것이다. 물론 정상적인 코드가 되기 위해서는 명령 블록 내에 일정한 조건이 되면 이 루프를 탈출(break)하는 문장이 포함되어 있어야 한다. 다음은 while문의 변형인 do while 문을 보자. 기본 형식은 다음과 같으며 do와 while이 짝을 이루어 사용된다. do만 있고 뒤에 while이 없으면 에러로 처리된다.

 

do 명령; while (조건);

 

do 다음의 명령을 while의 조건이 만족하는 동안 반복적으로 실행하는데 파스칼의 repeat until 제어문과 동일하다. 명령은 보통 복문이 오므로 { } 괄호를 싸 주어야 한다. 1~100까지 더하는 예제를 do~while문으로 작성해 보자.

 

: dosum

#include <Turboc.h>

 

void main()

{

     int i,sum;

 

     sum=0;

     i=1;

     do {

          sum=sum+i;

          i=i+1;

     } while (i<=100);

     printf("1~100까지의 합 = %d\n",sum);

}

 

루프에 들어가기 전에 i를 1로 초기화하고 do 루프를 시작한다. 루프에서는 sum에 i를 누적시키면서 i를 1 증가시키며 이 처리를 i가 100이하인 동안 계속 반복한다. 실행 결과는 for 문이나 while문으로 작성한 것과 동일하다.