1 / 20

강의 내용 ( 여섯 번째 )

강의 내용 ( 여섯 번째 ) . 오늘 강의 내용 (4 월 26 일 ) 중간 고사 문제 풀이 반복문 (for, do-while) 계속 Break, continue, return 문 예습 (5 월 3 일 ) 5 장 디버깅과 추적 6 장 배열의 표현과 선언 , 1 차원 배열 숙제 없음. 4.3 반복문 ( 계속 ). 4.3.2 for 문 for 문은 반복횟수를 미리 알 수 있는 경우에 사용되는 while 문의 특수한 경우라고 할 수 있다 . ■ 문법 statement1;

clancy
Download Presentation

강의 내용 ( 여섯 번째 )

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. 강의 내용(여섯 번째) • 오늘 강의 내용 (4월 26일) • 중간 고사 문제 풀이 • 반복문 (for, do-while) 계속 • Break, continue, return문 • 예습 (5월 3일) • 5장 디버깅과 추적 • 6장 배열의 표현과 선언, 1차원 배열 • 숙제 • 없음

  2. 4.3 반복문(계속) 4.3.2 for 문 • for 문은 반복횟수를 미리 알 수 있는 경우에 사용되는 while 문의 특수한 경우라고 할 수 있다. ■ 문법 statement1; for(init_expression; test_expression; update_expression) { statement2; } statement3;

  3. 4.3 반복문(계속) 4.3.2 for 문(계속) • if 문의 초기식(init_expression)과 반복 조건식(test_expression)은 콤마 연산자(,)에 의하여 여러 명령문을 복합문 형식으로 작성할 수도 있고, 세 가지 식을 모두 생략할 수도 있다. • 그러나 세미콜론(;)은 생략할 수 없다. for( ; ; ) //틀린 문장이 아님 • 반복 조건식(test_expression)과 갱신식(update_expression) 부분에 복수의 실행문을 콤마 연산자로 구분하여 포함시킬 수 있다. for (i=1, sum=0; i<100; sum+=i, i++) ; • 반복 조건식(test_expression)과 갱신식(update_expression) 부분은 생략될 수 있으나, 생략된 부분의 세미콜론(;)은 남아 있어야 한다. 이 경우, 그 역할은 while 문과 동일해진다. • 조건식 만으로 구성된 for 문 int i=1; for( ; i<100; ) i++; • 동일한 조건식의 while 문 int i=1; while(i<100) i++;

  4. 4.3 반복문(계속) • for 문에서 반복 조건식(test_expression)까지 생략하면, for 블록의 명령문 statement2는 무한히 실행된다. 이때 반복문에서 벗어나려면, goto 문이나 break 문을 사용해야 한다. for( ; ; ) { i++; if (i > 10) goto out; /* break 문을 사용하여 블록에서 이탈할 수도 있다.*/ } • for 루프는 while 루프의 특별한 경우 • 그 이유는 for 루프는 반복 횟수를 미리 알 수 있는 경우의 반복구조라고 했는데, while 루프에 반복 횟수를 정해주는 명령문을 첨가해주면 for 루프와 같은 효과를 얻을 수 있다. ■ 문법 statement1; init_expression; while(test_expression) { statement2; update_expression; } statement3;

  5. 4.3 반복문(계속) • 예제 4.14 • for 문의 사용 예 (1) 옳은 예 for (i=1, factorial=1; i<=n; ++i) factorial *= i; for (j=2; k%j==0; ++j) { printf("\n%d is a divisor of %d", j, k); sum += k; } (2) 틀린 예 for (i=0, i<n, i+=3) /* 세미콜론이 필요함 */ sum += i;

  6. 4.3 반복문(계속) • 예제 4.15 • 1부터 10까지의 합 계산(1) (1) 방법 1 int i, sum; sum=0; for (i=1; i<=10; ++i) sum += i; (2) 방법 2 int i, sum; i=1; sum=0; for(; i<=10; ++i) sum += i; (3) 방법 3 int i, sum; i=1; sum=0; for(; i<=10; ) sum += i++; ※(1), (2), (3)은 모두 같은 결과를 제공한다.

  7. 4.3 반복문(계속) • 예제 4.16 • 1부터 10까지의 합 계산(2) (1) 방법 1 int i, sum; for (sum=0, i=1; i<=10; sum+=i, ++i) ; /* 공문 */ printf("\n%d', sum); (2) 방법 2 int i, sum; for (sum=0, i=1; i<=10; ++i) sum += i; printf("\n%d", sum); ※(1), (2)는 모두 같은 결과를 제공한다.

  8. 4.3 반복문(계속) • 예제 4.17 • 1+2+3+4+5+6+7+8+9+10을 계산하는 프로그램 ☑ 프로그램 #include <stdio.h> #include <conio.h> void main() { int i, sum=0; for(i=1; i<=10; i++) { sum = sum+i; // sum += i와 같은 식 } // for문의 목표문이 한 문장일 경우는 {}를 생략해도 됨. printf("sum = %d \n", sum); getch(); } ꁼ 실행결과 sum = 55

  9. 4.3 반복문(계속) • 예제 4.19 • 1~100까지의 수들 중에서 홀수들의 합을 구하는 프로그램 ☑ 프로그램 #include <stdio.h> #include <conio.h> void main() { int i, sum=0; for(i=1; i<=100; i=i+2) sum += i; printf("sum = %d \n", sum); } ꁼ 실행결과 sum = 2500

  10. 4.3 반복문(계속) • 예제 4.20 ꁼ 실행결과 Input1: 10 Input2: 1 sum = 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 = 55 ☑ 프로그램 #include <stdio.h> #include <conio.h> void main() { int a, b, i, sum=0, max, min; printf(" Input1: "); scanf("%d", &a); printf("\n Input2: "); scanf("%d", &b); if(a>=b) { max = a; min = b; } else { max = b; min = a; } for(i=min; i<=max; i++) sum += i; printf("sum = "); for(i=min; i<max; i++) printf("%d + ",i); printf("%d = %d", i, sum); getch(); }

  11. 4.3 반복문(계속) • 예제 4.25 • 아스키코드 테이블(ASCII code table) 출력: 아스키코드값 32~127 사이에 일치하는 문자를 출력하는 프로그램을 작성하라. ☑ 프로그램 #include <stdio.h> #include <conio.h> void main() { int i; printf("/* ASCII 코드 값 */ \n"); for(i=32; i<128; i++) { if(i%8 ==0) /* i가 8의 배수인 경우 한 줄 띄운다 */ printf("\n"); /* %는 모튤연산자로서 8로 나눈 \ 나머지 */ printf("%4d %c", i, i);/* i를 10진수(%4d)와 문자(%c)\ 로 출력 */ } }

  12. 4.3 반복문(계속) • 예제4.26 • 입력된 문자의 아스키코드를 출력하는 프로그램을 작성하라.(단, Ctrl+Z 키를 누르면 루프를 빠져나올 것.) ☑ 프로그램 #include <stdio.h> #include <conio.h> void main(void) { char ch; int inv; while(ch!=EOF) { printf("\n\n\n\n\t\tAlphabet To ASCII : "); ch = getchar(); inv = (int)ch; getchar(); printf("\n\n\n\t\t\t%c = %d\n", ch, inv); } } ꁾ 입력 Alphabet To ASCII : A ꁼ 실행결과 A = 65

  13. 4.3 반복문(계속) • 예제 4.32 • 다음 식을 만족하는 A, B, C, D를 구하라. A B C + C A C --------- B D D ☑ 프로그램 #include <stdio.h> main(void) { int a, b, c, d, sum; for(a=1; a<10; a++) for(b=1; b<10; b++) for(c=0; c<10; c++) for (d=0; d<10; d++) { sum = (100*a+10*b+c) + (100*c+10*a+c); if (sum == 100*b+10*d+d) printf("A=%d B=%d C=%d D=%d\n", a, b, c, d); } } ꁼ 실행결과 A=1 B=3 C=2 D=4 A=2 B=6 C=4 D=8 A=2 B=9 C=6 D=2 A=5 B=7 C=1 D=2

  14. 4.3 반복문(계속) 4.3.3 do-while 문 • do-while 구조는 while 구조와 비슷하나 반복조건을 검사하는 위치가 다르다. ■ 문법 statement1; do { statement2; }while(test_expression); statement3;

  15. 4.3 반복문(계속) • 예제4.33 • do-while 문의 예(1) do{ sum += i; scanf("%d", &i); i--; }while(i > 0); • do-while 문의 예(2) int x; do{ x++; y=x*100; }while(x<100);

  16. 4.3 반복문(계속) • 예제4.34 • 이 5000을 초과하는 가장 작은 와 그때의 합을 구하는 프로그램을 do-while 문을 이용하여 작성하라. ☑ 프로그램 #include <stdio.h> void main(void) { int i=0, sum=0; do { i++; sum += i*i; }while(sum<=5000); printf("i=%d sum=%d\n", i, sum); } ꁼ 실행결과 i=14 sum=1015

  17. 4.3 반복문(계속) • 예제 4.35 • 무한 루프의 예 (1) while(1) { /* 다른 프로그램 문장들 */ } (2) do { /* 다른 프로그램 문장들 */ }while(1); (3) for( ; ; ) { /* 다른 프로그램 문장들 */ }

  18. 4.4 분기문 • 분기문(branching statements)은 제어의 흐름을 다른 곳으로 이동하는 문장으로서 break, continue, return 그리고 goto가 있다. 4.4.1 break 문 • break 문은 반복문이나 switch-case 문에서 완전히 빠져 나오고자 할 때 사용 • 예컨대, 반복문에서 조건에 관계없이 즉시 반복과정으로부터 이탈하고자 할 경우에는 break 문을 사용할 수 있다. • break 문이 실행되면, 자신이 포함된 코드 블록으로부터 실행흐름을 벗어나게 한다. • 가령, 블록 내에 블록이 내포된 중첩 블록 구조에서 break 문이 실행되면 모든 블록으로부터 단 한번에 빠져나오는 것이 아니라 자신이 포함된 하나의 블록만을 벗어하는 것이다. • 다시 말해서, 반복문이 중첩되어 있으면 break 문은 해당 반복 블록만을 벗어남에 따라 중첩된 반복 블록을 완전히 벗어나지 못한다. • 예제 4.36 for(i=0; i<10; i++) /* for 블록-1 */ { for(j=0; j<10; j++) /* for 블록-2 */ { if (k=0) { break; /* break 문은 for 블록-2의 실행을 중단하고 */ ........ /* 외부 for 블록-1로 제어를 옮긴다. */ } printf("%d",sum"); } }

  19. 4.4 분기문(계속) • 예제 4.37 /*else-if 문을 사용한 경우 */ if(ch == 'A') statement1; else if( ch == 'B') statement2; else statement3; /* switch-case 문을 사용한 경우 */ switch(ch) { case 'A': statement1; break; case 'B': statement2; break; default: statement3; }

  20. 4.4 분기문(계속) 4.4.4 return 문 • return 문은 반환식의 유무에 따라 다음과 같은 2가지 종류로 구분 ■ 문법 (1) return; (2) return(반환식); • return 문은 피호출 함수로부터 호출 함수에 제어를 넘겨주고, 동시에 호출문에 값을 반환하기 위해서 사용된다. • 이때 반환식이 없으면 0을 반환한다. 그러나 만약 반환식이 있으면 식의 자료형은 함수의 반환형과 일치해야 한다. int ifactorial(int n) { int i; int s=1; for(i=1; i<=n; i++) s=s*i; return s; }

More Related