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 살레시오
,

4.6 break명령     [doc]     [smts]

 break 명령은 전 절에서 소개한 switch 명령과 반복문 안에서만 쓰이며 이 명령을 만나면 그것을 둘러싸고 있는 가장 안 쪽의 반복문 하나를 빠져 나온다.


다음의 간단한 예를 보자.


0406-01.c
for (int ia=0; ia<10; ia++) {
printf(“%d\n”,ia);
if (ia==3)
break;
}

이 프로그램의 결과는


0

1

2

3


이다. 왜냐면 ia가 3이라면 break 명령이 수행되어 for반복문 밖으로 빠져나오기 때문이다.


0406-02.c
int ia;
while(1) {
scanf(“%d”,&ia);
if (ia==0)
break
else
printf(“you typed %d.”,ia);
}

이 예는 사용자가 입력한 정수가 0 이 되면 break 명령을 만나서 무한 루프를 빠져나오는 것이다.


 또 다른 예로 사용자로부터 숫자(정수)를 입력받는데 정해진 입력이 아니면 다시 입력하도록 하는 것을 생각해 보자. 가상의 로봇에 대한 입력이 1번, 2번, 3번만 있는 경우 나머지 경우에 대해서는 다시 입력하도록 하려면 다음 예 break_ex01 과 같이 반복문과 break명령을 조합하여 사용하면 된다.


0406-03.c
#include <stdio.h>
int main(void)
{
  char cIn;
  printf("1. Turn left.\n");
  printf("2. Turn right.\n");
  printf("3. Stop.\n ");
  printf("Choose one : ");
  while(1) {
      scanf("%d", &cIn);
      if (cIn==1 || cIn==2 || cIn==3)
          break;
      printf("Wrong! Input again : ");
  }
}

이 예를 보면 while 반복문 안에서 scanf()함수에 의해서 하나의 정수를 입력받게 되어 있다. 입력받은 정수가 1, 2, 혹은 3이라면 break명령에 의해서 바로 반복문을 빠져 나가고 아니라면 scanf()함수가 반복되어 호출되도록 되어 있다. 이렇게 함으로서 올바른 숫자가 입력될 때까지 반복해서 입력을 받게끔 할 수 있다.


1. Turn left.
2. Turn right.
3. Stop.
Choose one : 5
Wrong! Input again : 1

또 다른 예를 들어보자. 소수(prime number)란 1과 그 자신의 수로만 나누어 떨어지는 수이다. 1000이하의 소수 중 가장 큰 것을 찾는 프로그램을 작성하고자 한다고 하자. 이 경우는 1000부터 하나씩 줄어가면서 소수인지 아닌지를 판별하는 것이 나을 것이다.


0406-04.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 +1) {                  //❶
          printf("result: %d\n", ia);  //❷
          break;
      }
  }
}

이 예제에서 for문 안을 눈여겨보자. while 반복이 끝나고 ❶번줄로 넘어왔을 때 ib 변수값이 (ia/2+1)과 같다면 while반복문이 그 안의 break문을 만나지 않고 종료되었다는 의미이므로 (즉, 이것은 ia를 2 ~ (ia/2) 사이의 값으로 나눴을 때 한 번도 0이 되지 않았음을 의미한다) ia는 소수이다. 따라서 이 경우 바깥쪽 for반복문도 빠져나가게끔 되어 있다. 만약 while 반복이 끝나고 ❶번 줄로 넘어왔을 때 ib 변수값이 ia와 같지 않다면 이것은 2~(ia-1) 사이의 값으로 나눴을 때 어디선가 나머지가 0이라는 말이므로 소수가 아니라는 뜻이다. 따라서 다음 ia값을 다시 검사해야 된다. for문 바깥인 ❷로 빠져 나간 후 ia값을 printf()함수에 의해서 화면에 표시한다.


 이 예제를 이해했다면 for, while, break 에 대해서 어느 정도 이해를 했다고 볼 수 있다.


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

C/C++의 goto 명령  (0) 2015.05.19
C/C++의 continue 명령  (0) 2015.05.19
C/C++ 의 do ~ while 반복문  (0) 2015.05.18
C/C++ 의 while 반복문  (0) 2015.05.18
C/C++의 for 반복문  (0) 2015.05.18
Posted by 살레시오
,

4.5 do~while 반복문     [doc]     [smts]

반복문에 사용되는 do~while 의 문법은 다음과 같다.


do {
  실행문;
  ...
} while(조건문);

while문과 차이점은 do{...} 안의 실행문이 처음에 한 번은 무조건 실행된다는 것이다. 그 이후 while 뒤의 조건문을 체크하여 참이면 do{...} 블럭을 다시 수행하고 거짓이면 그대로 반복을 종료한다.  초보자가 주의할 점은 while()문 뒤의 세미콜론을 빠뜨리기 쉽다는 것이다.


 다음이 do-while문의 예인데 1부터 100까지의 합을 구하는 것으로서 결과는 앞의 예제들과 같다.


0405-01.c
int ia=1, isum=0;
do {
  isum += ia;
} while(ia++ < 100);

while 뒤의 조건문을 잘 파악하면 ia가 1부터 정확히 100까지 do 블럭을 반복한다는 것을 알 수 있다.


다른 예를 들어보자.


0405-02.c
#include <stdio.h>
int main() {
  int ia;
  printf(“Input a positive integer : “);
  do {
      scanf(“%d”, &ia)
  } while(ia<=0);
}

이 예는 사용자가 양의 정수를 입력할 때 까지 do 블럭 안의 scanf()함수를 실행한다.  왜냐면 0이나 음수를 입력하면 while 문 뒤의 조건문이 참이 되어 do 블럭을 다시 수행하기 때문이다. 양수가 입력되면 반복문이 종료된다.



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

C/C++의 continue 명령  (0) 2015.05.19
C/C++의 break 명령  (0) 2015.05.19
C/C++ 의 while 반복문  (0) 2015.05.18
C/C++의 for 반복문  (0) 2015.05.18
C/C++ 의 switch ~ case 제어문  (0) 2015.05.18
Posted by 살레시오
,