Lập trình C - Cấu trúc dữ Liệu
lượt xem 24
download
Phân biệt được giữa giải thuật, thuật toán, lưu đồ, mã giả và chương trình. • Từ cùng 1 chương trình, học sinh có thể lần lượt lập giải thuật, thuật toán, lưu đồ, mã giả và viết chương trình. • Làm quan với các khái niệm về biến, hằng số, kiểu dữ liệu, toán tử, lệnh gán, các đối tượng nhập xuất trong C. 1.1. Lập trình: (Programming) là một quá trình viết chương trình bằng một ngôn ngữ nào đó mà máy tính có thể thực hiện và những người lập trình khác có thể hiểu. 1.2. Các bước...
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Lập trình C - Cấu trúc dữ Liệu
- Laäp trình C - Caáu truùc döõ Lieäu giaûi thuaät TOÅNG QUAN 1 MUÏC TIEÂU • Phaân bieät ñöôïc giöõa giaûi thuaät, thuaät toaùn, löu ñoà, maõ giaû vaø chöông trình. • Töø cuøng 1 chöông trình, hoïc sinh coù theå laàn löôït laäp giaûi thuaät, thuaät toaùn, löu ñoà, maõ giaû vaø vieát chöông trình. • Laøm quan vôùi caùc khaùi nieäm veà bieán, haèng soá, kieåu döõ lieäu, toaùn töû, leänh gaùn, caùc ñoái töôïng nhaäp xuaát trong C. 1. MÔÛ ÑAÀU: 1.1. Laäp trình: (Programming) laø moät quaù trình vieát chöông trình baèng moät ngoân ngöõ naøo ñoù maø maùy tính coù theå thöïc hieän vaø nhöõng ngöôøi laäp trình khaùc coù theå hieåu. 1.2. Caùc böôùc trong giai ñoaïn laäp trình: Böôùc 1 : GIAÛI THUAÄT (i) Nghó ra caùch giaûi ( giaûi thuaät) . (ii) Laøm roõ raøng giaûi thuaät : baèng caùch phaân ñoaïn giaûi thuaät thoâng qua caùc hình veõ, sô ñoà. Thoâng thöôøng, ngöôøi ta duøng löu ñoà (Flow Chart) ñeå trình baøy giaûi thuaät. Böôùc 2 : VIEÁT CHÖÔNG TRÌNH (i) Vieát phaàn loõi cuûa thaân chöông trình. (ii) Theâm caùc phaàn nhaäp vaø xuaát. (iii) Theâm caùc phaàn khai baùo. Böôùc 3 : CHAÏY THÖÛ, SÖÛA CHÖÕA (i) Chaïy thöû chöông trình trình nhieàu laàn, söûa chöõa nhöõng loãi nhoû. (ii) Söûa chöõa, caûi tieán chöông trình. Böôùc 4 : TOÅNG KEÁT (i) Theâm nhöõng ghi chuù cho chöông trình nhö : Muïc ñích cuûa caû chöông trình. Muïc ñích cuûa 1 ñoaïn chöông trình hay 1 phaùt bieåu. 1.3. Thuaät toaùn (Algorithm): 1.3.1. Thuaät toaùn: laø moät daõy caùc böôùc chaët cheõ vaø roõ raøng, xaùc ñònh moät trình töï caùc thao taùc treân moät soá ñoái töôïng naøo ñoù sao cho moät soá höõu haïn laàn thöïc hieän ta thu ñöôïc keát quaû nhö mong ñôïi. 1.3.2. Caùc ñaëc tröng cuûa thuaät toaùn: Tính döøng (tính keát thuùc): Moät thuaät toaùn bao giôø cuõng phaûi döøng sau moät soá höõu haïn caùc böôùc thöïc hieän . Leâ Vaên Haïnh Oct11 1
- Laäp trình C - Caáu truùc döõ Lieäu giaûi thuaät Tính phoå duïng (tính chính xaùc): thuaät toaùn coù theå giaûi baát kyø baøi toaùn naøo trong moät lôùp caùc baøi toaùn. Cuï theå laø thuaät toaùn coù theå laøm vieäc vôùi caùc döõ lieäu khaùc nhau vaø luoân daãn ñeán moät keát quaû mong muoán. Ví duï : chöông trình Giaûi phöông trình baäc hai phaûi cho keát quaû luoân ñuùng vôùi caùc döõ lieäu soá nhaäp vaøo cho a,b,c laø baát kyø (soá nguyeân, soá thöïc, soá döông, soá aâm. . .) Tính duy nhaát : nghóa laø vôùi nhieàu laàn chaïy chöông trình treân cuøng moat taäp döõ lieäu ñaøu vaøo phaûi cho ra cuøng moät keát quaû. Tính roõ raøng: giaûi thuaät phaûi ñöôïc theå hieän baèng caùc caâu leänh minh baïch; caùc caâu leänh ñöôïc saép xeáp theo thöù töï nhaát ñònh. Tính khaùch quan: Moät giaûi thuaät duø ñöôïc vieát bôûi nhieàu ngöôøi treân nhieàu maùy tính vaãn phaûi cho keát quaû nhö nhau. 1.3.3. Moät thuaät toaùn khoâng phaûi laø moät chöông trình, thuaät toaùn coù theå ñöôïc moâ taû bôûi moät trong ba caùch: Maõ töï nhieân Maõ giaû (pseudocode). Duøng caùc bieåu töôïng ñöôïc quy ñònh ñeå bieåu dieãn giaûi thuaät (flowchart). 1.4. Giaûi thuaät: Trong khi tìm kieám lôøi giaûi cho caùc baøi toaùn trong thöïc teá, ngöôøi ta nhaän ra raèng: (i) Coù nhöõng baøi toaùn ñeán nay vaãn chöa xaùc ñònh ñöôïc lieäu coù toàn taïi moät thuaät toaùn ñeå giaûi quyeát hay khoâng? (ii) Coù nhöõng baøi toaùn ñaõ coù thuaät toaùn ñeã giaûi nhöng, nhöng khoâng chaáp nhaän ñöôïc do: Thôøi gian ñeå giaûi baøi toaùn theo thuaät toaùn ñoù quaù lôùn. Caùc ñieàu kieän kyõ thuaät cho thuaät toaùn khoù ñaùp öùng. (iii) Coù nhöõng baøi toaùn coù theå giaûi ñöôïc moät caùch höõu hieäu baèng moät lôøi giaûi naøo ñoù, nhöng lôøi giaûi naøy laïi vi phaïm moät soá tính chaát cuûa thuaät toaùn. Trong thöïc tieãn, coù raát nhieàu tröôøng hôïp ngöôøi ta chaáp nhaän caùc caùch giaûi thöôøng cho keát quaû toát (taát nhieân khoâng phaûi luùc naøo cuõng toát) nhöng ít phöùc taïp, hieäu quaû vaø khaû thi. Do ñoù, ngöôøi ta môû roäng khaùi nieäm thuaät toaùn (giuùp cho thuaät toaùn bôùt “cöùng nhaéc”) baèng moät khaùi nieäm môùi laø giaûi thuaät. Giaûi thuaät laø nhöõng caùch giaûi khoâng hoaøn toaøn ñaùp öùng ñaày ñuû caùc tính chaát cuûa moät thuaät toaùn nhöng vaãn cho keát quaû gaàn ñuùng. Hieän nay ñaõ coù nhöõng giaûi thuaät ñeä quy, giaûi thuaät ngaãu nhieân, giaûi thuaät Heuristic, .. . Ñeå thuaän tieän, trong taøi lieäu naøy seõ söû duïng khaùi nieäm giaûi thuaät ñeå chæ chung cho thuaät toaùn vaø giaûi thuaät. Toùm laïi, Giaûi thuaät laø moät taäp hôïp höõu haïn cuûa caùc chæ thò hay phöông caùch ñöôïc ñònh nghóa roõ raøng cho vieäc hoaøn taát moät soá söï vieäc töø moät traïng thaùi ban ñaàu cho tröôùc; khi caùc chæ thò naøy ñöôïc aùp duïng trieät ñeå thì seõ daãn ñeán keát quaû sau cuøng nhö ñaõ döï ñoaùn. Leâ Vaên Haïnh Oct11 2
- Laäp trình C - Caáu truùc döõ Lieäu giaûi thuaät 1.4.1. Maõ töï nhieân: 1.4.1.1. Khaùi nieäm: Laø vieát noäi dung chöông trình baèng ngoân ngöõ töï nhieân giaûn löôïc. 1.4.1.2. Quy öôùc : Phaûi deã hieåu, deã nhôù, nhaát quaùn vaø khoâng coù söï hieåu laàm. 1.4.1.3. Ví duï : vieát chöông trình cho ngöôøi duøng nhaäp 1 soá nguyeân döông (n). Tính toång caùc soá töø 1 ñeán n. B1: Nhaäp soá n B2: Toång=0 B3: Soá ñang xeùt=1 B4: Thöïc hieän khi Soá ñang xeùt THEN ... ELSE ... ENDIF WHILE < Ñieàu kieän > DO … ENDWHILE DO … UNTIL < Ñieàu kieän > WRITE … RETURN … 1.4.2.3. Ví duï : vieát chöông trình cho ngöôøi duøng nhaäp 1 soá nguyeân döông (n). Tính toång caùc soá töø 1 ñeán n. Input: n Process: Tong=0 SoDangXet=1 WHILE (SoDangXet
- Laäp trình C - Caáu truùc döõ Lieäu giaûi thuaät 1.4.3. Löu ñoà chöông trình: 1.4.3.1. Khaùi nieäm : Coøn ñöôïc goïi laø sô ñoà khoái. Laø sô ñoà theå hieän caùc böôùc cuûa giaûi thuaät lieân quan ñeán moät vaán ñeà naøo ñoù ñöôïc ñöa vaøo giaûi quyeát baèng maùy tính. 1.4.3.2. Caùc kyù hieäu duøng trong löu ñoà: KYÙ HIEÄU YÙ NGHÓA nhaäp Chöùc naêng cuûa coâng vieäc vaøo ra döõ lieäu. xuaát xöû lyù Nhoùm leänh ñeå thöï hieän moät chöùc naêng naøo ñoù cuûa chöông trình chöông chöông trình con ñaõ ñònh nghóa. trình con quyeát Quyeát ñònh reõ nhaùnh naøo caên cöù vaøo ñieàu kieän chæ ñònh ñònh ñöôïc ghi trong khoái. Trong moät soá tröôøng hôïp, hình thoi ñöôïc môû roäng thaønh 1 hình ña giaùc coù nhieàu ñöôøng ra, öùng vôùi caùc giaù trò cuûa bieåu thöùc beân trong. Höôùng xöû lyù cuûa löu ñoà. noái trang Ñieåm vaøo hay ñieåm ra cuûa töøng trang trong löu ñoà chöông trình. ñieåm Ñieåm ñaàu hay ñieåm cuoái cuûa löu ñoà. cuoái Noái Ñieåm vaøo hay ñieåm ra cuûa töøng phaàn trong löu ñoà chöông trình. 1.4.3.3. Moät soá ví duï bieåu dieãn thuaät toaùn baèng löu ñoà: Begin 1.4.3.3.1 Thuaät toaùn khoâng phaân nhaùnh: Ví duï: Tính a=b2+c2. Vôùi b vaø c ñöôïc nhaäp vaøo b, c töø baøn phím. (hình 1) A=b2+c2 A End (Hình 1) Leâ Vaên Haïnh Oct11 4
- Laäp trình C - Caáu truùc döõ Lieäu giaûi thuaät 1.4.3.3.2 Thuaät toaùn coù phaân nhaùnh: Ví duï 1: Cho nhaäp 3 soá, in ra giaù trò lôùn nhaát trong 3 soá. Coù theå thöïc hieän baèng nhieàu caùch, trong phaàn naøy neâu leân 2 trong caùc caùch: Caùch 1: hình 2 (duøng bieán trung gian) Caùch 2: hình 3 (duøng pheùp AND/OR/NOT trong ñieàu kieän. Begin Begin (Hình 3) a, b, c a, b, c S Max = b a>b a>=b Ñ Ñ AND Soá lôùn nhaát laø a Max = a a>=c S S Max < c Ñ b>=a Ñ Max = c AND Soá lôùn nhaát laø b b>=c Max S (Hình 2) Soá lôùn nhaát laø c End End Ví duï 2: Giaûi phöông trình baäc 1 ax+b=0. Vôùi a,b ñöôïc nhaäp vaøo(hình 4) Ví duï 3: Giaûi phöông trình baäc 2 ax2 + bx + c =0. Vôùi a, b, c ñöôïc nhaäp vaøo. (hình 5) Leâ Vaên Haïnh Oct11 5
- Laäp trình C - Caáu truùc döõ Lieäu giaûi thuaät Begin (Hình 5) Begin Nhaäp a, b, c End Nhaäp a, b Ñ Giaûi a=0 PTB1(b,c) Ñ –b/a S a != 0 S delta=b*b -4ac S b=0 “PTVN” Ñ delta < 0 “PTVN” Ñ S Xuaát “PTVÑ” Ñ –b/2a delta = 0 S x1 = -b+sqrt(delta)/2*a (Hình 4) x2 = -b-sqrt(delta)/2*a End 1.4.3.3.3 Thuaät toaùn laëp coù chu trình: Ví duï 4: Nhaäp n. Tính toång caùc soá töø 1 ñeán n. Minh hoïa sau neâu leân 2 caùch Caùch 1: xeùt ñieàu kieän (i
- Laäp trình C - Caáu truùc döõ Lieäu giaûi thuaät 2. NGOÂN NGÖÕ LAÄP TRÌNH C: 2.1. Ngoân ngöõ laäp trình: Laø taäp hôïp caùc chæ thò, döõ lieäu vaø caùc nguyeân taéc duøng ñeå xaây döïng moät chöông trình. Ngoân ngöõ laäp trình coù theå phaân loaïi theo hai caùch: (i) Ngoân ngöõ baäc cao, ngoân ngöõ baäc trung, ngoân ngöõ baäc thaáp. (ii) Ngoân ngöõ höôùng thuû tuïc – ngoân ngöõ höôùng ñoái töôïng. C laø moät ngoân ngöõ baäc trung coù chöùa caùc ñaëc tröng cuûa caû hai loaïi ngoân ngöõ höôùng thuû tuïc – ngoân ngöõ höôùng ñoái töôïng. 2.2. Caáu truùc ñôn giaûn cuûa chöông trình C: // Caùc chæ thò tieàn xöû lyù #include #define // Haøm chính cuûa chöông trình void main() { } 2.2.1. Caùc chæ thò tieàn xöû lyù: #include : duøng ñeå cheøn noäi dung cuûa moät file khaùc vaøo chöông trình nguoàn taïi ñuùng vò trí maø chæ thò include xuaát hieän. Khi laäp trình treân moâi tröôøng .NET, moät soá taäp tin loaïi naøy ñaõ ñöôïc ñöa vaøo thö vieän cuûa .NET neân khoâng coù phaàn .h ñi sau, VD: include #define: duøng ñeå ñònh nghóa caùc teân haèng soá (constant) vaø caùc macro coù phaïm vi söû duïng trong toaøn chöông trình hoaëc cho ñeán khi ñöôïc ñònh nghóa laïi sau chæ thò #undef. 2.2.2. Haøm main(): Caùc daïng cuûa haøm main: Daïng 1: Daïng 2: Daïng 3: void main() Kieåu_traû_veà main(void) Kieåu_traû_veà main(int i, char *str[]) {{ /* Caùc khai baùo*/ { /* Caùc khai baùo*/ { /* Caùc khai baùo*/ /* Caùc leänh*/ /* Caùc leänh*/ /* Caùc leänh*/ } return Giaù_trò_traû_veà; return Giaù_trò_traû_veà; } } Ví duï: Daïng 1: Daïng 2: Daïng 3: void main() int main() int main(int k, char *sts[]) { printf “Hello”}; { printf “Hello”}; { printf “Hello”}; } return 0; return 0; } } Leâ Vaên Haïnh Oct11 7
- Laäp trình C - Caáu truùc döõ Lieäu giaûi thuaät 2.3. Vieát chöông trình vôùi C: Moãi chöông trình trong C phaûi coù moät vaø duy nhaát moät haøm main. Haøm naøy ñöôïc xem nhö haøm ñieàu khieån, bôûi vì noù ñieåu khieån (goïi thöïc hieän) caùc module khaùc. Caùc leänh cuûa moät haøm phaûi ñaët giöõa caëp daáu {}. Cuoái moãi leänh trong haøm phaûi coù daáu chaám phaåy (;). Trong ngoân ngöõ C, coù phaân bieät kyù töï hoa/thöôøng ñoái vôùi caùc haèng chuoãi, danh ñònh, vaø töø khoùa. Treân moät doøng coù theå chöùa nhieàu leänh. Moät leänh coù theå vieát treân nhieàu doøng, ngoaïi tröø caùc haèng chuoãi, danh ñònh, vaø töø khoùa. Tuy nhieân ta neân trình baøy chöông trình moät caùch roõ raøng ñeå deã ñoïc vaø söûa chöõa, ví duï sau ñaây cuõng laø moät chöông trình coù theå thöïc hieän ñöôïc nhöng noù laø ñieån hình cho moät caùch trình baøy chöông trình voâ cuøng keùm: VD: Thay vì Neân söûa laïi laø #include #include int main() int main() {printf( { printf(“Hello” ); “Hello” ); printf(“World”); printf(“World”);return 0;} return 0; } 3. BIEÁN VAØ KHAI BAÙO BIEÁN: 3.1. Khaùi nieäm veà bieán: Bieán laø teân do ngöôøi laäp trình ñaët ra duøng ñeå tham khaûo tôùi moät vuøng nhôù trong maùy tính. Moät bieán coù theå chöùa moät giaù trò phuø hôïp vôùi kieåu döõ lieäu maø ta ñaõ khai baùo cho noù. Giaù trò trong bieán coù theå thay ñoåi ñöôïc trong chöông trình. Teân bieán goàm chöõ caùi, kyù soá, daáu noái (_) vaø khoâng ñöôïc baét ñaàu baèng kyù soá. Bieán khai baùo trong moät khoái ñöôïc goïi laø bieán cuïc boä, bieán khoâng thuoäc khoái naøo goïi laø bieán toaøn cuïc. Bieán coù taùc duïng trong toaøn khoái keå töø luùc ñöôïc khai baùo. 3.2. Cuù phaùp: variable_name1, variable_name2; Ví duï: int sum; long int datenum; foat a,b,c; Ta cuõng coù theå gaùn giaù trò cho bieán ngay taïi thôøi ñieåm khai baùo (pheùp gaùn kyù hieäu bôûi daáu baèng =). int a=3,b=5; Leâ Vaên Haïnh Oct11 8
- Laäp trình C - Caáu truùc döõ Lieäu giaûi thuaät Vò trí khai baùo bieán trong chöông trình: #include void main() { //Caùc khai baùo bieán // Caùc phaùt bieåu (leänh) cuûa chöông trình } Ví duï: #include void main() { float dmon1, dmon2, d_tb; dmon1=9.5; dmon2=8.0; d_tb=(dmon1+dmon2)/2; printf(“diem tb la:”
- Laäp trình C - Caáu truùc döõ Lieäu giaûi thuaät Söû duïng moät bieåu thöùc maø trong ñoù chöùa nhieàu loaïi döõ lieäu nhöng laïi khoâng bieát chaéc chaén kieåu döõ lieäu cuûa keát quaû. VD: int a=5; float b=2.4; Khi ñoù a=a+b // sau leänh naøy, giaù trò cuûa a laø 7 thay vì 7.15 b=a+b // sau leänh naøy, giaù trò cuûa b vaãn laø 7.15 4. XUAÁT/ NHAÄP DÖÕ LIEÄU: 4.1. Xuaát döõ lieäu: 4.1.1. Coâng duïng: xuaát döõ lieäu ñöôïc ñònh daïng ra maøn hình. 4.1.2. Cuù phaùp: printf ("chuoãi ñònh daïng"[, ñoái muïc 1, ñoái muïc 2,…]); 4.1.3. Giaûi thích: Khi söû duïng haøm phaûi khai baùo tieàn xöû lyù #include printf: teân haøm, phaûi vieát baèng chöõ thöôøng. ñoái muïc 1,…: laø caùc muïc döõ kieän caàn in ra maøn hình. Caùc ñoái muïc naøy coù theå laø bieán, haèng hoaëc bieåu thöùc phaûi ñöôïc ñònh trò tröôùc khi in ra. chuoãi ñònh daïng: ñöôïc ñaët trong caëp nhaùy keùp (" "), goàm 3 loaïi: (i) Ñoái vôùi chuoãi kyù töï ghi nhö theá naøo in ra gioáng nhö vaäy. (ii) Ñoái vôùi nhöõng kyù töï chuyeån ñoåi daïng thöùc cho pheùp keát xuaát giaù trò cuûa caùc ñoái muïc ra maøn hình taïm goïi laø maõ ñònh daïng. Sau ñaây laø caùc daáu moâ taû ñònh daïng: Kyù töï Yù nghóa Kyù töï Yù nghóa %c Kyù töï ñôn %g Soá chaám ñoäng (%f hay %g) %s Chuoãi %x Soá nguyeân thaäp phaân khoâng daáu %d Soá nguyeân thaäp phaân coù daáu %u Soá nguyeân hex khoâng daáu %f Soá chaám ñoäng (kyù hieäu thaäp phaân) %o Soá nguyeân baùt phaân khoâng daáu %e Soá chaám ñoäng (kyù hieäu coù soá muõ) (iii) Caùc kyù töï ñieàu khieån vaø kyù töï ñaëc bieät Kyù töï Yù nghóa \a Alert (bell) Tieáng keâu bip \b Backspace Töông töï nhö phím Backspace \f Next page \n Newline Xuoáng doøng vaø chuyeån con nhaùy veà ñaàu doøng \r Carriage return Nhaûy veà ñaàu doøng (khoâng xuoáng doøng) \t Horizontal tab Canh coät tab ngang \' Single quotation mark In ra daáu ' \" Double quotation mark In ra daáu " \\ Backslash In ra daáu \ \0 Null character %% percent In ra daáu % Leâ Vaên Haïnh Oct11 10
- Laäp trình C - Caáu truùc döõ Lieäu giaûi thuaät 4.1.4. Ví duï: Quy öôùc söû duïng trong caùc ví duï: Kyù hieäu Giaûi thích YÙ nghóa \n Gaïch döôùi neùt ñôn Kyù töï ñieàu khieån %d hay %5d Ñaäm, nghieâng kyù töï chuyeån ñoåi daïng thöùc \“ Gaïch döôùi neùt ñoâi Kyù töï ñaëc bieät _ Kyù töï gaïch döôùi Cursor sau khi xuoáng doøng baèng \n ∪ Khoaûng traéng (space) VD Leänh söû duïng trong chöông trình Keát quaû in ra maøn hình 1 printf(“Sai gon”); Sai gon 2 printf(“Sai gon\n”); Sai gon _ 3 printf(“TP. \n \“ Ho Chi Minh \””); TP. “ Ho Chi Minh ” 4 int x=5; Gia tri cua bien x la: 5. printf("Gia tri cua bien x la: %d . \n", x); _ 5 int a=13, b=5; printf("Tong cua %d va %d la %d", a, b, a+b); Tong cua 13 va 5 la 18 6 int a=13, b=5; (i) printf("Tong cua %5d va %3d la %1d", a, b, a+b); Tong cua ∪∪∪13 va ∪∪5 la 18 7 int a = 6, b = 1234, c = 62; printf("%7d%7d%7d\n", a, b, c); ∪∪∪∪∪∪6∪∪∪1234∪∪∪∪∪62 printf("%7d%7d%7d", a*b, a*c, b*c); ∪∪∪7404∪∪∪∪372∪∪76508 8 float a = 6.4, b = 1234.56, c = 62.3; (ii) printf("%7.2f %7.1f %7.2f", a, b, c); ∪∪∪6.40∪1234.6∪∪62.30 9 float a = 6.4, b = 1234.55, c = 62.34; (iii) printf("%5.1f %5.1f %5.1f\n", a, b, c); ∪6.4∪1234.6∪62.3 printf("%5.1d %5.1d %5.1d", 165, 2, 965); ∪∪165∪∪∪∪2∪∪965 10 int a=13, b=5; (iv) printf("Tong cua %-5d va %-3d la %-1d", a, b, a+b); Tong cua 13∪∪∪ va 5∪∪ la 18 11 int a=13, b=5; (v) printf("Tong cua %02d va %02d la %04d", a, b, a+b); Tong cua 13 va 05 la 0018 Giaûi thích (i): %5d: in giaù trò cuûa a trong ñoä roäng 5 kyù töï vaø canh phaûi. %1d: khi ñoä roäng ñònh daïng nhoû (ít) hôn giaù trò thöïc söï cuûa bieán (ñoä roäng cuûa 18 laø 2 lôùn hôn 1), giaù trò cuûa bieán vaãn ñöôïc ñaûm baûo in ñaày ñuû. (ii): định số lượng số lẻ cho biến kiểu số thực (iii): định dạng số lượng số lẻ không có tác dụng đối với số nguyên. (iv): %-5d: töông töï nhö %5d nhöng canh traùi giaù trò cuûa bieán. (v): %04d: số 4 đi trước ký tự d là độ rộng cần biểu diễn, số 0 cho biết các khoảng trống sẽ được thay thế bằng số 0. Lưu ý: không thể thay thế số 0 bằng ký tự khác, vì kết quả sẽ không đúng. Leâ Vaên Haïnh Oct11 11
- Laäp trình C - Caáu truùc döõ Lieäu giaûi thuaät 4.2. Nhaäp döõ lieäu: 4.2.1. Coâng duïng: ñònh daïng khi nhaäp döõ lieäu. 4.2.2. Cuù phaùp: scanf ("chuoãi ñònh daïng"[, ñoái muïc 1, ñoái muïc 2,…]); 4.2.3. Giaûi thích: Khi söû duïng haøm phaûi khai baùo tieàn xöû lyù #include scanf: teân haøm, phaûi vieát baèng chöõ thöôøng. khung ñònh daïng: ñöôïc ñaët trong caëp nhaùy_Beùp (" ") laø hình aûnh daïng döõ lieäu nhaäp vaøo. ñoái muïc 1,…: laø danh saùch caùc ñoái muïc caùch nhau bôûi daáu phaåy, moãi ñoái muïc seõ tieáp nhaän giaù trò nhaäp vaøo. 4.2.4. Ví duï: VD Leänh söû duïng Giaûi thích 1 scanf("%d", &i); %d laø maõ ñònh daïng, &i laø ñoái muïc. Neáu nhaäp vaøo 12abc, bieán i chæ nhaän giaù trò 12. Nhaäp 3.4 chæ nhaän giaù trò 3. 2 scanf("%d%d", &a, &b); Nhaäp vaøo 2 soá nguyeân a, b phaûi caùch nhau baèng khoaûng traéng (space bar) hoaëc enter 5. CAÙC KIEÅU DÖÕ LIEÄU: Coù ba loaïi döõ lieäu cô baûn ñöôïc duøng trong C: soá nguyeân (integer), soá thöïc (floating point numbers) vaø kyù töï (character). 5.1. Soá nguyeân: Laø moät soá coù giaù trò baèng hoaëc khaùc 0 vaø khoâng coù phaàn thaäp phaân. Ví duï: 0; 5; -10; 234 Phaân loaïi kieåu döõ lieäu nguyeân trong C: Kích Teân kieåu Mieàn giaù trò Nhoû nhaát Lôùn nhaát Thöôùc char 1 –128 to 127 CHAR_MIN CHAR_MAX unsigned char 1 0 ñeán 255 0 UCHAR_MAX short 2 –32,768 ñeán 32,767 SHRT_MIN SHRT_MAX unsigned short 2 0 ñeán 65535 0 USHRT_MAX int 2 –32,768 ñeán 32,767 INT_MIN INT_MAX unsigned int 2 0 ñeán 65535 0 UINT_MAX long 4 –2,147,483,648 ñeán 2,147,483,647 LONG_MIN LONG_MAX unsigned long 4 0 ñeán 4,394,967,295 0 ULONG_MAX 5.2. Soá thöïc: Laø baát kyø moät giaù trò soá naøo coù phaàn thaäp phaân phía sau. Ví duï: 0.0; 2.5179; 5.0123; . . . Phaân loaïi kieåu döõ lieäu soá thöïc trong C: Leâ Vaên Haïnh Oct11 12
- Laäp trình C - Caáu truùc döõ Lieäu giaûi thuaät Kích Teân kieåu Mieàn giaù trò Nhoû nhaát Lôùn nhaát thöôùc float 4 3.4E +/- 38 (7 digits) FLT_MIN FLT_MAX double 8 1.7E +/- 308 (15 digits) DBL_MIN DBL_MAX long double 10 1.2E +/- 4932 (19 digits) LDBL_MIN LDBL_MAX Khi ghi moät soá thöïc trong chöông trình ta coù söï phaân bieät nhö sau: (i) Coù kyù hieäu f phía sau laø giaù trò thuoäc kieåu float. (ii) Coù kyù hieäu l phía sau laø giaù trò thuoäc kieåu long double. (iii) Ví duï: 9.234 thuoäc kieåu double 9.234f thuoäc kieåu float 9.234l thuoäc kieåu long double Caùc caùch trình baøy soá thöïc: Daïng thaäp phaân chuaån Daïng soá muõ Daïng khoa hoïc 1652. 1.625e3 1.625x103 63421. 6.3421e4 6.3421x104 .00731 7.31e-3 7.31x10-3 .000625 6.25e-4 6.25x10-4 5.3. Kyù töï: Kieåu kyù töï bao goàm 256 kyù töï trong ñoù bao goàm caùc chöõ caùi (chöõ thöôøng vaø chöõ hoa), chöõ soá, caùc daáu, moät soá caùc kyù hieäu. Phaân loaïi kieåu döõ lieäu kyù töï trong C: Teân kieåu Bytes Teân goïi khaùc Mieàn giaù trò char 1 signed char –128 to 127 unsigned char 1 Khoâng coù 0 to 255 Trong chöông trình, ñeå trình baøy moät haèng kyù töï ta ñaët vaøo daáu nhaùy ñôn: ‘a’ , ‘D’ , … 6. TOAÙN TÖÛ TRONG C: 6.1. Toaùn töû soá hoïc: Moãi pheùp toaùn soá hoïc seõ keát hôïp 2 toaùn haïng. Pheùp toaùn YÙ nghóa Ghi chuù Pheùp nhaân / Pheùp chia Tuøy thuoäc vaøo kieåu döõ lieäu % Pheùp chia laáy phaàn dö Chæ aùp duïng cho hai soá nguyeân + Pheùp coäng - Pheùp tröø 6.1.1. Xaùc ñònh kieåu döõ lieäu cuûa keát quaû trong pheùp toaùn soá hoïc: Neáu caû hai toaùn haïng laø soá nguyeân thì keát quaû thuoäc kieåu nguyeân. Neáu coù moät toaùn haïng naøo laø kieåu soá thöïc thì keát quaû thuoäc kieåu thöïc. Leâ Vaên Haïnh Oct11 13
- Laäp trình C - Caáu truùc döõ Lieäu giaûi thuaät 6.1.2. Söï keát hôïp vaø ñoä öu tieân cuûa caùc toaùn töû: Hai pheùp toaùn 2 ngoâi khoâng bao giôø ñöùng caïnh nhau. Phaàn bieåu thöùc ñöôïc ñaët trong ngoaëc seõ ñöôïc öu tieân tính toaùn tröôùc. Coù theå coù nhieàu caëp daáu ngoaëc ñöôïc söû duïng loàng vaøo nhau, khi ñoù bieåu thöùc ñaët ôû ngoaëc trong cuøng coù öu tieân cao nhaát. Ñoä öu tieân cuûa caùc pheùp toaùn theo thöù töï lieät keâ ôû baûng treân. Neáu coù 2 pheùp toaùn gioáng nhau trong cuøng bieåu thöùc thì thöù töï xeùt ñoä öu tieân laø töø traùi sang phaûi. Daáu ngoaëc khoâng theå thay theá cho kyù hieäu trong pheùp nhaân. Ví du:ï khoâng theå vieát (3+4)(5+1) maø phaûi vieát (3+4)*(5+1). 6.2. Caùc toaùn töû quan heä (relational operators): Coâng duïng: taïo ra caùc ñieàu kieän maø döïa vaøo ñoù moät chöông trình coù theå giaûi quyeát vaán ñeà meàm deûo, linh hoaït. Caùc bieåu thöùc söû duïng toaùn töû quan heä goïi laø bieåu thöùc quan heä (relation expression). Moät bieåu thöùc quan heä ñôn giaûn goàm moät toaùn töû quan heä keát hôïp vôùi hai bieán hoaëc hai giaù trò haèng. Caùc toaùn töû naøy coù theå aùp duïng treân caùc kieåu döõ lieäu: soá nguyeân, soá thöïc, kyù töï. Caùc toaùn töû quan heä trong C sau: Toaùn töû Coâng duïng Ví duï < So saùnh nhoû hôn tuoi So saùnh lôùn hôn chieucao >1.7 =100 == So saùnh baèng loai==’a’ != So saùnh khaùc loai!=’b’ Moät bieåu thöùc quan heä (ñieàu kieän) seõ coù moät trong hai keát quaû ñuùng hoaëc sai. Neáu ñuùng thì bieåu thöùc coù giaù trò 1, ngöôïc laïi coù giaù trò 0. Moät bieåu thöùc quan heä chæ duøng 1 pheùp toaùn quan heä goïi laø bieåu thöùc quan heä ñôn giaûn. Ví duï: #include void main(void) { char ch1,ch2; ch1='a'; ch2='b'; printf(“%d”,(ch1>ch2) ; // seõ xuaát ra maøn hình soá 0 (≈ false) } Leâ Vaên Haïnh Oct11 14
- Laäp trình C - Caáu truùc döõ Lieäu giaûi thuaät 6.3. Toaùn töû logic: Caùc toaùn töû logic: ° AND (&&) ° OR (||) ° NOT (!) Khi caàn taïo ra caùc ñieàu kieän phöùc hôïp chuùng ta seõ söû duïng keát hôïp giöõa caùc toaùn töû quan heä vaø caùc toaùn töû logic. Khi ñoù caùc bieåu thöùc quan heä ñôn giaûn (nhö +, - , , /, . . .) neân ñaët trong caëp daáu ngoaëc ñôn ( ). Giaù trò cuûa bieåu thöùc gheùp ñöôïc cho trong baûng sau. Trong ñoù true =1 vaø false =0: A B A && B A || B !A False False False False True True False False True False False True False True True True True True True False Ví duï: Ta coù bieåu thöùc sau: • (tuoi1.50) // bieåu thöùc treân coù giaù trò baèng 1 khi // giaù trò cuûa bieán tuoi >30 vaø giaù trò cuûa bieán cao phaûi >1.5. 6.4. Toaùn töû moät ngoâi: Trong chöông trình chuùng ta cuõng thöôøng söû duïng caùc leänh taêng hoaëc giaûm giaù trò cuûa bieán ñeám ñi 1. ví duï nhö: i=i+1; hoaëc i=i-1; Thay vì vieát nhö treân ta coù theå vieát: i++(hay ++i) hoaëc i-- hay(--i ) Caùc pheùp toaùn ++, -- nhö treân goïi pheùp toaùn moät ngoâi. Vieäc ñaët pheùp toaùn moät ngoâi tröôùc hoaëc sau teân bieán coù söï khaùc nhau khi söû duïng pheùp toaùn naøy chung vôùi caùc pheùp toaùn khaùc: (i) Neáu pheùp toaùn moät ngoâi ñaët tröôùc teân bieán thì giaù trò cuûa bieán seõ taêng/giaûm 1 tröôùc khi thuïc hieän nhöõng pheùp toaùn khaùc (ii) Neáu pheùp toaùn moät ngoâi ñaët sau teân bieán thì giaù trò nhöõng pheùp toaùn khaùc seõ ñöôïc thöïc hieän tröôùc sau ñoù môùi taêng/giaûm giaù trò bieán ñi 1. 6.5. Toaùn töû sizeof: Duøng ñeå xaùc ñònh kích thöôùc cuûa moät loaïi döõ lieäu hoaëc moät bieán. Ví duï: printf( “kich thöôùc kieåu int laø:%d”, sizeof(int); Leâ Vaên Haïnh Oct11 15
- Laäp trình C - Caáu truùc döõ Lieäu giaûi thuaät 6.6. Toaùn töû treân bit: Toaùn töû treân bit chæ coù taùc duïng treân caùc kieåu soá nguyeân. Teân toaùn töû YÙ nghóa Ghi chuù 1&1=1 0&1=0 & And 1&0=0 0&0=0 1 | 1 =1 0 | 1 =1 | Or 1|0=1 0|0=0 1^1=0 0^1=1 ^ XOr 1^0=1 0^0=0 n >> Shift phaûi A >> n = A/(2 ) 5 Töø traùi qua phaûi < = > 6 Töø traùi qua phaûi == != 7 Töø traùi qua phaûi & 8 Töø traùi qua phaûi | 9 Töø traùi qua phaûi ^ 10 Töø traùi qua phaûi && 11 Töø traùi qua phaûi || 12 Töø traùi qua phaûi ?: 13 Töø phaûi qua traùi = += -= *= /= %= … 14 Töø phaûi qua traùi 6.8. Caùc loãi thöôøng gaëp: Queân khai baùo caùc bieán söû duïng trong chöông trình. Löu moät giaù trò vaøo moät bieán nhöng khoâng cuøng kieåu döõ lieäu vôùi bieán. Söû duïng bieán trong moät bieåu thöùc khi noù chöa coù giaù trò. Loãi naøy thí khoâng ñöôïc phaùt hieän bôûi rình bieân dòch, khi ñoù giaù trò cuûa bieán laø moät giaù trò baát kyø vaø keát quaû cuûa bieåu thöùc laø voâ nghóa. Söû duïng giaù trò cuûa pheùp chia khoâng chính xaùc. Loãi naøy thöôøng xuaát hieän trong caùc bieåu thöùc coù nhieàu toaùn haïng vaø loãi naøy raát khoù phaùt hieän. Ví duï: 3.2+ 2/3+ 1.5 thì keát quaû seõ baèng 4.7 thay vì phaûi baèng 5.3 Söû duïng moät bieåu thöùc maø trong ñoù chöùa nhieàu loaïi döõ lieäu nhöng laïi khoâng bieát chaéc chaén kieåu döõ lieäu cuûa keát quaû Leâ Vaên Haïnh Oct11 16
- Laäp trình C - Caáu truùc döõ Lieäu giaûi thuaät 7. LEÄNH GAÙN – HAÈNG: 7.1. Leänh gaùn: 7.1.1. Coâng duïng: duøng ñeå gaùn döõ lieäu cho moät bieán. 7.1.2. Cuù phaùp: Teân_bieán= bieåu thöùc; Bieåu thöùc coù theå laø moät haèng, moät bieán hoaëc moät bieåu thöùc 7.1.3. Löu yù: (i) Khi duøng bieán trong bieåu thöùc beân phaûi daáu =. Bieán naøy tröôùc ñoù phaûi ñöôïc gaùn caùc giaù trò hôïp leä. Ví duï: #include void main() { float fdai, frong, fdientich; fdientich =fdai * frong; // fdai vaø frong chöa ñöôïc gaùn giaù trò fdai=27.2; frong=13.6; printf( “Dien tich hinh chu nhat la: %f, fdientich”; } Chöông trình treân seõ cho keát quaû khoâng chính xaùc vì bieán fdai vaø frong chöa coù giaù trò khi duøng trong bieåu thöùc gaùn. (ii) Leänh sau laø khoâng hôïp leä: amount + 128 = 1000 + 10 + 5; (iii) Giaù trò cuûa bieåu thöùc gaùn: chính laø giaù trò gaùn cho bieán. Ví duï: neáu ta coù bieåu thöùc gaùn: a=5; thì baûn thaân bieåu thöùc (a=5) coù giaù trò laø 5. Vì vaäy caâu leänh sau seõ in leân maøn hình soá 5: printf (“%d,a=5); (iv) Trong moät bieåu thöùc gaùn coù theå coù nhieàu toaùn töû gaùn, khi ñoù bieåu thöùc seõ ñöôïc thöïc hieän töø phaûi qua traùi: ví duï a=b=c=5; (v) Neáu bieåu thöùc beân phaûi pheùp gaùn khaùc vôùi kieåu döõ lieäu cuûa bieán beân traùi thì keát quaû bieåu thöùc seõ ñöôïc chuyeån ñoåi kieåu cho phuø hôïp vôùi bieán beân traùi. (vi) Khi keát quaû cuûa bieåu thöùc beân phaûi vöôït quaù phaïm vi cuûa bieán beân traùi thì giaù trò gaùn vaøo bieán seõ khoâng chính xaùc. 7.1.4. Caùc daïng bieán ñoåi cuûa leänh gaùn: Khi vieát chöông trình chuùng ta thöôøng söû duïng caùc leänh gaùn coù daïng nhö sau: tong=tong+10; tich=tich*3; a=a-3; c=c%k; ... Leâ Vaên Haïnh Oct11 17
- Laäp trình C - Caáu truùc döõ Lieäu giaûi thuaät Trong caùc tröôøng hôïp treân ta coù theå söû duïng caùc toaùn töû gaùn +=; -=; *=; /=; %= ñöôïc cung caáp bôûi C (goïi laø shortcut assignment operators) Ví duï: tong=tong+10; ⇔ tong +=10; tich=tich*3; ⇔ tich *=3; a=a-3; ⇔ a -=3; c=c%k; ⇔ c %=k; Veà yù nghóa thì caùc leänh gaùn trong hai tröôøng hôïp treân coù cuøng muïc ñích nhöng caùch duøng shortcut assignment operators seõ giuùp chöông trình chaïy nhanh hôn. 7.2. Caùc pheùp bieán ñoåi kieåu (cast): Coù hai tröôøng hôïp chuyeån ñoåi kieåu döõ lieäu: • Trong moät bieåu thöùc chöùa nhieàu loaïi döõ lieäu. • Chuyeån ñoåi döõ lieäu trong bieåu thöùc gaùn. Hai tröôøng hôïp chuyeån ñoåi treân töï ñoäng dieãn ra moät caùch ngaám ngaàm beân trong. Ngoaøi ra C cuõng cung caáp cho ngöôøi laäp trình caùc toaùn töû bieán ñoåi kieåu tröïc tieáp goïi laø cast operator. Ñaây laø nhöõng toaùn töû moät ngoâi. Cuù phaùp: datatype(expression). datatype laø kieåu döõ lieäu maø ta muoán aùp ñaët cho cho bieåu thöùc. Ví duï: #include void main(void) { float a=3.5f, b=3.0f; printf(“%f,int(a*b); // a*b=10.5, nhöng keát quaû chæ in ra 10 //do giaù trò ñaõ ñöôïc ñoåi kieåu } 7.3. Haèng (const): 7.3.1. Literal data: Laø baát kyø nhöõng döõ lieäu naøo trong chöông trình maø giaù trò cuûa noù cuõng chính laø teân cuûa noù. Ví duï nhö coù ñoaïn leänh sau: void main() { float fchuvi, fbankinh; printf( “Nhap ban kinh hinh tron:” ; scanf(“%f”, fbankinh); fchuvi=2*3.1416* fbankinh; printf(“Voi ban kinh la %f thi chu vi hinh tron = %f”, fbankinh, fchuvi; } trong chöông trình treân thì 2 vaø 3.1416 laø caùc literal data. Leâ Vaên Haïnh Oct11 18
- Laäp trình C - Caáu truùc döõ Lieäu giaûi thuaät Neáu moät literal data ñöôïc söû duïng nhieàu nôi trong moät chöông trình, thì coù khaû naêng chöùa caùc loãi tieàm aån, ví duï giaù trò cuûa moät literal data ghi khoâng thoáng nhaát taïi caùc vò trí trong chöông trình, hoaëc khi caàn thay ñoåi giaù trò cuûa moät literal data naøo ñoù ngöôøi laäp trình phaûi söûa ôû nhieàu vò trí trong chöông trình. Vì vaäy vöøa laøm maát thôøi gian vöøa deã sai soùt. Ñeå traùnh tình traïng naøy C cung caáp cô cheá ñaët teân cho moät literal data thoâng qua töø khoùa const goïi laø khai baùo haèng. 7.3.2. Haèng: Chöùa döõ lieäu, döõ lieäu naøy khoâng theå thay ñoåi ñöôïc trong chöông trình. Muoán söû duïng phaûi khai baùo. Phaûi coù kieåu (töông töï nhö bieán). Khai baùo haèng coù kieåu long int thì phaûi theâm vaøo cuoái “L” (450000L). Cuù phaùp: const = ; Ví duï: const float PI=3.1416; Vò trí khai baùo haèng trong chöông trình: void main() { //caùc khai baùo haèng; //caùc khai baùo bieán; //caùc leänh khaùc; } 8. CAÙC HAØM TOAÙN HOÏC TRONG C: Maëc duø coù cung caáp caùc toaùn töû soá hoïc nhö + - * /.. nhöng vaãn khoâng ñuû ñeå duøng; ví duï nhö khoâng coù toaùn töû ñeå tính luõy thöøa hay caên cuûa moät soá. Thay vaøo ñoù C cung caáp moät soá haøm toaùn hoïc ñeå coù theå söû duïng trong chöông trình. Tröôùc khi duøng moät haøm ta caàn phaûi bieát: • Teân cuûa haøm muoán söû duïng. • Coâng duïng cuûa haøm. • Loaïi döõ lieäu seõ cung caáp cho haøm. • Kieåu döõ lieäu cuûa keát quaû traû veà bôûi haøm. Cuù phaùp chung cuûa moät haøm laø: Function_name (danh saùch caùc ñoái soá). Khi söû duïng haøm toaùn hoïc caàn khai baùo prototype: # include Leâ Vaên Haïnh Oct11 19
- Laäp trình C - Caáu truùc döõ Lieäu giaûi thuaät Moät soá haøm thöôøng duøng: Kieåu döõ lieäu Teân Haøm Coâng Duïng cuûa keát quaû abs(x) Tính trò tuyeät ñoái cuûa soá x (x coù kieåu laø int) int fabs(x) Tính trò tuyeät ñoái cuûa soá x (x coù kieåu laø double) double labs(x) Tính trò tuyeät ñoái cuûa soá x (x coù kieåu laø long int) long int pow(x,y) tính x luõy thöøa y double sqrt(x) tính caên baäc 2 cuûa x double sin(x) tính sin x (x tính baèng radian) double cos(x) tính cos x (x tính baèng radian) double tan(x) tính tan x (x tính baèng radian) double log(x) ln(x) double log10(x) logarit cô soá 10 cuûa x double exp(x) ex double • Ñoái soá cuûa nhöõng haøm treân coù theå laø: Soá nguyeân hoaëc soá thöïc. Noù coù theå laø haèng, bieán hoaëc moät bieåu thöùc. Ví duï: #include #include void main() { int x=5, x=2; printf(“x luy thua y= %d”,pow(x,y)); } Leâ Vaên Haïnh Oct11 20
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Giáo trình môn Cơ sở dữ liệu
95 p | 828 | 404
-
Tài liệu lập trình C++ tiếng Việt
200 p | 295 | 74
-
Phần mềm phân tích dữ liệu Origin
23 p | 524 | 59
-
Mô hình kết nối cơ sở dữ liệu ADO.NET
11 p | 513 | 43
-
Sáng tạo trong thuật toán và lập trình với ngôn ngữ Pascal và C# Tập 1 - Chương 2
40 p | 181 | 40
-
Tìm hiểu C# và ứng dụng của C# p 22
4 p | 176 | 21
-
LẬP TRÌNH THEO KIẾN TRÚC 3 LỚP (3-tiers architechture)
10 p | 99 | 18
-
Giáo trình Kỹ thuật lập trình C: Căn bản & nâng cao - Phần 2
236 p | 24 | 13
-
Giáo trình Lập trình trực quan (Nghề: Quản trị mạng máy tính - Cao đẳng) - Trường Cao đẳng nghề Hà Nam (năm 2017)
172 p | 26 | 11
-
Kỹ thuật lập trình C cơ sở và nâng cao: Phần 2
279 p | 49 | 11
-
Lập trình C trên Windows Các kỹ thuật xử lý Clipboard Nguyễn Tri Tuấn Khoa(Tiếp theo)
28 p | 77 | 10
-
Truy cập cơ sở dữ liệu với .NET - Truy cập nhanh cơ sở dữ liệu với Data Reader
8 p | 92 | 7
-
Kỹ thuật lập trình - chương 9
7 p | 87 | 6
-
Bài giảng Kiến trúc máy tính (Phần 2): Chương 1 - Nguyễn Văn Huy
40 p | 47 | 5
-
Bài giảng Lập trình C: Chương 9 - Ngô Công Thắng
0 p | 63 | 4
-
Bài giảng Lập trình C: Chương 09 - GV. Ngô Công Thắng
18 p | 39 | 4
-
Bài giảng Nhập môn về lập trình - Chương 2: Cấu trúc và thành phần của chương trình C
27 p | 47 | 3
-
Bài giảng Lập trình: Chương 2 - Vũ Song Tùng
83 p | 17 | 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