Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 32 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
32
Dung lượng
263,01 KB
Nội dung
Lập trình bản: Ngơn ngữ lập trình C Đỗ Thị Mai Hường Bộ môn Hệ thống thông tin Khoa Công nghệ thông tin Hàm Hàm (function) dãy lệnh nhằm thực công việc đó, thường sử dụng nhiều lần Ví dụ Việc tính sin, cos, tan, … tốn học Xây dựng hàm tính sin, cos, … Một chương trình C dãy hàm, có hàm chính, đặt tên main 2-Dec-13 Hàm Ví dụ #include float max2so(float a, float b); /* Nguyên mẫu hàm */ main() /* bắt đầu hàm */ { float x, y; printf(“Nhập vào số: ”); scanf(“%f%f”, &x, &y); printf(“Giá trị lớn %f %f %f\n”, x, y, max2so(x, y)); } /* kết thúc hàm main */ /* định nghĩa hàm max2so */ float max2so(float a, float b) { float max; /* khai báo biến cục */ max = a > b ? a : b; return max; } 2-Dec-13 Hàm Các khái niệm 2-Dec-13 Tên hàm Kiểu giá trị trả hàm Đối hay tham số hình thức Thân hàm Nguyên mẫu hàm / khai báo hàm Lời gọi hàm Tham số thực Hàm Định nghĩa hàm Cú pháp kiểu_dữ_liệu_trả_về_của_hàm tên_hàm ([khai_báo_các_tham_số]) { khai báo dùng riêng bên hàm có; lệnh bên hàm; [return giá_trị_trả_về;] } Định nghĩa hàm đặt trước sau hàm main 2-Dec-13 Nếu định nghĩa hàm đặt sau hàm main thi phải khai báo nguyên mẫu hàm đầu chương trình Nên định nghĩa hàm sau hàm main khai báo nguyên mẫu hàm Hàm Định nghĩa hàm Kiểu liệu trả hàm kiểu liệu tham số kiểu liệu chuẩn người lập trình định nghĩa Tên hàm tên tham số đặt theo quy tắc tên biến Câu lệnh return tùy chọn 2-Dec-13 Nếu hàm khơng trả giá trị, khơng cần có lệnh return Nếu hàm trả giá trị bắt buộc phải có lệnh return, trường hợp giá trị trả phải có kiểu với kiểu liệu trả hàm Nếu hàm khơng trả giá trị khai báo kiểu trả hàm void Nếu hàm khơng có tham số hình thức sử dụng từ khóa void, khơng khai báo Hàm Bài tập 2-Dec-13 Viết hàm kiểm tra số thực có cạnh tam giác Mở rộng: cạnh tam giác xác định tam giác (cân, vng, đều) Hàm Lưu ý 2-Dec-13 Không cho phép định nghĩa hàm bên hàm khác Các tham số hình thức biến định nghĩa bên hàm (biến cục bộ) sử dụng bên hàm Hàm Lời gọi hàm Hàm sử dụng thông qua lời gọi hàm Cú pháp: tên_hàm ([danh sách tham số thực]); Cần phân biệt Ví dụ max2so(12, 341); Lưu ý 2-Dec-13 Tham số hình thức hay đối: xuất định nghĩa hàm Tham số thực: xuất lời gọi hàm Số tham số thực phải số tham số hình thức Kiểu tham số thực phải phù hợp với kiểu tham số hình thức Hàm Ví dụ: viết hàm tính n! 2-Dec-13 #include long giai_thua(int n); /* nguyên mẫu hàm */ main() { int n; long gt; printf("\nn = "); scanf("%d", &n); /* Đọc số n */ gt = giai_thua(n); /* gọi hàm tính giai thừa */ printf("\n n! = %ld\n", gt); /* In kết */ } long giai_thua(int n) { int i; long gt = 1; if (n < 0) gt = 0; else for (i=2; i = 24 Hàm Hàm đệ qui Viết hàm đệ qui tính n! long giai_thua (int n) { if (n==0) return(1); else return (n * giai_thua(n-1)); } 2-Dec-13 Sử dụng hàm đệ qui cần nhớ xếp chồng LIFO (Last In, First Out stack) để lưu trữ giá trị trung gian Giải thích chế hoạt động hàm giai_thua với lời gọi hàm giai_thua(3) 25 Hàm Hàm đệ qui Điều xảy có lời gọi hàm sau Khắc phục ? Hạn chế hàm đệ qui 2-Dec-13 k = giai_thua (-1); Dùng nhiều nhớ Hãy viết lại hàm giai_thua sử dụng vòng lặp So sánh hai cách viết đệ qui lặp 26 Hàm Hàm đệ qui Hàm đệ qui thường phù hợp để giải tốn có đặc trưng 2-Dec-13 Bài toán dễ dàng giải số trường hợp riêng, điều kiện dừng đệ qui Trong trường hợp tổng quát, toán suy dạng giá trị tham số bị thay đổi 27 Hàm Hàm đệ qui Ví dụ: tìm ước số chung lớn hai số nguyên dương Ước số chung lớn hai số nguyên dương định nghĩa sau 2-Dec-13 x = y usc(x, y) = x x > y usc(x, y) = usc(x-y, y) x < y usc(x, y) = usc(x, y-x) 28 Hàm Hàm đệ qui Ví dụ: tìm ước số chung lớn hai số nguyên dương int usc(int x, int y) { if (x == y) return (x); else if (x > y) return usc(x-y, y); else return usc(x, y-x); } 2-Dec-13 29 Hàm Bài tập Viết lại hàm usc dùng vòng lặp Hãy viết chương trình sử dụng hàm đệ qui để tạo dãy số Fibonacci Dãy số Fibonacci dãy số F1, F2, F3, Fn tạo với công thức: Fn = Fn-1 + Fn-2 Với F1=1, F2=1 Ví dụ: 1, 1, 2, 3, 5, 8, 13, 21, 2-Dec-13 30 Hàm Hàm chuẩn 2-Dec-13 Là định nghĩa sẵn printf, scanf, puts, gets, … (tệp tiêu đề stdio.h) clrscr, getch, getche, … (tệp tiêu đề conio.h) rand, randomize, … (tệp tiêu đề stdlib.h) abs, fabs, sqrt, sin, cos, tan, … (tệp tiêu đề math.h) … 31 Tóm lại Khái niệm hàm Định nghĩa hàm Sử dụng hàm Địa Tham biến tham trị Hàm đệ qui Hàm chuẩn 2-Dec-13 32