Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 22 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
22
Dung lượng
1,04 MB
Nội dung
Chương Hàm (Function) Presenter: Nhập mơn lập trình (C6) Slide Learning outcomes L.O.4.1 – Xác định thành phần hàm L.O.4.2 – Hiện thực giải thuật dạng hàm L.O.4.3 – Giải thích kiểu truyền tham số C L.O.4.4 – Tổ chức chương trình lớn, gồm nhiều hàm L.O.3.5 – Hiện thực giải thuật đệ quy ngôn ngữ C hiểu nguyên tắc hoạt động Nhập mơn lập trình (C6) Slide Tổ chức chương trình C Cấu trúc module Tiền xử lý: Mô tả module # Khai báo / định nghĩa Hàm Hàm Hàm Nhập mơn lập trình (C6) • #include • #define Khai báo / định nghĩa: • • • • Hằng Biến Hàm/biến extern Mơ tả hàm Các hàm: • main chạy • Định nghĩa ngang cấp, khơng lồng • Được gọi chạy Slide Tổ chức chương trình C Project/solution : chương trình Lập trình theo module Mơ tả module # Khai báo / định nghĩa Hàm Hàm Hàm Mô tả module # Khai báo / định nghĩa Hàm Hàm Hàm Mô tả module # Khai báo / định nghĩa Chia nhiều files.c Hàm Hàm Hàm Mô tả module # Khai báo / định nghĩa Hàm Hàm Source files Nhập môn lập trình (C6) Hàm Slide Hàm ? Hàm phương tiện phân chia code module nhiều đơn vị nhỏ để dễ quản lý 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 Nhập mơn lập trình (C6) Slide Các vấn đề hàm Khai Khai báo báo hàm hàm extern Mô tả trước Hàm Định Định nghĩa nghĩa hàm hàm Định nghĩa biến Lệnh thực thi Gọi Gọi hàm hàm Truyền Truyền tham tham số số hàm hàm Trực tiếp Gián tiếp Trị Tham khảo Nhập mơn lập trình (C6) Slide 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;] } Nhập mơn lập trình (C6) Slide 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 định nghĩa module khác static (định nghĩa): hàm gọi cục module chứa hàm này, đối tượng extern Nhập mơn lập trình (C6) Slide 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ở trả trị expr Giá trị expr gởi nơi gọi hàm để sử dụng arglist : danh sách tham số hình thức (hàm khơng có tham số), tham số cách dấu phẩy (,) mô tả theo cú pháp sau : type parameter_name [=defaultvalue] defaultvalue giá trị gán mặc định cho tham số không cung cấp lúc gọi hàm Dạng thức gọi hàm: tên_hàm(); Nhập mơn lập trình (C6) Slide 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 tên tham số Ví dụ : Khai báo hàm: Định nghĩa hàm: Tên hàm Tham số hình thức Kiểu trả Trị trả Nhập mơn lập trình (C6) Slide 10 Khai báo/định nghĩa hàm Ví dụ gọi hàm Nếu hàm định nghĩa module khác, cần có khai báo extern trước gọi hàm Ví dụ : Tham số thực Nhập mơn lập trình (C6) Slide 11 Khai báo/định nghĩa hàm Ví dụ gọi hàm Nếu hàm định nghĩa module khác, cần có khai báo extern trước gọi hàm Ví dụ : Dùng header chứa extern Nhập mơn lập trình (C6) Slide 12 Truyền tham số Trong VC++, có cách truyền tham số cho hàm : • Truyền trị dạng biểu thức Tham số hình thức : (kiểu tên) Tham số thực : (biểu thức) • Truyền địa biến trỏ (kiểu*) Tham số hình thức : (kiểu* tên) Tham số thực : (&tên) • Truyền địa biến tham khảo (kiểu&) Tham số hình thức : (kiểu& tên) Tham số thực : (tên) Nhập mơn lập trình (C6) Slide 13 Hàm có sẳn C hổ trợ nhiều hàm thư viện hàm có sẳn: • • • • • stdio.lib conio.lib string.lib math.lib Có thể tham khảo trang web: https://www.tutorialspoint.com/c_standard_library/index.htm Nhập mơn lập trình (C6) Slide 14 Một số hàm toán học Các hàm toán học nằm thư viện math.lib Muốn sử dụng phải thực hiện: #include Một số hàm thường dùng: Tên hàm Diễn giải Trị trả abs(a) Trị tuyệt đối log(a) logarit số tự nhiên double sin(a) hàm sin double cos(a) hàm cos double tan(a) hàm tang double log10(a) log10(a) double pow(a1,a2) a1a2 double exp(a) ea double sqrt(a) bậ a double Nhập mơn lập trình (C6) Slide 15 Ví dụ Nhập mơn lập trình (C6) Slide 16 Hàm đệ qui Định nghĩa Hàm mà thân hàm có gọi lại gọi hàm đệ qui Có thể xem hàm đệ quy vòng lặp cấp độ hàm Một tốn giải vịng lặp 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ó hàm A, B mà hàm A có gọi hàm B hàm B có gọi lại A gọi đệ qui tương hổ Nhập mơn lập trình (C6) Slide 17 Hàm đệ qui Ví dụ tính exx Hàm ex tính theo triển khai Maclaurin: ex = + x1/1! + x2/2! + + xn-1/(n-1)! + xn/n! viết lại thành: ex(n) = ex(n-1) + xn/n! Ngoài ra, hàm xn n! tính đệ qui xn = xn-1 * x n!=(n-1)! * n Trong đó, n giảm dần lần gọi đệ qui ta cần kiểm soát trở hàm điều kiện ban đầu • ex(0) = : n=0 trả trị • x0 = : n=0 trả trị • 1! = : n=1 trả trị Nhập mơn lập trình (C6) Slide 18 Hàm đệ qui Các hàm đệ qui Nhập mơn lập trình (C6) Slide 19 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 chuyển đĩa • Đĩa nhỏ nằm đĩa lớn A Nhập mơn lập trình (C6) B C Slide 20 Phân tích giải thuật Hành động chuyển chồng n đĩa từ cột A sang cột C (cột B trung gian) phân tích thành hành động sau : • Chuyển chồng n-1 đĩa từ cột A sang cột B (cột C trung gian) • Chuyển đĩa từ cột A sang cột C • Chuyển chồng n-1 đĩa từ cột B sang cột C (cột A trung gian) Nhập mơn lập trình (C6) Slide 21 Hàm inline Hàm inline hàm không dùng cách gọi thơng thường mà chuơng trình dịch thay gọi hàm thân hàm vào chỗ gọi Ví dụ Nhập mơn lập trình (C6) Slide 22