Presentation is loading. Please wait.

Presentation is loading. Please wait.

7. while 문의 흐름 제어.

Similar presentations


Presentation on theme: "7. while 문의 흐름 제어."— Presentation transcript:

1 7. while 문의 흐름 제어

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

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 [기본예제 7-1] for 문을 while 문으로 바꾸기 ①
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 } 초기값 지정 조건식 증감식

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

7 [기본예제 7-2] for 문을 while 문으로 바꾸기 ②
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 } i = 1; 초기값 지정 조건식 i ++; 증감식

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

9 [기본예제 7-3] while 문의 무한루프 만들기
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 } 무한루프 입력 값을 공백으로 분리 출력

10 [응용예제 7-4] 무한루프를 활용한 계산기 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 { while(1) 무한루프 키보드로 숫자 2개를 입력받음 연산자 입력 switch

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

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

13 02_do~while 문 do~while 문 조건식을 확인하기 전에 ‘반복할 문장’을 수행  무조건 한 번은 실행됨

14 [기본예제 7-5] do~while 문의 사용 예 ①
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 } while 문 실행 : 조건식 먼저 판단 do~while 문 실행 : 먼저 실행한 후에 조건식 판단

15 [응용예제 7-6] do~while 문의 사용 예 ②
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 { case 1 : printf("#스테이크 알겠습니다.\n"); break; do 문이므로 한번은 꼭 수행 do 메뉴 출력 메뉴 선택 선택한 메뉴에 따라 주문을 접수

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

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

18 [기본예제 7-7] break 문의 사용 예 ① 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 } 100번 반복 출력 무조건 for 문을 빠져나감

19 [기본예제 7-8] break 문의 사용 예 ② 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) break; 14 15 printf("%d + %d = %d \n", a, b, a+b); 16 } 무한 루프 키보드로 숫자 두 개를 입력받음 입력값이 0이면 무조건 for 문을 빠져나감

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

21 [기본예제 7-9] break 문의 사용 예 ③ 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 } 무한루프 i 값 출력 후 1을 더해줌 i 가 10보다 작으면 반복문의 블록을 무조건 빠져나감

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

23 [응용예제 7-10] break 문의 사용 예 ④ 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 ( ) break; 14 } 15 16 printf(" 1~100의 합에서 최초로 1000이 넘는 위치는? : %d\n", i); 17 } 100번 반복 실행 i 값을 hap에 누적 hap이 100보다 크거나 같으면 블록을 빠져나감 블록을 빠져나간 순간의 i 값

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

25 [기본예제 7-11] continue 문의 사용 예
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 } 1부터 100까지 반복 나머지 값이 0일 때(3의 배수) 블록의 끝으로 이동 3의 배수가 아닌 i 값 누적 누적된 값 출력

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

27 [기본예제 7-12] goto 문의 사용 예 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 } 1부터 100까지 반복 합계 누적 누적된 값이 2000이 넘으면 mygoto로 무조건 이동 mygoto 레이블

28 03_기타 제어문 호출한 곳으로 돌아가는 return 문 현재 실행중인 함수를 끝내고, 해당 함수를 호출한 곳으로 돌아가게 함

29 [기본예제 7-13] return 문의 사용 예 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 } 1부터 100까지 반복 합계 누적 출력 현재 함수를 호출한 곳으로 복귀 한 번도 출력되지 않음

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

31 예제모음_16 소스 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 변수 선언과 초기화 시작값, 끝값, 배수값 입력

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

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

34 예제모음_17 소스 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]; 문자열 배열과 문자형 변수 선언 대소문자, 숫자 개수 초기화 문자열 입력받기 입력받은 문자열에서 공백이 나오기 전까지 각 문자의 종류를 구분 문자열에서 한 글자 추출

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

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

37 예제모음_18 소스 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]; 문자열 배열과 문자형 변수 선언 정수형 변수 선언 문자열 입력 첫 문자 추출

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

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


Download ppt "7. while 문의 흐름 제어."

Similar presentations


Ads by Google