Bài giảng Kỹ thuật lập trình: Chương 8 - Trần Quang
lượt xem 1
download
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!
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Bài giảng Kỹ thuật lập trình: Chương 8 - Trần Quang
- Chương 08 HÀM Trần Quang Kỹ thuật lập trình Chương 08: Hàm © 2016 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Bài giảng Kỹ thuật lập trình - Phạm Thế Bảo
0 p | 218 | 32
-
Bài giảng Kỹ thuật lập trình: Chương I - Lưu Hồng Việt
48 p | 194 | 23
-
Bài giảng Kỹ thuật lập trình: Chương IV - Lưu Hồng Việt
32 p | 149 | 17
-
Bài giảng Kỹ thuật lập trình: Chương III - Lưu Hồng Việt
51 p | 147 | 15
-
Bài giảng Kỹ thuật lập trình: Chương V - Lưu Hồng Việt
19 p | 124 | 15
-
Bài giảng Kỹ thuật lập trình: Phần 1 - ĐH CNTT&TT
37 p | 114 | 10
-
Bài giảng Kỹ thuật lập trình - Bài 1: Tổng quan về kỹ thuật lập trình
65 p | 163 | 8
-
Bài giảng Kỹ thuật lập trình nâng cao: Chương 4 - ThS. Dương Thành Phết
26 p | 91 | 7
-
Bài giảng Kỹ thuật lập trình: Bài 1 - Phạm Đình Sắc
9 p | 125 | 7
-
Bài giảng Kỹ thuật lập trình - Chương 10: Tổng kết môn học (Trường Đại học Bách khoa Hà Nội)
67 p | 12 | 4
-
Bài giảng Kỹ thuật lập trình: Chương 7 - Trần Quang
28 p | 4 | 1
-
Bài giảng Kỹ thuật lập trình: Chương 6 - Trần Quang
37 p | 6 | 1
-
Bài giảng Kỹ thuật lập trình: Chương 4 - Trần Quang
32 p | 6 | 1
-
Bài giảng Kỹ thuật lập trình: Chương 3 - Trần Quang
52 p | 5 | 1
-
Bài giảng Kỹ thuật lập trình: Chương 2 - Trần Quang
25 p | 8 | 1
-
Bài giảng Kỹ thuật lập trình: Chương 1 - Trần Quang
39 p | 3 | 1
-
Bài giảng Kỹ thuật lập trình: Chương 9 - Trần Quang
33 p | 2 | 1
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn