Lecture 6.Pptx
Lecture 6.Pptx
Lecture 6: Functions
void main()
i
copy
{ 5
int a = 5, s =0;
s = func(a);
} int func(int i)
{ r = 1;
copy
12 return r;
}
Outlin
e
3 Recursive Functions
C
Overview
• Functions we
know
1 i n t main ( . ) ;
2 int printf(..); • Functions in
3 int scanf(.); math
4 float sqrt(.) f (x ) = sin(x
5 ;float floor(
)
6 .);float fabs
(.); g (x ) = x
2
C
Advantages of function (1)
• Advantages
• No need to repeat others work (reinvent the
wheel)
• No need to write things again and again
• Your codes become cleaner
C
Introdution of function (1)
C
Declaration of function (2)
C
Declaration of function (3)
C
Define a function (1)
C
Define a function (3)
long
func1(int n, int i)
{
…....
return r;
}
C
Define a function (4)
C
Define a function (4): separate declaration from
definition
1 long fact(int i)
;
2 i n t main ( )
16 else
3
4 { int i=5; lo
17 {
5 ng f=0;f=
18 w h i l e ( i >0)
6 fact(i);re
19 {
7 turn 0;
20 n = n∗ i ; i
8}
21 −−;
9l o n g f a c t ( i n t i
22 }
)
23 }
10 {
11 longn=1;
24 returnn;
12 if(i<0)
25 }
13 return 0;
14 e l s e i f ( i == 0 )
15 return 1;
C
Define a function (5): combine declaration with
definition
1 long fact(int i
)
2
3 { longn=1;
4 if(i<0)
5 return 0;
6 e l s e i f ( i == 0 ) 18 i n t main ( )
7 return 19 {
8 1;else 20 int i=5; lo
9 { 21 ng f=0;f=
10 while(i 22 fact(i);re
11 >0) 23 turn 0;
12 { 24 }
13 n = n∗ i ; i
14 −−;
15 }
16 }
17 } returnn;
C
Example-1
C
Example-2 (1)
C
Example-2 (2)
1 int isPalindr(int n
)
2
3 { intb=n, r=0;w
4 hile(b>0){
5 r = r ∗10+b%10;
6 b=b/10;
7 }
8 i f ( n == r ) {
9 return 1;
10 }else{
11 return 0;
12 }
13 }
14 int main ( ) {
15 int a=515;
16 if(isPalindr(a
17 )){printf( Palindrome number \n” , a ) ;
18 ”%d i s
19 }
20 } return 0;
C
Example-3: perfect number (1)
C
Example-3: perfect number (2)
C
Example-3: perfect number (3)
C
Example-3: perfect number (4)
int isPerfect(int n
1
2 )
3 {
4 i n t i = 0 , sum = 1 ; i n t
5 up = c e i l ( n / 2 . 0 ) ;
1 Give n 6 f o r ( i = 2 ; i < up ; i ++)
7 {
2 For i from 2 to n
8 i f ( n%i == 0 )
3 do check whether n is dividable {
by i 9 if yes, sum up 10 sum += i ;
4
11 }
5 Check wether sum equals to 12 }
n 13 i f ( sum == n )
14 return 1
6 Return 1 or 0 15 ;
16 else
return 0;
}
C
Example-3: perfect number
(5)
1 #i n c l u d e < s t d i o . h>
2 #i n c l u d e <math . h>
3i n t isPerfect(int n)
4{ 19 i n t main ( )
5 i n t i = 0 , sum = 1 ; 20 {
6 i n t up = c e i l ( s q r t ( n ) ) ; 21 int i=0;
7 f o r ( i = 2 ; i < up ; i ++) 22 f o r ( i = 2 ; i <= 3 0 0 ; i ++)
8 { 23 {
9 i f ( n%i == 0 ) 24 if(isPerfect(i)
)
10 { 25 {
11 sum += i ; 26 p r i n t f ( ”%d \n” i ) ;
,
12 } 27 }
13 } 28 }
14 i f ( sum == n ) 29 return 0;
15 return 1; 30 }
16 else
17 return 0;
18 }
C
Example-4: Armstrong number (1)
C
Example-4: Armstrong number (2)
1 #i n c l u d e < s t d i o . h>
20 i f ( s == n ) r
2 i n t i s Arms ( i n t n ) 21 eturn 1
3 { 22 ;
4 i n t nd = 0 , s = 0 , b = 0 ; 23 else
5 inta=n, i=0,t=0; 24 return 0;
6 while(a>0){ 25 }
7 a=a/10; 26
8 nd++; 27 i n t main ( )
9 } 28 {
10 a=n; 29 int i=1;
11 while(a>0){ 30 f o r ( i =1; i <100000; i ++)
12 b = a%10; 31 {
13 t=1; 32 i f ( i s Arms ( i ) == 1 )
14 f o r ( i = 0 ; i < nd ; i ++){ 33 {
15 t = t ∗b ; 34 p r i n t f ( ”%6d ” , i ) ;
16 } 35 }
17 s += t ; 36 }
18 a =a/10; 37 return 0;
19 } // end−w h i l e ( a ) }
C
Function definition: a summary
C
Parameter Transfer (1)
a i
int main() copy
{ 5 5
int a = 5, r =0;
r = fact(a);
}
long fact(int i)
{ r = 1;
r copy
r while(i > 0)
…
120 120
} return r;
C
Parameter Transfer (2)
C
Parameter Transfer (3)
C
Parameter Transfer (4)
• Now, let’s do it by a
function
1 #i n c l u d e < s t d i o . h>
2 v o i d swap ( i n t a , i n t b )
4
3 { i n t tmp = a ;
5 a = b ; b = tmp ; r
6 eturn ;
7}
8 i n t main ( )
9{
10 inta=5,b=8;
11 printf(”a= b = %d \n” , a , b ) ;
12 %d , swap ( a , b )
13 ; p r i n t f ( ” a = b = %d \n” , a , b ) ;
14 } %d ,
C
Parameter Transfer (5)
9{ 2 a=5,b=8
10 inta=5,b=8;
11 p r i n t f ( ” a = %d , b = %d \n” , a , b ) ;
12 swap ( a , b ) ;
13 p r i n t f ( ” a = %d , b = %d \n” , a , b ) ;
14 return 0;
15 }
C
Parameter Transfer (6)
int main() 8
{ 5 8
int a = 5, b = 8;
swap(a, b); 5
}
void swap(int a, int b)
{
a 5 b
8
b... 5 a 8
}
C
Function Calling again (1)
main()
C
Function Calling again (2)
C
Outlin
e
3 Recursive Functions
C
Recursive Function (1)
C
Recursive Function: how it works (2)
1 #i n c l u d e < s t d i o . h>
2 v o i d h a n o i ( i n t n , c h a r b1 , c h a r b2 , c h a r b3
)
3
4 { i f ( n == 1 )
5 {
6 p r i n t f ( ”%c −−−−> %c \n” , b1 , b3 ) ;
7 } e l s e i f ( n == 2 )
8 {
9 p r i n t f ( ”%c −−−−> %c \n” , b2 )
10 b1 , p r i n t f ( ”%c −−−−> %c ;
11 \n” , b1 , p r i n t f ( ”%c −−−−> b3 )
12 %c \n” , b2 , ;
13 }else{ b3 )
14 h a n o i ( n −1 , b1 , b3 , b2 ) ; p ;b3 )
15 r i n t f ( ”%c −−−−> %c \n” , b1 , ;
16 h a n o i ( n −1 , b2 , b1 , b3 ) ;
17 } }
C
Source code for Hanoi Tower (2)
19 i n t main ( )
20 {
21 intn=20;
22 printf(”Inputn:”);
23 s c a n f ( ”%d” , &n ) ;
24 h a n o i ( n , ’A ’ , ’B ’ , ’C ’ ) ;
25 }