Bài giảng Kỹ thuật lập trình - Chương 8: Hàm - Trần Quang

Hàm là gì?

- Hàm là một đơn vị xử lý, một chuỗi các lệnh có liên quan, được thực hiện cùng nhau để hoàn thành một công việc nào đó

- Ví dụ trong thư viện ta có

• Hàm sin(x)

. Là chuỗi lệnh để tính giá trị sin của một góc x được truyền vào, góc x có đơn vị tính là radian; hàm sin(x) trả về một số thực

• Hàm sqrt(x)

BK

TP.HCM

Là chuỗi lệnh để tính căn bậc 2 của đại lượng x được truyền vào, đại lượng x có đơn vị tính là một số thực (float hay double); hàm sqrt trả về một số thực

pdf 34 trang xuanthi 27/12/2022 3120
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Kỹ thuật lập trình - Chương 8: Hàm - Trần Quang", để tải tài liệu gốc về máy hãy click vào nút Download ở trên.

File đính kèm:

  • pdfbai_giang_ky_thuat_lap_trinh_chuong_8_ham_tran_quang.pdf

Nội dung text: Bài giảng Kỹ thuật lập trình - Chương 8: Hàm - Trần Quang

  1. Hàm là gì?  Hàm là một đơn vị xử lý, một chuỗi các lệnh có liên quan, được thực hiện cùng nhau để hoàn thành một công việc nào đó  Ví dụ trong thư viện ta có  Hàm sin(x)  Là chuỗi lệnh để tính giá trị sin của một góc x được truyền vào, góc x có đơn vị tính là radian; hàm sin(x) trả về một số thực  Hàm sqrt(x)  Là chuỗi lệnh để tính căn bậc 2 của đại lượng x được truyền vào, đại lượng x có đơn vị tính là một số thực (float hay double); hàm sqrt trả về một số thực Trần Quang Kỹ thuật lập trình Chương 08: Hàm © 2016 2
  2. Lợi ích của hàm  Tránh lặp lại mã nguồn  Tiết kiệm thời gian phát triển  Thay đổi đoạn mã nguồn trong hàm nhanh và dễ dàng, chỉ tại một nơi  Sử dụng lại một đơn vị tính toán mà không phải viết lại  Tiết kiệm thời gian phát triển  Có thể chia sẻ đơn vị tính toán không chỉ cho một dự án mà cho nhiều dự án Trần Quang Kỹ thuật lập trình Chương 08: Hàm © 2016 4
  3. Hàm thư viện  Dùng chỉ thị #include để thông báo với bộ biên dịch là có sử dụng thư viện  Ví dụ: #include  Khi gọi một hàm chỉ cần biết  Tên hàm + công dụng của hàm  Các giá trị cần cung cấp cho hàm  Giá trị trả về của hàm Trần Quang Kỹ thuật lập trình Chương 08: Hàm © 2016 6
  4. Tổ chức chương trình C Project bao gồm nhiều module Module # Khai báo / định nghĩa Hàm 1 Hàm 2 Module # Hàm 3 Khai báo / định nghĩa Hàm 1 Hàm 2 Hàm 3 Module # Khai báo / định nghĩa Hàm 1 Hàm 2 Hàm 3 Trần Quang Kỹ thuật lập trình Chương 08: Hàm © 2016 8
  5. Khai báo hàm  return expr; kết thúc hàm và trả về giá trị expr. Giá trị 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 Trần Quang Kỹ thuật lập trình Chương 08: Hàm © 2016 10
  6. Sử dụng hàm tự tạo #include #include int add(int a, int b) { int c; c = a + b; return c; } int main(){ printf("10 + 15 = %d", add(10, 15)); system("pause"); return 0; } Trần Quang Kỹ thuật lập trình Chương 08: Hàm © 2016 12
  7. Tổ chức mã nguồn #include #include Tách rời phần mô tả của hàm và đặt trước int add(int a, int b); hàm “main” (trước khi sử dụng) int main(){ printf("10 + 15 = %d", add(10, 15)); system("pause"); return EXIT_SUCCESS; } int add(int a, int b){ int c; Cài đặt các lệnh cho c = a + b; hàm return c; } Trần Quang Kỹ thuật lập trình Chương 08: Hàm © 2016 14
  8. Tổ chức mã nguồn Tập tin chứa phần mô tả cho hàm, kiểu dữ liệu, v.v. các phần mô tả nói chung Tập tin chứa phần cài đặt hàm Tập tin chứa hàm main. Để sử dụng các hàm trong thư viện tự tạo đặt #include ”my_math.h” trong mã nguồn Trần Quang Kỹ thuật lập trình Chương 08: Hàm © 2016 16
  9. Tổ chức mã nguồn Tập tin: ”my_math.cpp” #include "my_math.h" int add(int a, int b) { int c; c = a + b; return c; } Trần Quang Kỹ thuật lập trình Chương 08: Hàm © 2016 18
  10. Tham số và đối số int main(){ printf("10 + 15 = %d", add(10, 15)); system("pause"); return EXIT_SUCCESS; } 10: là đối số của tham số a int add(int a, int b) { 15: là đối số của tham số b int c; c = a + b; return c; } Trần Quang Kỹ thuật lập trình Chương 08: Hàm © 2016 20
  11. Các kiểu truyền tham số  Truyền bằng trị  Được sử dụng khi KHÔNG CHO PHÉP hàm được gọi thay đổi giá trị đối số  Truyền bằng địa chỉ  Được sử khi MUỐN CHO PHÉP hàm được gọi thay đổi giá trị đối số  Hoặc khi không muốn bộ thực thi tốn nhiều thời gian cho việc chuẩn bị tham số của hàm được gọi (nghĩa là COPY giá trị của đối số vào thông số), như truyền một mảng nhiều phần tử vào hàm được gọi Trần Quang Kỹ thuật lập trình Chương 08: Hàm © 2016 22
  12. Truyền tham số bằng trị void swap (int a, int b) { int t = a; a = b; b = t; } int main() { int x = 10, y = 100; printf ("Truoc khi goi ham swap(x,y)\n"); printf ("x = %3d; y = %3d\n", x, y); swap (x, y); printf("Sau khi goi ham swap(x,y)\n"); printf("x = %3d; y = %3d\n", x, y); Giá trị không đổi // } Trần Quang Kỹ thuật lập trình Chương 08: Hàm © 2016 24
  13. Truyền tham số bằng địa chỉ void swap (int *a, int *b) { int t = *a; *a = *b; *b = t; } int main() { int x = 10, y = 100; printf ("Truoc khi goi ham swap(x,y)\n"); printf ("x = %3d; y = %3d\n", x, y); swap (&x, &y); printf("Sau khi goi ham swap(x,y)\n"); printf("x = %3d; y = %3d\n", x, y); Giá trị x và y // hoán đổi nhau } Trần Quang Kỹ thuật lập trình Chương 08: Hàm © 2016 26
  14. Hàm và mảng, con trỏ  Cú pháp khai báo tham số void print_array1(int arr[MAX_SIZE], int size){ } void print_array2(int arr[], int size){ } void print_array3(int *arr, int size){ } Cả 3 hàm trên đều có tham số đầu tiên là con trỏ đến số nguyên, nghĩa là giống nhau Tham số thứ 2: size là số phần tử thuộc mảng Trần Quang Kỹ thuật lập trình Chương 08: Hàm © 2016 28
  15. Hàm inline Tác dụng của hàm inline  Thay vì làm các thủ tục để goị hàm và trả về từ hàm được gọi, mã thực thi của hàm inline được chèn trực tiếp tại vị trí gọi hàm này.  => Tiết kiệm chi phí gọi hàm  => Làm tăng kích thước tập tin thực thi (*.EXE) nếu gọi hàm inline có đoạn mã thực thi lớn và nhiều lần  => chỉ nên sử dụng hàm inline khi cần tối ưu thời gian thực thi Trần Quang Kỹ thuật lập trình Chương 08: Hàm © 2016 30
  16. Hàm đệ quy  Ví dụ  Chương trình tính giai thừa: 1x2x3x x N  Hàm giai_thua(N) gọi lại giai_thua(N-1) long giai_thua(int N){ int ket_qua; if(N <=1) ket_qua = 1; else ket_qua = N * giai_thua(N-1); return ket_qua; } Trần Quang Kỹ thuật lập trình Chương 08: Hàm © 2016 32
  17. Hàm đệ quy  Giải bài toán tháp Hanoi bằngđệ quy  Di chuyển chồng đĩa từ cột đầu sang cột cuối, dùng cột giữa làm trung gian  Luôn đảm bảo trật tự kích thước các đĩa Trần Quang Kỹ thuật lập trình Chương 08: Hàm © 2016 34