본문 바로가기

프로그래밍 언어들/C

10장 - C언어 반복문(repetitive statement in C)(2)

10장 - C언어 반복문(repetitive statement in C)(2)

- 반복문이란 조건이 참일 경우, 특정 루틴을 반복적으로 수행하는 것


이번에는 지난 9장에 이어 반복문에 대해서 조금 더 알아보도록 하겠습니다.

지난 강의에는 for에 대해서 했고, 이번에는 while과 do~while에 대해서 다룰 예정입니다.

반복문의 구조는 약간씩 다르지만, 그 기본은 같다는걸 명심하시면 쉽게 습득하실 수 있을 겁니다.

※ 조건이 참일 경우, 특정 루틴을 반복적으로 수행하는 것


1. while

  1. int main (void)
  2. {
  3.     while( 조건 )
  4.     {
  5.        // 반복 루틴
  6.     }
  7.  
  8.     return 0;
  9. }


while의 기본 구조는 위의 예제와 같습니다. for문에 비해 상당히 간단한 구조죠?

조건만 존재하고, 해당 조건이 참이면 반복 루틴을 수행하는 구조로 되어있습니다.

for는 초기화와 증감식을 통해, 일정 반복 후 조건을 거짓으로 만들어 루프를 탈출하지만,

while의 경우 조건문만 존재하기 때문에, 별도로 루틴에 탈출하기 위한 조건이나

조건식이 거짓이 되도록 만들어줘야 합니다.

그럴 것이면 for를 쓰지 왜 while을 쓰냐 생각하실 수도 있습니다.

코딩은 표현의 자유이기 때문에, 본인이 편하신 것을 사용하면 됩니다.

while의 경우 보통 반복 횟수가 불분명할 때 사용되고, for의 경우 반복횟수가 정해져 있을 때 사용합니다.


  1. int main (void)
  2. {
  3.     int i;
  4.  
  5.     i = 1;
  6.  
  7.     while( i <= 10 )
  8.     {
  9.         printf("%d\n", i);
  10.  
  11.         i ++;
  12.     }
  13.  
  14.     return 0;
  15. }


위의 예제는 while을 이용하여 1부터 10까지 출력하는 예제입니다.

증감식은 루프 안에 추가적으로 작성해 주어, 10번 반복 후 조건이 거짓이 되어 루프를 탈출하게 됩니다.


2. do~while


  1. int main (void)
  2. {
  3.     do
  4.     {
  5.         // 반복 내용
  6.     }while( 조건 );
  7.  
  8.     return 0;
  9. }

 


while과 do~while은 매우 흡사한 구조를 가졌습니다. 그러나 위의 예제에서 보실 수 있듯이

반복 내용이 조건부보다 먼저 위치하고 있습니다. 구조 그대로 두 반복문의 차이점은

while의 경우 조건부를 먼저 검사하기 때문에, 진입 시 조건이 거짓이면 수행하지 않습니다.

그러나 do~while은 이름 그대로, 먼저 한 번 수행한 후에 조건을 검사합니다.


  1. int main (void)
  2. {
  3.     int i;
  4.  
  5.     i = 1;
  6.  
  7.     while( i < 1 )
  8.     {
  9.         printf("%d\n", i);
  10.     }
  11.  
  12.     return 0;
  13. }


위의 예제를 보시면, while문의 조건이 i < 1로 되어 있습니다. 즉 i의 값이 1보다 작아야 루프를 수행합니다.

그러나 line.5 에서 i를 1로 초기화를 해주었기 때문에, 조건이 거짓이라 수행하지 않습니다.


  1. int main (void)
  2. {
  3.     int i;
  4.  
  5.     i = 1;
  6.  
  7.     do
  8.     {
  9.         printf("%d\n", i);
  10.     }while( i < 1 );
  11.  
  12.     return 0;
  13. }


위의 do~while의 예제를 보시면, 이전 while문과 동일한 조건과 반복 내용을 포함하고 있지만,

do~while의 특성으로 인해 한 번 먼저 수행이 된 후에 조건을 비교합니다. 따라서 조건의 참, 거짓 여부를

떠나 무조건 한 번 수행이 됩니다.


3. 실습 문제

while 또는 do~while만 사용하여 구현한다.

(1) 입력받은 수가 소수인지 판단하라.

(2) 양수 또는 음수를 입력 받아, 입력 받은 모든 수를 누적하라.

( 단 0 입력 시 종료하고, 최종 수를 출력하라. )

(3) (2)번의 응용으로, 입력 받은 수가 홀수이면 더하고, 짝수이면 빼라.

( 0을 입력 받으면 종료하고, 최종 수를 출력하라. )


※ 정답은 아래 링크

http://leeyongjeon.tistory.com/category/프로그래밍%20언어들/C%20문제풀이