Transcript
Functions
Function Overview
Read 3 numbers and print followings
– max(first, second )
– max(first, third)
– max(second, third)
2
#include <stdio.h> int main() { int a, b, c, m ; scanf( “%d%d%d”, &a, &b, &c ) ; if( a > b ) m = a ; else m = b ; printf( “%d\n”, m ) ; if( a > c ) m = a ; else m = c ; printf( “%d\n”, m ) ; if( b > c ) m = b ; else m = c ; printf( “%d\n”, m ) ; return 0; }
Function Overview
Yes, you can do!
3
#include <stdio.h> int main(void) { int a, b, c, m ; scanf( “%d%d%d”, &a, &b, &c ) ; m = max( a, b ) ; printf( “%d\n”, m ) ; m = max( a, c ) ; printf( “%d\n”, m ) ; m = max( b, c ) ; printf( “%d\n”, m ) ; return 0; }
int max( int m, int n ) { if( m > n ) return m ; else return n ; }
function
Function Definition
Yes, you can do!
4
#include <stdio.h> int max( int m, int n ) { if( m > n ) return m ; else return n ; } int main(void) { int a, b, c, m ; scanf( “%d%d%d”, &a, &b, &c ) ; m = max( a, b ) ; printf( “%d\n”, m ) ; ... }
Function Invocation : call ‘max()’ Function
Function Definition : definition of Function
return value type
function name
parameter
5
Function Definition
Return value type
– any type possible: char, int, float
– if there is no return value: void
Function name
– any name under naming convention
Parameters
– number of parameters: any number
– if there is no parameters: empty or void
Function Definition
프로그램 수행 순서
1. 프로그램일 시작되면, main() 함수가 실행된다.
2. 함수호출을 만나면, main()함수의 실행이 멈춘다.
3. Parameter가 함수쪽으로 복사된다.
4. 함수가 실행된다.
5. 함수에서 return을 만나면, main()으로 돌아온다.
6. main()이 계속 수행된다.
6
#include <stdio.h> int max( int m, int n ) { if( m > n ) return m ; else return n ; } int main() { int m ; int a = 1 ; m = max( a, 10 ) ; printf( “%d\n”, m ) ; }
Function Definition
참고사항
– 함수가 또 다른 함수를 호출할 수 있다.
– 함수가 함수를 호출했을 때 수행 순서는, main()이 함수를 호출했을 때와 유사하다.
7
#include <stdio.h> int max( int m, int n ) { if( m > n ) return m ; else return n ; } int max3( int a, int b, int c ) { int k = max( a, b ) ; k = max( k, c ) ; return k ; } int main() { int m ; m = max3( 3, 4, 10 ) ; printf( “%d\n”, m ) ; }
8
Function Definition
The Return Statement – Stop function execution and return value – If there is no return value, you may use omit “return”
#include <stdio.h> float abs(float x) { if(x>=0.0) return x; else return –x; } int main(void) { float y = -2.4 ; printf( “%f\n”, abs(y) ) ; return 0; }
#include <stdio.h> void PrintHello(void) { printf( “Hello, World\n” ) ; } int main(void) { PrintHello(); return 0; }
#include <stdio.h> void PrintHello(void) { printf( “Hello, World\n” ); return ; printf( “Hellooooooo\n” ); } int main(void) { PrintHello(); return 0; }
Example
What happens?
9
#include <stdio.h> int Sum( int k ) { int i, sum = 0 ; for( i = 1 ; i <= k ; i++ ) sum += i ; return sum ; } int main() { int i ; for( i = 0 ; i <= 10 ; i++ ) printf( “%d\n”, Sum(i) ) ; return 0; }
0 1 3 6 10 15 21 28 36 45 55
10
Function Prototypes
Function Prototypes
#include <stdio.h> double square(double x); int main(void) { int y=4; double result = square(y); printf(“square(%d) = %f\n”, y, result); return 0; } double square(double x) { return x*x ; }
#include <stdio.h> double square(double x) { return x*x ; } int main(void) { int y=4; double result = square(y); printf(“square(%d) = %f\n”, y, result); return 0; }
11
Function Prototypes
Function Prototypes
– Declaration saying “there is a function such as …”
– Every function should be declared before it is used!!!
– Format of declaration
• return-type function_name ( parameter type list );
[Ex] double square(double);
double square(double x) ;
Recursive Problem Solving
Sum : Iterative version
– What is the return value?
12
int sum ( int n ) { int sum = 0, k; for( k = 1 ; k <=n ; k++ ) sum += k; return sum; }
Recursive Problem Solving
Sum : Recursive version
– What is the return value?
13
int sum ( int n ) { if ( n == 1 ) return 1; else return n + sum( n – 1 ); }
1 if
1 if1
1 nna
na
n
n
14
Recursive Problem Solving
Sum : Recursive version
– 호출이 몇 번 일어날까?
int sum( int n ) ; int main() { printf( “%d\n”, sum(3) ) ; return 0; } int sum ( int n ) { if ( n == 1 ) return 1; else return n + sum( n – 1 ) ; }
main
sum(3)
sum(2)
sum(1)
return 1
return 2 +1
return 3 + 3 call sum(3)
call sum(2)
call sum(1)
15
Recursive Problem Solving
Sum : Recursive version
sum의 변수 n은 몇 개가 생성될까?
int sum( int n ) ; int main() { printf( “%d\n”, sum(3) ) ; return 0; } int sum ( int n ) { if ( n == 1 ) return 1; else return n + sum( n – 1 ) ; }
n sum(3)
n
n
sum(3)
sum(2)
n
n
n
sum(3)
sum(2)
sum(1)
main()
16
Recursive Problem Solving
factorial을 구하는 예제
[Ex] /* Recursive version */
int fact( int n)
{
if ( n == 1 )
return 1;
else
return n * fact ( n - 1 );
}
[Ex] /* Iterative version */
int fact( int n )
{
int result = 1;
for ( ; n > 1; --n )
result *= n;
return result;
}
1 if
1 if1
1 nna
na
n
n
17
Recursive Problem Solving
xn을 구하는 예제
[Ex] /* Recursive version */ int power ( int x, int n ) { if ( n == 0 ) return 1; else return x * power( x, n – 1 ); }
[Ex] /* Iterative version */ int power ( int x, int n ) { int pow = 1; for ( ; n > 0; n--) pow *= x; return pow; }
1 if1,
1 if,
nxnxa
nxnxa
18
Local variables and Global variables
Local variables
– All variables declared in a function including parameters
– meaningful and useful only in the function body
#include <stdio.h> void function() ; int main(void) { int i = 1, j = 0; function() ; printf(“main : i=%d, j=%d \n”, i, j); return 0; } void function() { int j=0, k = 1; printf(“in function : j=%d, k=%d \n”, j, k); }
Same variables or
Different variables with the same name?
19
Local variables and Global variables
Local variables
#include <stdio.h> void function() ; int main(void) { int i = 1, j = 0; function() ; printf(“main : i=%d, j=%d \n”, i, j); return 0; } void function() { int j=0, k = 1; printf(“in function : j=%d, k=%d \n”, j, k); i = 0 ; }
i j
main
j k
function
20
Local variables and Global variables
Local variables
– 함수의 파라미터도 해당 함수의 지역변수이다.
#include <stdio.h> void function(int) ; int main(void) { int i = 0, j = 0; function(i, j) ; printf(“i=%d, j=%d \n”, i, j); return 0; } void function(int i, int j) { int k = 0 ; i++ ; j++ ; printf(“i=%d, j=%d, k=%d \n”, i, j, k); }
i j
main
i j
function
k
21
Local variables and Global variables
Global variables
– All variables declared outside functions
– meaningful and useful in all program
#include <stdio.h> int g = 0; int main(void) { int i =0, j=0 ; ... } void function(int i) { int j = 3 ; g++ ; }
i j
main
i j
function
g
your program
22
Local variables and Global variables
Global variables
#include <stdio.h> void function(int i) ; int g = 0; int main(void) { int i =0, j=0 ; function(i) ; printf(“main : %d %d %d\n”, i, j, g); return 0; } void function(int i) { int j = 3 ; i++ ; printf(“in function : %d %d %d\n”, i, j, g); g++ ; }
i j
main
i j
function
g
your program
23
Invocation and Call-by-Value
Call-by-Value
– When you call a function, only VALUES are passed to the function
#include <stdio.h> void function(int k) { k ++ ; printf(“in function : k=%d \n”, k); } int main(void) { int i = 1, j = 0; function(i); printf(“main : i=%d, j=%d \n”, i, j); return 0; }
i j
main
k
function
Invocation and Call-by-Value
Call-by-value
24
int main() { int i = 0, j = 1, k = 2 ; int temp ; printf( “%d %d %d\n”, i, j, k ) ; temp = i ; i = j ; j = temp ; temp = j ; j = k ; k = temp ; printf( “%d %d %d\n”, i, j, k ) ; return 0; }
Can we replace this part with a function: Swap(x,y)
Invocation and Call-by-Value
Call-by-value
25
#include <stdio.h> void Swap( int i, int j ); int main() { int i = 0, j = 1, k = 2 ; printf( “%d %d %d\n”, i, j, k ) ; Swap( i, j ) ; Swap( j, k ) ; printf( “%d %d %d\n”, i, j, k ) ; return 0; }
void Swap( int i, int j ) { int temp ; temp = i ; i = j ; j = temp ; }
OK ? Why not ?
How to solve this?
top related