CHƯƠNG 4 : HÀM CHƯƠNG TRÌNH VÀ CU TRÚC CHƯƠNG TRÌNH.
Chương trình viết bng ngôn ng C gm 1 dãy các hàm trong đó có 1 hàm chính là main và
chương trình bt đầu t main.
4.1/ Khái nim :
- Hàm là đon chương trình thc hin trn vn mt công vic nht định.
- Hàm chia ct vic ln bng nhiu vic nh. Nó giúp cho chương trình sáng sa, d sa,
nht là đối vi các chương trình ln.
4.2/ Khai báo hàm :
< Tên hàm > (< danh sách các đối s>)
< Khai báo biến >
{
< Khai báo thêm các biến >
< Các câu lnh >
}
- Trong đó :
+ Tên hàm : buc phi có.
+ Danh sách các đối s : không bt buc. Có hay không tu theo chúng ta định dùng hàm đó làm
gì.
+ Khai báo biến : Nếu Danh sách các đối s mà có thì phn này buc phi có. Còn nếu không thì
ngược li có th b qua.
+ Phn trong { } : là thân hàm. Du { } là bt buc đối vi mi hàm.
+ < Khai báo tham biến > : ngay sau { và gi là biến cc b dành riêng cho hàm s dng.
+ đối s luôn luôn truyn theo tr ( không thay đổi giá tr).
*Ví d : Hàm tính giai tha : S = x 1 /1! + x 2 /2! + ....+ x n / n!
Cách 1 :
#Include <stdio.h>
#Include <conio.h>
float giaithua ( int n)
{
int i ;float KQ ;
for ( KQ=1,i =1 ; i<=n ; i ++ )
KQ = KQ * i ;
return KQ ;
}
Void main ( ) /* khai báo biến toàn cc nếu có */
{
int n ;
printf ( " Nhp n = " ); scanf ( " %d ", &n);
printf ( " %d giai tha là % f ", n, giaithua (n) );
getch ();
}
Cách 2 :
#Include <stdio.h>
# Include<conio.h>
/*Khai báo prototype*/ mc đích hàm đặt đâu cũng được không cn trước hàm gi
float giaithua ( int n );
void main ()
{
}
/* Chi tiết hàm giai tha */
float giaithua ( int n)
{ ... return KQ };
Chú ý : - Kiu ca hàm cùng kiu giá tr cn tr v.
- Các hàm độc lp, không được lng nhau.
- Kiu void tên hàm () : không cn tr v giá tr nào, hiu ngm là tr v int.
- cách 1 : hàm trên không được gi hàm dười.
- cách 2 : các hàm gi được ln nhau.
4.3 / Phm vi ca biến :
- Chng hn trong ví d trên : biến n trong hàm main ( ) là cc b ca main() ch có tác dng
trong hàm main() => trong hàm giai tha có th khai báo biến n trùng biến n ca hàm main ( )
nhưng khác nhau và ch tn ti trong 1 hàm.
Ví d : float giaithua (m);
{
int n ; float KQ = 1.0;
for ( n = 1; n<= m ; ++n )....
4.4 / Ðệ quy : ging như trong Pascal : hàm gi đến chính nó.
* Ví d : Tính giai tha :
giaithua ( n );
int n ;
{
if ( n = 0 ) return ( i ) ;
else return (giaithua ( n - 1 )*n );
}
- Chương trình s dng đệ quy thì d hiu nhưng không tiết kim được b nh, không nhanh hơn.
4.5/ So sánh Lnh trong Pascal và trong lp trình ngôn ng C.
- Ging nhau : + C Pascal và C đều có chương trình con.
- Khác nhau :
Pascal Ngôn ng C
Có th tc Ch có hàm
Có hàm Hàm có th khai báo kiu void ( không tr v giá tr nào c, ging như th tc ca Pascal
- Khai báo hàm
function Tên hàm (<danh sách biến) < kiu hàm>;
< Khai báo các biến cc b>
Begin
< Các câu lnh>
end; < Kiu> tên hàm ( < danh sách các biến>)
{
< khai báo các biến cc b>
Các câu lnh
}
Khai báo biến
<tên biến >: < kiu biến>;
Ví d : Function max ( a, b : integer ) : integer
Begin
if a > b then max = a
Else max = b ;
End.
Tr v giá tr bng phép gán max = giá tr ( trong đó max là tên hàm ). Khai báo biến
< kiu biến> < tên biến >;
Ví d : int max ( a, b )
{
If ( a > b ) return ( a );
else return ( b );
}
- Tr v giá tr bng câu lnh return ( giá tr)
Kiu tham s
+ Tham biến : truyn theo địa ch
+ Tham tr : truyn theo giá tr.
Tham biến trong Pascal
Procedure swap ( var x, y : real );
Var temp : real ;
Begin
Temp : = x ; x : = y ; y : = temp;
End.
- gi hàm : swap ( a, b) Kiu tham s
+ Ch có tham tr.
+ Mun có tham biến bng cách đưa con tr hình thc tham biến trong C.
Tham biến trong C
Void swap ( float *x, float * y )
{
float temp ;
temp = * x ; *x = * y ; * y = temp ;
}
swap ( &s, &b )