Bài giảng Kỹ thuật lập trình C: Chương 5 - ThS. Trần Quang Hải Bằng
lượt xem 5
download
Sau khi học xong chương 5 Xây dựng hàm nằm trong bài giảng kỹ thuật lập trình C nhằm trình bày về các nội dung chính: khái niệm hàm, ví dụ hàm, hàm trong C, các khái niệm về hàm, biến toàn cục, biến cục bộ, biến cục bộ động và tĩnh.
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Bài giảng Kỹ thuật lập trình C: Chương 5 - ThS. Trần Quang Hải Bằng
- 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) là m t dãy các l nh nh m th c hi n m t công vi c nào đó, thư ng đư c s d ng nhi u l n • Ví d – Hàm tính sin, cos, tan, … trong toán h c – Hàm tính max, min, TBC, TBN c a dãy s , … • M t chương trình C là m t dãy các hàm, trong đó có m t hàm chính, ñư c đ t tên là main • Trong C không ch p nh n khái ni m hàm l ng trong hàm bangtqh@hotmail.com K thu t l p trình C - Xây d ng Hàm 2
- 04/2010 Ví d hàm trong C #include #include float max2so(float a, float b); /* Nguyên m u c a hàm */ void main() /* b t đ u hàm chính */ { float x, y; printf(“Nh p vào 2 s : ”); scanf(“%f%f”, &x, &y); printf(“Giá tr l n nh t c a %f và %f là %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 b */ max = a > b ? a : b; return max; } bangtqh@hotmail.com K thu t l p trình C - Xây d ng Hàm 3 04/2010 Hàm trong 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 ]) { /* các khai báo dùng riêng bên trong hàm n u có; */ /* các l nh bên trong hàm; */ [return giá_tr _tr _v ;] } – Đ nh nghĩa hàm có th ñ t trư c ho 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 và 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 4
- 04/2010 Hàm trong C • Đ nh nghĩa hàm – Ki u d li u tr v c a hàm và ki u d li u tham s là ki u d li u chu n ho c do ngư i l p trình đ nh nghĩa – Tên hàm và tên tham s ñ t theo quy t c tên bi n – Câu l nh return là tùy ch n • N u hàm không tr v giá tr , thì không c n có l nh return • N u hàm tr v giá tr thì b t bu c ph i có l nh return, trong trư ng h p này giá tr tr v ph i có cùng ki u v i ki u d li u tr v c a hàm – N u hàm không tr v giá tr thì khai báo ki u tr v c a hàm là void – N u hàm không có tham s hình th c có th s d ng t khóa void, ho c không khai báo gì c bangtqh@hotmail.com K thu t l p trình C - Xây d ng Hàm 5 04/2010 Hàm trong C • Lưu ý – Không cho phép đ nh nghĩa m t hàm bên trong hàm khác – Các tham s hình th c và các bi n đ nh nghĩa bên trong hàm (bi n c c b ) ch đư c s d ng bên trong hàm đó • Bài t p ví d – Vi t hàm ki m tra 3 s th c có là 3 c nh c a tam giác – M r ng: n u là 3 c nh tam giác thì xác đ nh đó là tam giác gì (cân, vuông, đ u) bangtqh@hotmail.com K thu t l p trình C - Xây d ng Hàm 6
- 04/2010 Hàm trong C • L i g i hàm – Hàm đư c s d ng thông qua l i g i hàm – Cú pháp: tên_hàm ( [danh sách các tham s th c] ); – C n phân bi t • Tham s hình th c hay ñ i: xu t hi n trong đ nh nghĩa hàm • Tham s th c: xu t hi n trong l i g i hàm – Ví d max2so(12, 341); – Lưu ý • S tham s th c ph i b ng s tham s hình th c • Ki u các tham s th c ph i phù h p v i ki u c a các tham s hình th c bangtqh@hotmail.com K thu t l p trình C - Xây d ng Hàm 7 04/2010 Hàm trong 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 ra k t qu */ getch(); } long giai_thua(int n) { int i; long gt = 1; if (n < 0) gt = 0; else for (i=2; i
- 04/2010 Hàm - các khái ni m • Tên hàm • Ki u giá tr tr v c a 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 bangtqh@hotmail.com K thu t l p trình C - Xây d ng Hàm 9 04/2010 Bi n toàn c c, bi n c c b • Bi n toàn c c: đư c khai báo bên ngoài thân hàm, thư ng ñ u chương trình • Bi n c c b : đư c khai báo bên trong thân hàm • Ph m vi ho t đ ng – 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 b ch ñư c s d ng bên trong hàm đó. • Th i gian s ng – Bi n toàn c c b h y khi chương trình k t thúc – Sau khi hàm k t thúc ho t đ ng thì các tham s hình th c và các bi n c c b s 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 b • Ví d #include #include int i; /* Bi n toàn c c */ void vi_du(void); void main(){ for(i=1; i
- 04/2010 Bi n toàn c c, bi n c c b • Ví d v ph m vi ho t đ ng bi n #include #include int a = 5; /* Bi n toàn c c */ void ham_vi_du() { int cuc_bo = 1; /* Bi n c c b */ int a = 10; /* Bi n c c b */ printf(“Bi n c c b trong hàm ví d :\n cuc_bo = %d\n a = %d\n”, cuc_bo, a); } void main() { int cuc_bo = 100; /* Bi n c c b */ ham_vi_du(); /* G i hàm ví d */ printf(“Bi n c c b trong hàm main:\n cuc_bo = %d\n”, cuc_bo); printf(“Bi n toàn c c:\n a = %d\n”, a); getch(); } bangtqh@hotmail.com K thu t l p trình C - Xây d ng Hàm 13 04/2010 Bi n c c b ñ ng & tĩnh • Bi n c c b ñư c chia làm hai lo i – Bi n c c b ñ ng • Bi n đư c c p phát b nh t ñ ng m i khi có l i g i hàm • Bi n c c b ñ ng không lưu gi giá tr m i khi hàm k t thúc (t c b gi i phóng kh i b nh ) – Bi n c c b tĩnh • Bi n c c tĩnh đư c khai báo bên trong thân hàm nhưng v n t n t i ngay c khi hàm đã k t thúc ho t đ ng • Bi n c c b tĩnh đư c khai báo v i t khóa static bangtqh@hotmail.com K thu t l p trình C - Xây d ng Hàm 14
- 04/2010 Bi n c c b ñ ng & tĩnh • Ví d #include #include void vi_du(void); void main(){ int n; for (n=1; n
- 04/2010 Ki u con tr (pointer) • Đ a ch (address) – V i m i bi n có các khái ni m: • Tên bi n, ki u bi n, giá tr bi n – Ví d : • int i = 1; • Bi n i ki u s nguyên có giá tr là 1 • Máy tính c p phát m t vùng nh 2 byte liên t c đ lưu tr giá tr c a bi n i – Đ a ch bi n là s th t c a byte đ u tiên trong dãy các byte liên t c nhau máy dành đ lưu tr giá tr bi n – Đ l y đ a ch bi n, s d ng toán t “&” • Ví d : &i – Lưu ý, máy tính phân bi t các ki u đ a ch : đ a ch ki u int, đ a ch ki u float, đ a ch ki u long, … bangtqh@hotmail.com K thu t l p trình C - Xây d ng Hàm 17 04/2010 Ki u con tr (pointer) • Con tr (pointer) – Là m t bi n dùng đ ch a đ a ch – Có nhi u lo i con tr tương ng v i các ki u đ a ch khác nhau • Ch ng h n, con tr ki u int tương ng đ a ch ki u int, … – Cú pháp khai báo con tr ki u_d _li u *tên_con_tr ; – Ví d int i, j, *pi, *pj; pi = &i; /* pi là con tr ch a ñ a ch bi n i */ pj = &j; /* pj là con tr ch a ñ a ch bi n j */ bangtqh@hotmail.com K thu t l p trình C - Xây d ng Hàm 18
- 04/2010 Ki u con tr (pointer) • Gi s có – px là con tr ñ n bi n x, thì các cánh vi t x và *px là tương đương nhau • Ví d int x, y, *px, *py; px = &x; py = &y; x = 3; /* tương đương v i *px = 3 */ y = 5; /* tương đương v i *py = 5 */ /* Các câu l nh dư i đây là tương ñương: */ x = 10*y; *px = 10*y; x = 10*(*py); *px = 10*(*py); bangtqh@hotmail.com K thu t l p trình C - Xây d ng Hàm 19 04/2010 Truy n tham s cho hàm • Xét ví d #include #include void hoan_vi(int a, int b); /* nguyên m u hàm, prototype */ void main(){ int n=10, p=20; 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; printf(" Sau khi hoán v : %d %d\n", a, b); } bangtqh@hotmail.com K thu t l p trình C - Xây d ng Hàm 20
- 04/2010 Do cơ ch bi n c c b Chương trình trên hay tham s hình th c cho k t qu b gi i phóng b nh không đúng ! khi hàm k t thúc • 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); /* nguyên m u hàm, prototype */ void main(){ int n=10, p=20; 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; printf(" Sau khi hoán v : %d %d\n", *a, *b); } 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 bi t hai 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 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 khi n = 0 n.(n-1)! khi n >= 1 bangtqh@hotmail.com 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 n){ if (n==0) return(1); else return (n * 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 • 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 đ 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 hai s nguyên dương – Ư 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){ 1. Vi t l i hàm usc dùng vòng if (x == y) l p return (x); 2. Hãy vi t chương trình s else if (x > y) d ng hàm đ quy ñ t o return usc(x-y, y); dãy s Fibonacci else return usc(x, y-x); – 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 – Vd: 1, 1, 2, 3, 5, 8, 13, 21, ... 3. Vi t hàm đ quy ñ o Hàm đ quy tìm Ư c s chung ngư c 1 xâu ký t s b t kỳ l n nh t c a 2 s x, y nh p t bàn phím bangtqh@hotmail.com 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 đ 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
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Bài giảng Kỹ thuật lập trình - Phạm Thế Bảo
0 p | 220 | 32
-
Bài giảng Kỹ thuật lập trình: Chương I - Lưu Hồng Việt
48 p | 194 | 23
-
Bài giảng Kỹ thuật lập trình: Chương IV - Lưu Hồng Việt
32 p | 151 | 17
-
Bài giảng Kỹ thuật lập trình: Chương III - Lưu Hồng Việt
51 p | 148 | 15
-
Bài giảng Kỹ thuật lập trình: Chương V - Lưu Hồng Việt
19 p | 128 | 15
-
Bài giảng Kỹ thuật lập trình: Phần 1 - ĐH CNTT&TT
37 p | 114 | 10
-
Bài giảng Kỹ thuật lập trình - Bài 1: Tổng quan về kỹ thuật lập trình
65 p | 165 | 8
-
Bài giảng Kỹ thuật lập trình: Bài 1 - Phạm Đình Sắc
9 p | 130 | 7
-
Bài giảng Kỹ thuật lập trình nâng cao: Chương 4 - ThS. Dương Thành Phết
26 p | 93 | 7
-
Bài giảng Kỹ thuật lập trình - Chương 10: Tổng kết môn học (Trường Đại học Bách khoa Hà Nội)
67 p | 15 | 4
-
Bài giảng Kỹ thuật lập trình: Chương 1 - Trần Quang
39 p | 8 | 2
-
Bài giảng Kỹ thuật lập trình: Chương 2 - Trần Quang
25 p | 10 | 2
-
Bài giảng Kỹ thuật lập trình: Chương 3 - Trần Quang
52 p | 10 | 2
-
Bài giảng Kỹ thuật lập trình: Chương 4 - Trần Quang
32 p | 7 | 2
-
Bài giảng Kỹ thuật lập trình: Chương 6 - Trần Quang
37 p | 11 | 2
-
Bài giảng Kỹ thuật lập trình: Chương 7 - Trần Quang
28 p | 7 | 2
-
Bài giảng Kỹ thuật lập trình: Chương 8 - Trần Quang
34 p | 8 | 2
-
Bài giảng Kỹ thuật lập trình: Chương 9 - Trần Quang
33 p | 4 | 2
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn