본문으로 바로가기

[C언어] 제어문 #3 while

category C 2014. 5. 2. 15:18


<기본 패턴1>

1. 조건식을 검사합니다.

    1.1 조건식이 참일때 블록 시작점 '{'에서 부터 시작하여

          문장(들)을 실행하며 블록의 끝 부분 '}' 만나게 되면

          1 번으로 이동합니다.

     1.2. 조건식이 거짓일때 블록을 빠져 나갑니다.

 

while (조건식)  // 마지막에 ;(세미콜론)을 해서는 절대 안된다.

{

    문장;

} 

  

예1-1)

int sum = 0;

int i = 0;

while (i < 100)

{

    //sum += ++i;

    i = i + 1;

    sum = sum + i;

}

printf("1~100까지 합은 %d 입니다.\n", sum);

 

예1-2) 오류를 찾아라!

int sum = 0;

int i = 1;

while (i <= 100)

{

    //sum += ++i;

    i = i + 1;

    sum = sum + i;

}

printf("1~100까지 합은 %d 입니다.\n", sum);

 

 

 

<기본 패턴2>

1. 블록 시작점 '{'에서 부터 시작하여 문장(들)을 실행하며 
    블록의 끝 부분 '}' 만나게 되면 조건식을 검사합니다.

    1.1 조건식이 참일때 1 번으로 이동하여 반복하게 됩니다.

    1.2.조건식이 거짓일때 블록을 빠져 나갑니다.

do

{

    문장;

} while (조건식)// 마지막에 ;(세미콜론)을 추가하는 것을 잊지 말자!

예1-1)

#include <stdio.h>
void main()
{
    int sum = 0;
    int i = 0;
    do
    {
        sum += ++i;
    } while (i < 100);
    printf("1~100까지 합은 %d 입니다.\n", sum);
}

예1-2)

#include <stdio.h>
void main()
{
    int sum = 0;
    int i = 1;
    do
    {
        sum += i++;
    } while (i <= 100);
    printf("1~100까지 합은 %d 입니다.\n", sum);
}

 

break

break문을 만나면 해당 while문의 루프를 탈출하라는 의미이다.

즉 while문 밖으로 탈출한다.

for 문에서도 해당 for 문의 루프를 탈출하라는 의미이며, 
switch ~case 문의 break와는 구분되어야 한다.

 

continue

continue문은 continue문 이하의 문장은 실행하지 않고 블록의 끝(})으로 가서 다시 반복한다. 결론적으로 while문이 앞쪽 또는 뒷쪽의 위치와 상관 없이 while문의 조건식으로 돌아간다.

예)

#include <stdio.h>
void main()
{
    int sum = 0;
    int i = 0;
    do
    {
        sum += ++i;
        continue;
        printf("I am Neo ");
    } while (i < 100);
    printf("1~100까지 합은 %d 입니다.\n", sum);
}

contiune 문에 의해서 조건식 while (i < 100) 로 이동하며

printf("I am Neo "); 문장은 실행되지 않는다.

 

 

<실습1> 1~100 까지 홀수의 합을 구하시오!

 

<실습2> 1~100 까지 2의 배수가 아니면서 3의 배수가 아닌 수의 합을 구하시오!

 

<실습3> 달팽이 문제

3M(300cm) 우물에 빠진 달팽이가 
낮에는 55cm 올라가고 
밤에는 13cm 내려간다. 
과연 달팽이는 1주일(7일) 전에 우물을 탈출할 수 있을까?

달팽이 위치: x 
걸린 일수 : day
1. x = 0, day =0

2. x = x + 55
3.  x <=  300 ?
    3.1  true 4.번으로 이동
    3.2  false 7번으로 이동
4. x = x - 13, 
5. day = day + 1
6. 2번 반복

7. 출력 x, day 
8. 종료

 

 

위 순서도를 아래처럼 이해할 수 있다. 

 

  

 

x = x + 55;

while ( ...)

{

   ...

   x = x + 55;

}

 

 

<변형 패턴1>

생각해보기: 아래와 같은 논리 흐름일 경우, 어떻게 하면 while 문을 이용해서 처리할 수 있을까?

 

 

<변형 패턴2>

생각해보기: 아래와 같은 논리 흐름일 경우 어떻게 하면 while 문을 이용해서 처리할 수 있을까?