Đ 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ó. ướ ố ượ ạ ổ ế ệ ề ẻ ủ
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. ữ ố ậ
• 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++ ƯỜ Ệ Ủ
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 ứ ế ế
− 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. ơ ả ắ ườ ỉ ầ ặ ộ
đ 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ú ệ ấ ượ ụ ớ ể ắ ầ ủ ệ
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 ấ ữ ươ
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, ị ủ ề ộ ầ ư ị ế ụ
− 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 ầ ạ
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); ỉ ệ ọ ỏ
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
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++. ượ ị ẵ ở
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 ụ ế ị ượ ỏ ề ị ượ
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 ơ ố ượ ế ớ ố ở ầ ươ ự ớ ơ ố ả ế ớ
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. ỏ ẽ ả ố ầ ớ
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 : ụ
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 ơ ả ộ ạ ị ớ ộ ế ế ượ
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 ươ ể ữ ệ ể ứ ệ
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ó ặ ủ ị ỉ ạ ủ
sai.
Ví d : ụ
3 && (4 > 5) // = 0 vì có h ng th c (4>5) sai ạ ứ
(3 >= 1) && (7) // = 1 vì c hai h ng th c cùng đúng ả ạ ứ
!1 // = 0
! (4 + 3 < 7) // = 1 vì (4+3<7) b ng 0 ằ
5 || (4 >= 6) // = 1 vì có m t h ng th c (5) đúng ộ ạ ứ
g n d i d ng x @= a trong đó @ là các phép toán s h c, x lý bit Ví d : ọ ướ ạ ố ọ ử ụ
thay cho vi t x = x + 2 có th vi t x += 2; ế ể ế
ho c x = x/2 ; x = x*2 có th đ c vi t l i nh x /= 2; x *= 2; ặ ể ượ ế ạ ư
Cách vi t g n này có nhi u thu n l i khi vi t và đ c ch ng trình nh t là khi tên ế ọ ề ậ ợ ế ọ ươ ấ
bi n quá dài ho c đi kèm nhi u ch s … thay vì ph i vi t hai l n tên bi n trong câu ế ặ ề ỉ ố ả ế ầ ế
l nh thì ch ph i vi t m t l n, đi u này tránh vi t l p l i tên bi n d gây ra sai sót. Ví d ệ ỉ ả ế ộ ầ ề ế ặ ạ ế ễ ụ
thay vì vi t: ế
ngay_quoc_te_lao_dong = ngay_quoc_te_lao_dong + 365;
có th vi t g n h n b i: ể ế ọ ơ ở