모든 루프는 controlling expression이 있어야 한다(switch문 뒤에 오는 바로 그것).

loop이 실행될 때마다, controlling expression이 실행된다. 그리고 그 expression이 true(nonzero)라면, loop이 계속해서 실행된다.

loop 실행 - > controlling expression 실행 -> zero? or nonzero? -> nonzero면 loop 다시 실행


iteration statements는 세 가지: while, do, for

while은 body가 실행되기 전에 controlling expression을 테스트

do는 body가 실행된 후에 controlling expression을 테스트

for는 증가하거나 감소하는 counting variable(index?)를 가지고 루프 돌리기에 적합


break, continue, goto

break: loop에서 뛰쳐 나와서 loop 다음의 statement로 이동

continue: loop interation의 나머지 부분을 생략

goto: 함수 내의 아무  statement로 점프


null statement는 body가 비어 있는 loop를 만들 수 있다.


6.1 The while Statement


C에서 가장 단순하면서 가장 기초적인 loop 문.

while ( expression ) statement


while (i < n)        /* controlling expression */

i = i * 2;       /* loop body */


loop body는 single statement여야 한다. 여러 개의 statements를 원한다면 중괄호로 묶어 하나의 compound statement로 만들면 된다.

- while loop이 종료될 때, controlling expression의 값은 false이다.

- loop body는 단 한번도 실행되지 않을 수도 있다. 


Infinite Loops: controlling expression의 값이 항상 nonzero여서 무한히 실행되는 loop

while (1) 

로 시작하는 loop는 control을 loop 바깥으로 이동시키는 statement(break, goto, return)이나 프로그램을 종료시키는 함수가 들어있지 않으면 무한히 loop을 실행한다.


scanf("%d", &n);

while (n != 0) {

sum += n;

scanf("%d", &n);

}

loop문을 사용할 때, 위에서 scanf문을 두번 쓴 것처럼 같이 동일한 statements를 두 번 써야만 하는 경우가 종종 있다.


6.2 The do Statement


do statement while ( expression ) ;

do 문은 while문과 거의 유사하다. 단 차이는 controlling expression을 테스트하기 전에 body를 먼저 한번 실행한다는 것이다. 그러므로 controlling expression이 false더라도 body는 최소 한 번은 실행된다.


6.3 The for Statement


for ( expr1 ; expr2 ; expr3 ) statement


몇몇 예외적인 경우를 제외하면, for loop는 다음과 같은 형태로 while loop으로 표현할 수 있다.

expr1;

while ( expr 2 )  {

statement

expr3 ;

}


expr1은 초기화 단계로 단 한번만 수행된다.

expr2는 control expression으로 그 값이 nonzero면 계속 진행하고, 아니면 loop을 종료한다.

expr3은 loop이 한 바퀴 돌 떄마다 수행된다.


for statement idioms

 

for (i = 0; i < n; i++)            -> counting up from 0 to n-1

for (i = 1; i <= n; i++)           -> counting up form 1 to n

for (i = n; i >= 0; i--)           -> counting down from n-1 to 0

for (i = n; i > 0; i--)            -> counting down from n to 1 


for(;;) : infinite loop

for(; i > 0;) : disguised while loop


comma expression

expr1, expr2

C에서 하나의 expression을 요구하지만, 두개 이상의 expression을 사용하고 싶다면, expression들을 콤마로 구분해서 사용하면 된다. 가장 마지막에 있는 expression의 값이 전체 expression의 value가 되며, 그 이전의 expression은 side-effect가 있어야만 존재할 가치가 있다.


sum = 0;

for (i=1; i <= N; i++)

sum += i;

 ->

 for (sum = 0, i = 1; i <= N; i++)

      sum += i;



6.4 Exiting from a Loop


while, for 문에서는 loop body 전에 loop 종료가 가능하고, do 문에서는 loop body 후에 종료가 가능하다.

만약 중간에 loop을 끝내고 싶다면? break statement를 쓰자.

continue statement는 loop 전체를 종료하지 않고 지금 돌고 있는 loop의 나머지 부분만 스킵할 수 있다.

goto statement는 하나의 statement에서 다른 statement로 점프하게 해 준다. (거의 사용되지 않음)

break, continue, return으로 대부분의 goto문을 대체할 수 있지만, goto문이 쓰일 수 있는 하나의 예시는 loop 안에 있는 switch문 안에서 loop를 끝내는 경우이다(break를 쓰면 switch 만 빠져나옴)




6.5 The Null Statement


statement can be null.

다음 line은 세개의 statements로 구성되어 있다.

i = 0;  ; j = 1;

an assignment to i, a null statement, an assignment to j.

가장 중요한 용도는, for 문 뒤에 붙이는 것이다.

for (d = 2; d < n && n % d != 0; d++);

for 문 뒤에 ;를 붙인 것에 주목하자.




+ Recent posts