Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 14 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
14
Dung lượng
271,98 KB
Nội dung
NMLT HÀM, C U TRÚC Tr n Ph c Tu n tranphuoctuan.khoatoan.dhsp@gmail.com http://baigiang.tranphuoctuan.com Hàm - Function M t s nguyên t c Cách khai bá báo và g i th c hi n Prototype c a hà hàm Truy n tham s cho hàm Bi n toàn c c, bi n c c b , bi n static, bi n ghi, … Cách th c C th c hi n l i g i hàm – stack NH P MÔN L P TRÌNH 12/23/2009 M t s nguyên t c Các hàm NNLT C u ngang c p v i nhau: Hàm không c khai báo l ng Th t khai báo không quan tr ng Hàm có th nh n x lý nhi u tham s ho c tham s Hàm có th tr v m t giá tr ho c không Bi n khai báo hàm F ch có giá tr F, không s d ng c bi n hàm khác c NH P MÔN L P TRÌNH 12/23/2009 Ví d : hàm tính xn nh n vào tham s ki u c a giá tr tr cg i double double Power(double Power(double x, x, int int n) n) {{ double double result; result; for(result for(result == 1; 1; n; n; n ) n ) result result *= *= x; x; return return result; result; }} giá tr NH P MÔN L P TRÌNH c tr qua l nh return 12/23/2009 Ví d : g i th c hi n hàm Power Ch th cho ch ng trình bi t prototype c a hàm Power #include #include double double Power(double, Power(double, int); int); int int main() main() {{ double double mm == Power(2, Power(2, 3); 3); printf(“3.5 ^ = %lf”, printf(“3.5 ^ = %lf”, Power(3.5, Power(3.5, 4)); 4)); return return 0; 0; }} 3.5 4: tham s th c s NH P MÔN L P TRÌNH 12/23/2009 M t s l i th Compiler không hi u ng g p c hàm Power #include #include hàm Power thi u tham s int int main() main() {{ int int mm == Power(2, Power(2, 3); 3); printf(“3.5 ^ = printf(“3.5 ^ = %lf”, %lf”, Power(4)); Power(4)); return return 1.0; 1.0; }} giá tr tr NH P MÔN L P TRÌNH không kh p ki u 12/23/2009 Prototypes Dòng khai báo double Power(double, int); c hi u là khai bá báo prototype c a hà hàm Power c dùng ch ng trình s d ng m t hàm tr c khai báo Khai báo prototype thông báo cho trình biên d ch bi t ki u c a giá tr tr v mô t chi ti t v tham s c a hàm Các hàm th vi n chu n c khai báo prototype t p tin header (stdio.h, conio.h, …) Các hàm l p trình viên t xây d ng ph i t khai báo prototype NH P MÔN L P TRÌNH 12/23/2009 Hàm: d ng t ng quát header c a hàm ki tên ki uutrtr tênhàm(danh hàm(danhsách sáchtham thamss hình hìnhth th c) c) {{ //khai //khaibáo báocác cácbi bi nncc aahàm hàm //các //cácll nh nhth th ccthi thi }} return returngiá giátrtr trtr ;;//hàm //hàmvoid voidkhông khôngcó cógiá giátrtr trtr thân (body) hàm NH P MÔN L P TRÌNH 12/23/2009 T m tác d ng c a bi n Bi n toàn c c: Không thu c kh i nào, có tác d ng toàn ch ng trình k t khai báo Bi n c c b : khai báo m t kh i, ch có tác d ng kh i “f” c a hàm F, không ph i c a main NH P MÔN L P TRÌNH float float g=6.5; g=6.5; void main() void main() {{ int int ii == 5, 5, j, j, kk == 2; 2; float f = 2.8F ; float f = 2.8F; dd == 3.7; 3.7; compiler không }} ch p nh n “d”, “i” void void F(int F(int v) v) {{ double double d, d, ee == 0.0, 0.0, f; f; i++; g ; i++; g ; ff == 0.0; 0.0; }} 12/23/2009 Truy n tham s cho hàm C h tr cách truy n tham s : Truy n tham s b i giá tr (truy n giá tr - call by value) Truy n tham s b i a ch (truy n a ch - call by address) M r ng v i C++ Truy n tham chi u (call by reference) NH P MÔN L P TRÌNH 12/23/2009 10 Truy n giá tr Hàm s x lý b n c a tham s Hàm không th thay i giá tr c a tham s c c dù dùng cá tr ng h p c n chuy n d li u vào bên hàm x lý, tính toán Các ví d u dùng ki u truy n tham s b i giá tr Ví d hàm có s n c a C truy n giá tr : float sqrt(float); double pow(double, double); NH P MÔN L P TRÌNH 11 12/23/2009 Truy n giá tr - ví d #include #include void void change(int change(int v); v); hàm change không thay i giá tr a “var” int int main() main() {{ int int var var == 5; 5; change(var); change(var); printf("main: printf("main: var var == %i\n", %i\n", var); var); return 0; return 0; }} change: change: vv == 500 500 main: void main: var var == 55 voidchange(int change(int v) v) {{ vv *= *= 100; 100; printf("change: printf("change: vv == %i\n", %i\n", v); v); }} NH P MÔN L P TRÌNH 12/23/2009 12 Truy n a ch Hàm s x lý tham s nh vào a ch c a chúng Hàm có th thay i giá tr c a tham s c dùng tr ng h p c n chuy n d li u k t qu x lý c bên hàm “ngoài” cho hà hàm khác s d ng Ví d hàm có s n c a C truy n a ch : int scanf(const char *format, adr1, adr2, …); inputs function NH P MÔN L P TRÌNH Truy n outputs 12/23/2009 13 a ch - ví d #include #include void void change(int change(int *v); *v); v: tham s a ch a s int, khai báo v i d u * int int main() main() {{ truy n a ch a “var” int var = 5; int var = 5; vào hàm change change(&var); change(&var); printf("main: printf("main: var var == %i\n", %i\n", var); var); return 0; return 0; }} change: change: *v *v == 500 500 main: void main: var var == 500 500 voidchange(int change(int *v) *v) {{ (*v) (*v) *= *= 100; 100; printf("change: printf("change: *v *v == %i\n", %i\n", (*v)); (*v)); }} NH P MÔN L P TRÌNH 12/23/2009 14 Truy n tham chi u Hàm s x lý b n tham s c p nh t l i b n tr c hàm k t thúc Hàm có th thay i giá tr c a tham s c dùng tr ng h p c n chuy n d li u k t qu x lý c bên hàm “ngoài” cho hàm khác s d ng Ch áp d ng c v i trình biên d ch C++ NH P MÔN L P TRÌNH 12/23/2009 15 Truy n tham chi u - ví d #include #include void void change(int change(int &v); &v); v: tham s tham chi u, khai báo id u& int int main() main() {{ truy n “var” vào hàm change int int var var == 5; 5; change(var); change(var); printf("main: printf("main: var var == %i\n", %i\n", var); var); return 0; return 0; }} change: change: vv == 500 500 main: void main: var var == 500 500 voidchange(int change(int &v) &v) {{ vv *= *= 100; 100; printf("change: printf("change: vv == %i\n", %i\n", v); v); }} NH P MÔN L P TRÌNH 12/23/2009 16 Truy n tham s - ví d #include #include void function(int void function(int a, a, int int *b, *b, int int &c); &c); int main() int main() {{ int int xx == 3, 3, yy == 4, 4, zz == 5; 5; function(x, &y, z); function(x, &y, z); printf("%i printf("%i %i %i %i\n", %i\n", x, x, y, y, z); z); return 0; return 0; }} void void function(int function(int a, a, int int *b, *b, int int &c) &c) {{ 66 10 aa *= 10 16 16 *= 2; 2; 10 16 (*b) += a; 10 16 (*b) += a; cc == aa ++ (*b); (*b); printf("%i printf("%i %i %i %i\n", %i\n", a, a, *b, *b, c); c); }} NH P MÔN L P TRÌNH Ph main main a b c function function 17 12/23/2009 ng th c trao i d li u C dùng stack u tr bi n c c b chuy n tham s cho hàm v i m i l n g i hàm th c hi n Hàm g i (O) c t tham s vào stack G i th c hi n hàm c g i (F) F nh n l y tham s t stack F t o bi n c c b ng v i tham s stack Khi k t thúc, F c p nh t giá tr tham s (ref) tr i u n cho O O nh n l y giá tr m i c a tham s c ng nh giá tr tr v NH P MÔN L P TRÌNH 12/23/2009 18 Ph ng th c trao i d li u #include #include double power(int, double power(int, int); int); int int main(void) main(void) {{ int xx == 2; int 2; double doubled; d; dd == power(x, power(x, 5); 5); printf("%lf\n", printf("%lf\n", d); d); return return 0; 0; }} double double power(int power(int n, n, int int p) p) {{ double doubleresult result == n; n; while( p > 0) while( p > 0) result result *= *= n; n; return result; return result; }} NH P MÔN L P TRÌNH Bài 32.0 power: result power: n power: p ? 32.0 main: d main: x 19 12/23/2009 c thêm: t ch c d li u D li u ch ng trì c l u tr cá trình bi n Khi hà c g i th c hi n, cá c hàm bi n c c b s kh i t o vù ng b h y vùng nh stack và t hàm k t thú thúc Các bi n c t o vù toàn c c s vùng nh phân o n d li u (data c (data segment) khi ch ng trì trình g i th c hi n, t ng b h y ch ng trì trình k t thú thúc Có th s d ng cá ch nh v trí t khó khóa trí c a bi n: auto - stack (default) static - data segment register - ghi c a CPU D li u có có th NH P MÔN L P TRÌNH c Heap Data segment Stack t vù vùng nh heap 12/23/2009 20 Tóm l c Khai báo g i th c hi n hàm Khai báo prototypes T m tá tác d ng c a bi n Truy n tham s cho hà hàm V n t ch c d li u ch NH P MÔN L P TRÌNH ng trình 12/23/2009 C u trúc - Struct 21 Ki u c u trúc Khái ni m Khai báo Truy xu t thành ph n C u trúc & m ng Con tr n c u trúc NH P MÔN L P TRÌNH 12/23/2009 23 Khái ni m C u trúc ki u d li u g m m t nhóm thành ph n có ki u không gi ng nhau, m i thành ph n c xác nh b ng m t tên riêng bi t Ki u c a m i thành ph n c u trúclà m t ki u ã c nh ngh a tr c, k c m ng c u trúc khác NH P MÔN L P TRÌNH 12/23/2009 24 C u trúc – Khai báo C M t ki u c u trúc c nh ngh a v i t khóa struct typedef struct Tênki { Ki uthànhph n Ki uthànhph n Ki uthànhph n Ki uthànhph n }; NH P MÔN L P TRÌNH u Tênthànhph Tênthànhph Tênthànhph Tênthànhph n; n; n; n; 25 12/23/2009 C u trúc – ví d typedef typedef struct struct TDate TDate {{ char char day; day; char char month; month; int year; int year; }; }; typedef typedef struct struct TStudent TStudent {{ char ID[10]; char ID[10]; char firstname[10]; char firstname[10]; char lastname[20]; char lastname[20]; TDate dob; TDate dob; float float marks[10]; marks[10]; }; }; NH P MÔN L P TRÌNH typedef typedef struct struct TBook TBook {{ char title[80]; char title[80]; char author[80]; char author[80]; float float price; price; char isbn[20]; char isbn[20]; }; }; //khai //khai báo báo TBook TBook TStudent TStudent 12/23/2009 các bi bi nn book; book; list[100]; list[100]; 26 C u trúc – Truy xu t thành ph n Các thành ph n c a m t bi n ki u c u trúc thông qua tên bi n, d u "." tên thành ph n c truy xu t void void Print(TStudent Print(TStudent m) m) {{ printf("Name :: %s printf("Name %s %s\n", %s\n", m.firstname, m.lastname); m.firstname, m.lastname); printf("Student :: %s\n", printf("Student ID ID %s\n", m.ID); m.ID); printf("Date of birth : %hi/%hi/%i", printf("Date of birth : %hi/%hi/%i", m.dob.day, m.dob.day, m.dob.month, m.dob.month, m.dob.year); m.dob.year); printf("Marks :: "); printf("Marks "); for (int i=0; i[...]... ch c d li u trong ch NH P MÔN L P TRÌNH ng trình 12/23/2009 C u trúc - Struct 21 Ki u c u trúc Khái ni m Khai báo Truy xu t các thành ph n C u trúc & m ng Con tr n c u trúc NH P MÔN L P TRÌNH 12/23/2009 23 Khái ni m C u trúc là ki u d li u g m m t nhóm các thành ph n có ki u không gi ng nhau, m i thành ph n c xác nh b ng m t tên riêng bi t Ki u c a m i thành ph n trong c u trúclà m t ki u ã c nh ngh... trúclà m t ki u ã c nh ngh a tr c, k c m ng và các c u trúc khác NH P MÔN L P TRÌNH 12/23/2009 24 C u trúc – Khai báo trong C M t ki u c u trúc c nh ngh a v i t khóa struct typedef struct Tênki { Ki uthànhph n Ki uthànhph n Ki uthànhph n Ki uthànhph n }; NH P MÔN L P TRÌNH u Tênthànhph Tênthànhph Tênthànhph Tênthànhph n; n; n; n; 25 12/23/2009 C u trúc – ví d typedef typedef struct struct TDate TDate... marks[10]; }; }; NH P MÔN L P TRÌNH typedef typedef struct struct TBook TBook {{ char title[80]; char title[80]; char author[80]; char author[80]; float float price; price; char isbn[20]; char isbn[20]; }; }; //khai //khai báo báo TBook TBook TStudent TStudent 12/23/2009 các các bi bi nn book; book; list[100]; list[100]; 26 C u trúc – Truy xu t các thành ph n Các thành ph n c a m t bi n ki u c u trúc thông qua... m.dob.month, m.dob.year); m.dob.year); printf("Marks :: "); printf("Marks "); for (int i=0; i ... MÔN L P TRÌNH ng trình 12/23/2009 C u trúc - Struct 21 Ki u c u trúc Khái ni m Khai báo Truy xu t thành ph n C u trúc & m ng Con tr n c u trúc NH P MÔN L P TRÌNH 12/23/2009 23 Khái ni m C u trúc. .. bi t Ki u c a m i thành ph n c u trúclà m t ki u ã c nh ngh a tr c, k c m ng c u trúc khác NH P MÔN L P TRÌNH 12/23/2009 24 C u trúc – Khai báo C M t ki u c u trúc c nh ngh a v i t khóa struct... khi ch ng trì trình g i th c hi n, t ng b h y ch ng trì trình k t thú thúc Có th s d ng cá ch nh v trí t khó khóa trí c a bi n: auto - stack (default) static - data segment register - ghi c a CPU