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 ả
NGÔN NG L P TRÌNH C/C++ Ữ Ậ
Hà N i – 2003 ộ
L I NÓI Đ U Ờ Ầ
Ngôn ng l p trình (NNLT) C/C++ là m t trong nh ng ngôn ng l p trình ữ ậ ộ ữ ữ ậ
h ng đ i t ng m nh và ph bi n hi n nay do tính m m d o và đa năng c a nó. ướ ố ượ ạ ổ ế ệ ề ẻ ủ
Không ch các ng d ng đ c vi t trên C/C++ mà c nh ng ch ng trình h th ng ỉ ứ ụ ượ ế ả ữ ươ ệ ố
l n đ u đ c vi t h u h t trên C/C++. C++ là ngôn ng l p trình h ng đ i t ng ớ ề ượ ế ầ ế ữ ậ ướ ố ượ
đ c phát tri n trên n n t ng c a C, không nh ng kh c ph c m t s nh c đi m ượ ể ề ả ủ ữ ắ ụ ộ ố ượ ể
c a ngôn ng C mà quan tr ng h n, C++ cung c p cho ng i s d ng (NSD) m t ủ ữ ọ ơ ấ ườ ử ụ ộ
ph ng ti n l p trình theo k thu t m i: l p trình h ng đ i t ng. Đây là k thu t ươ ệ ậ ỹ ậ ớ ậ ướ ố ượ ỹ ậ
l p trình đ c s d ng h u h t trong các ngôn ng m nh hi n nay, đ c bi t là các ậ ượ ử ụ ầ ế ữ ạ ệ ặ ệ
ngôn ng ho t đ ng trong môi tru ng Windows nh Microsoft Access, Visual ữ ạ ộ ờ ư
Basic, Visual Foxpro …
Hi n nay NNLT C/C++ đã đ c đ a vào gi ng d y trong h u h t các tr ng ệ ượ ư ả ạ ầ ế ườ
Đ i h c, Cao đ ng đ thay th m t s NNLT đã cũ nh FORTRAN, Pascal … T p ạ ọ ẳ ể ế ộ ố ư ậ
bài gi ng này đ c vi t ra v i m c đích đó, trang b ki n th c và k năng th c hành ả ượ ế ớ ụ ị ế ứ ỹ ự
cho sinh viên b t đ u h c vào NNLT C/C++ t i Khoa Công ngh , Đ i h c Qu c gia ắ ầ ọ ạ ệ ạ ọ ố
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 ể ưở ố ả ượ ế ộ ấ ặ ẽ
th ng đ c g i là thu t toán ho c gi i thu t và theo đúng các qui t c c a ngôn ng ườ ượ ọ ậ ặ ả ậ ắ ủ ữ
g i là cú pháp ho c văn ph m. Trong giáo trình này chúng ta bàn đ n m t ngôn ng ọ ặ ạ ế ộ ữ
l p trình nh v y, đó là ngôn ng l p trình C++ và làm th nào đ th hi n các ý t ng ậ ư ậ ữ ậ ế ể ể ệ ưở
gi i quy t v n đ b ng cách vi t thành ch ng trình trong C++. ả ế ấ ề ằ ế ươ
Tr c h t, trong m c này chúng ta s trình bày v các qui đ nh b t bu c đ n gi n ướ ế ụ ẽ ề ị ắ ộ ơ ả
và c b n nh t. Thông th ng các qui đ nh này s đ c nh d n trong quá trình h c ơ ả ấ ườ ị ẽ ượ ớ ầ ọ
ngôn ng , tuy nhiên đ có m t vài khái ni m t ng đ i h th ng v NNLT C++ chúng ữ ể ộ ệ ươ ố ệ ố ề
ta trình bày s l c các khái ni m c b n đó. Ng i đ c đã t ng làm quen v i các ơ ượ ệ ơ ả ườ ọ ừ ớ
NNLT khác có th đ c l t qua ph n này. ể ọ ướ ầ
1. B ng ký t c a C++ ả ự ủ
H u h t các ngôn ng l p trình hi n nay đ u s d ng các kí t ti ng Anh, các kí ầ ế ữ ậ ệ ề ử ụ ự ế
hi u thông d ng và các con s đ th hi n ch ng trình. Các kí t c a nh ng ngôn ng ệ ụ ố ể ể ệ ươ ự ủ ữ ữ
khác không đ c s d ng (ví d các ch cái ti ng Vi t). D i đây là b ng kí t đ c ượ ử ụ ụ ữ ế ệ ướ ả ự ượ
phép dùng đ t o nên nh ng câu l nh c a ngôn ng C++. ể ạ ữ ệ ủ ữ
− Các ch cái la tinh (vi t th ng và vi t hoa): a z và A Z. Cùng m t ch cái ữ ế ườ ế ộ ữ
nh ng vi t th ng phân bi t v i vi t hoa. Ví d ch cái 'a' là khác v i 'A'. ư ế ườ ệ ớ ế ụ ữ ớ
− D u g ch d i: _ ấ ạ ướ
− Các ch s th p phân: 0, 1, . ., 9. ữ ố ậ
1Ch ng 1. Các khái ni m c b n c a C++ ươ ệ ơ ả ủ
− Các ký hi u toán h c: +, -, *, /, % , &, ||, !, >, <, = ệ ọ
− Các ký hi u đ c bi t khác: , ;: [ ], {}, #, d u cách, ệ ặ ệ ấ
2. T khoá ừ
M t t khoá là m t t đ c qui đ nh tr c trong NNLT v i m t ý nghĩa c đ nh, ộ ừ ộ ừ ượ ị ướ ớ ộ ố ị
th ng dùng đ ch các lo i d li u ho c k t h p thành câu l nh. NSD có th t o ra ườ ể ỉ ạ ữ ệ ặ ế ợ ệ ể ạ
nh ng t m i đ ch các đ i t ng c a mình nh ng không đ c phép trùng v i t ữ ừ ớ ể ỉ ố ượ ủ ư ượ ớ ừ
khoá. D i đây chúng tôi li t kê m t vài t khoá th ng g p, ý nghĩa c a các t này, s ướ ệ ộ ừ ườ ặ ủ ừ ẽ
đ c trình bày d n trong các đ m c liên quan. ượ ầ ề ụ
auto, break, case, char, continue, default, do, double, else, externe, float,
for, goto, if, int, long, register, return, short, sizeof, static, struct, switch,
typedef, union, unsigned, while
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 ) ề ặ ạ ữ ặ ấ ở ở
và */ (đóng).
− N u chú thích b t đ u t m t v trí nào đó cho đ n h t dòng, thì ta đ t d u // ế ắ ầ ừ ộ ị ế ế ặ ấ ở
v trí đó. Nh v y // s d ng cho các chú thích ch trên 1 dòng. ị ư ậ ử ụ ỉ
Nh đã nh c trên, vai trò c a đo n chú thích là làm cho ch ng trình d hi u ư ắ ở ủ ạ ươ ễ ể
đ i v i ng i đ c, vì v y đ i v i máy các đo n chú thích s đ c b qua. L i d ng đ c ố ớ ườ ọ ậ ố ớ ạ ẽ ượ ỏ ợ ụ ặ
đi m này c a chú thích đôi khi đ t m th i b qua m t đo n l nh nào đó trong ch ng ể ủ ể ạ ờ ỏ ộ ạ ệ ươ
trình (nh ng không xoá h n đ kh i ph i gõ l i khi c n dùng đ n) ta có th đ t các d u ư ẳ ể ỏ ả ạ ầ ế ể ặ ấ
chú thích bao quanh đo n l nh này (ví d khi ch y th ch ng trình, g l i ), khi c n ạ ệ ụ ạ ử ươ ỡ ỗ ầ
s d ng l i ta có th b các d u chú thích. ử ụ ạ ể ỏ ấ
Chú ý: C p d u chú thích /* */ không đ c phép vi t l ng nhau, ví d dòng chú ặ ấ ượ ế ồ ụ
thích sau là không đ c phép ượ
/* Đây là đo n chú thích /* ch a đo n chú thích này */ nh đo n chú thích con */ ạ ứ ạ ư ạ
c n ph i s a l i nh sau: ầ ả ử ạ ư
• ho c ch gi l i c p d u chú thích ngoài cùng ặ ỉ ữ ạ ặ ấ
/* Đây là đo n chú thích ch a đo n chú thích này nh đo n chú thích con */ ạ ứ ạ ư ạ
• ho c chia thành các đo n chú thích liên ti p nhau ặ ạ ế
/* Đây là đo n chú thích */ /*ch a đo n chú thích này*/ /*nh đo n chú thích con */ ạ ứ ạ ư ạ
II. MÔI TR NG LÀM VI C C A C++ ƯỜ Ệ Ủ
1. Kh i đ ng - Thoát kh i C++ ở ộ ỏ
Kh i đ ng C++ cũng nh m i ch ng trình khác b ng cách nh p đúp chu t lên ở ộ ư ọ ươ ằ ấ ộ
bi u t ng c a ch ng trình. Khi ch ng trình đ c kh i đ ng s hi n ra giao di n ể ượ ủ ươ ươ ượ ở ộ ẽ ệ ệ
g m có menu công vi c và m t khung c a s bên d i ph c v cho so n th o. M t con ồ ệ ộ ử ổ ướ ụ ụ ạ ả ộ
3Ch ng 1. Các khái ni m c b n c a C++ ươ ệ ơ ả ủ
tr nh p nháy trong khung c a s và chúng ta b t đ u nh p n i dung (văn b n) ch ng ỏ ấ ử ổ ắ ầ ậ ộ ả ươ
trình vào trong khung c a s so n th o này. M c đích c a giáo trình này là trang b ử ổ ạ ả ụ ủ ị
nh ng ki n th c c b n c a l p trình thông qua NNLT C++ cho các sinh viên m i b t ữ ế ứ ơ ả ủ ậ ớ ắ
đ u nên chúng tôi v n ch n trình bày giao di n c a các trình biên d ch quen thu c là ầ ẫ ọ ệ ủ ị ộ
Turbo C ho c Borland C. V các trình biên d ch khác đ c gi có th t tham kh o trong ặ ề ị ộ ả ể ự ả
các tài li u liên quan. ệ
Đ k t thúc làm vi c v i C++ (so n th o, ch y ch ng trình ) và quay v môi ể ế ệ ớ ạ ả ạ ươ ề
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). ướ ị ỏ
− Các thao tác v i kh i dòng: Đ đánh d u kh i dòng (th c ch t là kh i kí t ớ ố ể ấ ố ự ấ ố ự
li n nhau b t kỳ) ta đ a con tr đ n v trí đ u n Ctrl-KB và Ctrl-KK t i v trí ề ấ ư ỏ ế ị ầ ấ ạ ị
cu i. Cũng có th thao tác nhanh h n b ng cách gi phím Shift và dùng các ố ể ơ ằ ữ
phím d ch chuy n con tr quét t v trí đ u đ n v trí cu i, khi đó kh i kí t ị ể ỏ ừ ị ầ ế ị ố ố ự
đu c đánh d u s chuy n m u n n. M t kh i đ c đánh d u có th dùng đ ợ ấ ẽ ể ầ ề ộ ố ượ ấ ể ể
c t, dán vào m t n i khác trong văn b n ho c xoá kh i văn b n. Đ th c hi n ắ ộ ơ ả ặ ỏ ả ể ự ệ
thao tác c t dán, đ u tiên ph i đ a kh i đã đánh d u vào b nh đ m b ng ắ ầ ả ư ố ấ ộ ớ ệ ằ
nhóm phím Shift-Delete (c t), sau đó d ch chuy n con tr đ n v trí m i c n ắ ị ể ỏ ế ị ớ ầ
hi n n i dung v a c t và n t h p phím Shift-Insert. M t đo n văn b n đ c ệ ộ ừ ắ ấ ổ ợ ộ ạ ả ượ
ghi vào b nh đ m có th đ c dán nhi u l n vào nhi u v trí khác nhau b ng ộ ớ ệ ể ượ ề ầ ề ị ằ
cách l p l i t h p phím Shift-Insert t i các v trí khác nhau trong văn b n. Đ ặ ạ ổ ợ ạ ị ả ể
xoá m t kh i dòng đã đánh d u mà không ghi vào b nh đ m, dùng t h p ộ ố ấ ộ ớ ệ ổ ợ
phím Ctrl-Delete. Khi m t n i dung m i ghi vào b nh đ m thì nó s xoá ộ ộ ớ ộ ớ ệ ẽ
(ghi đè) n i dung cũ đã có, do v y c n cân nh c đ s d ng phím Ctrl-Delete ộ ậ ầ ắ ể ử ụ
(xoá và không l u l i n i dung v a xoá vào b đ m) và Shift-Delete (xoá và ư ạ ộ ừ ộ ệ
l u l i n i dung v a xoá) m t cách phù h p. ư ạ ộ ừ ộ ợ
− T h p phím Ctrl-A r t thu n l i khi c n đánh d u nhanh toàn b văn b n. ổ ợ ấ ậ ợ ầ ấ ộ ả
c. Ch c năng tìm ki m và thay th ứ ế ế
Ch c năng này dùng đ d ch chuy n nhanh con tr văn b n đ n t c n tìm. Đ ứ ể ị ể ỏ ả ế ừ ầ ể
th c hi n tìm ki m b m Ctrl-QF, tìm ki m và thay th b m Ctrl-QA. Vào t ho c ự ệ ế ấ ế ế ấ ừ ặ
nhóm t c n tìm vào c a s Find, nhóm thay th (n u dùng Ctrl-QA) vào c a s ừ ầ ử ổ ế ế ử ổ
Replace và đánh d u vào các tuỳ ch n trong c a s bên d i sau đó n Enter. Các tuỳ ấ ọ ử ổ ướ ấ
ch n g m: không phân bi t ch hoa/th ng, tìm t đ c l p hay đ ng trong t khác, tìm ọ ồ ệ ữ ườ ừ ộ ậ ứ ừ
trong toàn văn b n hay ch trong ph n đ c đánh d u, chi u tìm đi đ n cu i hay ng c ả ỉ ầ ượ ấ ề ế ố ượ
v đ u văn b n, thay th có h i l i hay không h i l i … Đ d ch chuy n con tr đ n các ề ầ ả ế ỏ ạ ỏ ạ ể ị ể ỏ ế
vùng khác nhau trong m t menu hay c a s ch a các tuỳ ch n ta s d ng phím Tab. ộ ử ổ ứ ọ ử ụ
d. Các ch c năng liên quan đ n t p ứ ế ệ
− Ghi t p lên đĩa: Ch n menu File\Save ho c phím F2. N u tên t p ch a có (còn ệ ọ ặ ế ệ ư
mang tên Noname.cpp) máy s yêu c u cho tên t p. Ph n m r ng c a tên t p ẽ ầ ệ ầ ở ộ ủ ệ
đ c m c đ nh là CPP. ượ ặ ị
− 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. ể ổ ữ ử ổ ạ ả
− F7: Ch y ch ng trình theo t ng l nh, k c các l nh trong hàm con. ạ ươ ừ ệ ể ả ệ
− F8: Ch y ch ng trình theo t ng l nh trong hàm chính. ạ ươ ừ ệ
− F9: D ch và liên k t ch ng trình. Th ng dùng ch c năng này đ tìm l i cú ị ế ươ ườ ứ ể ỗ
pháp c a ch ng trình ngu n tr c khi ch y. ủ ươ ồ ướ ạ
− Alt-F7: Chuy n con tr v n i gây l i tr c đó. ể ỏ ề ơ ỗ ướ
− Alt-F8: Chuy n con tr đ n l i ti p theo. ể ỏ ế ỗ ế
6 Ch ng 1. Các khái ni m c b n c a C++ ươ ệ ơ ả ủ
− Ctrl-F9: Ch y ch ng trình. ạ ươ
− Ctrl-Insert: L u kh i văn b n đ c đánh d u vào b nh đ m. ư ố ả ượ ấ ộ ớ ệ
− Shift-Insert: Dán kh i văn b n trong b nh đ m vào văn b n t i v trí con tr . ố ả ộ ớ ệ ả ạ ị ỏ
− Shift-Delete: Xoá kh i văn b n đ c đánh d u, l u nó vào b nh đ m. ố ả ượ ấ ư ộ ớ ệ
− Ctrl-Delete: Xoá kh i văn b n đ c đánh d u (không l u vào b nh đ m). ố ả ượ ấ ư ộ ớ ệ
− Alt-F5: Chuy n sang c a s xem k t qu c a ch ng trình v a ch y xong. ể ử ổ ế ả ủ ươ ừ ạ
− Alt-X: thoát C++ v l i Windows. ề ạ
3. C u trúc m t ch ng trình trong C++ ấ ộ ươ
M t ch ng trình C++ có th đ c đ t trong m t ho c nhi u file văn b n khác ộ ươ ể ượ ặ ộ ặ ề ả
nhau. M i file văn b n ch a m t s ph n nào đó c a ch ng trình. V i nh ng ch ng ỗ ả ứ ộ ố ầ ủ ươ ớ ữ ươ
trình đ n gi n và ng n th ng ch c n đ t chúng trên m t file. ơ ả ắ ườ ỉ ầ ặ ộ
M t ch ng trình g m nhi u hàm, m i hàm ph trách m t công vi c khác nhau ộ ươ ồ ề ỗ ụ ộ ệ
c a ch ng trình. Đ c bi t trong các hàm này có m t hàm duy nh t có tên hàm là ủ ươ ặ ệ ộ ấ
main(). Khi ch y ch ng trình, các câu l nh trong hàm main() s đ c th c hi n đ u ạ ươ ệ ẽ ượ ự ệ ầ
tiên. Trong hàm main() có th có các câu l nh g i đ n các hàm khác khi c n thi t, và ể ệ ọ ế ầ ế
các hàm này khi ch y l i có th g i đ n các hàm khác n a đã đ c vi t trong ch ng ạ ạ ể ọ ế ữ ượ ế ươ
trình (tr vi c g i quay l i hàm main()). Sau khi ch y đ n l nh cu i cùng c a hàm ừ ệ ọ ạ ạ ế ệ ố ủ
main() ch ng trình s k t thúc. ươ ẽ ế
C th , thông th ng m t ch ng trình g m có các n i dung sau: ụ ể ườ ộ ươ ồ ộ
− Ph n khai báo các t p nguyên m u: khai báo tên các t p ch a nh ng thành ầ ệ ẫ ệ ứ ữ
ph n có s n (nh các h ng chu n, ki u chu n và các hàm chu n) mà NSD s ầ ẵ ư ằ ẩ ể ẩ ẩ ẽ
dùng trong ch ng trình. ươ
− Ph n khai báo các ki u d li u, các bi n, h ng do NSD đ nh nghĩa và đ c ầ ể ữ ệ ế ằ ị ượ
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. ể ủ ố ự
2. Xác đ nh thu t toán gi i. ị ậ ả
3. C th hoá các khai báo ki u và thu t toán thành dãy các l nh, t c vi t thành ụ ể ể ậ ệ ứ ế
ch ng trình thông th ng là trên gi y, sau đó b t đ u so n th o vào trong ươ ườ ấ ắ ầ ạ ả
máy. Quá trình này đ c g i là so n th o ch ng trình ngu n. ượ ọ ạ ả ươ ồ
4. D ch ch ng trình ngu n đ tìm và s a các l i g i là l i cú pháp. ị ươ ồ ể ử ỗ ọ ỗ
5. Ch y ch ng trình, ki m tra k t qu in ra trên màn hình. N u sai, s a l i ạ ươ ể ế ả ế ử ạ
ch ng trình, d ch và ch y l i đ ki m tra. Quá trình này đ c th c hi n l p đi ươ ị ạ ạ ể ể ượ ự ệ ặ
l p l i cho đ n khi ch ng trình ch y t t theo yêu c u đ ra c a NSD. ặ ạ ế ươ ạ ố ầ ề ủ
2. So n th o t p ch ng trình ngu n ạ ả ệ ươ ồ
So n th o ch ng trình ngu n là m t công vi c đ n gi n: gõ n i dung c a ạ ả ươ ồ ộ ệ ơ ả ộ ủ
ch ng trình (đã vi t ra gi y) vào trong máy và l u l i nó lên đĩa. Thông th ng khi đã ươ ế ấ ư ạ ườ
l u l i ch ng trình lên đĩa l n sau s không c n ph i gõ l i. Có th so n ch ng trình ư ạ ươ ầ ẽ ầ ả ạ ể ạ ươ
ngu n trên các b so n th o (editor) khác nh ng ph i ch y trong môi tr ng tích h p ồ ộ ạ ả ư ả ạ ườ ợ
8 Ch ng 1. Các khái ni m c b n c a C++ ươ ệ ơ ả ủ
C++ (Borland C, Turbo C). M c đích c a so n th o là t o ra m t văn b n ch ng trình ụ ủ ạ ả ạ ộ ả ươ
và đ a vào b nh c a máy. Văn b n ch ng trình c n đ c trình bày sáng s a, rõ ư ộ ớ ủ ả ươ ầ ượ ủ
ràng. Các câu l nh c n gióng th ng c t theo c u trúc c a l nh (các l nh ch a trong m t ệ ầ ẳ ộ ấ ủ ệ ệ ứ ộ
l nh c u trúc đ c trình bày th t vào trong so v i đi m b t đ u c a l nh). Các chú ệ ấ ượ ụ ớ ể ắ ầ ủ ệ
thích nên ghi ng n g n, rõ nghĩa và phù h p. ắ ọ ợ
3. D ch ch ng trình ị ươ
Sau khi đã so n th o xong ch ng trình ngu n, b c ti p theo th ng là d ch ( n ạ ả ươ ồ ướ ế ườ ị ấ
t h p phím Alt-F9) đ tìm và s a các l i g i là l i cú pháp. Trong khi d ch C++ s đ t ổ ợ ể ử ỗ ọ ỗ ị ẽ ặ
con tr vào n i gây l i (vi t sai cú pháp) trong văn b n. Sau khi s a xong m t l i NSD ỏ ơ ỗ ế ả ử ộ ỗ
có th dùng Alt-F8 đ chuy n con tr đ n l i ti p theo ho c d ch l i. Đ chuy n con tr ể ể ể ỏ ế ỗ ế ặ ị ạ ể ể ỏ
v ng c l i l i tr c đó có th dùng Alt-F7. Quá trình s a l i − d ch đ c l p l i cho ề ượ ạ ỗ ướ ể ử ỗ ị ượ ặ ạ
đ n khi văn b n đã đ c s a h t l i cú pháp. ế ả ượ ử ế ỗ
S n ph m sau khi d ch là m t t p m i g i là ch ng trình đích có đuôi EXE t c ả ẩ ị ộ ệ ớ ọ ươ ứ
là t p mã máy đ th c hi n.T p này có th l u t m th i trong b nh ph c v cho quá ệ ể ự ệ ệ ể ư ạ ờ ộ ớ ụ ụ
trình ch y ch ng trình ho c l u l i trên đĩa tuỳ theo tuỳ ch n khi d ch c a NSD. ạ ươ ặ ư ạ ọ ị ủ
Trong và sau khi d ch, C++ s hi n m t c a s ch a thông báo v các l i (n u 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ó th nh p d li u nhi u h n 3 bi n b ng cách ti p t c vi t tên bi n vào bên ph i sau ể ậ ữ ệ ề ơ ế ằ ế ụ ế ế ả
d u >> c a câu l nh. ấ ủ ệ
Khi ch y ch ng trình n u g p các câu l nh trên ch ng trình s "t m d ng" đ ạ ươ ế ặ ệ ươ ẽ ạ ừ ể
ch NSD nh p d li u vào cho các bi n. Sau khi NSD nh p xong d li u, ch ng trình ờ ậ ữ ệ ế ậ ữ ệ ươ
s ti p t c ch y t câu l nh ti p theo sau c a các câu l nh trên. ẽ ế ụ ạ ừ ệ ế ủ ệ
Cách th c nh p d li u c a NSD ph thu c vào lo i giá tr c a bi n c n nh p mà ứ ậ ữ ệ ủ ụ ộ ạ ị ủ ế ầ ậ
ta g i là ki u, ví d nh p m t s có cách th c khác v i nh p m t chu i kí t . Gi s ọ ể ụ ậ ộ ố ứ ớ ậ ộ ỗ ự ả ử
c n nh p đ dài hai c nh c a m t hình ch nh t, trong đó c nh dài đ c qui c b ng ầ ậ ộ ạ ủ ộ ữ ậ ạ ượ ướ ằ
tên bi n cd và chi u r ng đ c qui c b i tên bi n cr. Câu l nh nh p s nh sau: ế ề ộ ượ ướ ở ế ệ ậ ẽ ư
cin >> cd >> cr ;
Khi máy d ng ch nh p d li u NSD s gõ giá tr c th c a các chi u dài, r ng ừ ờ ậ ữ ệ ẽ ị ụ ể ủ ề ộ
theo đúng th t trong câu l nh. Các giá tr này c n cách nhau b i ít nh t m t d u tr ng ứ ự ệ ị ầ ở ấ ộ ấ ắ
(ta qui c g i d u tr ng là m t trong 3 lo i d u đ c nh p b i các phím sau: phím ướ ọ ấ ắ ộ ạ ấ ượ ậ ở
spacebar (d u cách), phím tab (d u tab) ho c phím Enter (d u xu ng dòng)). Các giá tr ấ ấ ặ ấ ố ị
NSD nh p vào cũng đ c hi n th trên màn hình đ NSD d theo dõi. ậ ượ ể ị ể ễ
Ví d n u NSD nh p vào 23 11 ụ ế ậ ↵ thì ch ng trình s gán giá tr 23 cho bi n cd và ươ ẽ ị ế
11 cho bi n cr. ế
Chú ý: gi s NSD nh p 2311 ả ử ậ ↵ (không có d u cách gi a 23 và 11) thì ch ng ấ ữ ươ
trình s xem 2311 là m t giá tr và gán cho cd. Máy s t m d ng ch NSD nh p ti p ẽ ộ ị ẽ ạ ừ ờ ậ ế
giá tr cho bi n cr. ị ế
2. In d li u ra màn hình ữ ệ
Đ in giá tr c a các bi u th c ra màn hình ta dùng câu l nh sau: ể ị ủ ể ứ ệ
cout << bt_1 ;
10Ch ng 1. Các khái ni m c b n c a C++ ươ ệ ơ ả ủ
cout << bt_2 ;
cout << bt_3 ;
ho c: ặ
cout << bt_1 << bt_2 << bt_3 ;
cũng gi ng câu l nh nh p đây chúng ta cũng có th m r ng l nh in v i nhi u ố ệ ậ ở ể ở ộ ệ ớ ề
h n 3 bi u th c. Câu l nh trên cho phép in giá tr c a các bi u th c bt_1, bt_2, bt_3. ơ ể ứ ệ ị ủ ể ứ
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 ệ
Chu vi = 68
đây 253 và 68 l n l t là các giá tr mà máy tính đ c t các bi u th c cd * cr, ở ầ ượ ị ượ ừ ể ứ
và 2 * (cd + cr) trong câu l nh in trên. ệ ở
Chú ý: đ s d ng các câu l nh nh p và in trong ph n này, đ u ch ng trình ph i ể ử ụ ệ ậ ầ ầ ươ ả
có dòng khai báo #include <iostream.h>.
Thông th ng ta hay s d ng l nh in đ in câu thông báo nh c NSD nh p d li u ườ ử ụ ệ ể ắ ậ ữ ệ
tr c khi có câu l nh nh p. Khi đó trên màn hình s hi n dòng thông báo này r i m i ướ ệ ậ ẽ ệ ồ ớ
t m d ng ch d li u nh p vào t bàn phím. Nh vào thông báo này NSD s bi t ph i ạ ừ ờ ữ ệ ậ ừ ờ ẽ ế ả
nh p d li u, nh p n i dung gì và nh th nào ví d : ậ ữ ệ ậ ộ ư ế ụ
cout << "Hãy nh p chi u dài: "; cin >> cd; ậ ề
cout << "Và nh p chi u r ng: "; cin >> cr; ậ ề ộ
khi đó máy s in dòng thông báo "Hãy nh p chi u dài: " và ch sau khi NSD ẽ ậ ề ờ
nh p xong 23 ậ ↵, máy s th c hi n câu l nh ti p theo t c in dòng thông báo "Và nh p ẽ ự ệ ệ ế ứ ậ
chi u r ng: " và ch đ n khi NSD nh p xong 11 ề ộ ờ ế ậ ↵ ch ng trình s ti p t c th c hi n ươ ẽ ế ụ ự ệ
các câu l nh ti p theo. ệ ế
Ví d 2 : T các th o lu n trên ta có th vi t m t cách đ y đ ch ng trình tính ụ ừ ả ậ ể ế ộ ầ ủ ươ
di n tích và chu vi c a m t hình ch nh t. Đ ch ng trình có th tính v i các b giá ệ ủ ộ ữ ậ ể ươ ể ớ ộ
tr khác nhau c a chi u dài và r ng ta c n l u giá tr này vào trong các bi n (ví d cd, ị ủ ề ộ ầ ư ị ế ụ
cr).
#include <iostream.h> // khai báo t p nguyên m u đ dùng đ c cin, cout ệ ẫ ể ượ
void main() // đây là hàm chính c a ch ng trình ủ ươ
{
float cd, cr ; // khai báo các bi n có tên cd, cr đ ch a đ dài các c nh ế ể ứ ộ ạ
cout << "Hãy nh p chi u dài: " ; cin >> cd ; // nh p d li u ậ ề ậ ữ ệ
cout << "Hãy nh p chi u r ng: " ; cin >> cr ; ậ ề ộ
cout << "Di n tích = " << cd * cr << '\n' ; // in k t qu ệ ế ả
cout << "Chu vi = " << 2 * (cd + cr) << '\n';
return ;
}
Ch ng trình này có th gõ vào máy và ch y. Khi ch y đ n câu l nh nh p, ươ ể ạ ạ ế ệ ậ
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()
{
clrscr(); // xoá màn hình
cout << "CHI TIÊU" << endl << "=======" << endl ;
cout << setiosflags(ios::showpoint) << setprecision(2) ;
cout << "Sách v " << setw(20) << 123.456 << endl; ở
cout << "Th c ăn" << setw(20) << 2453.6 << endl; ứ
cout << "Qu n áo l nh" << setw(15) << 3200.0 << endl; ầ ạ
13Ch ng 1. Các khái ni m c b n c a C++ ươ ệ ơ ả ủ
getch(); // t m d ng (đ xem k t qu ) ạ ừ ể ế ả
return ; // k t thúc th c hi n hàm main() ế ự ệ
}
Ch ng trình này khi ch y s in ra b ng sau: ươ ạ ẽ ả
CHI TIÊU
========
Sách v 123.46 ở
Th c ăn 2453.60 ứ
Qu n áo l nh 3200.00 ầ ạ
Chú ý: toán t nh p >> ch y u làm vi c v i d li u ki u s . Đ nh p kí t ho c ử ậ ủ ế ệ ớ ữ ệ ể ố ể ậ ự ặ
xâu kí t , C++ cung c p các ph ng th c (hàm) sau: ự ấ ươ ứ
− cin.get(c): cho phép nh p m t kí t vào bi n kí t c, ậ ộ ự ế ự
− cin.getline(s,n): cho phép nh p t i đa n-1 kí t vào xâu s. ậ ố ự
các hàm trên khi th c hi n s l y các kí t còn l i trong b nh đ m (c a l n nh p ự ệ ẽ ấ ự ạ ộ ớ ệ ủ ầ ậ
tr c) đ gán cho c ho c s. Do toán t cin >> x s đ l i kí t xu ng dòng trong b đ m ướ ể ặ ử ẽ ể ạ ự ố ộ ệ
nên kí t này s làm trôi các l nh sau đó nh cin.get(c), cin.getline(s,n) (máy không ự ẽ ệ ư
d ng đ nh p cho c ho c s). Vì v y tr c khi s d ng các ph ng th c cin.get(c) ho c ừ ể ậ ặ ậ ướ ử ụ ươ ứ ặ
cin.getline(s,n) nên s d ng ph ng th c cin.ignore(1) đ l y ra kí t xu ng dòng còn ử ụ ươ ứ ể ấ ự ố
sót l i trong b đ m. Ví d đo n l nh sau cho phép nh p m t s nguyên x (b ng toán t ạ ộ ệ ụ ạ ệ ậ ộ ố ằ ử
>>) và m t kí t c (b ng ph ng th c cin.get(c)): ộ ự ằ ươ ứ
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 ố ạ ệ
x, X in s nguyên d ng h 16 ố ạ ệ
u in s nguyên d ng không d u ố ạ ấ
c in kí t ự
s in xâu kí t ự
e, E in s th c d ng d u ph y đ ng ố ự ạ ấ ẩ ộ
f in s th c d ng d u ph y tĩnh ố ự ạ ấ ẩ
− Các kí t trên ph i đi sau d u %. Các kí t n m trong dòng đ nh d ng n u ự ả ấ ự ằ ị ạ ế
không đi sau % thì s đ c in ra màn hình. Mu n in % ph i vi t 2 l n (t c ẽ ượ ố ả ế ầ ứ
%%).
Ví d câu l nh: printf(“T l h c sinh gi i: %0.2f %%”, 32.486) ; ụ ệ ỉ ệ ọ ỏ
s in câu “T l h c sinh gi i: “, ti p theo s in s 32.486 đ c làm tròn đ n 2 s l ẽ ỉ ệ ọ ỏ ế ẽ ố ượ ế ố ẻ
th p phân l p vào v trí c a “%0.2f”, và cu i cùng s in d u “%” (do có %% trong dòng ậ ấ ị ủ ố ẽ ấ
đ nh d ng). Câu đ c in ra màn hình s là: ị ạ ượ ẽ
T l h c sinh gi i: 32.49% ỉ ệ ọ ỏ
Chú ý: M i bt_i c n in ph i có m t đ nh d ng t ng ng trong dòng đ nh d ng. ỗ ầ ả ộ ị ạ ươ ứ ị ạ
15Ch ng 1. Các khái ni m c b n c a C++ ươ ệ ơ ả ủ
Ví d câu l nh trên cũng có th vi t: ụ ệ ể ế
printf(“%s %0.2f” , “T l h c sinh gi i: “, 32.486); ỉ ệ ọ ỏ
trong câu l nh này có 2 bi u th c c n in. Bi u th c th nh t là xâu kí t “T l h c ệ ể ứ ầ ể ứ ứ ấ ự ỉ ệ ọ
sinh gi i:” đ c in v i khuôn d ng %s (in xâu kí t ) và bi u th c th hai là 32.486 ỏ ượ ớ ạ ự ể ứ ứ
đ c in v i khuôn d ng %0.2f (in s th c v i 2 s l ph n th p phân). ượ ớ ạ ố ự ớ ố ẻ ầ ậ
− N u gi a kí t % và kí t đ nh d ng có s bi u th đ r ng c n in thì giá tr in ế ữ ự ự ị ạ ố ể ị ộ ộ ầ ị
ra s đ c gióng c t sang l ph i, đ tr ng các d u cách phía tr c. N u đ ẽ ượ ộ ề ả ể ố ấ ướ ế ộ
r ng âm (thêm d u tr − phía tr c) s gióng c t sang l trái. N u không có ộ ấ ừ ướ ẽ ộ ề ế
đ r ng ho c đ r ng b ng 0 (ví d %0.2f) thì đ r ng đ c t đi u ch nh ộ ộ ặ ộ ộ ằ ụ ộ ộ ượ ự ề ỉ
đúng b ng đ r ng c a giá tr c n in. ằ ộ ộ ủ ị ầ
− D u + tr c đ r ng đ in giá tr s kèm theo d u (d ng ho c âm) ấ ướ ộ ộ ể ị ố ấ ươ ặ
− Tr c các đ nh d ng s c n thêm kí t l (ví d ld, lf) khi in s nguyên dài long ướ ị ạ ố ầ ự ụ ố
ho c s th c v i đ chính xác g p đôi double. ặ ố ự ớ ộ ấ
Ví d 4 : ụ
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() ể ử ụ
void main()
{
clrscr(); // xoá màn hình
printf("CHI TIÊU\n=======\n") ;
printf("Sách v %20.2f\n" , 123.456) ; ở
printf("Th c ăn %20.2f\n" , 2453.6) ; ứ
printf(“Qu n áo l nh %15.2f\n" , 3200.0) ; ầ ạ
getch(); // t m d ng (đ xem k t qu ) ạ ừ ể ế ả
return ; // k t thúc th c hi n hàm main() ế ự ệ
}
BÀI T P Ậ
1. Nh ng tên g i nào sau đây là h p l : ữ ọ ợ ệ
− x − 123variabe − tin_hoc − toan tin − so-dem
− RADIUS − one.0 − number# − Radius − nam2000
2. B n hãy th vi t m t ch ng trình ng n nh t có th đ c. ạ ử ế ộ ươ ắ ấ ể ượ
3. Tìm các l i cú pháp trong ch ng trình sau: ỗ ươ
17Ch ng 1. Các khái ni m c b n c a C++ ươ ệ ơ ả ủ
#include (iostream.h)
void main(); / Gi i ph ng trình b c 1 ả ươ ậ
{
cout << 'Day la ch ng trình: Gptb1.\nXin chao cac ban'; ươ
getch();
}
4. Vi t ch ng trình in n i dung m t bài th nào đó. ế ươ ộ ộ ơ
5. Vi t ch ng trình in ra 4 dòng, 2 c t g m các s sau và gióng c t: ế ươ ộ ồ ố ộ
− th ng theo l trái 0.63 64.1 ẳ ề
− 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 ƯƠ
KI U D LI U, BI U TH C VÀ CÂU L NH Ể Ữ Ệ Ể Ứ Ệ
Ki u d li u đ n gi n ể ữ ệ ơ ả
H ng - khai báo và s d ng h ng ằ ử ụ ằ
Bi n - khai báo và s d ng bi n ế ử ụ ế
Phép toán, bi u th c và câu l nh ể ứ ệ
Th vi n các hàm toán h c ư ệ ọ
I. KI U D LI U Đ N GI N Ể Ữ Ệ Ơ Ả
1. Khái ni m v ki u d li u ệ ề ể ữ ệ
Thông th ng d li u hay dùng là s và ch . Tuy nhiên vi c phân chia ch 2 loai ườ ữ ệ ố ữ ệ ỉ
d li u là không đ . Đ d dàng h n cho l p trình, h u h t các NNLT đ u phân chia d ữ ệ ủ ể ễ ơ ậ ầ ế ề ữ
li u thành nhi u ki u khác nhau đ c g i là các ki u c b n hay chu n. Trên c s k t ệ ề ể ượ ọ ể ơ ả ẩ ơ ở ế
h p các ki u d li u chu n, NSD có th t đ t ra các ki u d li u m i đ ph c v cho ợ ể ữ ệ ẩ ể ự ặ ể ữ ệ ớ ể ụ ụ
ch ng trình gi i quy t bài toán c a mình. Có nghĩa lúc đó m i đ i t ng đ c qu n lý ươ ả ế ủ ỗ ố ượ ượ ả
trong ch ng trình s là m t t p h p nhi u thông tin h n và đ c t o thành t nhi u ươ ẽ ộ ậ ợ ề ơ ượ ạ ừ ề
lo i (ki u) d li u khác nhau. D i đây chúng ta s xét đ n m t s ki u d li u chu n ạ ể ữ ệ ướ ẽ ế ộ ố ể ữ ệ ẩ
đ c qui đ nh s n b i C++. ượ ị ẵ ở
M t bi n nh đã bi t là m t s ô nh liên ti p nào đó trong b nh dùng đ l u ộ ế ư ế ộ ố ớ ế ộ ớ ể ư
tr d li u (vào, ra hay k t qu trung gian) trong quá trình ho t đ ng c a ch ng trình. ữ ữ ệ ế ả ạ ộ ủ ươ
Đ qu n lý ch t ch các bi n, NSD c n khai báo cho ch ng trình bi t tr c tên bi n ể ả ặ ẽ ế ầ ươ ế ướ ế
và ki u c a d li u đ c ch a trong bi n. Vi c khai báo này s làm ch ng trình qu n ể ủ ữ ệ ượ ứ ế ệ ẽ ươ ả
lý các bi n d dàng h n nh trong vi c phân b b nh cũng nh qu n lý các tính toán ế ễ ơ ư ệ ố ộ ớ ư ả
trên bi n theo nguyên t c: ch có các d li u cùng ki u v i nhau m i đ c phép làm ế ắ ỉ ữ ệ ể ớ ớ ượ
toán v i nhau. Do đó, khi đ c p đ n m t ki u chu n c a m t NNLT, thông th ng ớ ề ậ ế ộ ể ẩ ủ ộ ườ
chúng ta s xét đ n các y u t sau: ẽ ế ế ố
− tên ki u: là m t t dành riêng đ ch đ nh ki u c a d li u. ể ộ ừ ể ỉ ị ể ủ ữ ệ
− s byte trong b nh đ l u tr m t đ n v d li u thu c ki u này: Thông ố ộ ớ ể ư ữ ộ ơ ị ữ ệ ộ ể
th ng s byte này ph thu c vào các trình biên d ch và h th ng máy khác ườ ố ụ ộ ị ệ ố
nhau, đây ta ch xét đ n h th ng máy PC thông d ng hi n nay. ở ỉ ế ệ ố ụ ệ
− 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. ấ ườ ị ẽ ượ ươ
2. Ki u ký t ể ự
M t kí t là m t kí hi u trong b ng mã ASCII. Nh đã bi t m t s kí t có m t ộ ự ộ ệ ả ư ế ộ ố ự ặ
ch trên bàn phím (ví d các ch cái, ch s ) trong khi m t s kí t l i không (ví d kí ữ ụ ữ ữ ố ộ ố ự ạ ụ
t bi u di n vi c lùi l i m t ô trong văn b n, kí t ch vi c k t thúc m t dòng hay k t ự ể ễ ệ ạ ộ ả ự ỉ ệ ế ộ ế
thúc m t văn b n). Do v y đ bi u di n m t kí t ng i ta dùng chính mã ASCII c a kí ộ ả ậ ể ể ễ ộ ự ườ ủ
t đó trong b ng mã ASCII và th ng g i là giá tr c a kí t . Ví d phát bi u "Cho kí ự ả ườ ọ ị ủ ự ụ ể
t 'A'" là cũng t ng đ ng v i phát bi u "Cho kí t 65" (65 là mã ASCII c a kí t ự ươ ươ ớ ể ự ủ ự
'A'), ho c "Xoá kí t xu ng dòng" là cũng t ng đ ng v i phát bi u "Xoá kí t 13" vì ặ ự ố ươ ươ ớ ể ự
13 là mã ASCII c a kí t xu ng dòng. ủ ự ố
Nh v y m t bi n ki u kí t có th đ c nh n giá tr theo 2 cách t ng đ ng - ư ậ ộ ế ể ự ể ượ ậ ị ươ ươ
ch ho c giá tr s : ví d gi s c là m t bi n kí t thì câu l nh gán c = 'A' cũng t ng ữ ặ ị ố ụ ả ử ộ ế ự ệ ươ
đ ng v i câu l nh gán c = 65. Tuy nhiên đ s d ng giá tr s c a m t kí t c nào đó ươ ớ ệ ể ử ụ ị ố ủ ộ ự
ta ph i yêu c u đ i c sang giá tr s b ng câu l nh int(c). ả ầ ổ ị ố ằ ệ
Theo b ng trên ta th y có 2 lo i kí t là char v i mi n giá tr t -128 đ n 127 và ả ấ ạ ự ớ ề ị ừ ế
21Ch ng 2. Ki u d li u, bi u th c và câu l nh ươ ể ữ ệ ể ứ ệ
unsigned char (kí t không d u) v i mi n giá tr t 0 đ n 255. Tr ng h p m t bi n ự ấ ớ ề ị ừ ế ườ ợ ộ ế
đ c gán giá tr v t ra ngoài mi n giá tr c a ki u thì giá tr c a bi n s đ c tính theo ượ ị ượ ề ị ủ ể ị ủ ế ẽ ượ
mã bù − (256 − c). Ví d n u gán cho char c giá tr 179 (v t kh i mi n giá tr đã đ c ụ ế ị ượ ỏ ề ị ượ
qui đ nh c a char) thì giá tr th c s đ c l u trong máy s là − (256 − 179) = −77. ị ủ ị ự ự ượ ư ẽ
Ví d 1 : ụ
char c, d ; // c, d đ c phép gán giá tr t -128 đ n 127 ượ ị ừ ế
unsigned e ; // e đ c phép gán giá tr t 0 đ n 255 ượ ị ừ ế
c = 65 ; d = 179 ; // d có giá tr ngoài mi n cho phép ị ề
e = 179; f = 330 ; // f có giá tr ngoài mi n cho phép ị ề
cout << c << int(c) ; // in ra ch cái 'A' và giá tr s 65 ữ ị ố
cout << d << int(d) ; // in ra là kí t '|' và giá tr s -77 ự ị ố
cout << e << int(e) // in ra là kí t '|' và giá tr s 179 ự ị ố
cout << f << int(f) // in ra là kí t 'J' và giá tr s 74 ự ị ố
Chú ý: Qua ví d trên ta th y m t bi n n u đ c gán giá tr ngoài mi n cho phép ụ ấ ộ ế ế ượ ị ề
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>
void main()
{
float r = 2 ; // r là tên bi n dùng đ ch a bán kính ế ể ứ
cout << "Di n tích = " << setiosflags(ios::showpoint) ; ệ
cout << setprecision(3) << r * r * 3.1416 ;
getch() ;
}
II. H NG - KHAI BÁO VÀ S D NG H NG Ằ Ử Ụ Ằ
H ng là m t giá tr c đ nh nào đó ví d 3 (h ng nguyên), 'A' (h ng kí t ), 5.0 ằ ộ ị ố ị ụ ằ ằ ự
(h ng th c), "Ha noi" (h ng xâu kí t ). M t giá tr có th đ c hi u d i nhi u ki u ằ ự ằ ự ộ ị ể ượ ể ướ ề ể
khác nhau, do v y khi vi t h ng ta cũng c n có d ng vi t thích h p. ậ ế ằ ầ ạ ế ợ
1. H ng nguyên ằ
− ki u short, int: 3, -7, ể
− ki u unsigned: 3, 123456, ể
− ki u long, long int: 3L, -7L, 123456L, (vi t L vào cu i m i giá tr ) ể ế ố ỗ ị
Các cách vi t trên là th hi n c a s nguyên trong h th p phân, ngoài ra chúng ế ể ệ ủ ố ệ ậ
còn đ c vi t d i các h đ m khác nh h c s 8 ho c h c s 16. M t s nguyên ượ ế ướ ệ ế ư ệ ơ ố ặ ệ ơ ố ộ ố
trong c s 8 luôn luôn đ c vi t v i s 0 đ u, t ng t v i c s 16 ph i vi t v i 0x ơ ố ượ ế ớ ố ở ầ ươ ự ớ ơ ố ả ế ớ
đ u. Ví d ta bi t 65 trong c s 8 là 101 và trong c s 16 là 41, do đó 3 cách vi t ở ầ ụ ế ơ ố ơ ố ế
65, 0101, 0x41 là nh nhau, cùng bi u di n giá tr 65. ư ể ễ ị
23Ch ng 2. Ki u d li u, bi u th c và câu l nh ươ ể ữ ệ ể ứ ệ
2. H ng th c ằ ự
M t s th c có th đ c khai báo d i d ng ki u float ho c double và các giá tr ộ ố ự ể ượ ướ ạ ể ặ ị
c a nó có th đ c vi t d i m t trong hai d ng. ủ ể ượ ế ướ ộ ạ
a. D ng d u ph y tĩnh ạ ấ ả
Theo cách vi t thông th ng. Ví d : 3.0, -7.0, 3.1416, ế ườ ụ
b. D ng d u ph y đ ng ạ ấ ả ộ
T ng quát, m t s th c x có th đ c vi t d i d ng: men ho c mEn, trong đó m ổ ộ ố ự ể ượ ế ướ ạ ặ
đ c g i là ph n đ nh tr , n g i là ph n b c (hay mũ). S men bi u th giá tr x = m x ượ ọ ầ ị ị ọ ầ ậ ố ể ị ị
10n
. 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 ố ớ ộ ố ằ ự ườ ư ặ ữ ươ ứ ặ
các kí t đ c dành riêng v i nhi m v khác, khi đó thay vì ph i nh giá tr c a chúng ự ượ ớ ệ ụ ả ớ ị ủ
ta có th vi t theo qui c sau: ể ế ướ
'\n' : bi u th kí t xu ng dòng (cũng t ng đ ng v i endl) ể ị ự ố ươ ươ ớ
'\t' : kí t tab ự
'\a' : kí t chuông (t c thay vì in kí t , loa s phát ra m t ti ng 'bíp') ự ứ ự ẽ ộ ế
'\r' : xu ng dòng ố
'\f' : kéo trang
'\\' : d u \ ấ
'\?' : d u ch m h i ? ấ ấ ỏ
'\'' : d u nháy đ n ' ấ ơ
'\"' : d u nháy kép " ấ
'\kkk' : kí t có mã là kkk trong h 8 ự ệ
'\xkk' : kí t có mã là kk trong h 16 ự ệ
Ví d : ụ
cout << "Hôm nay tr i \t n ng \a \a \a \n" ; ờ ắ
s in ra màn hình dòng ch "Hôm nay tr i" sau đó b m t kho ng cách b ng m t ẽ ữ ờ ỏ ộ ả ằ ộ
tab (kho ng 8 d u cách) r i in ti p ch "n ng", ti p theo phát ra 3 ti ng chuông và cu i ả ấ ồ ế ữ ắ ế ế ố
cùng con tr trên màn hình s nh y xu ng đ u dòng m i. ỏ ẽ ả ố ầ ớ
Do d u cách (phím spacebar) không có m t ch , nên trong m t s tr ng h p đ ấ ặ ữ ộ ố ườ ợ ể
tránh nh m l n chúng tôi qui c s d ng kí hi u <> đ bi u di n d u cách. Ví d ầ ẫ ướ ử ụ ệ ể ể ễ ấ ụ
trong giáo trình này d u cách (có giá tr là 32) đ c vi t ' ' (d u nháy đ n bao m t d u ấ ị ượ ế ấ ơ ộ ấ
cách) ho c rõ ràng h n b ng cách vi t theo qui c <>. ặ ơ ằ ế ướ
4. H ng xâu kí t ằ ự
Là dãy kí t b t kỳ đ t gi a c p d u nháy kép. Ví d : "L p K43*", "12A4", "A", ự ấ ặ ữ ặ ấ ụ ớ
"<>", "" là các h ng xâu kí t , trong đó "" là xâu không ch a kí t nào, các xâu "<>", ằ ự ứ ự
"A" ch a 1 kí t S các kí t gi a 2 d u nháy kép đ c g i là đ dài c a xâu. Ví d ứ ự ố ự ữ ấ ượ ọ ộ ủ ụ
xâu "" có đ dài 0, xâu "<>" ho c "A" có đ dài 1 còn xâu "L p K43*" có đ dài 8. ộ ặ ộ ớ ộ
Chú ý phân bi t gi a 2 cách vi t 'A' và "A", tuy chúng cùng bi u di n ch cái A ệ ữ ế ể ễ ữ
nh ng ch ng trình s hi u 'A' là m t kí t còn "A" là m t xâu kí t (do v y chúng ư ươ ẽ ể ộ ự ộ ự ậ
đ c b trí khác nhau trong b nh cũng nh cách s d ng chúng là khác nhau). ượ ố ộ ớ ư ử ụ
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 ư ậ ễ ỗ ể ấ ế ố ươ
trình ho c thay nh m s 50 v i ý nghĩa khác nh tu i c a m t sinh viên nào ặ ầ ố ớ ư ổ ủ ộ
đó ch ng h n. N u trong ch ng trình s d ng h ng sosv, bây gi vi c thay ẳ ạ ế ươ ử ụ ằ ờ ệ
th tr nên chính xác và d dàng h n b ng thao tác khai báo l i giá tr h ng ế ở ễ ơ ằ ạ ị ằ
sosv b ng 60. Lúc đó trong ch ng trình b t kỳ n i nào g p tên h ng sosv ằ ươ ấ ơ ặ ằ
đ u đ c ch ng trình hi u v i giá tr 60. ề ượ ươ ể ớ ị
Đ khai báo h ng ta dùng các câu khai báo sau: ể ằ
26Ch ng 2. Ki u d li u, bi u th c và câu l nh ươ ể ữ ệ ể ứ ệ
#define tên_h ng giá_tr _h ng ; ằ ị ằ
ho c: ặ
const tên_h ng = giá_tr _h ng ; ằ ị ằ
Ví d : ụ
#define sosv 50 ;
#define MAX 100 ;
const sosv = 50 ;
Nh trên đã chú ý m t giá tr h ng ch a nói lên ki u s d ng c a nó vì v y ta c n ư ộ ị ằ ư ể ử ụ ủ ậ ầ
khai báo rõ ràng h n b ng cách thêm tên ki u tr c tên h ng trong khai báo const, các ơ ằ ể ướ ằ
h ng khai báo nh v y đ c g i là h ng có ki u. ằ ư ậ ượ ọ ằ ể
Ví d : ụ
const int sosv = 50 ;
const float nhiet_do_soi = 100.0 ;
III. BI N - KHAI BÁO VÀ S D NG BI N Ế Ử Ụ Ế
1. Khai báo bi n ế
Bi n là các tên g i đ l u giá tr khi làm vi c trong ch ng trình. Các giá tr đ c ế ọ ể ư ị ệ ươ ị ượ
l u có th là các giá tr d li u ban đ u, các giá tr trung gian t m th i trong quá trình ư ể ị ữ ệ ầ ị ạ ờ
tính toán ho c các giá tr k t qu cu i cùng. Khác v i h ng, giá tr c a bi n có th thay ặ ị ế ả ố ớ ằ ị ủ ế ể
đ i trong quá trình làm vi c b ng các l nh đ c vào t bàn phím ho c gán. Hình nh c ổ ệ ằ ệ ọ ừ ặ ả ụ
th c a bi n là m t s ô nh trong b nh đ c s d ng đ l u các giá tr c a bi n. ể ủ ế ộ ố ớ ộ ớ ượ ử ụ ể ư ị ủ ế
M i bi n ph i đ c khai báo tr c khi s d ng. M t khai báo nh v y s báo cho ọ ế ả ượ ướ ử ụ ộ ư ậ ẽ
ch ng trình bi t v m t bi n m i g m có: tên c a bi n, ki u c a bi n (t c ki u c a giá ươ ế ề ộ ế ớ ồ ủ ế ể ủ ế ứ ể ủ
tr d li u mà bi n s l u gi ). Thông th ng v i nhi u NNLT t t c các bi n ph i ị ữ ệ ế ẽ ư ữ ườ ớ ề ấ ả ế ả
đ 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()
{
int i = 2, j , k = n + 5; // khai báo i và kh i t o b ng 2, k b ng 15 ở ạ ằ ằ
float eps = 1.0e-6 ; // khai báo bi n th c epsilon kh i t o b ng 10-6ế ự ở ạ ằ
char c = 'Z'; // khai báo bi n kí t c và kh i t o b ng 'A' ế ự ở ạ ằ
char d[100] = "Tin h c"; // khai báo xâu kí t d ch a dòng ch "Tin h c" ọ ự ứ ữ ọ
…
}
2. Ph m vi c a bi n ạ ủ ế
Nh đã bi t ch ng trình là m t t p h p các hàm, các câu l nh cũng nh các khai ư ế ươ ộ ậ ợ ệ ư
báo. Ph m vi tác d ng c a m t bi n là n i mà bi n có tác d ng, t c hàm nào, câu l nh ạ ụ ủ ộ ế ơ ế ụ ứ ệ
28Ch ng 2. Ki u d li u, bi u th c và câu l nh ươ ể ữ ệ ể ứ ệ
nào đ c phép s d ng bi n đó. M t bi n xu t hi n trong ch ng trình có th đ c s ượ ử ụ ế ộ ế ấ ệ ươ ể ượ ử
d ng b i hàm này nh ng không đ c b i hàm khác ho c b i c hai, đi u này ph ụ ở ư ượ ở ặ ở ả ề ụ
thu c ch t ch vào v trí n i bi n đ c khai báo. M t nguyên t c đ u tiên là bi n s có ộ ặ ẽ ị ơ ế ượ ộ ắ ầ ế ẽ
tác d ng k t v trí nó đ c khai báo cho đ n h t kh i l nh ch a nó. Chi ti t c th ụ ể ừ ị ượ ế ế ố ệ ứ ế ụ ể
h n s đ c trình bày trong ch ng 4 khi nói v hàm trong C++. ơ ẽ ượ ươ ề
3. Gán giá tr cho bi n (phép gán) ị ế
Trong các ví d tr c chúng ta đã s d ng phép gán dù nó ch a đ c trình bày, ụ ướ ử ụ ư ượ
đ n gi n m t phép gán mang ý nghĩa t o giá tr m i cho m t bi n. Khi bi n đ c gán ơ ả ộ ạ ị ớ ộ ế ế ượ
giá tr m i, giá tr cũ s đ c t đ ng xoá đi b t k tr c đó nó ch a giá tr nào (ho c ị ớ ị ẽ ượ ự ộ ấ ể ướ ứ ị ặ
ch a có giá tr , ví d ch m i v a khai báo xong). Cú pháp c a phép gán nh sau: ư ị ụ ỉ ớ ừ ủ ư
tên_bi n = bi u th c ; ế ể ứ
Khi g p phép gán ch ng trình s tính toán giá tr c a bi u th c sau đó gán giá tr ặ ươ ẽ ị ủ ể ứ ị
này cho bi n. Ví d : ế ụ
int n, i = 3; // kh i t o i b ng 3 ở ạ ằ
n = 10; // gán cho n giá tr 10 ị
cout << n <<", " << i << endl; // in ra: 10, 3
i = n / 2; // gán l i giá tr c a i b ng n/2 = 5 ạ ị ủ ằ
cout << n <<", " << i << endl; // in ra: 10, 5
Trong ví d trên n đ c gán giá tr b ng 10; trong câu l nh ti p theo bi u th c n/2 ụ ượ ị ằ ệ ế ể ứ
đ c tính (b ng 5) và sau đó gán k t qu cho bi n i, t c i nh n k t qu b ng 5 dù tr c ượ ằ ế ả ế ứ ậ ế ả ằ ướ
đó 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 ấ ề ạ ậ ả ể ệ
th ng, chúng tôi t m phân chia thành các l p và trình bày ch m t s trong chúng. Các ố ạ ớ ỉ ộ ố
phép toán còn l i s đ c tìm hi u d n trong các ph n sau c a giáo trình. Các thành ạ ẽ ượ ể ầ ầ ủ
ph n tên g i tham gia trong phép toán đ c g i là h ng th c ho c toán h ng, các kí ầ ọ ượ ọ ạ ứ ặ ạ
hi u phép toán đ c g i là toán t . Ví d trong phép toán a + b; a, b đ c g i là toán ệ ượ ọ ử ụ ượ ọ
h ng và + là toán t . Phép toán 1 ngôi là phép toán ch có m t toán h ng, ví d −a (đ i ạ ử ỉ ộ ạ ụ ổ
d u s a), &x (l y đ a ch c a bi n x) … M t s kí hi u phép toán cũng đ c s d ng ấ ố ấ ị ỉ ủ ế ộ ố ệ ượ ử ụ
chung cho c 1 ngôi l n 2 ngôi (hi n nhiên v i ng nghĩa khác nhau), ví d kí hi u − ả ẫ ể ớ ữ ụ ệ
đ c s d ng cho phép toán tr 2 ngôi a − b, ho c phép & còn đ c s d ng cho phép ượ ử ụ ừ ặ ượ ử ụ
toán l y h i các bit (a & b) c a 2 s nguyên a và b … ấ ộ ủ ố
a. Các phép toán s h c: +, -, *, /, % ố ọ
− Các phép toán + (c ng), − (tr ), * (nhân) đ c hi u theo nghĩa thông th ng ộ ừ ượ ể ườ
trong s h c. ố ọ
− Phép toán a / b (chia) đ c th c hi n theo ki u c a các toán h ng, t c n u c ượ ự ệ ể ủ ạ ứ ế ả
hai toán h ng là s nguyên thì k t qu c a phép chia ch l y ph n nguyên, ạ ố ế ả ủ ỉ ấ ầ
ng c l i n u 1 trong 2 toán h ng là th c thì k t qu là s th c. Ví d : ượ ạ ế ạ ự ế ả ố ự ụ
13/5 = 2 // do 13 và 5 là 2 s nguyên ố
13.0/5 = 13/5.0 = 13.0/5.0 = 2.6 // do có ít nh t 1 toán h ng là th c ấ ạ ự
30Ch ng 2. Ki u d li u, bi u th c và câu l nh ươ ể ữ ệ ể ứ ệ
− Phép toán a % b (l y ph n d ) tr l i ph n d c a phép chia a/b, trong đó a và ấ ầ ư ả ạ ầ ư ủ
b là 2 s nguyên. Ví d : ố ụ
13%5 = 3 // ph n d c a 13/5 ầ ư ủ
5%13 = 5 // ph n d c a 5/13 ầ ư ủ
b. Các phép toán t tăng, gi m: i++, ++i, i , i ự ả
− Phép toán ++i và i++ s cùng tăng i lên 1 đ n v t c t ng đ ng v i câu l nh ẽ ơ ị ứ ươ ươ ớ ệ
i = i+1. Tuy nhiên n u 2 phép toán này n m trong câu l nh ho c bi u th c thì ế ằ ệ ặ ể ứ
++i khác v i i++. C th ++i s tăng i, sau đó i m i đ c tham gia vào tính ớ ụ ể ẽ ớ ượ
toán trong bi u th c. Ng c l i i++ s tăng i sau khi bi u th c đ c tính toán ể ứ ượ ạ ẽ ể ứ ượ
xong (v i giá tr i cũ). Đi m khác bi t này đ c minh ho thông qua ví d sau, ớ ị ể ệ ượ ạ ụ
gi s i = 3, j = 15. ả ử
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). ị ượ ể ệ ở ố ặ ể ệ ở
Khi đó giá tr tr l i c a phép toán là 1 ho c 0 và đ c cho trong b ng sau: ị ả ạ ủ ặ ượ ả
a b a && b a || b ! a
1 1 1 1 0
1 0 0 1 0
0 1 0 1 1
0 0 0 0 1
Tóm l i: ạ
− Phép toán "và" đúng khi và ch khi hai toán h ng cùng đúng ỉ ạ
− Phép toán "ho c" sai khi và ch khi hai toán h ng cùng sai ặ ỉ ạ
− Phép toán "không" (ho c "ph đ nh") đúng khi và ch khi toán h ng c a nó ặ ủ ị ỉ ạ ủ