Bài giảng Ngôn ngữ lập trình C: Chương 4 - PhD. Nguyễn Thị Huyền

21 37 0
Bài giảng Ngôn ngữ lập trình C: Chương 4 - PhD. Nguyễn Thị Huyền

Đ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

Bài giảng Ngôn ngữ lập trình C - Chương 4: Hàm cung cấp cho người học các kiến thức: Giới thiệu, khai báo prototype, viết nội dung của hàm, tham số trong lời gọi hàm, hàm đệ quy. Mời các bạn cùng tham khảo nội dung chi tiết.

lue) theo tham biến hay tham trỏ (by variable/pointer) Truyền tham số cho hàm Truyền giá 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++; } Truyền tham số cho hàm Truyền Địa (Call by Address) Truyền đối số cho hàm dạng địa (con trỏ) Không truyền giá trị cho tham số Được sử dụng có nhu cầu thay đổi giá trị tham số sau thực hàm void TruyenDiaChi(int *x) { … (*x)++; } Truyền tham số cho hàm  Truyền mảng vào hàm:  Chỉ có địa mảng truyền vào (tên mảng không kèm theo số địa mảng)  Ví dụ: int a[20], n = 10; Input_array(a, n); /*Input_array(int a[], int n) hàm nhập giá trị phần tử mảng từ bàn phím*/ Truyền tham số cho hàm Lưu ý truyền tham số Trong hàm, tham số truyền theo nhiều cách void HonHop(int x, int *y) { … x++; (*y)++; } Truyền tham số cho hàm Lưu ý truyền đối số Sử dụng tham chiếu cách để trả 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; } Truyền tham số cho hàm Một số lưu ý gọi hàm { Các hàm khai báo } void main() { int n = 9; XuatTong(1, 2); XuatTong(1, n); TinhTong(1, 2); int tong = TinhTong(1, 2); TruyenGiaTri(1); TruyenGiaTri(n); TruyenDiaChi(1); TruyenDiaChi(&n); } Hàm đệ quy  Định nghĩa:  Hàm đệ quy hàm cho phép gọi đến thân hàm  Khi hàm gọi đệ qui đến nó, lần gọi máy tạo tập hoàn toàn độc lập với tập tạo lần gọi trước 17 Hàm đệ quy  Các toán sử dụng hàm đệ quy: Thường áp dụng cho tốn phụ thuộc tham số có đặc điểm sau:  Bài toán dễ dàng giải số trường hợp riêng ứng với giá trị đặc biệt tham số Người ta thường gọi trường hợp suy biến  Trong trường hợp tổng qt, tốn qui tốn dạng giá trị tham số bị thay đổi Sau số hữu hạn bước biến đổi đệ qui dẫn tới trường hợp suy biến Hàm đệ quy  Cách xây dựng hàm đệ quy: if (trường hợp suy biến){ Thực cách giải toán suy biến } else { /* Trường hợp tổng quát */ Gọi đệ qui tới hàm viết với giá trị khác tham số } Hàm đệ quy  Ví dụ: Tính n! #include "stdio.h“ #include "ctype.h“ long gtdq(int n) { if (n==0 || n==1) return 1; else return(n*gtdq(n-1)); } main() { char kt; int n; do{ printf("Nhap vao mot so: "); scanf("%d",&n); printf("\n n!=%ld",gtdq(n)); printf("\nCo tinh tiep? (c/k)"); kt=getche(); } while (toupper(kt)=='C'); } Giải thích hoạt động hàm đệ qui: • Lần gọi, máy lấy giá trị đối số lần cho hàm giai thừa, số n, tính biểu thức: n*gtdq(n-1); (*) • Trong biểu thức khơng tính trực tiếp được, thơng tin cũ đưa vào Stack, máy gọi lại hàm giai thừa tính với đối số n-1, tính biểu thức: (n-1)*gtdq(n-2); • Tương tự đến Khi thực hiện: 2*gtdq(1) ; (**) • Khi đến thực hiện: return 1; (***) • Đến đây, máy lấy Stack để tính, tính cho biểu thức: 2*gtdq(1) kết (**) • Tương tự Stack rỗng, ta có n! • Chú ý: • Khi dùng hàm đệ qui, máy tính dùng nhiều nhớ ngăn xếp dẫn đến tràn ngăn xếp Vì gặp tốn mà có cách giải vịng lặp (khơng dùng đệ qui) ta nên dùng cách Hàm đệ quy  Một số ví dụ:  Tính tổng + + … + n  Tính số Fibonaci  Tìm USCLN số nguyên  Chuyển số nguyên n từ số 10 sang số  Tìm kiếm nhị phân mảng xếp  Đảo ngược mảng ... tính biểu th? ?c: n*gtdq(n-1); (*) • Trong biểu thức khơng tính trực tiếp được, thơng tin cũ đưa vào Stack, máy gọi lại hàm giai thừa tính với đối số n-1, tính biểu th? ?c: (n-1)*gtdq(n-2); • Tương... độc lập với tập tạo lần gọi trước 17 Hàm đệ quy  Các tốn sử dụng hàm đệ quy: Thường áp dụng cho tốn phụ thuộc tham số có đặc điểm sau:  Bài. .. (*y)++; } Truyền tham số cho hàm Lưu ý truyền đối số Sử dụng tham chiếu cách để trả giá trị cho chương trình int TinhTong(int x, int y) { return x + y; } void TinhTong(int x, int y, int *tong) {

Ngày đăng: 08/07/2020, 11:20

Hình ảnh liên quan

 <danh sách tham số> : tham số hình thức đầu vào giống khai báo biến, cách nhau bằng dấu, - Bài giảng Ngôn ngữ lập trình C: Chương 4 - PhD. Nguyễn Thị Huyền

lt.

;danh sách tham số> : tham số hình thức đầu vào giống khai báo biến, cách nhau bằng dấu, Xem tại trang 4 của tài liệu.
 Chú ý: Số đối số = số tham số hình thức - Bài giảng Ngôn ngữ lập trình C: Chương 4 - PhD. Nguyễn Thị Huyền

h.

ú ý: Số đối số = số tham số hình thức Xem tại trang 7 của tài liệu.

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

Tài liệu liên quan