'continue'에 해당되는 글 3건

  1. 2015.07.16 MATLAB의 break, continue 명령
  2. 2015.05.27 파이썬의 continue 명령
  3. 2015.05.19 C/C++의 continue 명령

 반복문 수행 시 어떤 경우에는 수행 중이던 반복문을 중단하고 빠져 나와야 하는 경우가 발생할 수도 있다. break 문은 for 구문이나 while 반복문 내에서 사용되며 반복문을 빠져 나오게 만드는 명령어이다. 반복문은 한번 시작하면 반복 변수가 마지막 값을 가질 때까지 반복을 수행해야 하는데 break 명령은 그 위치에서 반복을 중단하고 반복문을 빠져 나오게 만든다. 다음의 예를 살펴보자.


for k=0:10
   for n=0:10
       if (n==5)
           break
   end
   end
end


이 예에서 첫 번째 for 문은 k가 0부터 10까지 수행되고, 각각의 k값에 대해서 안쪽의 for 루프를 만나 n이 0부터 10이 될 때까지 수행을 해야 하지만 n이 5일 때에는 if의 조건이 참이 되므로 break 문을 만나게 된다. 이 때, 안쪽 루프를 탈출하게 된다. 다시 바깥쪽의 for 문을 돌게 되는 것이다. 이 중첩된 루프가 끝났을 때엔 k에는 10이, 그리고 n에는 5가 입력되어 있다.


 또 다른 예를 들어보자. 1과 자기 자신으로만 나누어지는 2보다 큰 양의 정수를 소수(prime number)라고 한다. 주어진 정수 n이 소수인가 아닌가를 판별하는 가장 간단한 방법으로는 n을 2,3,4,…,n-1로 나누어지는지 차례로 검사하는 것이다. 그 모든 수에 대해서 나누어지는 수가 (즉 나머지가 0인 수가) 하나도 없다면 n은 소수일 것이고 그렇지 않다면 n은 소수가 아닌 것이다. 나머지를 구하는 함수는 rem()함수이다. rem(m,n)은 m을 n으로 나눈 나머지를 반환하여 준다. 다음 프로그램을 살펴보자.


1 : n=input('양의 정수를 입력하시오');
2 : for k=2:n-1
3 :     m=rem(n,k);
4 :     if m==0 break, end
5 : end
6 : if m==0
7 :     sprintf('%d는 소수가 아님.',n)
8 : else
9 :     sprintf('%d는 소수.',n)
10: end


사용자로부터 숫자 n을 입력받아서 2번 줄의 for문으로 인해 2부터 n-1까지 숫자로 차례로 나눠서 그 나머지를 구한다. 만약 중간에 나머지가 0인 경우가 발생한다면 더 이상 반복문을 수행할 필요가 없는 것이다. 따라서 이 경우를 4번 줄에서 검사하여 바로 반복문을 빠져나오게 된다. 그리고 6번 줄에서 만약 m이 0이라면 어떤 숫자로부터 나눠진 경우가 발생한 것이므로 소수가 아니라는 판정을 내리고 그렇지 않은 경우 소수라는 판정을 내리게 되는 것이다. (참고로 소수의 리스트를 구할 수 있는 matlab 함수로는 primes()함수가 있다.)

 continue 명령은은 for문이나 while문 안에서 쓰이며 루프의 맨 처음으로 제어 흐름을 바꿔 주는 역할을 한다. 즉 while에서는 조건을 비교하는 부분으로, 그리고 for에서는 반복 변수값을 변화시켜서 for문 바로 다음의 명령문으로 흐름을 바꿔주는 역할을 한다. 다음의 예를 살펴보자.


1: clear all
2: for n=1:10
3:     tmp=n^3;
4:     if (n==5) continue, end
5:     k(n) = tmp;
6: end


이 예에서 k의 값이 변하는 추이를 살펴보자. n이 5가 되기 전에 k에 1, 8, 27, 64의 값을 저장한다. 그런데 n==5가 참이 되면 continue 문이 실행되고, 즉시 n=6으로 되고 3번 줄로 되돌아 가게 된다. 그러므로, 벡터 k(5)에는 125가 저장이 되지 않고 다음 반복문으로 넘어가게 된다.




Posted by 살레시오
,

 반복문 안에서 continue 명령은 그 이후의 반복문은 수행하지 않고 즉시로 다음 반복 실행으로 넘어가는 동작을 수행한다.


for n in lst:
   if n==0:
       continue
   print(n)


이 예제에서 lst의 요소가 만약 0 이라면 continue 명령을 만나게 되고 그 이후의 print(n)은 수행되지 않고 다음으로 바로 넘어가게 된다.


 이 예를 while 문으로 작성하면 다음과 같다.


k = 0
while k<len(lst) :
   if lst[k]==0:
       k +=1
       continue
   print(lst[k])
   k +=1


이와 같이 continue 명령은 반복문 안에서 사용되며 그것을 둘러싼 가장 안쪽의 반복문의 다음 단계로 즉시 넘어가는 동작을 수행한다.



Posted by 살레시오
,

4.7 continue 명령     [doc]     [smts]

반복문 안에서 사용되는 continue 명령은 그 뒤의 모든 실행문을 무시하고 반복문의 처음으로 돌아가서 다음 단계를 수행한다.


반복명령어(for, do, while) {
  명령문1;
  continue;
  명령문2;
}

위에서 프로그램이 continue를 만나면 아래의 명령문2를 수행하지 않고 반복문의 다음 단계로 돌아간다. for문의 경우 변환문을 실행한 후 조건 검사를 하여 참이면 다시 반복을 시작할 것이고 while문은 조건 검사를 수행할 것이다.


for (int k=0; k<10; k++) {
   printf(“Hi “);
   continue;
   printf(“there. “);
}
int k=0;
while(k++ <= 10) {
   printf(“Hi “);
   continue;
   printf(“there. “);
}

이 예제를 수행하면 첫 번째 printf() 함수만 실행되므로 “Hi “만 열 번 화면에 출력될 것이다. continue 명령에 의해서 그 뒤의 printf()는 실행되지 않기 때문이다.


 다음 예는 0부터 100까지의 정수 중 3의 배수가 아닌 것들만 출력하는 프로그램이다.


0407-01.c

#include <stdio.h>
int main() {
   for (int ia=0; ia<=100; ia++) {
       if (ia%3 == 0) continue;
       printf("%d ",ia);
   }
}

실행 결과

1 2 4 5 7 8 10 11 13 14 16 17 19 20 22 23 25 26 28 29 31 32 34 35 37 38 40 41 43 44 46 47 49 50 52 53 55 56 58 59 61 62 64 65 67 68 70 71 73 74 76 77 79 80 82 83 85 86 88 89 91 92 94 95 97 98 100


만약 ia%3==0 이 참, 즉 ia가 3의 배수라면 continue 문에 의해 밑의 printf() 함수는 실행되지 않고 다음 단계로 넘어간다.


보통은 조건문과 조합하여 특정 조건이 만족되면 반복문의 시작으로 되돌아가게끔 하는데 사용한다. 다음 예제는 1000 이하의 가장 큰 소수(prime number)를 구하는 것이다.


0407-02.c
#include <stdio.h>
int main() {
  for (int ia = 1000; ia>=2; ia--) {
      int ib = 2;
      while( ib <= ia/2 ) {
          if (ia%ib == 0) break;
          ib++;
      }
      if (ib <= ia/2) continue;
      printf("result: %d\n", ia);  //❷
      break;
  }
}

997


반복 변수 ia가 1000 부터 시작하여 1씩 감소하면서 그 수 가 소수인지 아닌지를 판별하는 것이다. while 반복문으로 2부터 ia/2 까지의 수로 모두 나눠보고 중간에 나누어 떨어지는 경우가 있다면 반복문을 종료한다. 만약 ia가 소수가 아니라면 ib<=ia/2 이 참이므로 다음 수로 넘어간다. 아니라면 (즉, ia가 소수라면) 결과를 표시하고 for 반복문을 빠져나온다.


 break문이 반복문을 완전히 빠져나가게 하는 것이고 continue문은 반복문을 계속 수행하게 한다는 것을 잘 구별해야 한다.



'프로그래밍언어.Lib > C,C++' 카테고리의 다른 글

C/C++의 연산자 종류  (0) 2015.05.19
C/C++의 goto 명령  (0) 2015.05.19
C/C++의 break 명령  (0) 2015.05.19
C/C++ 의 do ~ while 반복문  (0) 2015.05.18
C/C++ 의 while 반복문  (0) 2015.05.18
Posted by 살레시오
,