1. Trang chủ
  2. » Kỹ Thuật - Công Nghệ

Slide nmvlt c6

19 0 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Hàm
Trường học Trường Đại Học
Chuyên ngành Nhập môn lập trình
Thể loại Bài giảng
Thành phố Hà Nội
Định dạng
Số trang 19
Dung lượng 0,98 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Learning outcomes L.O.4.1 – Xác định được thành phần của một hàm.. L.O.4.3 – Giải thích được các kiểu truyền tham số trong C..  static định nghĩa: hàm chỉ được gọi cục bộ trong module

Trang 1

Chương 6

Hàm (Function)

Presenter:

Trang 2

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ó

Trang 3

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 1

Hàm 2

Hàm 3

 Tiền xử lý:

• #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

Trang 4

Tổ chức chương trình C

Project/solution : chương trình

 Lập trình theo module

Source file

#<Tiền xử lý>

Mô tả module Khai báo / định nghĩa

Hàm 1 Hàm 2 Hàm 3

#<Tiền xử lý>

Mô tả module Khai báo / định nghĩa

Hàm 1 Hàm 2 Hàm 3

#<Tiền xử lý>

Mô tả module Khai báo / định nghĩa

Hàm 1 Hàm 2 Hàm 3

#<Tiền xử lý>

Mô tả module Khai báo / định nghĩa

Hàm 1 Hàm 2 Hàm 3

Chia ra nhiều cpp

Trang 5

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 Module = tập hợp N hàm

Trang 6

Các vấn đề của hàm

Hàm

Khai báo hàm

Định nghĩa hàm

Gọi hàm

Truyền tham số hàm

 Trực tiếp

 Gián tiếp

 Trị

 Tham khảo

 Định nghĩa biến

 Lệnh thực thi

 extern

 Mô tả trước

Trang 7

Khai báo/định nghĩa hàm

 Cú pháp :

[extern|static] [ret_type] name ([arglist])

{ [statements]*

[return expr;]

[statements]*

[return expr;]

Định nghĩa biến

[statements]*

[return expr;]

[statements]*

[return expr;]

{

Trang 8

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

Trang 9

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

Trang 10

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:

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

Trị trả về

Trang 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ụ :

Trang 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

• Truyền địa chỉ bằng biến con trỏ (kiểu*)

• Truyền địa chỉ bằng biến tham khảo (kiểu&)

 Tham số hình thức : (kiểu& tên)

Trang 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

Tham khảo HELP của VC++

Trang 14

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

 Một bài toán muốn xử lý theo dạng hàm đệ qui phải đưa

được về dạng :

Fn(x) = G(Fn-1(x))

Ví dụ : n! = n * (n-1)!

S(n) = n + S(n-1) 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ổ

Trang 15

Hàm đệ qui

Ví dụ tính ex

 Hàm ex tính theo triển khai Maclaurin:

e x = 1 + x 1 /1! + x 2 /2! + + x n-1 /(n-1)! + x n /n!

có thể viết lại thành:

e x (n) = e x (n-1) + x n /n!

 Ngoài ra, các hàm xn và n! cũng có thể tính đệ qui

x n = x n-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

• e x (0) = 1 : khi n=0 thì trả về trị 1

• x 0 = 1 : khi n=0 thì trả về trị 1

Trang 16

Hàm đệ qui

Các hàm đệ qui

Trang 17

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

Trang 18

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

• 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 19

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ụ

Ngày đăng: 11/04/2023, 18:54