Lập trình căn bản - Chương 5: Chương trình con
Bạn đang xem tài liệu "Lập trình căn bản - Chương 5: Chương trình con", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
Tài liệu đính kèm:
- lap_trinh_can_ban_chuong_5_chuong_trinh_con.ppt
Nội dung text: Lập trình căn bản - Chương 5: Chương trình con
- LẬP TRÌNH CĂN BẢN Phần 2 - Chương 5 CHƯƠNG TRÌNH CON N.C. Danh 1
- Nội dung chương này ⚫ Ví dụ ⚫ Khái niệm về hàm trong C ⚫ Xây dựng một hàm ⚫ Truyền tham số cho hàm ⚫ Hàm đệ qui 2
- Ví dụ (1) ⚫ In ra 50 ký tự ‘*’ và 50 ký tự ‘+’ 3
- Ví dụ (2) ⚫ Đâu là ưu điểm của việc dùng hàm? 4
- Khái niệm về hàm trong C (1) ⚫ Để tránh rườm rà và mất thời gian khi viết chương trình, những đoạn chương trình lặp đi lặp lại nhiều lần được viết trong 1 module. ⚫ Chia chương trình thành nhiều module, mỗi module giải quyết 1 công việc nào đó. ⚫ Mỗi module như trên được gọi là 1 chương trình con. ⚫ Các module dễ dàng được kiểm tra tính đúng đắn trước khi được ráp nối vào chương trình. 5
- Khái niệm về hàm trong C (2) ⚫ Ví dụ: Tìm số lớn nhất trong 3 số a, b, và c. 6
- Khái niệm về hàm trong C (3) ⚫ Có 2 loại hàm: ⚫ Hàm chuẩn ⚫ Hàm tự định nghĩa 7
- Hàm chuẩn (hàm thư viện) ⚫ Được định nghĩa sẵn bởi ngôn ngữ lập trình và được chứa vào các thư viện. ⚫ Muốn sử dụng phải khai báo #include ⚫ Một số thư viện thường dùng trong C: ⚫ stdio.h : Thư viện chứa các hàm vào/ ra chuẩn (standard input/output): printf(), scanf(), getc(), putc(), gets(), puts(), fflush(), fopen(), fclose(), fread(), fwrite(), getchar(), putchar(), getw(), putw(), ⚫ conio.h : Thư viện chứa các hàm vào ra trong chế độ DOS (DOS console): clrscr(), getch(), getche(), getpass(), cgets(), cputs(), putch(), clreol(), ⚫ math.h: Thư viện chứa các hàm tính toán: abs(), sqrt(), log(). log10(), sin(), cos(), tan(), acos(), asin(), atan(), pow(), exp(), ⚫ alloc.h: Thư viện chứa các hàm liên quan đến việc quản lý bộ nhớ: calloc(), realloc(), malloc(), free(), farmalloc(), farcalloc(), farfree(), ⚫ io.h: Thư viện chứa các hàm vào ra cấp thấp: open(), _open(), read(), _read(), close(), _close(), creat(), _creat(), creatnew(), eof(), filelength(), lock(), ⚫ graphics.h: Thư viện chứa các hàm liên quan đến đồ họa:initgraph(), line(), circle(), putpixel(), getpixel(), setcolor(), 8
- Hàm tự định nghĩa (hàm người dùng) (1) ⚫ Do người lập trình tự tạo ra nhằm đáp ứng nhu cầu xử lý của mình. ⚫ Cấu trúc của một hàm tự thiết kế: 9
- Hàm tự định nghĩa (hàm người dùng) (2) ⚫ Cú pháp gọi hàm: ([Danh sách các tham số]) ⚫ Ví dụ: Tìm UCLN của 2 số tự nhiên: 10
- Nguyên tắc hoạt động của hàm ⚫ Trong chương trình, khi gặp một lời gọi hàm thì các bước sau được thực hiện: ⚫ Nếu hàm có tham số, trước tiên các tham số sẽ được gán giá trị thực tương ứng. ⚫ Chương trình sẽ thực hiện tiếp các câu lệnh trong thân hàm bắt đầu từ lệnh đầu tiên đến câu lệnh cuối cùng. ⚫ Khi gặp lệnh return hoặc dấu } cuối cùng trong thân hàm, chương trình sẽ thoát khỏi hàm để trở về chương trình gọi nó. ⚫ Thực hiện tiếp tục những câu lệnh của chương trình. 11
- Truyền tham số cho hàm (1) ⚫ Ví dụ: Hoán đổi nội dung của 2 biến 12
- Truyền tham số cho hàm (2) ⚫ Ta vẫn chưa hoán vị được! ⚫ Tại sao? ⚫ 2 tham số a và b của hoanvi là tham số hình thức được truyền bằng giá trị (tham trị). ⚫ 1 tham trị được coi như 1 biến cục bộ của hàm, chứa dữ liệu đầu vào cho hàm. ⚫ Còn 2 tham số a,b của hoanvi trong lời gọi hàm trong main() là tham số thực. ⚫ Khi chương trình con được gọi để thi hành, tham trị được cấp ô nhớ và nhận giá trị là bản sao giá trị của tham số thực. ⚫ Do đó, mọi sự thay đổi trên tham trị không ảnh hưởng gì đến tham số thực tương ứng. 13
- Truyền tham số cho hàm (3) ⚫ Hãy xem chương trình sau 14
- Truyền tham số cho hàm (4) ⚫ Tại sao ta đã hoán vị được? ⚫ 2 tham số a và b của hoanvi là tham số hình thức được truyền bằng địa chỉ (tham biến) – con trỏ. ⚫ Khi chương trình con (ctc) được gọi để thi hành, tham biến chứa địa chỉ tham số thực, ô nhớ của tham số thực được dùng trực tiếp trong ctc qua biến con trỏ. ⚫ Do đó, mọi sự thay đổi trên tham biến đều ảnh hưởng đến tham số thực tương ứng. 15
- Hàm đệ 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ụ: unsigned int giaithua_dequy(int n) 1 nếu n=0 { n!= n*(n-1)! nếu n#0 if (n==0) return 1; else return n*giaithua_dequy(n-1); } 16
- Đặc điểm cần lưu ý khi viết hàm đệ quy ⚫ Hàm đệ quy phải có 2 phần: ⚫ Phần dừng: là trường hợp nguyên tố. ⚫ Ví dụ: n=0 trong tính n! ⚫ Phần đệ quy: là phần có gọi lại hàm đang được định nghĩa. ⚫ Ví dụ: nếu n>0 thì n! = n * (n-1)! 17
- Ưu và khuyết điểm của đệ quy ⚫ Làm chương trình dễ đọc, dễ hiểu và vấn đề được nêu bật rõ ràng hơn. ⚫ Đệ 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 bài cụ thể mà ta quyết định có nên dùng đệ quy hay không. ⚫ Có những trường hợp không dùng đệ quy thì không giải quyết được bài toán. 18
- Hết chương Hết chương 19