Bài giảng Nhập môn lập trình - Chủ đề 4: Hàm

pdf 28 trang phuongnguyen 2960
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Nhập môn lập trình - Chủ đề 4: Hàm", để 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:

  • pdfbai_giang_nhap_mon_lap_trinh_chu_de_4_ham.pdf

Nội dung text: Bài giảng Nhập môn lập trình - Chủ đề 4: Hàm

  1. NHẬP MÔN LẬP TRÌNH HÀM 1
  2. Nội dung 1 Khái niệm và cú pháp 2 Tầmvực 3 Tham số và lờigọihàm 4 Đệ quy Hàm 2
  3. Đặtvấn đề ™Viếtchương trình tính S = a! + b! + c! với a, b, c là 3 số nguyên dương nhậptừ bàn phím. Chương trình chính Nhập Tính Xuất a, b, c > 0 S = a! + b! + c! kếtquả S Nhập Nhập Nhập Tính Tính Tính a > 0 b > 0 c > 0 s1=a! s2=b! s3=c! Hàm 3
  4. Đặtvấn đề ™3 đoạnlệnh nhập a, b, c > 0 do { printf(“Nhap mot so nguyen duong: ”); scanf(“%d”, &a); } while (a <= 0); do { printf(“Nhap mot so nguyen duong: ”); scanf(“%d”, &b); } while (b <= 0); do { printf(“Nhap mot so nguyen duong: ”); scanf(“%d”, &c); } while (c <= 0); Hàm 4
  5. Đặtvấn đề ™3 đoạnlệnh tính s1 = a!, s2 = b!, s3 = c! { Tính s1 = a! = 1 * 2 * * a } s1 = 1; for (i = 2; i <= a ; i++) s1 = s1 * i; { Tính s2 = b! = 1 * 2 * * b } s2 = 1; for (i = 2; i <= b ; i++) s2 = s2 * i; { Tính s3 = c! = 1 * 2 * * c } s3 = 1; for (i = 2; i <= c ; i++) s3 = s3 * i; Hàm 5
  6. Đặtvấn đề ™Giải pháp => Viết1 lầnvàsử dụng nhiềulần ƒ Đoạnlệnh nhậptổng quát, với n = a, b, c do { printf(“Nhap mot so nguyen duong: ”); scanf(“%d”, &n); } while (n <= 0); ƒ Đoạnlệnh tính giai thừatổng quát, n = a, b, c { Tính s = n! = 1 * 2 * * n } s = 1; for (i = 2; i <= n ; i++) s = s * i; Hàm 6
  7. Hàm ™Khái niệm ƒ Một đoạnchươngtrìnhcótên, đầu vào và đầu ra. ƒ Có chứcnăng giải quyếtmộtsố vấn đề chuyên biệtchochương trình chính. ƒ Được gọi nhiềulầnvới các tham số khác nhau. ƒ Được sử dụng khi có nhu cầu: •Táisử dụng. •Sửalỗivàcảitiến. Hàm 7
  8. Hàm ™Cú pháp ([ ]) { [return ;] } ƒ Trong đó • : kiểubấtkỳ củaC (char, int, long, float, ). Nếu không trả về thì là void. • : theo quy tắc đặt tên định danh. • : tham số hình thức đầu vào giống khai báo biến, cách nhau bằng dấu , • : trả về cho hàm qua lệnh return. Hàm 8
  9. Các bước viếthàm ™Cầnxácđịnh các thông tin sau đây: ƒ Tên hàm. ƒ Hàm sẽ thựchiện công việcgì. ƒ Các đầuvào(nếucó). ƒ Đầura(nếucó). Đầuvào1 Tên hàm Đầuvào2 Đầura(nếucó) Các công việc Đầuvàon sẽ thựchiện Hàm 9
  10. Hàm ™Ví dụ 1 ƒ Tên hàm: XuatTong ƒ Công việc: tính và xuấttổng 2 số nguyên ƒ Đầu vào: hai số nguyên x và y ƒ Đầura: không có void XuatTong(int x, int y) { int s; s = x + y; printf(“%d cong %d bang %d”, x, y, s); } Hàm 10
  11. Hàm ™Ví dụ 2 ƒ Tên hàm: TinhTong ƒ Công việc: tính và trả về tổng 2 số nguyên ƒ Đầu vào: hai số nguyên x và y ƒ Đầura: mộtsố nguyên có giá trị x + y int TinhTong(int x, int y) { int s; s = x + y; return s; } Hàm 11
  12. Chương trình con - Function ™Ví dụ 3 ƒ Tên hàm: NhapXuatTong ƒ Công việc: nhậpvàxuấttổng 2 số nguyên ƒ Đầu vào: không có ƒ Đầura: không có void NhapXuatTong() { int x, y; printf(“Nhap 2 so nguyen: ”); scanf(“%d%d”, &x, &y); printf(“%d cong %d bang %d”, x, y, x + y); } Hàm 12
  13. Tầmvực ™Khái niệm ƒ Là phạmvi hiệuquả củabiếnvàhàm. ƒ Biến: • Toàn cục: khai báo trong ngoài tấtcả các hàm (kể cả hàm main) và có tác dụng lên toàn bộ chương trình. • Cụcbộ: khai báo trong hàm hoặckhối { } và chỉ có tác dụng trong bản thân hàm hoặckhối đó(kể cả khối con nó). Biếncụcbộ sẽ bị xóa khỏibộ nhớ khi kết thúc khối khai báo nó. Hàm 13
  14. Tầmvực int a; int Ham1() { int a1; } int Ham2() { int a2; { int a21; } } void main() { int a3; } Hàm 14
  15. Mộtsố lưu ý ™Thông thường người ta thường đặt phần tiêu đề hàm/nguyên mẫu hàm (prototype) trên hàm main và phần định nghĩa hàm dưới hàm main. void XuatTong(int x, int y); // prototype void main() { } void XuatTong(int x, int y) { printf(“%d cong %d bang %d”, x, y, x + y); } Hàm 15
  16. Các cách truyền đối số ™Truyền Giá trị (Call by Value) ƒ Truyền đối số cho hàm ở dạng giá trị. ƒ Có thể truyềnhằng, biến, biểuthứcnhưng hàm chỉ sẽ nhậngiátrị. ƒ Được sử dụng khi khôngcónhucầuthayđổi giá trị củathamsố sau khi thựchiện hàm. void TruyenGiaTri(int x) { x++; } Hàm 16
  17. Các cách truyền đối số ™Truyền Địachỉ (Call by Address) ƒ Truyền đối số cho hàm ở dạng địa chỉ (con trỏ). ƒ Không được truyềngiátrị cho tham số này. ƒ Được sử dụng khi có nhu cầu thay đổi giá trị của tham số sau khi thựchiệnhàm. void TruyenDiaChi(int *x) { *x++; } Hàm 17
  18. Các cách truyền đối số ™Truyền Tham chiếu (Call by Reference) (C++) ƒ Truyền đối số cho hàm ở dạng địa chỉ (con trỏ). Được bắt đầu bằng & trong khai báo. ƒ Không được truyềngiátrị cho tham số này. ƒ Được sử dụng khi có nhu cầu thay đổi giá trị của tham số sau khi thựchiệnhàm. void TruyenThamChieu(int &x) { x++; } Hàm 18
  19. Lưu ý khi truyền đối số ™Lưu ý ƒ Trong một hàm, các tham số có thể truyền theo nhiềucách. void HonHop(int x, int &y) { x++; y++; } Hàm 19
  20. Lưu ý khi truyền đối số ™Lưu ý ƒ Sử dụng tham chiếulàmộtcáchđể trả về giá trị cho chương trình. int TinhTong(int x, int y) { return x + y; } void TinhTong(int x, int y, int &tong) { tong = x + y; } void TinhTongHieu(int x, int y, int &tong, int &hieu) { tong = x + y; hieu = x – y; 20 } Hàm
  21. Lờigọihàm ™Cách thựchiện ƒ Gọitêncủa hàm đồng thờitruyềncácđối số (hằng, biến, biểuthức) cho các tham số theo đúng thứ tựđã được khai báo trong hàm. ƒ Các biếnhoặctrị này cách nhau bằng dấu , ƒ Các đối số này được được đặt trong cặpdấu ngoặc đơn () ( , , ); Hàm 21
  22. Lờigọihàm ™Ví dụ Hàm 22
  23. Lờigọichương trình con ™Ví dụ Hàm 23
  24. Đệ quy ™Khái niệm ƒ Mộtchương trình con có thể gọimộtchương trình con khác. ƒ Nếu gọi chính nó thì được gọilàsựđệquy. ƒ Số lầngọinàyphảicógiớihạn (điểmdừng) ™Ví dụ ƒ Tính S(n) = n! = 1*2* *(n-1)*n ƒ Ta thấy S(n) = S(n-1)*n ƒ Vậy thay vì tính S(n) ta sẽđi tính S(n-1) ƒ Tương tự tính S(n-2), , S(2), S(1), S(0) = 1 Hàm 24
  25. Đệ quy ™Ví dụ int GiaiThua(int n) { if (n == 0) return 1; else return GiaiThua(n – 1) * n; } int GiaiThua(int n) { if (n > 0) return GiaiThua(n – 1) * n; else return 1; } Hàm 25
  26. Bài tập 1. Bài tậpchương câu lệnh điềukiệnvàrẽ nhánh a. Viết hàm đổi mộtkýtự hoa sang ký tự thường. b. Viếtthủ tụcgiảiphương trình bậcnhất. c. Viếtthủ tụcgiảiphương trình bậchai. d. Viết hàm trả về giá trị nhỏ nhấtcủa4 số nguyên. e. Viếtthủ tục hoán vị hai số nguyên. f. Viếtthủ tụcsắpxếp4 số nguyên tăng dần. Hàm 26
  27. Bài tập 2. Bài tậpchương câu lệnh lặp. Hàm nhậnvàomột số nguyên dương n và thựchiện: a. Trả về sốđảo củasốđó. b. Có phảilàsốđối xứng (Trả về True/False) c. Có phảilàsố chính phương. d. Có phảilàsố nguyên tố. e. Tổng các chữ số lẻ. f. Tổng các chữ số nguyên tố. g. Tổng các chữ số chính phương. Hàm 27
  28. Bài tập 3. Bài tậpchương Câu lệnh lặp. Hàm nhậnvàomột số nguyên dương n và thựchiện: a. S = 1 + 2 + + n b. S = 12 + 22 + + n2 c. S = 1 + 1/2 + + 1/n d. S = 1 * 2 * * n e. S = 1! + 2! + + n! 4. Hàm trả về USCLN của2 số nguyên. 5. In ra n phầntử của dãy Fibonacy. Hàm 28