1 / 39

7. while 문의 흐름 제어

7. while 문의 흐름 제어. while 문. 기타 제어문. 1. 3. 이 장에서 다룰 내용. do ~ while 문. 2. 01_while 문. while 문의 실행 순서 조건식이 참인 동안 반복할 문장 수행 중괄호가 끝나는 곳에서 조건식으로 돌아와 같은 동작 반복. 01_while 문. for 문과 while 문의 사용 형식 비교 0~9 까지 출력하는 예. int i; for(i=0; i&lt;10; i++) { printf(“%d <br>”, i); }.

Télécharger la présentation

7. while 문의 흐름 제어

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 7. while 문의 흐름 제어

  2. while 문 기타 제어문 1. 3. 이 장에서 다룰 내용 do ~ while 문 2.

  3. 01_while 문 • while 문의 실행 순서 • 조건식이 참인 동안 반복할 문장 수행 • 중괄호가 끝나는 곳에서 조건식으로 돌아와 같은 동작 반복

  4. 01_while 문 • for 문과 while 문의 사용 형식 비교 • 0~9까지 출력하는 예 int i; for(i=0; i<10; i++) { printf(“%d \n”, i); } • 초기값을 for 문 밖으로 이동 • 증감식을 for 문의 끝으로 이동 • for를 while로 int i; i = 0; while(i<10) { printf(“%d \n”, i); i++; }

  5. 01 #include <stdio.h> 02 03 int main() 04 { 05 int i; 06 i=0; 07 08 while ( i < 5 ){ 09 printf("while 문을 공부합니다.\n"); 10 i++; 11 } 12 } [기본예제 7-1] for 문을 while 문으로 바꾸기 ① 초기값 지정 조건식 증감식

  6. 01_while 문 • for 문을 while 문으로 변환하는 방법

  7. 01 #include <stdio.h> 02 03 int main() 04 { 05 int hap=0; 06 int i; 07 08 [ ① ] 09 while ( i<=10 ) { 10 hap = hap + i; 11 [ ② ] 12 } 13 14 printf(" 1에서 10까지의 합: %d \n", hap); 15 } [기본예제 7-2] for 문을 while 문으로 바꾸기 ② i = 1; 초기값 지정 조건식 i ++; 증감식

  8. 01_while 문 • 무한루프를 위한 while 문 • 조건식이 무조건 참이어야 함 • for( ; ; )와 동일한 역할 • while(1) 로 표현

  9. 01 #include <stdio.h> 02 03 int main() 04 { 05 int a, b; 06 07 while ( 1 ) 08 { 09 printf ("더할 두 수 입력 (멈추려면 Ctrl+C) : ") ; 10 scanf("%d %d", &a, &b); 11 12 printf("%d + %d = %d \n", a, b, a+b); 13 } 14 } [기본예제 7-3] while 문의 무한루프 만들기 무한루프 입력 값을 공백으로 분리 출력

  10. 01 #include <stdio.h> 02 03 int main() 04 { 05 int a, b; 06 char ch; 07 08 [ ① ] 09 { 10 printf ("계산할 두 수를 입력 (멈추려면 Ctrl+C) : ") ; 11 scanf("%d %d", &a, &b); 12 13 printf("계산할 연산자를 입력하세요 : "); 14 scanf("%*c%c", &ch); 15 16 [ ② ](ch) 17 { [응용예제 7-4] 무한루프를 활용한 계산기 while(1) 무한루프 키보드로 숫자 2개를 입력받음 연산자 입력 switch

  11. 18 case '+' : 19 printf("%d + %d = %d 입니다. \n", a, b, a+b); 20 break; 21 case '-' : 22 printf("%d - %d = %d 입니다. \n", a, b, a-b); 23 break; 24 case '*' : 25 printf("%d * %d = %d 입니다. \n", a, b, a*b); 26 break; 27 case '/' : 28 printf("%d / %d = %f 입니다. \n", a, b, a/(float)b); 29 break; 30 case '%' : 31 printf("%d %% %d = %d 입니다. \n", a, b, a%b); 32 break; [응용예제 7-4] 무한루프를 활용한 계산기

  12. 33 default : 34 printf("연산자를 잘못 입력했습니다. \n"); 35 } 36 } 37 } [응용예제 7-4] 무한루프를 활용한 계산기

  13. 02_do~while 문 • do~while 문 • 조건식을 확인하기 전에 ‘반복할 문장’을 수행  무조건 한 번은 실행됨 • 형식은 while 문과 동일하지만, 조건식이 아래에 위치

  14. 01 #include <stdio.h> 02 03 int main() 04 { 05 int a = 100; 06 07 while ( a == 200 ) 08 { 09 printf ("while 문 내부에 들어 왔습니다.\n") ; 10 } 11 12 do { 13 printf ("do ~ while 문 내부에 들어 왔습니다.\n") ; 14 } while ( a == 200 ) ; 15 } [기본예제 7-5] do~while 문의 사용 예 ① while 문 실행 : 조건식 먼저 판단 do~while 문 실행 :먼저 실행한 후에 조건식 판단

  15. 01 #include <stdio.h> 02 03 int main() 04 { 05 int menu; 06 07 [ ① ]{ 08 printf("\n손님 주문하시겠습니까 ? \n"); 09 printf("<1> 스테이크 <2> 스파게티 <3> 물 "); 10 printf("<4> 빵 <5> 그만 시킬래요 ==> "); 11 scanf("%d", &menu); 12 13 switch(menu) 14 { 15 case 1 : printf("#스테이크 알겠습니다.\n"); break; [응용예제 7-6] do~while 문의 사용 예 ② do 문이므로 한번은 꼭 수행 do 메뉴 출력 메뉴 선택 선택한 메뉴에 따라 주문을 접수

  16. 16 case 2 : printf("#스파게티 알겠습니다.\n"); break; 17 case 3 : printf("#물 알겠습니다.\n"); break; 18 case 4 : printf("#빵 알겠습니다.\n"); break; 19 case 5 : printf("안녕히 가세요.\n"); break; 20 default : printf("잘못 주문하셨습니다.\n"); 21 } 22 } [ ② ](menu != 5); 23 } [응용예제 7-6] do~while 문의 사용 예 ② while 선택한 메뉴가 5가 아닌 동안 계속 수행

  17. 03_기타 제어문 • break 문 • for, while, do~while과 같은 반복문을 탈출할 때 사용 • if 문과 결합하여 무한루프 안에 사용 • 무한루프를 돌다 특정 조건을 만족하면 프로그램을 종료하는 역할

  18. 01 #include <stdio.h> 02 03 int main() 04 { 05 int i; 06 07 for( i=1 ; i<=100 ; i++) 08 { 09 printf("for 문을 %d 회 실행했습니다.\n", i); 10 break; 11 } 12 13 printf("for 문을 종료했습니다.\n"); 14 } [기본예제 7-7] break 문의 사용 예 ① 100번 반복 출력 무조건 for 문을 빠져나감

  19. 01 #include <stdio.h> 02 03 int main() 04 { 05 int a, b; 06 07 while ( 1 ) 08 { 09 printf ("더할 두 수 입력(멈추려면 0을 입력) : ") ; 10 scanf("%d %d", &a, &b); 11 12 if (a == 0) 13 break; 14 15 printf("%d + %d = %d \n", a, b, a+b); 16 } [기본예제 7-8] break 문의사용 예 ② 무한 루프 키보드로 숫자 두 개를 입력받음 입력값이 0이면 무조건 for 문을 빠져나감

  20. 17 18 printf("0을 입력해서 for 문을 탈출했습니다.\n"); 19 } [기본예제 7-8] break 문의사용 예 ②

  21. 01 #include <stdio.h> 02 03 int main() 04 { 05 int i; 06 i = 0; 07 for ( ; ; ) 08 { 09 printf (" %d \n", i) ; 10 i ++ ; 11 if (i < 10) 12 { break; } 13 } 14 15 } [기본예제 7-9] break 문의 사용 예 ③ 무한루프 i 값 출력 후 1을 더해줌 i 가 10보다 작으면 반복문의 블록을 무조건 빠져나감

  22. 03_기타 제어문 • break 문의 탈출 범위 • 현재 실행중인 반복문 블록을 무조건 빠져나오는 명령문 • [기본예제 7-9]의 수정 • i 값이 0부터 시작하므로 첫번째 루프를 돌 때 프로그램 종료 • 1~9까지 출력하려면 부등호를 수정해야 함 if (i >= 10) for( ; ; ) { ... if(i < 10) { break; } }

  23. 01 #include <stdio.h> 02 03 int main() 04 { 05 int hap = 0; 06 int i; 07 08 for ( i=1 ; i<=100 ; i++) 09 { 10 hap = hap + i; 11 12 if ( ) 13 break; 14 } 15 16 printf(" 1~100의 합에서 최초로 1000이 넘는 위치는? : %d\n", i); 17 } [응용예제 7-10] break 문의 사용 예 ④ 100번 반복 실행 i 값을 hap에 누적 hap이 100보다 크거나 같으면 블록을 빠져나감 블록을 빠져나간 순간의 i 값

  24. 03_기타 제어문 • 블록의 끝으로 가는 continue 문 • 블록의 끝으로 이동한 후 반복문을 처음부터 다시 수행

  25. 01 #include <stdio.h> 02 03 int main() 04 { 05 int hap = 0; 06 int i; 07 08 for ( i=1 ; i<=100 ; i++ ) 09 { 10 if ( i % 3 == 0 ) 11 continue; 12 13 hap += i; 14 } 15 16 printf(" 1~100까지의 합(3의 배수 제외): %d\n", hap); 17 } [기본예제 7-11] continue 문의 사용 예 1부터 100까지 반복 나머지 값이 0일 때(3의 배수) 블록의 끝으로 이동 3의 배수가 아닌 i 값 누적 누적된 값 출력

  26. 03_기타 제어문 • 지정한 위치로 이동하는 goto 문 • 지정된 레이블(label)로 건너뛰게 하는 명령문 • 프로그램의 흐름을 복잡하게 만드는 단점이 있음

  27. 01 #include <stdio.h> 02 03 int main() 04 { 05 int hap = 0; 06 int i; 07 08 for( i=1 ; i<=100 ; i++) 09 { 10 hap += i; 11 12 if (hap > 2000) 13 goto mygoto; 14 } 15 16 mygoto : 17 printf ("1부터 %d까지 합하면 2000이 넘어요.\n", i); 18 } [기본예제 7-12] goto 문의 사용 예 1부터 100까지 반복 합계 누적 누적된 값이 2000이 넘으면 mygoto로 무조건 이동 mygoto 레이블

  28. 03_기타 제어문 • 호출한 곳으로 돌아가는 return 문 • 현재 실행중인 함수를 끝내고, 해당 함수를 호출한 곳으로 돌아가게 함 • return 문을 만나면 프로그램이 종료되는 효과

  29. 01 #include <stdio.h> 02 03 int main() 04 { 05 int hap = 0; 06 int i; 07 08 for( i=1 ; i<=100 ; i++) 09 hap += i; 10 11 printf("1부터 100까지의 합은 %d 입니다.\n", hap); 12 return 0; 13 14 printf("프로그램의 끝입니다."); 15 } [기본예제 7-13] return 문의 사용 예 1부터 100까지 반복 합계 누적 출력 현재 함수를 호출한 곳으로 복귀 한 번도 출력되지 않음

  30. [예제모음_16] 원하는 배수의 합계를 구하는 계산기 • 예제설명 • 입력한 두 수 사이의 합계를 구하되, 원하는 배수를 선택하여 합계를 구하는 프로그램이다. • 100~200 사이의 수 중에서 4의 배수들의 합계를 구함 실행결과

  31. 01 #include <stdio.h> 02 03 int main() 04 { 05 int start, end; 06 int basu, i; 07 int hap = 0; 08 09 printf("합계의 시작값 ==> "); 10 scanf("%d", &start); 11 printf("합계의 끝값 ==> "); 12 scanf("%d", &end); 13 printf("배수 ==> "); 14 scanf("%d", &basu); 15 예제모음_16 소스 변수 선언과 초기화 시작값, 끝값, 배수값 입력

  32. 16 i = start; 17 while (i <= end) 18 { 19 if (i % basu == 0) 20 hap = hap + i; 21 22 i++; 23 } 24 printf("%d부터 %d까지의 %d배수의 합계 ==> %d\n", start, end, basu, hap); 25 } 예제모음_16 소스 i 값이 끝값보다 작은 동안 반복 입력한 값이 배수라면 합계에 누적 출력

  33. [예제모음_17] 입력한 문자열의 종류 구분하기 • 예제설명 • 입력한 문자열에 대문자와 소문자 그리고 숫자가 각각 몇 개 입력되었는 지 세는 프로그램이다. 실행결과

  34. 01 #include <stdio.h> 02 03 int main() 04 { 05 char str[100]; 06 char ch; 07 08 int da_cnt = 0, so_cnt=0, digit_cnt=0; 09 int i; 10 11 printf("문자열을 입력(100자 이내) : "); 12 scanf("%s", str); 13 14 i = 0; 15 do { 16 ch = str[i]; 예제모음_17 소스 문자열 배열과 문자형 변수 선언 대소문자, 숫자 개수 초기화 문자열 입력받기 입력받은 문자열에서 공백이 나오기 전까지 각 문자의 종류를 구분 문자열에서 한 글자 추출

  35. 17 18 if(ch >= 'A' && ch <= 'Z') 19 da_cnt++; 20 if(ch >= 'a' && ch <= 'z') 21 so_cnt++; 22 if(ch >= '0' && ch <= '9') 23 digit_cnt++; 24 25 i++; 26 } while (ch != '\0'); 27 28 printf("대문자 %d개, 소문자 %d개, 숫자 %d개\n", da_cnt, so_cnt, digit_cnt); 29 } 예제모음_17 소스 A~Z면 대문자 개수 1개 증가 a~z면 소문자 개수 1개 증가 0~9면 숫자 1개 증가 다음 문자를 위해 i 값 증가(+1) 출력

  36. [예제모음_18] 입력한 숫자만큼 별표 출력 • 예제설명 • 0~9까지 입력한 숫자만큼의 별 모양을 출력하는 프로그램이다. • 5914를 입력하면 각 줄에 별을 5개, 9개, 1개, 4개를 출력한다. 실행결과

  37. 01 #include <stdio.h> 02 03 int main() 04 { 05 char str[100]; 06 char ch; 07 08 int i, k; 09 int star; 10 11 printf("숫자를 여러 개 입력 : "); 12 scanf("%s", str); 13 14 i = 0; 15 ch = str[i]; 예제모음_18 소스 문자열 배열과 문자형 변수 선언 정수형 변수 선언 문자열 입력 첫 문자 추출

  38. 16 while (ch != '\0') { 17 star = (int)ch - 48; 18 19 for(k=0 ; k<star ; k++) 20 printf("*"); 21 22 printf("\n"); 23 i = i + 1; 24 ch = str[i]; 25 } 26 } 예제모음_18 소스 문자가 있는 동안 실행 반복 문자를 숫자로 변환(문자 5는 아스키값 53이므로 숫자 4로 만들려면 48을 빼야한다) 별의 개수만큼 * 기호 출력 다음 줄로 넘어감 다음 문자를 알아내기 위해 i 값을 증가시킴

  39. 요약 • for 문과 같이 특정 동작의 반복을 위해 사용 • while 문의 형식 while 문 while ( 초기값) { 반복할 문장들; } • while 문과 거의 동일하지만, 조건과 상관없이 무조건 반복할 문장을 한 번은 수행 • do~while 문의 형식 do ~ while 문 do { 반복할 문장들; } while (조건식); • break 문 : 현재의 반복문을 무조건 탈출 • continue 문 : 무조건 블록의 끝으로 이동한 후 다시 반복문의 처음으로 돌아감 • return 문 : 현재 함수를 호출한 곳으로 돌아감. • main() 함수에서 return을 만나면 프로그램을 종료 기타 제어문

More Related