1 / 26

7 주 강의

7 주 강의. Functions. Functions. Top-down programming type function_name ( parameter_list ) { declarations statements } int factorial(int n) { int i, product = 1; for (i=2; i<= n; ++I) product *=i; return product; } fact = facorial(5) ;.

vesta
Download Presentation

7 주 강의

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. 7주 강의 Functions

  2. Functions • Top-down programming • type function_name (parameter_list) { declarations statements } • int factorial(int n) { int i, product = 1; for (i=2; i<= n; ++I) product *=i; return product; } • fact = facorial(5) ;

  3. • void nothing(void) { } /* do nothing */ • double twice(double x) { return (2.0 * x) ; } • int all_add(int a, int b) { int c; …. return(a+b+c) }

  4. Functions in traditional C • void f(a, b, c, x, y) int a, b, c; double x, y { …. }

  5. The return Statement • return_statement ::= return ; | return expression ; • return; return ++a; return (a * b); • double_absolute_value (double x) { if (x>=0.0) return x; else return –x; }

  6. Function Prototypes • Functions should be declared before they are used • double sqrt(double) • type function_name(parameter type list) ; • Identifier is optional (void f(char c, int i);  void f(char, int) • double sqrt(); /* traditional C style */ • 203 page 예제 설명

  7. Function declarations from the compiler’s viewpoint • function invocation, function definition, function declaration, function prototypes • Function storage class는 extern이나 static이어야지 auto나 register는 안 된다 • function definition이 있으면 function prototype은 없어도 되지만 쓰는 게 좋다. • 아무 선언 없이 f(x)를 쓰면 ‘int f();’로 보거나 오류 • int f(x) /* f(1)은 오류가 될 수 있다 */ double x; • int f(double x) /* 이 때는 int가 double로 바뀜 */

  8. An alternate style #include <stdio.h> #define N 7 void prn_heading(void) { …} long power(int m, int n) {…} … int main(void) {prn_heading(); …}

  9. Function invocation and call-by-value • main()에서 수행을 시작 • Function 이름을 만나면 invoked(called)된다 • Function의 argument 수와 type이 일치해야 • call-by-value를 사용

  10. Function invocation order • Each expression in argument list(actual parameters) is evaluated • 그 결과가 formal parameter(형식인자)의 형과 다르면 변환한다 • body를 수행한다 • return문을 수행한다 • return문이 expression을 가졌으면 수행하고, 형이 맞지 않으면 변환한다 • return에 아무 expression이 없으면 아무 결과도 안 돌려준다

  11. Developing a large program • 큰 프로그램이 다수 파일에 있을 때는 “make”를 사용 • #include “pgm.h” 현재 주소 검사, 시스템에 제공하는 곳 조사 • 210, 211 page를 설명

  12. Using assertions • #include <assert.h> #include <stdio.h> ….. c=f(a,b); assert(c>0); …. • NDEBUG

  13. Scope rules • 변수의 범위규칙 • { int a,b; …. {float b; …. } {float a; …. } }

  14. Using a block for debugging • { static int cnt = 0; print(“*** debug: cnt =%d v = %d\n”, ++cnt, v); • Local변수를 이용한 오류 찾기

  15. Storage Classes • auto, extern, register, static • auto ::: by default • automatic의 준말 • auto int a, b, c; auto float f; • ㅁuto는 block에 들어갈 때마다 기억장소를 배정, 초기화되지 않음

  16. extern • extern ::: variables declared outside a function • memory를 계속 유지, 초기화함(0으로), 전역변수(global variable) • 예 ::: 217page • extern int a=1, b=2; /*extern은 없어도 됨; 전통 C는 안 된다*/ int main(void) …

  17. extern for separate compiling • int a=1, b=2, c=3; int f(void) int main(void) { …} int f(void) { extern int a; …} • Side effect가 일어남 • extern double sin(double) /* function prototype */ • extern double sin(double x) { … }

  18. The storage class register • { register int i; for (i=0; I<LIMIT; ++i) { …} } • register i;  register int i • 값이 초기화되지 않음

  19. The storage class static • Void f(void) { static int cnt = 0; ++cnt; if (cnt % 2 ==0) ….. else ….. }

  20. Static external variable • void f(void) { … /* v is not available here */ } static int v; /* static external variable */ void g(void) { … /* v can be used here */ } • 221, 222 page 프로그램 설명

  21. Default initialization • automatic, register ::: 초기화 안 됨 • external, static ::: 초기화됨

  22. Recursion • int sum(int n) { if (n <= 1) return n; else return (n + sum(n-1)); }

  23. Factorial • int factorial(int n) { if (n <= 1) return 1; else return (n*factorial(n-1)); }

  24. Recursion and efficiency • recursion은 수행속도가 느리다. 그러나 개념적으로 보면 명확한 표현이 가능하다. 그리고 모든 recursion은 stack을 이용하면 iteration으로 바꿀 수 있다… • Factorial을 iteration으로 바꿀 수 있다 • 227page 설명

  25. Towers of Hanoi • 설명

  26. 숙제 • 학교에서 ::: 1, 3, 5, 15, 17, 22 • 집 ::: 7, 8, 11, 14, 16, 23, 26

More Related