THAM SỐ HÌNH THỨC &THAM SỐ THỰCy Khi hàm cần nhận đối số arguments để y Khi hàm cần nhận đối số arguments để thực thi thì khi khai báo hàm cần khai báodanh sách các tham số để nhận giá t
Trang 2Á Ệ
1 KHÁI NiỆM
y Hàm là một khối lệnh thực hiện một công
y Hàm là một khối lệnh thực hiện một côngviệ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 t ình con ( b ti )
y Hàm còn gọi là chương trình con (subroutine)
Trang 3khai báo #include.
Trang 4Á Ệ
1 KHÁI NiỆM
y Hàm có thể được gọi từ chương trình chính
y Hàm có thể được gọi từ chương trình chính(hàm main) hoặc từ 1 hàm khác
Trang 5Ổ Á Ủ À
2 DẠNG TỔNG QUÁT CỦA HÀM
y Dạng tổng quát của hàm do người dùng
y 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
}}
Trang 6Ổ Á Ủ À
2 DẠNG TỔNG QUÁT CỦA HÀM
y returnType: Kiểu dữ liệu của giá trị trả về
y 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
y functionName: Tên hàm
y parameterList: Danh sách các tham sốhình thức phân cách nhau bởi dấu phẩy
Trang 83 GỌI HÀM
y Một hàm khi đã định nghĩa nhưng chúng vẫn
y Một hàm khi đã định nghĩa nhưng chúng vẫnchưa được thực thi, hàm chỉ được thực thikhi trong chương trình có một lời gọi đếnhàm đó
Cú pháp gọi hàm
<Tên hàm>([Danh sách các tham số])
Trang 9VÍ DỤ
y Gọi hàm trong chương trình chính:
y Gọi hàm trong chương trình chính:
Trang 104 NGUYÊN TẮC HOẠT ĐỘNG CỦA HÀM
y Hàm có thể được gọi từ nhiều chỗ khácnhau trong chương trình
Trang 114 NGUYÊN TẮC HOẠT ĐỘNG CỦA HÀM
cout<<“Uoc chung lon
nhat la: ” USC);
Trang 125 THAM SỐ HÌNH THỨC &THAM SỐ THỰC
y Khi hàm cần nhận đối số (arguments) để
y Khi hàm cần nhận đối số (arguments) để
thực thi thì khi khai báo hàm cần khai báodanh sách các tham số để nhận giá trị từchương trình gọi Các tham số này được gọi
là tham số hình thức
là tham số hình thức.
Trang 13return b;
}
Trang 145 THAM SỐ HÌNH THỨC &THAM SỐ THỰC
y Khi gọi hàm ta cung cấp các giá trị thật các
y Khi gọi hàm, ta cung cấp các giá trị thật, cácgiá 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
hình thức và các giá trị thật được gọi là tham
Trang 155 THAM SỐ HÌNH THỨC &THAM SỐ THỰC
y Có hai cách truyền đối số vào tham số hình
y Có hai cách truyền đối số vào tham số hìnhthức:
T ề th t ị
y Truyền tham trị
y Truyền tham biến.
Trang 165 THAM SỐ HÌNH THỨC &THAM SỐ THỰC
y Truyền tham trị (call by value)
y Truyền tham trị (call by value)
số hình thức của hàm
y Những thay đổi của tham số không ảnhhưởng đến giá trị của đối số
Trang 19cout<< \n Gia tri cua a
trong ham main: ”;
cout << “a = “ << a <<
t o g a doub e a; }
endl;
} Gia tri cua a trong ham double: 80
Gia tri cua a trong ham main: 40
Trang 205 THAM SỐ HÌNH THỨC &THAM SỐ THỰC
y Truyền tham chiếu Truyền tham chiếu (call by reference) (call by reference)
số hình thức Do đó những thay đổi đốivới tham số sẽ có tác dụng trên đối số
Ví dụ: Khi gọi hàm double(&a);
Địa chỉ của a truyền vào cho tham số
hình thức của hàm: double(int *b) ( )
Trang 22b80
}
Trong hàm double a 80 Trong hàm main a = 80
Trang 23cout << “sau khi goi swap: “;
cout << “a = “ << a << endl;
cout << “b = “ << b << endl; }
Trang 256 PROTOTYPE (NGUYÊN MẪU)CỦA HÀM
y Dùng để loại trừ việc bắt buộc phải địnhnghĩa hàm trước khi gọi
y Prototype khai báo giống như header của
y Prototype khai báo giống như header củahàm
Ví d
Ví dụ:
Header : void dispayMessage()
Prototype : void dispayMessage()
Trang 266 PROTOTYPE (NGUYÊN MẪU)CỦA HÀM
y ChươngChương trìnhtrình bắt bắt buộc buộc phải phải có có prototype của hàm hoặc phải bắt buộc viết định nghĩa của hàm trước khi gọi.
y Sau khi đã sử dụng prototype của hàm, taụ g p yp ,
có thể viết định nghĩa chi tiết hàm ở bất kỳ
vị trí nào trong chương trình.ị g g
Trang 27VÍ DỤ
#include <iostream.h>// Khai báo thư viện iostream.h
á ê ẫ à
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 ";
Trang 286 Truyền mảng vào hàm
y Khi một mảng được dùng như một đối số
để truyền cho hàm, địa chỉ của mảng đượctruyền vào tham số hình thức
truyền vào tham số hình thức
y Như vậy, truyền mảng vào hàm mặc định
là truyền tham chiếu
là truyền tham chiếu
y Những thay đổi đến giá trị của các phần tử
ả t thâ hà ẽ ả h hưở đếmảng trong thân hàm sẽ ảnh hưởng đếnmảng gốc
Trang 307.Đối số của hàm main
y Đối số truyền vào cho tham số của hàmmain còn gọi là đối số dòng lệnh
(command line arguments)
(command line arguments).
y Hàm main có 2 tham số là argv và argc
dùng để nhận các đối số dòng lệnh
dùng để nhận các đối số dòng lệnh
int main(int argc, char *argv[]){ return 0;}
Trang 317.Đối số của hàm main
y Tham số argc là một biến nguyên giữ số
y Tham số argc là một biến nguyên giữ sốđối số có trong dòng lệnh
y Tham số argv là một mảng con trỏ char
y 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ònglệnh là chuổi (string)
Trang 32}
Trang 338 Lệnh return
Có hai cách để kết thúc sự thực thi củahàm và trả điều khiển về chương trìnhgọi nó
Khi lệ h ối ù ó t hà đượ
y Khi lệnh cuối cùng có trong hàm đượcthực thi
y Khi hàm thực hiện câu lệnh return
Trang 358 Lệnh return
y Lệnh return cho phép một hàm trả vềmột giá trị cho thành phần gọi nó
một giá trị cho thành phần gọi nó
y Cú pháp:
ể
Trang 368 Lệnh return
y Trong đó biểu thức chỉ rõ giá trị được trả
y Trong đó biểu thức chỉ rõ giá trị được trả
về bởi hàm Kiểu của giá trị này phảihợp với kiểu trả về của hàm
hợp với kiểu trả về của hàm
y Trường hợp kiểu trả về của hàm là void,
return;
Trang 379 ĐỆ QUI
y Một hàm được gọi là đệ qui nếu một lệnhtrong thân hàm gọi đến chính hàm đó
y Ví dụ: Định nghĩa giai thừa của một số
y Ví dụ: Định nghĩa giai thừa của một số
nguyên dương n như sau:
! 1* 2 * 3 * * ( 1) * ( 1)! * ( ới 0! 1)n!=1* 2 * 3 *…* (n-1) *n = (n-1)! *n (với 0!=1)