Giáo trình Kỹ thuật lập trình - Trần Tuấn Minh
Bạn đang xem 20 trang mẫu của tài liệu "Giáo trình Kỹ thuật lập trình - Trần Tuấn Minh", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
Tài liệu đính kèm:
- giao_trinh_ky_thuat_lap_trinh_tran_tuan_minh.pdf
Nội dung text: Giáo trình Kỹ thuật lập trình - Trần Tuấn Minh
- Kyõ thuaät laäp trình - 1 - TRÖÔØNG ÑAÏI HOÏC ÑAØ LAÏT F 7 G GIAÙO TRÌNH KYÕ THUAÄT LAÄP TRÌNH TRAÀN TUAÁN MINH 2002 Traàn Tuaán Minh Khoa Toaùn – Tin hoïc
- Kyõ thuaät laäp trình - 2 - MUÏC LUÏC MUÏC LUÏC 2 CHÖÔNG 1 : CAÙC KIEÅU DÖÕ LIEÄU CÔ BAÛN TRONG C++ 4 1.1 Môû ñaàu 4 1.2 Caùc Yeáu Toá Cô Baûn Cuûa Ngoân Ngöõ C++ : 6 1.3 Caùc Kieåu Döõ Lieäu Cô Baûn Trong C++ : 8 1.4 Caùc Haèng : 10 1.5 Bieán : 13 1.6 Caâu leänh gaùn : 14 1.7 Töø khoùa : typedef 15 1.8 Sô Löôïc Veà Nhaäp, Xuaát Chuaån Trong C++ 15 BAØI TAÄP 19 CHÖÔNG 2 : CAÙC TOAÙN TÖÛ TRONG C++ 21 2.1 Caùc toaùn töû soá hoïc : 21 2.2 Toaùn töû quan heä vaø logic : 23 2.3 Caùc Toaùn Töû Thao Taùc Bit. 24 2.4 Caùc toaùn töû khaùc. 27 2.5 Bieåu Thöùc : 27 2.6 Ñoä öu tieân cuûa caùc toaùn töû 31 BAØI TAÄP 33 CHÖÔNG 3. HAØM VAØ CHÖÔNG TRÌNH 36 3.1 Caáu truùc chung cuûa chöông trình C++ : 36 3.2 Haøm. 38 3.3 Moät soá thö vieän trong C++ 45 BAØI TAÄP 48 CHÖÔNG 4. CAÙC CAÂU LEÄNH ÑIEÀU KHIEÅN 49 4.1 Caâu leänh if 49 4.2 Caâu leänh switch 53 4.4 Caâu leänh while ( Laëp vôùi ñieàu kieän ñöôïc kieåm tra tröôùc ) 61 4.5 Caâu leänh do while ( Laëp vôùi ñieàu kieän ñöôïc kieåm tra sau ) 63 4.6 Caâu leänh goto vaø nhaõn : 68 4.7 Caùc caâu leänh break, continue : 68 4.8 Caâu leänh roång : 69 4.10 Caùc ví duï : 71 BAØI TAÄP 77 CHÖÔNG 5. CAÙC CAÁU TRUÙC DÖÕ LIEÄU CÔ BAÛN 79 5.1 Maûng : 79 5.2 Xaâu kyù töï : 91 5.3 Kieåu Caáu truùc : 94 Traàn Tuaán Minh Khoa Toaùn – Tin hoïc
- Kyõ thuaät laäp trình - 3 - 5.4 Maûng caáu truùc : 97 5.5 Kieåu enum. 102 BAØI TAÄP 104 CHÖÔNG 6 : CON TROÛ 110 6.1 Con troû : 110 6.2 Con troû vaø maûng 1 chieàu : 118 6.3 Con troû vaø xaâu kyù töï : 120 6.4 Con troû vaø maûng 2 chieàu : 122 6.5 Con troû vaø caáu truùc 125 6.6. Maûng con troû : 127 6.7 Tìm hieåu theâm veà haøm: 128 BAØI TAÄP 136 CHÖÔNG 7 : LAÄP TRÌNH ĐƠN THỂ 137 7.1 Ñôn theå chöông trình : 137 7.2 Döï aùn (Project) 139 7.3 Caùc lôùp löu tröû : 145 7.4 Ñeä qui 152 7.5 Boä tieàn xöû lyù trong C++ : 155 BAØI TAÄP : 158 CHÖÔNG 8 : LAÄP TRÌNH VÔÙI TAÄP TIN 160 8.1 Môû ñaàu : 160 8.2 Caùc loaïi taäp tin : 160 8.3 Môû ñaàu veâ nhaäp/xuaát taäp tin trong C++ 161 8.4 Nhaäp/Xuaát nhò phaân khoâng ñònh daïng 175 8.5 Truy caäp ngaãu nhieân. 176 BAØI TAÄP 180 TAØI LIEÄU THAM KHAÛO 181 Traàn Tuaán Minh Khoa Toaùn – Tin hoïc
- Kyõ thuaät laäp trình - 4 - CHÖÔNG 1 : CAÙC KIEÅU DÖÕ LIEÄU CÔ BAÛN TRONG C++. 1.1 Môû ñaàu. 1.2 Caùc yeáu toá cô baûn cuûa ngoân ngöõ C++. 1.3 Caùc kieåu döõ lieäu cô baûn trong C++. 1.4 Caùc haèng. 1.5 Bieán. 1.6 Caâu leänh gaùn. 1.7 Töø khoùa typedef. 1.8 Sô löôïc veà nhaäp, xuaát trong C++. 1.1 Môû ñaàu. 1.1.1 Giôùi thieäu ngoân ngöõ C/ C++ : YÙ töôûng quan troïng nhaát cuûa C xuaát phaùt töø ngoân ngöõ BCPL do Martin Richards thieát keá. Aûnh höôûng cuûa BCPL leân C giaùn tieáp thoâng qua ngoân ngöõ B do Ken Thompson vieát naêm 1970 cho heä thoáng UNIX ñaàu tieân treân maùy PDP-7. Töø ngoân ngöõ B, Dennish Ritchie vaø Brian Kernighan phaùt trieån thaønh ngoân ngöõ C vaøo nhöõng naêm 1970 taïi phoøng thí nghieäm cuûa haõng AT & T ñeå phaùt trieån coát loõi cuûa heä ñieàu haønh UNIX. Trong nhieàu naêm, chuaån cho C treân thöïc teá laø moät phieân baûn ñöôïc cung caáp cuøng vôùi heä ñieàu haønh Unix version 5. Noù ñöôïc moâ taû laàn ñaàu tieân trong cuoán : ” The C programming language “ cuûa Dennish Ritchie vaø Brian Kernighan. Cuøng vôùi söï phoå bieán caùc maùy tính caù nhaân, coù nhieàu baûn caøi ñaët cuûa C ñöôïc taïo ra. Ña soá caùc caøi ñaët ñeàu töông thích toát vôùi nhau ( töùc laø moät chöông trình ñöôïc vieát cho trình bieân dòch naøy thöôøng bieân dòch thaønh coâng ñoái vôùi moät trình bieân dòch khaùc ). Tuy nhieân, vì khoâng döïa treân moät chuaån chung neân cuõng coù nhieàu töông phaûn. Ñeå khaéc phuïc tình traïng naøy, vaøo muøa heø 1983 moät hoäi ñoàng ñöôïc thaønh laäp ñeå taïo ra moät chuaån cho C, goïi laø chuaån ANSI ( American National Standards Institute : Vieän ñònh chuaån Quoác gia Myõ). Sau 6 naêm, chuaån cuoái cuøng ANSI C ñöôïc ñeà nghò vaøo thaùng 12/1989, vaø baûn ñaàu tieân ñöôïc duøng vaøo naêm 1990. Ngaøy nay caùc trình bieân dòch C chính ñeàu giöõ ñuùng theo ANSI chuaån. C laø moät ngoân ngöõ coù khaû naêng toå hôïp nhöõng thaønh phaàn toát nhaát cuûa ngoân ngöõ baäc cao vaø söï ñieàu khieån linh hoaït cuûa ngoân ngöõ assembly . - Coù theå xem C laø ngoân ngöõ "caáp thaáp" theo nghóa töông ñoái, nghóa laø C coù theå xöû lyù tröïc tieáp caùc ñoái töôïng kyù töï, soá, ñòa chæ. Ngoaøi ra, C coøn sinh maõ toái öu, taäp caùc toaùn töû hieäu quaû cho pheùp thao taùc ñeán caùc bit. - Tuy nhieân C vaãn coù ñaày ñuû caùc ñaëc ñieåm maø baát kyø moät ngoân ngöõ caáp cao naøo caàn phaûi coù : - Tính khaû chuyeån ( portable ) . Traàn Tuaán Minh Khoa Toaùn – Tin hoïc
- Kyõ thuaät laäp trình - 5 - - Cho pheùp deã daøng trieån khai phöông phaùp laäp trình coù caáu truùc . - Cho pheùp xaây döïng caáu truùc chöông trình, dieãn ñaït thuaät toaùn roõ raøng, trong saùng. Bôûi caùc lyù do treân ngöôøi ta coøn thöôøng noùi C laø ngoân ngöõ baäc trung. Sau ñaây laø baûng vò trí cuûa C/C++ trong theá giôùi caùc ngoân ngöõ : Baäc cao nhaát Ada Modula-2 Pascal COBOL FORTRAN BASIC Baäc trung C C++ FORTH Macro-assembler Ngoân ngöõ C ñaõ khoâng ngöøng caûi tieán vaø phaùt trieån. Naêm 1987 haõng Borland ñaõ ñöa ngoân ngöõ C vaøo thò tröôøng cuûa IBM-PC thoâng qua Turbo C. Vaøo nhöõng naêm 1980, Bjarne Stroustrup ñaõ cho ra ñôøi ngoân ngöõ C++ baèng caùch caøi vaøo ngoân ngöõ C khaùi nieäm laäp trình höôùng ñoái töôïng. Naêm 1988, haõng Zortech giôùi thieäu moät trình bieân dòch C++ cho caùc maùy tính MS-DOS Cho tôùi nay ñaõ xuaát hieän nhieàu phieân baûn C++ trong moâi tröôøng Microsoft Windows : Borland C++, Turbo C++ cuûa haõng Borland; Visual C++ cuûa Microsoft. Hieän nay coù nhieàu chöông trình lôùn ñöôïc vieát hay ñöôïc vieát laïi baèng C/C++ : - Heä ñieàu haønh UNIX. - Heä ñieàu haønh Windows. - Heä quaûn trò cô sôû döõ lieäu Dbase. - Caùc chöông trình soaïn thaûo vaên baûn. - Caùc baûng tính ñieän töû. . . . . . . . . . . . . . . Trong giaùo trình naøy ta seõ minh hoïa baèng Borland C++ 3.1 for DOS. 1.1.2 Chöông trình C++ ñaàu tieân. Chöông trình C++ ñôn giaûn sau ñaây xuaát moät doøng vaên baûn ra man hình. //Chöông trình C++ ñaàu tieân. #include Traàn Tuaán Minh Khoa Toaùn – Tin hoïc
- Kyõ thuaät laäp trình - 6 - int main() { cout Laø moät chæ thò tieàn xöû lyù. Nhöõng doøng baét ñaøu töø kyù hieäu # seõ ñöôïc C++ xöû lyù tröôùc khi bieân dòch. YÙ nghóa cuûa noù laø naïp taäp tin tieâu ñeà iostream.h vaøo trong chöông trình. Taäp tin iostream.h ñöôïc duøng cho baát kyù chöông trình C++ naøo coù xöû duïng caùc thao taùc Nhaäp/Xuaát döõ lieäu. - Doøng 3 cuûa chöông trình : int main() main() laø teân cuûa haøm, ta hoïi laø haøm chính, laø baét buoäc phaûi coù ñoái vôùi baát kyø moät chöông trình C++ naøo. int laø kieåu soá nguyeân, chæ kieåu döõ lieäu cuûa haøm. Sau teân haøm haøm main() laø thaân cuûa haøm main(), xaùc ñònh bôûi : { : baét ñaàu vaøo thaân haøm } : Keát thuùc haøm. - Doøng 4 : cout = - Kyù töï gaïch noái : _ ( Khaùc daáu tröø - ). -Caùc kyù hieäu khaùc : ' " ; , . : [ ] # $ & { } % ! . . . . Traàn Tuaán Minh Khoa Toaùn – Tin hoïc
- Kyõ thuaät laäp trình - 7 - Ñaëc bieät coù khoaûng traéng duøng ñeå ngaên caùch caùc töø (phím Space). Caùc kyù hieäu cô sôû ñeàu coù treân baøn phím. 1.2.2 Caùc töø Töø trong C++ ñöôïc xaây döïng bôûi caùc kyù hieäu cô sôû treân. Coù 2 loaïi töø :Töø khoùa vaø teân. a. Töø khoùa (Key Word): Laø nhöõng töø coù yù nghóa hoaøn toaøn xaùc ñònh, chuùng thöôøng ñöôïc duøng ñeå khai baùo caùc kieåu döõ lieäu , ñeå vieát caùc toaùn töû, vaø caùc caâu leänh. Sau ñaây laø caùc töø khoùa trong Borland C++ (Turbo C++) : Asm auto break case catch char Class const continue default delete do Double else enum extern float for Friend goto if inline int long New operator private protected public register Return short signed sizeof static struct Switch template this throw try typedef Union unsigned virtual void volatile while Cdecl _cs _ds _es _export far Huge interrupt _loadds near Pascal _regparam _saveregs _seg _ss Ghi chuù : Caùc töø khoùa chæ ñöôïc vieát thöôøng, chaúng haïn khoâng ñöôïc vieát INT maø phaûi vieát int. b. Teân hoaëc danh hieäu (identifier): Laø töø do ngöôøi söû duïng töï ñaët ñeå giaûi quyeát baøi toaùn cuûa mình. Töø töï ñaët duøng ñeå ñaët teân cho haèng, bieán, haøm, teân kieåu döõ lieäu môùi, Teân ñöôïc ñaët theo quy taéc : phaûi baét ñaàu baèng moät chöõ caùi hoaëc daáu gaïch noái,sau ñoù laø caùc chöõ caùi, chöõ soá hoaëc daáu gaïch noái , vaø khoâng ñöôïc truøng vôùi töø khoùa. Teân coù theå vieát baèng chöõ thöôøng hoaëc chöõ hoa. Chieàu daøi cöïc ñaïi cuûa teân maëc ñònh laø 32. Nhöng coù theå ñaët laïi moät giaù trò khaùc töø 1 ñeán 32 trong chöùc naêng : Option - Complier - Source - Identìier length trong moâi tröôøng keát hôïp cuûa C++. Trong C++ coù phaân bieät chöõ thöôøng vaø chöõ hoa. Ví duï : - Caùc ví duï sai : 21holpljpmljn // Kyù töï ñaàu laø soá ts#bnk uio0986 // Sö duïng kyù hieäu # Khoang trang // Söû duïng khoûang traéng f(x) // Söû duïng daáu ngoaëc troøn Traàn Tuaán Minh Khoa Toaùn – Tin hoïc
- Kyõ thuaät laäp trình - 8 - . . . . . . . . . . . . . . . . . . - Caùc ví duï ñuùng : T123tyu09 _dll098786 1.3 Caùc Kieåu Döõ Lieäu Cô Baûn Trong C++ : Trong C++ coù 5 kieåu döõ lieäu cô baûn laø : - Caùc kieåu Kyù töï . - Caùc kieåu nguyeân . - Kieåu Soá thöïc daáu chaám ñoäng ñoä chính xaùc ñôn : float - Kieåu Soá thöïc daáu chaám ñoäng ñoä chính xaùc keùp : double - Kieåu void. Caùc kieåu döõ lieäu khaùc ñeàu döïa vaøo caùc kieåu döõ lieäu treân. Kieåu void seõ ñöôïc trình baøy trong caùc chöông sau, trong phaàn naøy ta chæ giôùi thieäu caùc kieåu coøn laïi. 1.3.1 Kyùù töï : Coù nhieàu kieåu kyù töï. Moät kieåu kyù töï ñöôïc khai baùo bôûi töø khoùa char. Moät giaù trò kieåu char ñöôïc löu tröû trong 8 bit vaø bieåu dieãn ñöôïc 1 kyù töï thoâng qua baûng maõ ASCII . Chaúng haïn : Kyù töï Maõ ASCII (heä 10) 0 48 1 49 A 65 a 97 . . . . Coù caùc kieåu kyù töï töông öùng vôùi caùc töø khoùa : signed char ( nhö char, coù daáu) unsigned char (Khoâng daáu). Sau ñaây laø baûng kích thöôùc, phaïm vi bieåu dieãn cuûa caùc kieåu kyù töï : KIEÅU Phaïm vi bieåu dieãn Kích thöôùc Soá kyù töï Char -128 → 127 1 byte 256 signed char -128 → 127 1 byte 256 unsigned char 0 → 255 1 byte 256 Ghi chuù : Coù theå chia 256 kyù töï thaønh 3 nhoùm : - Nhoùm 1 : Laø caùc kyù töï ñieàu khieån, coù maõ ASCII töø 0 ñeán 31. Caùc kyù töï naøy noùi chung laø khoâng hieån thò ra maøn hình. Traàn Tuaán Minh Khoa Toaùn – Tin hoïc
- Kyõ thuaät laäp trình - 9 - Chaúng haïn, Kyù töï maõ 10 chuyeån con troû xuoáng doøng döôùi (treân cuøng coät); kyù töï maõ 13 chuyeån con troû veà ñaàu doøng. . . - Nhoùm 2 : Laø caùc kyù töï vaên baûn, coù maõ ASCII töø 32 ñeán 126. Caùc kyù töï naøy coù theå ñöa ra maøn hinh hoaëc maùy in. - Nhoùm 3 : Laø caùc kyù töï ñoà hoïa, coù maõ soá töø 127 ñeán 255. Caùc kyù töï naøy coù theå ñöa ra maøn hình. 1.3.2 Kieåu nguyeân : Trong C++ cho pheùp söû duïng caùc kieåu soá nguyeân ñöôïc khai baùo bôûi töø khoùa int, hoaëc ñi keøm theo int vôùi caùc töø khoùa long, short, unsigned. Soá löôïng bit ñöôïc duøng ñeå löu tröû moät giaù trò int phuï thuoäc vaøo kích thöôùc töø (word) cuûa maùy. Thöôøng thì maùy 16-bit seõ duøng 16 bit ñeå löu tröû moät giaù trò int , trong khi ñoù maùy 32-bit seõ duøng 32 bit . Kích thöôùc vaø phaïm vi bieåu dieãn cuûa chuùng ñöôïc cho trong baûng sau : Kieåu Phaïm vi bieåu dieãn Kích thöôùc Int Chieám 1 töø cuûa maùy. short int , short -32768 → 32767 (-215 → 215 -1) 16 bit unsigned short int 0 → 65535 (0 → 216 -1) 16 bit long int , long -2147483648 → 2147483647 32 bit (-231 → 231 -1 ) unsigned long int 0 → 4294967295 ( 0 → 232 -1) 32 bit unsigned int Soá nguyeân khoâng aâm , chieám 1 töø cuûa maùy. Ghi chuù : Giaù trò kieåu kyù töï ñöôïc xem laø moät soá nguyeân 8-bit. 1.3.3 Kieåu soá thöïc : C++ cho pheùp söû duïng 3 kích thöôùc giaù trò thöïc, töông öùng vôùi 3 töø khoùa : float, double vaø long double. Kích thöôùc vaø phaïm vi bieåu dieãn cuûa chuùng ñöôïc cho trong baûng sau : Kieåu YÙ nghóa Phaïm vi bieåu dieãn Kích Ñoä chính thöôùc xaùc Float Soá thöïc chính -3.4E+38 → 3.4E+38 32 bit 6 soá thaäp xaùc ñôn phaân Double Soá thöïc chính -1.7E+308 → 1.7E+308,0 64 bit 10 soá thaäp xaùc keùp phaân long double Kích thöôùc 96 bit hoaëc 128 bit Ghi chuù : Traàn Tuaán Minh Khoa Toaùn – Tin hoïc
- Kyõ thuaät laäp trình - 10 - Löu tröû trong maùy : (*) Moät soá thöïc kieåu float x vôùi | x| < 3.4E-38 ñöôïc xem laø baèng 0. -3.4E+38 -3.4E-38 0 3.4E-38 3.4E+38 ( ) Moät soá thöïc kieåu double x vôùi ( | x| < 1.7E-308 ) ñöôïc xem laø baèng 0. -1.7E+308 -1.7E-308 1.7E-308 1.7E+308 1.4 Caùc Haèng : Haèng laø caùc ñaïi löôïng maø giaù trò cuûa noù khoâng thay ñoåi trong quaù trình tính toaùn. Ta thöôøng duøng caùc kyù töï hoa ñeå bieåu dieãn caùc haèng kyù hieäu. Trong C++ coù caùc loaïi haèng sau ñaây: 1.4.1 Haèng soá thöïc Giaù trò ñöôïc laáy laø float vaø double. Vieát theo 2 caùch : 1. Daïng thaäp phaân (daáu chaám coá ñònh) : Bao goàm : Phaàn nguyeân, daáu chaám thaäp phaân, phaån phaân. Phaàn nguyeân ⋅ Phaàn phaân Ví duï : 214.35 -43.345 234.0 Ghi chuù : Phaàn nguyeân hay phaàn phaân coù theå vaéng maët nhöng daáu chaâm khoâng theå thieáu. Chaúng haïn cho pheùp vieát : .12 7. 2. Daïng khoa hoïc hay daïng muõ ( daáu chaám ñoäng ) : Coù 3 thaønh phaàn : Phaàn ñònh trò , kyù hieäu E hoaëc e , vaø phaàn baäc. Phaàn ñònh trò laø moät soá nguyeân hoaëc soá thöïc daïng thaäp phaân. Phaàn baäc laø moät soá nguyeân. Hai phaàn naøy caùch nhau bôûi kyù töï E hoaëc e. Phaàn ñònh trò E hoaëc e Phaàn baäc Ví duï : 12.234E-3 // bieåu dieãn giaù trò 0.012234 0.35E4 // bieåu dieãn giaù trò 3500.0 -12.22e-3 // bieåu dieãn giaù trò -0.01222 1e6 // bieåu dieãn giaù trò 1 000 000 1.4.2 Haèng nguyeân 1. Haèng int : Laø soá nguyeân coù kieåu int . Traàn Tuaán Minh Khoa Toaùn – Tin hoïc
- Kyõ thuaät laäp trình - 11 - Ghi chuù : 21 (haèng nguyeân) khaùc 21.0 (haèng thöïc) 2. Haèng long : Bieåu dieãn : theâm L hoaëc l vaøo sau haèng int. Ví duï : -2345L ; 4356l Ghi chuù : Moät soá nguyeân vöôït ra khoûi mieàn xaùc ñònh cuûa int ñöôïc xem laø haèng long. 3. Haèng unsigned : Bieåu dieãn : theâm u vaøo sau haèng int. Coù giaù trò töø 0 ñeán 65535. 4. Haèng int heä 8 : Haèng int heä 8 luoân nhaän giaù trò döông. Daïng bieåu dieãn : 0c1c2c3 Vôùi : ci laø moät soá nguyeân trong khoaûng töø 0 ñeán 7. Ví duï : - Haèng int heä 8 : 0345 - Giaù trò cuûa noù trong heä 10 : 3*8*8 + 4*8 + 5 = 229. 5. Haèng int heä 16 : Trong heä naøy söû duïng 16 kyù töï : 0,1,2,3,4,5,6,7,8,9, a hoaëc A b hoaëc B c hoaëc C d hoaëc D e hoaëc E f hoaëc F Daïng bieåu dieãn : 0x c1c2c3 hoaëc 0X c1c2c3 Trong ñoù ci laø moät chöõ soá heä 16. Ví duï : Caùc haèng nguyeân heä 16 : 0xa3 ; 0Xa3 ; 0xA3 ; 0XA3 laø nhö nhau. Giaù trò cuûa noù trong heä 10 laø : 10*16 + 3 = 163. 1.4.3 Haèng kyù töï : - Laø moät kyù töï ñöôïc vieát trong 2 daáu nhaùy ñôn. Chaúng haïn ‘a’ , ‘A’, ‘3’, ‘+’ . . . Trình bieân dòch cuûa C++ seõ löu tröû caùc haèng naøy baèng caùch duøng caùc maõ soá ASCII (heä 10) cuûa noù, töông öùng laø 97,65, 43, 51 . . . - Kyù töï coù theå bieåu dieãn bôûi heä 8. Caùch vieát : ‘\c1c2c3’ , trong ñoù ci laø caùc kyù hieäu trong heä 8. - Kyù töï coù theå bieåu dieãn bôûi heä 16. Caùch vieát : ‘\xc1c2c3’ hoaëc ‘\Xc1c2c3’ trong ñoù ci laø caùc kyù hieäu trong heä 16. Kyù töï Heä 8 Heä 16 Maõ ASCII Maõ ASCII Bieåu dieãn Maõ ASCII Bieåu dieãn heä 10 Traàn Tuaán Minh Khoa Toaùn – Tin hoïc
- Kyõ thuaät laäp trình - 12 - ‘a’ 141 ‘\141’ 61 ‘\x61’ 97 ‘A’ 101 ‘\101’ 41 ‘\x41’ 65 - Ñoái vôùi moät soá haèng kyù töï ñaëc bieät, ta söû duïng caùch vieát sau (theâm daáu \) : Caùch vieát Kyù töï ‘\’ ’ ‘ ‘\” ‘ “ ‘\\’ \ ‘\n’ \n (chuyeån doøng) ‘\0’ \0 (NULL) ‘\t’ Tab ‘\b’ Backspace ‘\r’ CR (Veà ñaàu doøng) ‘\f’ LF (sang trang) Ghi chuù : 1. Haèng kyù töï coù theå tham gia vaøo caùc bieåu thöùc nhö moïi soá nguyeân khaùc. Ví duï : ‘9’ -’0’ = 57 -48 = 9 2. Caàn phaân bieät : ‘0’ : laø kyù soá 0 coù maõ ASCII heä 10 laø 48. ‘\0’ : laø kyù töï NULL coù maõ ASCII heä 10 laø 0. 1.4.4 Haèng xaâu kyù töï ( Chuoãi ): Laø moät daõy kyù töï ñöôïc bao trong 2 daáu nhaùy keùp. Ví duï : “Da Lat” “” // Xaâu roång Ghi chuù : - Xaâu kyù töï ñöôïc löu tröû trong maùy döôùi daïng moät maûng caùc kyù töï. Trình bieân dòch töï ñoäng theâm kyù töï NULL ‘\0’ ( ñöôïc xem laø daáu hieäu keát thuùc xaâu ) vaøo cuoái moãi xaâu. - Haèng kyù töï ‘a’ khaùc xaâu kyù töï “a”. 1.4.5 Bieåu thöùc haèng : Bieåu thöùc haèng chæ bao goàm caùc haèng. Caùc bieåu thöùc nhö vaäy ñöôïc xaùc ñònh vaøo luùc bieân dòch. 1.4.6 Ñònh nghóa moät haèng 1. Duøng chæ thò #define ( Coù theå ñònh nghóa laïi giaù trò haèng ) : - Caùch vieát : #define TEÂN-HAÈNG GIAÙ_TRÒ_HAÈNG // Khoâng coù daáu ; ôû sau Traàn Tuaán Minh Khoa Toaùn – Tin hoïc
- Kyõ thuaät laäp trình - 13 - - Taùc duïng : TEÂN-HAÈNG seõ ñöôïc thay theá bôûi GIAÙ_TRÒ_HAÈNG cho phaàn coøn laïi cuûa vaên baûn chöông trình. Ví duï : #define MAX 100 // Thay theá MAX baèng 100 2. Duøng töø khoùa const ( Khoâng ñònh nghóa laïi ñöôïc giaù trò haèng ) : C++ söû duïng töø khoùa const ñeå ñònh nghóa moät haèng döôùi daïng moät teân . - Cuù phaùp : Const kieåu TEÂN-HAÈNG = GIAÙ_TRÒ_HAÈNG; // coù daáu ; - Taùc duïng : Cho pheùp ñònh nghóa moät haèng kyù hieäu coù teân laø TEÂN-HAÈNG bieåu thò moät gia trò laø GIAÙ_TRÒ_HAÈNG vaø sau naøy khoâng theå söûa ñoåi GIAÙ_TRÒ_HAÈNG cuûa TEÂN- HAÈNG ñöôïc . Ví duï : Const long double PI = 3.141592653589793; Trong C++ coù moät soá haèng ñöôïc ñònh nghóa tröôùc : Teân haèng Moâ taû Taäp tin tieâu ñeà INT_MIN Giaù trò nhoû nhaát cuûa int limits.h INT_MAX Giaù trò lôùn nhaát cuûa int limits.h UINT_MIN Giaù trò nhoû nhaát cuûa unsigned limits.h int UINT_MAX Giaù trò lôùn nhaát cuûa unsigned int limits.h LONG_MIN Giaù trò nhoû nhaát cuûa long int limits.h LONG_MA Giaù trò lôùn nhaát cuûa long int limits.h X FLT_MIN Giaù trò nhoû nhaát float float.h FLT_MAX Giaù trò lôùn nhaát cuûa float float.h DBL_MIN Giaù trò nhoû nhaát double float.h DBL_MAX Giaù trò lôùn nhaát cuûa double float.h LDBL_MIN Giaù trò nhoû nhaát long double float.h LDBL_MAX Giaù trò lôùn nhaát cuûa long double float.h 1.5 Bieán : 1.5.1 Ñònh nghóa : Bieán laø moät phaàn boä nhôù ñöôïc ñaët teân, ñöôïc duøng, ñeå giöõ moät giaù trò maø coù theå thay ñoåi trong chöông trình. Vaäy bieán gaén vôùi teân vaø kieåu döõ lieäu, coù giaù trò thay ñoåi trong quaù trình tính toaùn. 1.5.2 Khai baùo bieán : Moãi bieán phaûi ñöôïc khai baùo tröôùc khi söû duïng. Cuù phaùp khai baùo nhö sau : - Khai baùo moät bieán : Kdl Bien; - Khai baùo nhieàu bieán cuøng moät kieåu : Traàn Tuaán Minh Khoa Toaùn – Tin hoïc
- Kyõ thuaät laäp trình - 14 - Kdl Bien1,Bien2,Bien3; Trong ñoù : - Kdl laø kieåu döõ lieäu naøo ñoù nhö char, int, double, . . . - Bien, Bien1,. . . laø teân chæ teân cuûa bieán. Giöõa Kdl vaø Teân bieán phaûi caùch nhau ít nhaát 1 khoaûng traéng. Trong phaàn teân bieán, neáu coù nhieàu bieán thì giöõa 2 bieán phaûi phaân caùch bôûi daáu phaûy (,). Ví duï : int a,b,c; // khai baùo 3 bieán kieåu int long c,d; // khai baùo 2 bieán kieåu long unsigned i,j; // Khai baùo 2 bieán kieåu unsigned char k; // khai baùo 1 bieán kieåu char float x,y; // khai baùo 2 bieán kieåu double Ghi chuù : Bieán cuûa kieåu döõ lieäu naøo thì chæ coù theå nhaän caùc giaù trò cuûa kieåu döõ lieäu ñoù. 1.5.3 Khôûi ñaàu cho caùc bieán : Neáu trong khai baùo, ngay sau teân bieán ta ñaët daáu = (pheùp gaùn ) vaø moät giaù trò döõ lieäu töông öùng thi ñoù chính laø caùch vöøa khai baùo vöøa khôûi ñaàu cho 1 bieán. Ví duï : int a = 20; long m = 12456, n; float x, y = 32.1; Ghi chuù : Coù theå thöïc hieän vieâc khôûi ñaàu cho bieán nhôø leänh gaùn. 1.5.4 Laáy ñòa chæ cho bieán : Moãi bieán ñöôïc caáp phaùt moät vuøng nhôù goàm moät soá byte lieân tieáp. Soá hieäu cuûa byte ñaàu chính laø ñòa chæ cuûa bieán. Ñeå nhaän ñòa chæ bieán ta duøng toaùn töû & vôùi cuù phaùp : &Bien . 1.6 Caâu leänh gaùn : - Coù daïng : b = bt; Trong ñoù b laø bieán. bt laø moät bieåu thöùc ( moät coâng thöùc toaùn hoïc naøo ñoù). Tröôùc tieân tính bieåu thöùc bt vaø sau ñoù gaùn giaù trò tính ñöôïc cho bieán b. Ví duï : float x; x = 2.5; x = x*x; // khi ñoù x nhaän giaù trò laø 6.25 - coù khaû naêng coù nhieàu daáu gaùn lieàn nhau : m = n = 2; Coù nghóa laø : n laáy giaù trò 2, roài m laáy giaù trò cuûa n, neân coù giaù trò baèng 2. Traàn Tuaán Minh Khoa Toaùn – Tin hoïc
- Kyõ thuaät laäp trình - 15 - Ghi chuù : Trong C++ coù nhieàu tröôøng hôïp cho pheùp gaùn giöõa caùc teân coù kieåu khaùc nhau, khi ñoù coù söï chuyeån ñoåi kieåu moät caùch töï ñoäng. ta seõ xeùt sau. 1.7 Töø khoùa : typedef Töø khoùa typefef ñöôïc duøng ñeå ñoåi laïi teân moät kieåu döõ lieäu ñaõ coù nhö char, int, float, maûng thaønh moät teân môùi. Caùch vieát laø ñaët töø khoùa typedef vaøo tröôùc 1 khai baùo thoâng thöôøng : Ví duï : a) typedef int intgia; // Kieåu intgia thöïc chaát laø kieåu int intgia x,y; // x,y laø bieán kieåu ingia (int) b) typedef double dgia; // Kieåu dgia thöïc chaát laø kieåu double dgia a,b; // a,b laø bieán kieåu dgia 1.8 Sô Löôïc Veà Nhaäp, Xuaát Chuaån Trong C++. 1.8.1 Luoàng I/O (I/O Streams) C++ xöû lyù vieäc nhaäp lieäu vaø xuaát lieäu nhö sau: • Khi caùc kyù töï ñöôïc vaøo töø baøn phím, chuùng vaøo moät luoàng nhaäp (input stream) ñöôïc goïi laø istream maø noù truyeàn caùc kyù töï töø baøn phím ñeán chöông trình. • Töông töï khi xuaát lieäu chöông trình ñöôïc hieån thò treân maøn hình, caùc kyù töï xuaát ñöôïc ñaët vaøo trong moät luoàng xuaát (output stream) maø noù truyeàn caùc kyù töï ñeán maøn hình. Chöông trình Baøn phím ostream istream C++ khoâng coù caùc tính naêng nhaäp vaø xuaát xaây döïng trong ngoân ngöõ. Thay vaøo ñoù caùc istream vaø ostream ñöôïc cung caáp bôûi moät thö vieän ñaëc bieät, maø giao dieän cuûa noù trong taäp tin tieâu ñeà (hearder) (caùc teân istream vaø ostream khoâng phaûi laø moät phaàn cuûa ngoân ngöõ C++ maø chuùng laø teân cuûa hai lôùp). Thö vieän naøy ñònh nghóa ba ñoái töôïng döõ lieäu quan troïng: • Moät ñoái töôïng istream mang teân cin, maø noù ñöôïc keát hôïp vôùi baøn phím. • Moät ñoái töôïng ostream mang teân cout, maø noù ñöôïc keát hôïp vôùi maøn hình. • Moät ñoái töôïng ostream mang teân ceer, maø noù ñöôïc keát hôïp vôùi maøn hình vaø ñöôïc duøng ñeå hieån thò caùc thoâng baùo sai. Nhaäp vaø xuaát laø caùc pheùp toaùn treân nhöõng ñoái töôïng döõ lieäu naøy. 1.8.2 Nhaäp döõ lieäu töø baøn phím : Meänh ñeà nhaäp coù theå moâ taû nhö sau: Traàn Tuaán Minh Khoa Toaùn – Tin hoïc
- Kyõ thuaät laäp trình - 16 - cin >> Bien; //Nhaäp giaù trò 1 bieán cin >> Bien1 >> Bien2 >> >> Bienn;//Nhaäp giaù trò n bieán. Trong ñoù: • cin laø istream ñaõ ñöôïc khai baùo trong . • >> laø toaùn töû nhaäp. • Bieán-i laø bieán maø ñoái vôùi loaïi cuûa noù >> ñöôïc ñònh nghóa. Ví duï: cin >> A >> B >> C >> D; Baát kyø kyù töï khoaûng traéng ‘ ‘, daáu tab ‘\t’, doøng môùi ‘\n’ ñeàu coù theå ñöôïc duøng ñeå taùch caùc giaù trò nhaäp ñeå nhaäp vaøo döõ lieäu khi meänh ñeà treân ñöôïc thöïc hieän. 1.8.3 Xuaát döõ lieäu ra maøn hình : Meänh ñeà xuaát coù theå moâ taû nhö sau: cout . • . Dec Ñònh daïng döõ lieäu kieåu soá ôû daïng heä 10. Hex Ñònh daïng döõ lieäu kieåu soá ôû daïng heä 16. Oct Ñònh daïng döõ lieäu kieåu soá ôû daïng heä 8 . setw (Width) Hieån thò giaù trò keá tieáp trong moät vuøng vôùi ñoä roäng Width ñöôïc chæ ra. setprecision (Precision) Hieån thò caùc giaù trò vôùi ñoä chính xaùc Precision ñöôïc chæ ra (maëc nhieân Traàn Tuaán Minh Khoa Toaùn – Tin hoïc
- Kyõ thuaät laäp trình - 17 - laø 6). setiosflags (FlagList) Ñaët caùc côø ñònh daïng trong FlagList, trong ñoù FlagList laø moät daõy goàm moät hoaëc nhieàu côø, caùch nhau bôûi kyù hieäu | nhö laø : Flag1 | Flag2 | | Flagn. Sau ñaây laø moät soá caùc côø ñònh daïng saún : ios::showpoint Hieån thò daáu chaám thaäp phaân vaø caùc soá 0 keùo theo. ios::fixed Hieån thò caùc giaù trò thöïc ôû daïng daáu chaám coá ñònh. ios::scientific Hieån thò caùc giaù trò thöïc ôû daïng daáu chaám di ñoäng. ios::left Hieån thò caùc giaù trò canh traùi trong moät vuøng. Ios::right Hieån thò caùc giaù trò canh phaûi trong moät vuøng. Ví duï : Chöông trình Keát quaû thöïc hieän #include #include int main () { double X = 2.66666666 Y = 3; (2.666667) cout << “\n(“ << X << “)”<< “\n(“ (3) << Y << “)\n”; cout << setiosflags(ios::fixed) << “\n(“ << X << “)” (2.666667) << “\n(“ << Y << “)\n”; (3) cout << setiosflags(ios::showpoint ) << “\n(“ << X << “)”<< “\n(“ << Y << “)\n”; (2.666667) (3.000000) cout << setiosflags(ios::showpoint | ios::fixed) << “\n(“ << X << “)”<< “\n(“ << Y << “)\n”; (2.666667) (3.000000) cout << setiosflags(ios::showpoint | ios::fixed) << setprecision(3) (2.667) << “\n(“ << X << “)”<< “\n(“ << Y << “)\n”; (3.000) cout << setiosflags(ios::showpoint | ios::fixed) << setprecision(3) ( 2.667) << “\n(“ << setw(10) << X << “)” (3.000) << “\n(“ << Y << “)\n”; cout << setiosflags(ios::showpoint | ios::fixed) << setprecision(3) << “\n(“ << setw(10) << X << “)” ( 2.667) << “\n(“ << setw(10) << Y << “)\n”; ( 3.000) } Traàn Tuaán Minh Khoa Toaùn – Tin hoïc
- Kyõ thuaät laäp trình - 18 - Ghi chuù : ios::right laø maëc nhieân, vaø setw() chæ gaây aûnh höôûng cho giaù trò keá noù ñöôïc hieån thò, trong khi nhöõng xöû lyù ñònh daïng khaùc gaây aûnh höôûng ñeán söï xuaát hieän cuûa taát caû caùc giaù trò theo sau chuùng trong meänh ñeà xuaát. KNLT : Moät caâu leänh quaù daøi coù theå vieát treân nhieàu doøng. Traàn Tuaán Minh Khoa Toaùn – Tin hoïc
- Kyõ thuaät laäp trình - 19 - BAØI TAÄP Baøi 1 : Vieát chöông trình in ra maøn hình caùc döõ lieäu coù ñònh daïng : // Haøng ñaàu laø vò trí coät maøn hình : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 2 7 8 B C B O R L A N D C + + T U R B O C + + 1 2 3 4 5 1 2 3 4 5 1 2 3 . 4 5 6 0 0 0 1 2 3 . 4 5 6 1 2 3 . 4 5 6 1 . 2 3 4 5 6 E + 0 5 Baøi 2 : Vieát chöong trình in ra maøn hình : Day la nua tren dau tich phan ( ma ASCII he 16 la F4 ) : ⌠ Day la nua duoi dau tich phan ( ma ASCII he 16 la F5 ) : ⌡ Day la dau tich phan : ∫ Baøi 3 : Xuaát kyù töï ‘z’ ra maøn hình baèng caùch duøng : 1. Bieåu dieãn kyù töï trong heä 8. 2. Bieåu dieãn kyù töï trong heä 16. Baøi 4 : double X = 100.56, Y = 3.; cout << “\n(“ << X << “)” << “\n(“ << Y << “)\n”; cout << setiosflags(ios::showpoint | ios::fixed) << “\n(“ << X << “)”<< “\n(“ << Y << “)\n”; cout << setiosflags(ios::showpoint | ios::fixed) << setprecision(2) << “\n(“ << setw(5) << X << “)” << “\n(“ << Y << “)\n”; cout << setiosflags(ios::showpoint | ios::fixed) << setprecision(3) << “\n(“ << setw(4) << X << “)” Traàn Tuaán Minh Khoa Toaùn – Tin hoïc
- Kyõ thuaät laäp trình - 20 - << “\n(“ << setw(8) << Y << “)\n”; Traàn Tuaán Minh Khoa Toaùn – Tin hoïc
- Kyõ thuaät laäp trình - 21 - CHÖÔNG 2 : CAÙC TOAÙN TÖÛ TRONG C++. 2.1 Caùc toaùn töû soá hoïc. 2.2 Caùc toaùn töû quan heä vaø logic . 2.3 Caùc toaùn töû thao taùc bit. 2.4 Caùc toaùn töû khaùc. 2.5 Bieåu thöùc. 2.6 Ñoä öu tieân cuûa caùc toaùn töû. Trong C++ coù caùc loaïi toaùn töû : pheùp gaùn, caùc toaùn töû soá hoïc, caùc toaùn töû quan heä vaø logic, caùc toaùn töû thao taùc treân Bit . . . 2.1 Caùc toaùn töû soá hoïc : C++ coù 8 toaùn töû soá hoïc : Toaùn töû YÙ nghóa Ví duï Ghi chuù - Laáy ñoái -a ; -(a+b) Toaùn töû 1 ngoâi Töï giaûm daàn x Toaùn töû 1 ngoâi ++ Töï taêng daàn ++x Toaùn töû 1 ngoâi + Coäng a + b Toaùn töû 2 ngoâi - Tröø a –b Toaùn töû 2 ngoâi * Nhaân a * b Toaùn töû 2 ngoâi / Chia a /b Toaùn töû 2 ngoâi % Chia laáy phaàn dö a%b Toaùn töû 2 ngoâi 2.1.1 Pheùp chia / : Laø toaùn töû 2 ngoâi, toaùn haïng laø caùc soá ( thöïc hay nguyeân ). a) Neáu caû 2 toaùn haïng ñeàu laø soá nguyeân thì keát quaû laø laø soá nguyeân ( chaët cuït phaàn phaân ). b) Neáu coù ít nhaát 1 toaùn haïng laø soá thöïc thì cho ra moät soá thöïc . Ví duï : int x = 3; float y = 3.; cout<<x/2; // xuaát ra maøn hình giaù trò 1 (soá nguyeân ) cout<<y/2; // xuaát ra maøn hình giaù trò 1.5 ( soá thöïc ) Traàn Tuaán Minh Khoa Toaùn – Tin hoïc
- Kyõ thuaät laäp trình - 22 - 2.1.2 Pheùp chia nguyeân laáy phaàn dö % : Laø toaùn töû 2 ngoâi, toaùn haïng laø soá nguyeân , keát quaû cho ra soá nguyeân. 13 % 3 = 1 -13 % 3 = -1 Ghi chuù : Keát quaû luoân cuøng daáu vôùi soá bò chia. 2.1.3 Toaùn töû taêng ++: Laø toaùn töû 1 ngoâi, toaùn haïng laø nguyeân hay thöïc . Daïng vieát 1 : ++ n ; Taùc duïng : n taêng theâm 1 tröôùc khi söû duïng giaù trò n. Daïng vieát 2 : n++ ; Taùc duïng : n taêng theâm 1 sau khi söû duïng giaù trò n. Minh hoïa : n = 5; n = 5; x = n++ ; //x = n; x = ++n ; //n = n+1; //n = n+1; //x = n; cout<<x; // x == 5 cout<<x; // x == 6 cout <<n; // n == 6 cout <<n; // n == 6 2.1.4 Toaùn töû giaûm : Laø toaùn töû 1 ngoâi, toaùn haïng laø nguyeân hay thöïc . Daïng vieát 1 : n ; Taùc duïng : n giaûm bôùt 1 tröôùc khi söû duïng giaù trò n. Daïng vieát 2 : n ; Taùc duïng : n seõ giaûm bôùt 1 sau khi söû duïng giaù trò n Minh hoïa : n = 5; N = 5; x = n ; //x = n; x = n ; // n = n-1; //n = n-1 //x = n; cout<<x; // x == 5 cout<<x; // x == 4 cout <<n; // n == 4 cout <<n; // n == 4 Ghi chuù : Caùc toaùn töû taêng, giaûm thöôøng ñöôïc söû duïng trong caùc caâu leänh for, while ñeå taêng hay giaûm giaù trò caùc bieán ñieàu khieån. Nhöng trong bieåu thöùc, khoâng neân söû duïng tuøy tieän caùc toaùn töû taêng , giaêm, vì coù theå daãn ñeán keát quaû sai. 2.1.5 Thöù töï öu tieân caùc toaùn töû soá hoïc : Öu tieân cuûa caùc toaùn töû soá hoïc ñöôïc cho trong baûng sau ñaây theo thöù töï töø treân xuoáng döôùi. Caùc toaùn töû cuøng ñoä öu tieân seõ ñöôïc thöïc hieän töø treân traùi sang phaûi. Traàn Tuaán Minh Khoa Toaùn – Tin hoïc
- Kyõ thuaät laäp trình - 23 - Öu tieân Toaùn töû 1 ++ - 2 * / % 3 + - Ghi chuù : Caùc kyù hieäu trong caùc toaùn töû ++, khoâng ñöôïc vieát rôøi. 2.2 Toaùn töû quan heä vaø logic : Caùc toaùn töû quan heä vaø logic thöôøng ñöôïc söû duïng chung vôùi nhau, ñöôïc duøng ñeå taïo ra caùc keát quaû ñuùng, sai. Trong C++, moïi soá khaùc 0 ñeàu ñöôïc coi laø giaù trò ñuùng (true), giaù trò duy nhaát sai (false) mang hình thöùc soá 0. 2.2.1 Caùc toaùn töû quan heä : Caùc toaùn töû quan heä ñöôïc duøng ñeå so saùnh 2 giaù trò vôùi nhau. Sau ñaây laø baûng caùc toaùn töû quan heä vaø yù nghóa cuûa chuùng : Toaùn töû YÙ nghóa Ví duï > Lôùn hôn a > b 3>7 coù giaù trò 0 >= Lôùn hôn hay baèng a >= b 3 >= 7 coù gía trò 0 =,<=, ==, != khoâng ñöôïc vieát rôøi. 2.2.2 Caùc toaùn töû logic : Caùc toaùn töû logic ñöôïc duøng ñeå noái keát hai giaù trò, hoaëc trong tröôøng hôïp phuû ñònh seõ taïo moät giaù trò ñaûo ngöôïc. Caùc giaù trò coù theå nguyeân hay thöïc . Trong C++ coù 3 toaùn töû logic : - Pheùp phuû ñònh 1 ngoâi : ! - Pheùp vaø (AND) : && - Pheùp hoaëc (OR) : || // kyù hieäu ñöôøng oáng treân baøn phím YÙ nghóa cuûa caùc toaùn töû ñöôïc cho trong baûng sau : A B !a a&&b a||b Khaùc khoâng (1) Khaùc khoâng (1) 0 1 1 Khaùc khoâng (1) Baèng khoâng 0 0 1 Baèng khoâng Khaùc khoâng (1) 1 0 1 Baèng khoâng Baèng khoâng 1 0 0 Traàn Tuaán Minh Khoa Toaùn – Tin hoïc
- Kyõ thuaät laäp trình - 24 - 2.2.3 Thöù töï öu tieân cuûa caùc toaùn töû quan heä vaø logic : Öu tieân Toaùn töû 1 ! 2 > >= > Dòch phaûi (Shift right) a>>4 ~ Laáy phaàn buø theo bit (Not ) ~a Ghi chuù : Caùch vieát caùc toaùn töû : &&, &, ||, | neáu laãn loän seõ bò loãi cuù phaùp, hoaëc trong moät soá tröôøng hôïp chöông trình chaïy ñöôïc nhöng cho keát quaû sai. 2.3.1 Baûng giaù trò cuûa caùc toaùn töû ~, &, |, ^ : a B ~a a&b a|b a^b 1 1 0 1 1 0 1 0 0 0 1 1 0 1 1 0 1 1 0 0 1 0 0 0 2.3.2 Caùc toaùn töû dòch chuyeån : Caùc toaùn töû dòch chuyeån traùi > ñeàu coù theå dòch chuyeån taát caû caùc bit naèm trong 1 byte hay 1 töø - theo moät soá löôïng aán ñònh ôû beân phaûi . Chaúng haïn : Traàn Tuaán Minh Khoa Toaùn – Tin hoïc
- Kyõ thuaät laäp trình - 25 - n >2 Dòch chuyeån caùc bit cuûa bieán n sang phaûi 2 bit 1. Toaùn töû dòch chuyeån traùi : Khi thöïc hieän toaùn töû dòch chuyeån traùi caùc bit ôû beân phaûi cuûa bieán seõ ñöôïc ñieàn vaøo caùc giaù trò 0. Ví duï : int n = 201; n > 2; Ñoåi n sang heä 2 : 1001 1010 0010 1110 Heä 2 1 0 0 1 1 0 1 0 0 0 1 0 1 1 1 0 Dòch phaûi 2 bit Heä 2 0 0 1 0 0 1 1 0 1 0 0 0 1 0 1 1 Keát quaû : 0010 0110 1000 1011 Ñoåi n sang heä 10 : 9867. b. Neáu laø kieåu signed (int, long, char) : Pheùp dòch chuyeån phaûi seõ ñieàn bit daáu (soá 1) vaøo caùc bit beân traùi. Ví duï : int n = 26066; //heä 10; Ñoåi n sang heä 2 : 0110 0101 1101 0010 n >> 2; Dòch chuyeån phaûi n >> 2 seõ laø : Bít daáu Heä 2 1 1 1 0 0 1 0 1 1 1 0 1 0 0 1 0 Dòch phaûi 2 bit Heä 2 1 1 1 1 1 0 0 1 0 1 1 1 0 1 0 0 Traàn Tuaán Minh Khoa Toaùn – Tin hoïc
- Kyõ thuaät laäp trình - 26 - Keát quaû : 0001 1001 0111 0100 Ñoåi n sang heä 10 : 6516. Ghi chuù : 1.Trong C++ phaân bieät : - Caùc pheùp dòch chuyeån soá hoïc : Thöïc hieän treân caùc giaù trò int , baûo toaùn bit daáu (bit cöïc traùi) khi dòch phaûi. Noùi caùch khaùc, bit naøy ñöôïc dòch chuyeån sao cho daáu cuûa döõ lieäu vaãn ñöôïc baûo toaøn duø cho dòch phaûi moät hoaëc nhieàu laàn. Thöïc chaát pheùp dòch traùi laø hình thöùc nhaân 2 , coøn pheùp dòch phaûi phaûi laø hình thöùc chia 2. Töùc laø : x = a > n ≡ x = a/(2n ) - Caùc pheùp dòch chuyeån logic : Thöïc hieän treân caùc giaù trò unsigned , bit daáu cuõng bò dòch chuyeån nhö caùc bit khaùc. Ví duï 1: int x,y; unsigned u,v; a) Dòch soá hoïc: Dòch traùi x = 5 ; 0000 0000 0000 0101 y = x > 2; 1110 0000 0000 0000 y=- 8192 b) Dòch logic : Dòch phaûi u=32768; 1000 0000 0000 0000 v=u>>2 0010 0000 0000 0000 8192 2. Pheùp dòch chuyeån khoâng xoay voøng, nghóa laø caùc bit ñöôïc dòch veà moät phía khoâng chuyeån veà ñaàu kia. Caùc bit ñöôïc dòch chuyeån ra seõ maát ñi. Caâu leänh Bieåu dieãn nhò phaân Giaù trò unsigned char x; x = 7; 0000 0111 x = x > 1; 0110 0000 96 x = x >> 2; 0001 1000 24 Ghi chuù : Thoâng tin ñaõ maát sau khi thöïc hieän leänh x << 2 vì moät bit ñaõ ñöôïc taét ñeán heát. Caùc pheùp dòch phaûi sau ñoù cuõng khoâng laáy laïi ñöôïc baát kyø bit naøo ñaõ maát. Traàn Tuaán Minh Khoa Toaùn – Tin hoïc
- Kyõ thuaät laäp trình - 27 - 2.4 Caùc toaùn töû khaùc. 2.4.1 Toaùn töû sizeof Toaùn töû sizeof cho ta kích thöôùc ( tính theo byte) cuûa 1 kieåu döõ lieäu cuõng nhö moät ñoái töôïng döõ lieäu. Caùch vieát toaùn töû nhö sau : sizeof (kieåu döõ lieäu) sizeof (ñoái töôïng döõ lieäu) Kieåu döõ lieäu coù theå laø caùc kieåu chuaån nhö int, float hoaëc kieåu döõ lieäu ñöôïc ñònh nghóa baèng töø khoùa typedef. Ñoái töôïng döõ lieäu coù theå laø bieán, maûng, caáu truùc (teân cuûa vuøng nhôù döõ lieäu). Chaúng haïn : int m; sizeof(m) = 2; sizeof(int) = 2; sizeof(float) = 4; 2.4.2 Toaùn töû ( ) : Duøng ñeå xaùc ñònh trình töï öu tieân caùc thaønh phaàn trong bieåu thöùc. Neáu coù nhieàu toaùn töû () loàng nhau thì thöïc hieän öu tieân töø trong ra ngoaøi. Neáu coù nhieàu toaùn töû () rôøi nhau thì thöïc hieän töø traùi sang phaûi. 2.4.3 Toaùn töû daáu phaûy ‘ , ‘ (Comma operator) : Ñöôïc duøng ñeå taïo söï thi haønh tuaàn töï cho caùc thao taùc, thöôøng duøng trong caâu leänh for hay bieåu thöùc veá phaûi cuûa caâu leänh gaùn. Trong veá phaûi caâu leänh gaùn, thì giaù trò toaøn theå bieåu thöùc laø giaù trò cuûa bieåu thöùc cuoái cuøng trong danh saùch caùc bieåu thöùc ñöôïc taùch bieät bôûi daáu phaûy. Ví duï : int x = 10; x = (x = x-5, 25/x); // Khi ñoù x seõ coù giaù trò laø 5 Giaù trò ñaàu cuûa x laø 10. bieåu thöùc ñaàu beân veá phaûi gaùn x-5 cho x, vaäy giaù trò bieåu thöùc naøy laø 5. thöïc hieän bieåu thöùc cuoái, giaù trò naøy ñöôïc 25 chia cho, keát quaû cuoái cuøng ñem gaùn cho veá traùi laø x. Neân x = 5. 2.5 Bieåu Thöùc : Bieåu thöùc laø moät söï keát hôïp giöõa caùc toaùn töû vaø caùc toaùn haïng ñeå dieãn ñaït moät coâng thöùc toaùn hoïc naøo ñoù. Toaùn haïng coù theå xem laø caùc ñaïi löôïng coù moät giaù trò naøo ñoù, vaø theo nghóa ñoù, toaùn haïng coù theå laø bieán, haèng, haøm . . . Moãi bieåu thöùc coù moät giaù trò, vaø noùi chung caùi gì coù giaù trò ñeàu ñöôïc xem laø bieåu thöùc. Nhö vaäy, caùc bieán, haèng, haøm . . . ñeàu coù theå xem laø bieåu thöùc. Khi vieát bieåu thöùc coù theå duøng caùc daáu ngoaëc troøn (, ) ñeå theå hieän ñuùng trình töï tính toaùn trong bieåu thöùc. Bieåu thöùc ñöôïc phaân loaïi theo kieåu giaù trò : nguyeân, thöïc. Trong caùc meänh ñeà logic, bieåu thöùc ñöôïc phaân thaønh ñuùng (giaù trò khaùc khoâng), sai (giaù trò baèng khoâng). Traàn Tuaán Minh Khoa Toaùn – Tin hoïc
- Kyõ thuaät laäp trình - 28 - Bieåu thöùc thöôøng ñöôïc duøng trong : - Veá phaûi cuûa leänh gaùn. - Laøm tham soá thöïc söï cuûa haøm. - Laøm chæ soá. . . . Ta giôùi thieäu caùc bieåu thöùc : bieåu thöùc gaùn, bieåu thöùc ñieàu kieän. 2.5.1 Bieåu thöùc gaùn : a) Moät daïng vieát khaùc trong caâu caâu leänh gaùn : op= Trong ñoù "op" laø toaùn töû hai ngoâi (+, -, *, /, %, &, |, >, ^ ) Neáu e1,e2 laø bieåu thöùc thì e1 op= e2 töông ñöông vôùi e1 = e1 op e2 nhöng caùch vieát tröôùc hieäu quaû hôn. n = n + 1; Coù theå vieát n+ = 1; x = x*(y+3); Coù theå vieát x* = y+3; a = a%3 Coù theå vieát a %= 3; a = a/3 Coù theå vieát a /= 3; b) Bieåu thöùc gaùn laø bieåu thöùc coù daïng : v = e Trong ñoù v laø bieán, e laø moät bieåu thöùc. Giaù trò cuûa bieåu thöùc gaùn laø giaù trò cuûa e, kieåu cuûa noù laø kieåu cuûa v. ( Neáu vieát v = e; ta coù caâu leänh gaùn ) Bieåu thöùc gaùn coù theå söû duïng trong caùc toaùn töû vaø caùc caâu leänh nhö caùc bieåu thöùc khaùc. Chaúng haïn : Neáu vieát z = (y = 2) * (x = 6); coù nghóa laø : y laáy giaù trò 2, x coù giaù trò 6 vaø z coù giaù trò 12. Tröôøng hôïp rieâng ta ñaõ bieát yù nghóa cuûa noù laø daïng : a = b = c = 3; 2.5.2 Toaùn töû tam phaân ?: (theå hieän bieåu thöùc ñieàu kieän ) Bieåu thöùc ñieàu kieän theå hieän bôûi toaùn töû tam phaân coù daïng : e1 ? e2 : e3 Trong ñoù, e1, e2, e3 laø caùc bieåu thöùc naøo ñoù. ⎧Giaù trò cuûa e2 neáu e1 khaùc 0 (Ñuùng), Giaù trò cuûa bieåu thöùc ñieàu kieän baèng : ⎨ ⎩Giaù trò cuûa e3 neáu e1 baèng 0 (Sai). Kieåu cuûa bieåu thöùc ñieàu kieän phaûi laø kieåu cao nhaát trong caùc kieåu cuûa e2 vaø e3. Chaúng haïn neáu kieåu cuûa e2 laø int, kieåu cuûa e3 laø float thì kieåu cuûa bieåu thöùc ñieàu kieän laø float. Traàn Tuaán Minh Khoa Toaùn – Tin hoïc
- Kyõ thuaät laäp trình - 29 - Bieåu thöùc ñieàu kieän coù theå söû duïng nhö moät bieåu thöùc baát kyø khaùc. Ví duï 2 : Vieát chöông trình nhaäp vaøo 2 soá thöïc roài xuaát ra maøn hình giaù trò nhoû nhaát, lôùn nhaát cuûa 2 soá naøy. //Chöông trình tính giaù trò lôùn nhaát cuûa 2 phaàn töû #include int main() { double a, b, Min, Max; cout >a; cout >b; Max = ( a>=b ) ? a : b; Min = ( a<=b ) ? a : b; cout<<”\nGiaù trò lôùn nhaát cuûa 2 soá “<<a<<” , “<<b<<” laø : “<<Max; cout<<”\nGiaù trò nhoû nhaát cuûa 2 soá “<<a<<” , “<<b<<” laø : “<<Min; return 0; } KNLT : Teân caùc bieán caàn phaûi ñaët cho tröïc quan. 2.5.3. Chuyeån ñoåi kieåu döõ lieäu : a) Trong bieåu thöùc : Khi caùc toaùn haïng coù kieåu khaùc nhau xuaát hieän trong bieåu thöùc, chuùng ñöôïc chuyeån moät caùch töï ñoäng veà moät kieåu chung theo moät soá qui taéc. •Trong bieåu thöùc coù chöùa caùc bieán kieåu char vaø int thì taát caû caùc bieán kieåu char ñöôïc chuyeån thaønh int . • Caùc toaùn töû soá hoïc coù hai toaùn haïng ( +,-,*,/,% ) vaø neáu chuùng khaùc nhau thì kieåu "thaáp hôn" seõ naâng thaønh kieåu "cao hôn" . Cuï theå : char vaø short chuyeån thaønh int float chuyeån thaønh double int chuyeån thaønh foat, double. b) Trong caâu leänh gaùn : Caùc pheùp chuyeån kieåu giaù trò cuõng ñöôïc thöïc hieän trong pheùp gaùn, giaù trò cuûa veá phaûi ñöôïc chuyeån ñoåi thaønh kieåu cuûa veá traùi (Kieåu keát quaû laø kieåu cuûa veá traùi) : - int coù theå chuyeån thaønh float. - float chuyeån thaønh int baèng caùch caét boû phaàn phaân . - double chuyeån thaønh float baèng caùch laøm troøn. - long int chuyeån thaønh short int baèng caùch boû caùc bit cao vöôït quaù Traàn Tuaán Minh Khoa Toaùn – Tin hoïc
- Kyõ thuaät laäp trình - 30 - Ví duï 3 : Caâu leänh Taùc duïng char c, h; int x, y; float f; . . . C = x; Caùc bit cao beân traùi cuûa bieán nguyeân x bò chaët boû ñeå laïi c vôùi 8 bit thaáp. Neáu ñaõ coù 0 <= x <= 256 thì x vaø ch coù cuøng giaù trò, ngöôïc laïi, giaù trò cuûa ch chæ phaûn aùnh caùc bit thaáp cuûa x. X = f; x chæ nhaän phaàn nguyeân cuûa f. F = h; f chuyeån giaù trò nguyeân 8 bit ñöôïc löu trong h thaønh giaù trò nhö vaäy trong daáu chaám ñoäng. F = y f chuyeån giaù trò nguyeân 16 bit ñöôïc löu trong y thaønh giaù trò nhö vaäy trong daáu chaám ñoäng. c) Trong vieäc truyeàn tham soá cho haøm : Vaán ñeà chuyeån ñoåi kieåu cuõng xaûy ra khi truyeàn tham soá cho haøm. d) Sö duïng pheùp eùp kieåu : Cuoái cuøng, vieäc chuyeån kieåu töôøng minh ( hay goïi laø cast ) ñöôïc thöïc hieän theo cuù phaùp : (Kdl) bieåu_thöùc ; Chaúng haïn : int p = 3, q = 2; float x, y; x = p/q; y = (float)p/q; Khi ñoù x baèng 1 vaø y = 1.5. Cast ( saéc thaùi ) taïo cho giaù trò cuûa bieán theo kieåu ñuùng nhöng noäi dung thöïc söï cuûa bieán laø khoâng thay ñoåi. KNLT : Khi tính toaùn, ta caàn löu yù khi gaëp pheùp chia 2 soá nguyeân maø ta caàn laáy keát quaû phaàn thöông laø moät soá thöïc. Traàn Tuaán Minh Khoa Toaùn – Tin hoïc
- Kyõ thuaät laäp trình - 31 - 2.6 Ñoä öu tieân cuûa caùc toaùn töû . Ñöôïc trình baøy trong baûng sau : Öu Toaùn töû Trình töï keát Ghi chuù tieân hôïp 1 () [ ] -> Traùi qua phaûi 2 ! ~ & * - ++ (type) sizeof Phaûi qua * : con troû ; & laáy traùi ñòa chæ. 3 * / % Traùi qua * : Pheùp nhaân phaûi 4 + - Traùi qua - : PT 2ngoâi phaûi 5 > Traùi qua phaûi 6 >= Traùi qua phaûi 7 == != Traùi qua phaûi 8 & Traùi qua & : AND theo bit phaûi 9 ^ Traùi qua phaûi 10 | Traùi qua phaûi 11 && Traùi qua phaûi 12 || Traùi qua phaûi 13 ? : Phaûi qua traùi 14 Op= Phaûi qua traùi 15 , Traùi qua phaûi Ghi chuù : - Caùc toaùn töû cuøng möùc öu tieân ( naèm treâm 1 doøng) thì trình töï tính toaùn ñöôïc chæ ra trong coät “trình töï keát hôïp”. - Moät soá caùc toaùn töû chöa ñöôïc giôùi thieäu, chaúng haïn : - Trong öu tieân 1 : [ ] : duøng ñeû bieåu dieãn phaàn töû maûng. -> : Bieåu dieãn thaønh phaàn cuûa caáu truùc thoâng qua con troû. Traàn Tuaán Minh Khoa Toaùn – Tin hoïc
- Kyõ thuaät laäp trình - 32 - - Trong öu tieân 2 : * : khai baùo con troû . Traàn Tuaán Minh Khoa Toaùn – Tin hoïc
- Kyõ thuaät laäp trình - 33 - BAØI TAÄP Baøi 1: Vieát chöông trình tính dieän tích cuûa tam giaùc bieát ba caïnh laø a,b,c, baèng caùch duøng coâng thöùc tính dieän tích: S=√p(p-a)(p-b)(p-c) , vôùi p=(a+b+c)/2 Baøi 2: Vieát chöông trình tính chu vi hình chöõ nhaät khi bieát dieän tích S vaø bieát chieàu daøi = 2 chieàu roäng. Baøi 3: Giaû söû ta ñang xeùt caùc soá nguyeân 16 bit. Khai baùo : unsigned a=0xc0b3, b=0x2435; // a = 0xc0b3 = 1100 0000 1011 0011 // b = 0x2435 = 0010 0100 0011 0101 Cho bieát keát quaû töø caùc bieåu thöùc sau: 1. ~a 2. a|b 3. a^b 4. a>>2 5. a =’0’); Baøi 5: Haõy cho bieát giaù trò cuûa : (int) 3.5, (int) 3.1, (int) 3.9, (int) –3.1, (int) –3.5, (int) –3.9 Baøi 6: Cho b baèng 5 vaø c baèng 8. Haõy cho bieát giaù trò cuûa a,b,c sau khi thi haønh rieâng bieät töøng doøng leänh sau: 1. a=b++ + c++; 2. a=b++ + ++c; 3. a=++b + c++; 4. a=++b + ++c; 5. b=a++ + ++a; Traàn Tuaán Minh Khoa Toaùn – Tin hoïc
- Kyõ thuaät laäp trình - 34 - 6. a += a+= a Kieåm tra laïi baèng chöông trình. Baøi 7: Caùc caâu leänh sau laøm gì? a^ =b; b^=a; a^=b; a ^= b^= a^= b; Baøi 8: 1. Haõy cho bieát giaù trò cuûa b vaø a sau ñoaïn chöông trình: int a,b=2; b=(a=3,(5*b)+(a*=b)); 2. Haõy cho bieát giaù trò cuûa n vaø x sau ñoaïn chöông trình: int n,x=2; x=x-1; n=(n=5,n*=10+x++); 3. Haõy cho bieát giaù trò cuûa a, b sau tuøng caâu leänh : int a=1,b= a ? 1:2; b+=1; a=(b==2)?1:2; a=(b=2)?1:3; a=(b=2)?1:2; Baøi 9 Cho khai baùo bieán sau: int pint; float a; char c; double pd; Haõy choïn phaùt bieåu ñuùng : a. (double) pd=a; b. c=+pint+; c. pint=(int) pd; d. a=&pint; Baøi 10 Cho khai baùo bieán sau: int a,p; double b,c; Traàn Tuaán Minh Khoa Toaùn – Tin hoïc
- Kyõ thuaät laäp trình - 35 - Haõy choïn phaùt bieåu ñuùng : a. p=(int) b+(c*=2); b. p=a+(1,b-=1); c. p=c; d. a=”abc”; Baøi 11 Cho khai baùo bieán sau: char a,p; int b,pint; Haõy choïn phaùt bieåu sai : a. pint >b; c. a+=1+b- (double) 1; d. b=(char) a; Baøi 12 Cho chöông trình sau: #include unsigned t=1266; int x,y; char c1,c2; long l; int main() { x=t%10*y; c1=t%100-x; c2=c1+2; l=c1-c2*y; cout<<”\nc1= “<<c1<<’\t’<<c2; return 0; } Keát quaû chöông trình ? Baøi 13 Vieát chöông trình tính 2n . Traàn Tuaán Minh Khoa Toaùn – Tin hoïc
- Kyõ thuaät laäp trình - 36 - CHÖÔNG 3. HAØM VAØ CHÖÔNG TRÌNH. 3.1 Caáu truùc chung cuûa 1 chöông trình C++ . 3.2 Haøm. 3.3 Moät soá thö vieän cuûa C++. 3.1 Caáu truùc chung cuûa chöông trình C++ : Moät chöông trình C++ coù theå goàm nhieàu taäp tin chöông trình nguoàn, moãi taäp tin chöông trình laø moät vaên baûn chöùa moät daõy caùc chæ thò vaø caùc chæ thò ñieàu khieån bieân dòch. Caùc chæ thò ñöôïc phaân thaønh 2 loaïi : - Chæ thò kieåu : Bao goàm ñònh nghóa caùc kieåu döõ lieäu môùi, khai baùo bieán, haèng vaø haøm. - Chæ thò thöïc hieän (caâu leänh) : Ñöôïc ñònh nghóa baèng nhöõng pheùp toaùn hay vieäc xöû lyù thöïc hieän treân caùc bieán cuûa chöông trình. Taát caû caùc chæ thò ñeàu phaûi keát thuùc baèng daáu ; ( chaám phaûy). Caû 2 loaïi chæ thò naøy coù theå hôïp vôùi nhau baèng moät cuù phaùp qui ñònh ñeå hình thaønh moät chæ thò duy nhaát ñöôïc goïi laø khoái leänh . Moät khoái leänh ñöôïc ñaët trong caëp daáu ngoaëc nhoïn : { caùc chæ thò } 3.1.1 Sô ñoà toång quaùt cuûa chöông trình C++: Daïng thöùc toång quaùt : // Caùc chæ thò ñieàu khieån bieân dòch #include #define // Caùc ñònh nghóa toaøn cuïc // Khai baùo nguyeân maãu caùc haøm // Haøm main int main() // void main() { // daõy tuaàn töï caùc leänh } //Phaàn ñònh nghóa haøm. KDL Ham(Danh_Sach_Cac_Doi) Traàn Tuaán Minh Khoa Toaùn – Tin hoïc
- Kyõ thuaät laäp trình - 37 - { // daõy tuaàn töï caùc leänh } . . . . . 1. Moät chöông trình C++ coù theå chæ coù moät haøm hoaëc bao goàm nhieàu haøm vaø caùc haøm naøy khoâng ñöôïc pheùp loàng nhau. Trong ñoù haøm main() luoân luoân xuaát hieän vaø chöông trình baét ñaàu thöïc hieän taïi ñieåm ñaàu haøm main(). Nghóa laø haøm main() seõ khôûi ñoäng caùc haøm khaùc ñeå thöïc hieän coâng vieäc. Nhöõng haøm khaùc coù theå naèm trong cuøng moät taäp tin vôùi main() hoaëc taäp tin thö vieän. 2. Haøm main() : Coù 2 daïng khai baùo thöôøng duøng : int main() // Khoâng ñoái int main(int argc, char *argv) // Coù ñoái Caùc daïng khaùc nhö : int main(void), void main(void) C++ thöôøng buoäc haøm main phaûi traû veà moät giaù trò , neân toát nhaát laø ta taäp thoùi quen traû veà moät giaù trò , vaø vieäc naøy ñöôïc thöïc hieän nhôø caâu leänh return. Ngay caû khi khoâng caàn thieát phaûi traû veà moät giaù trò naøo, ta seõ thöïc hieän caâu leänh return 0 ( traû veà giaù trò 0 ) ñeå theå hieän chöông trình chaïy bình thöôøng. 3. Caùc haøm lieân laïc vôùi nhau thoâng qua danh saùch caùc ñoái ( tham soá )cuûa haøm. Haøm ñöôïc khôûi ñoäng baèng caùch goïi teân noù. 4. Caùc chæ thò tieàn xöû lyù : #include , #define, . . . 5. Caùc ñònh nghóa toaøn cuïc ; Khai baùo theo trình töï : - Ñònh nghóa caùc haèng. - Khai baùo caùc ñoái töôïng döõ lieäu ngoaøi (bieán, maûng , caáu truùc ,. . .) 6. Khai baùo nguyeân maãu caùc haøm (prototype). 7. Phaàn ñònh nghóa caùc haøm. Haøm main() coù theå ñaët sau, ñaàu, hay xen giöõa caùc ñònh nghóa haøm . 3.1.2 Moät soá quy taéc caàn nhôù khi vieát chöông trình : Quy taéc 1 : Moãi doøng coù theå vieát 1 hay nhieàu chæ thò. Quy taéc 2 : Moãi chæ thò phaûi keát thuùc baèng daáu chaám phaûy (;). Quy taéc 3 : Quy taéc vieát lôøi giaûi thích. Caùc lôøi giaûi thích vieát : - Treân nhieàu doøng, moät doøng hoaëc treân 1 phaàn cuûa doøng phaûi ñaët vaøo giöõa caùc daáu /* vaø */ . - Treân moät doøng hoaëc treân phaàn coøn laïi cuûa moät doøng phaûi ñaët sau // Caùc lôøi giaûi thích ñöôïc trình bieân dòch boû qua. Traàn Tuaán Minh Khoa Toaùn – Tin hoïc
- Kyõ thuaät laäp trình - 38 - Quy taéc 4 : Quy taéc söû duïng caùc haøm chuaån : Tröôùc khi söû duïng moät haøm chuaån naøo caàn phaûi bieát noù naèm trong taäp tin thö vieän naøo cuûa C++ ñeå khai baùo , vaø khai baùo baèng chæ thò bieân dòch #include : #include // khoâng coù daáu chaám phaûy nhö caâu leänh Chaúng haïn, khi söû duïng haøm cout, cin . Vì caùc haøm naøy naèm trong thö vieän vaøo ra chuaån iostream.h, neân ta caàn khai baùo : #include Ví duï 1: Tính chu vi vaø dieän tích hình troøn theo baùn kính nhaäp töø baøn phím . //Tính chu vi vaø dieän tích hình troøng #include // su dung thu vien vao ra chuan #include // Coù chöùa haøm xoùa maøn hình : clrscr() #include // thö vieän caùc haøm toaùn hoïc : ñònh nghóa haèng M_PI int main() { double r,cv,dt; // 3 bien thuc clrscr(); cout >r; //Tinh chu vi va dien tich hinh tron dung hang M_PI da dinh nghia trong math.h cv = 2*M_PI*r; dt = M_PI*r*r; // In ket qua cout<<"\nchu vi = <<cv<<”\nDien tich = <<dt ; getch(); // Tam dung may de xem ket qua return 0; } 3.2 Haøm. C/ C++ ñöa ra khaùi nieäm haøm vaø trôû thaønh coâng cuï maïnh meõ ñeå hoã trôï cho phöông phaùp laäp trình coù caáu truùc. Haøm coù theå xem laø moät ñôn vò ñoäc laäp cuûa chöông trình. Caùc haøm coù vai troø ngang nhau, vì vaäy khoâng cho pheùp xaây döïng moät haøm beân trong caùc haøm khaùc. Caùc haøm thöôøng che daáu nhöõng chi tieát thöïc hieän ñoái vôùi caùc phaàn khaùc trong chöông trình, do ñoù laøm chöông trình saùng suûa , deã söûa ñoåi. Moät haøm coù theå laø : - Naèm ngay trong modul vaên baûn (coù caùc khai baùo,caùc leänh coù trong haøm) hoaëc ñöôïc ñöa moät caùch töï ñoäng vaøo vaên baûn cuûa chöông trình (baèng ñöôøng daãn #include) hay ñöôïc dòch rieâng reõ (seõ ñöôïc noái keát vaøo chöông trình trong giai ñoaïn lieân keát) - Ñöôïc goïi töø chöông trình chính, hoaëc töø moät haøm khaùc, hoaëc töø chính noù (ñeä qui). Traàn Tuaán Minh Khoa Toaùn – Tin hoïc
- Kyõ thuaät laäp trình - 39 - - Coù hay khoâng coù ñoái (tham soá hình thöùc). - Coù hay khoâng coù giaù trò traû veà. . . . . Moät haøm : - Chæ coù 1 ñaàu vaøo ( { ). - Coù theå coù nhieàu ñieåm ra ( return hay } ) . 3.2.1 Caáu truùc cuûa 1 haøm : Moïi haøm ñeàu coù daïng : [Kdl] Ten_Ham ([danh_saùch_kieåu_vaø_Ñoái]) // Doøng tieâu ñeà { // Caùc chæ thò veà kieåu // Caùc caâu leänh; [return [bieåu_thöùc];] } Trong ñoù : a) Doøng tieâu ñeà : Chöùa caùc thoâng tin : Kdl : Kieåu döõ lieäu cuûa haøm, Ten_Ham : Teân cuûa haøm, kieåu vaø teân ñoái. Danh_saùch_kieåu_vaø_Ñoái : Laø caùc ñoái vaø kieåu töông öùng cuûa noù. Cuoái doøng tieâu ñeà khoâng coù daáu chaám phaûy (;) nhö keát thuùc caâu leänh. 1. Kdl : Coù theå coù hoaëc khoâng. - Tröông hôïp khoâng : Khoâng coù kieåu döõ lieäu cuûa haøm, Moät caùch ngaàm ñònh C++ coi ñoù laø kieåu int. - Tröôøng hôïp coù : - Kdl laø kieåu döõ lieäu cuûa haøm, coù theå laø baát kyø kieåu döõ lieäu naøo ngoaïi tröø maûng. C++ seõ duøng töø khoùa void ñeå chæ kieåu döõ lieäu cuûa haøm trong tröôøng hôïp haøm khoâng traû veà giaù trò naøo caû. Caàn löu yù laø : * Neáu haøm traû veà kieåu int, ta coù theå khoâng khai baùo (ngaàm ñònh laø kieåu int). * Neáu traû veà khaùc kieåu int, ta phaûi khai baùo töôøng minh Kieåu döõ lieäu cuûa haøm. 2. Ten_Ham : Laø teân cuûa haøm do ngöôøi laäp trình töï ñaët theo quy taéc ñaët teân. 3. Danh saùch kieåu vaø ñoái : Coù theå coù hoaëc khoâng. - Tröông hôïp khoâng : Neáu khoâng coù ñoái thì vaãn phaûi giöõ caùc daáu ngoaëc troøn ().Trong tröôøng hôïp naøy coù theå thay baèng töø khoùa void. - Tröôøng hôïp coù : Ñoù laø caùc ñoái cuûa haøm. Tröôùc moãi ñoái coù kieåu döõ lieâu töông öùng cuûa noù, neáu coù nhieàu ñoái vaø kieåu töông öùng cuûa noù, thì chuùng phaûi caùch nhau daáu phaûy (,). Chaúng haïn : float max(float a, foat b, foat c) Traàn Tuaán Minh Khoa Toaùn – Tin hoïc
- Kyõ thuaät laäp trình - 40 - b. Thaân haøm : Thaân haøm baét ñaáu baèng daáu ngoaëc nhoïn môû{, tieáp theo laø caùc chæ thò veà kieåu ( neáu coù) , caùc caâu leänh trong ñoù coù theå coù hay khoâng caâu leänh return vaø keát thuùc baèng daáu ngoaëc nhoïn ñoùng. c. Caâu leänh return : Trong thaân haøm coù theå coù hoaëc khoâng coù caâu leänh naøy. Trong tröôøng hôïp coù , coù theå coù moät caâu leänh return, hoaëc nhieàu caâu leänh return ôû nhöõng nôi khaùc nhau, Neáu khoâng coù caâu leänh return thì chöông trình seõ ra khoûi haøm khi gaëp daáu ngoaëc nhoïn ñoùng cuoái cuøng } cuûa thaân haøm ñeå trôû veà nôi goïi noù. Neáu coù, Caâu leänh "return" laø cô cheá chuyeån giaù trò töø haøm ñöôïc goïi veà nôi goïi . Khi gaëp caâu leänh return maùy seõ khoâng thöïc hieän caùc caâu leänh sau noù trong haøm chöùa caâu leänh naøy. Daïng toång quaùt cuûa caâu leänh naøy laø : return [Bt]; YÙ nghóa cuûa caùc daïng coù theå minh hoïa nhö sau : - Daïng 1 : return; Duøng ñeå thoaùt ra khoûi 1 haøm vaø trôû veà haøm ñaõ goïi noù, maø khoâng traû veà moät giaù trò naøo. Tröôøng hôïp naøy khai baùo kieåu döõ lieäu cuûa haøm laø void. Caâu leänh return coù theå duøng ñeå ra khoûi thaân switch, caùc voøng laëp. - Daïng 2 : return Bt; hoaëc return (Bt); Giaù trò cuûa bieåu thöùc Bt seõ ñöôïc chuyeån kieåu cho phuø hôïp vôùi kieåu cuûa haøm tröôùc khi gaùn cho haøm, vaø ra khoûi haøm chuyeån veà nôi goïi noù. 3.2.2 Caùc ví duï veà taïo haøm: Ví duï 2 : Haøm Menu void Menu() { cout<<" \n Baûng Menu "; cout<<" \n1. chöùc naêng 1 "; cout<<" \n2. chöùc naêng 2 "; cout<<" \n3. Thoaùt "; cout<<"\n *"; } KNLT : Ñaët teân haøm coá gaéng theå hieän ñöôïc chöùc naêng cuûa haøm. Ví duï 3: Vieát haøm choïn menu. input output Chon int Chon_Menu() { Traàn Tuaán Minh Khoa Toaùn – Tin hoïc
- Kyõ thuaät laäp trình - 41 - int Chon; cout >Chon; return Chon; } KNLT : Haøm traû veà moät trò, neân löu tröû trò traû veà trong moät bieán. Coù theå toå chöùc döôùi daïng : Kdl Ten_Ham(DS_Cac_Kieu_Va_Doi) { Kdl Kq; . . . return Kq; } Ví duï 4: // Tính max Input a,b Output max(a,b) double Max(double a, double b) { double Gtln = (a > b) ? a:b; return Gtln; } Ví duï 5: Vieát haøm ñoåi kyù soá thaønh soá Input x Output So(x) int So(char x) { int La_So; La_So = x – 48; return La_So; } Ghi chuù : Kyù töï ‘0’ ‘1’ ‘2’ ‘3’ ‘4’ ‘5’ ‘6’ ‘7’ ‘8’ ‘9’ Maõ ASCII 48 49 50 51 52 53 54 55 56 57 (heä 10) Ví duï 6 : Vieát haøm : Traàn Tuaán Minh Khoa Toaùn – Tin hoïc
- Kyõ thuaät laäp trình - 42 - ⎧1; x chaün, ∀x ∈ N : f (x) = ⎨ ⎩0; x leû. int KT_CL(int x) { int Kq; Kq = x % 2; return Kq; } Ví duï 7 : Vieát haøm tính dieän tích cuûa moät tam giaùc khi bieát 3 caïnh a, b, c cuûa tam giaùc. a + b + c (Duøng coâng thöùc S = p( p − a)( p − b)( p − c) , vôùi p = ) 2 Input a, b, c // Giaû söû thoûa giaù trò 3 caïnh cuûa tam giaùc. Output S double DT_TG(double a, double b, double c) { double S, p; p = (a+b+c)/2; S = sqrt(p*(p-a)*(p-b)*(p-c)); return S; } 3.2.3 Söû duïng haøm : Haøm ñöôïc söû duïng thoâng qua lôøi goïi haøm. • Lôøi goïi haøm ñöôïc vieát nhö sau : Ten_Ham([Danh saùch caùc tham soá thöïc]) Trong ñoù : - Soá tham soá thöïc phaûi baèng soá caùc ñoái. - Kieåu cuûa tham soá thöïc phaûi phuø hôïp vôùi kieåu cuûa ñoái töông öùng. • Caùch söû duïng nhö sau : - Neáu haøm traû veà kieåu void, Vieát lôøi goïi haøm nhö caâu leänh ( theâm daáu ; cuoái cuøng), töùc laø : Ten_Ham([Danh saùch caùc tham soá thöïc]); - Neáu haøm traû veà khaùc kieåu void, lôøi goïi haøm ñöôïc söû duïng : • Nhö moät toaùn haïng trong bieåu thöùc . • Veá phaûi caâu leänh gaùn. • In giaù trò cuûa haøm . . . . . Ví duï : Menu(); cout<<Max(2.4, 7.5); S = DT_TG(4, 5, 3); Traàn Tuaán Minh Khoa Toaùn – Tin hoïc
- Kyõ thuaät laäp trình - 43 - 3.2.4 Khai baùo nguyeân maãu cuûa haøm ( prototype). Tröôùc khi söû duïng moät haøm, ta coù theå khai baùo hoaëc khoâng khai baùo nguyeân maãu cuûa haøm trong chöông trình.Vò trí khai baùo coù theå laø ngoaøi taát caû caùc haøm, hoaëc trong haøm. . . thöôøng laø ñaàu chöông trình taïi caùc ñònh nghóa toaøn cuïc. Daïng khai baùo nguyeân maãu haøm laø : Kdl teân_haøm (Danh_saùch_Kieåu_vaø _Ñoái); // Coù daáu ; Ví duï : float max(float a, float b); Hoaëc float max(float , float ); Ñoái vôùi C++ , Caùc tröôøng hôïp sau nhaát thieát phaûi khai baùo nguyeân maãu: • Vò trí cuûa haøm ñaët sau haøm main(). • Caùc haøm - khoâng phaûi haøm main() - goïi laãn nhau. Duø raèng coù caùc tröôøng hôïp khoâng nhaát thieát phaûi khai baùo nguyeân maãu, nhöng toát hôn caû laø ta vaãn khai baùo ñeå trình bieân dòch deã phaùt hieän loãi khi goïi haøm. Ví duï 8: // Caùc haøm goïi nhau void ham2 (char ch); // Khai baùo haøm void ham1 (char ch) { if (ch < ‘z’) ham2(ch); cout<<ch; // in kyù töï ra maøn hình } void ham2 (char ch) { ++ch; } int main() // Baét ñaàu vaøo chöông trình chính { } 3.2.5 Hoaït ñoäng cuûa haøm : Khi gaëp moät lôøi goïi haøm thì haøm baét ñaàu thöïc hieän. Quaù trình dieãn ra theo trình töï : a) Caáp phaùt boä nhôù cho caùc ñoái vaø caùc bieán ñòa phöông. b) Gaùn giaù trò cuûa caùc tham soá thöïc cho caùc ñoái töông öùng. c) Thöïc hieän caùc caâu leänh trong thaân haøm. d) Khi gaëp caâu leänh return hoaëc daáu } cuoái cuøng cuûa thaân haøm thì maùy seõ xoùa caùc ñoái, caùc bieán ñòa phöông vaø ra khoûi haøm. 3.2.6 Truyeàn tham soá : Coù 2 caùch : Truyeàn baèng trò vaø truyeàn baèng bieán.Phaàn naøy giôùi thieäu truyeàn baèng trò. Traàn Tuaán Minh Khoa Toaùn – Tin hoïc
- Kyõ thuaät laäp trình - 44 - Tham soá cuûa haøm luoân ñöôïc truyeàn theo tham trò . Ñieàu naøy coù nghóa laø caùc gia trò thöïc ( tham soá thöïc ) khoâng bò thay ñoåi giaù trò khi truyeàn cho caùc ñoái . Ví duï 9: Vieát chöông trình tính giaù trò lôùn nhaát cuûa 3 soá thöïc, trong ñoù coù söû duïng haøm tính giaù trò lôùn nhaát cuûa 2 soá thöïc //Chöông trình tính giaù trò lôùn nhaát cuûa 3 soá #include #include float Max(double a, double b); int main() { double x, y, z, t, GTLN; clrscr(); cout >x>>y>>z; t = Max(x, y); GTLN = Max(t, z); cout #include double DT_TG(double a, double b, double c); int main() { double S, a, b, c; clrscr(); cout >a>>b>>c; S = DT_TG(a,b,c); cout<<”\nDieän tích tam giaùc laø : “<<S; getch(); Traàn Tuaán Minh Khoa Toaùn – Tin hoïc
- Kyõ thuaät laäp trình - 45 - return 0; } // Phaàn ñònh nghóa haøm : double DT_TG(double a, double b, double c) double DT_TG(double a, double b, double c) KNLT : Teân caùc tham soá thöïc vaø teân caùc ñoái coù theå truøng nhau hay khaùc nhau 3.2.7 Haøm inline Nhö ta ñaõ bieát, haøm coù moät öu ñieåm laø ñöôïc duøng laïi chöù khoâng phaûi vieát laïi cho caùc öùng duïng khaùc, tuy nhieân noù cuõng coù moät nhöôïc ñieåm laø laøm chaäm chöông trình moät caùc ñaùng keå , ngay caû khi thaân haøm chæ coù moät vaøi caâu leänh, vì phaûi sao caùc ñoái, caát giöõ treân thanh ghi, chöông trình phaûi nhaûy tôùi moät vò trí môùi. Haøm inline ñöa ra moät giaûi phaùp khaéc phuïc tình traïng naøy, vaø xaùc ñònh bôûi töø khoùa inline . Moät haøm ñöôïc xaùc ñònh laø inline thì seõ môû roäng “”treân doøng” taïi ñieåm goïi, vaø laøm cho phí toån cuûa haøm ñöôïc loaïi boû. Caùch vieát laø chæ theâm inline tröôùc kieåu traû veà cuûa haøm. Ví duï 10: Tính giaù trò tuyeät ñoái cuûa soá nguyeân a. inline int gttd(int a) { int Kq = (a > 0) ? a : -a; return Kq; } Ghi chuù : - Moät haøm chæ vieát laø inline khi noù nhoû, chæ chöùa vaøi chæ thò. - Khoâng theå söû duïng con troû troû tôùi haøm treân doøng. - Haøm inline phaûi ñöôïc ñònh nghóa tröôùc khi söû duïng. - Khoâng ñöôïc ñònh nghóa haøm inline trong caâu leänh switch vaø trong caùc voøng laëp 3.3 Moät soá thö vieän trong C++ . Moät trong nhöõng tính naêng thuaän tieän cuûa C++ laø cung caáp keøm theo moät soá löôïng lôùn caùc thö vieän. Thö vieän chöùa caùc haèng, caùc haøm thöïc hieän caùc thao taùc chuyeân bieät naøo ñoù. Muoán söû duïng thö vieän, ta chæ caàn tham chieáu ñeán taäp tin giao dieän goïi laø taäp tin tieâu ñeà (header taäp tin , coù ñuoâi daïng .h) cuûa thö vieän ñoù, baèng caùch söû duïng chæ thò : #include ( Trong Borland C++ chuùng thöôøng ñöôïc chöùa trong thö muïc \BC\INCLUDE ) Sau ñaây laø moät soá taäp tin thö vieän thöôøng söû duïng : Teân taäp tin Haøm, Haèng Coâng duïng tieâu ñeà Traàn Tuaán Minh Khoa Toaùn – Tin hoïc
- Kyõ thuaät laäp trình - 46 - Iostream.h Chöùa caùc ñoái töôïng cin, cout, . . . Nhaäp xuaát chuaån iomanip.h Chöùa caùc ñònh daïng keát xuaát void clrscr(void) Xoùa toaøn boä maøn hình ôû cheá ñoä vaên baûn int getch() Nhaän kyù töï töø baøn phím nhöng khoâng hieän leân maøn hình. void gotoxy(int x, int y) Traû con troû veà vò trí doøng y, coät x int kbhit(void) Kieåm tra goõ phím : Neáu coù phím ñöôïc goõ thì haøm coù giaù trò khaùc 0, ngöôïc laïi conio.h coù giaù trò 0. void window(int left, int top, int right, int bottom) Xaây döïng cöù soå : Haøm xaùc ñònh moät cuûa soå vaên baûn hình chöõ nhaät. Quy öôùc goùc treân traùi maøn hình : (1,1) int wherex(void) Xaùc ñònh toïa ñoä ngang hieän haønh int wherey(void) Xaùc ñònh toïa ñoä doïc hieän haønh int cprintf (const char *rmat ) Xuaát thoâng tin ra cöûa soå maøn hình void textattr(int newattr) Ñaët thuoäc tính maøu newattr cho kyù töï void textbackground(int newcolor) Ñaët maøu newcolor cho neàn vaên baûn void textcolor(int newcolor) Ñaët maøu newcolor cho doøng kyù töï void textmode(int newmode) Thay ñoåi mode maøn hình trong cheá ñoä vaên baûn. Caùc haèng chæ thuoäc tính maøu : Teân Maõ BLACK 0 Maøu ñen ( Maøu neàn & chöõ ) BLUE 1 Xanh da trôøi ( Maøu neàn & chöõ ) GREEN 2 Xanh laù caây ( Maøu neàn & chöõ ) CYAN 3 Xanh lô ( Maøu neàn & chöõ ) RED 4 Ñoû ( Maøu neàn & chöõ ) MAGENTA 5 Tím ( Maøu neàn & chöõ ) BROWN 6 Naâu ( Maøu neàn & chöõ ) LIGHTGRAY 7 Xaùm nhaït ( Maøu neàn & chöõ ) DACKGRAY 8 Xaùm saãm ( Maøu chöõ ) LIGHTBLUE 9 Xanh nhaït ( Maøu chöõ ) LIGHTGREEN 10 Xanh nhaït ( Maøu chöõ ) LIGHTCYAN 11 Xanh nhaït ( Maøu chöõ ) LIGHTRED 12 Ñoû nhaït ( Maøu chöõ ) LIGHTMAGENTA 13 Tím nhaït ( Maøu chöõ ) YELLOW 14 Vaøng ( Maøu chöõ ) WHITE 15 Traéng ( Maøu chöõ ) BLINK + Teân maøu Maøu nhaáp nhaùy . . . double log(double x) Lnx double pow(double x, double y) xy double sqrt(double x) x math.h double exp(double x ) ex double atof(const char *s ) Chuyeån xaâu kyù soá thaønh soá thöïc ( Coøn chöùa caùc haøm löôïng giaùc ,. . .) int isalpha(char c) Traû veà 1 neáu c laø kyù töï chöõ int isdigit(char c) Traû veà 1 neáu c laø kyù töï soá Traàn Tuaán Minh Khoa Toaùn – Tin hoïc
- Kyõ thuaät laäp trình - 47 - ctype.h int isspace(char c) Traû veà 1 neáu c laø kyù töï traéng, tab, int toupper(int c) Traû veå maõ kyù töï HOA cuûa c int tolower(int c) Traû veå maõ kyù töï thöôøng cuûa c int rand(void) Cho 1 giaù trò ngaãu nhieân töø 0 →32767 int random(int n) Cho 1 giaù trò ngaãu nhieân töø 0 →n-1 stdlib.h void randomize(void) Khôûi ñaàu boä soá ngaãu nhieân baèng giaù trò ngaãu nhieân int atoi(const char *s) Chuyeån xaâu kyù soá s thaønh soá nguyeân char *itoa(int value, char *String, int Radix) Chuoãi String chuyeån töø soá Value theo cô soá Radix char *ltoa(long value, char *String, int Radix) Chuyeån soá nguyeân daøi thaønh chuoãi void exit(int status) Thoaùt khoûi chöông trình ngay. . . . stdio.h char *gets(char *s) Nhaän moät xaâu kyù töï (keå caû kyù töï traéng) cho ñeán khi gaëp kyù töï xuoáng doøng int getch(void) Nhaän truïc tieáp töø baøn phím nhöng khoâng hieån thò ra maøn hình int getch(void) Nhaän truïc tieáp töø baøn phím nhöng vaf hieån thò ra maøn hình . . . . . . Traàn Tuaán Minh Khoa Toaùn – Tin hoïc
- Kyõ thuaät laäp trình - 48 - BAØI TAÄP Vieát chöông trình söû duïng caùc haøm sau : Baøi 1 : Vieát haøm tính dieän tích hình vuoâng khi bieát caùc caïnh cuûa noù. Baøi 2 : Vieát haøm tính dieän tích hình chöõ nhaät khi bieát caùc caïnh cuûa noù. Baøi 3 : Vieát haøm tính 2n. Baøi 4 : Vieát haøm thöïc hieän vieäc chuyeån ñoåi moät soá nguyeân (ñôn vò giaây) sang daïng giôø, phuùt, giaây vaø in daïng naøy ra maøn hình. Baøi 5 : Vieát haøm traû veà kyù soá cuûa soá x, vôùi x = 0,9 . Traàn Tuaán Minh Khoa Toaùn – Tin hoïc
- Kyõ thuaät laäp trình - 49 - CHÖÔNG 4. CAÙC CAÂU LEÄNH ÑIEÀU KHIEÅN. 4.1 Caâu leänh if. 4.2 Caâu leänh switch. 4.3 Caâu leänh for. 4.4 Caâu leänh while. 4.5 Caâu leänh do while. 4.6 Caâu leänh goto. 4.7 Caùc caâu leänh break, continue. 4.8 Caâu leänh roång. 4.9 Voøng laëp voâ haïn . 4.10 Ví duï. 4.1 Caâu leänh if 4.1.1 Cuù phaùp : Daïng 1 : if (Bt) Neáu bieåu thöùc Bt ñuùng Kl thöïc hieän Kl Daïng 2 : if (Bt) Neáu bieåu thöùc Bt ñuùng Kl1 thöïc hieän Kl1 else Ngöôïc laïi Kl2 thöïc jieän Kl2 Trong ñoù : - Bt : laø bieåu thöùc coù giaù trò Ñ ( khaùc 0), hay sai (baèng 0). - Kl : Khoái leänh. Neáu khoái leänh chæ coù moät leänh, thì ta coù theå vieát döôùi daïng leänh ñôn hay laø khoái. Neáu vieát döôùi daïng leänh ñôn, thì phaûi keát thuùc baèng daáu “ ; “ duø caâu leänh ñöùng keá tröôùc else : if (Bt) Leänh1; //Coù daáu ; else Leänh2; Traàn Tuaán Minh Khoa Toaùn – Tin hoïc
- Kyõ thuaät laäp trình - 50 - Ví duï1 : Vieát haøm tính giaù trò lôùn nhaát 2 soá thöïc . input a, b output Max(a,b) double Max (double a, double b) //Haøm tính max cuûa a vaø b { double GTLN = a; if (b > GTLN) GTLN = b; return GTLN; } Haøm main cuûa chöông trình söû duïng haøm treân ñeå tính Max cuûa 2 soá thöïc coù theå vieát nhö sau : int main() { double a,b, GTLN; cout >a>>b; GTLN = Max(a,b); cout<<endl<<”Giaù trò lôùn nhaát cuûa “<<a<<” vaø “<<b<<” laø : “<<GTLN; return 0; } Ví duï 2 : Vieát haøm giaûi phöông trình baäc 2 treân R. input a,b,c ( a≠ 0) output -Nghieäm phaân bieät x1, x2, -Nghieäm keùp x. -Thoâng baùo : “PT voâ nghieäm treân R.” void ptb2 (double a, double b, double c) { double Delta, x1, x2, x; Delta = b*b -4*a*c; cout"\n Bieän luaän theo delta "; if (Delta == 0) { x = -b/2*a; cout<<"\nPhöông trình coù nghieäm keùp : x = ”<<x; } else if (Delta < 0) cout<<"\nPhöông trình khoâng coù nghieäm thöïc "; else { Traàn Tuaán Minh Khoa Toaùn – Tin hoïc
- Kyõ thuaät laäp trình - 51 - x1 = (-b + sqrt(delta))/(2*a); x2 = (-b - sqrt(delta))/(2*a); cout #include #include //Khai baùo nguyeân maãu cuûa haøm void ptb2 (double a, double b, double c); //Haøm main() int main () { double a,b,c; cout >a>>b>>c; ptb2(a,b,c); getch(); return 0; } // Ñònh nghóa haøm : Vieát nhö treân. KNLT : Hình thöùc vieát caâu leänh trong chöông trình. - Caùc leänh khoâng phuï thuoäc nhau neân vieát treân cuøng 1 coät. - Caâu leänh phuï thuoäc vaøo moät leänh khaùc neân vieát thuït vaøo moät möùc , chaúng haïn thuït vaøo 1 tab. Ví du 3 :ï Vieát haøm traû veà kyù töï hoa cuûa moät kyù töï. Input Kt; Output Hoa(Kt); // Neáu kyù töï Kt laø thöôøng thì chuyeån sang hoa. // Neáu Kt laø kyù töï thöôøng, vaø Hoa(Kt) laø kyù töï hoa cuûa Kt thì : Kt - Hoa(Kt) = 32 Traàn Tuaán Minh Khoa Toaùn – Tin hoïc
- Kyõ thuaät laäp trình - 52 - char Hoa(char Kt) { char Hoa_Kt = Kt; if (‘a’ c && a+c > b && b+c > a) // La tam giac { if(a==b && b == c) // Tam giac deu Kq = 1; else // Khong la tg deu if(a == b || b == c || a == c) // Tg can { // Tg vuong if(a*a ==b*b+c*c || b*b ==a*a+c*c || c*c== a*a+b*b) Kq = 4; else // Khong vuong Kq = 2; } else // Khong can if(a*a ==b*b+c*c || b*b ==a*a+c*c || c*c== a*a+b*b) Kq = 3; // Tg vuong else // Khong vuong Kq = 5; } return Kq; Traàn Tuaán Minh Khoa Toaùn – Tin hoïc
- Kyõ thuaät laäp trình - 53 - } KNLT : Söû duïng lieân tieáp caùc caâu leänh if else loàng nhau caøng saâu caøng laøm cho ta khoù kieåm soaùt caùc tröôøng hôïp thöïc teá xaûy ra ñaõ ñöôïc queùt heát hay chöa. Coù moät caùch giuùp ta kieåm tra tính chaát naøy ( queùt taát caû caùc tröôøng hôïp coù theå xaûy ra) laø veõ caây lieät keâ tröôøng hôïp. Chaúng haïn, vôùi ví duï 4, ta coù theå veõ nhö sau : Trong tröôøng hôïp 3 caïnh cuûa tam giaùc : Khoân Ñeàu g ñeàu 1 C khoâng aâ n v u v oâ khoâng khoâng u n vuoân vuoân oâ g g g n g 4 2 3 5 4.2 Caâu leänh switch Caâu leänh cho pheùp choïn moät trong nhieàu nhaùnh reõ. 4.2.1 Cuù phaùp : switch ( Bt) { case hang1: Nhoùm_lenh1 [ break; ] case hang2: Nhoùm_caâu_lenh2 [ break; ] . . . . . case hangn: Nhoùm-lenhn [ break; ] Traàn Tuaán Minh Khoa Toaùn – Tin hoïc
- Kyõ thuaät laäp trình - 54 - [default : Nhoùm_leänhn1 ] } Trong ñoù Bt laø nguyeân, caùc hangk coù theå laø haèng nguyeân, haèng kyù töï, hoaëc bieåu thöùc haèng. Sau moãi hangk laø daáu 2 chaám (:). Caùc hangk phaûi ñoâi moät khaùc nhau, vaø khoâng phaân bieät vò trí. Nhoùm_lenhi : daõy caùc caâu leänh. Ñoaïn trình naèm giöõa caùc daâu { } goïi laø thaân caâu leänh switch. Ra khoûi caâu leänh switch töùc laø ra khoûi thaân cuûa noù. Thaønh phaàn trong daáu ngoaëc vuoâng laø khoâng baét buoäc, chaúng haïn default, break laø caùc thaønh phaàn khoâng baét buoäc. 4.2.2 Hoaït ñoäng cuûa caâu leänh switch : - Tröôùc tieân bieåu thöùc nguyeân ñöôïc tính trò. - Neáu trò bieåu thöùc baèng hangk thì maùy seõ thöïc hieän Caùc_caâu_leänhk cuûa case hangk. Sau ñoù : • Neáu khoâng coù caâu leänh break thì thöïc hieän tieáp caùc_caâu_leänh k+1 cuûa nhaõn case hangk+1 . . . cho tôùi khi gaëp leänh break hoaëc gaëp daáu } cuoái cuøng thì ra khoûi switch. • Neáu coù caâu leänh break thì ra khoûi switch. - Khi giaù trò bieåu thöùc khaùc taát caû caùc hangk thì : + Khi coù default thì maùy nhaûy tôùi thöïc hieän caùc_caâu_leänhn1 trong default. + Khi khoâng coù default thì ra khoûi caâu leänh switch. 4.2.3 Löu ñoà : (Coù thaønh phaàn default) a) Khoâng coù caâu leänh break cuoái moãi nhoùm leänh Bt hang1 1 Nhoùm leän 0 1 hang2 Nhoùm leän 0 . . Traàn Tuaán Minh Khoa Toaùn – Tin hoïc
- Kyõ thuaät laäp trình - 55 - 0 1 hangn Nhoùm leän 0 Nhoùm leänhn1 b) Coù caâu leänh break cuoái moãi nhoùm leänh : Bt hang1 1 Nhoùm leän 0 hang 2 1 Nhoùm leän 0 0 hangn 1 Nhoùm leän 0 Nhoùm leänhn1 Ghi chuù : 1. Neáu trong cuoái caùc leänh trong caùc nhaõn case coù caâu leänh break, thì trong caùc caâu leänh cuûa caùc nhaõn case seõ chæ coù nhieàu nhaát laø moät nhoùm_leänhk naøo ñoù ñöôïc thöïc hieän. Neáu coù default thi ñaûm baûo coù 1 vaø chæ 1 nhoùm_leänhk naøo ñoù ñöôïc thöïc hieän. 2.Coù theå söû duïng caùc caâu leänh goto hoaëc return trong thaân switch ñeå eùp buoäc ra khoûi switch. Ví duï 5 : (Duøng caâu leänh switch toå chöùc thöïc hieän caùc löïa choïn trong menu.) Input Chon Output Xu ly chuc nang trong menu tuong ung voi gia tri chon. void XulyMenu(int Chon) { switch(Chon) { case 1 : // Xöû lyù chöùc naêng 1 case 2 : // Xöû lyù chöùc naêng 2 Traàn Tuaán Minh Khoa Toaùn – Tin hoïc
- Kyõ thuaät laäp trình - 56 - . . . case 10 : // Xöû lyù chöùc naêng 10 [default : // Thoaùt khoûi chööong trình] } } KNLT : Queân break trong caùc nhoùm leänh laøm cho chöông trình khoâng cho keát quaû mong muoán. Ví duï 6 : Vieát haøm thoâng baùo keát quaû phaân loaïi tam giaùc. Input Kq Output Caùc thoâng baùo xuaát ra maøn hình void TB_KetQua(int Kq) { switch(Kq) { case 1: cout<<"\nLa tam giac deu."; break; case 2: cout<<"\nLa tam giac can."; break; case 3: cout<<"\nLa tam giac vuong."; break; case 4: cout<<"\nLa tam giac vuong can."; break; case 5: cout<<"\nLa tam giac thuong."; break; case 0: cout<<"\nKhong phai tam giac."; break; } } Ví du 7 : Vieát haøm xaùc ñònh trình ñoä hoïc vaán theo maõ. input ma //Töø 1 ñeán 6 output - Xuaát trình ñoä hoïc vaán töông öùng void Tdhv(int ma) { Traàn Tuaán Minh Khoa Toaùn – Tin hoïc
- Kyõ thuaät laäp trình - 57 - switch (ma) { case 1: cout<<"\nTrình ñoä hoïc vaán : sô caáp "); break; case 2: cout<<"\nTrình ñoä hoïc vaán : Trung caáp "; break; case 3: cout<<"\nTrình ñoä hoïc vaán : Ñaïi hoïc "; break; case 4: cout<<"\nTrình ñoä hoïc vaán : Cao hoïc "; break; case 5: cout<<"\nTrình ñoä hoïc vaán : Phoù tieán syõ "; break; case 6: cout<<"\nTrình ñoä hoïc vaán : Tieán syõ "; break; Default: cout<<"\nNhNhaäp sai! chæ nhaäp maõ töø 1 ñeán 6."; } } Ví duï 8 : Vieát haøm traû veà soá ngaøy cuûa 1 thaùng trong 1 naêm khi bieát thaùng vaø naêm. input thang, nam; output So_Ngay; int SoNgay(int thang, int nam) { int So_Ngay , nhuan; switch (thang) { // thaùng baèng : 1,3,5,7,8,10,12 case 1 : So_Ngay = 31; break; case 3: So_Ngay = 31; break; case 5: break; case 7: So_Ngay = 31; break; case 8: So_Ngay = 31; break; Traàn Tuaán Minh Khoa Toaùn – Tin hoïc
- Kyõ thuaät laäp trình - 58 - case 10: So_Ngay = 31; break; case 12: So_Ngay = 31; break; // Caùc thaùng baèng : 4,6,9,11 case 4 : So_Ngay = 30; break; case 6: So_Ngay = 30; break; case 9: So_Ngay = 30; break; case 11 : So_Ngay = 30; break; //Thang 2 case 2 : nhuan = ( (nam% 4 == 0) && (nam %100 != 0) ) || (nam % 400 == 0); if (nhuan) So_Ngay = 29; else So_Ngay = 28; } return songay; } Chöông trình coù söû duïng haøm treân ñöôïc vieát nhö sau : #include #include int SONGAY(int thang, int nam); int main(void) { int So_Ngay, thang, nam; clrscr(); cout >thang; cout >nam; songay = SoNgay(thang, nam); cout<<"\nSoá ngaøy cuûa thaùng “<<thang<<” trong naêm “<<nam <<” laø : “<<So_Ngay ; Traàn Tuaán Minh Khoa Toaùn – Tin hoïc
- Kyõ thuaät laäp trình - 59 - getch(); return 0; } //Ñònh nghóa haøm : Vieát nhö treân. 4.3 Caâu leänh for : 4.3.1 Cuù phaùp Caâu leänh for cho ta moät caùch xaây döïng voøng laëp, coù daïng sau : for(bt1 ; bt2 ; bt3) Khoái leänh // Caâu leänh Trong ñoù : - Moãi thaønh phaàn bt laø moät bieåu thöùc hay laø moät daõy caùc bieåu thöùc ñöôïc phaân taùch bôûi daáu phaûy. - Baát kyø moät thaønh phaàn naøo trong 3 thaønh phaàn bt cuõng coù theå vaéng maët, nhöng caùc daáu chaám phaûy (;) luoân luoân coù. Chöùc naêng cuûa caùc thaønh phaàn bt thöôøng laø : - bt1 laø moät pheùp gaùn ñeå taïo ra giaù trò ban ñaàu cho bieán ñieàu khieån . - bt2 laø moät moät quan heä logic bieåu thò ñieàu kieän ñeå tieáp tuïc voøng laëp. - bt3 laø moät pheùp gaùn duøng ñeå thay ñoåi giaù trò cuûa bieán ñieàu khieån . Ghi chuù : - Neáu thaønh phaàn bt2 (bieåu thöùc ) vaéng maët, thì giaù trò cuûa noù luoân ñöôïc xem laø ñuùng. Trong tröôøng hôïp naøy muoán thoaùt khoûi for caàn phaûi nhôø tôùi caùc caâu leänh break, goto hoaëc return. - Neáu thaønh phaàn bt2 laø moät daõy caùc bieåu thöùc thì tính ñuùng sai cuûa noù laø tính ñuùng sai cuûa bieåu thöùc cuoái cuøng trong daõy naøy. 4.3.2 Hoaït ñoäng cuûa caâu leänh for : Hoaït ñoäng theo caùc böôùc : 1. Xaùc ñònh bieåu thöùc 1. bt1 2. Xaùc ñònh bieåu thöùc 2. 3. Caên cöù vaøo giaù trò ñuùng ( khaùc 0), sai ( baèng 0), seõ löïa choïn moät trong 2 nhaùnh : bt2 0 - Neáu bieåu thöùc 2 sai , seõ ra khoûi caâu leänh for vaø chuyeån ñeán caâu leänh sau thaân for. 1KL - Neáu bieåu thöùc 2 ñuùng, seõ thöïc hieän caùc caâu leänh trong thaân for.Khi gaëp daáu ngoaëc bt3 nhoïn ñoùng } cuoái cuøngcuûa thaân for,hoaëc gaëp caâu leänh continue maùy seõ chuyeån sang böôùc 4 (khôûi ñaàu laïi ). 4. Tính bieåu thöùc 3, sau ñoù quay trôû laïi Traàn Tuaán Minh Khoa Toaùn – Tin hoïc
- Kyõ thuaät laäp trình - 60 - böôùc 2 ñeå baét ñaàu moät voøng môùi cuûa voøng laëp. Ghi chuù : Beân trong thaân for coù theå ñaët caùc caâu leänh for khaùc, töùc laø coù theå xaây ñöïng ñöôïc caùc voøng laëp for loàng nhau. Chaúng haïn : for(bt1 ; bt2 ; bt3) for(bt1 ; bt2 ; bt3) Khoái leänh KNLT : Trong caâu leänh for, seõ bò loãi cuù phaùp neáu khoâng coù ñuùng 2 daáu “ ; ”. Ví duï 9 : Vieát haøm tính toång n soá nguyeân döông ñaàu tieân : input n; n output s = ∑i ; i=1 int Tong (int n) { int i,s = 0; for (i = i; i <= n ; i++) s += i; return s; } KNLT : Khi coäng doàn giaù trò vaøo moät bieán, ñöøng queân khôûi taïo giaù trò ban ñaàu cho bieán ñoù. Ví duï 10 : Haøm hieån thò baûng cöûu chöông. Input Output Xuaát baûng cöûu chöông ra maøn hình. void cuuchuong() { int i,j; clrscr(); for (i = 1; i <= 9 ; i++) { cout<<endl; for (j = 1; j <= 9 ; j++) { cout<< i <<setw(3)<<’*”<< setw(3)<<j << setw(3)<<’=’<<setw(3)<<i*j; cout<<endl; Traàn Tuaán Minh Khoa Toaùn – Tin hoïc
- Kyõ thuaät laäp trình - 61 - } } } Ví duï 11 : Vieát haøm xuaát ra maøn hình tam giaùc vuoâng ñaëc vôùi caùc kyù töï ‘*’, chieàu cao h, caùch leà traùi moät khoaûng l : * l h Input l, h Output Xuaát ra maøn hình tam giaùc vuoâng ñaëc theo yeâu caàu : void Tg_Dac(int l, int h) { int i, j; for(i = 1; i <= h; i++) { for(j = 1; j <= l; j++) cout<<’ ’; for(j = 1; j <= i; j++) cout<<’*’; cout<<endl; } } 4.4 Caâu leänh while ( Laëp vôùi ñieàu kieän ñöôïc kieåm tra tröôùc ) 4.4.1 Cuù phaùp : while (Bt) Kl // Thaân voøng laëp Trong ñoù : - Bt coù theå laø 1 bieåu thöùc hay laø moät daõy caùc bieåu thöùc ñöôïc phaân taùch nhau bôûi daáu phaûy. - Giaù trò cuûa Bt laø Ñuùng (khaùc 0) hoaëc sai ( baèng 0). 4.4.2 :Löu ñoà : Ngöõ nghóa : Trong khi Bt coøn ñuùng Bt Thöïc hieän Kl 1 0 Traàn Tuaán Minh Khoa ToaùnKl – Tin hoïc
- Kyõ thuaät laäp trình - 62 - ( RBt = RKl + 1 ) 4.4.3 : Hoaït ñoäng cuûa caâu leänh while : Theo trình töï : 1. Xaùc ñònh giaù trò cuûa bt. 2. Tuøy thuoäc vaøo tính ñuùng sai cuûa bt, maùy seõ löïa choïn 1 trong 2 nhaùnh : a. Neáu bt coù giaù trò 0 ( sai ) maùy seõ ra khoûi voøng laëp vaø chuyeån tôùi caâu leänh sau thaân while. b. Neáu bt coù giaù trò khaùc 0 ( ñuùng ) maùy seõ thöïc hieän caùc caâu leänh trong thaân while. Khi gaëp daáu ngoaëc nhoïn } ñoùng cuoái cuøng cuûa thaân while maùy seõ trôû laïi böôùc 1; hoaëc gaëp caâu leänh continue maùy seõ chuyeån ñeán ñaàu moät voøng laëp môùi cuûa voøng laëp, töùc laø maùy seõ boû qua caùc caâu leänh coøn laïi trong thaân voøng laëp ñeå trôû veà böôùc tính vaø kieåm tra bt. Ghi chuù : Caùc voøng for vaø while coù theå ñaët loàng nhau. Khi gaëp caâu leänh break trong thaân while, maùy seõ ra khoûi voøng while saâu nhaát chöùa caâu leänh naøy. Ví duï 12 : Vieát haøm kieåm tra moät soá nguyeân döông coù phaûi laø soá nguyeân toá. input n output 1; Neáu n nguyeân toá 0; Ngöôïc laïi; int Kt_Nt (int n) { int m, i, Nt; Nt = 1; i = 2; m = (int)sqrt(n); while (i <=m && Nt) { if( n % i == 0) Nt = 0; i++; } return Nt; } KNLT : Traàn Tuaán Minh Khoa Toaùn – Tin hoïc
- Kyõ thuaät laäp trình - 63 - Khoâng ñöôïc queân khôûi taïo giaù trò cuûa bieán ñieåu khieån khi duøng caâu leänh while ( thöôøng laø khôûi taïo tröôùc voøng laëp ). Ví duï 13 : Tìm öôùc chung lôùn nhaát cuûa 2 soá nguyeân döông. Input a, b; Output UCLN(a,b) int UCLN(int a, int b) { // Thuaät toaùn Euclide int r, Kq; while (b > 0 ) { r = a % b; a = b; b = r; } Kq = a; return Kq; } 4.5 Caâu leänh do while ( Laëp vôùi ñieàu kieän ñöôïc kieåm tra sau ) 4.5.1 Cuù phaùp : do Kl // thaân voøng laëp while(bt); Trong ñoù : - Bt coù theå laø 1 bieåu thöùc hay laø moät daõy caùc bieåu thöùc ñöôïc phaân taùch bôûi daáu phaûy. - Giaù trò cuûa Bt laø Ñuùng (khaùc 0) hoaëc sai ( baèng 0). 4.5.2 : Löu ñoà : Ngöõ nghóa : Laøm Kl Kl trong khi Bt coøn ñuùng Bt (RKl = RBt ) 1 0 Traàn Tuaán Minh Khoa Toaùn – Tin hoïc
- Kyõ thuaät laäp trình - 64 - 4.5.3 : Hoaït ñoäng cuûa caâu leänh do : Theo trình töï : 1. Thöïc hieän khoái leänh trong thaân do. 2. Khi gaëp daáu ngoaëc nhoïn } ñoùng cuoái cuøng cuûa thaân do maùy seõ tính vaø xaùc ñònh giaù trò cuûa Bt sau töø khoùa while. 3. Tuøy thuoäc vaøo tính ñuùng sai cuûa bt, maùy seõ löïa choïn 1 trong 2 nhaùnh : a. Neáu Bt coù giaù trò baèng 0 ( sai ) maùy seõ ra khoûi voøng laëp vaø chuyeån tôùi caâu leänh sau thaân do. b. Neáu Bt coù giaù trò khaùc 0 ( ñuùng ) maùy seõ trôû veà böôùc 1 ñeå tieáp tuïc thöïc hieän voøng môùi cuûa voøng laëp. Ghi chuù : Caùc voøng laëp for , while vaø do coù theå ñaët loàng nhau. Khi gaëp caâu leänh break trong thaân do, maùy seõ ra khoûi voøng do saâu nhaát chöùa caâu leänh naøy. Ví duï 14 : (Ñieàu khieån vieäc nhaäp lieäu theo yeâu caàu) Vieát haøm nhaäp moät soá nguyeân khaùc 0, neáu khoâng thoûa maõn yeâu caàu nhaäp laïi : input output a ≠ 0 double nhap () { double a; cout >a; if ( a == 0) cout<<”\nNhaäp laïi a khaùc 0 : a = “; } while (a == 0); return a; } KNLT : Giaù trò cuûa bieán ñieåu khieån trong caâu leänh do while thöôøng ñöôïc xaùc ñònh trong khoái leänh. Ví duï 15 : (Ñieàu khieån vieäc laëp ñi laëp laïi moät thao taùc naøo ñoù, döøng khi thoûa maõn moät ñieàu kieän naøo ñoù. Thoâng thöôøng ta duøng moät giaù trò laøm tín hieäu döøng, goïi laø giaù trò canh) Chaúng haïn trong chöông trình giaûi PTB2 treân R, ta vieát laïi nhö sau : - Söû duïng haøm PTB2 ñeå giaûi. Traàn Tuaán Minh Khoa Toaùn – Tin hoïc
- Kyõ thuaät laäp trình - 65 - - Söû duïng haøm nhaäp ôû treân ñeå nhaäp heä soá a theo x2 theo yeâu caàu. - Haøm main() seõ duøng moät voøng laëp do while ñeå ñieàu khieån vieäc giaûi caùc phöông trình baäc 2, vaø seõ döøng khi ngöôøi söû duïng nhaán phím ESC (giaù trò canh). int main () { char Tl; double a,b,c; do { clrscr(); a = nhap(); //Ñieàu khieån nhaäp a ≠ 0 cout >b>>c; ptb2(a,b,c); cout<<”\nLaøm nöõa khoâng ? Nhaán phím ESC neáu khoâng?” Tl = getch(); } while ( Tl != 27); return 0; } Ví duï 16 : Vieát haøm xuaát maõ cuûa phím moãi khi phím ñöôïc goõ, döøng khi mhaán ESC. /* Ngoaøi caùc phím kyù töï thöôøng, baøn phím coøn coù caùc phím môû roäng nhö caùc phím chöùc naêng, caùc phím dòch chuyeån con troû, caùc toå hôïp phím . . . Ñoái vôùi caùc phím thöôøng, maùy nhaän maõ cuûa noù bình thöôøng. Ñoái vôùi phím môû roäng, maùy seõ nhaän 2 maõ, maõ ñaàu coù trò laø 0 (Kyù töï NULL), khi ñoù phaûi coù theâm maõ thöù hai ñeå xaùc ñònh ñöôïc laø phím gì ? */ Input c //Kyù töï Output Maõ cuûa c //Chi ra ma cua phim void Ma_Phim() { char c; cout<<"\nNhap vao mot phim muon biet ma cua no. ESC de thoat\n"; do { c = getch(); if (c == 0)//Ma mo rong { c = getch(); cout<<"\nMa mo rong : "<<(int)c; } Traàn Tuaán Minh Khoa Toaùn – Tin hoïc
- Kyõ thuaät laäp trình - 66 - else // Ma thuong cout<<"\nMa thuong : "<<(int)c; } while(c != 27);// Ma cua ESC la 27 } Ví duï 17 : Vieát haøm nhaän daïng phím môû roäng khi phím ñöôïc goõ. //Nhaän daïng phím void ND_Phim() { char c; cout<<"\nGo mot phim,may nhan dang la phim gi. ESC de thoat\n"; do { c = getch(); if (c == 0) { c = getch(); switch ((int)c) { case 59 : cout<<"\nDo la phim F1."; break; case 60 : cout<<"\nDo la phim F2."; break; case 61 : cout<<"\nDo la phim F3."; break; case 62 : cout<<"\nDo la phim F4."; break; case 63 : cout<<"\nDo la phim F5."; break; case 64 : cout<<"\nDo la phim F6."; break; case 65 : cout<<"\nDo la phim F7."; break; case 66 : cout<<"\nDo la phim F8."; break; case 67 : Traàn Tuaán Minh Khoa Toaùn – Tin hoïc
- Kyõ thuaät laäp trình - 67 - cout<<"\nDo la phim F9."; break; case 68 : cout<<"\nDo la phim F10."; break; case 72 : cout<<"\nDo la phim UP ARROW."; break; case 80 : cout<<"\nDo la phim DOWN ARROW."; break; case 75 : cout<<"\nDo la phim LEFT ARROW."; break; case 77 : cout<<"\nDo la phim RIGH ARROW."; break; case 73 : cout<<"\nDo la phim PgUP."; break; case 81 : cout<<"\nDo la phim PgDown."; break; case 79 : cout<<"\nDo la phim END."; break; case 71 : cout<<"\nDo la phim HOME."; break; case 82 : cout<<"\nDo la phim INS."; break; case 83 : cout<<"\nDo la phim DEL."; break; // . . . Tham khaûo theâm baûng maõ } } else cout<<"\nKhong phai phim mo rong: "; } while (c != 27); } Traàn Tuaán Minh Khoa Toaùn – Tin hoïc
- Kyõ thuaät laäp trình - 68 - KNLT : Neân chuù thích chöùc naêng cuûa haøm. 4.6 Caâu leänh goto vaø nhaõn : 4.6.1 Nhaõn : Nhaõn laø moät teân vaø coù daáu hai chaám (:) ñöùng sau. Nhaõn coù theå ñöôïc gaùn cho baát kyø caâu leänh naøo trong chöông trình. Chaúng haïn : tiep_tuc : s + = x; nghóa laø : tiep_tuc laø nhaõn caâu leänh gaùn s += x. 4.6.2 caâu leänh goto. 1. Cuù phaùp : goto nhaõn; 2. Taùc duïng : chöông trình seõ nhaûy tôùi thöïc hieän caâu leänh coù nhaõn vieát sau töø khoùa goto; Ghi chuù : 1. Caâu leänh goto vaø nhaõn chæ naèm trong 1 haøm. goto chæ cho pheùp nhaûy töø vò trí naøy ñeán vò trí khaùc trong thaân 1 haøm. Noù khoâng theå nhaûy töø haøm naøy sang haøm khaùc. 2. Khoâng cho pheùp duøng caâu leänh goto nhaûy töø ngoøai khoái leänh vaøo trong khoái leänh. Nhöng ngöôïc laïi, töùc laø nhaûy töø trong ra ngoaøi khoái leänh laø hôïp leä. 3. Caâu leänh goto thöôøng ñöôïc duøng ñeå thoùat khoûi caùc caâu leänh switch, vaø caùc voøng laëp hoaëc keát hôïp vôùi if taïo ra voøng laëp. Ví duï : nhan : clrscr(); . . goto nhan; KNLT : Duøng caùc caâu leänh coù caáu truùc töông ñöông ñeå thay theá haún caâu leänh goto. 4.7 Caùc caâu leänh break, continue : 4.7.1 break Break cho pheùp ra khoûi switch , vaø caùc voøng laëp for, while, do maø khoâng caàn kieåm tra ñieàu kieän keát thuùc cuûa voøng laëp. Leänh break cho pheùp thoaùt ra ngay khoûi voøng laëp beân trong nhaát chöùa leänh break; Moïi caâu leänh break coù theå thay baèng caâu leänh goto vaø nhaõn thích hôïp. 4.7.2 continue Leänh continue taïo ra vieäc baét ñaàu laëp laïi cuûa voøng laëp chöùa noù. Trong while vaø do, leänh continue chuyeån ñieàu khieån veà thöïc hieän ngay phaàn kieåm tra. Ñoái vôùi for, ñieàu khieån ñöôïc chuyeån veà böôùc khôûi ñaàu laïi . Continue chæ aùp duïng cho voøng laëp, khoâng cho switch . Traàn Tuaán Minh Khoa Toaùn – Tin hoïc
- Kyõ thuaät laäp trình - 69 - Ví duï 17 : Vieát haøm tính giaù trò trung bình cuûa caùc soá khoâng aâm trong n soá thöïc ñoïc vaøo töø baøn phím. // Minh hoïa caâu leänh continue Input n soá thöïc x; Output Ttb = (Toång caùc thöïc khoâng aâm)/n double Gttb(int n) { int i, dem; double x,Ttb,sum; clrscr(); dem = 0; sum = 0; for(i=1; i >x; if ( x < 0) continue; //Boû qua caùc caâu leänh sau sum += x; dem++; } if (dem == 0) Tb = 0; else Ttb =sum/dem; return Ttb; } 4.8 Caâu leänh roång : - Daïng : Leänh roång laø I leänh chæ coù daáu chaáp phaûy (:) . (Leänh naøy thöôøng ñöôïc söû duïng trong thaân caùc voøng laëp maø ôû ñoù khoâng muoán coù 1 leänh naøo.) KNLT : Ta caàn thaän troïng vôùi söï coù maët hôïp leä cuûa leänh roång. Chaúng haïn , caùc caùch vieát sau laø hôïp leä : if (a ==b ); // khoâng laøm gì caû for(i = 0;i < 10,++i); cout<<i; // Khi ñoù seõ in 1 soá laø i= 10, thay vì in 10 soá töø 0 ñeán 9. Traàn Tuaán Minh Khoa Toaùn – Tin hoïc
- Kyõ thuaät laäp trình - 70 - 4.9 Voøng laëp voâ haïn Thöôøng coù caùc daïng sau : a) daïng for : for (; ;) khoái leänh Meänh ñeà trong phaàn thaân voøng laëp thöôøng laø meänh ñeà keùp chöùa: • Nhöõng meänh ñeà maø noù thöïc hieän laëp laïi ñeå giaûi quyeát baøi toaùn. • Moät meänh ñeà maø noù seõ keát thuùc söï thöïc hieän voøng laëp khi moät ñieàu kieän naøo ñoù ñöôïc thoûa. Meänh ñeà naøy thöôøng laø if keát hôïp vôùi break. b) Daïng while : while(1) khoái leänh c) Daïng do while : do khoái leänh while(1); Khi söû duïng voøng laëp ta caàn löu yù ñeán ñieàu kieän laëp coù theå döøng voøng laëp ñöôïc khoâng. Caùc voøng laëp daïng treân muoán döøng, caàn phaûi coù söï can thieäp cuûa caùc caâu leänh break, goto,return Tuy nhieân caùc daïng voøng laëp treân nhieàu khi cuõng toû ra ñöôïc söï ích lôïi cuûa noù. Chaúng haïn. Ta xeùt daïng a).Voøng laëp naøy thöôøng ñöôïc toå chöùc nhö sau: for (; ;) { daõy leänh if (ñieàu kieän) break; } Ví duï 18 : Vieát haøm choïn 1 trong nhieàu chöùc naêng ( ñieàu khieån vieäc nhaäp giaù trò choïn). Input Output Chon; int chonmenu() { int Chon; for (;;) { menu(); cout >Chon; if( 1 <= Chon && Chon <= 10) break; } Traàn Tuaán Minh Khoa Toaùn – Tin hoïc
- Kyõ thuaät laäp trình - 71 - return Chon; } 4.10 Caùc ví duï : Ví duï 19 : ( Troø chôi ñoaùn soá ) Maùy tính “ nghó ra “ moät soá ngaãu nhieân (soá nguyeân) vaø khoâng hieån thò soá ñoù. Ngöôøi chôi ñoaùn soá aáy baèng caùch goõ töø baøn phím moät soá. - Neáu soá aáy nhoû hôn soá do maùy tính nghó ra thì maùy tính hieån thò thoâng baùo caâu “ Nhoû hôn“. - Neáu soá aáy lôùn hôn soá do maùy tính nghó ra thì maùy tính hieån thò thoâng baùo caâu “ Lôùn hôn“. Giaû söû ngöôøi chôi chæ coù theå ñoaùn nhieàu nhaát laø k laàn. Neáu caû k laàn ngöôøi chôi ñeàu ñoaùn sai, chöông trình hieån thò thoâng baùo “Baïn ñaõ thua”, ngöôïc laïi ngöôøi chôi thaéng cuoäc. Vieát chöông trình theå hieän troø chôi. #include #include #include #define MAXL 10000 int TCDS(long So, int k); void main() { long So,//So do maùy taïo k, //Soá laàn ñoaùn toái ña Kq; // Keát quaû troø chôi char ch; do { clrscr(); randomize(); So = random(MAXL); cout >k; Kq = TCDS(So,k); if(Kq) cout<<"\nHoan ho ban, Ban da thang!"; else { cout<<"\nBan da doan sai “<<k<<” lan ! " <<"\nBan thua roi ! "; } cout<<"\nIn gia tri So may tao de kiem tra : " <<So; Traàn Tuaán Minh Khoa Toaùn – Tin hoïc
- Kyõ thuaät laäp trình - 72 - cout >x; if (x == a ) { Kqtc =1; break; } else if ( x > a ) cout #include #include void n_ngto(int n); void hc_n(long n); void Tg_Pascal(int n); Traàn Tuaán Minh Khoa Toaùn – Tin hoïc
- Kyõ thuaät laäp trình - 73 - void Chon_Menu(); void Menu(); void XuLy_Menu(int n, int Chon) int Kt_Nt(int x); int Kt_Shc(int x); void main() { int n, Chon; clrscr(); do { Chon = Chon_Menu(); XuLy_Menu(n, Chon); } while(1); } // void n_ngto(int n) { int i,dem; cout<<n<<" so nguyen to dau tien:\n"; dem = 0; i = 2; while (dem < n) { if (Kt_Nt(i)) { cout<<i; dem++; } i++; } } // void hc_n(int n) { long s,k,i; cout<<"\nCac so hoan chinh khong lon hon "<<n<<'\n'; for (k = 2; k <=n; k++) if(Kt_Shc(k)) cout<<k<<’\t’; } // Traàn Tuaán Minh Khoa Toaùn – Tin hoïc
- Kyõ thuaät laäp trình - 74 - int Kt_Shc(int x) { int Shc = 0, i, S; S = 0; for(i = 1; i n) Kq = 0; else { c = 1; for (i=1; i <= k; i++) c = c*(n-i+1)/i; Traàn Tuaán Minh Khoa Toaùn – Tin hoïc
- Kyõ thuaät laäp trình - 75 - Kq = c; } return Kq; } void Menu() { cout >chon; if (1 <= Chon && Chon <=4 ) break; } return Chon; } // void XuLy_Menu(int n, int Chon) { switch(Chon) { case 1: clrscr(); n_ngto( n); getch(); break; case 2: clrscr(); hc_n(n); getch(); break; case 3: Traàn Tuaán Minh Khoa Toaùn – Tin hoïc
- Kyõ thuaät laäp trình - 76 - clrscr(); Tg_Pascal(n); getch(); break; case 4: clrscr(); cout<<"Thoat khoi chuong trinh!"; getch(); exit(1); } } Traàn Tuaán Minh Khoa Toaùn – Tin hoïc
- Kyõ thuaät laäp trình - 77 - BAØI TAÄP Vieát chöông trình söû duïng caùc haøm ñaõ vieát. Baøi 1 : Vieát haøm in ra caùc phöông aùn ñoåi soá baïc n (ñ) töø caùc loaïi giaáy baïc 100ñ, 200ñ, 500ñ. Baøi 2 : Vieát haøm giaûi heä phöông trình tuyeán tính 2 phöông trình, 2 aån : a x + a y = b ⎪⎧ 11 12 1 ⎨ a x + a y = b ⎩⎪ 21 22 2 Baøi 3 : Vieát haøm in caùc soá nguyeân toá khoâng lôùn hôn soá nguyeân döông n cho tröôùc. Baøi 4 : Vieát haøm tính : n 1. ∑(−1) k +1 k k =1 n 2. ∑()2k + 12 . k =0 n 1 3. ∑ 2 . k =1 k Baøi 5 : Vieát haøm chuyeån ñoåi moät soá nguyeân döông heä 10 : 1. Sang heä 2. 2. Sang heä 16. Baøi 6 : Vieát haøm traû veà phaàn dö trong pheùp chia Euclide : ” Chia moät soá nguyeân cho moät soá nguyeân döông “. Baøi 7 : Vieát haøm traû veà giaù trò thöông trong pheùp chia Euclide : ” Chia moät soá nguyeân cho moät soá nguyeân döông “. Baøi 8 : Vieát haøm traû veà ngaøy thöù maáy trong naêm khi bieát ngaøy, thaùng , naêm . Traàn Tuaán Minh Khoa Toaùn – Tin hoïc
- Kyõ thuaät laäp trình - 78 - Baøi 9 : Vieát caùc haøm traû veà kyù töï thöôøng cuûa moät kyù töï Baøi 10: Vieát haøm xuaát ra maøn hình : 1) * * * * * 2) 3) * * * * * * * * * * * * Baøi 11 : Vieát haøm xuaát ra caây thoâng. (HD: Xuaát laàn löôït 3 tam giaùc caân coù chieàu daøi khaùc nhau, choàng leân nhau) Baøi 12: a 2 + b 2 +1 Vieát haøm in ra taát caû caùc caëp soá döông (a,b) sao cho a<b<1000 vaø ab laø moät soá nguyeân. Baøi 13: Phöông trình a5+b5+c5+d5+e5 = f5 coù nghieäm nguyeân duy nhaát thoûa : 0< a ≤ b ≤ c ≤d ≤ e≤ f≤ 75. Vieát haøm tìm ra lôøi giaûi ñoù. Baøi 14: Nhaäp vaøo ngaøy thaùng kieåm tra xem ngaøy thaùng ñoù coù hôïp leä khoâng. Traàn Tuaán Minh Khoa Toaùn – Tin hoïc