“Ngôn ng lp trình C và C++” Nguyn Trng Giang 1 Chng 6: Hàm 6.1. Khái nim − Hàm chia các nhim v tính toán ln thành các mô-đun nh hn. − u đim ca vic s dng hàm: • D dàng phát trin ng dng hn. • Cho phép s dng li các môđun đã cài đt trong các chng trình khác. • Tránh đc vic lp li các đon mã trong chng trình. 6.2. Cu trúc hàm <Kiu> TênHàm (danh_sách_tham_s) { Các khai báo & câu lnh } − Nu hàm không phi tr v giá tr nào, thì dùng kiu void. Nu không vit rõ kiu tr v là gì, kiu tr v mc đnh là int. − n cui ca phn thân hàm, cn phi tr li quyn điu khin cho ni mà ti đó hàm này đc gi. • Nu hàm tr li mt giá tr, cn dùng lnh return bthc; đ tr li giá tr ca biu thc cho hàm gi nó. • Nu hàm không tr li giá tr nào, cn phi có lnh return; 6.3. Tham s hàm − Cn c vào vai trò, tham s hàm đc chia ra làm hai loi: • Tham s hình thc: là tham s đóng vai trò “đi din” cho các tham s thc trong li gi hàm. • Tham s thc: là tham s thc s đc truyn ti hàm. − Ví d: trong đnh ngha hàm int max(int a, int b, int c) thì a, b, c là ba tham s hình thc, còn trong li gi hàm: max(2, 4, 6); thì 2, 4, 6 là các tham s thc s. − Cn c vào phm vi, tham s hàm đc chia thành: • Tham s cc b: là tham s có phm vi trong hàm cha nó. • Tham s toàn cc: là tham s có phm vi trong toàn b chng trình. “Ngôn ng lp trình C và C++” Nguyn Trng Giang 2 6.4. Truyn tham s cho hàm − Trong C và C++, tt c các tham s đu đc truyn theo tr. − Chú ý: Tham s hình thc ca hàm cng có th là con tr. Khi này tham s thc tng ng phi là mt đa ch bin hoc là tên ca bin mng. 6.5. Khai báo hàm − khai báo hàm, ngi ta phi s dng khai báo nguyên mu (còn đc gi là hàm nguyên mu). Các thông tin phi khai báo là: <kiu> TênHàm (danh sách kiu ca tham s); − Ví d: int power(int, int); 6.6. Hàm nguyên mu (prototype) − Hàm nguyên mu là mt dng khai báo hàm. − Thông báo cho trình biên dch bit kiu d liu hàm tr li, kiu, s lng và th t ca các tham s đc truyn cho hàm. − Không nht thit phi có hàm nguyên mu. Trình biên dch C s t to ra hàm nguyên mu ngm đnh nu lp trình viên không khai báo hàm nguyên mu. − u đim: d báo đc t trc v các li có th xy ra. − c tính quan trng ca hàm nguyên mu là kh nng chuyn kiu tham s. Vic chuyn kiu phi tuân theo quy tc: Chuyn t kiu d liu nh hn sang kiu d liu ln hn. Sau đây là bng sp xp các kiu d liu theo th t gim dn v kích thc: long double double float unsigned long int long int unsigned int int short char 6.7. Tp tiêu đ − Mi mt th vin chun ca C có mt tp tiêu đ. − Mt tp tiêu đ cha: • Phn khai báo ca tt c các hàm trong th vin “Ngôn ng lp trình C và C++” Nguyn Trng Giang 3 • Các đnh ngha v kiu d liu và hng dùng trong hàm đó. − Các tp tiêu đ này có phn m rng là .h − Lp trình viên có th t to các tp tiêu đ vi phn m rng ca tp là .h − khai báo tp tiêu đ cn dùng trong chng trình, ch th #include đc s dng. 6.8. Mt s hàm trong th vin chun Phn này gii thiu mt s hàm hay đc s dng trong th vin chun. Danh sách đy đ các hàm đc đa vào ph lc. Hàm thao tác vi ký t: Hàm nhn tham s là mt giá tr kiu int và tr v giá tr kiu int. Hàm tr v mt s khác không (ÚNG) nu tham s c tha mãn điu kin đc đt ra, hàm tr v giá tr không nu c không tha mãn điu kin. s dng các hàm này, chúng ta cn khai báo th vin ctype.h iscntrl(c) Kim tra xem c có phi là ký t điu khin không isdigit(c) Kim tra xem c có phi là s không isgraph(c) Kim tra xem c có phi là ký t in đc không (không bao gm ký t trng, space) islower(c) Kim tra xem c có phi là ký t thng không isprint(c) Kim tra xem c có phi là ký t in đc không (bao gm c ký t trng, space) ispunct(c) Kim tra xem c có phi là ký t in đc không (không bao gm ký t trng, ký t hoc s) isspace(c) Kim tra xem c có phi là khong trng không (khong trng gm: space, formfeed, newline, carriage return, tab, vertical tab) isupper(c) Kim tra xem c có phi là ký t vit hoa không. isxdigit(c) Kim tra xem c có phi là ký t thuc h đm c s 16 không isalnum(c) Là đúng nu isalpha(c) đúng hoc isdigit(c) đúng isalpha(c) Là đúng nu isupper(c) đúng hoc islower(c) đúng “Ngôn ng lp trình C và C++” Nguyn Trng Giang 4 Hàm toán hc: s dng các hàm này, chúng ta cn khai báo th vin math.h sin(x) sin(x) cos(x) cos(x) tan(x) tg(x) asin(x) arcsin(x) trong khong [-pi/2,pi/2], x trong khong [-1,1]. acos(x) arccos(x) trong khong [0,pi], x trong khong [-1,1]. atan(x) arctg(x) trong khong [-pi/2,pi/2]. exp(x) e x log(x) ln(x), x>0. log10(x) log 10 (x), x>0. pow(x,y) x y . Li s xy ra nu x=0 và y<=0, hoc nu x<0 và y không phi là s nguyên. sqrt(x) cn bc hai ca x, vi x>=0. ceil(x) S nguyên nh nht không nh hn x, tr v giá tr kiu double. floor(x) S nguyên ln nht không vt quá x, tr v giá tr kiu double. fabs(x) Giá tr tuyt đi ca |x| . các tham s đc truyn cho hàm. − Không nht thit phi có hàm nguyên mu. Trình biên dch C s t to ra hàm nguyên mu ngm đnh nu lp trình viên không khai báo hàm nguyên mu. − u đim:. các chng trình khác. • Tránh đc vic lp li các đon mã trong chng trình. 6.2. Cu trúc hàm <Kiu> TênHàm (danh_sách_tham_s) { Các khai báo & câu lnh } − Nu hàm không. vi, tham s hàm đc chia thành: • Tham s cc b: là tham s có phm vi trong hàm cha nó. • Tham s toàn cc: là tham s có phm vi trong toàn b chng trình. Ngôn ng lp trình C và