Bài giảng Tin học đại cương - Chương 3: Hàm và tổ chức chương trình cung cấp cho người học các kiến thức: Tổ chức chương trình thành các hàm, tham số kiểu con trỏ, đệ quy. Cuối bài giảng có phần bài tập để người học ôn tập và củng cố kiến thức đã học.
TIN HỌC ĐẠI CƯƠNG Chương 3: Hàm tổ chức chương trình ttdung@utc2.edu.vn Nội dung Tổ chức chương trình thành hàm Tham số kiểu trỏ Đệ quy Bài tập thực hành ttdung@utc2.edu.vn 3.1 Tổ chức chương trình thành hàm Khái niệm hàm Một hàm C hiểu theo nghĩa “Routine” “subprogram" Hàm đơn vị độc lập C • Khơng xây dựng hàm bên hàm khác • Mỗi hàm có biến, hằng, mảng riêng Một chương trình viết C gồm nhiều hàm, có hàm hàm “main()” Hàm có giá trị trả (kết hàm) khơng có giá trị trả (chỉ đơn thực cơng việc đó) Hàm có khơng có tham số ttdung@utc2.edu.vn Khai báo hàm Nguyên mẫu hàm (prototype hàm) Prototype hàm rõ đặc điểm + Tên hàm + Số lượng kiểu tham số hàm nhận + Giá trị trả sau hàm kết húc + Phải khai báo prototype hàm trước sử dụng hàm -> thường khai báo nguyên mẫu đầu chương trình Prototype hàm khơng cho thấy hàm làm Cơng thức khai báo: Kiểu_hàm Tên_hàm (Kiểu_tham_số_1, Kiểu_tham_số_2, ); ttdung@utc2.edu.vn Cài đặt hàm Xác định xác lệnh mà hàm phải thực Thường cài đặt cuối chương trình đặt file thư viện riêng Cách cài đặt: Kiểu_hàm Tên_hàm (Kiểu_1 Tên_tham_số_1, Kiểu_2 Tên_tham_số_2, ) { - Khai báo biến, cục hàm - Các lệnh hàm thực return ; } ttdung@utc2.edu.vn Ví dụ //ỉn cac so nguyên to sử dụng trỏ kiểu int • Biến kiểu float -> sử dụng trỏ kiểu float • Biến kiểu char -> sử dụng trỏ kiểu char • Cú pháp khai báo trỏ kiểu_dữ_liệu *tên_con_trỏ; • Ví dụ int i, j, *pi, *pj; pi = &i; /* pi trỏ chứa địa biến i */ pj = &j; /* pj trỏ chứa địa biến j */ ttdung@utc2.edu.vn 14 Con trỏ (tt) • Giả sử có • px trỏ đến biến x, cánh viết x *px tương đương • Ví dụ int x, y, *px, *py; px = &x; py = &y; x = 3; /*tương đương với *px = */ y = 5; /*tương đương với *py = */ /* Các câu lệnh tương đương: */ x = 10 * y; *px = 10 * y; x= 10 * (*py); *px = 10 * (*py); ttdung@utc2.edu.vn 15 Hàm có tham số trỏ ttdung@utc2.edu.vn 16 Hàm có tham số trỏ (tt) • Chương trình cho kết khơng • Tại ? • Do chế biến cục hay tham số hình thức bị giải phóng nhớ hàm kết thúc ? • Truyền tham số thực cho hàm địa biến thay truyền giá trị biến • Sử dụng tham số trỏ! ttdung@utc2.edu.vn 17 Hàm có tham số trỏ (tt) ttdung@utc2.edu.vn 18 Hàm có tham số trỏ (tt) ttdung@utc2.edu.vn 19 Hàm có tham số trỏ (tt) • Khi dùng tham số trỏ ? • Cần phân biệt hai loại tham số hình thức • Tham số hình thức nhận giá trị truyền vào để hàm thao tác, trường hợp gọi tham số vào • Tham số hình thức dùng để chứa kết hàm, trường hợp gọi tham số • Đối với tham số ta phải sử dụng kiểu trỏ • Bài tập • Giải thích tham số lệnh scanf • Viết hàm giải phương trình bậc hai ttdung@utc2.edu.vn 20 3.3 Hàm đệ quy • Ngôn ngữ C cho phép hàm gọi tới từ điểm thân hàm • Những hàm có lời gọi hàm tới gọi hàm đệ quy long int giaithua(int n) { if(n== || n== 1) return 1; else return n * giaithua(n-1); ttdung@utc2.edu.vn } void main() { int n; printf ("Nhap N = ”); scanf(“%d", &n) ; printf("%d! = %ld", n, giaithua(n) ); getch{); } 21 3.3 Hàm đệ quy (tt) Điều xảy có lời gọi hàm sau k = giaithua (-1); Khắc phục ? Hạn chế hàm đệ qui 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 ttdung@utc2.edu.vn 22 3.3 Hàm đệ quy (tt) • Hàm đệ qui thường phù hợp để giải tốn có đặc trưng 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 • Ví dụ: tìm USCLN hai số nguyên dương - x = y usc(x, y) = x x > y usc(x, y) = usc(x-y, y) x < y usc(x, y) = usc(x, y-x) ttdung@utc2.edu.vn 23 Cách xây dựng hàm đệ quy • Thường xây dựng theo thuật tốn sau: Ví dụ: ttdung@utc2.edu.vn 24 3.4 Bài tập hàm đệ quy • 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, ttdung@utc2.edu.vn 25 ...Nội dung Tổ chức chương trình thành hàm Tham số kiểu trỏ Đệ quy Bài tập thực hành ttdung@utc2.edu.vn 3.1 Tổ chức chương trình thành hàm Khái niệm hàm Một hàm C hiểu theo nghĩa “Routine” “subprogram"... “subprogram" Hàm đơn vị độc lập C • Khơng xây dựng hàm bên hàm khác • Mỗi hàm có biến, hằng, mảng riêng Một chương trình viết C gồm nhiều hàm, có hàm hàm “main()” Hàm có giá trị trả (kết hàm) giá... Phải khai báo prototype hàm trước sử dụng hàm -> thường khai báo nguyên mẫu đầu chương trình Prototype hàm khơng cho thấy hàm làm Cơng thức khai báo: Kiểu _hàm Tên _hàm (Kiểu_tham_số_1, Kiểu_tham_số_2,