HC VIN KTQS KHOA CNG NGH THNG TIN
![HỌC VIỆN KTQS KHOA CÔNG NGHỆ THÔNG TIN Chương 8: Lập trình với hàm HỌC VIỆN KTQS KHOA CÔNG NGHỆ THÔNG TIN Chương 8: Lập trình với hàm](https://slidetodoc.com/presentation_image_h2/91b8a84746710a5a43950734937338da/image-1.jpg)
![Tài liệu tham khảo Kỹ thuật lập trình C: cơ sở và nâng cao, Tài liệu tham khảo Kỹ thuật lập trình C: cơ sở và nâng cao,](https://slidetodoc.com/presentation_image_h2/91b8a84746710a5a43950734937338da/image-2.jpg)
![Nội dung bài giảng § Một số khái niệm § Tìm hiểu cấu trúc Nội dung bài giảng § Một số khái niệm § Tìm hiểu cấu trúc](https://slidetodoc.com/presentation_image_h2/91b8a84746710a5a43950734937338da/image-3.jpg)
![Khái niệm về hàm - function § Hàm là một đoạn chương trình thực Khái niệm về hàm - function § Hàm là một đoạn chương trình thực](https://slidetodoc.com/presentation_image_h2/91b8a84746710a5a43950734937338da/image-4.jpg)
![Khái niệm về hàm (tiếp) § Việc gỡ lỗi chương trình trở nên dễ Khái niệm về hàm (tiếp) § Việc gỡ lỗi chương trình trở nên dễ](https://slidetodoc.com/presentation_image_h2/91b8a84746710a5a43950734937338da/image-5.jpg)
![Cấu trúc hàm § Cú pháp tổng quát của một hàm trong C như Cấu trúc hàm § Cú pháp tổng quát của một hàm trong C như](https://slidetodoc.com/presentation_image_h2/91b8a84746710a5a43950734937338da/image-6.jpg)
![Các đối số của hàm Formal Arguments Actual Arguments §Chương trình tính bình phương Các đối số của hàm Formal Arguments Actual Arguments §Chương trình tính bình phương](https://slidetodoc.com/presentation_image_h2/91b8a84746710a5a43950734937338da/image-7.jpg)
![Sự trở về từ một hàm § Lệnh return thực hiện chuyển điều khiển Sự trở về từ một hàm § Lệnh return thực hiện chuyển điều khiển](https://slidetodoc.com/presentation_image_h2/91b8a84746710a5a43950734937338da/image-8.jpg)
![Kiểu dữ liệu của hàm § type_specifier là không bắt buộc nếu kiểu của Kiểu dữ liệu của hàm § type_specifier là không bắt buộc nếu kiểu của](https://slidetodoc.com/presentation_image_h2/91b8a84746710a5a43950734937338da/image-9.jpg)
![Khai báo hàm § Việc khai báo hàm là bắt buộc khi hàm được Khai báo hàm § Việc khai báo hàm là bắt buộc khi hàm được](https://slidetodoc.com/presentation_image_h2/91b8a84746710a5a43950734937338da/image-10.jpg)
![Lời gọi hàm § Dấu chấm phẩy được đặt cuối câu lệnh khi gọi Lời gọi hàm § Dấu chấm phẩy được đặt cuối câu lệnh khi gọi](https://slidetodoc.com/presentation_image_h2/91b8a84746710a5a43950734937338da/image-11.jpg)
![Nguyên mẫu hàm Xác định kiểu dữ liệu của các đối số char abc(int Nguyên mẫu hàm Xác định kiểu dữ liệu của các đối số char abc(int](https://slidetodoc.com/presentation_image_h2/91b8a84746710a5a43950734937338da/image-12.jpg)
![Sử dụng biến Biến cục bộ Được khai báo bên trong một hàm Được Sử dụng biến Biến cục bộ Được khai báo bên trong một hàm Được](https://slidetodoc.com/presentation_image_h2/91b8a84746710a5a43950734937338da/image-13.jpg)
![Lớp lưu trữ § Mỗi biến trong C có một tính chất được gọi Lớp lưu trữ § Mỗi biến trong C có một tính chất được gọi](https://slidetodoc.com/presentation_image_h2/91b8a84746710a5a43950734937338da/image-14.jpg)
![Lớp lưu trữ (tiếp) auto extern static register 15 Giới thiệu về hàm Lớp lưu trữ (tiếp) auto extern static register 15 Giới thiệu về hàm](https://slidetodoc.com/presentation_image_h2/91b8a84746710a5a43950734937338da/image-15.jpg)
![Các qui luật phạm vi của hàm Các qui luật phạm vi – là Các qui luật phạm vi của hàm Các qui luật phạm vi – là](https://slidetodoc.com/presentation_image_h2/91b8a84746710a5a43950734937338da/image-16.jpg)
![Truyền tham số cho hàm § § 17 Truyền tham trị Truyền con trỏ Truyền tham số cho hàm § § 17 Truyền tham trị Truyền con trỏ](https://slidetodoc.com/presentation_image_h2/91b8a84746710a5a43950734937338da/image-17.jpg)
![Truyền bằng giá trị § Trong ngôn ngữ C, thiết lập mặc định là Truyền bằng giá trị § Trong ngôn ngữ C, thiết lập mặc định là](https://slidetodoc.com/presentation_image_h2/91b8a84746710a5a43950734937338da/image-18.jpg)
![Truyền bằng con trỏ § Với truyền con trỏ, hàm cho phép truy xuất Truyền bằng con trỏ § Với truyền con trỏ, hàm cho phép truy xuất](https://slidetodoc.com/presentation_image_h2/91b8a84746710a5a43950734937338da/image-19.jpg)
![Truyền mảng vào hàm § Khi mảng được truyền vào hàm như một đối Truyền mảng vào hàm § Khi mảng được truyền vào hàm như một đối](https://slidetodoc.com/presentation_image_h2/91b8a84746710a5a43950734937338da/image-20.jpg)
![Truyền mảng vào hàm (tiếp) #include<stdio. h> int sum_arr(int num_arr[]); /* Khai báo hàm Truyền mảng vào hàm (tiếp) #include<stdio. h> int sum_arr(int num_arr[]); /* Khai báo hàm](https://slidetodoc.com/presentation_image_h2/91b8a84746710a5a43950734937338da/image-21.jpg)
![Truyền mảng vào hàm (tiếp) sum=sum_arr(num); /*Gọi hàm*/ printf("n. The sum of the array Truyền mảng vào hàm (tiếp) sum=sum_arr(num); /*Gọi hàm*/ printf("n. The sum of the array](https://slidetodoc.com/presentation_image_h2/91b8a84746710a5a43950734937338da/image-22.jpg)
![Truyền mảng vào hàm (tiếp) Kết quả của chương trình trên: Enter number 1: Truyền mảng vào hàm (tiếp) Kết quả của chương trình trên: Enter number 1:](https://slidetodoc.com/presentation_image_h2/91b8a84746710a5a43950734937338da/image-23.jpg)
![Ví dụ: Truyền mảng vào hàm #include<stdio. h> #include<string. h> int longest(char lines_arr[][20]); /* Ví dụ: Truyền mảng vào hàm #include<stdio. h> #include<string. h> int longest(char lines_arr[][20]); /*](https://slidetodoc.com/presentation_image_h2/91b8a84746710a5a43950734937338da/image-24.jpg)
![longctr=longest(lines); /*Truyền mảng cho hàm*/ printf("n The longest string is %s", lines[longctr]); getch(); } longctr=longest(lines); /*Truyền mảng cho hàm*/ printf("n The longest string is %s", lines[longctr]); getch(); }](https://slidetodoc.com/presentation_image_h2/91b8a84746710a5a43950734937338da/image-25.jpg)
![for(i++; i<5; i++) { new_len=strlen(lines_arr[i]); /* Xác định độ dài các thành phần tiếp for(i++; i<5; i++) { new_len=strlen(lines_arr[i]); /* Xác định độ dài các thành phần tiếp](https://slidetodoc.com/presentation_image_h2/91b8a84746710a5a43950734937338da/image-26.jpg)
![Kết quả của chương trình trên: Enter string 1: The Enter string 2: Sigma Kết quả của chương trình trên: Enter string 1: The Enter string 2: Sigma](https://slidetodoc.com/presentation_image_h2/91b8a84746710a5a43950734937338da/image-27.jpg)
![Sự lồng nhau của lời gọi hàm main() { … palindrome(); … } 28 Sự lồng nhau của lời gọi hàm main() { … palindrome(); … } 28](https://slidetodoc.com/presentation_image_h2/91b8a84746710a5a43950734937338da/image-28.jpg)
![Các hàm trong chương trình tổ chức trên nhiều tập tin § § Các Các hàm trong chương trình tổ chức trên nhiều tập tin § § Các](https://slidetodoc.com/presentation_image_h2/91b8a84746710a5a43950734937338da/image-29.jpg)
![Hàm nội tuyến - inline § Là một cấu trúc trong ngôn ngữ lập Hàm nội tuyến - inline § Là một cấu trúc trong ngôn ngữ lập](https://slidetodoc.com/presentation_image_h2/91b8a84746710a5a43950734937338da/image-30.jpg)
![Hàm nội tuyến – inline (tiếp) //Khai báo hàm nội tuyến inline int max Hàm nội tuyến – inline (tiếp) //Khai báo hàm nội tuyến inline int max](https://slidetodoc.com/presentation_image_h2/91b8a84746710a5a43950734937338da/image-31.jpg)
![Con trỏ hàm § § Lưu địa chỉ bắt đầu của hàm Hàm có Con trỏ hàm § § Lưu địa chỉ bắt đầu của hàm Hàm có](https://slidetodoc.com/presentation_image_h2/91b8a84746710a5a43950734937338da/image-32.jpg)
![Đệ quy Một hàm được gọi là đệ quy nếu bên trong thân hàm Đệ quy Một hàm được gọi là đệ quy nếu bên trong thân hàm](https://slidetodoc.com/presentation_image_h2/91b8a84746710a5a43950734937338da/image-33.jpg)
![Đệ quy (tiếp) Hàm đệ quy phải có 2 phần: Phần dừng hay phải Đệ quy (tiếp) Hàm đệ quy phải có 2 phần: Phần dừng hay phải](https://slidetodoc.com/presentation_image_h2/91b8a84746710a5a43950734937338da/image-34.jpg)
![Tóm tắt nội dung Prototype, định nghĩa và các kiểu của hàm Sử dụng Tóm tắt nội dung Prototype, định nghĩa và các kiểu của hàm Sử dụng](https://slidetodoc.com/presentation_image_h2/91b8a84746710a5a43950734937338da/image-35.jpg)
![Thảo luận Khi nào dùng tham chiếu, khi nào dùng tham trị Sử dụng Thảo luận Khi nào dùng tham chiếu, khi nào dùng tham trị Sử dụng](https://slidetodoc.com/presentation_image_h2/91b8a84746710a5a43950734937338da/image-36.jpg)
![C U HỎI VÀ BÀI TẬP Bài 1: Viết hàm tính ước số chung C U HỎI VÀ BÀI TẬP Bài 1: Viết hàm tính ước số chung](https://slidetodoc.com/presentation_image_h2/91b8a84746710a5a43950734937338da/image-37.jpg)
![](https://slidetodoc.com/presentation_image_h2/91b8a84746710a5a43950734937338da/image-38.jpg)
- Slides: 38
![HỌC VIỆN KTQS KHOA CÔNG NGHỆ THÔNG TIN Chương 8 Lập trình với hàm HỌC VIỆN KTQS KHOA CÔNG NGHỆ THÔNG TIN Chương 8: Lập trình với hàm](https://slidetodoc.com/presentation_image_h2/91b8a84746710a5a43950734937338da/image-1.jpg)
HỌC VIỆN KTQS KHOA CÔNG NGHỆ THÔNG TIN Chương 8: Lập trình với hàm Học phần: LẬP TRÌNH CƠ BẢN
![Tài liệu tham khảo Kỹ thuật lập trình C cơ sở và nâng cao Tài liệu tham khảo Kỹ thuật lập trình C: cơ sở và nâng cao,](https://slidetodoc.com/presentation_image_h2/91b8a84746710a5a43950734937338da/image-2.jpg)
Tài liệu tham khảo Kỹ thuật lập trình C: cơ sở và nâng cao, Phạm Văn Ất, Nhà xuất bản KHKT – Chương 6 The C programming language 2 nd Edition, Brian Kernighan and Dennis Ritchie, Prentice Hall Software Series – Chương 4 2 Giới thiệu về hàm
![Nội dung bài giảng Một số khái niệm Tìm hiểu cấu trúc Nội dung bài giảng § Một số khái niệm § Tìm hiểu cấu trúc](https://slidetodoc.com/presentation_image_h2/91b8a84746710a5a43950734937338da/image-3.jpg)
Nội dung bài giảng § Một số khái niệm § Tìm hiểu cấu trúc của hàm § Khai báo hàm và các nguyên mẫu hàm § Sử dụng biến § Truyền tham số cho hàm § Một số qui tắc về phạm vi của hàm § Một số loại hàm khác 3 Giới thiệu về hàm
![Khái niệm về hàm function Hàm là một đoạn chương trình thực Khái niệm về hàm - function § Hàm là một đoạn chương trình thực](https://slidetodoc.com/presentation_image_h2/91b8a84746710a5a43950734937338da/image-4.jpg)
Khái niệm về hàm - function § Hàm là một đoạn chương trình thực hiện một tác vụ được định nghĩa cụ thể § Các hàm được sử dụng để rút gọn cho một chuỗi các chỉ thị được thực hiện nhiều lần (khả năng sử dụng lại). § Việc phân tách chức năng thành hàm sẽ giúp chương trình dễ lập trình và dễ hiểu khi xem xét hoạt động tổng thể 4 Giới thiệu về hàm
![Khái niệm về hàm tiếp Việc gỡ lỗi chương trình trở nên dễ Khái niệm về hàm (tiếp) § Việc gỡ lỗi chương trình trở nên dễ](https://slidetodoc.com/presentation_image_h2/91b8a84746710a5a43950734937338da/image-5.jpg)
Khái niệm về hàm (tiếp) § Việc gỡ lỗi chương trình trở nên dễ dàng hơn khi cấu trúc của chương trình rõ ràng với hình thức lập trình theo module § Chương trình cấu tạo từ các hàm cũng dễ dàng bảo trì, bởi vì sự sửa đổi khi có yêu cầu được giới hạn trong từng hàm của chương trình 5 Giới thiệu về hàm
![Cấu trúc hàm Cú pháp tổng quát của một hàm trong C như Cấu trúc hàm § Cú pháp tổng quát của một hàm trong C như](https://slidetodoc.com/presentation_image_h2/91b8a84746710a5a43950734937338da/image-6.jpg)
Cấu trúc hàm § Cú pháp tổng quát của một hàm trong C như sau: § § type_specifier: xác định kiểu dữ liệu của giá trị mà hàm sẽ trả về. § arguments: Các đối số xuất hiện trong cặp dấu ngoặc () được gọi là các tham số hình thức. § body of the function: Phần thân hàm, chứa các khai báo, câu lệnh triển khai các chức năng xử lý của hàm. function_name: Một tên hàm hợp lệ được gán cho định danh của hàm 6 Giới thiệu về hàm
![Các đối số của hàm Formal Arguments Actual Arguments Chương trình tính bình phương Các đối số của hàm Formal Arguments Actual Arguments §Chương trình tính bình phương](https://slidetodoc.com/presentation_image_h2/91b8a84746710a5a43950734937338da/image-7.jpg)
Các đối số của hàm Formal Arguments Actual Arguments §Chương trình tính bình phương của các số từ 1 đến 10 §Dữ liệu được truyền từ hàm main() đến hàm squarer() §Hàm thao tác trên dữ liệu sử dụng các tham số do hàm truyền vào 7 Giới thiệu về hàm
![Sự trở về từ một hàm Lệnh return thực hiện chuyển điều khiển Sự trở về từ một hàm § Lệnh return thực hiện chuyển điều khiển](https://slidetodoc.com/presentation_image_h2/91b8a84746710a5a43950734937338da/image-8.jpg)
Sự trở về từ một hàm § Lệnh return thực hiện chuyển điều khiển từ hàm trở về chương trình gọi. § Kiểu dữ liệu của giá trị do return trả về phải phù hợp với kiểu dữ liệu đã khai báo của hàm 8 Giới thiệu về hàm
![Kiểu dữ liệu của hàm typespecifier là không bắt buộc nếu kiểu của Kiểu dữ liệu của hàm § type_specifier là không bắt buộc nếu kiểu của](https://slidetodoc.com/presentation_image_h2/91b8a84746710a5a43950734937338da/image-9.jpg)
Kiểu dữ liệu của hàm § type_specifier là không bắt buộc nếu kiểu của giá trị trả về là một số nguyên hoặc nếu không có giá trị trả về § Tuy nhiên, để tránh sự không nhất quán, một kiểu dữ liệu nên được xác định khi khai báo hàm. 9 Giới thiệu về hàm
![Khai báo hàm Việc khai báo hàm là bắt buộc khi hàm được Khai báo hàm § Việc khai báo hàm là bắt buộc khi hàm được](https://slidetodoc.com/presentation_image_h2/91b8a84746710a5a43950734937338da/image-10.jpg)
Khai báo hàm § Việc khai báo hàm là bắt buộc khi hàm được sử dụng trước khi nó được định nghĩa § Một số trình biên dịch C sẽ thông báo lỗi nếu hàm không được khai báo trước khi gọi. Điều này còn được gọi là sự khai báo không tường minh § Ví dụ: Hàm address() được gọi trước khi nó được định nghĩa 10 #include <stdio. h> address(); main(){ … address() … } address(){ … } Giới thiệu về hàm
![Lời gọi hàm Dấu chấm phẩy được đặt cuối câu lệnh khi gọi Lời gọi hàm § Dấu chấm phẩy được đặt cuối câu lệnh khi gọi](https://slidetodoc.com/presentation_image_h2/91b8a84746710a5a43950734937338da/image-11.jpg)
Lời gọi hàm § Dấu chấm phẩy được đặt cuối câu lệnh khi gọi hàm, nhưng không dùng cho định nghĩa hàm § Cặp dấu ngoặc () là bắt buộc theo sau tên hàm, cho dù hàm có đối số hay không § Nhiều nhất một giá trị được trả về kết quả của hàm § Chương trình có thể có nhiều hàm hoặc không có hàm § Hàm gọi đến một hàm khác được gọi là hàm gọi § Hàm đang được gọi đến được gọi là hàm được gọi 11 Giới thiệu về hàm
![Nguyên mẫu hàm Xác định kiểu dữ liệu của các đối số char abcint Nguyên mẫu hàm Xác định kiểu dữ liệu của các đối số char abc(int](https://slidetodoc.com/presentation_image_h2/91b8a84746710a5a43950734937338da/image-12.jpg)
Nguyên mẫu hàm Xác định kiểu dữ liệu của các đối số char abc(int x, int y); Thuận lợi : Bất kỳ sự chuyển kiểu không hợp lệ giữa các đối số được dùng để gọi hàm và kiểu đã được định nghĩa cho các tham số của hàm sẽ được thông báo. char noparam (void); 12 Giới thiệu về hàm
![Sử dụng biến Biến cục bộ Được khai báo bên trong một hàm Được Sử dụng biến Biến cục bộ Được khai báo bên trong một hàm Được](https://slidetodoc.com/presentation_image_h2/91b8a84746710a5a43950734937338da/image-13.jpg)
Sử dụng biến Biến cục bộ Được khai báo bên trong một hàm Được tạo tại điểm vào của một khối lệnh và bị hủy tại điểm ra khỏi khối lệnh đó Tham số hình thức Được khai báo trong định nghĩa hàm như là các tham số Hoạt động như một biến cục bộ bên trong một hàm Biến toàn cục Được khai báo bên ngoài tất cả các hàm Lưu các giá trị tồn tại suốt thời gian thực thi của chương trình 13 Giới thiệu về hàm
![Lớp lưu trữ Mỗi biến trong C có một tính chất được gọi Lớp lưu trữ § Mỗi biến trong C có một tính chất được gọi](https://slidetodoc.com/presentation_image_h2/91b8a84746710a5a43950734937338da/image-14.jpg)
Lớp lưu trữ § Mỗi biến trong C có một tính chất được gọi là lớp lưu trữ § Lớp lưu trữ định nghĩa hai đặc tính của biến: § Thời gian sống của một biến là khoảng thời gian nó duy trì một giá trị xác định § Tầm vực của một biến xác định các phần của một chương trình có thể nhận ra biến đó 14 Giới thiệu về hàm
![Lớp lưu trữ tiếp auto extern static register 15 Giới thiệu về hàm Lớp lưu trữ (tiếp) auto extern static register 15 Giới thiệu về hàm](https://slidetodoc.com/presentation_image_h2/91b8a84746710a5a43950734937338da/image-15.jpg)
Lớp lưu trữ (tiếp) auto extern static register 15 Giới thiệu về hàm
![Các qui luật phạm vi của hàm Các qui luật phạm vi là Các qui luật phạm vi của hàm Các qui luật phạm vi – là](https://slidetodoc.com/presentation_image_h2/91b8a84746710a5a43950734937338da/image-16.jpg)
Các qui luật phạm vi của hàm Các qui luật phạm vi – là những qui luật quyết định một đoạn mã lệnh có thể truy xuất đến một đoạn mã lệnh hay dữ liệu khác hay không Mã lệnh bên trong một hàm là cục bộ với hàm đó Hai hàm có cùng mức phạm vi Một hàm không thể được định nghĩa bên trong một hàm khác 16 Giới thiệu về hàm
![Truyền tham số cho hàm 17 Truyền tham trị Truyền con trỏ Truyền tham số cho hàm § § 17 Truyền tham trị Truyền con trỏ](https://slidetodoc.com/presentation_image_h2/91b8a84746710a5a43950734937338da/image-17.jpg)
Truyền tham số cho hàm § § 17 Truyền tham trị Truyền con trỏ Giới thiệu về hàm
![Truyền bằng giá trị Trong ngôn ngữ C thiết lập mặc định là Truyền bằng giá trị § Trong ngôn ngữ C, thiết lập mặc định là](https://slidetodoc.com/presentation_image_h2/91b8a84746710a5a43950734937338da/image-18.jpg)
Truyền bằng giá trị § Trong ngôn ngữ C, thiết lập mặc định là tất cả các đối số được truyền bằng giá trị § Khi các đối số được truyền đến hàm được gọi, các giá trị được truyền thông qua các biến tạm § Mọi sự thao tác chỉ được thực hiện trên các biến tạm § Các đối số được gọi là truyền bằng giá trị khi giá trị của biến được truyền đến hàm được gọi và bất kỳ sự thay đổi trên giá trị này không ảnh hưởng đến giá trị gốc của biến được truyền 18 Giới thiệu về hàm
![Truyền bằng con trỏ Với truyền con trỏ hàm cho phép truy xuất Truyền bằng con trỏ § Với truyền con trỏ, hàm cho phép truy xuất](https://slidetodoc.com/presentation_image_h2/91b8a84746710a5a43950734937338da/image-19.jpg)
Truyền bằng con trỏ § Với truyền con trỏ, hàm cho phép truy xuất đến địa chỉ thực trong bộ nhớ của đối số và vì vậy có thể thay đổi giá trị của các đối số của hàm gọi § Định nghĩa § getstr(char *ptr_str, int *ptr_int); Gọi getstr(pstr, &var); 19 Giới thiệu về hàm
![Truyền mảng vào hàm Khi mảng được truyền vào hàm như một đối Truyền mảng vào hàm § Khi mảng được truyền vào hàm như một đối](https://slidetodoc.com/presentation_image_h2/91b8a84746710a5a43950734937338da/image-20.jpg)
Truyền mảng vào hàm § Khi mảng được truyền vào hàm như một đối số, chỉ có địa chỉ của mảng được truyền. § Tên mảng chính là là địa chỉ của mảng. void main() { int ary[10]; … fn_ary(ary); … } 20 Giới thiệu về hàm
![Truyền mảng vào hàm tiếp includestdio h int sumarrint numarr Khai báo hàm Truyền mảng vào hàm (tiếp) #include<stdio. h> int sum_arr(int num_arr[]); /* Khai báo hàm](https://slidetodoc.com/presentation_image_h2/91b8a84746710a5a43950734937338da/image-21.jpg)
Truyền mảng vào hàm (tiếp) #include<stdio. h> int sum_arr(int num_arr[]); /* Khai báo hàm */ void main() { int num[5], ctr, sum=0; clrscr(); for(ctr=0; ctr<5; ctr++) { /*Nhập các phần tử của mảng */ printf("n. Enter number %d: ", ctr+1); scanf("%d", &num[ctr]); } 21 Giới thiệu về hàm
![Truyền mảng vào hàm tiếp sumsumarrnum Gọi hàm printfn The sum of the array Truyền mảng vào hàm (tiếp) sum=sum_arr(num); /*Gọi hàm*/ printf("n. The sum of the array](https://slidetodoc.com/presentation_image_h2/91b8a84746710a5a43950734937338da/image-22.jpg)
Truyền mảng vào hàm (tiếp) sum=sum_arr(num); /*Gọi hàm*/ printf("n. The sum of the array is %d", sum); getch(); } int sum_arr(int num_arr[]){ /*ĐỊnh nghĩa hàm*/ int i, total; for(i=0, total=0; i<5; i++) /* Calculates the sum */ total+=num_arr[i]; return total; /* Trả lại giá trị sum cho main() */ } 22 Giới thiệu về hàm
![Truyền mảng vào hàm tiếp Kết quả của chương trình trên Enter number 1 Truyền mảng vào hàm (tiếp) Kết quả của chương trình trên: Enter number 1:](https://slidetodoc.com/presentation_image_h2/91b8a84746710a5a43950734937338da/image-23.jpg)
Truyền mảng vào hàm (tiếp) Kết quả của chương trình trên: Enter number 1: 5 Enter number 2: 10 Enter number 3: 13 Enter number 4: 26 Enter number 5: 21 The sum of the array is 75 23 Giới thiệu về hàm
![Ví dụ Truyền mảng vào hàm includestdio h includestring h int longestchar linesarr20 Ví dụ: Truyền mảng vào hàm #include<stdio. h> #include<string. h> int longest(char lines_arr[][20]); /*](https://slidetodoc.com/presentation_image_h2/91b8a84746710a5a43950734937338da/image-24.jpg)
Ví dụ: Truyền mảng vào hàm #include<stdio. h> #include<string. h> int longest(char lines_arr[][20]); /* Khai báo hàm */ void main() { char lines[5][20]; int ctr, longctr=0; clrscr(); for(ctr=0; ctr<5; ctr++) { /*Nhập các xâu kí tự vào mảng*/ printf("n. Enter string %d: ", ctr+1); scanf("%s", lines[ctr]); } 24 Giới thiệu về hàm
![longctrlongestlines Truyền mảng cho hàm printfn The longest string is s lineslongctr getch longctr=longest(lines); /*Truyền mảng cho hàm*/ printf("n The longest string is %s", lines[longctr]); getch(); }](https://slidetodoc.com/presentation_image_h2/91b8a84746710a5a43950734937338da/image-25.jpg)
longctr=longest(lines); /*Truyền mảng cho hàm*/ printf("n The longest string is %s", lines[longctr]); getch(); } int longest(char lines_arr[][20]) { /*Định nghĩa hàm*/ int i=0, l_ctr=0, prev_len, new_len; prev_len=strlen(lines_arr[i]); /*Xác định độ dài xâu đầu tiên*/ 25 Giới thiệu về hàm
![fori i5 i newlenstrlenlinesarri Xác định độ dài các thành phần tiếp for(i++; i<5; i++) { new_len=strlen(lines_arr[i]); /* Xác định độ dài các thành phần tiếp](https://slidetodoc.com/presentation_image_h2/91b8a84746710a5a43950734937338da/image-26.jpg)
for(i++; i<5; i++) { new_len=strlen(lines_arr[i]); /* Xác định độ dài các thành phần tiếp theo */ if(new_len > prev_len) { l_ctr=I; /* Lưu lại giá trị lớn hơn */ prev_len=new_len; } } return l_ctr; /* Trả về kết quả tìm được */ } 26 Giới thiệu về hàm
![Kết quả của chương trình trên Enter string 1 The Enter string 2 Sigma Kết quả của chương trình trên: Enter string 1: The Enter string 2: Sigma](https://slidetodoc.com/presentation_image_h2/91b8a84746710a5a43950734937338da/image-27.jpg)
Kết quả của chương trình trên: Enter string 1: The Enter string 2: Sigma Enter string 3: Protocol Enter string 4: Timrob Enter string 5: Robertu The longest string is Protocol 27 Giới thiệu về hàm
![Sự lồng nhau của lời gọi hàm main palindrome 28 Sự lồng nhau của lời gọi hàm main() { … palindrome(); … } 28](https://slidetodoc.com/presentation_image_h2/91b8a84746710a5a43950734937338da/image-28.jpg)
Sự lồng nhau của lời gọi hàm main() { … palindrome(); … } 28 palindrome() { … getstr(); reverse(); cmp(); … } Giới thiệu về hàm
![Các hàm trong chương trình tổ chức trên nhiều tập tin Các Các hàm trong chương trình tổ chức trên nhiều tập tin § § Các](https://slidetodoc.com/presentation_image_h2/91b8a84746710a5a43950734937338da/image-29.jpg)
Các hàm trong chương trình tổ chức trên nhiều tập tin § § Các hàm cũng có thể được định nghĩa là static hoặc external Các hàm tĩnh (static) chỉ được nhận biết bên trong tập tin chương trình và phạm vi của nó không vượt ra khỏi tập tin chương trình static fn _type fn_name (argument list); § Hàm ngoại (external) được nhận biết bởi tất cả các tập tin của chương trình extern fn_type fn_name (argument list); 29 Giới thiệu về hàm
![Hàm nội tuyến inline Là một cấu trúc trong ngôn ngữ lập Hàm nội tuyến - inline § Là một cấu trúc trong ngôn ngữ lập](https://slidetodoc.com/presentation_image_h2/91b8a84746710a5a43950734937338da/image-30.jpg)
Hàm nội tuyến - inline § Là một cấu trúc trong ngôn ngữ lập trình được sử dụng để đề nghị với chương trình biên dịch nên chèn toàn bộ thân hàm vào trong từng ngữ cảnh, nơi hàm đó được sử dụng. § Thông thường, để quyết định xem một hàm cụ thể nào đó có nên là hàm nội tuyến hay không, trình biên dịch quyết định vị trí đặt mã tốt hơn con người vì vậy nên hạn chế dùng hàm nội tuyến. § Đối với các chương trình biên dịch đơn giản viết bằng C, việc sử dụng quá nhiều hàm nội tuyến có thể làm tăng thời gian biên dịch. 30 Giới thiệu về hàm
![Hàm nội tuyến inline tiếp Khai báo hàm nội tuyến inline int max Hàm nội tuyến – inline (tiếp) //Khai báo hàm nội tuyến inline int max](https://slidetodoc.com/presentation_image_h2/91b8a84746710a5a43950734937338da/image-31.jpg)
Hàm nội tuyến – inline (tiếp) //Khai báo hàm nội tuyến inline int max (int a, int b) { if (a > b) return a; else return b; } //Lời gọi hàm nội tuyến a = max (x, y); 31 Giới thiệu về hàm
![Con trỏ hàm Lưu địa chỉ bắt đầu của hàm Hàm có Con trỏ hàm § § Lưu địa chỉ bắt đầu của hàm Hàm có](https://slidetodoc.com/presentation_image_h2/91b8a84746710a5a43950734937338da/image-32.jpg)
Con trỏ hàm § § Lưu địa chỉ bắt đầu của hàm Hàm có một vị trí vật lý trong bộ nhớ, vị trí này có thể gán cho một con trỏ #include <stdio. h> #include <string. h> void check(char *a, char *b, int (*cmp)()); main() { char sl[80]; int (*p)(); p = strcmp; gets(s 1); gets(s 2); check(s 1, s 2, p); } 32 void check(char *a, char *b, int (*cmp)()) { printf(“testing for equality n”); if (!(*cmp)(a, b)) printf(“Equal”); else printf(“Not Equal”); } Giới thiệu về hàm
![Đệ quy Một hàm được gọi là đệ quy nếu bên trong thân hàm Đệ quy Một hàm được gọi là đệ quy nếu bên trong thân hàm](https://slidetodoc.com/presentation_image_h2/91b8a84746710a5a43950734937338da/image-33.jpg)
Đệ quy Một hàm được gọi là đệ quy nếu bên trong thân hàm có lệnh gọi đến chính nó. Ví dụ: Người ta định nghĩa giai thừa của một số nguyên dương n như sau: n!=1* 2 * 3 *…* (n-1) *n = (n-1)! *n (với 0!=1) Như vậy, để tính n! ta thấy nếu n=0 thì n!=1 ngược lại thì n!=n * (n-1)! 33 Giới thiệu về hàm
![Đệ quy tiếp Hàm đệ quy phải có 2 phần Phần dừng hay phải Đệ quy (tiếp) Hàm đệ quy phải có 2 phần: Phần dừng hay phải](https://slidetodoc.com/presentation_image_h2/91b8a84746710a5a43950734937338da/image-34.jpg)
Đệ quy (tiếp) Hàm đệ quy phải có 2 phần: Phần dừng hay phải có trường hợp nguyên tố. Trong ví dụ ở trên thì trường hợp n=0 là trường hợp nguyên tố. Phần đệ quy: là phần có gọi lại hàm đang được định nghĩa. Trong ví dụ trên thì phần đệ quy là n>0 thì n! = n * (n-1)! Sử dụng hàm đệ quy trong chương trình sẽ làm chương trình dễ đọc, dễ hiểu và vấn đề được nêu bật rõ ràng hơn. Đa số trường hợp thì hàm đệ quy tốn bộ nhớ nhiều hơn và tốc độ thực hiện chương trình chậm hơn không đệ quy. Tùy từng trường hợp cụ thể mà người lập trình quyết định có nên dùng đệ quy hay không. 34 Giới thiệu về hàm
![Tóm tắt nội dung Prototype định nghĩa và các kiểu của hàm Sử dụng Tóm tắt nội dung Prototype, định nghĩa và các kiểu của hàm Sử dụng](https://slidetodoc.com/presentation_image_h2/91b8a84746710a5a43950734937338da/image-35.jpg)
Tóm tắt nội dung Prototype, định nghĩa và các kiểu của hàm Sử dụng biến Truyền tham số và giá trị trả lại Tham trị Tham chiếu Hàm inline Hàm đệ quy 35 Giới thiệu về hàm
![Thảo luận Khi nào dùng tham chiếu khi nào dùng tham trị Sử dụng Thảo luận Khi nào dùng tham chiếu, khi nào dùng tham trị Sử dụng](https://slidetodoc.com/presentation_image_h2/91b8a84746710a5a43950734937338da/image-36.jpg)
Thảo luận Khi nào dùng tham chiếu, khi nào dùng tham trị Sử dụng con trỏ và sử dụng mảng Con trỏ với mảng đa chiều Một số kỹ thuật khử đệ quy 36 Giới thiệu về hàm
![C U HỎI VÀ BÀI TẬP Bài 1 Viết hàm tính ước số chung C U HỎI VÀ BÀI TẬP Bài 1: Viết hàm tính ước số chung](https://slidetodoc.com/presentation_image_h2/91b8a84746710a5a43950734937338da/image-37.jpg)
C U HỎI VÀ BÀI TẬP Bài 1: Viết hàm tính ước số chung lớn nhất của 2 số tự nhiên a, b. Bài 2: Viết hàm xác định một số tự nhiên có phải nguyên tố hay không. Bài 3: Viết hàm nhập mảng, in mảng, hàm sắp xếp mảng bằng phương pháp chia đôi; hàm main sử dụng các hàm trên. Bài 4: Viết hàm nhập ma trận, in ma trận, hàm nhân 2 ma trận, hàm kiểm tra ma trận đơn vị; hàm main sử dụng các hàm trên để nhập và kiểm tra 2 ma trận có là nghịch đảo của nhau hay không. 37 Giới thiệu về hàm
![](https://slidetodoc.com/presentation_image_h2/91b8a84746710a5a43950734937338da/image-38.jpg)
Ngh ghép hay ngh kép
Thng
Logo ngh
Tạo thuộc tính lookup cho các trường khóa ngoại
Tạo thuộc tính lookup cho các trường khóa ngoại
Khoa sư phạm đại học đà lạt
Chu nghia xa hoi khoa hoc
Hộp khóa nòng
Cng fyllestasjoner norge
Cng cesp
Destiny usd 259
Cng vn
Cng vs lng
Cng forklift
Logo qu
Cng decanting station
Cng h
Cng b
Cng t
Cng vs lng
Lng cng
Clark forklift serial number lookup
La tine vin si-mi cer iertare versuri
Sour vin
Vin l
Vin 1976
Vin dy
15 digit vin number
Hdđt nguyễn kim
What is serial number restoration
Chç
Cascoding
Vin diesel has ten weapons
Gio vin
In a direct cutover conversion strategy, the new system:
Vin rose urine
Vdd vin
Caves à vin cdiscount
Macération carbonique