3. while 문 while 문의 실행 순서 조건식이 참인 동안 반복할 문장 수행 중괄호가 끝나는 곳에서 조건식으로 돌아와 같은 동작 반복
4. while 문 for 문과 while 문의 사용 형식 비교 0~9까지 출력하는 예 int i; for(i=0; i<10; i++) { printf(“%d ”, i); } 초기값을 for 문 밖으로 이동 증감식을 for 문의 끝으로 이동 for를 while로 int i; i = 0; while(i<10) { printf(“%d ”, i); i++; }
5. [기본예제 4-19] 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 문을 공부합니다."); 10 i++; 11 } 12 } 초기값 지정 조건식 증감식
7. [기본예제 4-20] 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 ", hap); 15 } i = 1; 초기값 지정 조건식 i ++; 증감식
8. while 문 무한루프를 위한 while 문 조건식이 무조건 참이어야 함 for( ; ; )와 동일한 역할 while(1) 로 표현
9. [기본예제 4-21] 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 ", a, b, a+b); 13 } 14 }
10. [응용예제] 무한루프를 활용한 계산기 -1 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. [응용예제] 무한루프를 활용한 계산기 -2 18 case '+' : 19 printf("%d + %d = %d 입니다. ", a, b, a+b); 20 break; 21 case '-' : 22 printf("%d - %d = %d 입니다. ", a, b, a-b); 23 break; 24 case '*' : 25 printf("%d * %d = %d 입니다. ", a, b, a*b); 26 break; 27 case '/' : 28 printf("%d / %d = %f 입니다. ", a, b, a/(float)b); 29 break; 30 case '%' : 31 printf("%d %% %d = %d 입니다. ", a, b, a%b); 32 break;
12. [응용예제] 무한루프를 활용한 계산기 -3 33 default : 34 printf("연산자를 잘못 입력했습니다. "); 35 } 36 } 37 }
13. do~while 문 do~while 문 조건식을 확인하기 전에 ‘반복할 문장’을 수행 무조건 한 번은 실행됨 형식은 while 문과 동일하지만, 조건식이 아래에 위치
14. [기본예제 4-22] do~while 문의 사용 예 01 #include <stdio.h> 02 03 int main() 04 { 05 int a = 100; 06 07 while ( a == 200 ) 08 { 09 printf ("while 문 내부에 들어 왔습니다.") ; 10 } 11 12 do { 13 printf ("do ~ while 문 내부에 들어 왔습니다.") ; 14 } while ( a == 200 ) ; 15 } while 문 실행 : 조건식 먼저 판단 do~while 문 실행 :먼저 실행한 후에 조건식 판단
15. [응용예제] do~while 문의 사용 예 -1 01 #include <stdio.h> 02 03 int main() 04 { 05 int menu; 06 07 [ ① ]{ 08 printf("손님 주문하시겠습니까 ? "); 09 printf("<1> 스테이크 <2> 스파게티 <3> 물 "); 10 printf("<4> 빵 <5> 그만 시킬래요 ==> "); 11 scanf("%d", &menu); 12 13 switch(menu) 14 { 15 case 1 : printf("#스테이크 알겠습니다."); break; do 문이므로 한번은 꼭 수행 do 메뉴 출력 메뉴 선택 선택한 메뉴에 따라 주문을 접수
16. [응용예제] do~while 문의 사용 예 -2 16 case 2 : printf("#스파게티 알겠습니다."); break; 17 case 3 : printf("#물 알겠습니다."); break; 18 case 4 : printf("#빵 알겠습니다."); break; 19 case 5 : printf("안녕히 가세요."); break; 20 default : printf("잘못 주문하셨습니다."); 21 } 22 } [ ② ](menu != 5); 23 } [위의 응용예제] 선택한 메뉴가 5가 아닌 동안 계속 수행 while
17. 기타 제어문 break 문 for, while, do~while과 같은 반복문을 탈출할 때 사용 if 문과 결합하여 무한루프 안에 사용 무한루프를 돌다 특정 조건을 만족하면 프로그램을 종료하는 역할
18. [기본예제 4-23] 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 회 실행했습니다.", i); 10 break; 11 } 12 13 printf("for 문을 종료했습니다."); 14 } 100번 반복 출력 무조건 for 문을 빠져나감
19. [기본예제 4-24] 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) 13 break; 14 15 printf("%d + %d = %d ", a, b, a+b); 16 } 무한 루프 키보드로 숫자 두 개를 입력받음 입력값이 0이면 무조건 for 문을 빠져나감
20. [기본예제 4-24] break 문의사용 예 17 18 printf("0을 입력해서 for 문을 탈출했습니다."); 19 }
21. [기본예제 4-25] break 문의 사용 예 01 #include <stdio.h> 02 03 int main() 04 { 05 int i; 06 i = 0; 07 for ( ; ; ) 08 { 09 printf (" %d ", i) ; 10 i ++ ; 11 if (i < 10) 12 { break; } 13 } 14 15 } 무한루프 i 값 출력 후 1을 더해줌 i 가 10보다 작으면 반복문의 블록을 무조건 빠져나감
22. 기타 제어문 break 문의 탈출 범위 현재 실행중인 반복문 블록을 무조건 빠져나오는 명령문 [기본예제 7-9]의 수정 i 값이 0부터 시작하므로 첫번째 루프를 돌 때 프로그램 종료 1~9까지 출력하려면 부등호를 수정해야 함 for( ; ; ) { ... if(i < 10) { break; } } ??
23. [응용예제] 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 (hap>=100) 13 break; 14 } 15 16 printf(" 1~100의 합에서 최초로 1000이 넘는 위치는? : %d", i); 17 } 100번 반복 실행 i 값을 hap에 누적 hap이 100보다 크거나 같으면 블록을 빠져나감 블록을 빠져나간 순간의 i 값
24. 기타 제어문 블록의 끝으로 가는 continue 문 블록의 끝으로 이동한 후 반복문을 처음부터 다시 수행
25. [기본예제 4-26] 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", hap); 17 } 1부터 100까지 반복 나머지 값이 0일 때(3의 배수) 블록의 끝으로 이동 3의 배수가 아닌 i 값 누적 누적된 값 출력
26. 기타 제어문 지정한 위치로 이동하는 goto 문 지정된 레이블(label)로 건너뛰게 하는 명령문 프로그램의 흐름을 복잡하게 만드는 단점이 있음
27. [기본예제 4-27] 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이 넘어요.", i); 18 } 1부터 100까지 반복 합계 누적 누적된 값이 2000이 넘으면 mygoto로 무조건 이동 mygoto 레이블
28. 기타 제어문 호출한 곳으로 돌아가는 return 문 현재 실행중인 함수를 끝내고, 해당 함수를 호출한 곳으로 돌아가게 함 return 문을 만나면 프로그램이 종료되는 효과
29. [기본예제 4-28] 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 입니다.", hap); 12 return 0; 13 14 printf("프로그램의 끝입니다."); 15 } 1부터 100까지 반복 합계 누적 출력 현재 함수를 호출한 곳으로 복귀 한 번도 출력되지 않음