Ch −¬ ng 2
cña ng«n ng÷
Trang 32.1 C¸c phÇn tö ng«n ng÷ c¬ b¶n
2.1.1 T p ký t , t p t khóa và tên
• Ki u d li u:
– char, int, short, long, float, double, signed, unsigned, …
– void, enum, struct, union, typedef, …
• L nh:
– if, else, switch, while, do, for, …
– break, continue, goto, return, …
• L u tr d li u và chuy n đ i ngôn ng l p trình:
– auto, const, extern, register, static, …
– asm, pascal, …
• T khóa c a C++ b sung vào C:
– new, delete, inline, operator, …
– class, public, protected, private, this, friend, virtual, …
Trang 42.1 C¸c phÇn tö ng«n ng÷ c¬ b¶n
2.1.1 T p ký t , t p t khóa và tên
– Tên
• L y t t p kí t ngôn ng :
– Phân bi t ch cái hoa, th ng.
– Không đ c khai báo tên trùng t khóa.
Trang 5– unsigned int (int là ki u vi t ng m đ nh c a signed int)
– short int, vi t g n là short (s khác nhau gi a short và int?)
• long int, vi t g n là long å 4 byte.
Trang 6• VD: (-1) S * (1,f1 f2 … f23) * 2 E-127 (E: 8 bit)
• VD: (-1) S * (1,f1 f2 … f52) * 2 E-1023 (E: 11 bit)
– Chú ý v ph m vi bi u di n: [-max … -min] _ [min … max]
Trang 7• C cho phép thao tác v i ký t nh s nguyên !
– C xem h ng kí t là ki u nguyên å kích th c 2 byte.
• VD: ‘\141’ ~ ‘a’ ä b ng mã ASCII (a ~ 97 ~ 0141)
– C++ xem h ng ký t là ki u char å kích th c 1 byte.
• Chú ý: ‘a’ ≠ “a”.
– Ki u không xác đ nh (r ng) : void.
• Ki u bool: có giá tr true và false (~ Pascal).
• Ki u wchar_t: dùng cho các t p ký t l n h n (v í d U nicode).
Trang 8– Khai báo m i n i trong ch ng trình ( ≠ ANSI C ? ≠ Pascal ?)
– Có th kh i t o giá tr ngay khi khai báo bi n ( ≠ Pascal ?)
• const tên_ki u_d _li u tên_h ng = giá_tr ;
– VD: const int MAX = 100;
• #define tên_h ng xâu_giá_tr ( h ng t ng tr ng)
– VD: #define MAX 100
• Bi u di n h ng
– Phân bi t h ng theo ki u d li u (int, long int, char, float, …).
Trang 9– Phép toán: 1 ngôi, 2 ngôi, 3 ngôi.
• Bi u th c đ c phân bi t theo ki u giá tr : nguyên và th c.
• M nh đ logic đ c xem là có giá tr nguyên, đúng ~ giá tr khác không (=1) và sai ~ giá tr không (=0).
– Tuy v y dùng quen å không c n thi t.
• C++ đ a vào nhi u quan ni m m i v bi u th c: bi u th c gán,
bi u th c đi u ki n…
Trang 102.2 BiÓu thøc
2.2.2 Phép toán s h c, quan h , logic và thao tác bit
– Phép toán đ i d u (1 ngôi):
-– Các phép toán s h c ( 2 ngôi): +, -, *, /, %
• Là các phép toán cho c ki u nguyên và th c.
• Phép toán / trên ki u nguyên ~ phép toán div trên Pascal.
• Phép toán % ch dùng cho ki u nguyên ~ phép toán mod trên Pascal.
– Các phép toán quan h ( 2 ngôi): >, >=, <, <=, ==, !=
• Chú ý 2 phép toán == (~ phép toán = trên Pascal) và != (~ phép toán <> trên Pascal)
– Các phép toán logic: &&, || (2 ngôi), ! (1 ngôi)
• Chú ý phép ph đ nh 1 ngôi !
– Các phép toán thao tác trên bit ( 2 ngôi): &, |, ^, <<, >>, ~
• Chú ý 2 phép << và >>
• Chú ý phép ~ (phép bù 1) và ^ (phép ho c lo i tr )
Trang 11– Bi u th c đi u ki n: expr1 ? expr 2 : expr 3
• Ki u c a bi u th c bao trùm ki u c a expr2 và expr3.
Trang 122.2 BiÓu thøc
2.2.4 Phép toán chuy n ki u, l y đ a ch , l y kích
– Chuy n ki u (ép ki u): (ki u) bi u th c ho c: ki u (bi u th c)
• C không cho phép s d ng ký pháp th hai.
• C++ có th t đ ng chuy n ki u å th t : char – int – long – float – double – long double.
– Phép toán l y đ a ch : &bi n
• Ch ra giá tr đ a ch c a bi n, không s d ng cho h ng, bi u th c.
– Phép toán l y kích th c b nh : sizeof(bi n)
• L y kích th c theo byte
– Phép toán ph m vi: ::bi n (không có trong C)
• C n t i khi s d ng bi n toàn c c trùng tên bi n c c b
Trang 142.3 Vµo/ra d÷ liÖu
2.3.1 Vào/ra v i các th vi n stdio.h, conio.h
• stdio.h khai báo các hàm vào/ra chu n không ph thu c thi t b
• conio.h khai báo các hàm vào/ra s d ng các thi t b xác đ nh (bàn phím, màn hình, …) ~ th vi n crt trong Pascal.
• C++ cung c p thêm th vi n iostream.h g m m t s đ i t ng và phép toán vào ra v i m t s đ c tính m i.
• S d ng vùng đ m (buffer) trong RAM.
– Vào: thi t b vào åvùng đ m åquy cách å giá tr å ch ng trình.
– Ra: ch ng trình å giá tr å vùng đ m å quy cách åthi t b ra.
• Vào/ra có quy cách (format): printf, scanf, …
• C++ cung c p thêm các đ i t ng vào/ra (cin, cout) và các phép toán t ng ng (<<, >>).
Trang 15– ~ readkey / keypressed trong Pascal.
• putchar/getchar: vào ra v i ký t
• puts/gets: vào ra v i xâu ký t
• putch, getche, …
• Chú ý: tùy vào trình d ch mà các hàm vào/ra có th khác nhau !
Trang 162.3 Vµo/ra d÷ liÖu
2.3.2 Hàm printf
– Cú pháp: printf(< đ nh d ng> [, <tham s >]);
• Hàm tr v s kí t , l i å -1
• < đ nh d ng>: xâu “đi u khi n” ch a “đ nh d ng” (b t đ u b ng %)
• [, <tham s >]: danh sách các giá tr (h ng, bi n, bi u th c, …) c n
Trang 17– Trong xâu đi u khi n có th :
• Ch a các kí t thông th ng ho c các kí t đi u khi n (\n, \f, …)
• Không đ a ra giá tr å xâu đi u khi n ph i là h ng, không là
bi n.
Trang 182.3 Vµo/ra d÷ liÖu
2.3.3 Hàm scanf
– Cú pháp: scanf(< đ nh d ng> [, <tham s >]);
• Hàm tr v s giá tr nh n đ c
• < đ nh d ng>: xâu “đi u khi n” ch a “đ nh d ng” (b t đ u b ng %)
• [, <tham s >]: danh sách các đ a ch bi n l u tr giá tr đ c vào.
• VD: scanf ( “%d%f ”, &n, &x );
Trang 192.3 Vµo/ra d÷ liÖu
2.3.3 Hàm scanf
• Các giá tr vào cách nhau b i d u cách, tab ho c xu ng dòng.
– N u không có giá tr vào, bi n s gi nguyên giá tr tr c khi đ c.
• Khi nh p nhi u giá tr å t n t i ký t xu ng dòng trong b đ m
Trang 202.3 Vµo/ra d÷ liÖu
2.3.4 Vào/ra v i các đ i t ng cin, cout
– Th vi n iostream.h (không có trong C).
• Các đ i t ng vào/ra: cin ~ bàn phím, cout ~ màn hình.
• S d ng các phép toán << (xu t) và >> (nh p).
• L nh: cout << giá tr ;
• Giá tr có th có ki u b t k : ki u d li u c s , xâu kí t , con tr
• N u mu n đ a ra con tr char *, ph i chuy n ki u t ng minh.
• L nh: cin >> giá tr ;
• Giá tr , quy c, … xem phép toán <<
• Ngoài vi c s d ng hàm fflush(stdin) có th dùng l nh: cin.clear();
Trang 222.4 C¸c lÖnh ®iÒu khiÓn
2.4.2 Các l nh r nhánh if [else] và switch
– L nh if [else]
if ( đi u ki n) l nh 1 [else l nh 2]
ho c [else if ( đi u ki n 1) l nh 3 … else l nh n]
(“l nh” đây có th là câu l nh ho c kh i l nh).
• Cú pháp l nh if có m t s ch khác Pascal: ngo c đ n quanh bi u
th c đi u ki n, cho phép g i hàm trong bi u th c đi u ki n, ph i
có d u “;” sau câu l nh (l nh đ n) cu i cùng tr c else.
• C++ quy c else đi theo if g n nh t Khi c n thi t, có th dùng
d u kh i l nh “{ … }” đ ch rõ else nào t ng ng if nào.
• Cách vi t if (bi u th c !=0) là t ng đ ng v i if (bi u th c)
– Ví d : tìm giá tr l n nh t, có và không dùng else.
Trang 232.4 C¸c lÖnh ®iÒu khiÓn
2.4.2 Các l nh r nhánh if [else] và switch
switch ( đi u ki n) { case giá tr 1: [l nh 1] [break; ] case giá tr 2: [l nh 2] [break; ]
… default: [l nh n] [break; ] }
Trang 262.4 C¸c lÖnh ®iÒu khiÓn
2.4.3 Các l nh t o vòng l p while, for và do while
– L nh for vi t l i theo d ng l nh while :
bt1;
while (bt2) {
l nh bt3;
}
– Vòng l p for trong C++ có m t s đi m khác bi t so v i
vòng l p for trong Pascal
• Có th có nhi u bi n đi u khi n (nh r ng l nh trong C++ có th
có nhi u bi u th c gán cách nhau b i d u “,”).
• Các bi u th c bt1, bt2, bt3 có th có m t ho c không (nh ng v n
ph i có d u ; ng n cách) N u bt2 không có ~ bi u th c đi u ki n luôn đúng ~ vòng l p vô h n.
Trang 27• L nh do while c a C++ khác l nh repeat until c a Pascal : Pascal
th c hi n l nh sau repeat cho đ n khi đi u ki n là đúng, còn C++
th c hi n l nh sau repeat trong khi đi u ki n còn đúng.
• K c khi không có l nh nào sau do, v n ph i có c p { }.
• Nh v y khác v i vòng l p while, “l nh” trong vòng l p do while
v n s đ c th c hi n ít nh t là 1 l n k c khi “đi u ki n” là sai ngay t đ u.
– Ví d : ki m tra đi u ki n sau khi th c hi n l nh
Trang 282.4 C¸c lÖnh ®iÒu khiÓn
2.4.4 Nói thêm v các l nh break, continue và goto
• Thoát kh i l nh switch, vòng l p (for, while, do while).
• N u có nhi u vòng l p, l nh break s tác đ ng đ n vòng trong cùng nh t.
Trang 292.5 Con trá, tham chiÕu vµ cÊp
2.5.1 Con tr và tham chi u
– Con tr :
• Là bi n/h ng có giá tr là đ a ch c a m t đ i t ng (bi n/hàm)
• Khai báo: ki u_d _li u *tên_con_tr ;
– VD: int * i_ptr; float * f_ptr;
Trang 302.5 Con trá, tham chiÕu vµ cÊp
2.5.1 Con tr và tham chi u
• Con tr void * có th nh n đ a ch ki u b t kì (nguyên, th c, …).
• C++ s chuy n ki u t đ ng t con tr ki u khác sang void*
– N u c n chuy n ki u ng c l i ng i l p trình ph i vi t t ng minh Tuy v y trong C đi u này không c n thi t.
– Tham chi u (không có trong C):
• Là “bí danh” cho m t đ i t ng khác & s d ng vùng nh c a đ i
t ng đó ( ~ tham chi u đ n đ i t ng đó).
– Bi n tham chi u ph i đ c kh i t o ngay khi khai báo.
• Khai báo: ki u_d _li u &bi n_tham_chi u = bi n;
– VD: int &r = n;
• M t s v n đ khác v tham chi u s đ c mô t trong ph n hàm.
• Không nên nh m l n tham chi u v i phép toán đ a ch
Trang 312.5 Con trá, tham chiÕu vµ cÊp
2.5.1 Con tr và tham chi u
• Khai báo: const ki u_d _li u &bi n_tham_chi u = bi n;
– VD: const int &r = n ;
• Cho phép s d ng giá tr trong vùng nh , nh ng không cho phép thay đ i giá tr này.
Trang 322.5 Con trá, tham chiÕu vµ cÊp
Trang 332.5 Con trá, tham chiÕu vµ cÊp
• S d ng các hàm trong các th vi n alloc.h, stdlib.h.
• S d ng các phép toán new và delete (là các phép toán m i đ c
b sung trong C++, không có trong ANSI C).
Trang 342.5 Con trá, tham chiÕu vµ cÊp
Trang 352.5 Con trá, tham chiÕu vµ cÊp
• Khai báo: ki u_d _li u *bi n_tr ;
bi n_tr = new ki u_d _li u;
– Ví d : thao tác v i con tr , tham chi u và c p phát đ ng.
Trang 36• Có th tham kh o sách ti ng Vi t, chú ý hai cu n sách (v ngôn
ng C và C++) c a GS Ph m V n t.
• Có th s d ng Help c a Turbo C++3.0.
• Chú ý v tham s truy n vào và giá tr tr v
– Phân bi t vai trò, ch c n ng c a hai th vi n
• stdio.h là th vi n vào/ra chu n (không ph thu c thi t b ).
• conio.h là th vi n vào/ra cho các thi t b xác đ nh (màn hình, bàn phím,…).
Trang 37• Có th tham kh o sách ti ng Vi t, chú ý hai cu n sách (v ngôn
ng C và C++) c a GS Ph m V n t.
• Có th s d ng Help c a Turbo C++3.0.
• Tìm hi u k cách th c t ch c qu n lý b nh tr c khi dùng các hàm trong th vi n
– S mô t k h n v n đ qu n lý l u tr d li u trong ch ng 4.
• Chú ý v tham s truy n vào và giá tr tr v
Trang 382.6 c thêm
2.6.3 B ng mã ASCII, Unicode và mã quét bàn phím
• Xem TLTK đ có hình dung s b v mã ASCII.
• Tham kh o tài li u ti ng Anh ( đã nêu trong ph n TLTK).
• Có th tham kh o sách ti ng Vi t, chú ý hai cu n sách (v ngôn
Trang 392.6 c thêm