Chương 08: HÀM TRONG C

107 362 0
Chương 08: HÀM TRONG C

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Chương 06 HÀM Lê Thành Sách Trường Đại Học Bách Khoa Trung Tâm Kỹ Thuật Điện Toán © 2016 Lập trình C/C++ Nội dung n n n n Hàm gì? Lý sử dụng hàm Hàm main hàm thư viện Sử dụng hàm tự tạo n n n n n n n n n n Định nghĩa Gọi hàm Nguyên tắc thực thi cho lời gọi hàm Prototype hàm, chữ ký hàm, tải hàm Kiểu truyền tham số Hàm mảng, trỏ Hàm inline Con trỏ hàm Hàm đệ quy Tạo thư viện hàm n Liên kết tĩnh động Trường Đại Học Bách Khoa Trung Tâm Kỹ Thuật Điện Toán © 2016 Lập trình C/C++ Hàm gì? n Hàm n n n Một đơn vị xử lý Một chuỗi lệnh có liên quan, thực để hoàn thành công việc Ví dụ: thư viện n Hàm sin(x) n Là chuỗi lệnh tính toán để tính giá trị sin góc x truyền vào, góc x có đơn vị tính radian; hàm sin(x) trả số thực n Hàm sqrt(x) n Là chuỗi lệnh tính toán để tính bậc đại lượng x truyền vào, đại lượng x có đơn vị tính số thực (float hay double); hàm sqrt trả số thực Trường Đại Học Bách Khoa Trung Tâm Kỹ Thuật Điện Toán © 2016 Lập trình C/C++ Hàm gì? n Hàm n n Một đơn vị tính toán n Nhận giá trị đầu vào n Tính toán n Trả giá trị Minh hoạ Các giá trị đầu vào Trường Đại Học Bách Khoa Trung Tâm Kỹ Thuật Điện Toán © 2016 Chuỗi lệnh hàm Các giá trị đầu Lập trình C/C++ Hàm gì? n Minh hoạ Vào: x (radian) Tính sin(x) Ra: sin(x) Vào: x (số thực) Tính sqrt(x) Ra: sqrt(x) Trường Đại Học Bách Khoa Trung Tâm Kỹ Thuật Điện Toán © 2016 Lập trình C/C++ Hàm gì? n Minh hoạ cho hàm cộng hai số n n n Vào: hai số a b kiểu số thực Tính toán: phép cộng hai số Ra: tổng hai số Vào: • Số thực a • Số thực b Trường Đại Học Bách Khoa Trung Tâm Kỹ Thuật Điện Toán © 2016 Tính tổng Trả tổng Ra: (a + b) Lập trình C/C++ Lý sử dụng hàm n Tránh lặp lại mã nguồn n n n è Tiết kiệm thời gian phát triển è Thay đổi đoạn mã nguồn hàm nhanh dễ dàng, nơi Sử dụng lại đơn vị tính toán mà viết lại n n n Tiết kiệm thời gian phát triển Có thể chia đơn vị tính toán không cho dự án mà cho nhiều dự án Ví dụ: xem xét trường hợp mà dự án viết lại hàm toán học: sin(x), sqrt(x), v.v è tốn lãng phí n è sử dụng thư viện Trường Đại Học Bách Khoa Trung Tâm Kỹ Thuật Điện Toán © 2016 Lập trình C/C++ Lý sử dụng hàm n Giúp cho việc phát triển giải thuật, việc tổ chức chương trình dễ dàng n Giải thuật: n Một kỹ thuật giải vấn đề là: phân rã toán lớn thành toán n è Mỗi toán đơn vị tính toán (là hàm) n Ví dụ: toán cho nhập dãy số, tính toán in giá trị trung bình độ lệch chuẩn Có thể phân rã thành toán n (1) Nhập dãy số n (2) Tính toán giá trị trung bình độ lệch chuẩn n (3) In dãy số giá trị trung bình độ lệch chuẩn Trường Đại Học Bách Khoa Trung Tâm Kỹ Thuật Điện Toán © 2016 Lập trình C/C++ Lý sử dụng hàm n Giúp cho việc phát triển giải thuật, việc tổ chức chương trình dễ dàng n Giải thuật: n Ví dụ: toán cho nhập dãy số, tính toán in giá trị trung bình độ lệch chuẩn Có thể phân rã thành toán n (1) Nhập dãy số n (2) Tính toán giá trị trung bình độ lệch chuẩn n (3) In dãy số giá trị trung bình độ lệch chuẩn n è Mỗi toán viết thành hàm riêng Trường Đại Học Bách Khoa Trung Tâm Kỹ Thuật Điện Toán © 2016 Lập trình C/C++ Lý sử dụng hàm n Giúp cho việc phát triển giải thuật, việc tổ chức chương trình dễ dàng n Tổ chức chương trình: n Nếu chương trình (ngôn ngữ C) so sánh với sách (Ngôn ngữ Tiếng việt) n Có sách thực tế mà tác giả viết toàn sách thành câu nối tiếp nhau; không phân chương, phần, phần con, đoạn hay không? n Hàm có ý nghĩa tương tự chương, phần chương Trường Đại Học Bách Khoa Trung Tâm Kỹ Thuật Điện Toán © 2016 Lập trình C/C++ 10 Con trỏ hàm Truyền trỏ tham số - dùng thông số void print_list1( Student *list, int size, PrintStudentPtr print_ptr){ for(int i=0; i< size; i++) print_ptr(list[i]); } void print_list2( Student *list, int size, void (*print_ptr)(Student)){ for(int i=0; i< size; i++) print_ptr(list[i]); } Đều gọi hàm theo trỏ hàm thông thường Trường Đại Học Bách Khoa Trung Tâm Kỹ Thuật Điện Toán © 2016 Lập trình C/C++ 93 Con trỏ hàm Truyền trỏ tham số - dùng thông số #include #include typedef struct{ char code[5]; char name[20]; float gpa; } Student; typedef void (*PrintStudentPtr)(Student); void print_one_row(Student student); void print_list1(Student *list, int size, PrintStudentPtr print_ptr); void print_list2(Student *list, int size, void (*print_ptr)(Student)); Trường Đại Học Bách Khoa Trung Tâm Kỹ Thuật Điện Toán © 2016 Lập trình C/C++ 94 Con trỏ hàm Truyền trỏ tham số - dùng thông số int main(){ Student aList[] = { {"001", "Nguyen Thanh An", 9.8f}, {"002", "Tran Van Binh", 7.5f}, {"003", "Le Tan Cong", 6.7f}, }; PrintStudentPtr func_ptr = print_one_row; print_list1(aList, 3, func_ptr); printf("\n"); print_list2(aList, 3, func_ptr); printf("\n\n"); system("pause"); return EXIT_SUCCESS; } Trường Đại Học Bách Khoa Trung Tâm Kỹ Thuật Điện Toán © 2016 Lập trình C/C++ 95 Con trỏ hàm Truyền trỏ tham số - dùng thông số Kết xuất hình Trường Đại Học Bách Khoa Trung Tâm Kỹ Thuật Điện Toán © 2016 Lập trình C/C++ 96 Con trỏ hàm Mảng trỏ hàm PrintStudentPtr func_arr_ptr[10]; void (*print_ptr[10])(Student); Khi sử dụng tên kiểu PrintStudentPtr Khi không sử dụng tên kiểu PrintStudentPtr func_arr_ptr print_ptr mảng 10 trỏ hàm Sử dụng mảng mảng kiểu liệu khác Trường Đại Học Bách Khoa Trung Tâm Kỹ Thuật Điện Toán © 2016 Lập trình C/C++ 97 Hàm đệ quy n Hàm đệ quy hàm gọi lại n n Trực tiếp: n foo() gọi foo() trực tiếp thân hàm foo() Gán tiếp: n foo() gọi bar, bar gọi foo(); qua nhiều trung gian hàm khác Trường Đại Học Bách Khoa Trung Tâm Kỹ Thuật Điện Toán © 2016 Lập trình C/C++ 98 Hàm đệ quy n Ví dụ n n Chương trình tính tổng 1+2+3+ + N Hàm tong(N) gọi lại tong(N-1) int tong(int N){ int ket_qua; if(N

Ngày đăng: 29/03/2017, 17:51

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan