Bài giảng Lập trình C - Chương 4: Lập trình hàm - Trần Minh Thái

Trình bày kỹ thuật lập trình bằng phương pháp thủ tục hàm Cách thức phân tích bài toán thành các hàm con Giới thiệu về hàm đệ quy

pptx63 trang | Chia sẻ: candy98 | Lượt xem: 517 | Lượt tải: 0download
Bạn đang xem trước 20 trang tài liệu Bài giảng Lập trình C - Chương 4: Lập trình hàm - Trần Minh Thái, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Lập trình C Chương 4. Lập trình hàm (3 tiết)Trần Minh TháiEmail: minhthai@huflit.edu.vn Website: www.minhthai.edu.vn Cập nhật: 09/11/2016 Mục tiêuTrình bày kỹ thuật lập trình bằng phương pháp thủ tục hàmCách thức phân tích bài toán thành các hàm conGiới thiệu về hàm đệ quyCấu trúc chương trìnhKhai báoCài đặt hàmHàm main()CHƯƠNG TRÌNH CKhai báo thư viện hàmKhai báo hàmKhai báo hằng số Cài đặt tất cả những hàm con đã được khai báoGọi thực hiện các hàm theo yêu cầu của bài toánXét chương trình nhập vào số nguyên dương n, in ra màn hình các số nguyên tố nhỏ hơn nVí dụ: Nhập n = 10 Kết quả in ra màn hình là: 2, 3, 5, 7Ví dụint main(){ int n; printf("Nhap so nguyen duong: "); scanf("%d", &n); printf("Cac so nguyen to nho hon %d la:\n", n); for (int so = 2; so TênHàm([ds tham số]);Mẫu hàmTênHàm: Đặt tên theo qui ước sao cho phản ánh đúng chức năng thực hiện của hàmDanh sách các tham số (nếu có): đầu vào của hàm Trong một số trường hợp có thể là đầu vào và đầu ra của hàm nếu kết quả đầu ra có nhiều giá trị - Tham số này gọi là tham chiếu, phần này sẽ đề cập sauHàm không trả về giá trịCài đặtvoid TênHàm([danh sách các tham số]){ Khai báo các biến cục bộ Các câu lệnh / khối lệnh hay lời gọi đến hàm khác.}Gọi hàmTênHàm(danh sách tên các đối số);Những phương thức loại này thường rơi vào những nhóm chức năng: Nhập / xuất dữ liệu , thống kê, sắp xếp, liệt kêVí dụ Viết chương trình nhập số nguyên dương n và in ra màn hình các ước số của nPhân tích bài toán: Input: n (Để xác định tham số) KDL: số nguyên dương (int).Output: In ra các ước số của n (KDL trả về của hàm)Xuất ra màn hình  Không trả về giá trị  KDL của hàm là voidXác định tên hàm: Hàm này dùng in ra các ước số của n nên có thể đặt là LietKeUocSovoid LietKeUocSo(int n);#include #include #pragma warning (disable: 4996)void LietKeUocSo(int n);void LietKeUocSo(int n){ for (int i = 1; i TênHàm([danh sách các tham số]){ kq; Khai báo các biến cục bộ Các câu lệnh / khối lệnh hay lời gọi đến hàm khác.  return kq;}Hàm có trả về giá trịGọi hàm Tên biến = TênHàm (danh sách tên các đối số);Những hàm này thường rơi vào các nhóm: Tính tổng, tích, trung bình, đếm, kiểm tra, tìm kiếm Ví dụ Viết chương trình nhập số nguyên dương n và tính tổng Phân tích bài toán: Input: n (Tham số)KDL: số nguyên dương (int). Output: Tổng S (KDL phương thức)Trả về giá trị của S.S là tổng các số nguyên dương nên S cũng là số nguyên dương  KDL trả về của hàm là int (hoặc long). TênHàm: Dùng tính tổng S nên có thể đặt là TinhTongint TinhTong(int n);#include #include #pragma warning (disable: 4996)int TinhTong(int n);int TinhTong(int n){int kq = 0;for (int i = 1; i #include#pragma warning(disable:4996)void NhapBanKinh(int &r);float TinhChuVi(int r);float TinhDienTich(int r);void XuatKetQua(int r);Cài đặt hàmvoid NhapBanKinh(int &r){printf("Nhap vao ban kinh hinh tron: ");scanf("%d", &r);}float TinhChuVi(int r){ return 2 * 3.14 *r;}float TinhDienTich(int r){ return 3.14*r*r;}Cài đặt hàmvoid XuatKetQua(int r){float cv = TinhChuVi(r);float dt = TinhDienTich(r);printf("Chu vi hinh tron ban kinh %d = %f\n", r, cv);printf("Dien tich hinh tron ban kinh %d = %f", r, dt);}Cài đặt hàm main()int main(){int r;NhapBanKinh(r);XuatKetQua(r);getch();return 0;}Bài tập1. Viết chương trình tính diện tích và chu vi của hình chữ nhật với chiều dài và chiều rộng là 2 số nguyên dương được nhập từ bàn phím.2. Viết chương trình nhập 2 số nguyên a, b. Tìm USCLN và BSCNN của hai số nguyên đó3. Nhập vào 3 số nguyên a, b, c và kiểm tra xem chúng có thành lập thành 3 cạnh của một tam giác hay không? Nếu có, hãy tính diện tích, chiều dài mỗi đường cao của tam giác và in kết quả ra màn hình.Công thức tính diện tích hình tam giác s = sqrt(p*(p-a)*(p-b)*(p-c) ) với p là nửa chu vi của tam giácCông thức tính các đường cao: ha = 2s/a, hb=2s/b, hc=2s/c.Bài tậpBài tập4. Viết chương trình nhập số nguyên dương n, tính tổng các ước số dương của n. Ví dụ: Nhập n=6 Tổng các ước số từ 1 đến n: 1+2+3+6=12.5. Nhập vào giờ, phút, giây. Kiểm tra xem giờ, phút, giây đó có hợp lệ hay không? In kết quả ra màn hình.6. Viết chương trình nhập số nguyên dương n gồm k chữ số, đếm xem n có bao nhiêu chữ số là số nguyên tố.7. Viết chương trình tính tiền thuê máy dịch vụ Internet. Với dữ liệu nhập vào là giờ bắt đầu thuê (GBD), giờ kết thúc thuê (GKT), số máy thuê (SoMay). Điều kiện cho dữ liệu nhập: 6 TenHam (){ if (điều kiện dừng) { . . . //Trả về giá trị hay kết thúc công việc } //Thực hiện một số công việc (nếu có) . . . TenHam (); //Thực hiện một số công việc (nếu có)}Ví dụVí dụ: Tính - Điều kiện dừng: S(0) = 0.- Qui tắc (công thức) tính: S(n) = S(n-1) + n.long TongS (int n){ if(n==0) return 0; return TongS(n-1) + n;}Đệ qui nhị phânTrong thân của hàm có hai lời gọi hàm gọi lại chính nó một cách tường minh. TenHam (){ if (điều kiện dừng) { . . . //Trả về giá trị hay kết thúc công việc } //Thực hiện một số công việc (nếu có) . . .TenHam (); //Giải quyết vấn đề nhỏ hơn //Thực hiện một số công việc (nếu có) . . . TenHam (); //Giải quyết vấn đề còn lại //Thực hiện một số công việc (nếu có)}Ví dụ: Tính số hạng thứ n của dãy Fibonaci được định nghĩa như sau:f1 = f0 =1 ; fn = fn-1 + fn-2­ ; (n>1)Điều kiện dừng: f(0) = f(1) = 1.long Fibonaci (int n){ if(n==0 || n==1) return 1; return Fibonaci(n-1) + Fibonaci(n-2);}Đệ qui phi tuyến TenHam (){ for (int i = 1; i); } }}Ví dụ: Tính số hạng thứ n của dãy {Xn} được định nghĩa như sau:X0 =1 ; Xn = n2X0 + (n-1)2X1 + + 12Xn-1­ ; (n≥1)Điều kiện dừng:X(0) = 1.long TinhXn (int n){ if(n==0) return 1; long s = 0; for (int i=1; i TenHam2 (); TenHam1 (){//Thực hiện một số công việc (nếu có)TenHam2 (); //Thực hiện một số công việc (nếu có)} TenHam2 (){//Thực hiện một số công việc (nếu có)TenHam1 (); //Thực hiện một số công việc (nếu có)}Ví dụ: Tính số hạng thứ n của hai dãy {Xn}, {Yn} được định nghĩa như sau:X0 =Y0 =1 ; Xn = Xn-1 + Yn-1; (n>0)Yn = n2Xn-1 + Yn-1; (n>0)- Điều kiện dừng: X(0) = Y(0) = 1.long TinhYn(int n);long TinhXn (int n){ if(n==0) return 1; return TinhXn(n-1) + TinhYn(n-1);}long TinhYn (int n){ if(n==0) return 1; return n*n*TinhXn(n-1) + TinhYn(n-1);}Cách hoạt động hàm đệ quiVí dụ tính n! với n=5Q&A