Tải bản đầy đủ (.pdf) (22 trang)

S nmc6 ham

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.04 MB, 22 trang )

Chương 6
Hàm (Function)
Presenter:

Nhập mơn về lập trình (C6)

Slide 1


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ó.

Nhập mơn về lập trình (C6)

Slide 2


Tổ chức chương trình C
Cấu trúc module
 Tiền xử lý:

Mơ tả module
#<Tiền xử lý>
Khai báo / định nghĩa
Hàm 1



Hàm 2

Hàm 3

Nhập mơn về 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 được chạy đầu tiên.
• Định nghĩa ngang cấp,
khơng lồng nhau.
• Được gọi mới chạy.

Slide 3



Tổ chức chương trình C
Project/solution : chương trình
 Lập trình theo module

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
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
files.c

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

Source files
Nhập môn về lập trình (C6)

Hàm 3

Slide 4


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

Nhập mơn về lập trình (C6)

Slide 5


Các vấn đề của 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 về lập trình (C6)

Slide 6



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 về lập trình (C6)

Slide 7


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.

Nhập mơn về lập trình (C6)

Slide 8


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>);

Nhập mơn về lập trình (C6)

Slide 9


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:

Định nghĩa hàm:

Tên hàm

Tham số hình thức
Kiểu trả về
Trị trả về

Nhập mơn về 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 đượ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

Nhập mơn về 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 đượ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

Nhập mơn về lập trình (C6)

Slide 12


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 :
(kiểu tên)
 Tham số thực :
(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)
 Tham số thực :
(&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)
 Tham số thực :
(tên)

Nhập mơn về lập trình (C6)

Slide 13


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:
/>
Nhập mơn về 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 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)
Trị tuyệt đối
log(a)
logarit cơ 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)
căn bậ 2 của a
double
Nhập mơn về lập trình (C6)

Slide 15


Ví dụ

Nhập mơn về lập trình (C6)

Slide 16


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 tố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ổ.
Nhập mơn về 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 = 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.

Nhập mơn về lập trình (C6)

Slide 18


Hàm đệ qui
Các hàm đệ qui

Nhập mơn về 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 chỉ chuyển một đĩa.
• Đĩa nhỏ nằm trên đĩa lớn.

A
Nhập mơn về lập trình (C6)

B

C
Slide 20


Phân tích và 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) được phân tích ra thành các 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 về lập trình (C6)

Slide 21


Hàm inline
 Hàm inline là hàm không dùng cách gọi thơng thường mà
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.
 Ví dụ

Nhập mơn về lập trình (C6)

Slide 22



Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×