1 / 39

CHƯƠNG 6 HÀM (FUNCTION)

CHƯƠNG 6 HÀM (FUNCTION). 1. KHÁI NiỆM. Hàm là một khối lệnh thực hiện một công việc hoàn chỉnh (module), được đặt tên và được gọi thực thi nhiều lần tại nhiều vị trí trong chương trình . Hàm còn gọi là chương trình con ( subroutine ). 1. KHÁI NiỆM. Có hai lọai hàm :

durin
Download Presentation

CHƯƠNG 6 HÀM (FUNCTION)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. CHƯƠNG 6HÀM (FUNCTION)

  2. 1. KHÁI NiỆM • Hàmlàmộtkhốilệnhthựchiệnmộtcôngviệchoànchỉnh (module), đượcđặttênvàđượcgọithựcthinhiềulầntạinhiềuvịtrítrongchươngtrình. • Hàmcòngọilàchươngtrình con (subroutine)

  3. 1. KHÁI NiỆM • Cóhailọaihàm: • Hàmthưviện: lànhữnghàmđãđượcxâydựngsẵn. Muốnsửdụngcáchàmthưviệnphảikhaibáothưviệnchứanótrongphầnkhaibáo #include. • Hàm do ngườidùngđịnhnghĩa.

  4. 1. KHÁI NiỆM • Hàmcóthểđượcgọitừchươngtrìnhchính (hàm main) hoặctừ 1 hàmkhác. • Hàmcógiátrịtrảvềhoặckhông. Nếuhàmkhôngcógiátrịtrảvềgọilàthủtục(procedure)

  5. 2. DẠNG TỔNG QUÁT CỦA HÀM • Dạng tổng quát của hàm do người dùng định nghĩa: returnType functionName(parameterList) { body of the function }

  6. 2. DẠNG TỔNG QUÁT CỦA HÀM • returnType: Kiểu dữ liệu của giá trị trả về bởi hàm. Nếu hàm không trả về giá trị thì returnType là void • functionName: Tên hàm. • parameterList: Danh sách các tham số hình thức phân cách nhau bởi dấu phẩy..

  7. VÍ DỤ int max(int a, int b) { if(a<b) return b; else return a; }

  8. 3. GỌI HÀM • Mộthàmkhiđãđịnhnghĩanhưngchúngvẫnchưađượcthựcthi, hàmchỉđượcthựcthikhitrongchươngtrìnhcómộtlờigọiđếnhàmđó. • Cúphápgọihàm: <Tên hàm>([Danh sách các tham số])

  9. VÍ DỤ • Gọihàmtrongchươngtrìnhchính: void main() { int a, b; cout<<” a=“; cin>>a; cout<<”b=“; cin>>b; cout<<”so lonnhat la:”<<max(a, b); }

  10. 4. NGUYÊN TẮC HOẠT ĐỘNG CỦA HÀM • Hàmcóthểđượcgọitừnhiềuchỗkhácnhautrongchươngtrình. • Khihàmđượcgọi, khốilệnhtươngứngcủahàmđượcthựcthi. • Saukhithựchiệnxong, quyềnđiềukhiểnđượctrảvềchochươngtrìnhgọi.

  11. intuscln(int a, int b) { a=abs(a); b=abs(b); while(a!=b) { if(a>b) a-=b; else b-=a; } return a;} 4. NGUYÊN TẮC HOẠT ĐỘNG CỦA HÀM void main() { int a, b, USC; cout<<“Nhapa,b: ”; cin>>a>>b; USC = uscln(a,b); cout<<“Uocchunglonnhat la: ”, USC); }

  12. 5. THAM SỐ HÌNH THỨC &THAM SỐ THỰC • Khihàmcầnnhậnđốisố (arguments) đểthựcthithìkhikhaibáohàmcầnkhaibáodanhsáchcácthamsốđểnhậngiátrịtừchươngtrìnhgọi. Cácthamsốnàyđượcgọilàthamsốhìnhthức.

  13. 5. THAM SỐ HÌNH THỨC &THAM SỐ THỰC • Ví dụ: int min(int a, int b) { if(a<b) return a; else return b; } Tham số hình thức

  14. 5. THAM SỐ HÌNH THỨC &THAM SỐ THỰC • Khi gọi hàm, ta cung cấp các giá trị thật, các giá trị này sẽ được sao chép vào các tham số hình thức và các giá trị thật được gọi là tham số thực. Ví dụ: Để tìm giá trị nhỏ nhất của 2 số 5 và 6 ta gọi hàm min(5, 6) Tham số thực min(int a, int b)

  15. 5. THAM SỐ HÌNH THỨC &THAM SỐ THỰC • Có hai cách truyền đối số vào tham số hình thức: • Truyền tham trị • Truyền tham biến.

  16. 5. THAM SỐ HÌNH THỨC &THAM SỐ THỰC • Truyềnthamtrị (call by value) • Sao chépgiátrịcủađốisốvàothamsốhìnhthứccủahàm. • Nhữngthayđổicủathamsốkhôngảnhhưởngđếngiátrịcủađốisố.

  17. 5. THAM SỐ HÌNH THỨC &THAM SỐ THỰC Ví dụ: void double(int a) { a = a*2; cout << “gia tri cua a trong ham double:“<< a; }

  18. 5. THAM SỐ HÌNH THỨC &THAM SỐ THỰC void main() { int a=40; double(a); cout << “\n Gia tri cua a trong ham main: ”; cout << “a = “ << a << endl; }

  19. void double( int a ) { a = a *2;// cout << “Gia tri cua a trong ham double:“<< a; } 5. THAM SỐ HÌNH THỨC &THAM SỐ THỰC void main() { int a=40; double(a); cout<<“\n Gia tri cua a trong ham main: ”; cout << “a = “ << a << endl; } 40 a=40*2; Gia tri cua a trong ham double: 80 Gia tri cua a trong ham main: 40

  20. 5. THAM SỐ HÌNH THỨC &THAM SỐ THỰC • Truyềnthamchiếu(call by reference) • Sao chépđịachỉcủađốisốvàothamsốhìnhthức. Do đó, nhữngthayđổiđốivớithamsốsẽcótácdụngtrênđốisố. Vídụ: Khigọihàmdouble(&a); Địachỉcủa a truyềnvàochothamsốhìnhthứccủahàm: double(int*b)

  21. 5. THAM SỐ HÌNH THỨC &THAM SỐ THỰC void double(int *b) { *b *= 2; cout << “Trong hàm double a = “ << *b; }

  22. 5. THAM SỐ HÌNH THỨC &THAM SỐ THỰC void main() { int a=40; double(&a); cout << “\Trong ham main : a = “ << a ; } void double( int *b) { *b *= 2; cout << “Tronghàm double a = “ << *b; } a 40 80 100 100 b Tronghàm double a = 80 Tronghàm main a = 80

  23. 5. THAM SỐ HÌNH THỨC &THAM SỐ THỰC void main() { int a = 20, b = 40; int *pa =&a, *pb=&b; swap(pa,pb); cout << “sau khi goi swap: “; cout << “a = “ << a << endl; cout << “b = “ << b << endl; }

  24. 5. THAM SỐ HÌNH THỨC &THAM SỐ THỰC void swap(int *a, int *b) { int temp; temp = *a; *a = *b; *b = temp; }

  25. 6. PROTOTYPE (NGUYÊN MẪU)CỦA HÀM • Dùngđểloạitrừviệcbắtbuộcphảiđịnhnghĩahàmtrướckhigọi. • Prototype khaibáogiốngnhư header củahàm Vídụ: Header : void dispayMessage() Prototype : void dispayMessage()

  26. 6. PROTOTYPE (NGUYÊN MẪU)CỦA HÀM • Chươngtrìnhbắtbuộcphảicó prototype củahàmhoặcphảibắtbuộcviếtđịnhnghĩacủahàmtrướckhigọi. • Saukhiđãsửdụng prototype củahàm, tacóthểviếtđịnhnghĩa chi tiếthàm ở bấtkỳvịtrínàotrongchươngtrình.

  27. VÍ DỤ #include <iostream.h>// Khai báo thư viện iostream.h int max(int x, int y);// khai báo nguyên mẫu hàm max void main()//hàm main (sẽ gọi các hàm thực hiện) { int a, b;// khai báo biến cout<<” Nhap vao 2 so a, b "; cin>>a>>b; cout<<”so lon nhat la:”<< max(a,b); } int max(int x, int y)// Định nghĩa hàm max(a,b) { return (x>y) ? x:y; }

  28. 6. Truyền mảng vào hàm • Khimộtmảngđượcdùngnhưmộtđốisốđểtruyềnchohàm, địachỉcủamảngđượctruyềnvàothamsốhìnhthức. • Nhưvậy, truyềnmảngvàohàmmặcđịnhlàtruyềnthamchiếu. • Nhữngthayđổiđếngiátrịcủacácphầntửmảngtrongthânhàmsẽảnhhưởngđếnmảnggốc.

  29. VÍ DỤ: void change(int a[], int n) { for(inti=0 ; i<n ; i++) if(a[i] < 0) a[i]=0; else a[i] = 1; }

  30. 7.Đối số của hàm main • Đối số truyền vào cho tham số của hàm main còn gọi là đối số dòng lệnh (command line arguments). • Hàm main có 2 tham số là argv và argc dùng để nhận các đối số dòng lệnh. int main(int argc, char *argv[]) { return 0;}

  31. 7.Đối số của hàm main • Tham số argc là một biến nguyên giữ số đối số có trong dòng lệnh. • Tham số argv là một mảng con trỏ char. Mỗi phần tử của mảng này trỏ đến một đối số dòng lệnh. Tất cả đối số dòng lệnh là chuổi (string).

  32. Ví dụ: int main(int argc, char *argv[]) { if(argc!=2) { cout << “Hello, “ << argv[1]; exit(1); } return 0; }

  33. 8. Lệnh return • 8.1. Cách dùng thứ nhất (kết thúc hàm) Có hai cách để kết thúc sự thực thi của hàm và trả điều khiển về chương trình gọi nó. • Khi lệnh cuối cùng có trong hàm được thực thi. • Khi hàm thực hiện câu lệnh return

  34. 8. Lệnh return Vídụ: In cácphầntửcủamảngđếnkhigặpphầntửcógiátrịâm int main() { int a[] = {3,2,1,0,-1,-2,-3}; for(inti=0 ; i<7 ; i++) { if(a[i] < 0) return 0; cout << a[i] << “\t”; } }

  35. 8. Lệnh return • 8.2. Cáchdùngthứhai (trảvềmộtgiátrị) • Lệnh return chophépmộthàmtrảvềmộtgiátrịchothànhphầngọinó. • Cúpháp: return biểuthức;

  36. 8. Lệnh return • Trongđóbiểuthứcchỉrõgiátrịđượctrảvềbởihàm. Kiểucủagiátrịnàyphảihợpvớikiểutrảvềcủahàm. • Trườnghợpkiểutrảvềcủahàmlàvoid,biểuthứcsaulệnh return rỗng: return;

  37. 9. ĐỆ QUI • Mộthàmđượcgọilàđệ qui nếumộtlệnhtrongthânhàmgọiđếnchínhhàmđó. • Vídụ: Định nghĩa giai thừa của một số nguyên dương n như sau: n!=1* 2 * 3 *…* (n-1) *n = (n-1)! *n (với 0!=1)

  38. 9. ĐỆ QUI int giaiThua(int n) { int gt; if(n==1) return(1); gt = giaiThua(n-1)*n; // goi de qui return gt; }

  39. 9. ĐỆ QUI unsigned intgiaithua_khongdequy(int n) { unsigned intkq, i; kq=1; for (i=2;i<=n;i++) kq=kq*i; return kq; }

More Related