Bài giảng Nhập môn về lập trình - Chương 6: Hàm (Function)

Chương 6  
Hàm (Function)  
Presenter:  
Slide 1  
Nhập môn về lập trình (C6)  
Learning outcomes  
L.O.4.1 – Xác định được thành phần của một hàm.  
L.O.4.2 – Hiện thực được giải thuật dưới dạng hàm.  
L.O.4.3 – Giải thích được các kiểu truyền tham số trong C.  
L.O.4.4 – Tổ chức được các chương trình lớn, gồm nhiều  
hàm.  
L.O.3.5 – Hiện thực được các giải thuật đệ quy bằng ngôn  
ngữ C và hiểu được nguyên tắc hoạt động của nó.  
Slide 2  
Nhập môn về lập trình (C6)  
Tổ chức chương trình C  
Cấu trúc module  
Tiền xử lý:  
Mô tả module  
• #include  
#<Tiền xử lý>  
• #define  
Khai báo / định nghĩa:  
• Hằng  
Khai báo / định nghĩa  
Hàm 1  
• Biến  
• Hàm/biến extern  
• Mô tả hàm  
Các hàm:  
Hàm 2  
• main được chạy đầu tiên.  
• Định nghĩa ngang cấp,  
không lồng nhau.  
Hàm 3  
• Được gọi mới chạy.  
Slide 3  
Nhập môn về lập trình (C6)  
Tổ chức chương trình C  
Project/solution : chương trình  
Mô tả module  
#<Tiền xử lý>  
Khai báo / định nghĩa  
Lập trình theo module  
Hàm 1  
Hàm 2  
Hàm 3  
Mô tả module  
#<Tiền xử lý>  
Khai báo / định nghĩa  
Hàm 1  
Hàm 2  
Hàm 3  
Mô tả module  
#<Tiền xử lý>  
Khai báo / định nghĩa  
Chia ra  
nhiều  
Hàm 1  
Hàm 2  
Hàm 3  
files.c  
Mô tả module  
#<Tiền xử lý>  
Khai báo / định nghĩa  
Hàm 1  
Hàm 2  
Hàm 3  
Source files  
Slide 4  
Nhập môn về lập trình (C6)  
Hàm là gì ?  
Hàm là phương tiện phân chia code của module ra nhiều  
đơn vị nhỏ hơn để dễ quản lý và sửa chữa.  
Một dự án/giải pháp/chương trình = tập hợp N module  
Một Module = tập hợp N hàm  
Slide 5  
Nhập môn về lập trình (C6)  
Các vấn đề của hàm  
Khai báo hàm  
extern  
Mô tả trước  
Hàm  
Định nghĩa hàm  
Định nghĩa biến  
Lệnh thực thi  
Gọi hàm  
Trực tiếp  
Gián tiếp  
Truyền tham số hàm  
Trị  
Tham khảo  
Slide 6  
Nhập môn về lập trình (C6)  
Khai báo/định nghĩa hàm  
Cú pháp :  
[extern|static] [ret_type] name ([arglist])  
{ [statements]*  
[return expr;]  
[statements]*  
[return expr;]  
extern | static  
Ret_type Name( arglist )  
}
{
}
Định nghĩa biến  
[statements]*  
[return expr;]  
[statements]*  
[return expr;]  
Slide 7  
Nhập môn về lập trình (C6)  
Khai báo/định nghĩa hàm  
Cú pháp  
Cú pháp :  
[extern|static] [ret_type] name ([arglist])  
{ [statements]*  
[return expr;]  
[statements]*  
[return expr;]  
}
extern (khai báo): hàm đã được định nghĩa trong module  
khác.  
static (định nghĩa): hàm chỉ được gọi cục bộ trong  
module chứa hàm này, không thể là đối tượng của extern.  
Slide 8  
Nhập môn về lập trình (C6)  
Khai báo/định nghĩa hàm  
Trị trả về, tham số, gọi hàm  
return expr; kết thúc hàm, trở về và trả trị là expr. Giá trị  
của expr sẽ được gởi về nơi gọi hàm để sử dụng.  
arglist : là danh sách các tham số hình thức (hàm có  
thể không có tham số), mỗi tham số được cách nhau bởi  
dấu phẩy (,) và được mô tả theo cú pháp như sau :  
type parameter_name [=defaultvalue]  
defaultvalue là giá trị gán mặc định cho tham số nếu  
không cung cấp lúc gọi hàm.  
Dạng thức gọi hàm:  
tên_hàm(<danh sách tham số thực>);  
Slide 9  
Nhập môn về lập trình (C6)  
Khai báo/định nghĩa hàm  
Ví dụ khai báo, định nghĩa  
Trong phần định nghĩa hàm (function definition), ta phải  
cung cấp đầy đủ tên hàm, kiểu trị trả về, số lượng tham số,  
kiểu và tên các tham số.  
Ví dụ :  
Khai báo hàm:  
Tên hàm  
Định nghĩa hàm:  
Tham số hình thức  
Kiểu trả về  
Trị trả về  
Slide 10  
Nhập môn về lập trình (C6)  
Khai báo/định nghĩa hàm  
Ví dụ gọi hàm  
Nếu hàm được định nghĩa trong module khác, cần có khai  
báo extern trước khi gọi hàm.  
Ví dụ :  
Tham số thực  
Slide 11  
Nhập môn về lập trình (C6)  
Khai báo/định nghĩa hàm  
Ví dụ gọi hàm  
Nếu hàm được định nghĩa trong module khác, cần có khai  
báo extern trước khi gọi hàm.  
Ví dụ :  
Dùng header chứa extern  
Slide 12  
Nhập môn về lập trình (C6)  
Truyền tham số  
Trong VC++, có 3 cách truyền tham số cho hàm :  
• Truyền trị dưới dạng một biểu thức.  
Tham số hình thức :  
Tham số thực :  
(kiểu tên)  
(biểu thức)  
• Truyền địa chỉ bằng biến con trỏ (kiểu*).  
Tham số hình thức :  
(kiểu* tên)  
(&tên)  
Tham số thực :  
• Truyền địa chỉ bằng biến tham khảo (kiểu&).  
Tham số hình thức :  
Tham số thực :  
(kiểu& tên)  
(tên)  
Slide 13  
Nhập môn về lập trình (C6)  
Hàm có sẳn  
C hổ trợ rất nhiều hàm trong các thư viện hàm có sẳn:  
• stdio.lib  
• conio.lib  
• string.lib  
• math.lib  
• . . .  
Có thể tham khảo trang web:  
Slide 14  
Nhập môn về lập trình (C6)  
Một số hàm toán học  
Các hàm toán học nằm trong thư viện math.lib. Muốn sử  
dụng phải thực hiện: #include <math.h>  
Một số hàm thường dùng:  
Tên hàm Diễn giải  
Trị trả về  
-------------------------------------------------------------------------  
abs(a)  
log(a)  
sin(a)  
cos(a)  
tan(a)  
log10(a)  
pow(a1,a2) a1a2  
Trị tuyệt đối  
logarit cơ số tự nhiên  
hàm sin  
hàm cos  
hàm tang  
double  
double  
double  
double  
double  
double  
double  
double  
log10(a)  
exp(a)  
sqrt(a)  
e a  
căn bậ 2 của a  
Slide 15  
Nhập môn về lập trình (C6)  
Ví dụ  
Slide 16  
Nhập môn về lập trình (C6)  
Hàm đệ qui  
Định nghĩa  
Hàm mà trong thân hàm có gọi lại chính nó thì được gọi là  
hàm đệ qui.  
Có thể xem hàm đệ quy như là một vòng lặp ở cấp độ  
hàm.  
Một bài toán có thể giải bằng vòng lặp thì có thể viết  
thành hàm đệ qui :  
Fn(x) = G(Fn-1(x))  
Ví dụ :  
n! = (n-1)!*n  
S(n) = S(n-1)+n  
Fibo(n) = Fibo(n-1) + Fibo(n-2)  
Nếu có 2 hàm A, B mà trong hàm A có gọi hàm B và trong  
hàm B có gọi lại A thì được gọi là đệ qui tương hổ.  
Slide 17  
Nhập môn về lập trình (C6)  
Hàm đệ qui  
x
x
Ví dụ tính e  
x
Hàm e tính theo triển khai Maclaurin:  
ex = 1 + x1/1! + x2/2! + ... + xn-1/(n-1)! + xn/n!  
có thể viết lại thành:  
ex(n) = ex(n-1) + xn/n!  
Ngoài ra, các hàm xn và n! cũng có thể tính đệ qui  
xn = xn-1 * x  
n!=(n-1)! * n  
Trong đó, n giảm dần mỗi lần gọi đệ qui cho nên ta cần  
kiểm soát sự trở về của hàm bằng điều kiện ban đầu  
• ex(0) = 1 : khi n=0 thì trả về trị 1.  
• x0 = 1 : khi n=0 thì trả về trị 1.  
• 1! = 1 : khi n=1 thì trả về trị 1.  
Slide 18  
Nhập môn về lập trình (C6)  
Hàm đệ qui  
Các hàm đệ qui  
Slide 19  
Nhập môn về lập trình (C6)  
Bài toán tháp Hà nội  
Chuyển chồng đĩa từ cột A sang cột C, cột B trung gian.  
• Mỗi lần chỉ chuyển một đĩa.  
• Đĩa nhỏ nằm trên đĩa lớn.  
A
B
C
Slide 20  
Nhập môn về lập trình (C6)  
Tải về để xem bản đầy đủ
pdf 22 trang myanh 20020 Free
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Nhập môn về lập trình - Chương 6: Hàm (Function)", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

File đính kèm:

  • pdfbai_giang_nhap_mon_ve_lap_trinh_chuong_6_ham_function.pdf