intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

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

Chia sẻ: _ _ | Ngày: | Loại File: PDF | Số trang:34

6
lượt xem
1
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Bài giảng Kỹ thuật lập trình: Chương 8 - Hàm, được biên soạn gồm các nội dung chính sau: lợi ích của hàm; hàm main; hàm thư viện; tổ chức chương trình C; khai báo hàm; nguyên tắc thực thi khi gọi hàm; tổ chức mã nguồn;...Mời các bạn cùng tham khảo!

Chủ đề:
Lưu

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

  1. Chương 08 HÀM Trần Quang Kỹ thuật lập trình Chương 08: Hàm © 2016 1
  2. 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
  3. Hàm là gì?  Hàm là một đơn vị tính toán  Nhận giá trị đầu vào  Tính toán  Trả về giá trị Các giá trị đầu vào Chuỗi lệnh của hàm Các giá trị đầu ra Trần Quang Kỹ thuật lập trình Chương 08: Hàm © 2016 3
  4. 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
  5. Hàm main Giá trị trả về: kiểu số nguyên int Tên hàm: “main”. Một chương trình phải và chỉ có 01 hàm main duy nhất int main(){ // Các lệnh xử lý của hàm main return 0; } Trả về giá trị cho bên gọi hàm main Giá trị trả về của main: • Phải là kiểu int • Có thể là một trong 2 hằng số • EXIT_SUCCESS (hoặc 0): nếu chương trình kết thúc thành công • EXIT_FAILURE (hoặc 1): nếu chương trình kết thúc với lỗi nào đó Trần Quang Kỹ thuật lập trình Chương 08: Hàm © 2016 5
  6. 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
  7. Tổ chức chương trình C Module  Tiền xử lý:  #include #  #define  Khai báo / định nghĩa: Khai báo / định nghĩa  Hằng  Biến Hàm 1  Hàm/biến extern  Mô tả hàm Hàm 2  Các hàm:  main được chạy đầu tiên  Định nghĩa ngang cấp, Hàm 3 không lồng nhau.  Được gọi mới chạy. Trần Quang Kỹ thuật lập trình Chương 08: Hàm © 2016 7
  8. 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 Module Hàm 3 # 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
  9. Khai báo hàm Phần mô tả hàm (header)  Cú pháp : [extern|static] [ret_type] name ([arglist]) { [statements]* [return expr;] [statements]* Phần thân hàm (body) [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 Trần Quang Kỹ thuật lập trình Chương 08: Hàm © 2016 9
  10. 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
  11. Lời gọi hàm Cú pháp: Tên_hàm (); Ví dụ: #include int main() { printf("%-10s = %5.2f\n", "sqrt(25.0)", sqrt(25.0)); printf("%-10s = %5.2f\n", "sin(90.0)", sin(90.0f*(3.14159/180.0))); // .... } Trần Quang Kỹ thuật lập trình Chương 08: Hàm © 2016 11
  12. 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
  13. Nguyên tắc thực thi khi gọi hàm Khi gọi hàm thì bộ thực thi sẽ làm các công việc:  Lưu vết: lệnh kế tiếp của lệnh gọi hàm  Copy các thông số cho hàm được gọi  Làm các công việc hệ thống khác  Chuyển điều khiển thực thi cho hàm được gọi để nó thực thi từ lệnh đầu tiên trong hàm được gọi  Khi hàm được gọi thực hiện lệnh return.  Giải phóng tất cả các biến cục bộ của nó  Trả điều khiển về lệnh theo sau lệnh gọi hàm  Hàm gọi giải phóng các thông số đã truyền và thực thi lệnh kế tiếp theo lệnh gọi hàm Trần Quang Kỹ thuật lập trình Chương 08: Hàm © 2016 13
  14. 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
  15. Tổ chức mã nguồn  Đưa phần mô tả vào một tập tin riêng  Gọi là tập tin mô tả (header): *.h  Có thể sử dụng lại ở nhiều tập tin khác trong dự án  Sử dụng chỉ thị #if !defined(.) … endif để tránh lỗi “định nghĩa lặp lại” (redefinition)  Đưa phần hiện thực vào một tập tin riêng  Gọi là tập tin hiện thực (implementation): *.c; *.cpp  Có thể sử dụng lại ở nhiều tập tin khác trong dự án  Đưa phần hiện thực vào một tập tin riêng  Khai báo có sử dụng đến các hàm ở *.h nói trên  Gọi hàm Trần Quang Kỹ thuật lập trình Chương 08: Hàm © 2016 15
  16. 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
  17. Tổ chức mã nguồn Tập tin: ”my_math.h” #if !defined(MY_MATH_HEADER) #define MY_MATH_HEADER Phần mô tả cho hàm add int add(int a, int b); #endif NẾU như trong quá trình biên dịch, đến thời điểm hiện tại, chưa thấy tên (MY_MATH_HEADER) xuất hiện thì định nghĩa tên mới (MY_MATH_HEADER) và thực hiện biên dịch cho cả đoạn mã nguồn nằm trong phần tương ứng khối #if NGƯỢC LẠI thì không cần định nghĩa tên mới và không cần biên dịch đoạn mã nguồn tương ứng khối if Trần Quang Kỹ thuật lập trình Chương 08: Hàm © 2016 17
  18. 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
  19. Tổ chức mã nguồn Tập tin program.cpp #include #include #include "my_math.h" int main() { printf("10 + 15 = %d", add(10, 15)); system("pause"); return EXIT_SUCCESS; } Trần Quang Kỹ thuật lập trình Chương 08: Hàm © 2016 19
  20. 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
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2