Bài giảng Nhập môn lập trình: Hàm, cấu trúc - Trần Phước Tuấn
lượt xem 3
download
Bài giảng trình bày một số nội dung liên quan đến hàm và cấu trúc như: Một số nguyên tắc trong hàm, cách khai báo và gọi thực hiện, prototype của hàm, khái niệm cấu trúc, khai báo cấu trúc trong C,... Mời các bạn cùng tham khảo.
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Bài giảng Nhập môn lập trình: Hàm, cấu trúc - Trần Phước Tuấn
- 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à 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 thanh ghi, … Cách th c C th c hi n các l i g i hàm – stack. NH P MÔN L P TRÌNH 12/23/2009 2
- M t s nguyên t c Các hàm trong NNLT C u ngang c p v i nhau: Hàm không c khai báo l ng nhau. Th t khai báo không quan tr ng. Hàm có th nh n và x lý nhi u tham s ho c không có tham s nào Hàm có th tr v m t giá tr ho c không. Bi n khai báo trong hàm F ch có giá tr trong F, không s d ng c bi n này trong các hàm khác c. NH P MÔN L P TRÌNH 12/23/2009 3 Ví d : hàm tính xn ki u c a giá tr tr nh n vào 2 tham s khi 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 c tr qua l nh return NH P MÔN L P TRÌNH 12/23/2009 4
- 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 printf(“3.5 ^ 4 = %lf”, Power(3.5, ^ 4 = %lf”, Power(3.5, 4)); 4)); return return 0; 0; }} 3.5 và 4: 2 tham s th c s NH P MÔN L P TRÌNH 12/23/2009 5 M t s l i th ng g p Compiler không hi u 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 ^ 4 = %lf”, ^ 4 = %lf”, Power(4)); Power(4)); return return 1.0; 1.0; }} giá tr tr không kh p ki u NH P MÔN L P TRÌNH 12/23/2009 6
- Prototypes Dòng khai báo double Power(double, int); c hi u là là khai bá báo prototype c a hàhàm Power c dùng khi ch ng trình s d ng m t hàm tr c khi 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 và mô t chi ti t v các tham s c a hàm. Các hàm th vi n chu n c khai báo prototype trong các t p tin header (stdio.h, conio.h, …). Các hàm do 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 7 Hàm: d ng t ng quát header c a hàm ki ki uutrtr tên tênhàm(danh hàm(danhsáchsá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 8
- T m tác d ng c a bi n Bi n toàn c c: float float g=6.5; g=6.5; Không thu c kh i void main() void main() nào, có tác d ng {{ trong toàn ch ng int int ii == 5,5, j,j, kk == 2; 2; trình k t khi khai float f = 2.8F float f = 2.8F; ; báo dd == 3.7; 3.7; compiler không }} Bi n c c b : khai void void F(int F(int v)v) ch p nh n “d”, “i” báo trong m t kh i, {{ ch có tác d ng double double d, d, ee == 0.0, 0.0, f;f; trong kh i này i++; g--; i++; g--; ff == 0.0; 0.0; “f” c a hàm F, không }} ph i c a main NH P MÔN L P TRÌNH 12/23/2009 9 Truy n tham s cho hàm C h tr 2 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ý trên b n sao c a tham s Hàm không th thay i giá tr c a tham s c. c dù dùng trong cácác tr ng h p c n chuy n d li u vào bên trong hàm x lý, tính toán Các ví d trên 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 12/23/2009 11 Truy n giá tr - ví d #include #include void void change(int change(int v); v); hàm change không thay i int int main() main() giá tr a “var” {{ int int var var == 5; 5; change(var); change(var); printf("main: printf("main: varvar == %i\n", %i\n", var); var); return 0; return 0; }} change: change: vv == 500 500 void voidchange(int change(int v) v) main: main: var var == 55 {{ 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ý trên chính 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 trong các tr ng h p c n chuy n d li u là k t qu x lý c bên trong hàm ra “ngoài” cho các hà hàm khá 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 outputs NH P MÔN L P TRÌNH 12/23/2009 13 Truy n a ch - ví d #include #include v: tham s a ch void void change(int change(int *v); *v); a s int, khai báo v i d u * int int main() main() {{ truy n a ch a “var” int var = int var = 5;5; vào hàm change change(&var); change(&var); printf("main: printf("main: varvar == %i\n", %i\n", var); var); return 0; return 0; }} change: change: *v *v == 500 500 void voidchange(int change(int *v) *v) main: main: var var == 500 500 {{ (*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ý trên b n sao tham s và c p nh t l i b n chính ngay tr c khi hàm k t thúc. Hàm có th thay i giá tr c a tham s . c dùng trong các tr ng h p c n chuy n d li u là k t qu x lý c bên trong hàm ra “ngoài” cho các hàm khác s d ng. Ch áp d ng c v i các 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 v: tham s tham void void change(int change(int &v); &v); chi u, khai báo id u& int int main() main() {{ int int var var == 5; 5; truy n “var” vào hàm change change(var); change(var); printf("main: printf("main: var var == %i\n", %i\n", var); var); return return 0;0; }} change: change: vv == 500 500 void voidchange(int change(int &v)&v) main: main: var var == 500 500 {{ 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 void function(int a, function(int a, int int *b, *b, int int &c); &c); int main() int main() {{ main int main int xx == 3,3, yy == 4, 4, zz == 5; 5; function(x, &y, function(x, &y, z); z); printf("%i printf("%i %i %i %i\n", %i\n", x, x, y,y, z); z); return 0; a b c return 0; }} void void function(int function(int a, a, int int *b, *b, int int &c) &c) {{ function function aa *= *= 2; 2; 66 10 10 16 16 (*b) += (*b) += a; a; 3 10 16 3 10 16 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 12/23/2009 17 Ph ng th c trao i d li u C dùng 1 stack u tr các bi n c c b và các chuy n các 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 các tham s vào stack. G i th c hi n hàm c g i (F). F nh n l y các tham s t stack F t o các bi n c c b ng v i các tham s trên stack Khi k t thúc, F c p nh t giá tr các tham s (ref) và tr i u khi n cho O O nh n l y các 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 double power(int, int); power(int, int); int int main(void) main(void) {{ int int xx == 2; 2; double doubled; d; dd == power(x, power(x, 5);5); printf("%lf\n", printf("%lf\n", d); d); return 32.0 power: result return 0; 0; }} 2 power: n double double power(int power(int n, n, int int p) p) 5 power: p {{ double doubleresult result == n; n; ? 32.0 main: d while(--p > while(--p > 0) 0) result 2 main: x result *=*= n; n; return result; return result; }} NH P MÔN L P TRÌNH 12/23/2009 19 Bài c thêm: t ch c d li u D li u trong ch ng trì trình c l u tr trong cá các bi n. Khi hà hàm c g i th c hi n, cá các bi n c c b s c Heap kh i t o trên vù vùng nh stack và và t ng b h y khi hàm k t thú thúc. Các bi n toà toàn c c s c t o trên vù vùng nh phân Data o n d li u (data (data segment) khikhi ch ng trì trình c segment g i th c hi n, t ng b h y khi ch ng trì trình k t Stack thú thúc. Có th s d ng cá các t khókhóa ch nh v trí trí c a bi n: auto - stack (default) static - data segment register - thanh ghi c a CPU D li u còn có có th c t trong vù vùng nh heap. NH P MÔN L P TRÌNH 12/23/2009 20
- Tóm l c Khai báo và 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 trong ch ng trình NH P MÔN L P TRÌNH 12/23/2009 21 C u trúc - Struct
- 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 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 u { Ki uthànhph n Tênthànhph n; Ki uthànhph n Tênthànhph n; Ki uthànhph n Tênthànhph n; Ki uthànhph n Tênthànhph n; ... }; NH P MÔN L P TRÌNH 12/23/2009 25 C u trúc – ví d typedef typedef struct struct TDate TDate typedef typedef struct struct TBook TBook {{ {{ char char day; day; char char title[80]; title[80]; char char month; month; char char author[80]; author[80]; int int year; year; float float price; price; }; }; char char isbn[20]; isbn[20]; }; }; typedef typedef struct struct TStudent TStudent {{ char char ID[10]; ID[10]; //khai //khai báo báo các các bi bi nn char char firstname[10]; firstname[10]; TBook TBook book; book; char char lastname[20]; lastname[20]; TStudent TStudent list[100]; list[100]; TDate TDate dob; dob; float float marks[10]; marks[10]; }; }; NH P MÔN L P TRÌNH 12/23/2009 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 c truy xu t thông qua tên bi n, d u "." và tên thành ph n. void void Print(TStudent Print(TStudent m)m) {{ printf("Name printf("Name :: %s %s %s\n", %s\n", m.firstname, m.lastname); m.firstname, m.lastname); printf("Student printf("Student ID ID :: %s\n", %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
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Bài giảng Nhập môn lập trình C: Chương 9 - Trần Thị Kim Chi
19 p | 93 | 11
-
Bài giảng Nhập môn lập trình - Chương 1: Các khái niệm cơ bản về lập trình
20 p | 113 | 8
-
Bài giảng Nhập môn lập trình: Bài 2 - Trần Duy Thanh
18 p | 105 | 7
-
Bài giảng Nhập môn lập trình: Chương 0 - Trường Đại học Ngoại ngữ - Tin học, TP.HCM
10 p | 13 | 6
-
Bài giảng Nhập môn lập trình khoa học dữ liệu: Bài 3 - Trương Xuân Nam
20 p | 17 | 6
-
Bài giảng Nhập môn lập trình: Bài 7 - Đệ quy
15 p | 65 | 5
-
Bài giảng Nhập môn lập trình - Bài 2: Giới thiệu ngôn ngữ lập trình C
18 p | 110 | 5
-
Bài giảng Nhập môn lập trình: Chuỗi ký tự - Nguyễn Đình Hưng
20 p | 77 | 5
-
Bài giảng Nhập môn lập trình: Chương 1 - Trường Đại học Ngoại ngữ - Tin học, TP.HCM
20 p | 17 | 5
-
Bài giảng Nhập môn lập trình: Chương 7 - Trần Minh Thái
8 p | 61 | 5
-
Bài giảng Nhập môn lập trình: Giới thiệu học phần - Nguyễn Đình Hưng
7 p | 63 | 4
-
Bài giảng Nhập môn lập trình: Giới thiệu học phần - Trần Minh Thái
17 p | 79 | 4
-
Bài giảng Nhập môn lập trình: Chương 2 - ThS. Cáp Phạm Đình Thăng
18 p | 67 | 4
-
Bài giảng Nhập môn lập trình: Bài 3 - Trần Duy Thanh
16 p | 94 | 3
-
Bài giảng Nhập môn lập trình di động
19 p | 74 | 3
-
Bài giảng Nhập môn lập trình: Chương giới thiệu - ThS. Nguyễn Đông Hà
9 p | 77 | 3
-
Bài giảng Nhập môn lập trình - Võ Quang Hoàng Khang
8 p | 101 | 3
-
Bài giảng Nhập môn lập trình: Tổng quan về ngôn ngữ lập trình C - Nguyễn Đình Hưng
14 p | 101 | 3
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