(학생용)+프로그래밍+및+실습 chap4 3

31
2009 년 1 년년 년년년년년 년 년년 Chap. 4-3 년년년 (while & do~while) Bo-Kug Seo ([email protected]) Soongsil Univ. MMS Lab.

Upload: guestc0587d1

Post on 23-Jun-2015

869 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: (학생용)+프로그래밍+및+실습 Chap4 3

2009 년 1 학기 프로그래밍 및 실습Chap. 4-3 조건문 (while & do~while)

Bo-Kug Seo ([email protected])Soongsil Univ. MMS Lab.

Page 2: (학생용)+프로그래밍+및+실습 Chap4 3

Logo

이 장에서 다룰 내용

while 문

do ~ while 문

기타 제어문

Page 3: (학생용)+프로그래밍+및+실습 Chap4 3

Logo

while 문 while 문의 실행 순서

– 조건식이 참인 동안 반복할 문장 수행– 중괄호가 끝나는 곳에서 조건식으로 돌아와 같은 동작 반복

Page 4: (학생용)+프로그래밍+및+실습 Chap4 3

Logo

while 문 for 문과 while 문의 사용 형식 비교

– 0~9 까지 출력하는 예

int i;for(i=0; i<10; i++){

printf(“%d \n”, i);}

int i;i = 0;

while(i<10){

printf(“%d \n”, i);i++;

}

① 초기값을 for 문 밖으로 이동② 증감식을 for 문의 끝으로 이동③ for 를 while 로

Page 5: (학생용)+프로그래밍+및+실습 Chap4 3

Logo[ 기본예제 4-19] for 문을 while 문으로 바꾸기01 #include <stdio.h>0203 int main()04 {05 int i;06 i=0;0708 while ( i < 5 ){09 printf("while 문을 공부합니다 .\n");10 i++;11 }12 }

초기값 지정

조건식

증감식

Page 6: (학생용)+프로그래밍+및+실습 Chap4 3

Logo

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

Page 7: (학생용)+프로그래밍+및+실습 Chap4 3

Logo[ 기본예제 4-20] for 문을 while 문으로 바꾸기01 #include <stdio.h>0203 int main()04 {05 int hap=0;06 int i;0708 [ ① ]09 while ( i<=10 ) {10 hap = hap + i;11 [ ② ]12 }1314 printf(" 1 에서 10 까지의 합 : %d \n", hap);15 }

초기값 지정

조건식

i = 1;

i ++; 증감식

Page 8: (학생용)+프로그래밍+및+실습 Chap4 3

Logo

while 문 무한루프를 위한 while 문

– 조건식이 무조건 참이어야 함– for( ; ; ) 와 동일한 역할– while(1) 로 표현

Page 9: (학생용)+프로그래밍+및+실습 Chap4 3

Logo[ 기본예제 4-21] while 문의 무한루프 만들기

무한루프

입력 값을 공백으로 분리

출력

01 #include <stdio.h>0203 int main()04 {05 int a, b;0607 while ( 1 )08 {09 printf (" 더할 두 수 입력 ( 멈추려면 Ctrl+C) : ") ;10 scanf("%d %d", &a, &b);1112 printf("%d + %d = %d \n", a, b, a+b);13 }14 }

Page 10: (학생용)+프로그래밍+및+실습 Chap4 3

Logo

[ 응용예제 ] 무한루프를 활용한 계산기 -1

01 #include <stdio.h>0203 int main()04 {05 int a, b;06 char ch;0708 [ ① ]09 {10 printf (" 계산할 두 수를 입력 ( 멈추려면 Ctrl+C) : ") ;11 scanf("%d %d", &a, &b);1213 printf(" 계산할 연산자를 입력하세요 : ");14 scanf("%*c%c", &ch);1516 [ ② ](ch)17 {

while(1)

무한루프

키보드로 숫자 2 개를 입력받음

연산자 입력

switch

Page 11: (학생용)+프로그래밍+및+실습 Chap4 3

Logo

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;

[ 응용예제 ] 무한루프를 활용한 계산기 -2

Page 12: (학생용)+프로그래밍+및+실습 Chap4 3

Logo

33 default :34 printf(" 연산자를 잘못 입력했습니다 . \n");35 }36 }37 }

[ 응용예제 ] 무한루프를 활용한 계산기 -3

Page 13: (학생용)+프로그래밍+및+실습 Chap4 3

Logo

do~while 문 do~while 문

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

Page 14: (학생용)+프로그래밍+및+실습 Chap4 3

Logo

[ 기본예제 4-22] do~while 문의 사용 예01 #include <stdio.h>0203 int main()04 {05 int a = 100;0607 while ( a == 200 )08 {09 printf ("while 문 내부에 들어 왔습니다 .\n") ;10 }1112 do {13 printf ("do ~ while 문 내부에 들어 왔습니다 .\n") ;14 } while ( a == 200 ) ;15 }

while 문 실행 : 조건식 먼저 판단

do~while 문 실행 :먼저 실행한 후에 조건식 판단

Page 15: (학생용)+프로그래밍+및+실습 Chap4 3

Logo

[ 응용예제 ] do~while 문의 사용 예 -1

01 #include <stdio.h>0203 int main()04 {05 int menu;0607 [ ① ]{08 printf("\n 손님 주문하시겠습니까 ? \n");09 printf("<1> 스테이크 <2> 스파게티 <3> 물 ");10 printf("<4> 빵 <5> 그만 시킬래요 ==> ");11 scanf("%d", &menu);1213 switch(menu)14 {15 case 1 : printf("# 스테이크 알겠습니다 .\n"); break;

do do 문이므로 한번은 꼭 수행

메뉴 출력

메뉴 선택

선택한 메뉴에 따라 주문을 접수

Page 16: (학생용)+프로그래밍+및+실습 Chap4 3

Logo

[ 응용예제 ] do~while 문의 사용 예 -2

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 }

while

선택한 메뉴가 5 가 아닌 동안 계속 수행

[ 위의 응용예제 ]

Page 17: (학생용)+프로그래밍+및+실습 Chap4 3

Logo

기타 제어문 break 문

– for, while, do~while 과 같은 반복문을 탈출할 때 사용– if 문과 결합하여 무한루프 안에 사용

• 무한루프를 돌다 특정 조건을 만족하면 프로그램을 종료하는 역할

Page 18: (학생용)+프로그래밍+및+실습 Chap4 3

Logo

[ 기본예제 4-23] break 문의 사용 예 01 #include <stdio.h>0203 int main()04 {05 int i;0607 for( i=1 ; i<=100 ; i++)08 {09 printf("for 문을 %d 회 실행했습니다 .\n", i);10 break;11 }1213 printf("for 문을 종료했습니다 .\n");14 }

100 번 반복

출력

무조건 for 문을 빠져나감

Page 19: (학생용)+프로그래밍+및+실습 Chap4 3

Logo

[ 기본예제 4-24] break 문의 사용 예 01 #include <stdio.h>0203 int main()04 {05 int a, b;0607 while ( 1 )08 {09 printf (" 더할 두 수 입력 ( 멈추려면 0 을 입력 ) : ") ;10 scanf("%d %d", &a, &b);1112 if (a == 0)13 break;1415 printf("%d + %d = %d \n", a, b, a+b);16 }

무한 루프

키보드로 숫자 두 개를 입력받음

입력값이 0 이면 무조건 for 문을 빠져나감

Page 20: (학생용)+프로그래밍+및+실습 Chap4 3

Logo

[ 기본예제 4-24] break 문의 사용 예1718 printf("0 을 입력해서 for 문을 탈출했습니다 .\n");19 }

Page 21: (학생용)+프로그래밍+및+실습 Chap4 3

Logo

[ 기본예제 4-25] break 문의 사용 예 01 #include <stdio.h>0203 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 }1415 }

무한루프

i 값 출력 후 1 을 더해줌

i 가 10 보다 작으면 반복문의 블록을 무조건 빠져나감

Page 22: (학생용)+프로그래밍+및+실습 Chap4 3

Logo

기타 제어문 break 문의 탈출 범위

– 현재 실행중인 반복문 블록을 무조건 빠져나오는 명령문– [ 기본예제 7-9] 의 수정

• i 값이 0 부터 시작하므로 첫번째 루프를 돌 때 프로그램 종료• 1~9 까지 출력하려면 부등호를 수정해야 함

for( ; ; ){ ...

if(i < 10){ break; }

}

??

Page 23: (학생용)+프로그래밍+및+실습 Chap4 3

Logo

[ 응용예제 ] break 문의 사용 예01 #include <stdio.h>0203 int main()04 {05 int hap = 0;06 int i;0708 for ( i=1 ; i<=100 ; i++)09 {10 hap = hap + i;1112 if (hap>=100)13 break;14 }1516 printf(" 1~100 의 합에서 최초로 1000 이 넘는 위치는 ? : %d\n", i);17 }

100 번 반복 실행

i 값을 hap 에 누적

hap 이 100 보다 크거나 같으면 블록을 빠져나감

블록을 빠져나간 순간의 i 값

Page 24: (학생용)+프로그래밍+및+실습 Chap4 3

Logo

기타 제어문 블록의 끝으로 가는 continue 문

– 블록의 끝으로 이동한 후 반복문을 처음부터 다시 수행

Page 25: (학생용)+프로그래밍+및+실습 Chap4 3

Logo

[ 기본예제 4-26] continue 문의 사용 예01 #include <stdio.h>0203 int main()04 {05 int hap = 0;06 int i;0708 for ( i=1 ; i<=100 ; i++ )09 {10 if ( i % 3 == 0 )11 continue;1213 hap += i;14 }1516 printf(" 1~100 까지의 합 (3 의 배수 제외 ): %d\n", hap);17 }

1 부터 100 까지 반복

나머지 값이 0 일 때 (3 의 배수 ) 블록의 끝으로 이동

3 의 배수가 아닌 i 값 누적

누적된 값 출력

Page 26: (학생용)+프로그래밍+및+실습 Chap4 3

Logo

기타 제어문 지정한 위치로 이동하는 goto 문

– 지정된 레이블 (label) 로 건너뛰게 하는 명령문– 프로그램의 흐름을 복잡하게 만드는 단점이 있음

Page 27: (학생용)+프로그래밍+및+실습 Chap4 3

Logo

[ 기본예제 4-27] goto 문의 사용 예01 #include <stdio.h>0203 int main()04 {05 int hap = 0;06 int i;0708 for( i=1 ; i<=100 ; i++)09 {10 hap += i;1112 if (hap > 2000)13 goto mygoto;14 }1516 mygoto :17 printf ("1 부터 %d 까지 합하면 2000 이 넘어요 .\n", i);18 }

1 부터 100 까지 반복

합계 누적

누적된 값이 2000 이 넘으면 mygoto 로 무조건 이동

mygoto 레이블

Page 28: (학생용)+프로그래밍+및+실습 Chap4 3

Logo

기타 제어문 호출한 곳으로 돌아가는 return 문

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

Page 29: (학생용)+프로그래밍+및+실습 Chap4 3

Logo

[ 기본예제 4-28] return 문의 사용 예01 #include <stdio.h>0203 int main()04 {05 int hap = 0;06 int i;0708 for( i=1 ; i<=100 ; i++)09 hap += i;1011 printf("1 부터 100 까지의 합은 %d 입니다 .\n", hap);12 return 0;1314 printf(" 프로그램의 끝입니다 .");15 }

1 부터 100 까지 반복합계 누적

출력

현재 함수를 호출한 곳으로 복귀

한 번도 출력되지 않음

Page 30: (학생용)+프로그래밍+및+실습 Chap4 3

Logo[ 예제모음 1] 원하는 배수의 합계를 구하는 계산기

실행결과

예제설명

① 입력한 두 수 사이의 합계를 구하되 , 원하는 배수를 선택하여 합계를 구하는 프로그램이다 .• 100~200 사이의 수 중에서 4 의 배수들의 합계를 구함

Page 31: (학생용)+프로그래밍+및+실습 Chap4 3

Logo

요약

① for 문과 같이 특정 동작의 반복을 위해 사용② while 문의 형식while 문

while ( 초기값 ){

반복할 문장들 ;}

① while 문과 거의 동일하지만 , 조건과 상관없이 무조건 반복할 문장을 한 번은 수행

② do~while 문의 형식

do ~ while 문

do{

반복할 문장들 ;} while ( 조건식 );

① break 문 : 현재의 반복문을 무조건 탈출② continue 문 : 무조건 블록의 끝으로 이동한 후 다시

반복문의 처음으로 돌아감③ return 문 : 현재 함수를 호출한 곳으로 돌아감 .

• main() 함수에서 return 을 만나면 프로그램을 종료

기타 제어문