Bài giảng nhập môn lập trình hàm, cấu trúc trần phước tuấn

14 140 0
Bài giảng nhập môn lập trình hàm, cấu trúc   trần phước tuấn

Đ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

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

Ngày đăng: 03/01/2016, 10:25

Từ khóa liên quan

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

Tài liệu liên quan