Bài giảng kỹ thuật lập trình c chương 5 ths trần quang hải bằng

15 430 0
Bài giảng kỹ thuật lập trình c  chương 5   ths  trần quang hải bằng

Đ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

KỸ THUẬT LẬP TRÌNH C Chương 5: Xây dựng hàm bangtqh@hotmail.com 04/2010 Khái niệm hàm (function) • 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ụ – Hàm tính sin, cos, tan, … toán học – Hàm tính max, min, TBC, TBN dãy số, … • Một chương trình C dãy hàm, có hàm chính, ñược đặt tên main • Trong C không chấp nhận khái niệm hàm lồng hàm bangtqh@hotmail.com Kỹ thuật lập trình C - Xây dựng Hàm 04/2010 Ví dụ hàm C #include #include float max2so(float a, float b); /* Nguyên mẫu hàm */ void 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)); getch(); } /* 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; } bangtqh@hotmail.com Kỹ thuật lập trình C - Xây dựng Hàm 04/2010 Hàm C • Định nghĩa hàm – Cú pháp kiểu_dữ_liệu_trả_về_của_hàm TÊNHÀ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 • Nếu định nghĩa hàm đặt sau hàm main thi phải khai báo nguyên mẫu hàm (prototype) ñầ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 bangtqh@hotmail.com Kỹ thuật lập trình C - Xây dựng Hàm 04/2010 Hàm C • Đị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 • 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 tham số hình thức sử dụng từ khóa void, không khai báo bangtqh@hotmail.com Kỹ thuật lập trình C - Xây dựng Hàm 04/2010 Hàm C • Lưu ý – 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 • Bài tập ví dụ – 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, vuông, đều) bangtqh@hotmail.com Kỹ thuật lập trình C - Xây dựng Hàm 04/2010 Hàm C • 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 • 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 – Ví dụ max2so(12, 341); – Lưu ý • 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 bangtqh@hotmail.com Kỹ thuật lập trình C - Xây dựng Hàm 04/2010 Hàm C • Ví dụ: viết hàm tính giá trị n! #include #include long giai_thua(int n); /* nguyên mẫu hàm */ void 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 */ getch(); } long giai_thua(int n) { int i; long gt = 1; if (n < 0) gt = 0; else for (i=2; i y) return usc(x-y, y); else return usc(x, y-x); } 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 đệ quy ñể tạo dãy số Fibonacci – Dãy số Fibonacci dãy số F1, F2, F3, Fn có quy luật: Fn = Fn-1 + Fn-2 Với F1=1, F2=1 – Hàm đệ quy tìm Ước số chung lớn số x, y bangtqh@hotmail.com Vd: 1, 1, 2, 3, 5, 8, 13, 21, Viết hàm đệ quy ñảo ngược xâu ký tự s nhập từ bàn phím Kỹ thuật lập trình C - Xây dựng Hàm 28 04/2010 Hàm chuẩn C • • • • • • Là định nghĩa sẵn printf, scanf, puts, gets, … (thư viện stdio.h) clrscr, getch, getche, … (thư viện conio.h) rand, randomize, … (thư viện stdlib.h) abs, fabs, sqrt, sin, cos, tan, … ( thư viện math.h) … bangtqh@hotmail.com Kỹ thuật lập trình C - Xây dựng Hàm 29 04/2010 bangtqh@hotmail.com Kỹ thuật lập trình C - Xây dựng Hàm 30 [...]...04/2010 Do c chế biến c c bộ hay tham số hình th c bị giải phóng bộ nhớ khi hàm kết th c Chương trình trên cho kết quả không đúng ! • Hãy truyền tham số th c cho hàm là địa chỉ biến thay vì truyền giá trị biến • Sử dụng tham số là con trỏ bangtqh@hotmail.com Kỹ thuật lập trình C - Xây dựng Hàm 21 04/2010 #include #include void hoan_vi(int *a, int *b);... loại tham số hình th c • Tham số hình th c chỉ nhận giá trị truyền vào để hàm thao t c, trường hợp c thể gọi là tham số vào • Tham số hình th c dùng để chứa kết quả c a hàm, trường hợp này c thể gọi là tham số ra – Đối với tham số ra ta phải sử dụng kiểu con trỏ • Bài tập – Giải thích tham số c a lệnh scanf – Viết hàm giải phương trình b c hai bangtqh@hotmail.com Kỹ thuật lập trình C - Xây dựng Hàm 23... chương trình sử dụng hàm đệ quy ñể tạo dãy số Fibonacci – Dãy số Fibonacci là dãy số F1, F2, F3, Fn c quy luật: Fn = Fn-1 + Fn-2 Với F1=1, F2=1 – Hàm đệ quy tìm Ư c số chung lớn nhất c a 2 số x, y bangtqh@hotmail.com Vd: 1, 1, 2, 3, 5, 8, 13, 21, 3 Viết hàm đệ quy ñảo ngư c 1 xâu ký tự s bất kỳ nhập từ bàn phím Kỹ thuật lập trình C - Xây dựng Hàm 28 04/2010 Hàm chuẩn trong C • • • • • • Là c c đã đư c. .. hai c ch viết đệ quy và lặp bangtqh@hotmail.com Kỹ thuật lập trình C - Xây dựng Hàm 26 04/2010 Hàm đệ quy trong C • Hàm đệ quy thường phù hợp để giải quyết c c bài toán c ñ c trưng – Bài toán dễ dàng giải quyết trong một số trường hợp riêng, ñó chính là điều kiện dừng đệ quy – Trong trường hợp tổng quát, bài toán suy về c ng dạng nhưng giá trị tham số bị thay ñổi • Ví dụ: Tìm ư c số chung lớn nhất c a... Ư c số chung lớn nhất c a hai số nguyên dương đư c định nghĩa như sau • nếu x = y thì usc(x, y) = x • nếu x > y thì usc(x, y) = usc(x-y, y) • nếu x < y thì usc(x, y) = usc(x, y-x) bangtqh@hotmail.com Kỹ thuật lập trình C - Xây dựng Hàm 27 04/2010 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); } 1 Viết lại hàm usc dùng vòng lặp 2 Hãy viết chương. .. giai_thua(n-1)); } – Sử dụng hàm đệ quy c n một bộ nhớ xếp chồng LIFO (Last In, First Out stack) để lưu trữ c c giá trị trung gian – Giải thích c chế hoạt động hàm giai_thua với lời gọi hàm giai_thua(3) bangtqh@hotmail.com Kỹ thuật lập trình C - Xây dựng Hàm 25 04/2010 Hàm đệ quy trong C • Điều gì xảy ra nếu c lời gọi hàm sau k = giai_thua(-1); • Kh c ph c ? • Hạn chế c a hàm đệ quy – Dùng nhiều bộ nhớ... trong C • • • • • • Là c c đã đư c định nghĩa sẵn printf, scanf, puts, gets, … (thư viện stdio.h) clrscr, getch, getche, … (thư viện conio.h) rand, randomize, … (thư viện stdlib.h) abs, fabs, sqrt, sin, cos, tan, … ( thư viện math.h) … bangtqh@hotmail.com Kỹ thuật lập trình C - Xây dựng Hàm 29 04/2010 bangtqh@hotmail.com Kỹ thuật lập trình C - Xây dựng Hàm 30 ... trình C - Xây dựng Hàm 23 04/2010 Hàm đệ quy trong C • Là hàm mà từ trong thân hàm c lời gọi tới chính hàm đó • Hàm đệ quy ñư c xây dựng dựa trên định nghĩa đệ quy trong toán h c • Ví dụ: ñịnh nghĩa giai thừa c a n (n!) n! = 1.2.3…n Ho c n! = 1 n.(n-1)! bangtqh@hotmail.com khi n = 0 khi n >= 1 Kỹ thuật lập trình C - Xây dựng Hàm 24 04/2010 Hàm đệ quy trong C – Viết hàm đệ quy tính n! long giai_thua (int... printf(" Trư c khi gọi hàm : %d %d\n", n, p); hoan_vi(&n, &p); printf(" Sau khi gọi hàm : %d %d\n", n, p); getch(); } void hoan_vi(int *a, int *b){ int t; printf(" Trư c khi hoán vị : %d %d\n", *a, *b); t=*a; *a=*b; *b=t; : %d %d\n", *a, *b); printf(" Sau khi hoán vị } bangtqh@hotmail.com Kỹ thuật lập trình C - Xây dựng Hàm 22 04/2010 Truyền tham số cho hàm • Khi nào thì dùng tham số là con trỏ ? – C n phân ... c c tĩnh biến toàn c c – C ng tồn suốt thời gian chương trình hoạt động • Sự kh c biến c c tĩnh biến toàn c c – Biến toàn c c ñư c sử dụng kể từ vị trí khai báo đến cuối chương trình – Biến c c. .. toàn c c bị hủy chương trình kết th c – Sau hàm kết th c hoạt động tham số hình th c biến c c bị hủy bangtqh@hotmail.com Kỹ thuật lập trình C - Xây dựng Hàm 10 04/2010 Biến toàn c c, biến c c •... bangtqh@hotmail.com Kỹ thuật lập trình C - Xây dựng Hàm 11 04/2010 Biến toàn c c, biến c c • Lưu ý – Biến toàn c c sử dụng khắp chương trình – Vi c thay đổi tùy tiện giá trị biến toàn c c sẽ: • Khó

Ngày đăng: 03/12/2015, 14:36

Từ khóa liên quan

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

  • Đang cập nhật ...

Tài liệu liên quan