THAM SỐ HÌNH THỨC &THAM SỐ THỰC• Khi hàm cần nhận đối số arguments để thực thi thì khi khai báo hàm cần khai báo... THAM SỐ HÌNH THỨC &THAM SỐ THỰC• Khi gọi hàm, ta cung cấp các giá trị
Trang 1CHƯƠNG 6 HÀM (FUNCTION) HÀM (FUNCTION)
Trang 31 KHÁI NiỆM
• Có hai lọai hàm:
– Hàm thư viện: là những hàm đã đượcệ g ợxây dựng sẵn Muốn sử dụng các hàmthư viện phải khai báo thư viện chứa nóệ p ệtrong phần khai báo #include
– Hàm do người dùng định nghĩa.Hàm do người dùng định nghĩa
Trang 5body of the function
}}
Trang 62 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ị
Trang 104 NGUYÊN TẮC HOẠT ĐỘNG CỦA HÀM
Trang 114 NGUYÊN TẮC HOẠT ĐỘNG CỦA HÀM
}
else b-=a; }
return a;}
Trang 125 THAM SỐ HÌNH THỨC &THAM SỐ THỰC
• Khi hàm cần nhận đối số (arguments) để
thực thi thì khi khai báo hàm cần khai báo
Trang 145 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ácg ị y ợ ptham số hình thức và các giá trị thật đượcgọi là tham số thực.
Trang 165 THAM SỐ HÌNH THỨC &THAM SỐ THỰC
• Truyền tham trị (call by value)
– Sao chép giá trị của p g ị đối số vào tham
số hình thức của hàm
– Những thay đổi của tham số không ảnhNhữ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 <<
} endl;
} Gia tri cua a trong ham double: 80Gia tri cua a trong ham main: 40Gia tri cua a trong ham double: 80
Trang 205 THAM SỐ HÌNH THỨC &THAM SỐ THỰC
• Truyền tham chiếu (call by reference)
– Sao chép địa chỉ của đối số vào tham p ị
số hình thức Do đó, những thay đổi đốivới tham số sẽ có tác dụng trên đối số.ụ g
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 22Trong hàm double a = 8
} Trong hàm double a = 8Trong 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
Prototype : void dispayMessage()
Trang 266 PROTOTYPE (NGUYÊN MẪU)CỦA HÀM
ắ
• Chương trình bắt buộc phải 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.
• 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
#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 "; p , ;
Trang 286 Truyền mảng vào hàm
• 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
• Như vậy, truyền mảng vào hàm mặc địnhậy, y g ặ ị
là truyền tham chiếu
• Những thay đổi đến giá trị của các phần tửNhững thay đổi đến giá trị của các phần tửmảng trong thân hàm sẽ ảnh hưởng đếnmảng gốc
Trang 307.Đối số của hàm main
• Đố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).
• Hàm main có 2 tham số là argv và argc g g
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
– 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ộtp g y ộđối số dòng lệnh Tất cả đối số dònglệnh là chuổi (ệ (string g).)
Trang 358 Lệnh return
ề
• 7.2 Cách dùng thứ hai (trả về một giá trị)
– Lệnh return cho phép một hàm trả vềệ p p ộmột giá trị cho thành phần gọi nó
return biểu thức;
Trang 36– Trong đó biểu thức chỉ rõ giá trị đượctrả về bởi hàm Kiểu của giá trị này phải
ể
hợp với kiểu trả về của hàm
– Trường hợp kiểu trả về của hàm làg ợp
return;
Trang 379 ĐỆ QUI
• 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 đó
• Ví dụ: Định nghĩa giai thừa của một số
nguyên dương n như sau:g y g
n!=1* 2 * 3 *…* (n-1) *n = (n-1)! *n (với 0!=1)