1. Trang chủ
  2. » Công Nghệ Thông Tin

Bài giảng Ngôn ngữ lập trình C: Chương 4 - PhD. Nguyễn Thị Huyền

21 39 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

Định dạng
Số trang 21
Dung lượng 472,41 KB

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

Nội dung

Bài giảng Ngôn ngữ lập trình C - Chương 4: Hàm cung cấp cho người học các kiến thức: Giới thiệu, khai báo prototype, viết nội dung của hàm, tham số trong lời gọi hàm, hàm đệ quy. Mời các bạn cùng tham khảo nội dung chi tiết.

Trang 1

Ngôn ngữ lập trình C

Trang 2

Chương 4 – Hàm

 Giới thiệu

 Khai báo prototype

 Viết nội dung của hàm

 Tham số trong lời gọi hàm

 Hàm đệ quy

Trang 3

Giới thiệu

Một chương trình viết trong ngôn ngữ C là một dãy các

hàm, trong đó phải có một hàm chính (hàm main() ).

hơn, giúp thực hiện những công việc lặp lại nào đó mộtcách nhanh chóng mà không phải viết lại đoạn chươngtrình

song chương trình bao giờ cũng bắt đầu thực hiện từ

hàm main()

 Hàm có thể xem là một đơn vị độc lập của chương trình

Các hàm có vai trò ngang nhau, vì vậy không cho

phép xây dựng một hàm bên trong các hàm khác.

Trang 4

 <tên hàm>: theo quy tắc đặt tên định danh.

 <danh sách tham số> : tham số hình thức đầu vào giống khai báo biến, cách nhau bằng dấu , Nếu không có đối, dung void để khai báo đối.

 <giá trị> : trả về cho hàm qua lệnh return

<kiểu trả về> <tên hàm> ( [danh sách tham số] )

{

<các câu lệnh>

[ return <giá trị>;]

}

Trang 5

Khai báo prototype

 Khi biên dịch 1 chương trình C:

 Biên dịch theo thứ tự từ trên xuống dưới

Trường hợp 1 hàm bị gọi trước vị trí hàm được

định nghĩa?

=> Phải khai báo prototype (nguyên mẫu) của hàm

trước khi sử dụng hàm

 Cú pháp khai báo prototype:

<Kiểu_giá_trị_trả_về> <Tên_hàm>([Danh sách các tham số])

5

Trang 6

Khai báo prototype

Trang 7

Quy tắc hoạt động của hàm

 Lời gọi hàm có dạng:

Tên_hàm ([Danh sách đối số]);

 Chú ý: Số đối số = số tham số hình thức

 Quy trình thực hiện khi gọi hàm:

 Cấp phát vùng nhớ cho các biến cục bộ và các tham số hình thức

 Gán giá trị của đối số cho các tham số hình thức.

 Thực hiện các câu lệnh trong thân hàm

Khi gặp câu lệnh return hoặc dấu } cuối cùng của thân hàm thì

máy sẽ xoá các biến cục bộ, các tham số hình thức và ra khỏi hàm.

Nếu trở về từ một câu lệnh return có chứa biểu thức thì giá trị

của biểu thức được gán cho hàm Giá trị của hàm sẽ được sử dụng trong các biểu thức chứa nó.

Trang 8

Tham số của hàm

 Tham số (function parameter):

 Như là 1 biến được khai báo trong khai báo hàm hoặckhai báo prototype

 Có phạm vi hoạt động trong hàm mà chúng được khaibáo

 Là biến tự động, được cấp phát bộ nhớ khi hàm đượcgọi và bị xóa khi ra khỏi hàm

 Có phạm vi hoạt động tạm thời, do đó, có thể đặt têntrùng với các đại lượng ngoài hàm

Trang 9

 Việc copy giá trị của đối số vào tham số được gọi làtruyền tham số (parameter passing)

Trang 10

Truyền tham số cho hàm

 Có 2 cách truyền tham số cho hàm:

Truyền theo tham trị (by value)

Truyền theo tham biến hay tham trỏ (by

variable/pointer)

Trang 11

Truyền tham số cho hàm

Truyền giá trị

Truyền đối số cho hàm ở dạng giá trị

Có thể truyền hằng, biến, biểu thức nhưng hàm chỉ

}

Trang 12

Truyền tham số cho hàm

Truyền Địa chỉ (Call by Address)

Truyền đối số cho hàm ở dạng địa chỉ (con trỏ)

Không được truyền giá trị cho tham số này

Được sử dụng khi có nhu cầu thay đổi giá trị củatham số sau khi thực hiện hàm

void TruyenDiaChi(int *x)

{

… (*x)++;

}

Trang 13

Truyền tham số cho hàm

 Truyền mảng vào hàm:

Chỉ có địa chỉ của mảng được truyền vào (tên mảng

không kèm theo chỉ số là địa chỉ của mảng)

Trang 14

Truyền tham số cho hàm

Lưu ý khi truyền tham số

Trong một hàm, các tham số có thể truyền theo nhiềucách

void HonHop(int x, int * y)

{

… x++;

(*y)++;

}

Trang 15

Truyền tham số cho hàm

Lưu ý khi truyền đối số

Sử dụng tham chiếu là một cách để trả về giá trị chochương trình

int TinhTong(int x, int y)

Trang 16

Truyền tham số cho hàm

Một số lưu ý khi gọi hàm

{ Các hàm được khai báo ở đây }

Trang 17

Hàm đệ quy

 Định nghĩa:

 Hàm đệ quy là hàm cho phép gọi đến chính nó trongthân của hàm

 Khi hàm gọi đệ qui đến chính nó, thì mỗi lần gọi máy

sẽ tạo ra một tập <các biến cục bộ> và <các tham

số nhận theo giá trị> mới hoàn toàn độc lập với tập

<các biến cục bộ> và <các tham số nhận theo giá trị>

đã được tạo ra trong các lần gọi trước

17

Trang 18

Hàm đệ quy

 Các bài toán có thể sử dụng hàm đệ quy:

Thường áp dụng cho các bài toán phụ thuộc

tham số có 2 đặc điểm sau:

Bài toán dễ dàng giải quyết trong một số trường

hợp riêng ứng với các giá trị đặc biệt của tham số

Người ta thường gọi là trường hợp suy biến

 Trong trường hợp tổng quát, bài toán có thể qui về một bài toán cùng dạng nhưng giá trị tham số thì bị

thay đổi Sau một số hữu hạn bước biến đổi đệ qui

nó sẽ dẫn tới trường hợp suy biến.

Trang 19

Hàm đệ quy

 Cách xây dựng hàm đệ quy:

if (trường hợp suy biến){

Thực hiện cách giải bài toán khi suy

biến

}

else { /* Trường hợp tổng quát */

Gọi đệ qui tới hàm đang viết với các giá trị khác của tham số

}

Trang 20

Giải thích hoạt động của hàm đệ qui:

• Lần đầu tiên được gọi, máy sẽ lấy giá trị của đối số lần đầu tiên cho hàm giai thừa, số đó là n, sẽ tính biểu thức:

n*gtdq(n-1); (*)

• Trong biểu thức trên không tính trực tiếp được, các thông tin cũ được đưa vào Stack, máy gọi lại hàm giai thừa tính với đối số n-1, như vậy sẽ tính biểu thức:

• Đến đây, máy sẽ lấy trong Stack để tính, như vậy sẽ tính cho biểu thức:

2*gtdq(1) đây là kết quả của (**)

• Tương tự như vậy cho đến khi trong Stack rỗng, ta có n!.

• Chú ý:

• Khi dùng hàm đệ qui, máy tính sẽ dùng nhiều bộ nhớ trên ngăn xếp và

có thể dẫn đến tràn ngăn xếp Vì vậy khi gặp một bài toán mà có thể có

cách giải bằng vòng lặp (không dùng đệ qui) thì ta nên dùng cách này.

Trang 21

Hàm đệ quy

 Một số ví dụ:

 Tính tổng 1 + 2 + … + n

 Tính số Fibonaci

 Tìm USCLN của 2 số nguyên

 Chuyển số nguyên n từ cơ số 10 sang cơ số 2

 Tìm kiếm nhị phân trên mảng đã sắp xếp

 Đảo ngược mảng

Ngày đăng: 08/07/2020, 11:20

HÌNH ẢNH LIÊN QUAN

 &lt;danh sách tham số&gt; : tham số hình thức đầu vào giống khai báo biến, cách nhau bằng dấu, - Bài giảng Ngôn ngữ lập trình C: Chương 4 - PhD. Nguyễn Thị Huyền
lt ;danh sách tham số&gt; : tham số hình thức đầu vào giống khai báo biến, cách nhau bằng dấu, (Trang 4)
 Chú ý: Số đối số = số tham số hình thức - Bài giảng Ngôn ngữ lập trình C: Chương 4 - PhD. Nguyễn Thị Huyền
h ú ý: Số đối số = số tham số hình thức (Trang 7)

🧩 Sản phẩm bạn có thể quan tâm