1 / 21

Computer Programming in C Chapter 4

Computer Programming in C Chapter 4. 2013 년 가을학기 부산대학교 정보컴퓨터공학부. 4 장 . 함수와 프로그램 구조. 목차 Function Function 의 Parameter Passing 과 Return Value Scope Rule Variable 의 종류에 따른 저장장소 Static Variable Recursion Macro and Preprocessor. 1. Function : Example. 1. Function : 기본 개념.

clarke
Download Presentation

Computer Programming in C Chapter 4

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. Computer Programming in C Chapter 4 2013년 가을학기 부산대학교 정보컴퓨터공학부

  2. 4장. 함수와 프로그램 구조 • 목차 • Function • Function의 Parameter Passing과 Return Value • Scope Rule • Variable의 종류에 따른 저장장소 • Static Variable • Recursion • Macro and Preprocessor

  3. 1. Function : Example

  4. 1. Function : 기본 개념 • 동일한 프로그램의 반복을 조직화. • 프로그램의 전체적인 구조를 체계적으로. • 반복적인 프로그램의 재사용 • 예. printf, scanf 등이 모두 함수로 구현 • Function의 수행과정 A A 함수의 호출 X1 X Function 반복적 수행 B B X2 C C

  5. 1. Function : Syntax • Function의 기본적 Syntax • Caller : Function 을 호출하는 부분 return_value = function_name (parameter1, parameter2, ... ); • Callee : Function 자체 (호출되어 실행되는 부분) typefunction_name (parameter1, parameter2, ... ) type parameter1; type parameter2; . . . { /* function body */ } • Function Body에는 반드시 return statement를 포함

  6. 1. Function : Example . . . chemAvg=average(chem, 120); phyAvg=average(phy, 150); } float average(score, num) int score[],num; { int i=0; float sum; sum=0.0; while(i<num) sum+=score[i++]; return sum/num; } Actual Parameters : 실제 값을 넘겨주는 Parameter 함수의 호출 Formal Parameters : 값을 넘겨 받기위한 변수 Return Type : return되는 값을 type Function Body

  7. 2. Function의 Parameter Passing • Parameter Passing • 함수를 호출할 때, Formal Parameter에 값을 지정하는 과정 • Call by value에 의한 방식으로 전달 • 같은 Type으로 전달 • Array를 Parameter로 전달할 경우 intmathScore[100]; MathAverage=Average(100, mathScore ); float Average(N,score) int N, score[]; Array의 전달

  8. 2. Function의 Return Value • Function의 수행결과를 받는 방법 • Function의 Return Value • Parameter : Pointer를 이용(나중에 설명) • Global(External) Variable의 결과 • Return Value • "return" statement을 이용 • Function 자체의 결과로 전달 • return value의 type을 지정하여야 함

  9. 3. Scope Rule • Variable이 유효한 범위를 지정하는 법칙 • Block의 단위로 유효 float average(score, num) int score[],num; { int x; x=10; while(i<num) { int x; x=20; } } 해당 Block에서만 유효

  10. 3. Scope Rule • 각 종류별로 적용되는 Scope • Parameter : 해당 함수 Block 내에서 유효 • Local Variable : 선언된 Block 내에서 유효 • 예외 : Global Variable • 함수 밖에서 선언된 Variable : 함수명 앞에 선언 • File 내에서는 모두 유효 • 다른 File에서 변수를 공유하려면 : "external" 선언 • 모든 함수명은 일종의 Global Variable

  11. 4. Variable의 종류별 저장장소 • Variable의 종류에 따라 저장되는 장소 • 모든 Variable에는 주기억 장치의 저장공간이 할당됨 • Global Variable • 정적인 기억공간 : 프로그램의 수행과 관계없이 일정한 공간을 할당받음 • Local Variable 과 Function의 Parameter • Stack 이라는 방식의 기억공간에 동적인 기억공간 • Stack : Last-In First-Out 방식의 동적인 기억공간

  12. 4. Variable의 종류별 저장장소 : Stack Out In Stack으로 할당된 공간 8 Stack Top(=8) 4 0 Stack Bottom(=0) 주기억장치의 공간 Stack 에 입력되는 데이터의 크기에 따라 Stack Top(SP:Stack Point)의 값이 변경 (In : SP+=SP, Out: SP-=4)

  13. Return address(average) Parameter : score Parameters : num Local Variable : i Local Variable : x Local Variable : x 4. Variable의 종류별 저장장소 : Local Variable의 저장장소 float average(score,num) int score[],num; { int i,x; x=10; while(i<num) { int x; x=20; } } 이미 사용중

  14. 5. Static Variable • 주어진 Block 내에서만 유효한 변수 • 그러나, Block을 벗어나도 변수의 값이 남아 있는 특성 • Local Variable과 달리 Stack에 저장되지 않음 예. float functionAny() { static int count=0; . . . count++; }

  15. 6. Recursion • 옛날에 어느 외로운 할아바지와 할머니가 살았습니다. 어느 날, 젊은 나그네가 와서 하루 밤만 재워달라고 하였습니다. 그래서 할아버지가 말씀하셨습니다. "여보게 젊은이, 우리 집에서 하루 밤을 자려면, 우리에게 재미있는 이야기를 해야 하네." 그 말을 들은 젊은 이는 그렇게 하겠다고 하고 집에 들어가 할머니가 차려 주시는 저녁을 맛있게 먹었습니다. 그리고, 젊은 이는 할아버지와 할머니에게 재미있는 이야기를 들려주기 시작하였습니다. "옛날에 어느 외로운 할아바지와 할머니가 살았습니다. 어느 날, 젊은 나그네가 와서 하루 밤만 재워달라고 하였습니다. 그래서 할아버지가 말씀하셨습니다. "여보게 젊은이, 우리 집에서 하루 밤을 자려면, 우리에게 재미있는 이야기를 해야 하네." 그 말을 들은 젊은 이는 그렇게 하겠다고 하고 집에 들어가 할머니가 차려 주시는 저녁을 맛있게 먹었습니다. 그리고, 젊은 이는 할아버지와 할머니에게 재미있는 이야기를 들려주기 시작하였습니다. " ... 이하 생략 • FunnyStory( ) { AGrandFatherAndGrandMother(); AVisitOfAYoungMan(); FunnyStory(); } 어떤 일이 일어날까 ?

  16. 6. Recursion • Recursion : • Function이 다시 자신을 호출하는 경우 • 반드시 Termination Condition이 있어야 함 • 사용 방식 type functionName(parameters) { if(TerminalCodition) return value; else { . . . functionName(parameters'); } } Recursion을 종료하는 조건 Recursive Call Parameter의 값이 변경되어야 함

  17. 6. Recursion : Sample 예제 1 intRecursiveSum(int values[], int n) { if(n==0) return 0; else return values[n-1] + RecursiveSum(values, n-1); } 예제 2 /* suppose that values are sorted by ascending order */ intbinarySearch(int values[],intlow,inthigh,int key) { int m; if(high<=low) then return -1; /* it means NOT FOUND */ m = (high+low)/2; if(values[m]==key) return m; else if(key < values[m]) return binarySearch(values,low,m-1,key); else return binarySearch(values,m+1,high,key); }

  18. 7. Macro and Preprocessor • '#'으로 시작하는 문장 • 실행되는 문장이 아님 • Compiler 에게 전처리를 요구하는 명령 • #include : 지정된 File을 지정된 위치에 삽입 • #if condition program #endif condition이 만족되면 program을 삽입, 아니면 삭제 • #define : Macro의 정의

  19. 7. Macro and Preprocessor #define PI 3.141 printf("%f",PI); #define DEBUG #ifdef DEBUG printf("This is a debug message."); #endif #define QUICK(x) printf("%s\n",x) QUICK("Hi!");

  20. 7. Macro and Preprocessor • #define으로 시작 문장 • 단순한 substitution(대치) : Function과 구별 • Syntax #define macroNameexpression * 여러 줄일 경우는 back slash(\)로 다음 줄과 연결 • 예 #define BUFSIZ 512 #define max(a,b) ((a)>=(b)?(a):(b)) . . . k=max(x+2,y*y); /* k=((x+2)>=(y*y)?(x+2):(y*y))와 동일

  21. 7. Macro and Preprocessor #define ADD1(x, y) x + y z=3*ADD1(5,6); z=3*ADD1(2+3,6); #define ADD2(x, y) (x) + (y) z=3*ADD1(2+3,6); #define ADD2(x, y) (x + y) z=3*ADD1(5,6);

More Related