Bài giảng
NGÔN NGỮ LẬP
TRÌNH C/C++
Đ I H C QU C GIA HÀ N I Ạ Ọ Ố Ộ
TR NG Đ I H C CÔNG NGH ƯỜ Ạ Ọ Ệ
Khoa Công ngh Thông tin ệ
PH M H NG THÁI Ạ Ồ
Bài gi ng ả
Hà N i. Đ phù h p v i ch ng trình, t p bài gi ng này ch đ c p m t ph n nh ộ ể ợ ớ ươ ậ ả ỉ ề ậ ộ ầ ỏ
đ n k thu t l p trình h ng đ i t ng trong C++, đó là các k thu t đóng gói d ế ỹ ậ ậ ướ ố ượ ỹ ậ ữ
li u, ph ng th c và đ nh nghĩa m i các toán t . Tên g i c a t p bài gi ng này nói ệ ươ ứ ị ớ ử ọ ủ ậ ả
lên đi u đó, có nghĩa n i dung c a bài gi ng th c ch t là NNLT C đ c m r ng ề ộ ủ ả ự ấ ượ ở ộ
v i m t s đ c đi m m i c a C++. V k thu t l p trình h ng đ i t ng (trong ớ ộ ố ặ ể ớ ủ ề ỹ ậ ậ ướ ố ượ
C++) s đ c trang b b i m t giáo trình khác. Tuy nhiên đ ng n g n, trong t p bài ẽ ượ ị ở ộ ể ắ ọ ậ
gi ng này tên g i C/C++ s đ c chúng tôi thay b ng C++. ả ọ ẽ ượ ằ
N i dung t p bài gi ng này g m 8 ch ng. Ph n đ u g m các ch ng t 1 đ n ộ ậ ả ồ ươ ầ ầ ồ ươ ừ ế
6 ch y u trình bày v NNLT C++ trên n n t ng c a k thu t l p trình c u trúc. Các ủ ế ề ề ả ủ ỹ ậ ậ ấ
ch ng còn l i (ch ng 7 và 8) s trình bày các c u trúc c b n trong C++ đó là k ươ ạ ươ ẽ ấ ơ ả ỹ
thu t đóng gói (l p và đ i t ng) và đ nh nghĩa phép toán m i cho l p. ậ ớ ố ượ ị ớ ớ
Tuy đã có nhi u c g ng nh ng do th i gian và trình đ ng i vi t có h n nên ề ố ắ ư ờ ộ ườ ế ạ
ch c ch n không tránh kh i sai sót, vì v y r t mong nh n đ c s góp ý c a b n đ c ắ ắ ỏ ậ ấ ậ ượ ự ủ ạ ọ
đ bài gi ng ngày càng m t hoàn thi n h n. ể ả ộ ệ ơ
Tác gi . ả
Ch ng 1. Các khái ni m c b n c a C++ ươ ệ ơ ả ủ
CH NG 1 ƯƠ
CÁC KHÁI NI M C B N C A C++ Ệ Ơ Ả Ủ
Các y u t c b n ế ố ơ ả
Môi tr ng làm vi c c a C++ ườ ệ ủ
Các b c đ t o và th c hi n m t ch ng trình ướ ể ạ ự ệ ộ ươ
Vào/ra trong C++
I. CÁC Y U T C B N Ế Ố Ơ Ả
M t ngôn ng l p trình (NNLT) b c cao cho phép ng i s d ng (NSD) bi u ộ ữ ậ ậ ườ ử ụ ể
hi n ý t ng c a mình đ gi i quy t m t v n đ , bài toán b ng cách di n đ t g n v i ệ ưở ủ ể ả ế ộ ấ ề ằ ễ ạ ầ ớ
ngôn ng thông th ng thay vì ph i di n đ t theo ngôn ng máy (dãy các kí hi u 0,1). ữ ườ ả ễ ạ ữ ệ
Hi n nhiên, các ý t ng NSD mu n trình bày ph i đ c vi t theo m t c u trúc ch t ch ể ưở ố ả ượ ế ộ ấ ặ ẽ
M t đ c tr ng c a C++ là các t khoá luôn luôn đ c vi t b ng ch th ng. ộ ặ ư ủ ừ ượ ế ằ ữ ườ
3. Tên g i ọ
Đ phân bi t các đ i t ng v i nhau chúng c n có m t tên g i. H u h t m t đ i ể ệ ố ượ ớ ầ ộ ọ ầ ế ộ ố
t ng đ c vi t ra trong ch ng trình thu c 2 d ng, m t d ng đã có s n trong ngôn ượ ượ ế ươ ộ ạ ộ ạ ẵ
ng (ví d các t khoá, tên các hàm chu n ), m t s do NSD t o ra dùng đ đ t tên ữ ụ ừ ẩ ộ ố ạ ể ặ
cho h ng, bi n, ki u, hàm các tên g i do NSD t đ t ph i tuân theo m t s qui t c ằ ế ể ọ ự ặ ả ộ ố ắ
sau:
− Là dãy ký t liên ti p (không ch a d u cách) và ph i b t đ u b ng ch cái ự ế ứ ấ ả ắ ầ ằ ữ
ho c g ch d i. ặ ạ ướ
− Phân bi t kí t in hoa và th ng. ệ ự ườ
− Không đ c trùng v i t khóa. ượ ớ ừ
− S l ng ch cái dùng đ phân bi t tên g i có th đ c đ t tuỳ ý. ố ượ ữ ể ệ ọ ể ượ ặ
− Chú ý các tên g i có s n c a C++ cũng tuân th theo đúng qui t c trên. ọ ẵ ủ ủ ắ
Trong m t ch ng trình n u NSD đ t tên sai thì trong quá trình x lý s b (tr c ộ ươ ế ặ ử ơ ộ ướ
khi ch y ch ng trình) máy s báo l i (g i là l i văn ph m). ạ ươ ẽ ỗ ọ ỗ ạ
Ví d 1 : ụ
• Các tên g i sau đây là đúng (đ c phép): i, i1, j, tinhoc, tin_hoc, luu_luong ọ ượ
• Các tên g i sau đây là sai (không đ c phép): 1i, tin hoc, luu-luong-nuoc ọ ượ
• Các tên g i sau đây là khác nhau: ha_noi, Ha_noi, HA_Noi, HA_NOI, ọ
2 Ch ng 1. Các khái ni m c b n c a C++ ươ ệ ơ ả ủ
4. Chú thích trong ch ng trình ươ
M t ch ng trình th ng đ c vi t m t cách ng n g n, do v y thông th ng bên ộ ươ ườ ượ ế ộ ắ ọ ậ ườ
c nh các câu l nh chính th c c a ch ng trình, NSD còn đ c phép vi t vào ch ng ạ ệ ứ ủ ươ ượ ế ươ
trình các câu ghi chú, gi i thích đ làm rõ nghĩa h n ch ng trình. M t chú thích có th ả ể ơ ươ ộ ể
ghi chú v nhi m v , m c đích, cách th c c a thành ph n đang đ c chú thích nh ề ệ ụ ụ ứ ủ ầ ượ ư
bi n, h ng, hàm ho c công d ng c a m t đo n l nh Các chú thích s làm cho ế ằ ặ ụ ủ ộ ạ ệ ẽ
ch ng trình sáng s a, d đ c, d hi u và vì v y d b o trì, s a ch a v sau. ươ ủ ễ ọ ễ ể ậ ễ ả ử ữ ề
Có 2 cách báo cho ch ng trình bi t m t đo n chú thích: ươ ế ộ ạ
− N u chú thích là m t đo n kí t b t kỳ liên ti p nhau (trong 1 dòng ho c trên ế ộ ạ ự ấ ế ặ
nhi u dòng) ta đ t đo n chú thích đó gi a c p d u đóng m chú thích /* (m ) ề ặ ạ ữ ặ ấ ở ở
tr ng Windows chúng ta n Alt-X. ườ ấ
2. Giao di n và c a s so n th o ệ ử ổ ạ ả
a. Mô t chung ả
Khi g i ch y C++ trên màn hình s xu t hi n m t menu x xu ng và m t c a s ọ ạ ẽ ấ ệ ộ ổ ố ộ ử ổ
so n th o. Trên menu g m có các nhóm ch c năng: File, Edit, Search, Run, Compile, ạ ả ồ ứ
Debug, Project, Options, Window, Help. Đ kích ho t các nhóm ch c năng, có th ể ạ ứ ể
n Alt+ch cái bi u th cho menu c a ch c năng đó (là ch cái có g ch d i). Ví d đ ấ ữ ể ị ủ ứ ữ ạ ướ ụ ể
m nhóm ch c năng File n Alt+F, sau đó d ch chuy n h p sáng đ n m c c n ch n r i ở ứ ấ ị ể ộ ế ụ ầ ọ ồ
n Enter. Đ thu n ti n cho NSD, m t s các ch c năng hay dùng còn đ c g n v i ấ ể ậ ệ ộ ố ứ ượ ắ ớ
m t t h p các phím cho phép ng i dùng có th ch n nhanh ch c năng này mà không ộ ổ ợ ườ ể ọ ứ
c n thông qua vi c m menu nh đã mô t trên. M t s t h p phím c th đó s ầ ệ ở ư ả ở ộ ố ổ ợ ụ ể ẽ
đ c trình bày vào cu i ph n này. Các b ch ng trình d ch h tr ng i l p trình m t ượ ố ầ ộ ươ ị ỗ ợ ườ ậ ộ
môi tr ng tích h p t c ngoài ch c năng so n th o, nó còn cung c p nhi u ch c năng, ườ ợ ứ ứ ạ ả ấ ề ứ
ti n ích khác giúp ng i l p trình v a có th so n th o văn b n ch ng trình v a g i ệ ườ ậ ừ ể ạ ả ả ươ ừ ọ
ch y ch ng trình v a g l i … ạ ươ ừ ỡ ỗ
Các ch c năng liên quan đ n so n th o ph n l n gi ng v i các b so n th o khác ứ ế ạ ả ầ ớ ố ớ ộ ạ ả
(nh WinWord) do v y chúng tôi ch trình bày tóm t t mà không trình bày chi ti t ư ậ ỉ ắ ế ở
đây.
b. Các ch c năng so n th o ứ ạ ả
Gi ng h u h t các b so n th o văn b n, b so n th o c a Turbo C ho c Borland ố ầ ế ộ ạ ả ả ộ ạ ả ủ ặ
C cũng s d ng các phím sau cho quá trình so n th o: ử ụ ạ ả
− D ch chuy n con tr : các phím mũi tên cho phép d ch chuy n con tr sang ị ể ỏ ị ể ỏ
trái, ph i m t kí t ho c lên trên, xu ng d i 1 dòng. Đ d ch chuy n nhanh ả ộ ự ặ ố ướ ể ị ể
có các phím nh Home (v đ u dòng), End (v cu i dòng), PgUp, PgDn (lên, ư ề ầ ề ố
xu ng m t trang màn hình). Đ d ch chuy n xa h n có th k t h p các phím ố ộ ể ị ể ơ ể ế ợ
này cùng phím Control (Ctrl, ^) nh ^PgUp: v đ u t p, ^PgDn: v cu i t p. ư ề ầ ệ ề ố ệ
− Chèn, xoá, s a: Phím Insert cho phép chuy n ch đ so n th o gi a chèn và ử ể ế ộ ạ ả ữ
đè. Các phím Delete, Backspace cho phép xoá m t kí t t i v trí con tr và ộ ự ạ ị ỏ
4 Ch ng 1. Các khái ni m c b n c a C++ ươ ệ ơ ả ủ
tr c v trí con tr (xoá lùi). ướ ị ỏ
− So n th o t p m i: Ch n menu File\New. Hi n ra c a s so n th o tr ng và ạ ả ệ ớ ọ ệ ử ổ ạ ả ắ
tên file t m th i l y là Noname.cpp. ạ ờ ấ
− So n th o t p cũ: Ch n menu File\Open ho c n phím F3, nh p tên t p ho c ạ ả ệ ọ ặ ấ ậ ệ ặ
d ch chuy n con tr trong vùng danh sách t p bên d i đ n tên t p c n so n ị ể ỏ ệ ướ ế ệ ầ ạ
r i n Enter. Cũng có th áp d ng cách này đ so n t p m i khi không nh p ồ ấ ể ụ ể ạ ệ ớ ậ
5Ch ng 1. Các khái ni m c b n c a C++ ươ ệ ơ ả ủ
vào tên t p c th . ệ ụ ể
− Ghi t p đang so n th o lên đĩa v i tên m i: Ch n menu File\Save As và nh p ệ ạ ả ớ ớ ọ ậ
tên t p m i vào r i n Enter. ệ ớ ồ ấ
e. Ch c năng d ch và ch y ch ng trình ứ ị ạ ươ
− Ctrl-F9: Kh i đ ng ch c năng d ch và ch y toàn b ch ng trình. ở ộ ứ ị ạ ộ ươ
− F4: Ch y ch ng trình t đ u đ n dòng l nh hi n t i (đang ch a con tr ) ạ ươ ừ ầ ế ệ ệ ạ ứ ỏ
− F7: Ch y t ng l nh m t c a hàm main(), k c các l nh con trong hàm. ạ ừ ệ ộ ủ ể ả ệ
− F8: Ch y t ng l nh m t c a hàm main(). Khi đó m i l i g i hàm đ c xem là ạ ừ ệ ộ ủ ỗ ờ ọ ượ
m t l nh (không ch y t ng l nh trong các hàm đ c g i). ộ ệ ạ ừ ệ ượ ọ
Các ch c năng liên quan đ n d ch ch ng trình có th đ c ch n thông qua menu ứ ế ị ươ ể ượ ọ
Compile (Alt-C).
f. Tóm t t m t s phím nóng hay dùng ắ ộ ố
− Các phím kích ho t menu: Alt+ch cái đ i di n cho nhóm menu đó. Ví d ạ ữ ạ ệ ụ
Alt-F m menu File đ ch n các ch c năng c th trong nó nh Open (m ở ể ọ ứ ụ ể ư ở
file), Save (ghi file lên đĩa), Print (in n i dung văn b n ch ng trình ra máy ộ ả ươ
in), … Alt-C m menu Compile đ ch n các ch c năng d ch ch ng trình. ở ể ọ ứ ị ươ
− Các phím d ch chuy n con tr khi so n th o. ị ể ỏ ạ ả
− F1: m c a s tr giúp. Đây là ch c năng quan tr ng giúp ng i l p trình nh ở ử ổ ợ ứ ọ ườ ậ ớ
tên l nh, cú pháp và cách s d ng. ệ ử ụ
− F2: ghi t p lên đĩa. ệ
− F3: m t p cũ ra s a ch a ho c so n th o t p m i. ở ệ ử ữ ặ ạ ả ệ ớ
− F4: ch y ch ng trình đ n v trí con tr . ạ ươ ế ị ỏ
− F5: Thu h p/m r ng c a s so n th o. ẹ ở ộ ử ổ ạ ả
− F6: Chuy n đ i gi a các c a s so n th o. ể ổ ữ ử ổ ạ ả
dùng chung trong toàn b ch ng trình. ộ ươ
− Danh sách các hàm c a ch ng trình (do NSD vi t, bao g m c hàm main()). ủ ươ ế ồ ả
C u trúc chi ti t c a m i hàm s đ c đ c p đ n trong ch ng 4. ấ ế ủ ỗ ẽ ượ ề ậ ế ươ
D i đây là m t đo n ch ng trình đ n gi n ch g m 1 hàm chính là hàm main(). ướ ộ ạ ươ ơ ả ỉ ồ
N i dung c a ch ng trình dùng in ra màn hình dòng ch : Chào các b n, bây gi là 2 ộ ủ ươ ữ ạ ờ
gi . ờ
#include <iostream.h> // khai báo t p nguyên m u đ ệ ẫ ể
void main() // đ c s d ng toán t in cout << ượ ử ụ ử
{
7Ch ng 1. Các khái ni m c b n c a C++ ươ ệ ơ ả ủ
int h = 2, // Khai báo và kh i t o bi n h = 2 ở ạ ế
cout << “Chào các b n, bây gi là ” << h << " gi " ; // in ra màn hình ạ ờ ờ
}
Dòng đ u tiên c a ch ng trình là khai báo t p nguyên m u iostream.h. Đây là ầ ủ ươ ệ ẫ
khai báo b t bu c vì trong ch ng trình có s d ng ph ng th c chu n “cout <<” (in ra ắ ộ ươ ử ụ ươ ứ ẩ
màn hình), ph ng th c này đ c khai báo và đ nh nghĩa s n trong iostream.h. ươ ứ ượ ị ẵ
Không riêng hàm main(), m i hàm khác đ u ph i b t đ u t p h p các câu l nh ọ ề ả ắ ầ ậ ợ ệ
c a mình b i d u { và k t thúc b i d u }. T p các l nh b t kỳ bên trong c p d u này ủ ở ấ ế ở ấ ậ ệ ấ ặ ấ
đ c g i là kh i l nh. Kh i l nh là m t cú pháp c n thi t trong các câu l nh có c u trúc ượ ọ ố ệ ố ệ ộ ầ ế ệ ấ
nh ta s th y trong các ch ng ti p theo. ư ẽ ấ ươ ế
III. CÁC B C Đ T O VÀ TH C HI N M T CH NG TRÌNH ƯỚ Ể Ạ Ự Ệ Ộ ƯƠ
1. Qui trình vi t và th c hi n ch ng trình ế ự ệ ươ
Tr c khi vi t và ch y m t ch ng trình thông th ng chúng ta c n: ướ ế ạ ộ ươ ườ ầ
1. Xác đ nh yêu c u c a ch ng trình. Nghĩa là xác đ nh d li u đ u vào (input) ị ầ ủ ươ ị ữ ệ ầ
cung c p cho ch ng trình và t p các d li u c n đ t đ c t c đ u ra (output). ấ ươ ậ ữ ệ ầ ạ ượ ứ ầ
Các t p h p d li u này ngoài các tên g i còn c n xác đ nh ki u c a nó.Ví d ậ ợ ữ ệ ọ ầ ị ể ủ ụ
đ gi i m t ph ng trình b c 2 d ng: ax2ể ả ộ ươ ậ ạ
+ bx + c = 0, c n báo cho ch ng ầ ươ
trình bi t d li u đ u vào là a, b, c và đ u ra là nghi m x1 và x2 c a ph ng ế ữ ệ ầ ầ ệ ủ ươ
trình. Ki u c a a, b, c, x1, x2 là các s th c. ể ủ ố ự
ho c thông báo ch ng trình đã đ c d ch thành công (không còn l i). Các l i này ặ ươ ượ ị ỗ ỗ
đ c g i là l i cú pháp. ượ ọ ỗ
Đ d ch ch ng trình ta ch n menu \Compile\Compile ho c \Compile\Make ho c ể ị ươ ọ ặ ặ
nhanh chóng h n b ng cách n t h p phím Alt-F9. ơ ằ ấ ổ ợ
4. Ch y ch ng trình ạ ươ
n Ctrl-F9 đ ch y ch ng trình, n u ch ng trình ch a d ch sang mã máy, máy Ấ ể ạ ươ ế ươ ư ị
s t đ ng d ch l i tr c khi ch y. K t qu c a ch ng trình s hi n ra trong m t c a ẽ ự ộ ị ạ ướ ạ ế ả ủ ươ ẽ ệ ộ ử
s k t qu đ NSD ki m tra. N u k t qu ch a đ c nh mong mu n, quay l i văn b n ổ ế ả ể ể ế ế ả ư ượ ư ố ạ ả
đ s a và l i ch y l i ch ng trình. Quá trình này đ c l p l i cho đ n khi ch ng ể ử ạ ạ ạ ươ ượ ặ ạ ế ươ
trình ch y đúng nh yêu c u đã đ ra. Khi ch ng trình ch y, c a s k t qu s hi n ra ạ ư ầ ề ươ ạ ử ổ ế ả ẽ ệ
t m th i che khu t c a s so n th o. Sau khi k t thúc ch y ch ng trình c a s so n ạ ờ ấ ử ổ ạ ả ế ạ ươ ử ổ ạ
th o s t đ ng hi n ra tr l i và che khu t c a s k t qu . Đ xem l i k t qu đã hi n ả ẽ ự ộ ệ ở ạ ấ ử ổ ế ả ể ạ ế ả ệ
n Alt-F5. Sau khi xem xong đ quay l i c a s so n th o n phím b t kỳ. ấ ể ạ ử ổ ạ ả ấ ấ
IV. VÀO/RA TRONG C++
Trong ph n này chúng ta làm quen m t s l nh đ n gi n cho phép NSD nh p d ầ ộ ố ệ ơ ả ậ ữ
li u vào t bàn phím ho c in k t qu ra màn hình. Trong ph n sau c a giáo trình chúng ệ ừ ặ ế ả ầ ủ
ta s kh o sát các câu l nh vào/ra ph c t p h n ẽ ả ệ ứ ạ ơ
9Ch ng 1. Các khái ni m c b n c a C++ ươ ệ ơ ả ủ
1. Vào d li u t bàn phím ữ ệ ừ
Đ nh p d li u vào cho các bi n có tên bi n_1, bi n_2, bi n_3 chúng ta s d ng ể ậ ữ ệ ế ế ế ế ử ụ
câu l nh: ệ
cin >> bi n_1 ; ế
cin >> bi n_2 ; ế
cin >> bi n_3 ; ế
ho c: ặ
cin >> bi n_1 >> bi n_2 >> bi n_3 ; ế ế ế
bi n_1, bi n_2, bi n_3 là các bi n đ c s d ng đ l u tr các giá tr NSD nh p ế ế ế ế ượ ử ụ ể ư ữ ị ậ
vào t bàn phím. Khái ni m bi n s đ c mô t c th h n trong ch ng 2, đây ừ ệ ế ẽ ượ ả ụ ể ơ ươ ở
bi n_1, bi n_2, bi n_3 đ c hi u là các tên g i đ ch 3 giá tr khác nhau. Hi n nhiên ế ế ế ượ ể ọ ể ỉ ị ể
Các giá tr này có th là tên c a bi n ho c các k t h p tính toán trên bi n. ị ể ủ ế ặ ế ợ ế
Ví d đ in câu "Chi u dài là " và s 23 và ti p theo là ch "mét", ta có th s ụ ể ề ố ế ữ ể ử
d ng 3 l nh sau đây: ụ ệ
cout << "Chi u dài là" ; ề
cout << 23 ;
cout << "mét";
ho c có th ch b ng 1 l nh: ặ ể ỉ ằ ệ
cout << "Chi u dài là 23 mét" ; ề
Tr ng h p ch a bi t giá tr c th c a chi u dài, ch bi t hi n t i giá tr này đã ườ ợ ư ế ị ụ ể ủ ề ỉ ế ệ ạ ị
đ c l u trong bi n cd (ví d đã đ c nh p vào là 23 t bàn phím b i câu l nh cin >> ượ ư ế ụ ượ ậ ừ ở ệ
cd tr c đó) và ta c n bi t giá tr này là bao nhiêu thì có th s d ng câu l nh in ra màn ướ ầ ế ị ể ử ụ ệ
hình.
cout << "Chi u dài là" << cd << "mét" ; ề
Khi đó trên màn hình s hi n ra dòng ch : "Chi u dài là 23 mét". Nh v y trong ẽ ệ ữ ề ư ậ
tr ng h p này ta ph i dùng đ n ba l n d u phép toán << ch không ph i m t nh câu ườ ợ ả ế ầ ấ ứ ả ộ ư
l nh trên. Ngoài ra ph thu c vào giá tr hi n đ c l u trong bi n cd, ch ng trình s ệ ụ ộ ị ệ ượ ư ế ươ ẽ
in ra s chi u dài thích h p ch không ch in c đ nh thành "chi u dài là 23 mét". Ví d ố ề ợ ứ ỉ ố ị ề ụ
n u cd đ c nh p là 15 thì l nh trên s in câu "chi u dài là 15 mét". ế ượ ậ ệ ẽ ề
M t giá tr c n in không ch là m t bi n nh cd, cr, mà còn có th là m t bi u ộ ị ầ ỉ ộ ế ư ể ộ ể
th c, đi u này cho phép ta d dàng yêu c u máy in ra di n tích và chu vi c a hình ch ứ ề ễ ầ ệ ủ ữ
nh t khi đã bi t cd và cr b ng các câu l nh sau: ậ ế ằ ệ
cout << "Di n tích = " << cd * cr ; ệ
cout << "Chu vi = " << 2 * (cd + cr) ;
ho c g p t t c thành 1 câu l nh: ặ ộ ấ ả ệ
cout << Di n tích = " << cd * cr << ‘\n’ << " Chu vi = " << 2 * (cd + cr) ; ệ
đây có m t kí t đ c bi t: đó là kí t '\n' kí hi u cho kí t xu ng dòng, khi g p ở ộ ự ặ ệ ự ệ ự ố ặ
kí t này ch ng trình s in các ph n ti p theo đ u dòng k ti p. Do đó k t qu c a ự ươ ẽ ầ ế ở ầ ế ế ế ả ủ
câu l nh trên là 2 dòng sau đây trên màn hình: ệ
11Ch ng 1. Các khái ni m c b n c a C++ ươ ệ ơ ả ủ
Di n tích = 253 ệ
ch ng trình d ng đ ch nh n chi u dài và chi u r ng, NSD nh p các giá tr c th , ươ ừ ể ờ ậ ề ề ộ ậ ị ụ ể
ch ng trình s ti p t c th c hi n và in ra k t qu . Thông qua câu l nh nh p d li u và ươ ẽ ế ụ ự ệ ế ả ệ ậ ữ ệ
2 bi n cd, cr NSD có th yêu c u ch ng trình cho k t qu c a m t hình ch nh t b t ế ể ầ ươ ế ả ủ ộ ữ ậ ấ
12Ch ng 1. Các khái ni m c b n c a C++ ươ ệ ơ ả ủ
kỳ ch không ch trong tr ng h p hình có chi u dài 23 và chi u r ng 11 nh trong ví ứ ỉ ườ ợ ề ề ộ ư
d c th trên. ụ ụ ể
3. Đ nh d ng thông tin c n in ra màn hình ị ạ ầ
M t s đ nh d ng đ n gi n đ c chúng tôi trình bày tr c đây. Các đ nh d ng ộ ố ị ạ ơ ả ượ ướ ở ị ạ
chi ti t và ph c t p h n s đ c trình bày trong các ph n sau c a giáo trình. Đ s ế ứ ạ ơ ẽ ượ ầ ủ ể ử
d ng các đ nh d ng này c n khai báo file nguyên m u <iomanip.h> đ u ch ng trình ụ ị ạ ầ ẫ ở ầ ươ
b ng ch th #include <iomanip.h>. ằ ỉ ị
− endl: T ng đ ng v i kí t xu ng dòng '\n'. ươ ươ ớ ự ố
− setw(n): Bình th ng các giá tr đ c in ra b i l nh cout << s th ng theo l ườ ị ượ ở ệ ẽ ẳ ề
trái v i đ r ng ph thu c vào đ r ng c a giá tr đó. Ph ng th c này qui ớ ộ ộ ụ ộ ộ ộ ủ ị ươ ứ
đ nh đ r ng dành đ in ra các giá tr là n c t màn hình. N u n l n h n đ dài ị ộ ộ ể ị ộ ế ớ ơ ộ
th c c a giá tr , giá tr s in ra theo l ph i, đ tr ng ph n th a (d u cách) ự ủ ị ị ẽ ề ả ể ố ầ ừ ấ ở
tr c. ướ
− setprecision(n): Ch đ nh s ch s c a ph n th p phân in ra là n. S s đ c ỉ ị ố ữ ố ủ ầ ậ ố ẽ ượ
làm tròn tr c khi in ra. ướ
− setiosflags(ios::showpoint): Ph ng th c setprecision ch có tác d ng trên ươ ứ ỉ ụ
m t dòng in. Đ c đ nh các giá tr đã đ t cho m i dòng in (cho đ n khi đ t l i ộ ể ố ị ị ặ ọ ế ặ ạ
giá tr m i) ta s d ng ph ng th c setiosflags(ios::showpoint). ị ớ ử ụ ươ ứ
Ví d sau minh ho cách s d ng các ph ng th c trên. ụ ạ ử ụ ươ ứ
Ví d 3 : ụ
#include <iostream.h> // đ s d ng cout << ể ử ụ
#include <iomanip.h> // đ s d ng các đ nh d ng ể ử ụ ị ạ
#include <conio.h> // đ s d ng các hàm clrscr() và getch() ể ử ụ
void main()
{
int x;
char c;
cin >> x; cin.ignore(1);
cin.get(c);
4. Vào/ra trong C
Trong ph n trên chúng tôi đã trình bày 2 toán t vào/ra và m t s ph ng th c, ầ ử ộ ố ươ ứ
hàm nh p và đ nh d ng trong C++. Ph n này chúng tôi trình bày các câu lênh nh p ậ ị ạ ầ ậ
xu t theo khuôn d ng cũ trong C. Hi n nhiên các câu l nh này v n dùng đ c trong ấ ạ ể ệ ẫ ượ
ch ng trình vi t b ng C++, tuy nhiên ch nên s d ng ho c các câu l nh c a C++ ươ ế ằ ỉ ử ụ ặ ệ ủ
ho c c a C, không nên dùng l n l n c hai vì d gây nh m l n. Do đó m c này ch có ặ ủ ẫ ộ ả ễ ầ ẫ ụ ỉ
14Ch ng 1. Các khái ni m c b n c a C++ ươ ệ ơ ả ủ
giá tr tham kh o đ b n đ c có th hi u đ c các câu l nh vào/ra trong các ch ng ị ả ể ạ ọ ể ể ượ ệ ươ
trình vi t theo NNLT C cũ. ế
a. In k t qu ra màn hình ế ả
Đ in các giá tr bt_1, bt_2, …, bt_n ra màn hình theo m t khuôn d ng mong ể ị ộ ạ
mu n ta có th s d ng câu l nh sau đây: ố ể ử ụ ệ
printf(dòng đ nh d ng, bt_1, bt_2, , bt_n) ; ị ạ
trong đó dòng đ nh d ng là m t dãy kí t đ t trong c p d u nháy kép (“”) qui đ nh ị ạ ộ ự ặ ặ ấ ị
khuôn d ng c n in c a các giá tr bt_1, bt_2, …, bt_n. Các bt_i có th là các h ng, bi n ạ ầ ủ ị ể ằ ế
hay các bi u th c tính toán. Câu l nh trên s in giá tr c a các bt_i này theo th t xu t ể ứ ệ ẽ ị ủ ứ ự ấ
hi n c a chúng và theo qui đ nh đ c cho trong dòng đ nh d ng. ệ ủ ị ượ ị ạ
Ví d , gi s x = 4, câu l nh: ụ ả ử ệ
printf(“%d %0.2f”, 3, x + 1) ;
s in các s 3 và 5.00 ra màn hình, trong đó 3 đ c in d i d ng s nguyên (đ c ẽ ố ượ ướ ạ ố ượ
qui đ nh b i “%d”) và x + 1 (có giá tr là 5) đ c in d i d ng s th c v i 2 s l th p ị ở ị ượ ướ ạ ố ự ớ ố ẻ ậ
phân (đ c qui đ nh b i “%0.2f”). C th , các kí t đi sau kí hi u % dùng đ đ nh d ng ượ ị ở ụ ể ự ệ ể ị ạ
vi c in g m có: ệ ồ
d in s nguyên d i d ng h th p phân ố ướ ạ ệ ậ
o in s nguyên d ng h 8 ố ạ ệ
main()
{
int i = 2, j = 3 ;
printf(“Ch ng trình tính t ng 2 s nguyên:\ni + j = %d”, i+j); ươ ổ ố
}
s in ra: ẽ
Ch ng trình tính t ng 2 s nguyên: ươ ổ ố
i + j = 5.
b. Nh p d li u t bàn phím ậ ữ ệ ừ
scanf(dòng đ nh d ng, bi n_1, bi n_2, , bi n_n) ; ị ạ ế ế ế
L nh này cho phép nh p d li u vào cho các bi n bi n_1, …, bi n_n. Trong đó ệ ậ ữ ệ ế ế ế
dòng đ nh d ng ch a các đ nh d ng v ki u bi n (nguyên, th c, kí t …) đ c vi t nh ị ạ ứ ị ạ ề ể ế ự ự ượ ế ư
trong mô t câu l nh printf. Các bi n đ c vi t d i d ng đ a ch c a chúng t c có d u ả ệ ế ượ ế ướ ạ ị ỉ ủ ứ ấ
& tr c m i tên bi n. Ví d câu l nh: ướ ỗ ế ụ ệ
scanf(“%d %f %ld”, &x, &y, &z) ;
cho phép nh p giá tr cho các bi n x, y, z trong đó x là bi n nguyên, y là bi n th c ậ ị ế ế ế ự
và z là bi n nguyên dài (long). Câu l nh: ế ệ
16Ch ng 1. Các khái ni m c b n c a C++ ươ ệ ơ ả ủ
scanf(“%2d %f %lf %3s”, &i, &x, &d, s);
cho phép nh p giá tr cho các bi n i, x, d, s, trong đó i là bi n nguyên có 2 ch s , ậ ị ế ế ữ ố
f là bi n th c (đ dài tùy ý), d là bi n nguyên dài và s là xâu kí t có 3 kí t . Gi s ế ự ộ ế ự ự ả ử
NSD nh p vào dãy d li u: 12345 67abcd ậ ữ ệ ↵ thì các bi n trên s đ c gán các giá tr ế ẽ ượ ị
nh sau: i = 12, x = 345, d = 67 và s = “abc”. Kí t d và d u enter (ư ự ấ ↵) s đ c l u l i ẽ ượ ư ạ
trong b nh và t đ ng gán cho các bi n c a l n nh p sau. ộ ớ ự ộ ế ủ ầ ậ
Cu i cùng, ch ng trình trong ví d 3 đ c vi t l i v i printf() và scanf() nh sau: ố ươ ụ ượ ế ạ ớ ư
Ví d 5 : ụ
#include <stdio.h> // đ s d ng các hàm printf() và scanf() ể ử ụ
#include <conio.h> // đ s d ng các hàm clrscr() và getch() ể ử ụ
− th ng theo l ph i 12.78 -11.678 ẳ ề ả
− th ng theo d u ch m th p phân -124. 6 59.002 ẳ ấ ấ ậ
65.7 -1200.654
6. Hãy vi t và ch y các ch ng trình trong các ví d 3, 5. ế ạ ươ ụ
7. Ch ng trình sau khai báo 5 bi n kí t a, b, c, d, e và m t bi n s nam. Hãy đi n ươ ế ự ộ ế ố ề
thêm các câu l nh vào các dòng … đ ch ng trình th c hi n nhi m v sau: ệ ể ươ ự ệ ệ ụ
− Nh p giá tr cho bi n nam ậ ị ế
− Nh p giá tr cho các bi n kí t a, b, c, d, e. ậ ị ế ự
− In ra màn hình dòng ch đ c ghép b i 5 kí t đã nh p và ch "năm" sau đó ữ ượ ở ự ậ ữ
in s đã nh p (nam). Ví d n u 5 ch cái đã nh p là 'H', 'A', 'N', 'O', 'I' và nam ố ậ ụ ế ữ ậ
đ c nhap là 2000, thì màn hình in ra dòng ch : HANOI năm 2000. ượ ữ
− Nh p ch ng trình đã s a vào máy và ch y đ ki m tra k t qu . ậ ươ ử ạ ể ể ế ả
#include <iostream.h>
#include <conio.h>
main()
{
int nam;
char a, b, c, d, e;
clrscr();
cin >> nam ;
… ;
cin.get(a); cin.get(b); cin.get(c); … ; … ;
18Ch ng 1. Các khái ni m c b n c a C++ ươ ệ ơ ả ủ
// in k t qu ế ả
cout << a << … << … << … << … << " nam " << … ;
getch();
}
19Ch ng 2. Ki u d li u, bi u th c và câu l nh ươ ể ữ ệ ể ứ ệ
CH NG 2 ƯƠ
− Mi n giá tr c a ki u: Cho bi t m t đ n v d li u thu c ki u này s có th l y ề ị ủ ể ế ộ ơ ị ữ ệ ộ ể ẽ ể ấ
20Ch ng 2. Ki u d li u, bi u th c và câu l nh ươ ể ữ ệ ể ứ ệ
giá tr trong mi n nào, ví d nh nh t và l n nh t là bao nhiêu. Hi n nhiên các ị ề ụ ỏ ấ ớ ấ ể
giá tr này ph thu c vào s byte mà h th ng máy qui đ nh cho t ng ki u. ị ụ ộ ố ệ ố ị ừ ể
NSD c n nh đ n mi n giá tr này đ khai báo ki u cho các bi n c n s d ng ầ ớ ế ề ị ể ể ế ầ ử ụ
m t cách thích h p. ộ ợ
D i đây là b ng tóm t t m t s ki u chu n đ n gi n và các thông s c a nó đ c ướ ả ắ ộ ố ể ẩ ơ ả ố ủ ượ
s d ng trong C++. ử ụ
Lo i d li u Tên ki u S ô nh Mi n giá tr ạ ữ ệ ể ố ớ ề ị
Kí t char 1 byte − 128 127 ự
unsigned char 1 byte 0 255
S nguyên int 2 byte − 32768 32767 ố
unsigned int 2 byte 0 65535
short 2 byte − 32768 32767
long 4 byte − 215
215
– 1
S th c float 4 byte ± 10 ố ự
-37
. . ± 10
+38
double 8 byte ± 10
-307
. . ± 10
+308
B ng 1. Các lo i ki u đ n gi n ả ạ ể ơ ả
Trong ch ng này chúng ta ch xét các lo i ki u đ n gi n trên đây. Các lo i ki u ươ ỉ ạ ể ơ ả ạ ể
có c u trúc do ng i dùng đ nh nghĩa s đ c trình bày trong các ch ng sau. ấ ườ ị ẽ ượ ươ
s d n đ n k t qu không theo suy nghĩ thông th ng. Do v y nên tuân th qui t c ch ẽ ẫ ế ế ả ườ ậ ủ ắ ỉ
gán giá tr cho bi n thu c mi n giá tr mà ki u c a bi n đó qui đ nh. Ví d n u mu n s ị ế ộ ề ị ể ủ ế ị ụ ế ố ử
d ng bi n có giá tr t 128 255 ta nên khai báo bi n d i d ng kí t không d u ụ ế ị ừ ế ướ ạ ự ấ
(unsigned char), còn n u giá tr v t quá 255 ta nên chuy n sang ki u nguyên (int) ế ị ượ ể ể
ch ng h n. ẳ ạ
3. Ki u s nguyên ể ố
Các s nguyên đ c phân chia thành 4 lo i ki u khác nhau v i các mi n giá tr ố ượ ạ ể ớ ề ị
t ng ng đ c cho trong b ng 1. Đó là ki u s nguyên ng n (short) t ng đ ng v i ươ ứ ượ ả ể ố ắ ươ ươ ớ
ki u s nguyên (int) s d ng 2 byte và s nguyên dài (long int) s d ng 4 byte. Ki u s ể ố ử ụ ố ử ụ ể ố
nguyên th ng đ c chia làm 2 lo i có d u (int) và không d u (unsigned int ho c có ườ ượ ạ ấ ấ ặ
th vi t g n h n là unsigned). Qui t c mã bù cũng đ c áp d ng n u giá tr c a bi n ể ế ọ ơ ắ ượ ụ ế ị ủ ế
v t ra ngoài mi n giá tr cho phép, vì v y c n cân nh c khi khai báo ki u cho các ượ ề ị ậ ầ ắ ể
bi n. Ta th ng s d ng ki u int cho các s nguyên trong các bài toán v i mi n giá tr ế ườ ử ụ ể ố ớ ề ị
v a ph i (có giá tr tuy t đ i bé h n 32767), ch ng h n các bi n đ m trong các vòng ừ ả ị ệ ố ơ ẳ ạ ế ế
l p, ặ
4. Ki u s th c ể ố ự
Đ s d ng s th c ta c n khai báo ki u float ho c double mà mi n giá tr c a ể ử ụ ố ự ầ ể ặ ề ị ủ
chúng đ c cho trong b ng 1. Các giá tr s ki u double đ c g i là s th c v i đ ượ ả ị ố ể ượ ọ ố ự ớ ộ
chính xác g p đôi vì v i ki u d li u này máy tính có cách bi u di n khác so v i ki u ấ ớ ể ữ ệ ể ễ ớ ể
22Ch ng 2. Ki u d li u, bi u th c và câu l nh ươ ể ữ ệ ể ứ ệ
float đ đ m b o s s l sau m t s th c có th tăng lên đ m b o tính chính xác cao ể ả ả ố ố ẻ ộ ố ự ể ả ả
h n so v i s ki u float. Tuy nhiên, trong các bài toán thông d ng th ng ngày đ ơ ớ ố ể ụ ườ ộ
chính xác c a s ki u float là đ dùng. ủ ố ể ủ
Nh đã nh c đ n trong ph n các l nh vào/ra ch ng 1, liên quan đ n vi c in n ư ắ ế ầ ệ ở ươ ế ệ ấ
s th c ta có m t vài cách thi t đ t d ng in theo ý mu n, ví d đ r ng t i thi u đ in ố ự ộ ế ặ ạ ố ụ ộ ộ ố ể ể
m t s hay s s l th p phân c n in ộ ố ố ố ẻ ậ ầ
Ví d 2 : Ch ng trình sau đây s in di n tích và chu vi c a m t hình tròn có bán ụ ươ ẽ ệ ủ ộ
kính 2cm v i 3 s l . ớ ố ẻ
#include <iostream.h>
#include <iomanip.h>
. Ví d s π = 3.1416 có th đ c vi t: ụ ố ể ượ ế
π = … = 0.031416e2 = 0.31416e1 = 3.1416e0 = 31.416e−1 = 314.16e−2 = …
vì π = 0.031416 x 102
= 0.31416 x 101
= 3.1416 x 100
= …
Nh v y m t s x có th đ c vi t d i d ng mEn v i nhi u giá tr m, n khác ư ậ ộ ố ể ượ ế ướ ạ ớ ề ị
nhau, ph thu c vào d u ph y ngăn cách ph n nguyên và ph n th p phân c a s . Do ụ ộ ấ ả ầ ầ ậ ủ ố
v y cách vi t này đ c g i là d ng d u ph y đ ng. ậ ế ượ ọ ạ ấ ả ộ
3. H ng kí t ằ ự
a. Cách vi t h ng ế ằ
Có 2 cách đ vi t m t h ng kí t . Đ i v i các kí t có m t ch th hi n ta th ng ể ế ộ ằ ự ố ớ ự ặ ữ ể ệ ườ
s d ng cách vi t thông d ng đó là đ t m t ch đó gi a 2 d u nháy đ n nh : 'A', '3', ' ' ử ụ ế ụ ặ ặ ữ ữ ấ ơ ư
(d u cách) ho c s d ng tr c ti p giá tr s c a chúng. Ví d các giá tr t ng ng ấ ặ ử ụ ự ế ị ố ủ ụ ị ươ ứ
c a các kí t trên là 65, 51 và 32. V i m t s kí t không có m t ch ta bu c ph i dùng ủ ự ớ ộ ố ự ặ ữ ộ ả
giá tr (s ) c a chúng, nh vi t 27 thay cho kí t đ c nh n b i phím Escape, 13 thay ị ố ủ ư ế ự ượ ấ ở
cho kí t đ c nh n b i phím Enter ự ượ ấ ở
Đ bi u di n kí t b ng giá tr s ta có th vi t tr c ti p (không dùng c p d u ể ể ễ ự ằ ị ố ể ế ự ế ặ ấ
nháy đ n) giá tr đó d i d ng h s 10 (nh trên) ho c đ t chúng vào c p d u nháy ơ ị ướ ạ ệ ố ư ặ ặ ặ ấ
đ n, tr ng h p này ch dùng cho giá tr vi t d i d ng h 8 ho c h 16 theo m u sau: ơ ườ ợ ỉ ị ế ướ ạ ệ ặ ệ ẫ
− '\kkk': không quá 3 ch s trong h 8. Ví d '\11' bi u di n kí t có mã 9. ữ ố ệ ụ ể ễ ự
− '\xkk': không quá 2 ch s trong h 16. Ví d '\x1B' bi u di n kí t có mã 27. ữ ố ệ ụ ể ễ ự
Tóm l i, m t kí t có th có nhi u cách vi t, ch ng h n 'A' có giá tr là 65 (h 10) ạ ộ ự ể ề ế ẳ ạ ị ệ
ho c 101 (h 8) ho c 41 (h 16), do đó kí t 'A' có th vi t b i m t trong các d ng sau: ặ ệ ặ ệ ự ể ế ở ộ ạ
65, 0101, 0x41 ho c 'A' , '\101' , '\x41' ặ
T ng t , d u k t thúc xâu có giá tr 0 nên có th vi t b i 0 ho c '\0' ho c '\x0', ươ ự ấ ế ị ể ế ở ặ ặ
trong các cách này cách vi t '\0' đ c dùng thông d ng nh t. ế ượ ụ ấ
24Ch ng 2. Ki u d li u, bi u th c và câu l nh ươ ể ữ ệ ể ứ ệ
b. M t s h ng thông d ng ộ ố ằ ụ
Đ i v i m t s h ng kí t th ng dùng nh ng không có m t ch t ng ng, ho c ố ớ ộ ố ằ ự ườ ư ặ ữ ươ ứ ặ
T ng t ta không đ c vi t '' (2 d u nháy đ n li n nhau) vì không có khái ni m kí t ươ ự ượ ế ấ ơ ề ệ ự
25Ch ng 2. Ki u d li u, bi u th c và câu l nh ươ ể ữ ệ ể ứ ệ
"r ng". Đ ch xâu r ng (không có kí t nào) ta ph i vi t "" (2 d u nháy kép li n nhau). ỗ ể ỉ ỗ ự ả ế ấ ề
Tóm l i m t giá tr có th đ c vi t d i nhi u ki u d li u khác nhau và do đó ạ ộ ị ể ượ ế ướ ề ể ữ ệ
cách s d ng chúng cũng khác nhau. Ví d liên quan đ n khái ni m 3 đ n v có th có ử ụ ụ ế ệ ơ ị ể
các cách vi t sau tuy nhiên chúng hoàn toàn khác nhau: ế
− 3 : s nguyên 3 đ n v ố ơ ị
− 3L : s nguyên dài 3 đ n v ố ơ ị
− 3.0 : s th c 3 đ n v ố ự ơ ị
− '3' : ch s 3 ữ ố
− "3" : xâu ch a kí t duy nh t là 3 ứ ự ấ
5. Khai báo h ng ằ
M t giá tr c đ nh (h ng) đ c s d ng nhi u l n trong ch ng trình đôi khi s ộ ị ố ị ằ ượ ử ụ ề ầ ươ ẽ
thu n l i h n n u ta đ t cho nó m t tên g i, thao tác này đ c g i là khai báo h ng. Ví ậ ợ ơ ế ặ ộ ọ ượ ọ ằ
d m t ch ng trình qu n lý sinh viên v i gi thi t s sinh viên t i đa là 50. N u s ụ ộ ươ ả ớ ả ế ố ố ế ố
sinh viên t i đa không thay đ i trong ch ng trình ta có th đ t cho nó m t tên g i nh ố ổ ươ ể ặ ộ ọ ư
sosv ch ng h n. Trong su t ch ng trình b t kỳ ch nào xu t hi n giá tr 50 ta đ u có ẳ ạ ố ươ ấ ỗ ấ ệ ị ề
th thay nó b ng sosv. T ng t C++ cũng có nh ng tên h ng đ c đ t s n, đ c g i ể ằ ươ ự ữ ằ ượ ặ ẵ ượ ọ
là các h ng chu n và NSD có th s d ng khi c n thi t. Ví d h ng π đ c đ t s n ằ ẩ ể ử ụ ầ ế ụ ằ ượ ặ ẵ
trong C++ v i tên g i M_PI. Vi c s d ng tên h ng thay cho h ng có nhi u đi m thu n ớ ọ ệ ử ụ ằ ằ ề ể ậ
l i nh sau: ợ ư
− Ch ng trình d đ c h n, vì thay cho các con s ít có ý nghĩa, m t tên g i s ươ ễ ọ ơ ố ộ ọ ẽ
làm NSD d hình dung vai trò, n i dung c a nó. Ví d , khi g p tên g i sosv ễ ộ ủ ụ ặ ọ
NSD s hình dung đ c ch ng h n, "đây là s sinh viên t i đa trong m t l p", ẽ ượ ẳ ạ ố ố ộ ớ
trong khi s 50 có th là s sinh viên mà cũng có th là tu i c a m t sinh viên ố ể ố ể ổ ủ ộ
nào đó.
− Ch ng trình d s a ch a h n, ví d bây gi n u mu n thay đ i ch ng trình ươ ễ ử ữ ơ ụ ờ ế ố ổ ươ
sao cho bài toán qu n lý đ c th c hi n v i s sinh viên t i đa là 60, khi đó ta ả ượ ự ệ ớ ố ố
c n tìm và thay th hàng trăm v trí xu t hi n c a 50 thành 60. Vi c thay th ầ ế ị ấ ệ ủ ệ ế
nh v y d gây ra l i vì có th không tìm th y h t các s 50 trong ch ng ư ậ ễ ỗ ể ấ ế ố ươ
đ c khai báo ngay t đ u ch ng trình hay đ u c a hàm, tuy nhiên đ thu n ti n C++ ượ ừ ầ ươ ầ ủ ể ậ ệ
cho phép khai báo bi n ngay bên trong ch ng trình ho c hàm, có nghĩa b t kỳ lúc nào ế ươ ặ ấ
NSD th y c n thi t s d ng bi n m i, h có quy n khai báo và s d ng nó t đó tr đi. ấ ầ ế ử ụ ế ớ ọ ề ử ụ ừ ở
Cú pháp khai báo bi n g m tên ki u, tên bi n và có th có hay không kh i t o giá ế ồ ể ế ể ở ạ
tr ban đ u cho bi n. Đ kh i t o ho c thay đ i giá tr c a bi n ta dùng l nh gán (=). ị ầ ế ể ở ạ ặ ổ ị ủ ế ệ
a. Khai báo không kh i t o ở ạ
tên_ki u tên_bi n_1 ; ể ế
tên_ki u tên_bi n_2 ; ể ế
27Ch ng 2. Ki u d li u, bi u th c và câu l nh ươ ể ữ ệ ể ứ ệ
tên_ki u tên_bi n_3 ; ể ế
Nhi u bi n cùng ki u có th đ c khai báo trên cùng m t dòng: ề ế ể ể ượ ộ
tên_ki u tên_bi n_1, tên_bi n_2, tên_bi n_3 ; ể ế ế ế
Ví d : ụ
void main()
{
int i, j ; // khai báo 2 bi n i, j có ki u nguyên ế ể
float x ; // khai báo bi n th c x ế ự
char c, d[100] ; // bi n kí t c, xâu d ch a t i đa 100 kí t ế ự ứ ố ự
unsigned int u ; // bi n nguyên không d u u ế ấ
…
}
b. Khai báo có kh i t o ở ạ
Trong câu l nh khai báo, các bi n có th đ c gán ngay giá tr ban đ u b i phép ệ ế ể ượ ị ầ ở
toán gán (=) theo cú pháp:
tên_ki u tên_bi n_1 = gt_1, tên_bi n_2 = gt_2, tên_bi n_3 = gt_3 ; ể ế ế ế
trong đó các giá tr gt_1, gt_2, gt_3 có th là các h ng, bi n ho c bi u th c. ị ể ằ ế ặ ể ứ
Ví d : ụ
const int n = 10 ;
void main()
{
đó nó đã có giá tr là 2 (trong tr ng h p này vi c kh i t o giá tr 2 cho bi n i là không ị ườ ợ ệ ở ạ ị ế
có ý nghĩa).
M t khai báo có kh i t o cũng t ng đ ng v i m t khai báo và sau đó thêm ộ ở ạ ươ ươ ớ ộ
l nh gán cho bi n (ví d int i = 3 cũng t ng đ ng v i 2 câu l nh int i; i = 3) tuy ệ ế ụ ươ ươ ớ ệ
nhiên v m t b n ch t kh i t o giá tr cho bi n v n khác v i phép toán gán nh ta s ề ặ ả ấ ở ạ ị ế ẫ ớ ư ẽ
th y trong các ph n sau. ấ ầ
4. M t s đi m l u ý v phép gán ộ ố ể ư ề
V i ý nghĩa thông th ng c a phép toán (nghĩa là tính toán và cho l i m t giá tr ) ớ ườ ủ ạ ộ ị
thì phép toán gán còn m t nhi m v n a là tr l i m t giá tr . Giá tr tr l i c a phép ộ ệ ụ ữ ả ạ ộ ị ị ả ạ ủ
toán gán chính là giá tr c a bi u th c sau d u b ng. L i d ng đi u này C++ cho phép ị ủ ể ứ ấ ằ ợ ụ ề
chúng ta gán "kép" cho nhi u bi n nh n cùng m t giá tr b i cú pháp: ề ế ậ ộ ị ở
bi n_1 = bi n_2 = … = bi n_n = gt ; ế ế ế
v i cách gán này t t c các bi n s nh n cùng giá tr gt. Ví d : ớ ấ ả ế ẽ ậ ị ụ
29Ch ng 2. Ki u d li u, bi u th c và câu l nh ươ ể ữ ệ ể ứ ệ
int i, j, k ;
i = j = k = 1;
Bi u th c gán trên có th đ c vi t l i nh (i = (j = (k = 1))), có nghĩa đ u tiên đ ể ứ ể ượ ế ạ ư ầ ể
th c hi n phép toán gán giá tr cho bi n i ch ng trình ph i tính bi u th c (j = (k = 1)), ự ệ ị ế ươ ả ể ứ
t c ph i tính k = 1, đây là phép toán gán, gán giá tr 1 cho k và tr l i giá tr 1, giá tr tr ứ ả ị ả ạ ị ị ả
l i này s đ c gán cho j và tr l i giá tr 1 đ ti p t c gán cho i. ạ ẽ ượ ả ạ ị ể ế ụ
Ngoài vi c gán kép nh trên, phép toán gán còn đ c phép xu t hi n trong b t kỳ ệ ư ượ ấ ệ ấ
bi u th c nào, đi u này cho phép trong m t bi u th c có phép toán gán, nó không ch ể ứ ề ộ ể ứ ỉ
tính toán mà còn gán giá tr cho các bi n, ví d n = 3 + (i = 2) s cho ta i = 2 và n = 5. ị ế ụ ẽ
Vi c s d ng nhi u ch c năng c a m t câu l nh làm cho ch ng trình g n gàng h n ệ ử ụ ề ứ ủ ộ ệ ươ ọ ơ
(trong m t s tr ng h p) nh ng cũng tr nên khó đ c, ch ng h n câu l nh trên có th ộ ố ườ ợ ư ở ọ ẳ ạ ệ ể
vi t tách thành 2 câu l nh i = 2; n = 3 + i; s d đ c h n ít nh t đ i v i các b n m i b t ế ệ ẽ ễ ọ ơ ấ ố ớ ạ ớ ắ
đ u tìm hi u v l p trình. ầ ể ề ậ
IV. PHÉP TOÁN, BI U TH C VÀ CÂU L NH Ể Ứ Ệ
1. Phép toán
C++ có r t nhi u phép toán lo i 1 ngôi, 2 ngôi và th m chí c 3 ngôi. Đ h ấ ề ạ ậ ả ể ệ
Phép toán T ng đ ng K t qu ươ ươ ế ả
i = ++j ; // tăng tr c j = j + 1 ; i = j ; i = 16 , j = 16 ướ
i = j++ ; // tăng sau i = j ; j = j + 1 ; i = 15 , j = 16
j = ++i + 5 ; i = i + 1 ; j = i + 5 ; i = 4, j = 9
j = i++ + 5 ; j = i + 5; i = i + 1; i = 4, j = 8
Ghi chú: Vi c k t h p phép toán t tăng gi m vào trong bi u th c ho c câu l nh ệ ế ợ ự ả ể ứ ặ ệ
(nh ví d trong ph n sau) s làm ch ng trình g n nh ng khó hi u h n. ư ụ ầ ẽ ươ ọ ư ể ơ
c. Các phép toán so sánh và lôgic
Đây là các phép toán mà giá tr tr l i là đúng ho c sai. N u giá tr c a bi u th c ị ả ạ ặ ế ị ủ ể ứ
là đúng thì nó nh n giá tr 1, ng c l i là sai thì bi u th c nh n giá tr 0. Nói cách khác ậ ị ượ ạ ể ứ ậ ị
1 và 0 là giá tr c th c a 2 khái ni m "đúng", "sai". M r ng h n C++ quan ni m m t ị ụ ể ủ ệ ở ộ ơ ệ ộ
giá tr b t kỳ khác 0 là "đúng" và giá tr 0 là "sai". ị ấ ị
• Các phép toán so sánh
== (b ng nhau), != (khác nhau), > (l n h n), < (nh h n), >= (l n h n ằ ớ ơ ỏ ơ ớ ơ
ho c b ng), <= (nh h n ho c b ng). ặ ằ ỏ ơ ặ ằ
Hai toán h ng c a các phép toán này ph i cùng ki u. Ví d : ạ ủ ả ể ụ
3 == 3 ho c 3 == (4 -1) // nh n giá tr 1 vì đúng ặ ậ ị
3 == 5 // = 0 vì sai
3 != 5 // = 1
3 + (5 < 2) // = 3 vì 5<2 b ng 0 ằ
31Ch ng 2. Ki u d li u, bi u th c và câu l nh ươ ể ữ ệ ể ứ ệ
3 + (5 >= 2) // = 4 vì 5>=2 b ng 1 ằ
Chú ý: c n phân bi t phép toán gán (=) và phép toán so sánh (==). Phép gán v a ầ ệ ừ
gán giá tr cho bi n v a tr l i giá tr b t kỳ (là giá tr c a toán h ng bên ph i), trong ị ế ừ ả ạ ị ấ ị ủ ạ ả
khi phép so sánh luôn luôn tr l i giá tr 1 ho c 0. ả ạ ị ặ
• Các phép toán lôgic:
&& (và), || (ho c ), ! (không, ph đ nh) ặ ủ ị
Hai toán h ng c a lo i phép toán này ph i có ki u lôgic t c ch nh n m t trong ạ ủ ạ ả ể ứ ỉ ậ ộ
hai giá tr "đúng" (đ c th hi n b i các s nguyên khác 0) ho c "sai" (th hi n b i 0). ị ượ ể ệ ở ố ặ ể ệ ở