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

Chương 08  
HÀM  
Trần Quang  
© 2016  
Kỹ thuật lập trình  
Chương 08:Hàm  
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 <math.h> 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  
© 2016  
Kỹ thuật lập trình  
Chương 08:Hàm  
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ị  
Chuỗi lệnh của hàm  
Các giá trị đầu vào  
Các giá trị đầu ra  
Trần Quang  
© 2016  
Kỹ thuật lập trình  
Chương 08:Hàm  
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  
© 2016  
Kỹ thuật lập trình  
Chương 08:Hàm  
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  
© 2016  
Kỹ thuật lập trình  
Chương 08:Hàm  
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 <math.h>  
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  
© 2016  
Kỹ thuật lập trình  
Chương 08:Hàm  
6
Tꢀ chꢁc chương trình C  
Tiền xử lꢀ:  
Module  
#include  
#define  
#<Tiꢀn xꢁ lꢂ>  
Khai báo / định nghꢁa:  
Khai bꢃo / đꢄnh nghꢅa  
Hꢆm 1  
Hꢂng  
Biến  
Hàm/biến extern  
Mô tả hàm  
Hꢆm 2  
Hꢆm 3  
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.  
Trần Quang  
© 2016  
Kỹ thuật lập trình  
Chương 08:Hàm  
7
Tꢀ chꢁc chương trình C  
Project bao gồm nhiều module  
Module  
#<Tiꢀn xꢁ lꢂ>  
Khai bꢃo / đꢄnh nghꢅa  
Hꢆm 1  
Hꢆm 2  
Hꢆm 3  
Module  
#<Tiꢀn xꢁ lꢂ>  
Khai bꢃo / đꢄnh nghꢅa  
Hꢆm 1  
Hꢆm 2  
Hꢆm 3  
Module  
#<Tiꢀn xꢁ lꢂ>  
Khai bꢃo / đꢄnh nghꢅa  
Hꢆm 1  
Hꢆm 2  
Hꢆm 3  
Trần Quang  
© 2016  
Kỹ thuật lập trình  
Chương 08:Hàm  
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;]  
Phần thân hàm (body)  
[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  
Trần Quang  
© 2016  
Kỹ thuật lập trình  
Chương 08:Hàm  
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  
© 2016  
Kỹ thuật lập trình  
Chương 08:Hàm  
10  
Lời gọi hàm  
Cú phá p:  
Tên_hàm (<danh sách tham số thực>);  
Ví dụ:  
#include <math.h>  
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  
© 2016  
Kỹ thuật lập trình  
11  
Chương 08:Hàm  
Sử dụng hàm tự tạo  
#include <stdio.h>  
#include <stdlib.h>  
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  
© 2016  
Kỹ thuật lập trình  
Chương 08:Hàm  
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  
© 2016  
Kỹ thuật lập trình  
13  
Chương 08:Hàm  
Tꢀ chꢁc mã nguồn  
#include <stdio.h>  
#include <stdlib.h>  
Tách rời phần mô tả  
của hàm và đặt trước  
hàm “main” (trước khi  
sử dụng)  
int add(int a, int b);  
int main(){  
printf("10 + 15 = %d", add(10, 15));  
system("pause");  
return EXIT_SUCCESS;  
}
int add(int a, int b){  
int c;  
c = a + b;  
return c;  
}
Cài đặt các lệnh cho  
hàm  
Trần Quang  
© 2016  
Kỹ thuật lập trình  
14  
Chương 08:Hàm  
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  
© 2016  
Kỹ thuật lập trình  
15  
Chương 08:Hàm  
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  
© 2016  
Kỹ thuật lập trình  
Chương 08:Hàm  
16  
Tꢀ chꢁc mã nguồn  
Tập tin: ”my_math.h”  
#if !defined(MY_MATH_HEADER)  
#define MY_MATH_HEADER  
int add(int a, int b);  
#endif  
Phần mô tả cho  
hàm add  
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  
© 2016  
Kỹ thuật lập trình  
17  
Chương 08:Hàm  
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  
© 2016  
Kỹ thuật lập trình  
Chương 08:Hàm  
18  
Tꢀ chꢁc mã nguồn  
Tập tin program.cpp  
#include <stdio.h>  
#include <stdlib.h>  
#include "my_math.h"  
int main() {  
printf("10 + 15 = %d", add(10, 15));  
system("pause");  
return EXIT_SUCCESS;  
}
Trần Quang  
© 2016  
Kỹ thuật lập trình  
19  
Chương 08:Hàm  
Tham số và đối số  
int main(){  
printf("10 + 15 = %d", add(10, 15));  
system("pause");  
return EXIT_SUCCESS;  
}
int add(int a, int b) {  
10: là đối số của tham số a  
15: là đối số của tham số b  
int c;  
c = a + b;  
return c;  
}
Trần Quang  
© 2016  
Kỹ thuật lập trình  
Chương 08:Hàm  
20  
Tải về để xem bản đầy đủ
pdf 34 trang Thùy Anh 18960 Free
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