Chapter 06 반복문
01 반복문의필요성 02 for문 03 while문 04 do~while문 05 기타제어문
반복문의의미와필요성을이해한다. 대표적인반복문인 for 문, while 문, do~while 문의작성법을 알아본다.
1.1 반복문의필요성 반복문 동일한내용을반복하거나일정한규칙으로반복하는일을수행할때사용 프로그램을좀더간결하고실제적으로작성할수있음. 반복문이필요한경우 동일한내용을반복할때 printf("********** \n"); printf("********** \n"); printf("********** \n"); printf("********** \n"); printf("********** \n"); 일정한규칙으로반복하는일을수행할때 int Sum = 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10; Page 4
2.1 for 문이란? for 문 특정한문장을일정한횟수만큼반복시킬때사용 for 문의기본형식과실행순서 for( 초기화 ; 조건식 ; 증감식 ) { ❶ ❷ ❹ } ❸ 명령문 1; 명령문 2; 초기화 : 변수의초깃값을지정하고, 반복문의시작을나타냄. 조건식 : 변숫값이조건식에맞으면계속반복하고아니면멈춤. 명령문 : 조건식이참이면명령문수행 증감식 : 증감식에따라변숫값을증가시키거나감소시킴. 실행순서 : ❶ ❷ ❸ ❹ ❷ ❸ ❹ 순으로실행 종료조건 : 조건식이거짓일때종료 Page 5
2.2 동일한내용을반복하는 for 문 동일한내용을반복하는 for 문 printf("********** \n"); printf("********** \n"); printf("********** \n"); printf("********** \n"); printf("********** \n"); int i for(i = 0; i < 5; i+ +) printf("********** \n"); Page 6
2.2 동일한내용을반복하는 for 문 01 #include <stdio.h> 02 03 int main(void) 04 { 05 int i; 06 07 for(i = 0; i < 5; i+ +) 08 printf("**********\n"); // * 10 개 09 10 return 0; 11 } Page 7
2.3 일정한규칙으로반복하는 for 문 일정한규칙으로반복하는 for 문 int sum = 1+2+3+4+5+6+7+8+9+10; int i, sum = 0; for(i = 1; i <= 10; i+ +) sum += i; Page 8
2.3 일정한규칙으로반복하는 for 문 01 #include <stdio.h> 02 03 int main(void) 04 { 05 int i, Sum = 0; 06 07 for(i = 1; i <= 10; i+ +) 08 Sum += i; 09 10 printf("1 부터 10 까지의합은 %d 다.\n", Sum); 11 12 return 0; 13 } Page 9
2.3 일정한규칙으로반복하는 for 문 일정한규칙으로반복하는 for 문 초깃값과조건은경우에따라다르게표현가능 Page 10
2.4 다양한 for 문의실행조건 01 #include <stdio.h> 02 03 int main(void) 04 { 05 int i; 06 07 for(i = 0; i < 5; i++) 08 printf("**********\n"); // * 10 개 09 printf("\n\n"); 10 11 for(i = 1; i < 10; i+=2) 12 printf("**********\n"); // * 10 개 13 printf("\n\n"); 14 15 for(i = 10; i > 0; i-=2) 16 printf("**********\n"); // * 10 개 17 18 return 0; 19 } Page 11
2.4 다양한 for 문의실행조건 01 #include <stdio.h> 02 03 int main(void) 04 { 05 int i; 06 for(i = 65; i <= 90; i+ +) 07 { 08 printf("%c ", i); 09 } 10 printf("\n"); 11 return 0; 12 } Page 12
2.4 다양한 for 문의실행조건 01 #include <stdio.h> 02 03 int main(void) 04 { 05 int i, j; 06 for(i = 0, j = 0; i < 3; i+ +, j+ +) 07 printf("i = %d, j = %d\n", i, j); 08 09 return 0; 10 } Page 13
2.5 다중 for 문 다중 for 문 for 문이 2 개이상인것 실행순서나형식은단일 for 문과같음. 다중 for 문의기본형식과실행순서 for( 초기화 ; 조건식 ; 증감식 ) { ❶ ❷ ❼ for( 초기화 ; 조건식 ; 증감식 ) { ❸ ❹ ❻ // for 문 (a) // for 문 (b) } } 명령문 1; ❺ Page 14
2.5 다중 for 문 01 #include <stdio.h> 02 03 int main(void) 04 { 05 int sum, i, j; 06 07 printf(" 다중 for 문예제입니다.\n"); 08 09 for(i = 1; i <= 3; i+ +) 10 { 11 for(j = 1; j <= 3; j+ +) 12 { 13 sum = i + j; 14 printf("%d + %d = %d\n", i, j, sum); 15 } 16 } 17 18 return 0; 19 } Page 15
2.5 다중 for 문 01 #include <stdio.h> 02 03 int main(void) 04 { 05 int i, j; 06 07 for(i = 1; i < 6; i+ +) 08 { 09 for(j = 0; j < i; j+ +) 10 { 11 printf("*"); 12 } 13 printf("\n"); 14 } 15 16 return 0; 17 } Page 16
2.5 다중 for 문 01 #include <stdio.h> 02 03 int main(void) 04 { 05 int i, j, count = 0; 06 07 for(i = 2; i <= 100; + +i) 08 { 09 for(j = 2; j < i; + +j) 10 { 11 if(i % j = = 0) 12 break; 13 } 14 15 if(j = = i){ 16 count+ +; 17 printf("%d%s", i, count % 5? " " : "\n"); 18 } 19 } 20 21 return 0; 22 } Page 17
2.6 실행문이없는 for 문 실행문이없는 for 문 for(j = 2; j < i; + +j) { if(i % j = = 0) break; } for(j = 2; i % j; j+ +); Page 18
2.6 실행문이없는 for 문 01 #include <stdio.h> 02 03 int main(void) 04 { 05 int i, j, count = 0; 06 07 for(i = 2; i <= 100; + +i) 08 { 09 for(j = 2; i % j; j+ +); 10 11 if(j = = i) 12 { 13 count+ +; 14 printf("%d%s", i, count % 5? " " : "\n"); 15 } 16 } 17 18 return 0; 19 } Page 19
3.1 while 문 while 문 횟수를정확하게알지는못하지만반복의조건을알고있을때사용 Page 20
3.1 while 문 while 문의기본형식 while( 조건식 ) { 명령문 1; 명령문 2; 증감식 } while 문과 for 문의비교 [while 문 ] 초기화 ; ❶ while( 조건식 ) ❷ { ❸ 명령문 1; ❹ 증감식 } [for 문 ] for( 초기화 ; 조건식 ; 증감식 ) { ❶ ❷ ❹ ❸ 명령문 1; 명령문 2; } Page 21
3.1 while 문 while 문과 for 문의초기화위치비교 for 문은괄호안에서초기화를하지만 while 문은 while 문외부에서초기화 for 문에서도 for 문시작전에초기화를할수있으나일반적이지않음. Page 22
3.1 while 문 01 #include <stdio.h> 02 03 int main(void) 04 { 05 int sum = 0, number = 1; 06 printf("1 에서 10 까지합을구합니다.\n"); 07 08 while(number <= 10) 09 { 10 sum += number; 11 number+ +; 12 } 13 14 printf(" 합은 %d 입니다.\n", sum); 15 return 0; 16 } Page 23
3.1 while 문 01 #include <stdio.h> 02 03 int main(void) 04 { 05 int i = 65; 06 07 while(i <= 90) 08 { 09 printf("%c ", i); 10 i++; 11 } 12 13 printf("\n"); 14 return 0; 15 } Page 24
3.1 while 문 01 #include <stdio.h> 02 03 int main(void) 04 { 05 int a = 1, sum = 0; 06 07 while(sum < 300) 08 { 09 sum += a; 10 a++; 11 } 12 13 printf(" 합이 300 이넘는 a 의최솟값은 %d 다. \n", a-1); 14 printf("sum = %d\n", sum); 15 16 return 0; 17 } Page 25
3.1 while 문 [ 여기서잠깐 ] 무한반복 (infinite loop) 종료되지않는반복문 무한반복에서빠져나오려면 break문을이용하거나 [shift]+[f5] 키를눌러디버깅을강제로종료 [for 문 ] for( ; ; ){ 문장 } [while 문 ] while(1){ 문장 } Page 26
4.1 do~while 문 do~while 문 일단 do 안에있는명령문을수행하고나중에 while문의조건식을비교 적어도한번은명령문을처리 마지막에세미콜론 (;) 을반드시넣어야함. do~while 문의기본형식 do { ❶ 명령문 1; }while( 조건식 ); ❷ Page 27
4.1 do~while 문 01 #include <stdio.h> 02 03 int main(void) 04 { 05 int sum = 0; 06 int number = 0; 07 08 printf("1 에서 10 까지합을구합니다.\n"); 09 10 do 11 { 12 number++; 13 sum += number; 14 } while(number < 10); 15 16 printf(" 합은 %d 입니다.\n", sum); 17 18 return 0; 19 } Page 28
4.1 do~while 문 01 #include <stdio.h> 02 03 int main(void) 04 { 05 int sum = 0, index = 0; 06 07 do 08 { 09 ++index; 10 sum = sum + index; 11 } while(sum < 1000); 12 13 printf(" 합이 1000 보다작은최대합은 = %d\n", sum - index); 14 printf(" 마지막으로더해지는자연수는 %d 다.\n", index - 1); 15 16 return 0; 17 } Page 29
5.1 goto 문 goto 문 명령문의실행순서를프로그래머가임의로변경하고자할때사용 실행순서를사용자가지정한라벨로이동 라벨은다른명령문앞에선언하며, 라벨다음에콜론 (:) 을넣음. 일반적으로 goto문은잘사용하지않음. goto 문의기본형식 goto 라벨 (Label); Page 30
5.1 goto 문 01 #include <stdio.h> 02 03 int main(void) 04 { 05 int sum = 0; 06 int number = 0; 07 08 while(1) 09 { 10 sum += number; 11 number++; 12 } 13 if(number > 10) goto ex1; 14 } 15 16 ex1: 17 printf("1 에서 10 까지합을구합니다.\n"); 18 printf(" 합은 %d 입니다.\n", sum); 19 20 return 0; 21 } Page 31
5.1 goto 문 01 #include <stdio.h> 02 03 int main(void) 04 { 05 int i, j; 06 for(i = 1; i <= 100; i+ +) 07 { 08 for(j = 1; j <= 9; j+ +) 09 { 10 printf("%d * %d = %2d\n", i, j, i*j); 11 if(i == 9 && j == 9) goto end; 12 } 13 } 14 15 end: 16 printf("goto문을빠져나왔습니다.\n"); 17 18 return 0; 19 } Page 32
5.2 break 문 break 문 반복문을빠져나오거나 switch~case문에서정상적인흐름을변경하기위해사용 주로 goto문대신에쓰는방법으로 switch~case문에서는거의필수적으로사용 Page 33
5.2 break 문 01 #include <stdio.h> 02 03 int main(void) 04 { 05 int i; 06 07 for(i = 1; i < 100; i+ +) 08 { 09 printf("%d ", i); 10 if(i > = 5) break; 11 } 12 13 printf("\nfor 문을빠져나왔습니다.\n"); 14 15 return 0; 16 } Page 34
5.3 continue 문 continue 문 반복문을빠져나오지않고해당반복문의처음으로프로그램의흐름을이동 1~10 에서홀수또는짝수만더하는예 int sum = 0, i; for(i = 1; i <=10; i + = 2) sum + = i; int sum = 0, i; for(i = 2; i <= 10; i + = 2) sum + = i Page 35
5.3 continue 문 continue 문을이용한 1~10 에서홀수또는짝수만더하는예 int sum = 0, i; for(i = 1; i <= 10; i+ +) { if(i % 2 = = 0) continue; // 짝수면아래문장을진행하지않고증감식으로이동한다. sum += i; } int sum = 0, i; for(i = 1; i <= 10; i+ +) { if(i % 2!= 0) continue; // 홀수면아래문장을진행하지않고증감식으로이동한다. sum += i; } Page 36
5.3 continue 문 01 #include <stdio.h> 02 03 int main(void) 04 { 05 int i, sum = 0; 06 07 for(i = 1; i <= 10; i+ +) 08 { 09 if(i % 2 = = 0) continue; 10 sum += i; 11 } 12 13 printf("1 부터 10 까지홀수의합은 %d 다.\n", sum); 14 return 0; 15 } Page 37
5.3 continue 문 1~20 에서 2 의배수이면서 3 의배수인수를제외하고출력하는프로그램 2 의배수인조건 (i % 2) == 0 3 의배수인조건 (i % 3) == 0 두조건 AND 연산 : 2 의배수이면서 3 의배수인조건 (i % 2) == 0 && (i % 3) == 0 위조건이만족되지않을때값을출력 for(i = 1; i <= 20; i+ +) { if((i % 2 = = 0) && (i % 3 = = 0)) continue; printf("%d", i); } Page 38
5.3 continue 문 01 #include <stdio.h> 02 03 int main(void) 04 { 05 int i, sum = 0; 06 07 for(i = 1; i <= 10; i+ +) 08 { 09 if((i % 2 == 0) && (i % 3 == 0)) continue; 10 printf("%d ", i); 11 } 12 13 printf("\n"); 14 return 0; 15 } Page 39
감사합니다. C 로시작하는컴퓨터프로그래밍개정 3 판