1 1 TIN HỌC ĐẠI CƯƠNG TIN HỌC ĐẠI CƯƠNG PHẦN 2: LẬP TRÌNH BẰNG NGÔN NGỮ C PHẦN 2: LẬP TRÌNH BẰNG NGÔN NGỮ C BÀI 5: HÀM BÀI 5: HÀM KHOA KHOA C¤NG NGHÖ C¤NG NGHÖ TH¤NG TIN TH¤NG TIN FACULTY OF FACULTY OF INFORMATION TECHNOLOGY INFORMATION TECHNOLOGY 2 2 Nguyễn Thị Thu Trang, SE-FIT-HUT Nguyễn Thị Thu Trang, SE-FIT-HUT BÀI 5: BÀI 5: HÀM HÀM 5.1. Khái niệm hàm 5.1. Khái niệm hàm 5.2. Khai báo và sử dụng hàm 5.2. Khai báo và sử dụng hàm 5.3. Phạm vi biến 5.3. Phạm vi biến 5.4. Nguyên mẫu hàm 5.4. Nguyên mẫu hàm 5.5. Hàm đệ qui 5.5. Hàm đệ qui 3 3 Nguyễn Thị Thu Trang, SE-FIT-HUT Nguyễn Thị Thu Trang, SE-FIT-HUT 5.1. Khái niệm hàm 5.1. Khái niệm hàm Còn được gọi là chương trình con Còn được gọi là chương trình con Những đoạn chương trình lặp đi lặp lại Những đoạn chương trình lặp đi lặp lại nhiều lần ở những chỗ khác nhau: nhiều lần ở những chỗ khác nhau: Viết thành Viết thành hàm hàm để khi cần chỉ cần gọi ra để khi cần chỉ cần gọi ra chứ không phải viết lại toàn bộ. chứ không phải viết lại toàn bộ. Ví dụ: Ví dụ: Các hàm toán học: Các hàm toán học: sin(x), pow(x,y), sqrt(x), sin(x), pow(x,y), sqrt(x), Các hàm do người dùng viết ra. Các hàm do người dùng viết ra. 4 4 Nguyễn Thị Thu Trang, SE-FIT-HUT Nguyễn Thị Thu Trang, SE-FIT-HUT 5.1. Khái niệm hàm 5.1. Khái niệm hàm Giải quyết một bài toán lớn thì chương trình của Giải quyết một bài toán lớn thì chương trình của ta có thể rất lớn và dài ta có thể rất lớn và dài Chia thành các Chia thành các công công việc nhỏ hơn việc nhỏ hơn được viết thành các hàm được viết thành các hàm Dễ Dễ viết, kiểm tra và sửa lỗi. viết, kiểm tra và sửa lỗi. Việc chia nhỏ một chương trình thành các Việc chia nhỏ một chương trình thành các chương trình con đảm nhận những công việc chương trình con đảm nhận những công việc nhỏ khác nhau chính là tư tưởng chính cho nhỏ khác nhau chính là tư tưởng chính cho phương pháp lập trình cấu trúc ( phương pháp lập trình cấu trúc ( structured structured programming programming ). ). 5 5 Nguyễn Thị Thu Trang, SE-FIT-HUT Nguyễn Thị Thu Trang, SE-FIT-HUT BÀI 5: BÀI 5: HÀM HÀM 5.1. Khái niệm hàm 5.1. Khái niệm hàm 5.2. Khai báo và sử dụng hàm 5.2. Khai báo và sử dụng hàm 5.3. Phạm vi biến 5.3. Phạm vi biến 5.4. Nguyên mẫu hàm 5.4. Nguyên mẫu hàm 5.5. Hàm đệ qui 5.5. Hàm đệ qui 6 6 Nguyễn Thị Thu Trang, SE-FIT-HUT Nguyễn Thị Thu Trang, SE-FIT-HUT 5.2.1. Khai báo hàm 5.2.1. Khai báo hàm Cú pháp: Cú pháp: [kieu_gia_tri_tra_ve] [kieu_gia_tri_tra_ve] <ten_ham>([danh_sach_tham_so,…]) <ten_ham>([danh_sach_tham_so,…]) { { //Than ham` bao gom: //Than ham` bao gom: //Cac khai bao //Cac khai bao //Cac cau lenh //Cac cau lenh } } 7 7 Nguyễn Thị Thu Trang, SE-FIT-HUT Nguyễn Thị Thu Trang, SE-FIT-HUT 5.2.1. Khai báo hàm (tiếp) 5.2.1. Khai báo hàm (tiếp) Ví dụ: Ví dụ: long long giai_thua(int a) giai_thua(int a) { { long ket_qua long ket_qua ; ; int i; int i; ket_qua = 1; ket_qua = 1; for(i = 1;i<=a;i++) for(i = 1;i<=a;i++) ket_qua = ket_qua * i; ket_qua = ket_qua * i; if(a < 0) ket_qua = -1; if(a < 0) ket_qua = -1; return ket_qua; return ket_qua; } } −−−−− −−−−− > > −−−−− −−−−− > > −−−−− −−−−− > > Dong dau ham Dong dau ham Cac khai bao Cac khai bao Cac cau lenh Cac cau lenh 8 8 Nguyễn Thị Thu Trang, SE-FIT-HUT Nguyễn Thị Thu Trang, SE-FIT-HUT 5.2.1. Khai báo hàm (tiếp) 5.2.1. Khai báo hàm (tiếp) Kiểu dữ liệu trả về của hàm: Kiểu dữ liệu trả về của hàm: Kiểu dữ liệu của giá trị tính toán mà hàm trả Kiểu dữ liệu của giá trị tính toán mà hàm trả về sau khi thực hiện. về sau khi thực hiện. Hàm có thể có giá trị trả về hoặc không có giá Hàm có thể có giá trị trả về hoặc không có giá trị trả về. trị trả về. Nếu có giá trị trả về, trong thân hàm có ít nhất một Nếu có giá trị trả về, trong thân hàm có ít nhất một lệnh lệnh return return . . Nếu không có giá trị trả về cần khai báo cho hàm Nếu không có giá trị trả về cần khai báo cho hàm đó có kiểu trả về là đó có kiểu trả về là void void . . 9 9 Nguyễn Thị Thu Trang, SE-FIT-HUT Nguyễn Thị Thu Trang, SE-FIT-HUT 5.2.1. Khai báo hàm (tiếp) 5.2.1. Khai báo hàm (tiếp) Tên hàm Tên hàm Có thể là bất kì một định danh hợp lệ nào. Có thể là bất kì một định danh hợp lệ nào. Thường mang nghĩa gợi ý chức năng công Thường mang nghĩa gợi ý chức năng công việc mà hàm thực hiện. việc mà hàm thực hiện. Ví dụ: Một hàm có chức năng tính và trả về bình Ví dụ: Một hàm có chức năng tính và trả về bình phương của một số thực phương của một số thực x x thì nên có tên là thì nên có tên là binh_phuong binh_phuong . . Các hàm không được đặt tên trùng nhau. Các hàm không được đặt tên trùng nhau. 10 10 Nguyễn Thị Thu Trang, SE-FIT-HUT Nguyễn Thị Thu Trang, SE-FIT-HUT 5.2.1. Khai báo hàm (tiếp) 5.2.1. Khai báo hàm (tiếp) Tham số của hàm: Tham số của hàm: Các thông tin cần cho hoạt động của hàm và các Các thông tin cần cho hoạt động của hàm và các thông tin, kết quả tính toán được hàm trả lại. thông tin, kết quả tính toán được hàm trả lại. Tham số chứa dữ liệu vào cung cấp cho hàm Tham số chứa dữ liệu vào cung cấp cho hàm Tham số chứa dữ liệu ra mà hàm tính toán được. Tham số chứa dữ liệu ra mà hàm tính toán được. Tham số trong lời khai báo hàm được gọi là tham số Tham số trong lời khai báo hàm được gọi là tham số hình thức, tham số giả định của hàm. hình thức, tham số giả định của hàm. Cần chỉ ra tên của tham số và kiểu dữ liệu của tham số. Cần chỉ ra tên của tham số và kiểu dữ liệu của tham số. Một hàm có thể không có tham số, hoặc có nhiều Một hàm có thể không có tham số, hoặc có nhiều tham số. tham số. [...]... cả ©Nguyễn Thị Thu Trang, SE-FIT-HUT 11 Ví dụ về các hàm trong thư viện Math.h ©Nguyễn Thị Thu Trang, SE-FIT-HUT 12 5.2.2 Sử dụng hàm Sử dụng hàm hay gọi hàm Cú pháp: Ten_ham([danh_sach_tham_so]) Tham số được cung cấp cho hàm trong quá trình thực hiện được gọi là tham số thực Kiểu dữ liệu của tham số hình thức và tham số thực phải giống nhau ©Nguyễn Thị Thu Trang, SE-FIT-HUT 13 Ví dụ #include ... SE-FIT-HUT 27 5.3 Phạm vi biến (tiếp) #include void main() { { int a = 1; printf(“\n a = %d”,a); { int a = 2; printf(“\n a = %d”,a); } printf(“\n a = %d”,a); } { int a = 3; printf(“\n a = %d”,a); } getch(); } ©Nguyễn Thị Thu Trang, SE-FIT-HUT 28 Ví dụ 2 #include #include int a, b, c; int tich() { printf("\n Gia tri cac bien tong the a, b, c: "); printf(" a = %-5 d b = %-5 d... Thu Trang, SE-FIT-HUT 31 Ví dụ # include # include void fct() { static int count = 1; printf("\n Lan goi ham fct lan thu %2d",count+ +); } void main() { int i; for(i=0; iy?x:y; max = max>z?max:z; return max; } ©Nguyễn Thị Thu Trang, SE-FIT-HUT 34 Nguyên mẫu hàm Nếu muốn đặt phần khai báo hàm nằm sau hàm main() Cần khai báo nguyên... hien_thi_mang(a, n); sap_xep_mang(a, n); printf("\nMang theo thu tu giam dan\n"); hien_thi_mang(a, n); getch(); } ©Nguyễn Thị Thu Trang, SE-FIT-HUT 25 BÀI 5: HÀM 5.1 Khái niệm hàm 5.2 Khai báo và sử dụng hàm 5.3 Phạm vi biến 5.4 Nguyên mẫu hàm 5.5 Hàm đệ qui ©Nguyễn Thị Thu Trang, SE-FIT-HUT 26 5.3 Phạm vi biến Biến địa phương (Local Variable): Là các biến được khai báo trong lệnh khối hoặc trong thân chương . SE-FIT-HUT Nguyễn Thị Thu Trang, SE-FIT-HUT Ví dụ về các hàm trong thư viện Math.h Ví dụ về các hàm trong thư viện Math.h 13 13 Nguyễn Thị Thu Trang, SE-FIT-HUT Nguyễn Thị Thu Trang, SE-FIT-HUT 5.2.2 "); printf(" Gia tri cac so vua nhap: "); printf(" a = %-5 d b = %-5 d c = %-5 d“, a, b, c); printf(" a = %-5 d b = %-5 d c = %-5 d“, a, b, c); printf(" Gia tri lon nhat trong 3. dùng viết ra. Các hàm do người dùng viết ra. 4 4 Nguyễn Thị Thu Trang, SE-FIT-HUT Nguyễn Thị Thu Trang, SE-FIT-HUT 5.1. Khái niệm hàm 5.1. Khái niệm hàm Giải quyết một bài toán lớn thì chương