L.O.4.3 – Giải thích được các kiểu truyền tham số trong C.. • dùng được nhiều nơi trong ứng dụng• che giấu đối với các hàm khác • Một phương thức thực hiện một tác vụ • Tên phương thức
Trang 1Nhập môn về lập trình (C6) Slide 1
Chương 6
Hàm (Function)
Chương 6
Hàm (Function)
Presenter:
Trang 2Learning 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ó
Trang 3Nhập môn về lập trình (C6) Slide 3
Tổ chức chương trình C
Cấu trúc module
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
• main được chạy đầu tiên.
• Định nghĩa ngang cấp, không lồng nhau.
• Được gọi mới chạy.
Trang 4Hàm là gì ?
đơ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
Trang 5• dùng được nhiều nơi trong ứng dụng
• che giấu đối với các hàm khác
• Một phương thức thực hiện một tác vụ
• Tên phương thức cần thể hiện tác vụ đó
Trang 6Hàm là gì ?
• Kỹ thuật chia để trị (divide-and-conquer)
ứng dụng mới
• Tái sử dụng phần mềm (reusability)
Trang 12Các vấn đề của hàm
Hàm
Khai báo hàm
Định nghĩa hàm
Trang 13-Tái sử dụng phần mềm
(reusability) -Tránh việc viết một cùng đoạn mã hai lần
-Dễ sửa lỗi và bổ sung tính năng về sau
Trang 14Các vấn đề của hàm
Trang 16Gọi hàm
void giaiptbac2(float a, float b, float c){
float delta = b*b - 4*a*c, x1, x2;
Trang 18Khai báo hàm
cần khai báo
phải khai báo (tùy từng môi trường lập trình)
Trang 19printf( "Enter three integers: ");
scanf("%d %d %d", &a, &b, &c);
printf( "Maximum is: %d\n", maximum (a, b, c));
}
Lưu ý:Có sự tương
ứng 1-1 giữa tham số hình thức và tham số thực
Trang 20Khai báo hàm
int maximum( int x, int y, int z);
void main() {
int a, b, c;
printf( "Enter three integers: ");
scanf("%d %d %d", &a, &b, &c);
printf( "Maximum is: %d\n", maximum (a, b, c));
Trang 21có kiểu giống nhau.
Trang 24Khai báo/định nghĩa hàm
Định nghĩa biến
}
Trang 25 static (định nghĩa): hàm chỉ được gọi cục bộ trong
Trang 26Khai báo/định nghĩa hàm
Trị trả về, tham số, gọi hàm
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ị
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 :
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
tên_hàm(<danh sách tham số thực>);
Trang 27Nhập môn về lập trình (C6) Slide 27
Khai báo/định nghĩa hàm
Ví dụ khai báo, định nghĩa
Khai báo/định nghĩa hàm
Ví dụ khai báo, định nghĩa
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:
Tham số hình thức Kiểu trả về
Trị trả về
Trang 28Khai báo/định nghĩa hàm
Ví dụ gọi hàm
Khai báo/định nghĩa hàm
Ví dụ gọi hàm
báo extern trước khi gọi hàm
Ví dụ :
Tham số thực
Trang 29Nhập môn về lập trình (C6) Slide 29
Truyền tham số
• Truyền trị dưới dạng một biểu thức
Tham số hình thức : (kiểu tên)
• Truyền địa chỉ bằng biến con trỏ (kiểu*).
Tham số hình thức : (kiểu* tên)
• Truyền địa chỉ bằng biến tham khảo (kiểu&).
Tham số hình thức : (kiểu& tên)
Trang 30Truyền tham số
Trang 32Truyền tham số
void giaiptbac2(float a, float b, float c){
float delta = b*b - 4*a*c, x1, x2;
Trang 34Truyền tham sô
void main()
{
giaiptbac2(2, 3*8-7, 4) ;
}
Trang 36Truyền tham sô
Trang 38Truyền tham sô
Trang 41Nhập môn về lập trình (C6) Slide 41
Hàm đệ qui
Ví dụ tính ex
Hàm đệ qui
Ví dụ tính ex
kiểm soát sự trở về của hàm bằng điều kiện ban đầu
Trang 43Nhập môn về lập trình (C6) Slide 43
Bài toán tháp Hà nội
• Mỗi lần chỉ chuyển một đĩa.
• Đĩa nhỏ nằm trên đĩa lớn.
Trang 44Phân tích và giải thuật
• 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).
Trang 45Nhập môn về lập trình (C6) Slide 45
Hàm inline
chuơng trình dịch sẽ thay gọi hàm bằng chính thân hàm vào chỗ gọi