Nội dung chương 4 trình bày đến người học những vấn đề liên quan đến Hàm và chương trình con, cụ thể như: Khái niệm và Cú pháp, định nghĩa hàm, tham số và lời gọi hàm, đệ quy,...Mời các bạn cùng tham khảo!
& VC BB TIN HỌC CƠ SỞ HÀM VÀ CHƯƠNG TRÌNH CON ThS Nguyễn Mạnh Sơn Khoa: Cơng nghệ thông tin Email: nguyenmanhson@gmail.com 6/5/2018 & VC BB Nội dung Khái niệm Cú pháp Định nghĩa hàm Tham số lời gọi hàm Đệ quy & VC BB Khái niệm hàm Tại phải dùng chương trình con: Có cơng việc cần phải thực nhiều nơi chương trình tách cơng việc thành chương trình Để thuận tiện quản lý, trình bày phát triển Trong C, chương trình gọi hàm: có tên, đầu vào đầu Có chức giải số vấn đề chuyên biệt cho chương trình & VC BB Khái niệm hàm Hàm C trả kết thơng qua tên hàm hay khơng trả kết Một hàm định nghĩa gọi chương trình Được gọi nhiều lần với tham số khác Trong C, hàm main() gọi thực Hàm có hai loại: hàm chuẩn (hàm trình biên dịch C viết sẵn) hàm tự định nghĩa người sử dụng & VC BB Hàm thư viện/hàm chuẩn Hàm thư viện hàm định nghĩa sẵn thư viện Muốn sử dụng hàm thư viện phải khai báo thư viện trước sử dụng lệnh #include & VC BB Hàm thư viện/hàm chuẩn Ý nghĩa số thư viện thường dùng: stdio.h: - Thư viện chứa hàm vào/ chuẩn (standard input/output) - Gồm hàm printf(), scanf(), getc(), putc(), gets(), puts(), fflush(), fopen(), fclose(), fread(), fwrite(), getchar(), putchar(), getw(), putw()… conio.h : - Thư viện chứa hàm vào chế độ DOS (DOS console) - Gồm hàm clrscr(), getch(), getche(), getpass(), cgets(), cputs(), putch(), clreol(),… & VC BB Hàm thư viện/hàm chuẩn math.h: - Thư viện chứa hàm tính tốn - Gồm hàm abs(), sqrt(), log() log10(), sin(), cos(), tan(), acos(), asin(), atan(), pow(), exp(),… alloc.h: - Thư viện chứa hàm liên quan đến việc quản lý nhớ - Gồm hàm calloc(), realloc(), malloc(), free(), farmalloc(), farcalloc(), farfree(), … & VC BB Hàm thư viện/hàm chuẩn io.h: - Thư viện chứa hàm vào cấp thấp - Gồm hàm: open(), _open(), read(), _read(), close(), _close(), creat(), _creat(), creatnew(), eof(), filelength(), lock(),… graphics.h: - Thư viện chứa hàm liên quan đến đồ họa - Gồm initgraph(), line(), circle(), putpixel(), getpixel(), setcolor(), … Muốn sử dụng hàm thư viện ta phải xem cú pháp hàm sử dụng theo cú pháp (xem phần trợ giúp Turbo C) & VC BB Hàm tự định nghĩa & VC BB Đặt vấn đề Viết chương trình tính S = a! + b! + c! với a, b, c số ngun dương nhập từ bàn phím Chương trình Nhập a, b, c > Nhập a>0 Nhập b>0 Tính S = a! + b! + c! Nhập c>0 Tính s1=a! Tính s2=b! Xuất kết S Tính s3=c! 10 & VC BB Tầm vực int a; int Ham1() { int a1; } int Ham2() { int a2; { int a21; } } void main() { int a3; } 20 & VC BB Một số 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) hàm main phần định nghĩa hàm 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); } 21 & VC BB Các cách truyền tham số Ví dụ: Viết chương trình hốn vị phần tử #include 10 11 12 13 14 15 16 17 18 // Truyền tham trị void Swap1 (int x, int y) { int temp = x; x = y; y = temp; } // Truyền tham biến (con trỏ) void Swap2 (int *x, int *y) { int temp = *x; *x = *y; *y = temp; } // Truyền tham chiếu void Swap3 (int &x, int &y) { int temp = x; x = y; y = temp; } int main() { int m=12; n=28; Swap1(m,n); printf(“m=%d n=%d\n”,m,n”); Swap2(&m,&n); printf(“m=%d n=%d\n”,m,n”); Swap3(m,n); printf(“m=%d n=%d\n”,m,n”); return 0; } ? 22 & VC BB Các cách truyền tham số Truyền Giá trị (Call by Value) (tham trị) Truyền đối số cho hàm dạng giá trị Có thể truyền hằng, biến, biểu thức hàm nhận giá trị Được sử dụng khơng có nhu cầu thay đổi giá trị tham số sau thực hàm void TruyenGiaTri(int x) { … x++; } 23 & VC BB Các cách truyền tham số Mặc nhiên, việc truyền tham số cho hàm C truyền theo giá trị; nghĩa giá trị thực (tham số thực) không bị thay đổi giá trị truyền cho tham số hình thức Ví dụ 1: Giả sử muốn in các, dòng gồm 50 ký tự Để đơn giản ta viết hàm, hàm in dòng 50 ký tự cho trước 24 & VC BB Các cách truyền tham số #include #include void InKT(char ch) { int i; for(i=1;i 0) return GiaiThua(n – 1) * n; else return 1; } 33 & VC BB Đặc điểm cần lưu ý viết hàm đệ quy - Hàm đệ quy phải có phần: + Phần dừng hay phải có trường hợp ngun tố Trong ví dụ trường hợp n=0 trường hợp nguyên tố + Phần đệ quy: phần có gọi lại hàm định nghĩa Trong ví dụ phần đệ quy n>0 n! = n * (n-1)! - Sử dụng hàm đệ quy chương trình làm chương trình dễ đọc, dễ hiểu vấn đề nêu bật rõ ràng Tuy nhiên đa số trường hợp hàm đệ quy tốn nhớ nhiều tốc độ thực chương trình chậm khơng đệ quy - Tùy có cụ thể mà người lập trình định có nên dùng đệ quy hay khơng (có trường hợp khơng dùng đệ quy khơng giải toán) 34 ... Tại phải dùng chương trình con: Có cơng việc cần phải thực nhiều nơi chương trình tách cơng việc thành chương trình Để thuận tiện quản lý, trình bày phát triển Trong C, chương trình gọi... (n-1)! - Sử dụng hàm đệ quy chương trình làm chương trình dễ đọc, dễ hiểu vấn đề nêu bật rõ ràng Tuy nhiên đa số trường hợp hàm đệ quy tốn nhớ nhiều tốc độ thực chương trình chậm khơng đệ quy -. .. Khái niệm Một chương trình gọi chương trình khác Nếu gọi gọi đệ quy Số lần gọi phải có giới hạn (điểm dừ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