Phan2 chuong5 ctrinhcon

829 views
764 views

Published on

lap trinh can ban

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
829
On SlideShare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
24
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Phan2 chuong5 ctrinhcon

  1. 1. LẬP TRÌNH CĂN BẢN CHƯƠNG TRÌNH CON
  2. 2. Nội dung chương này <ul><li>Ví dụ </li></ul><ul><li>Khái niệm về hàm trong C </li></ul><ul><li>Xây dựng một hàm </li></ul><ul><li>Truyền tham số cho hàm </li></ul><ul><li>Hàm đệ qui </li></ul>
  3. 3. Ví dụ (1) <ul><li>In ra 50 ký tự ‘*’ và 50 ký tự ‘+’ </li></ul>
  4. 4. Ví dụ (2) <ul><li>Đâu là ưu điểm của việc dùng hàm? </li></ul>
  5. 5. Khái niệm về hàm trong C (1) <ul><li>Để 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. </li></ul><ul><li>Chia chương trình thành nhiều module, mỗi module giải quyết 1 công việc nào đó. </li></ul><ul><li>Mỗi module như trên được gọi là 1 chương trình con. </li></ul><ul><li>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. </li></ul>
  6. 6. Khái niệm về hàm trong C (2) <ul><li>Ví dụ: Tìm số lớn nhất trong 3 số a, b, và c. </li></ul>
  7. 7. Khái niệm về hàm trong C (3) <ul><li>Có 2 loại hàm: </li></ul><ul><ul><li>Hàm chuẩn </li></ul></ul><ul><ul><li>Hàm tự định nghĩa </li></ul></ul>
  8. 8. Hàm chuẩn (hàm thư viện) <ul><li>Đượ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. </li></ul><ul><li>Muốn sử dụng phải khai báo #include <tên thư viện.h> </li></ul><ul><li>Một số thư viện thường dùng trong C: </li></ul><ul><ul><li>stdio.h : Thư viện chứa các hàm vào/ ra chuẩn ( st an d ard i nput/ o utput): printf(), scanf(), getc(), putc(), gets(), puts(), fflush(), fopen(), fclose(), fread(), fwrite(), getchar(), putchar(), getw(), putw(), … </li></ul></ul><ul><ul><li>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(), … </li></ul></ul><ul><ul><li>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(), … </li></ul></ul><ul><ul><li>malloc.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(), … </li></ul></ul><ul><ul><li>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(), … </li></ul></ul><ul><ul><li>graphics.h: Thư viện chứa các hàm liên quan đến đồ họa: initgraph(), line(), circle(), putpixel(), getpixel(), setcolor(), … </li></ul></ul>
  9. 9. Hàm tự định nghĩa (hàm người dùng) (1) <ul><li>D o người lập trình tự tạo ra nhằm đáp ứng nhu cầu xử lý của mình . </li></ul><ul><li>C ấu trúc của một hàm tự thiết kế: </li></ul>
  10. 10. Hàm tự định nghĩa (hàm người dùng) (2) <ul><li>Cú pháp gọi hàm: < Tên hàm>([ Danh sách các tham số ]) </li></ul><ul><li>Ví dụ: Tìm UCLN của 2 số tự nhiên: </li></ul>
  11. 11. Nguyên tắc hoạt động của hàm <ul><li>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: </li></ul><ul><ul><li>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 . </li></ul></ul><ul><ul><li>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. </li></ul></ul><ul><ul><li>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ó. </li></ul></ul><ul><ul><li>Thực hiện tiếp tục những câu lệnh của chương trình. </li></ul></ul>
  12. 12. Truyền tham số cho hàm (1) <ul><li>Ví dụ: Hoán đổi nội dung của 2 biến </li></ul>
  13. 13. Truyền tham số cho hàm (2) <ul><li>Ta vẫn chưa hoán vị được! </li></ul><ul><li>Tại sao? </li></ul><ul><ul><li>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ị). </li></ul></ul><ul><ul><ul><li>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. </li></ul></ul></ul><ul><ul><li>Còn 2 tham số a,b của hoanvi trong lời gọi hàm trong main() là tham số thực . </li></ul></ul><ul><ul><li>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 . </li></ul></ul><ul><ul><li>Do đó, mọi sự thay đổi trên tham trị không ảnh hưởng gì đến tham số thực tương ứng. </li></ul></ul>
  14. 14. Truyền tham số cho hàm (3) <ul><li>Hãy xem chương trình sau </li></ul>
  15. 15. Truyền tham số cho hàm (4) <ul><li>Tại sao ta đã hoán vị được? </li></ul><ul><ul><li>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ỏ. </li></ul></ul><ul><ul><li>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ỏ . </li></ul></ul><ul><ul><li>Do đó, mọi sự thay đổi trên tham biến đều ảnh hưởng đến tham số thực tương ứng. </li></ul></ul>
  16. 16. Hàm đệ quy <ul><li>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ó. </li></ul><ul><li>Ví dụ: </li></ul>unsigned int giaithua_dequy(int n) { if (n==0) return 1; else return n*giaithua_dequy(n-1); } 1 nếu n=0 n*(n-1)! nếu n>0 n!=
  17. 17. Đặc điểm cần lưu ý khi viết hàm đệ quy <ul><li>Hàm đệ quy phải có 2 phần: </li></ul><ul><ul><li>Phần dừng : là trường hợp nguyên tố. </li></ul></ul><ul><ul><ul><li>V í dụ : n=0 trong tính n! </li></ul></ul></ul><ul><ul><li>Phần đệ quy: là phần có gọi lại hàm đang được định nghĩa. </li></ul></ul><ul><ul><ul><li>V í dụ : nếu n>0 thì n! = n * (n-1)! </li></ul></ul></ul>
  18. 18. Ưu và khuyết điểm của đệ quy <ul><li>L àm chương trình dễ đọc, dễ hiểu và vấn đề được nêu bật rõ ràng hơn. </li></ul><ul><li>Đ ệ qu y 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. </li></ul><ul><li>Tùy từng bài cụ thể mà ta quyết định có nên dùng đệ quy hay không . </li></ul><ul><li>C ó những trường hợp không dùng đệ quy thì không giải quyết được bài toán. </li></ul>
  19. 19. <ul><li>Hết chương </li></ul>Hết chương

×