logo

C++ cơ bản và nâng cáo

Tài liệu “Lập trình C# từ cơ bản đến nâng cao “ được biên soạn nhằm đáp ứng nhu cầu tìm hiểu, học tập của sinh viên các ngành kỹ thuật, kinh tế nói chung và của các sinh viên ngành CNTT.Lý thuyết, bài tập và lời giải " được dùng cho các sinh viên, học sinh phổ thông, học sinh các lớp chuyên tin học, học viên các lớp cao học thuộc các...
Updatesofts.com Ebooks Team C++ Căn b n và nâng cao M c l c: I. Cơ b n v C++ (2) I. C u trúc c a m t trương trình C++ (2) II. Các bi n ki u và h ng s (5) III. Các toán t (13) IV. Giao ti p v i Console (19) II. Các c u trúc ñi u khi n và Hàm (22) I. C u trúc d li u ñi u khi n (22) II. Hàm I (29) III. Hàm II (34) III. D li u nâng cao (41) I. M ng (41) II. Sâu ký t (48) III. Con tr (54) IV. B nh ñ ng (65) V. Các c u trúc (69) VI. Các ki u d li u do ngư i dùng ñ nh nghĩa. (typedef, union, enum) (75) Trang 1 Updatesofts.com Ebooks Team C u trúc c a m t chương trình C++ Có l m t trong nh ng cách t t nh t ñ b t ñ u h c m t ngôn ng l p trình là b ng m t chương trình. V y ñây là chương trình ñ u tiên c a chúng ta : // my first program in C++ Hello World! #include int main () { cout Updatesofts.com Ebooks Team (không b t bu c). N i dung c a hàm main ti p ngay sau ph n khai báo chính th c ñư c bao trong các ngo c nh n ( { } ) như trong ví d c a chúng ta cout Updatesofts.com Ebooks Team with more comments */ #include int main () { cout Updatesofts.com Ebooks Team Các bi n, ki u và h ng s Identifiers M t tên (indentifiers) h p l là m t chu i g m các ch cái, ch s ho c kí t g ch dư i. Chi u dài c a m t tên là không gi i h n. Kí t tr ng, các kí t ñánh d u ñ u không th có m t trong m t tên. Ch có ch cái, ch s và kí t g ch dư i là ñư c cho phép. Thêm vào ñó, m t tên bi n luôn ph i b t ñ u b ng m t ch cái. Chúng cũng có th b t ñ u b ng kí t g ch dư i ( _ ) nhưng kí t này thư ng ñư c dành cho các liên k t bên ngoài (external link). Không bao gi chúng b t ñ u b ng m t ch s . M t lu t n a mà b n ph i quan tâm ñ n khi t o ra các tên c a riêng mình là chúng không ñư c trùng v i b t kì t khoá nào c a ngôn ng hay c a trình d ch, ví d các tên sau ñây luôn luôn ñư c coi là t khoá theo chu n ANSI-C++ và do v y chúng không th ñư c dùng ñ ñ t tên asm, car, bool, break, marry, catch, to char, class, const, const_cast, continue, default, delete, do, double, dynamic_cast, else, enum, explicit, extern, false, float, for, friend, goto, if, inline, int, long, mutable, namespace, new, operator, private, protected, public, to register, reinterpret_cast, return, short, signed, sizeof, static, static_cast, struct, switch, template, this, throw, true, try, typedef, typeid, typename, union, unsigned, using, virtual, void, volatile, wchar_t Thêm vào ñó, m t s bi u di n khác c a các toán t (operator) cũng không ñư c dùng làm tên vì chúng là nh ng t ñư c dành riêng trong m t s trư ng h p. and, and_eq, bitand, bitor, compl, not, not_eq, or, or_eq, xor, xor_eq Trình d ch c a b n có th thêm m t t dành riêng ñ c trưng khác. Ví d , r t nhi u trình d ch 16 bit (như các trình d ch cho DOS) còn có th các t khoá far, huge và near. Chú ý: Ngôn ng C++ là "case sensitive" có nghĩa là phân bi t ch hoa ch thư ng. Do v y bi n RESULT khác v i result cũng như Result. Các ki u d li u Khi l p trình, chúng ta lưu tr các bi n trong b nh c a máy tính nhưng máy tính ph i bi t chúng ta mu n lưu tr gì trong chúng vì các ki u d li u khác nhau s c n lư ng b nh khác nhau. Trang 5 Updatesofts.com Ebooks Team B nh c a máy tính chúng ta ñư c t ch c thành các byte. M t byte là lư ng b nh nh nh t mà chúng ta có th qu n lí. M t byte có th dùng ñ lưu tr m t lo i d li u nh như là ki u s nguyên t 0 ñ n 255 hay m t kí t . Nhưng máy tính có th x lý các ki u d li u ph c t p hơn b ng cách g p nhi u byte l i v i nhau, như s nguyên dài hay s th p phân. Ti p theo b n s có m t danh sách các ki u d li u cơ b n trong C++ cũng như mi n giá tr mà chúng có th bi u di n S Tên Mô t Mi n giá tr byte có d u: -128 to 127 char 1 Kí t hay ki u s nguyên 8-bit không d u: 0 to 255 có d u: -32763 to 32762 short 2 ki u s nguyên 16-bit không d u: 0 to 65535 có d u:-2147483648 to long 4 ki u s nguyên 32-bit 2147483647 không d u: 0 to 4294967295 S nguyên. ð dài c a nó ph thu c vào h int * th ng, như trong MS-DOS nó là 16-bit, trên Xem short, long Windows 9x/2000/NT là 32 bit... float 4 D ng d u ph y ñ ng 3.4e + / - 38 (7 digits) D ng d u ph y ñ ng v i ñ chính xác g p double 8 1.7e + / - 308 (15 digits) ñôi long D ng d u ph y ñ ng v i ñ chính xác hơn 10 1.2e + / - 4932 (19 digits) double n a Giá tr logic. Nó m i ñư c thêm vào chu n bool 1 ANSI-C++. B i v y không ph i t t c các true ho c false trình d ch ñ u h tr nó. Ngoài các ki u d li u cơ b n nói trên còn t n t i các con tr và các tham s không ki u (void) mà chúng ta s xem xét sau. Khai báo m t bi n ð có th s d ng m t bi n trong C++, ñ u tiên chúng ta ph i khai báo nó, ghi rõ nó là ki u d li u nào. Chúng ta ch c n vi t tên ki u (như int, short, float...) ti p theo sau ñó là m t tên bi n h p l . Ví d int a; float mynumber; Dòng ñ u tiên khai báo m t bi n ki u int v i tên là a. Dòng th hai khai báo m t bi n ki u float v i tên mynumber. Sau khi ñư c khai báo, các bi n trên có th ñư c dùng trong ph m vi c a chúng trong chương trình. Trang 6 Updatesofts.com Ebooks Team N u b n mu n khai báo m t vài bi n có cùng m t ki u và b n mu n ti t ki m công s c vi t b n có th khai báo chúng trên m t dòng, ngăn cách các tên b ng d u ph y. Ví d int a, b, c; khai báo ba bi n ki u int (a,b và c) và hoàn toàn tương ñương v i : int a; int b; int c; Các ki u s nguyên (char, short, long and int) có th là s có d u hay không d u tuỳ theo mi n giá tr mà chúng ta c n bi u di n. Vì v y khi xác ñ nh m t ki u s nguyên chúng ta ñ t t khoá signed ho c unsigned trư c tên ki u d li u. Ví d : unsigned short NumberOfSons; signed int MyAccountBalance; N u ta không ch rõ signed or unsigned nó s ñư c coi là có d u, vì v y trong khai báo th hai chúng ta có th vi t : int MyAccountBalance cũng hoàn toàn tương ñương v i dòng khai báo trên. Trong th c t , r t ít khi ngư i ta dùng ñ n t khoá signed. Ngo i l duy nh t c a lu t này ki u char. Trong chu n ANSI- C++ nó là ki u d li u khác v i signed char và unsigned char. ð có th th y rõ hơn vi c khai báo trong chương trình, chúng ta s xem xét m t ño n mã C++ ví d như sau: // operating with variables 4 #include int main () { // declaring variables: int a, b; int result; // process: a = 5; b = 2; a = a + 1; result = a - b; // print out the result: cout Updatesofts.com Ebooks Team return 0; } ð ng lo l ng n u như vi c khai báo có v hơi l lùng v i b n. B n s th y ph n chi ti t còn l i trong ph n ti p theo Kh i t o các bi n Khi khai báo m t bi n, giá tr c a nó m c nhiên là không xác ñ nh. Nhưng có th b n s mu n nó mang m t giá tr xác ñ nh khi ñư c khai báo. ð làm ñi u ñó, b n ch c n vi t d u b ng và giá tr b n mu n bi n ñó s mang: type identifier = initial_value ; Ví d , n u chúng ta mu n khai báo m t bi n int là a ch a giá tr 0 ngay t khi kh i t o, chúng ta s vi t : int a = 0; B xung vào cách kh i t o ki u C này, C++ còn có thêm m t cách m i ñ kh i t o bi n b ng cách b c m t c p ngo c ñơn sau giá tr kh i t o. Ví d : int a (0); C hai cách ñ u h p l trong C++. Ph m vi ho t ñ ng c a các bi n T t c các bi n mà chúng ta s s d ng ñ u ph i ñư c khai báo trư c. M t ñi m khác bi t gi a Cvà C++ là trong C++ chúng ta có th khai báo bi n b t kì nơi nào trong chương trình, th m chí là ngay gi a các l nh th c hi n ch không ch là ñ u kh i l nh như trong C. M c dù v y chúng ta v n nên theo cách c a ngôn ng C khi khai báo các bi n b i vì nó s r t h u d ng khi c n s a ch a m t chương trình có t t c các ph n khai báo ñư c g p l i v i nhau. B i v y, cách thông d ng nh t ñ khai báo bi n là ñ t nó trong ph n b t ñ u c a m i hàm (bi n c c b ) hay tr c ti p trong thân chương trình, ngoài t t c các hàm (bi n toàn c c). Global variables (bi n toàn c c) có th ñư c s d ng b t kì ñâu trong chương trình, ngay sau khi nó ñư c khai báo. T m ho t ñ ng c a local variables (bi n c c b ) b gi i h n trong ph n mã mà nó ñư c khai báo. N u chúng ñư c khai báo ñ u m t hàm (như hàm main), t m ho t ñ ng s là toàn b hàm main. ði u ñó có nghĩa là trong ví d trên, các bi n ñư c khai báo trong Trang 8 Updatesofts.com Ebooks Team hàm main() ch có th ñư c dùng trong hàm ñó, không ñư c dùng b t kì ñâu khác. Thêm vào các bi n toàn c c và c c b , còn có các bi n ngoài (external). Các bi n này không nh ng ñư c dùng trong m t file mã ngu n mà còn trong t t c các file ñư c liên k t trong chương trình. Trong C++ t m ho t ñ ng c a m t bi n chính là kh i l nh mà nó ñư c khai báo (m t kh i l nh là m t t p h p các l nh ñư c g p l i trong m t b ng các ngo c nh n { } ). N u nó ñư c khai báo trong m t hàm t m ho t ñ ng s là hàm ñó, còn n u ñư c khai báo trong vòng l p thì t m ho t ñ ng s ch là vòng l p ñó.... Các h ng s M t h ng s là b t kì m t bi u th c nào mang m t giá tr c ñ nh, như: Các s nguyên 1776 707 -273 chúng là các h ng mang giá tr s . Chú ý r ng khi bi u di n m t h ng ki u s chúng ta không c n vi t d u ngo c kép hay b t kì d u hi u nào khác. Thêm vào nh ng s h cơ s 10 ( cái mà t t c chúng ta ñ u ñã bi t) C++ còn cho phép s d ng các h ng s cơ s 8 và 16. ð bi u di n m t s h cơ s 8 chúng ta ñ t trư c nó kí t 0, ñ bi u di n s h cơ s 16 chúng ta ñ t trư c nó hai kí t 0x. Ví d : 75 // Cơ s 10 0113 // cơ s 8 0x4b // cơ s 16 Các s th p phân (d ng d u ph y ñ ng) Chúng bi u di n các s v i ph n th p phân và/ho c s mũ. Chúng có th bao g m ph n th p phân, kí t e (bi u di n 10 mũ...). 3.14159 // 3.14159 6.02e23 // 6.02 x 1023 1.6e-19 // 1.6 x 10-19 3.0 // 3.0 Kí t và xâu kí t Trong C++ còn t n t i các h ng không ph i ki u s như: 'z' 'p' "Hello world" "How do you do?" Trang 9 Updatesofts.com Ebooks Team Hai bi u th c ñ u tiên bi u di n các kí t ñơn, các kí t ñư c ñ t trong d u nháy ñơn ('), hai bi u th c ti p theo bi u th c các xâu kí t ñư c ñ t trong d u nháy kép ("). Khi vi t các kí t ñơn hay các xâu kí t c n ph i ñ chúng trong các d u nháy ñ phân bi t v i các tên bi n hay các t khoá. Chú ý: x 'x' x tr ñ n bi n x trong khi 'x' là kí t h ng 'x'. Các kí t ñơn và các xâu kí t có m t tính ch t riêng bi t là các mã ñi u khi n. Chúng là nh ng kí t ñ c bi t mà không th ñư c vi t b t kì ñâu khác trong chương trình như là mã xu ng dòng (\n) hay tab (\t). T t c ñ u b t ñ u b ng d u x ngư c (\). Sau ñây là danh sách các mã ñi u khi n ñó: \n xu ng dòng \r lùi v ñ u dòng \t kí t tab \v căn th ng theo chi u d c \b backspace \f sang trang \a Kêu bíp \' d u nháy ñơn \" d u nháy kép \ d uh i \\ kí t x ngư c Ví d : '\n' '\t' "Left \t Right" "one\ntwo\nthree" Thêm vào ñó, ñ bi u di n m t mã ASCII b n c n s d ng kí t x ngư c (\) ti p theo ñó là mã ASCII vi t trong h cơ s 8 hay cơ s 16. Trong trư ng h p ñ u mã ASCII ñư c vi t ngay sau d u s ngư c, trong trư ng h p th hai, ñ s d ng s trong h cơ s 16 b n c n vi t kí t x trư c s ñó (ví d \x20 hay \x4A). Các h ng chu i kí t có th ñư c vi t trên nhi u dòng n u m i dòng ñư c k t thúc b ng m t d u s ngư c (\): Trang 10 Updatesofts.com Ebooks Team "string expressed in \ two lines" B n có th n i m t vài h ng xâu kí t ngăn cách b ng m t hay vài d u tr ng, kí t tab, xu ng dòng hay b t kì kí t tr ng nào khác. "we form" "a unique" "string" "of characters" ð nh nghĩa các h ng (#define) B n có th ñ nh nghĩa các h ng v i tên mà b n mu n ñ có th s d ng thư ng xuyên mà không m t tài nguyên cho các bi n b ng cách s d ng ch th #define. ðây là d ng c a nó: #define identifier value Ví d : #define PI 3.14159265 #define NEWLINE '\n' #define WIDTH 100 chúng ñ nh nghĩa ba h ng s m i. Sau khi khai báo b n có th s d ng chúng như b t kì các h ng s nào khác, ví d circle = 2 * PI * r; cout Updatesofts.com Ebooks Team Trong trư ng h p ki u không ñư c ch rõ (như trong ví d cu i) trình d ch s coi nó là ki u int Trang 12 Updatesofts.com Ebooks Team Các toán t Qua bài trư c chúng ta ñã bi t ñ n s t n t i c a các bi n và các h ng. Trong C++, ñ thao tác v i chúng ta s d ng các toán t , ñó là các t khoá và các d u không có trong b ng ch cái nhưng l i có trên h u h t các bàn phím trên th gi i. Hi u bi t v chúng là r t quan tr ng vì ñây là m t trong nh ng thành ph n cơ b n c a ngôn ng C++. Toán t gán (=). Toán t gán dùng ñ gán m t giá tr nào ñó cho m t bi n a = 5; gán giá tr nguyên 5 cho bi n a. V trái b t bu c ph i là m t bi n còn v ph i có th là b t kì h ng, bi n hay k t qu c a m t bi u th c. C n ph i nh n m nh r ng toán t gán luôn ñư c th c hi n t trái sang ph i và không bao gi ñ o ngư c a = b; gán giá tr c a bi n a b ng giá tr ñang ch a trong bi n b. Chú ý r ng chúng ta ch gán giá tr c a b cho a và s thay ñ i c a b sau ñó s không nh hư ng ñ n giá tr c a a. M t thu c tính c a toán t gán trong C++ góp ph n giúp nó vư t lên các ngôn ng l p trình khác là vi c cho phép v ph i có th ch a các phép gán khác. Ví d : a = 2 + (b = 5); tương ñương v i b = 5; a = 2 + b; Vì v y bi u th c sau cũng h p l trong C++ a = b = c = 5; gán giá tr 5 cho c ba bi n a, b và c Các toán t s h c ( +, -, *, /, % ) Năm toán t s h c ñư c h tr b i ngôn ng là: + c ng - tr * nhân / chia Trang 13 Updatesofts.com Ebooks Team % l y ph n dư (trong phép chia) Th t th c hi n các toán t này cũng gi ng như chúng ñư c th c hi n trong toán h c. ði u duy nh t có v hơi l ñ i v i b n là phép l y ph n dư, ký hi u b ng d u ph n trăm (%). ðây chính là phép toán l y ph n dư trong phép chia hai s nguyên v i nhau. Ví d , n u a = 11 % 3;, bi n a s mang giá tr 2 vì 11 = 3*3 +2. Các toán t gán ph c h p (+=, -=, *=, /=, %=, >>=, Updatesofts.com Ebooks Team Sau ñây là các toán t quan h b n có th s d ng trong C++ == B ng != Khác > L n hơn < Nh hơn > = L n hơn ho c b ng < = Nh hơn ho c b ng Ví d : (7 == 5) s tr giá tr false (6 >= 6) s tr giá tr true t t nhiên thay vì s d ng các s , chúng ta có th s d ng b t c bi u th c nào. Cho a=2, b=3 và c=6 (a*b >= c) s tr giá tr true. (b+4 < a*c) s tr giá tr false C n chú ý r ng = (m t d u b ng) lf hoàn toàn khác v i == (hai d u b ng). D u ñ u tiên là m t toán t gán ( gán giá tr c a bi u th c bên ph i cho bi n bên trái) và d u còn l i (==) là m t toán t quan h nh m so sánh xem hai bi u th c có b ng nhau hay không. Trong nhi u trình d ch có trư c chu n ANSI-C++ cũng như trong ngôn ng C, các toán t quan h không tr v giá tr logic true ho c false mà tr v giá tr int v i 0 tương ng v i false còn giá tr khác 0 (thư ng là 1) thì tương ng v i true. Các toán t logic ( !, &&, || ). Toán t ! tương ñương v i toán t logic NOT, nó ch có m t ñ i s phía bên ph i và vi c duy nh t mà nó làm là ñ i ngư c giá tr c a ñ i s t true sang false ho c ngư c l i. Ví d : !(5 == 5) tr v false vì bi u th c bên ph i (5 == 5) có giá tr true. !(6 Updatesofts.com Ebooks Team ( (5 == 5) && (3 > 6) ) tr v false ( true && false ). ( (5 == 5) || (3 > 6)) tr v true ( true || false ). Toán t ñi u ki n ( ? ). Toán t ñi u ki n tính toán m t bi u th c và tr v m t giá tr khác tuỳ thu c vào bi u th c ñó là ñúng hay sai. C u trúc c a nó như sau: condition ? result1 : result2 N u condition là true thì giá tr tr v s là result1, n u không giá tr tr v là result2. 7==5 ? 4 : 3 tr v 3 vì 7 không b ng 5. 7==5+2 ? 4 : 3 tr v 4 vì 7 b ng 5+2. 5>3 ? a : b tr v a, vì 5 l n hơn 3. a>b ? a : b tr v giá tr l n hơn, a ho c b. Các toán t thao tác bit ( &, |, ^, ~, ). Các toán t thao tác bit thay ñ i các bit bi u di n m t bi n, có nghĩa là thay ñ i bi u di n nh phân c a chúng toán t asm Mô t & AND Logical AND | OR Logical OR ^ XOR Logical exclusive OR ~ NOT ð o ngư c bit > SHR D ch bit sang ph i Các toán t chuy n ñ i ki u Các toán t chuy n ñ i ki u cho phép b n chuy n ñ i d li u t ki u này sang ki u khác. Có vài cách ñ làm vi c này trong C++, cách cơ b n nh t ñư c th a k t ngôn ng C là ñ t trư c bi u th c c n chuy n ñ i tên ki u d li u ñư c b c trong c p ngo c ñơn (), ví d : int i; float f = 3.14; i = (int) f; ðo n mã trên chuy n s th p phân 3.14 sang m t s nguyên (3). ñây, toán t chuy n ñ i ki u là (int). M t cách khác ñ làm ñi u này trong C++ là s d ng các constructors ( m t s sách thu t ng này ñư c d ch là c u t nhưng tôi th y nó có v không xuôi tai l m) thay vì dùng các toán t : ñ t trư c bi u th c c n chuy n ñ i ki u tên ki u m i và bao b c bi u th c gi a m t c p ngo c ñơn. i = int ( f ); Trang 16 Updatesofts.com Ebooks Team C hai cách chuy n ñ i ki u ñ u h p l trong C++. Thêm vào ñó ANSI-C++ còn có nh ng toán t chuy n ñ i ki u m i ñ c trưng cho l p trình hư ng ñ i tư ng. sizeof() Toán t này có m t tham s , ñó có th là m t ki u d li u hay là m t bi n và tr v kích c b ng byte c a ki u hay ñ i tư ng ñó. a = sizeof (char); a s mang giá tr 1 vì ki u char luôn có kích c 1 byte trên m i h th ng. Giá tr tr v c a sizeof là m t h ng s vì v y nó luôn luôn ñư c tính trư c khi chương trình th c hi n. Các toán t khác Trong C++ còn có m t s các toán t khác, như các toán t liên quan ñ n con tr hay l p trình hư ng ñ i tư ng. Chúng s ñư c nói ñ n c th trong các ph n tương ng. Th t ưu tiên c a các toán t Khi vi t các bi u th c ph c t p v i nhi u toán h ng các b n có th t h i toán h ng nào ñư c tính trư c, toán h ng nào ñư c tính sau. Ví d như trong bi u th c sau: a = 5 + 7 % 2 có th có hai cách hi u sau: a = 5 + (7 % 2) v i k t qu là 6, ho c a = (5 + 7) % 2 v i k t qu là 0 Câu tr l i ñúng là bi u th c ñ u tiên. Vì nguyên nhân nói trên, ngôn ng C++ ñã thi t l p m t th t ưu tiên gi a các toán t , không ch riêng các toán t s h c mà t t c các toán t có th xu t hi n trong C++. Th t ưu tiên c a chúng ñư c li t kê trong b ng sau theo th t t cao xu ng th p. Th Toán t Mô t Associativity t 1 :: scope Trái 2 () [ ] -> . sizeof Trái ++ -- tăng/gi m ~ ð o ngư c bit ! NOT 3 Ph i &* Toán t con tr (type) Chuy n ñ i ki u +- Dương ho c âm 4 */% Toán t s h c Trái Trang 17 Updatesofts.com Ebooks Team 5 +- Toán t s h c Trái 6 > D ch bit Trái 7 < >= Toán t quan h Trái 8 == != Toán t quan h Trái Toán t thao tác 9 &^| Trái bit 10 && || Toán t logic Trái 11 ?: Toán t ñi u ki n Ph i = += -= *= /= %= 12 >>= Updatesofts.com Ebooks Team Giao ti p v i console. Console là giao di n cơ b n c a máy tính. Bàn phím là thi t b vào cơ b n còn màn hình là thi t b ra cơ b n. Trong thư vi n iostream c a C++, các thao tác vào ra cơ b n c a m t chương trình ñư c h tr b i hai dòng d li u : cin ñ nh p d li u và cout ñ xu t. Thêm vào ñó, còn có cerr và clog là hai dòng d li u dùng ñ hi n th các thông báo l i trên thi t b ra chu n (thư ng là màn hình) ho c ra m t file. Thông thư ng cout ñư c gán v i màn hình còn cin ñư c gán v i bàn phím. S d ng hai dòng d li u này b n s có th giao ti p v i ngư i s d ng vì b n có th hi n th các thông báo lên màn hình cũng như nh n d li u t bàn phím. Xu t d li u (cout) Dòng cout ñư c s d ng v i toán t ñã quá t i
DMCA.com Protection Status Copyright by webtailieu.net