22
Computer Programming in C Computer Programming in C Chapter 4 Chapter 4 2004 년 년년년년 년년년년년 년년년년년년년년년년년년

Computer Programming in C Chapter 4

Embed Size (px)

DESCRIPTION

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

Citation preview

Page 1: Computer Programming in C Chapter 4

Computer Programming in C Computer Programming in C Chapter 4Chapter 4

2004 년 가을학기부산대학교

전자전기정보컴퓨터공학부

Page 2: Computer Programming in C Chapter 4

Computer Programming Chapter 2 2

44 장장 . . 함수와 프로그램 구조 함수와 프로그램 구조

목차1. Function2. Function 의 Parameter Passing 과 Return

Value3. Scope Rule4. Variable 의 종류에 따른 저장장소5. Static Variable6. Recursion7. Macro and Preprocessor

Page 3: Computer Programming in C Chapter 4

Computer Programming Chapter 2 3

1. Function : Example 1. Function : Example

Function 을 이용하지 않을 경우 Function 을 이용한 경우

sum=0; i=0; while(i<100) {

sum=sum+math[i];

i++;

}

mathAvg=sum/100.0;

sum=0; i=0;

while(i<120) {

sum=sum+chem[i];

i++;

}

chemAvg=sum/120.0;

mathAvg=average(math, 100);

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;

}

Page 4: Computer Programming in C Chapter 4

Computer Programming Chapter 2 4

1. Function : 1. Function : 기본 개념기본 개념

동일한 프로그램의 반복을 조직화 . 프로그램의 전체적인 구조를 체계적으로 . 반복적인 프로그램의 재사용

예 . printf, scanf 등이 모두 함수로 구현 Function 의 수행과정

A

B

C

X1

X2

반복적 수행반복적 수행

A

B

C

X FunctionFunction

함수의 호출

Page 5: Computer Programming in C Chapter 4

Computer Programming Chapter 2 5

1. Function : Syntax1. Function : Syntax

Function 의 기본적 Syntax Caller : Function 을 호출하는 부분

return_value = function_name (parameter1, parameter2, ... );

Callee : Function 자체 ( 호출되어 실행되는 부분 )type function_name (parameter1, parameter2, ... )type parameter1;

type parameter2;

. . .{

/* function body */}

Function Body 에는 반드시 return statement 를 포함

Page 6: Computer Programming in C Chapter 4

Computer Programming Chapter 2 6

1. Function : Example 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

Page 7: Computer Programming in C Chapter 4

Computer Programming Chapter 2 7

2. Function2. Function 의 의 Parameter Parameter PassingPassing Parameter Passing

함수를 호출할 때 , Formal Parameter 에 값을 지정하는 과정

Call by value 에 의한 방식으로 전달 같은 Type 으로 전달 Array 를 Parameter 로 전달할 경우

int mathScore[100];MathAverage=Average(100, mathScore );

float Average(N,score)int N, score[];

Array 의 전달

Page 8: Computer Programming in C Chapter 4

Computer Programming Chapter 2 8

2. Function2. Function 의 의 Return ValueReturn Value

Function 의 수행결과를 받는 방법 Function 의 Return Value Parameter : Pointer 를 이용 ( 나중에 설명 ) Global(External) Variable 의 결과

Return Value "return" statement 을 이용 Function 자체의 결과로 전달 return value 의 type 을 지정하여야 함

Page 9: Computer Programming in C Chapter 4

Computer Programming Chapter 2 9

3. Scope Rule3. Scope Rule

Variable 이 유효한 범위를 지정하는 법칙 Block 의 단위로 유효

float average(score, num)

int score[],num;

{

int x;

x=10;

while(i<num) {

int x;

x=20;

}

}

해당 Block 에서만 유효

Page 10: Computer Programming in C Chapter 4

Computer Programming Chapter 2 10

3. Scope Rule3. Scope Rule

각 종류별로 적용되는 Scope Parameter : 해당 함수 Block 내에서 유효 Local Variable : 선언된 Block 내에서 유효

예외 : Global Variable 함수 밖에서 선언된 Variable : 함수명 앞에 선언 File 내에서는 모두 유효 다른 File 에서 변수를 공유하려면 : "external" 선언 모든 함수명은 일종의 Global Variable 교재 p.76-77 의 Stack 에 대한 프로그램 참조

Page 11: Computer Programming in C Chapter 4

Computer Programming Chapter 2 11

4. Programming Assignment 4. Programming Assignment #6#6 Programming Assignment #3 와 같이 입력된

데이터 파일에서 각 학과별 평균성적을 출력하시오 . 단 . 각 학과별 학생의 수는 100명을넘지 않으며 , 다음의 함수를 반드시 이용하여프로그램하여야 한다 .

float Average(score, n)int score[];int n;

Page 12: Computer Programming in C Chapter 4

Computer Programming Chapter 2 12

5. Variable5. Variable 의 종류별 저장장소의 종류별 저장장소

Variable 의 종류에 따라 저장되는 장소 모든 Variable 에는 주기억 장치의 저장공간이 할당됨 Global Variable

정적인 기억공간 : 프로그램의 수행과 관계없이 일정한 공간을 할당받음

Local Variable 과 Function 의 Parameter Stack 이라는 방식의 기억공간에 동적인 기억공간 Stack : Last-In First-Out 방식의 동적인 기억공간

Page 13: Computer Programming in C Chapter 4

Computer Programming Chapter 2 13

5. Variable5. Variable 의 종류별 저장장소 의 종류별 저장장소 : : StackStack

주기억장치의 공간

Stack 으로 할당된 공간

Stack Bottom(=0)

0

4

8 Stack Top(=8)

In Out

Stack 에 입력되는 데이터의 크기에 따라 Stack Top(SP:Stack Point) 의 값이 변경 (In : SP+=SP, Out: SP-=4)

Page 14: Computer Programming in C Chapter 4

Computer Programming Chapter 2 14

5. Variable5. Variable 의 종류별 저장장소 의 종류별 저장장소 ::Local VariableLocal Variable 의 저장장소의 저장장소

float average(score,num)

int score[],num;

{

int i,x;

x=10;

while(i<num) {

int x;

x=20;

}

}

이미 사용중

Return address(average)

Parameter : score

Parameters : num

Local Variable : i

Local Variable : x

Local Variable : x

Page 15: Computer Programming in C Chapter 4

Computer Programming Chapter 2 15

6. Programming Assignment 6. Programming Assignment #7#7 두개의 삼각형이 겹치는 넓이를 구하는 함수를 프로그램하시오 . 단

삼각형의 세점이 일직선상에 있는 경우는 겹치는 넓이를 0 으로 하시오 .float intersectiongArea(triangle1, triangle2)

float triangle1[]; /* x1=triangle[0],y1=triangle[1],x2=triangle[2], */

float triangle2[]; /* y2=triangle[3],x3=triangle[4],y3=triangle[5] */

위의 함수를 이용하여 , 주어진 N 개의 삼각형중 가장 겹치는 넓이가 많은 삼각형쌍의 번호와 넓이를 출력하시오 . 삼각형의 데이터는 triang.dat 에 다음과 같이 주어집니다 .

N ( 삼각형의 수 )

x11, y11, x12, y12, x13, y13

. . .

xN1, yN1, xN2, yN2, xN3, yN3

Page 16: Computer Programming in C Chapter 4

Computer Programming Chapter 2 16

7. Static Variable7. Static Variable

주어진 Block 내에서만 유효한 변수 그러나 , Block 을 벗어나도 변수의 값이 남아

있는 특성 Local Variable 과 달리 Stack 에 저장되지 않음

예 . float functionAny() {

static int count=0;

. . .

count++;

}

Page 17: Computer Programming in C Chapter 4

Computer Programming Chapter 2 17

8. Recursion8. Recursion

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

FunnyStory( )

{

AGrandFatherAndGrandMother();

AVisitOfAYoungMan();

FunnyStory();

}

어떤 일이 일어날까 ?

Page 18: Computer Programming in C Chapter 4

Computer Programming Chapter 2 18

8. Recursion8. Recursion

Recursion : Function 이 다시 자신을 호출하는 경우 반드시 Termination Condition 이 있어야 함

사용 방식 type functionName(parameters) {

if(TerminalCodition) return value;

else {

. . .

functionName(parameters');

}

}

Recursion 을 종료하는 조건

Recursive CallParameter 의 값이 변경되어야 함

Page 19: Computer Programming in C Chapter 4

Computer Programming Chapter 2 19

8. Recursion : Sample8. Recursion : Sample

예제 1int RecursiveSum(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 */

int binarySearch(int values[],int low,int high,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);

}

Page 20: Computer Programming in C Chapter 4

Computer Programming Chapter 2 20

9. Macro and Preprocessor9. Macro and Preprocessor

'#' 으로 시작하는 문장 실행되는 문장이 아님 Compiler 에게 전처리를 요구하는 명령 #include : 지정된 File 을 지정된 위치에 삽입 #if condition

program#endif condition 이 만족되면 program 을 삽입 , 아니면 삭제

#define : Macro 의 정의

Page 21: Computer Programming in C Chapter 4

Computer Programming Chapter 2 21

9. Macro and Preprocessor9. Macro and Preprocessor

#define 으로 시작 문장 단순한 substitution( 대치 ) : Function 과 구별 Syntax

#define macroName expression* 여러 줄일 경우는 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)) 와 동일

Page 22: Computer Programming in C Chapter 4

Computer Programming Chapter 2 22

10. Programming Assignment 10. Programming Assignment #8#8 실수 Array 인 Values 의 평균을 구하는 다음과

닽은 Macro 를 작성하시오 .

#define Average(values,n,mean) . . .* 단 values 는 n 개의 값을 가지는 array 로 미리 선언되어 있고 , n 은 실수 값의 개수이며 , mean 은 계산된 결과의 평균이다 .

위의 Macro 를 이용하여 Programming Assignment 에서 주어지는 data 의 평균을 구하는 프로그램을 완성하시오 .