Tải bản đầy đủ (.pdf) (532 trang)

Tự học adobe illustrator 8 0 thông qua hình ảnh

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (46.45 MB, 532 trang )

TÙ SÁCH KHKT ĐHBK HÀ NỘI
Tống Đình Quỳ

)
i'

NGỐN NGV LẬP TRÌNH


TỐNG ĐÌNH QUỲ

(LÝ THUYẾT)

NHÀ XUẤT BẢN THỐNG KÊ


LỜI GIỚI THIỆU


Thiết kế, viết và gõ rối chưởng trình máy tính là một công việc vô cùng
thú vị nhưng cũng hết sức khó khăn.
Hiện nay các nhà lập trình sử dụng nhiều ngôn ngữ khác nhau, trong đó
C++ là một trong những ngôn ngữ thông dụng nhất.
Ngoài những khó khăn thông thường của việc học lập trình, quá trình lập
trình dùng ngôn ngữ C++ đặt ra đầy những thử thách, vì đây không phải là
ngôn ngữ trò chơi như Pascal, hay một công cụ giảng dạy như Modula-2. C++
là ngôn ngữ lập trình chuyên nghiệp được sử dụng rộng rã i nhất dựa trên ý
tiíởĩiíí lập trình hướng đối tưỢng.

Với mong muôn hỗ trỢ các nhà lập trình tương lai trong việc tìm hiểu về
C++, nhóm tác giả ELI COM kết hỢp với trường Đại học Bách Khoa xin trân


trong gửi tới các bạn cuôn “Ngôn ngữ lập trình C++ dành cho sinh viên”.

Với cuốn sách này các bạn sinh viên sẽ nắm được những kiến thức cơ
bản nhát của việc lập trình. N goài‘ra cuôn sách cũng tập trung vào mô
hình lập trình hướng đối tượng. Đây thực sự là một thử thách vì phương
pháp hướng dẫn ở đây đi ngược lạ i các phương pháp giảng dạy truyền

thông về ngôn ngữ này. Phương pháp đổi mới này nhằm ưu tiên cho việc sử
dụng các lớp, xây dựng cấu trúc dữ liệu nhò dùng các đô'i tượng và con trỏ,
thao tác với cấu trúc dữ liệu .

Cuốn sách không chỉ giới thiệu vê C++ mà còn giối thiệu cả về khoa học
máy tính. Các ví dụ được xây dựng trên chính những trải nghiệm của các sinh
viên. Các ví dụ cũng giúp sinh viên làm quen với các mặt tiên tiến của khoa
học máy tính, những vấn để về kiến trúc máy tính, các ngôn ngữ lập trình và
‘^rình biên dịch, các cấu trúc dữ liệu và đồ họa.

Song song với cuốh lý thuyết C++ dành cho sinh viên, nhóm táọ giả cũng
cunị; cấp cho các bạn những bài tập thực hành thú vị và thiết thực qua cuốh
C++ bài tập.

Các cu(m sách này thực sự hỗ trỢ đác lực cho quá trình học tập của những
bạiì trẻ yôu lập trình.

TÁC GIẢ


MỤC LỤC
Chưtftìg 1. LÂP TRỈNH LÀ Gì?
Giớitiỉệuchuang..................................................... 7

1.1. Bâitoân'Chú chuột ừong mê cung’...........................7
Bài tập -P h án 1 .....................................................11
1.2. Mảy áih vâ ngôn ngữ lập Irinh................................. 12
1.3. Chứơng Wnh và thiứt t ó n ....................................... 13
14. Các
#)ực tế tremg lập Irhih..............................13
Tổng két..................1 ...........................................15

Chưotìg 2. CÁC PHẨN TỬ c o BẢN CỦA
C++
G i ớ i m u ơ * m i ....................................................16
2.1. Hãchưemgừinhãan giản........................................ 16
2.2. Một diudng trbth pWrc tạp hon................................ 17

B ầ itậ p -^1 ........ ................................ 20
2.3 Tữímh danh.............. ..............................................21
2.4. B iãi..........................................................................21
2.5. Biểu thức................................................................. 22
2.6. Câu lệnh gán............................................................24
2.7. Hằng ký
........................................................... 26
2.8. Dồng c M ẩ íc h .........................................................26
2.9. Câu lệnh phức..........................................................27
2.10. Trwi bày
chíơng tfWi C++.............................27
2 J 1 .N h ậ p « u ấ t( Ì o n ^ „ ............................................. 28
2.12. Vôrig lặp đơn g á n ..................................................30
2.13.Gỡlỗichư<»)gWn h .............................................. 32
B M tặ p p h á iì .........................................................39
Tổng ká(................... ..... .........................................42


Chương 3. LỆNH LựA CHỌN
GiỡitiiệuchuanB..............■...................... ............ 44

3.1.Câulộnhi f ..... 1 .................................................... 44
3.2.
Xây <*/ng các
thức logic...................51
3.3 Phân lich biểu Ihức togk;...’........................................55
Bài tệp-Phán 1 .....“.............................................. 56
3.4. Kiểu li^ k à............................................................... 62
3.5.Câulệf*Sw»c h ....................................................65
3.6.Gỡai»ttìvlựachọ n ..............................................71
Bài tập-Phán 2.. .................................................... 76
Tổng két..................................................................80

Chương 4. HÀM
Giởitìiệuchuang.................................................... 81
4.1. Phạm vi của biến..................................................... 86
4.2. T rả v é ị^ lrỊ.............................................................91
4.3. Tham à .. , . .............................................................. 94
Bài ^p-P hán 1...................................................... 95
4.4. Tham chiếu............................................................. 96
B à in p -P h á n 2 ......................................................98
4.5. Phái triín và ^ lỗi các môđun................................. M
4.6. Mở rộng...... ........................................................... 107
B àitập-P tìắn3 ....................................................108
TổngkẾt.............................. .................................112

Chương 5. LỆNH LẶP

Giớiữìiệuchưang..................................................114
51. Vòng lặp fof........................................................... 114
5 2 Cèc vòng fof lổng nhau....................................... 118
B é itậ p -P h ầ n l ....................................................121
5.3, Vòng ậpwhil«....................................................... 126
ẵ.ĩA . kiểm tmvỉmg lặp........................................129
5.3.2. Phán tích sổ lần lặp cùa một vòng lặp........ 130

B àltặp -P h & ì2 ................................................... 135
5.4.Vỏnglặpdowhite .................................................. 136
5.5.
Lụa chọì cấu trúc vống lặp Ihích hợp.137
5.6. Lệnh brêak bong vòng lặp ..................................... 141
5.7 vitk^cuâctìng..................... ...... ......................... 142
B à itậ p -R )ắ n 3 ...................................................146
Tổngkâ .............................................. ................149

Chưcmg 6. ĐỊNH NGHĨÀ KIỂU DỮ UỆU
Giúiltụệuchuang............................................... 151
6.1. Mội kiểu dữ liệu mới: T m e.................................... 152
6.2. Láp vâ các hàm lehách của Idp...............................153
s h . Binh rựaa lớp................... ........................ f53
6.2.2. HalhàmUìách....^ ............ ........... ............157
Bồi tập-Phần 1 ................................................... 161
6.3. Chi tiỂÌ h6.3.1. Gửi Ihõng điệp ứK dối lượng nhặì của hằm
*ứe*ìphắn.................... .......... ..................m
6.3.2. Tham dìiéu hàrứi phán (ữìiệu của một 9ìựt
»iékhàc ........................................... ...... .164
6.3.3. Nguỵén mẳu hàm ihành phần tíi€f) biệt với đinh

noWs........................... ............................ 165
Bài tập-Phấn 2 ............................ ...................... 167
6.4. Thay dổi các ttiểhiénttóliộu.................................168
B àitặp -P h ần3..’................................................174
6.5. Nạp ( ^ n g hàm và toân tử .................................... 175
6.5.1. Nập chổng lo á n ữ ..................................... f76
6.5.2.TữảnứáfỢcnạpchổngĩýu/hàm
m
ữ ìM phần
B à iặ p -P h á n 4 .................................................... 179

6.6. KIÃI khả biố! và kiểg bất biến............................... IM

6.7.Gai&c^ia p.................................... 187
Bài tập-RÌẳn 5 .................................................... 195
Tổng két................. ............................................. 197

Chương?. CON TRỎ VÀ DANH SÁCH
Giớiứiiệuchưang..................................................200
7.1. Con w ...................................................................200
ĨA.i.lỢìmbàobiéncontrò .................................. 200
7 1 2 . Tạo con t ó ...... ........................................... 201
I.U .L Ổ y t m m M u

201

7.1.4. Lệóhpányéeoo&ổ.................... ............... 202
ĨA .S .M Ộ ts Ó ơ ú m vé a ìn tiò ............................. 206
7.1.6. Con (rè Ễte...................... ............. .......... 207
B à l^ - P Ế ìắ n l ................................................... 208

7.2.Toánửne w.........................................................209
7.3.
Darti sách............................................ 214
B ảitặp-Phán2 ....................................................222
7.4. Phép
trèn danh sádi i4h/ hảm thành phán. .. 223
B à iíậ p -P M n S ..................................... ..............231
7.5 G8 lỏi dwong Wnh vớì danh sách........................... 233
7.6. Các phép loàn bất khả biến Irèn danh sách.........241
Bài tập-Phán 4 .................. .................................24«
7.7.D art»sảchkýt

7.7.1. Ký

ự ....................................................251

......................................................251
7.7.2. Cấc phép toàỉ ký ị r ....................................253
7.7.3. Chuịng ừtnh mái-imfge ............................ 255
B à itặ p -P h ầ ìS ..................1 ............................ 258
7.8.Toântìdetete
259
Tổng hết........ . .............................................. 261


Chương 8. DỆ QUY
G ở i íhlệu (ý)ưong.................. .....................................263
8.1. Cách viết hám dệ q u y .................................................264
8.2. Cac vỉ dụ khấc vé dệ quy .. ....................................... 269
8 3, Gỡ lỏi ham đè q uy..... ............................................... 274

B ồ itấ p -P h ố n l.. ..........................
........................ 276
8.4. Đệ quy không tuyến tính- Bãi toán Tháp Hà Nội.... 277
8 5. ĩh u ậ ỉ toán dệ quy va quan hệ Iruy h ổ i. .................... 281
B à t iậ p - P h ấ n l ....... ........... ;........... ......................... 288
8 6 Đệ quỵ với danh sách.................................................. 289
8 6.1. T írti tổng cẩc già tn trong một ổanh sảch...2B9
8.6.2. X ây ơ ự ĩị càc d v m ục.....................................290
8.6 3. Trônvàtàch ddnhsàch .............................292
8 6 4 Ĩ//V) toán ơ m giàn ĩrén các $ố nguyên rất lởn
......................................................................................295
3.7. Thuật íoân chia để trị......................... ........................ 303
Bái tập • phổn 3 .... 1 ....
.....................................310
8 8. Đệ quý tương hỗ............................... ... ........................ 311

8àiíàp-Phìn4 ...........................................316
8 9. Vẽ các dường gấp kh ú c.... .........................................316
8.9.1. C ảcởườ ig gấp khúc H ỉb e ỉt ...........................316
Bài ĩặp - phần 5........................................................... 326
T ẩng kéì ....................................................................... 330

Chương 9. MẢNG
Giởi thtệu ỚHJWg........................................................ 331
9,1 Những khái niệm cơ bản vé m ản g .............................331
9.1 1. Tạo mảng ......................................................... 331
9,12. ĩr u y nhặp phẩn tử tỉong một mảng tỶiờ

chỉsó............. ...................................... .....332


10.4. Văn pham phi ngữ c ả n h ......................................... 430
10 5. Ngởn ngứdặc tả ả n h ................................................. 431
10.5 1. Òị ĩ ^ nghĩa chinh xác rừa PSỈ............... 434
Bài tậ p - phần 2 . .............. ..........................................437
10 6. Chương trinh PSL................... ................................438
1 0 6 .1 .^ .
C .......................... . .............. ........ 438
10.6 2.pnepm cess.C ...................................................441
10.6.3./e x e r C ......................................................... 442
10.6 4. p a rse .c ............................................................ 449
10.6 5. s^ape.C vổ srtapeLíSf.C............................... 455
10.6.6. co m p u to S h a p e ic ........................................ 460
10.6.7. scneen.C ...... ........... ..................... ..............466
Bài tậ p -p h ầ n 3 ..........................................................466
Tồng k é t ................. ................................................... 469
10.7. Chương trinh PSL....................................................... 470
10.7.1.PS/A. ........1 . ....... . . . 1 ^ . . . ^ ....
...471
10.7.2./fi)rer./ ĩ ....................................................... „473
1 0 .7 ^ . shũoc.h .... ......... ............................... ......474
10.7.4.
p s /.c ....................................................476
107.5.
preprocess.C .............................................477
10.7.6 /e x e r .c .......................................................... 477
10 7 7 . p a f s e . c ...........................................................480
107.8.
shape.c .....................................................484
^ữ .7 .9 .sh àp eỉistc ................................. ..................486
10 7.10. compưcshapes.C ........................................487

10.7.11. screen.C .... ....................... -........................48S
Phụ lục A. Citc quy tac ưu tién.......................... ..................... 490

Phụ lục B. Các Hàm toán học trong math.h.................................. 492
Phụ lục c. Các Thư vỉện hữu ích
t ) c t y p € . h ..........!.............................................................493

C.2. stringỳỉ .......................................................................... 4&4
9.1.3 Tính toàn ir ê n c ả c c h ỉs ố ...............................332
c.2.stdlò.h........... ........... ..............................494
9.1 4 Khờ'tạo màng ................................... ............. 333
Phụ lục D. Nhặp/Xuất vdl iostream.h và ỉomanip.h
9.1.5 Các vòng lặp x ừ lý mảTg đơn g ià n ................ 333
D.1. Định dạng xuấ! vã nh ập ......................................... . 496
9.1,6. So sảnh màng vả darýì sảch ..........................336
D.2. Thư viẻnĩuổng............................................................ 49B
Bải tặp - Phán m ộ tl...... .............................................336
Phụ iục E. Các dặc tính khảc của
9 2 Truyén mảng cho h ãm ........................................ .....337
E.1. Chú thích kiểu c ũ ............ ........................................... 503
9.2.2. Các hàm
mảng sừ dựìg bộ rứìở
E.2. Chỉ thị tíén xử lý ..... . . . .
. . .
503
hiện ỉh ừ ........................^......... ....................................339
£ . 2 x n ơ c ỉm .............................................................. 503
9.2.3. Căp phát màng trong bộ nhớ H eap ................341
E.2.2. Mifacf..................................................................504
B à itâ p ‘ p h ẩ n 2 ................ .......................................... 343

E 3. Kiểu dữ li ệ u ................................................................. 505
9.3 Gở rối với m ảng..................... ........... ........................ 345
E.3.1. Toản ĩừ sizeo f. ................................................. 506
9.4. Xâu..... .......... “ .............. ........... -.................. ............ 355
E.3 2. Cóc kiếu co sẵn kh ố c ..................................... 506
Bà! táp phẩn 3 ............................................................. 362
Chuyển đổị kiểu ............................. ................. 507
5 5- Sáp xếp m ản g ..........................................................363
E.3.4. Khaibồo coỉist ................................................. SOS
9.5.1. X ử lỷ mảng bằng ơẻQuỵ..................................363
E.3.5. Kiều số nguyên rỶtư kiểu lo g ỉc ...................... 509
9.5 2 Sàp xếp ctìọn................ ............................................................................................................................................365
E 3.6. Toàn từ .......................... ...................................509
9.5.3. Sắp xép chèn .................................................... 367
E.3.7. Số học con t r ò .............. ..................................512
9.5 4, O uicksort ....... ................................. ................ 370
E .z.s.typedef ...... ...................................................... 513
B ả ịtặ p p h é n 4 .............................................................. 377
£.2.9. Hàm như ổ ó is ổ ............................ ................. 513
96 , Bảng 1 1 .............................................................. .......380
E.4. Hám nội tuyén............................................................. 516’
Bài tập phán 5 .............................................................. 393
E.5. Cấu trúc diéu khiển.....................................................5 1 Ĩ
9 7 . Mảng hâi chiéu
E.6. Khuòn m ắu...................................................................518‘
9 7 .1. Cấc vấn ơé cơ bản của mảng hai chiéu ..... 396
E 7 . Lớp.................................................. .... 1 ....... ^.518
9.7.2. Truỳén màng hai chtểư cho hà m .................... 399
E.7.1 C ú p h ả p c ù a lở p .............................................. 51Ô'
9.7.3. Khởi tạo mảng hai chiéu .................................. 399

Ẹ . l l C a u t n k ............................................................520
9 7 4 V ỗ N n h .... ....................................... ............... 400
6.7.3. Hám ố ạ n ........................................................ .520
9.7,5. G ấ ih ệ phương trình tuyén tirứi....................... 409
E 7 .4 . Càc /<5p đệ quy tương h ỗ .............................. 522
B à itặ p -p h ắ n S ............................................................ 414
E7.5. Đinh nghĩa cục b ộ . .................... ....... . 523
Tổng k é t ..... ...................................... ........................... 417
E-8. Thừa kế lớ p................................................................ .525
Chưcmg 10. ỨNG DỤNG MULTI'FỊLE
E.8.1 Các thảnh phẩn héng. c/ĩung và bào vớ .... 527
Giới
ứH/ơng.,.................................. ....................419
Ẹ.Q.2 Hàm d ự n g ................ ............................... . 528
10.1. Biẻn
Tiéng f é ............ .......................................... 420'
E.8.3 Hàm ảo và két buộc dộng ..... .........................529
10.2. TKư viện luổng............................................................. 424
E.8.4 V i đ ụ ................ .... ” 1 5 3 2
10.3. C ả c ô à số
lệ n h ..............................................428
E,9. Các đặc lính còn lạ i................ ................................... 535


\

'l

Chuong 1


LẬP TRÌNH LÀ GỈ?
Giới th iệu chương
Trước khí viết các chương trinh hằng ngôn ngữ c+-f, chương này sẽ gìới thiệu về
quá trinh suy luận và các kỹ năng giải quyết bài toán cẩn trong lập trình. Ta sẽ
tim lời giải cho hài toán: "Dan chú chuột đi qua mẽ cung". Trong chương này
củng giải thích một s ố thhếảt ngữ: thuảí toán, file, trinh soạn thảo, trinh hiên
dịch, gỡ lồi uà hệ điều hành.

Q uan niệm cho rằn^" máy tính như

m ột thử ựì huyền bí là khá phổ

hiến. Nó có thể

ịíây ra sự hỗn loạn của các hóa đơn điện thoại, làm ^ửi nhầm séc, ra các thông háo

quá hạn của thư viện v.v... N h ận thức chunK v ề m áy tính là một thực thể có khả nầĩìịĩ thưc
thi cằc cCmịX viêc kinh doanh, quản lý, khoa học và nhiều m ặt khác của cuộc sống. Lúc đầu
từ "m á y tính" thiíiín^r tạo nên sự e riịĩạì, lỗi của con n^ười cớ thế dề dầrxịĩ đổ cho m áy tính:
"đò hán là do lồi m áy tính" h ay "m áy tính đà hóĩiK". Nhưng thực chất m áy tính chỉ là tập
hợp các d â y dần và các vi mạch được tổ chức sao cho có thể thực hiện nhanh chóng các phép
toán đơn p ả n như cộn^ các số. V ậ y thì sao m áy tính lại có kh ả năníí lớn như thế? Điều ỉíì

đã ịĩiúp hộp linh kiện điện tử th à n h một côn^ cụ m ạnh như vậy?

Đó chính là do lập trình . Một chương trình là một tập các lệnh bảo cho máy tính hiết
chính xác các việc cần làm , Các chưtíníí trình có thể viết trôn bất cứ ngôn ngữ lập trình nào

- Ngỏn ngữ lập trình ỉà một n^íỏn n^ữ nhân tạo xây dựn^" các d ã y lệnh cho máy tính. Mỗi
Uịiòn n^ữ ĩập trình thích hỢp với các kiểu ửn^ dụn^í và máy tính khác nhau. Cuõn sách này

nói về nị^Cm ngữ C++. Nhưn^ dù hạn sử dụng nịíôn nííữ nào thì các quá trình ^iái quyết yêu
cầu đ ặt ra cCin^

nhau.

Việc đầu tiên tronjí lập trình là phải làm sánịí tỏ vấn đề. Yêu cầu thực sự là p ? Làm
th ế nào để chia cỏnị* việc thành từnịĩ phần dễ híín'.^ Thuật toán ( d ã y các bước) nao thích hỢp
đế ^nải quyết hài toán? Cài đặt thuật toán vào chưon^^ trình như th ế nào? Liệu chươnK
trình có làm việc? Chườn^í trình có được viết sá n g sủa, có ch ạy nhanh khôn^? Có thể sửa
đối dễ dànjí khi cần? Chường trĩnh chiếm quá nhiều bộ nhớ? Đ â y lá cảu hổi đật ra cho các
nhà lập trình, nhữn^ nịíười chuyên thiết k ế và viết chương trình m áy tính.

1.1. Bài toán ‘Chú chuột trong mê cung”
T a bát đầu học lập trình bằng cách phán tích ưiột bài toán có chửa các phần tử cd hản
cùa hất kỳ bài toán lập trình nào. Bài toán đặt ra là: H ã y đưa ra các lệnh chỉ dẫn sao cho

•1

ì


1

0

_____________________________ _

____________ Chương 1. LẬP TRÌNH LÃ GỈ?

turn rig ht;

i£ f«clng a waix? th«n
turn ỉa ft and i f f«cing a w«ll? thttn
turn l«ft «nd i£ facing m wall? thttn
ị;

?
f

lặp lại liỏn tục cho đến khi khônK còn tườnK trước mát. Ciả sử rầnịí chú chuột khônK bị
nhốt tronpí một phỏn^ kín thì các lệnh trôn sẽ đưa nó đến một cửa mỏ.
Sử dụnti; vài ký hiệu của C++ đế nhóm các lệnh và viết lại như sau:

r

turn right,i f (£acỉng a wall?) {
turn le f t and i f (facỉng a wall?) {
turn l«£t and i f (facing m wall?) {
)
}
)



Ta thấv các từ "then" được bỏ đi, cặp dấu I ì àủnịĩ để nhỏm các lệnh, cặp dấu 0 đế chỉ các
điều kiện. Còn ký hiệu
nghĩa là phải tiếp tục các lệnh txiơnịĩ tự đến khi chuột ịĩặp một
cửa mỏ. Vì vậy, có thê viết:
turn rig h t;
whil« {facỉng a wall?) {
turn


p

i
ị'

)

n^hĩa là sau khi rẽ phải, liên tục kiểm tra xem có ịiặp tưừn^ĩ khôĩìK, nếu ịĩập thì rẽ trá i. Sự
khác biệt KÌữa whỉi® và i f là: whii« - thực hiện liên tục nếu còn đúng, còn i f thì chỉ kiểm
tra một lần.

...



Sau khi theo các lệnh trên thì sẽ íĩặpmột cửa mở n^hĩa là có thế đi thẳnK m à khỏn^
^ặp tườnịĩ và chuột sẽ lặp lại tiến trình đỏ cho đến khi thoát khỏi mêcung:
turn riạht;
Ỉf«cỉn9 a

{

turn x«ft;
}

st«p forward;
i£ {not outsidtt th« aiaz«?) {
turn r i0 ỉt ;
whil« (íacing « w«ll?) (

turn Ioft;
}

step forw«rd;
if (not outside thm m«z«?) {
turn riọht;
whiltt (facing a W«X1?) {
turn Xeft;
)

atmp forward;
lf (not outsidtt tha raastt?) {
}
>
>
L


11

NGỐN NGỮ LẬP TRỈNH Ct^• DÀNH CHO SINH VIÉN

Ký hiệu
nghĩa là lặp lại các lệnh trôn cho đến khi thoát khỏi mô cunu. Giống
trường hcip trước, ta có thể viết lại một cách chính xác và xúc tích hơn như sau:
whil« (not out8Ỉd« thm
turn right;

M Z « ? )


{

whiX« ỉfacing a traXl?) {
turn lm£t:

}
step forward;

Đoạn chươiìịí trình trôn khác trước là đầu tiên kiểm tra xem chú chuột đã ra khỏi mê C U ĨI Í Ỉ
chưa rồi mới tiến hành các lệnh còn lại. Vì chú chuột ban đầu được đ ặt Tìịxoầi mẽ cuììịĩ nên
cần có lệnh để nó đi vào mê cung, tiếp đến mới là các lệnh lặp trên.
atmp forward; // Cau x«nh nay dua chuot vao M
vrhile (not outsida the maxtt?) {
turn right;

w hiltt ( f a c in 9 m ir a ll? )

cung

(

turn Imttĩ

)

stmp

f o r w a r d ; / / Lam c a c h nao dtt b i t t t duoc
/ / c h u o t khong d o i d ỉ« n v o i tu o n g


}
(hai dấu Jĩạch chéo để miêu tả lời chú thích)
Đoạn chương trìn h trên th ậ t đơn ^iản nhưnií có thể đưa được chú chuột ra khỏi mê
cunií hằng cách luôn đi sá t bẽn phải các bức tưòng. Khi chạy chương trinh, chuột sẽ luôn đi
theo thuật toán đã chỉ và thoát khỏi mô cung. Xum hình sau:

ChưíỉnỊí trinh trên là kết quả cùa việc phán tích hài toán thành một th u ậ t toán khả thi
(tất nhiên, có thể tiếp cận hài toán theo những cách khác và tạo ra các th u ậ t toán khác để
dần chuột thoát khỏi mô cuniĩ theo các đưòng khác nhau!).

Bài tập - Phẩn 1
ì. Điều p xảy ra nếu đ ặt chú chuột trước lối vào một mẽ cung không có lối ra?
2. Viết lại chương trình với th u ật toán mới: "Luôn đi sát ben trái các bửc tưòn^”. Các
thay đối cần thiết của chưđng trìn h đối với th u ật toán mới này?
3. Nếu chú chuột có thể trả lời được lệnh itaXi mt right?- "có tưòng ỏ bôn phải"-thì liệu
có thể làm chương trình đơn gikn hơn với lệnh đó? Nếu có. hã y viết chương trìn h ,
4. Có thể thêm vào lệnh turn around - "quay nịĩvíúc lại" để chươriịĩ trình đơn giản hơn?
Nêu cổ, hã y viết lại chương trình.

J


12^ ___________________________________________________________ Chương 1.

LẬP TRỈNHLA GÌ?

5. Điều ^ xảy ra khi chuột được đặt troriỊí mô cuĩìịĩ không cỏ cả líYi vào và lối ra?
6. Giả sử mỏ cunK có ìối vào cũnK là lối ra thì chú chuột cỏ thể đi qua một phònịỉ tót
kỳ nhiều nhất bao nhiêu lần?
7. Giả sử chú chuột trả lòi được lệnh £acing north? đôi diện V(ìi hướnịĩ Bắc. Viết CIC

lệnh đế nó quay về hướníĩ Bắc.

8. Giả sử mọi mô cung có ít nhất một \ối vào, một lôi ra và tưòĩiíí hao quanh. Sử dụnp5
lệnh ban đầu để viết chương trình làm cho chuột đi vào mé cun^^ và đâm vào m)t
bức tườnK(Xem lòi ^iải tronịí cuôn **Ngôn ngữ lập trinh C++ dành cho sinh viên - Bài tập'*)

1.2. Máy tính và ngôn ngữ lập trình
Máy tính, cũn^ như chú chuột ở phần trước chỉ hiểu được và hành động hay trả líti đVi
với một sô^ lưỢĩiK íĩiới hạn các lệnh được dự đoán trướo - gụi là tập lệnh. Viết chương trìrh
n^hĩa là thể hiện việc ^iải quyết bài toán dưới dạníỉ th u ậ t toán, bằn^ các lệnh có trunfĩ táp
lệnh. Tất nhiên, tập lệnh của máy tính phức tạp hơn nhiều so với lệnh của chú chuột. Cac
tập lệnh cũng khác nhau đôl với mỗi máy, nhưng mọi tập lệnh của máy tín h đều hao ịĩồii
các chức náng;
• Thực hiện các phép toán sô' học đơn giản với số nguyên, phân sô' và có khả nánị( lưu
"
trử các kết quả trung ííian.
• Xử lý dã y
ký tự, ký hiệu và các số, có thể so sánh các mục theo kích thước tươn^
đôl hoặc bằng nhau.
• Nhận thôtiỊí tin (input) từ các nguồn như bàn phím, đĩa tử, điện thoại, bán^ từ hay
các máy tính khác và íĩửi lại thông tin (output) cho các thiết bị như máy in, đĩa từ,
bánfĩ từ hay máy tính cuôì.
Các lệnh máy đơn ịĩiản khi kết hỢp một cách thôníĩ minh có thể thực hiện các côní; việc
rấ t khó khăn và phức tạp. Lợi th ế lớn nhất của máy tính là nó có thể thi hành các lệnh vói
tốc độ rấ t nhanh-hàn^ triệu lệnh troriỊĩ một RÌây. Mặc dù chỉ phản ứng được với vài lệnh
đrfn ịỉiản nhưnK niáy tính lại có thể thực thi rấ t nhanh các CÔĨIÍĨ việc có thể cực kỳ phức tạp.
Quá trình viết một chươĩiịĩ trình máy tính hoàn toàn
với quy trình ịĩiki bài toán
con chuột: Ta phải biết các lệnh có sán, phải hiểu bài toán cần được ịíiải quyết để lập một
thuật toán ííiải, sau đó thể hiện thuật toán dưới dạng các lệnh máy. Đó là những cỏriK việc

khó khăn. Nhiều nám qua, các chuyên ^ia máy tính đã tìm mọi cách để làm chúnjĩ trở nên
dề dàntĩ hơn. Đáng kể nhất là nịĩười lập trình không còn bị ịíiới hạn với tập lệnh máy nữa:
họ sử dụrìỊi ngôn nịĩữ lập trìn h bậc cao và máy tính sẽ chuyển kết quả thành các lệnh máy
để chươnịĩ trình có thể chạy được.
Có rất nhiểu ngôn nfíữ lập trình, C++ chỉ là một trong các ĩiẶíỏn
đó. Đặc tính nói
lên bản chất của ngôn ngữ lập trình là các câu lệnh được sừ dụníĩ một cách chính xác tuân
theo các quy lu ật nj;hiôm ngặt. Do đó, nó tương phản với ngôn ngữ của loài ngưòi và sự
chính xác chặt chẻ Ịiầy nên trở ngại lớn n h ất cho những người mới học lập trìn h .


NGỔN NGỮ LẬP TRlNH

DẨNH CHO SINH VIÉN___________________________________________13^

C++ được thiết kế như một ngôn ngữ cho các mục tiỏu tổníĩ quát. Đó là một úịĩòĩì ngữ
rất mạnh. Do vậy, các hài học trong ịĩiáo trình này không chỉ áp dụnịĩ cho C++ mà còn cho
tất cả các nự;ồn njíữ khác.

1.3. Chương trình và thuật toán
Như mô hình hài toán chú chuột trong mê cung đã chỉ rõ, trước khi bắt đầu viết một
chướng trình (troTìịi C++ hay bất kỳ ngôn ngữ nào) níĩười lập trình phải có khái niệm chính
xác vế nhiệm vụ của chươĩìíĩ trình và cách để chương trìn h thực hiện nhiệm vụ đó. T rừ khi
đã nắm rấ t vữnjí về th u ậ t toán, còn không, lập trình sẽ là một côn^ việc rấ t khó khàn và
nhiều khi kết quả nhận đưỢc khi chạy chương trình th ật là thảm hại! Trước khi đ ặ t bút
viết, cẫn níĩhiên cửu kỹ đối tượniĩ và tổ chức tư liệu. Sau khi đã thiết kế một thuật toán,
chươnK trìn h nên đưỢc viết dưởi phong cách sáníĩ sủa và dễ hiểu.
Cuô'n sácli này sẽ hưổng dẫn cách thiết kế các thuật toán và cách thể hiện chúníĩ bằnj;
C++. Cụ thể là; níóì pháp của C++, các vấn để về cách trình bày và cuối cùng, cách thiết kế
và cài đặt một thuật toán. Trước tiẽn, việc viết một chương trình đúng cú pháp dưòng như

là phần khó n h ất. Nó yêu cầu phải thôníĩ thạo các quy tắc về nịĩử pháp và áp dụnỉí chúnK
troníĩ thực hành. Thônjĩ thạo cú pháp C++ là khó hơn ta tưởng chỉ vì máy tính hoàn toàn
khônK bỏ qua các lỗi. Trong
một lỗi như quên đấu chấm phẩy (;) có thế trỏ th àn h một
lồi nặnjĩ của chương trìn h . Tuy nhiên, về lâu dài, nó chỉ là cách học để tuân thủ các quy tắc
của ngôn ngữ mà thôi.
Viết một chương trình cho sáng sủa lại là một việc khó khăn hơn vì có rất ít các quy
tắc chính xác, chỉ có những nguyên tắc tổnịí quát. Tuy thế, có những sáng tạo nhỏ trong
việc viết một chướng trình sán^ĩ sủa. Đó là việc tổ chửc, chú ý tới chi tiết, và cảm nhận nó
theo kinh nghiệm. Việc này có được sau khi đã lập trình nhiều. Cuôl củnịĩ, sau hai vấn đề
trên thì thiết kế một thuật toán mới thực sự là phần khó khán nhất, phần quan trọng nhất
và củxìịỉ. là phần hấp dẫn nhất. Nó yêu cầu các kỹ náng khéo léo để giải quyết bài toán. Ta
sẽ phải học và nhớ rất nhiều các kỹ th u ậ t để sử dụng khi lập trìn h và hiết kết hđp các
phưdnịỉ án thực hiện côníí việc. Tuy thế, thỉnh thoảng vẫn có thể quôn và phải học lại như
một kỹ th u ặt mới. Những vàn đề đó thực sự đáng ngại nhưng sẽ m ất dần đi khi n^ười lập
trình n^ày cầYiịĩ biết thêm nhiều kỹ th u ậ t mới và hoàn thiện h(ỉn.
Thiết kê và cài đặt một th u ậ t toán yôu cầu chú ý đến các vấn để khôriK chỉ của C++.
Khôntí chỉ cần các thuật toán giải quyết đúng bài toán, mà còn cần phải có tính hiệu quả,
dề hiểvi và tin cậy tron^ các điểu kiện khác nhau. Các vân đề đó được đề cập tron^ ciuVn
sách này cùnịí vói C++.

1.4. Các bước thực tế trong iập trình
Sau khi đã th iết kế một th u ật toán và viết chương trình trôn KÌấy, cần phải nhập nó
vao một filo tronịí máy tính, ịid lỗi (loại bỏ lỗi của chương trình) để chưđnỉĩ trình trỏ th àn h
một chưíỉng trìn h hoàn thiện. File là tập hỢp các thông tin như ván bản, dữ liệu hay
chơíín^ trình được lưn trữ. Nhập và hiệu chỉnh chươn^í trìn h đưỢc tiến hành nhò trình soạn
thảo (editor), một chương trình cho phép chèn, xóa các dònịĩ hay các ký tự, di chuyển chúnị?
hay tìin kiếm môt sô' ký tự đác biệt. T rình soạn thảo cho phép lưu trữ hay phục hổi những
ịẠ đươc viết ra IGn đĩa từ, bộ nhớ chính của máy tính. Sừ dụng tốt trình soạn thào sẽ làm
cho việc nhập và gỡ lỗi một chương trìn h dễ dàng hớn. -



1

4

____________________________________________________ Chương 1. LẬP TRlNH LẦGÌ?

Nên nhớ rằnK các chương trình được viết và nhập troĩìỊĩ C++, một ngôn n^ữ bậc cao
(củnK như BASIC, Fortran và Pascal), do đó cần phải đưỢc biỏn dịch san^í n^^ôn n^íữ máy để
có thể chạv được trực tiếp báníĩ phần cửnịí của máy tính. Do đó, khi đã cỏ một file chửa
chưíỉnK trìn h , cần một chương trìn h khác đế chuyển đổi chưdnK trình đó saníí nííôn n^ữ
máv Kọi là trình biên dịch (compiler). Nếu chươníí trình có lỗi cú pháp (syntactic errors)
việc hiôn dịch sẽ khônịí thành côn^ và máy tính sẽ hiện thông háo lỗi (thưòn^ĩ là nuẮn và
khó hiểu). Chưrtn^ trìn h sẽ cần sửa đổi lại các lồi đó và sau vài lần như vậy sẽ trở thành
một chươn^í trình có thể chạy đưỢc.
Tuy nhiên trìn h hiên dịch chỉ kiểm tra các lỗi cú pháp do đó khôníĩ hề đảm bảo chiííỉĩiịí
trìn h sẽ chạv đún^ như mon^ muôn. Nói cách khác, chươnjí trình có thể đún^ về n^ữ pháp
nhưnịĩ khi chạy sẽ khôníĩ cho kết quả mon^ đợi. Nhữriịí lỗi đó chỉ xuất hiện khi chạy
chưdn^ trìn h , ịĩọi là lỗi thi hành (run-tim e errors) hay lỗi loí^ic (logic errors) và chún^ cũnịí
cần được sửa lại như các lỗi cú pháp. Lỗi th i hành có thể là do nhầm lẫn khi nhập chương
trìn h và cũnjí có thẻ là do nhầm lẫn troĩiịí th u ậ t toán. Tronịỉ hất cứ trưỏnịí hỢp nào đểu
phải sử dụn^ trìn h soạn thảo và trìn h biên dịch để sửa chương trình cho đến khi chạy được.
Thử chạy chươníí trìn h với nhiều dữ liệu vào đẻ chác chắn nó làm việc đúnK, nếu khôn^^ sẽ
phải quay lại các bước trên. Quá trìn h như vặy ỉíọi là ịĩờ lổi (dehuịĩginK).
Nhữníí điều đã đề cập ở trẽn vể soạn thảo - biên dịch - chạy chư(ỉnK trình được minh
họa ở hình 1.1. Nííay d ư d i( S o ạ n t^ ^ lã một chưíỉn^ trình C++.(fíĩcn d ĩ^ c h u y e n chươnK
trìn h C++ th àn h ngôn ngũ m aỹr"6an đầu, các nhà lập trình phaTVĩSEchUdng trìn h trực
tiếp bằng n^ĩôn n^ữ máy. còn bây íĩiờ hầu như tấ t cả viết hằnK ĩiịĩôn n^íữ hậc cao. Níĩỗn nỊ^^ữ
máy được sừ dụng bởi trình biên dịch» máy tính sẽ chạy trên ngôn Xìịíử này.

Cả trìn h soạn thảo và trìn h biên dịch làm việc tronỊĩ một mỗi trưòn^; Kọi là hệ điểu
hành (OperatiĩiK-system). Đó là chươnu trìn h rấ t phức tạp điểu khiển toàn bộ máy tín h ,
bao ịĩồm mọi p h ần cứnịĩ nôi vỏi m áy CŨĨỈK n h ư các chương trìn h chạy trẽ n chúng. Tronịí CÁC
máy nhiều ĩiKưòi sử dụníí, hệ điểu hành là chưdníx trình cho phép đáng nhập hay đáníĩ x u ết
hệ thôn^; tạo, chuyển, xóa hay in các file; ííọi các trình biên dịch hay các trình soạn thảo wà
chạy các chươn^ĩ trìn h . Vởi máy tính cá nhân thì khôn^ĩ phải đầnịĩ nhập hay đănK xuất, cảc
tác vụ tạo, di chuyển, xóa vả in ra các file, chạy các chươníT trình» thường được thực hiện
bỏi một chươntĩ trìn h ịỉhép KÌữa trìn h biôn dịch và trình soạn thảo.
Tronj; các phần trôn, ta cô' trá n h miôu tả về phần cửn^ của máy tính, đặc hiệt là ĩĩitối
quan hệ ịíiữa CPU (bộ xử lý trunj; tâm ) với bộ nhớ dành cho nó và các thiết bị khác Jíăn V(ỏi
nỏ. Giông như khi học lái xe, ta chẳn^ cần quan tâm các máy móc bOn tron^ vận hành nhiư
th ế nào, chỉ cần lái cho xe chạy mà thôi! Cànjĩ n^ày máy tính cànK đưỢc thiết kế để tirở
thành '*thân thiện*' hơn và ngưòi sử dụnịĩ khônịĩ cần phải biêt rò lăm các chi tiết về điệm
hay các tác vụ hỏn tron^ĩ của máy tính như thời kì đầu máy tính mới xuâ^t hiện. N^^ày na^y,
có thể sử dụriịĩ máy tính cho rấ t nhiều tác vụ mà chẳng cần biết điều ịờ xảy ra hôn trom^^
máv tính, có thê viết chưdnự trìn h chỉ với rấ t ít kiến thửc về các vận hành hỏn tron^ mávy.
Tất nhiOn» để íxiải quyết các vấn để ịĩiới hạn của máy tính ta cần biết nhiều và nhiều hcíín
nữa, nhưnịí các miêu tả ngắn ịĩọn trên đã đủ cho mục đích của chươníĩ này.
Chươníí tới sẽ xem xét cấu trúc tổn^^ th ể của một chưdn^ trình C++ và Jíiới thiệu vmi
tính náng cớ bản. Các chưdníí tiếp theo sẽ đi sâu hơn về C++ và việc thiết kế, thực thi cáic
th u à t toán.


NGỔN NGỮ LẬP TRlNH C-t-H DẨNH CHO SINH VIÊN

15

Trỉnh soạn thảo

\


Các lỗi


biên dịch

f

vã cảnh
báo

(» I

Ìb*M*r4 H

í
I
\



t IM HiuMlanv roKr

>««
«tor|t" («•>

....



//
.» •

/L _
’ rv n '.

./



\

X
\

\

•!>*

N

\

^

\

^

\


•#<•••.

'iieDesMti e
4C«t.»«V . . I*.«»
I
«-«»• •.* «-»«««« ri «- «.•&•*»« •* •
a« •■««17» ««
•« *vn'

•'«*>«

,
1

« 4«bl*



\
\

. « . • : /-

\

V

V«(M


\

\

\
\

•««

«««

.n»»r M



.»1^I

_ .— 1**
«•>

Lỗi thi hành

■»»«Lj1»ậ>
*o«o.J»»iM
*e».«nia
<««. I ara
I

Đắu ra


•1« !««»•■•»4(

không
««1

chính xa

ttotlklx
% («

«»»


M>>

. fti«0

»«|*l •ll

tMid

r« rv l-« m 4 i % ft*
<•7**■ #
« t« |« i a «t»«

•ki.ấadgo*o>».Wi

1
/


I*•

y

/

/

/

/

/

/

l* .4
3» 1
a*
)« .•
» • .♦

>• «
II •

»>-*
11 4

ề4


«

••,4
4S.«

HỈNH 1.1. Chu trình soạn thào, bỉén dịch và gõ lổỉ một c h iK ^ trình. Chương Irĩnh duọc minh họa là chương ỉrình
bàng nhiệt độ ỏ chuong 2; cổc kết quà ro ciKiọc minh bọQ ò hình 2.1.

Tổng kết
Máy tính có thế làm đưỢc rấ t nhiều điểu tuyệt vời dưới quyển kiểm soát của một n^ưòi
lập trìn h kinh nịíhiệm. Ngưừi đọc đã có đưỢc vài khái niệm về lập trìn h . Vấn đề trưóc tiên
cần đưỢc phân tích rỏ ràn^, sau đó phát triển một th u ậ t toán tương ứng; chướng trìn h được
viết, n hập vào một fik\ sửa lại (nếu cần) bằnK trìn h biôn dịch và trìn h soạn thảo, cuôi cùng
được đem chạy và gỡ lỗi.


Chưong 2

CÁC PHẦN TỬ Cơ BẢN CỦA C++
G iới th iệ u chương

Chương này sẽ xem xét một chương trinh mẫu đ ế minh họa cho cấu trúc một
chương trinh C++ và vái phép tính đơn giản trên các số. Một vài công cụ cơ bản
đ ể điều khiển nhập, xuất dữ liệu cùng các vòng lặp đơn giản đưỢc đưa ra đủ cho
người đọc bắt đầu tự viết một chương trình. Phần cuôì giài thiệu quá trinh gở lỗi
đ ể có được một chương trinh hoàn chỉnh.

2.1. Hai chương trình đơn giản
Xét chương trìn h đơn íĩiàn đã hoàn chỉnh sau:
1


iincludtt <io8trttM.h>

2

iincludtt <ion«iiÌp.h>

3

4

M in

5

//

o

{

S a y h m X lo .

6
7

// £dward M. teingold, Nov^đ>«r 12, 1993

8


9

cottt «

"Itello!";

10 }

Khi biên dịch và thực hiện chương trìn h trên m àn hình sẽ xuất hiện dòng:
HttXXo!

Ta sẽ xem xét từng th àn h phần của chương trìn h này. Đầu tiên là các con sô' chĩ dòng
khônịí thuộc chướnịĩ trìn h (không Kỏ chúng vào file chứa chương trìn h ). Chúnỉĩ chỉ có ý
nghía cho việc phân tích chương trình. Dòng 1 và 2 là các dẫn hướng hiên dịch cần được đặt
ỏ đầu mọi chương trìn h . Chúng sẽ được giải thích sau. Còn hây giò h ã y tạm thừa nhận
chúnịĩ- Dòn^ĩ 3 là một dòng trôn^ĩ chỉ để chưđn^ĩ trìn h dề đọc. Nó ngăn cách dẫn hướn^ biÊn
dịch* với phần đầu chương trìn h (heading) từ dòn^ 4 đến àòn)ĩ 7. Các dòng này bắt đầu
chương trình hằnjĩ từ khóa mmin và hai dòng chú thích cho biết tác ^iả, ngày viết và mục
đích của chương trìn h . Các dòníí chú thích đưỢc bắt đầu bằng cặp dấu Rạch chéo // d ành cho
người đọc chương trìn h . Máy tín h sẽ bỏ qua chúng.

* H ai dònK n à y hư ó n g d ả n cho tr ìn h Hiên dịch đ ặ t 2 file c h u ẩ n "io strtía m .h " và "io m an ip .h " v ào đ ầu chươníĩ tr in h . H ai
file n ày c h ^ các đ ịn h n g h ĩa cầ n để chư ơng tr ìn h có th ể n h ậ p /x u ấ t d ừ liệvỉ, V ấn để n à y sẻ đvrợc nói kỹ hơn đ chư ơng 10.



NGÒN NGỮ LẬP TRlNH

DẨNH CHO SINH VIÊN___________________________________________ n


Dònu 9:
9 cout «

các ký tự "H '\ "e'\ "1", T \ V* và

hiển thị từiiíĩ ký tự ra m àn h ìn h ^h àn h cảu chào.

'ĩiêp theo, xét một chương trìn h yêu cầu ngưòi sử dụng nhập vào nhiệt độ theọ độ
Pahrenheit và chuyển nó sang độ Celsius. Ví dụ, khi chạy chương trìn h sẽ có dạng;
PlttAsa typ« thm t*ii^r«tur«

r) : 68

68 dmq F ỉs 20 dmg c

Sau đây là chương trình;
1

iincXude <io8trtt«Bi.h>

2

#includa <ioaanỉp.h>

3

4

m a ỉn {)


5

// C h u y M nhlttt do F«hrttnhttỉt sang C«l8Ìus

{

6

7

// Smmvml N. Kamỉn, Jwam 1, 1993

8

float tmmpmrtíturm;ti Hhl«t do Fahrenhttit.

9

10
11

typ« thm tmmpmrmturm

cout

12

iđmg F) :

cin »t«iiqp«rfttur«;


«tmmỊmrmtìizm ỉ

13

cout

14

cout « "

15

cout « ( 5 . 0 * (tttn^ratura - 32)) / 9.0;

16

cout « « d » g C";

d*g r is " ;

17 }

Các dần hướng hiôn dịch và p h ần đầu chương trìn h tương tự như chưdng trìn h đầu,
nhưng phần quan trọníí nhất cùa chương trìn h , từ dònií 9 đến dòng 16, thì phức tạp hơn.
Dòiỉịị 11 và các dòng la đến 16
ký tự ra m àn hình. Dòng 12 cho máy tính hiết ngưòi sử
dụng đang cần nhập vào tại đảy. Giá tri nhập vào sè được lưu lại để sử dụnp sau dưới một
tên mantí ý nghĩa hiểu tưỢĩiK là tamp^ratur*. Tên mang tính hình thức này đã đưỢc cho biết
ở dòn^ lệnh 9. Dòng 16 lấy giá trị t«iạpttratur« đã được lưu và thực hiện vài phép tính để

tạo ra ịĩiá trị độ Celsius tưởng ứng. Ký hiệu * được dùng trong C++ như phép nhán. Cách
lưu các tĩiá trị như taiBperatur* sẽ được nói đến trong mục 2.4.

2.2. Một chương trình phức tạp hơn
Dưói đây là một chương trình C++ khi chạy sẽ tạo ra một hảng tương ứn^ giữa
"C (xom hình 2.1).
1
2
3
4

#incXuđtt <Ì 08 tr«a]n.h>
tincludtt <ionuuìip.h>
main 0

__

{

5
6
7

// Tao bang tuong ung giuA do F va do
// tu -10 do c d«n 10 do c

8

//


c

Ruth N. Raỉnợold, Octob^r 22, 1993

'X,
'\




18

Chương 2. Các phán tử cơ bản của C++
9
10
11
12
13
14

fio«t
CmXmium,
i f Hhi«t do CttXsỉus
» rahranhttit; // Nhi«t đo TahrmrừimÌLt

”DEGR££S cĨXEGBEBS r\n" ;

cout «

15

16

c«lsius « -10.0;
Khiltt (Cttlsius <» 10.0)
{
rahrttnỈMit m (9.0/5.Ữ) * Calaius + 32.0; // C h u y M do c sang do F.

X7
18

cout «

X9

«

Mtw(7) «

Calslus «

Mtw(7)

rấhrmnhmit «

20
21

«

" ”

"\n” ;

// Tang gia tri do c

)

22 }

Giống hai chương trìn h trưổc, dòng 1 và 2 là các dẫn hướĩiịỊ biên dịch cần đ ặt ò đầu
chươn^ĩ trình. Phần đầu chương trình từ dòng 4-8 mở đầu chương trình vỏi từ khóa main, và
vài dòn^ chú thích cho biết tên tác giả, ngày viết và mục đích của chươnịĩ trìn h . Ba dòng
tiêp theo (10, 11. 12) miêu tả các giá trị cần tín h toán (giốhg như tem perature), Phần quan
trọng n hất của chương trìn h là các dòng sau:
14 cout « " D E 6 R £ E S c DEGRiXS r\n" ;
15 C«Xsỉua - -10.0;
16 Mhil« {CmlmLìxm <» 10.0)

{

17F«hr«nb«ỉt ■ (9.0/5.0) * Cttlsỉus 4- 32.0; // Chuy«n do c amnq do F

18
19
20

cout «

B«tw(7) «C«Xaỉu8 «
«


••tw(7) «

C«Xsỉu«-*"f; // Tang

"

TềhrmábmLt «

"\n” ;

trl do c

21 }

Chúnịí miêu tả chính xác các hoạt động xảy ra trong khi thực hiện chương trìn h .
D^grMS c
-10
-9

-7

-5
-4
-3
-2
-1
0
1
2
3

4
5
6
7
8
9
10

DttgrMS r
14
15.8
17,6
19.4
21.2
23
24.8
26.6
28.4
30.2
32
33.8
35.6
37.4
39.2
41
42.8
44.6
46.4
48.2
50


HỈNH 2.1.B ^h lo n g (]ff>0(^»F vồ *>C tú -ÌO °C td i^1O O C ,có

dkềợc smi khỉ c h ^ chưong tiỉr^ mồu.

r-Ằ- ,


NGÒN NGỮ LẬP TRỈNH c * * DẤNH CHO SINH VIÊN_____________________________________ 19

Câu lệnh:
IS

C*1«1WI • >10.0;

cho biết một troniỉ số các tên ký hiệu (hay còn gọi là biến) cần cho việc tính toán trong
chương trình được nhận giá trị là -10.0. ở đây, biến có tên là caiaiM . Tên biến sử dạng
trong chương trình cẴn được khai báo ỏ đầu chưdng trình. Trong ví dụ trẽn, ta có;
10

« lM it

11

c « lai« a, / / a h la t do Cmlmímm

12

rs h x M ÌM Ìt; / /


đo r a liE M d M Ỉ k

Ngoài tên biến, ta còn phải khai báo kiểu của.từng biến. Trong chương trình trên, cả
hai biện cciaiM và ralucMiMit đều có kiểu fiM t (các giá trị sế của chúng có tỉtể có |diần
thập phân). Hình 2.2 cho ta hình dung các biến như các hộp, trong có chứa giá trị cửa biến.
Bàn thân mỗi hộp là môt vị trí trong bộ nhớ máy tính, nđi giá trị đtíú c lưu lại.

20

68

C clciaa

ralicw d w it

Hbm 2^. Câc vf M Irona nhố m ãr M i e io hai blÌR
toong diMing NMi bâng nhiệt dộw

Việc tính toán các biến là cốt lôi cùa chưdng ti^nh trong đó cdng thửc:

“F = -»C + 32
được sử đ fn g lặp lại mỗi khi chuyển -ItPC, - 9 ^ ,... 9 ^ , I C ^ th ần h n hiệt độ F tưỡng ứiig.
Việc lặp iại như trê n được tiến h à n h bằng lệnh ^Axixm (đả gidi thiệu ỏ chưđng 1). Trong
chướnK trình này, các cảu lệnh;
17 ra h rM iM iit • 19.0/5.0) * OmXmXĩm ^ 3 2 .0 ; // a s a y M
1 8 csout «
19

«


M tv f7 }

«

M tw (7 ) «

CmtmLum «



ra h s m h ttlt «

c ««119 do F .


-\ » - ;

/ / Tang qịm t r i do c

20 CaXsitts^M*;

dược thực hiện lộp cho tới khi giá trị C m X m X um bằng 10.0. Vì giá trỊ CttisiM ban đầu là -ỈO.O
(câu lệnh 15) và câu lệnh cuếì trong các lệnh trẽ n tản g giá tr ị c^Xmium lên 1.0 nên cuối
cùng, khi biến
lón hơn ỈO.O chưitog trinh sẽ dừng. Mỗi lần cấc lệnh trên đưỢc thực
hiện, chúnỉĩ tính gỉá trị nhiệt độ F tưđnpĩ âng với giá trị nhiệt độ c hiện thòi (biến cmXmXvếmh
đ ư a RÌá trị đó vào Tểầucmnbmtt v à in cả h a i giá tr ị r a m ột dòng mởi. Smtmịi} cho C-M- hiết cần
hảy cột cho mỗi số, do đó các sọ được cãn th ẳn g cột.

Lệnh á đong 20 saù đãiy lả ị^oỉi đặc trưng để tính toán các biến trong C-M20


/ / Vang 9 1 « trl ởữ c.

CÓ nghĩa là ( iá trị biến
cátch viết khác:

C m lm X u m l è n V .

H iép toán này đ ư ^ niinh họa ồ hình 2.3. Một

CmtmmkuB mCmXmikW-¥ 1 . 0 ;
Phép toán trên cho thấy ý nghĩa của tên gọi "Ngốn nĩĩũ
nhiều tính năng mổí đưỢc đưa vào.

9 i là Đfến n fS c vdi


20

Chương 2. Các phắn tử cơ bản của

Việc thực hiện lặp các câu lệnh như bài toán con chuột ò chươnịĩ 1 hay trong chương
trìn h hkrxịĩ nhiệt độ trẽn là một th ế m ạnh lớn của máy tính. Việc th iết kế các vòĩìiĩ lặp (các
lệnh đưỢc lặp lại đến khi thỏa mã n một điều kiện nào đó) là một trong các kỹ nănfĩ quan
trọng nhất của lập trình và sẽ đưỢc bàn kỹ hơn ở chương 5. Người đọc cũnK chưa cần phải
tự viết một chương trìn h sử dụniĩ lệnh whii« mà chỉ cần thay đổi chút ít chxiơng trìn h đă
cho. Như th ế sẽ khôn^ bị sa vào các chi tiế t khôníí cần thiết.
Phép toán

20

c«l«iu«

68

C m l B L u B ^ ’¥

Cttlsius

a) Trước phép toán

b) Sau phwp toán

CalsiusA

CttlsiusV-f

HỈNH 2.3. Hiệu quà eủo phép toán

khi C«18ÌU8 Cỏotàtrị20.

Bài tập - Phẩn 1
1. N hập vào, biên dịch và thực hiện chươníí trin h mẳu in ra bảriỊĩ tương ứng giữa nhiệt
độ FaH*renheit và Celsius.
2. Giải thích tại sao bảng kết quả (hình 2.1) có 21 dònịỉ chứ không phải 20.
3. Thử níĩhiệm một số thay đổi với chươĩiịĩ trình bảĩiK nhiệt độ trang 17. Troĩìịr mỗi
trường hỢp, thử íĩiải thích các sự kiện xảy ra khi dịch chương trình mà;

(a) Bỏ quôn một dấu chấm phẩy.
(ỉì) Thêm một dấu chấm phẩy th ừ a vào cuôi một àòĩìịi.
(c) Đồi nain thành mi an.


(d) Đổi một dấu ( th àn h Ị.
(e) Đổi các háng sô' 9.0 và 5.0 th àn h 9 và 5 tươníĩ ứnjỉ.
(f) Đổi -10.0 thành -5.0, thành 10.0 và th àn h 20.0.
(g) Đổi dòng 20 thành C«isiu8 - Cttisius + 0.5;
(h) Đổi dÒTiịi 20 thành C«i8iua - c«iaiu s + 2;
(i) Đối dònK 20 thành Cttisiua - Cttisius -i;

4. Sửa lại chương trình để đổi nKưỢc từ -10“F, -9”F,

>

1Ơ’F, dùng công thức;

"C = ("F - 32) X 9

5. Viết lại chươníx trình để chuyển n hiệt độ K ahrcnheit thành nhiệt đô Ktílvins (nhiệt
độ tuyệt đôi). Dùriíí côn^ĩ thức:

K = -("F - 32) + 273.16
(Xem lòi Kiải troriíí cuốn ''Ngôn ngữ lập trinh

dành chỡ sinh viên - bài tậ p ”)

1 độ Kelvin tươníí ứníí với 1 độ Celsius nhưng Ơ*K = -273.16“C.


NGỔN NGỮ LẬP TRỈNH C-t-^ DẨNH CHO SINH VIÊN___________________________________________ ^

2.3 Từ định danh

m

Tronịị chương trìn h bảng nhiệt độ, ngoài các dòng chú thích, các từ còn lại là các từ
định danh. Từ định dan h là tên được C++ thừ a nhận. Một số từ định danh được cung cấp
hởi C++ như fioat và
Nhữníĩ từ định danh như th ế gọi là từ khóa. Bảng 2*1 là danh
sách tấ t cả các từ khóa của C++.
mmm

muto

hrmmk

cmmm

catoh

ehar

class

conat

contlniM

ởmtÊAxXt

dmXmtm

áo


áoúhXm

mlmm

•ntaa

mxtmrn

tXomt

toT

friMd

goto

if

InXlM

ÌBt

mw

op*rato£

privat*

protacted


Public

rttglstar rttturn

Xong

short

siợMd

sÌEttot

stetic

struct

s«rifceh

thia

throw

try

typttd«f

union

tmsignad Virtual


void

volatiX^

ìrtìiXa_______________

t«aqpXate

BẢNG 2.1. Từ khổo trcMìQ C^I-

Nịĩoài các từ khóa là các từ định danh người dùnfỊ tự định nghĩa. Các từ đó có thể là
một dã y sô' và chữ bất kỳ nhưng phải đưỢc bắt đầu bằníĩ chữ. Ngoài ra, không được sử dụnịỉ
dâu chấm câu và các ký hiệu khác. Các từ định danh sau là hỢp lệ trong C++:
a

Sura

v«rX

£ỉnaXT^^

còn các từ sau khônịí hỢp lệ:
2forl

X

y

kỉnợ kong


vì chúng hoặc hắt đầu bằng số hoặc chứa ký hiệu hoặc có khoảng trống. Các từ định danh
khôn^ hị ịỊÌỞi hạn vể độ dài. Trong C++ có phân hiệt chữ hoa. chữ thường: Từ định danh
DATA khác với d*ta, ch ú n g là hai từ đ ịn h d a n h riê n g biệt.
Từ định danh có thể dùng ký tự Ặĩạch dưới CJ khi nó cấu tạo từ nhiểu từ như
max_t«mp«ratur« hay f r««zing_j>oint. Tuy nhiôn, nên sử dụng cách viết hoa, viết thưòng cho
các từ định danh ^ĩhép như sau: BiAxTttB^ratura hay frMEingPoint.

2.4. Biến
Xem xét ^ dòní; sau troni; chương trìn h hảng n h iệt độ:
10 flo«t
11
12.

Calaius, // Nhiét độ Ca Is Iu s .
Fahrttnh«it; // Mhỉệt độ rakcanhait.

'I'ừ khóa fioat cho trìn h biên dịch biết một khai báo về các biến sử dụng trong chương
trìn h . Khai háo một hiến níĩhĩa là thông báo sự tồn tại của nó troníĩ chương trìn h . Mỗi biến
Kiểu của biến miêu tả bản chất
tron^^ C+-Í- ịĩồm cỏ tên (từ định dânh) và kiểu (ví dụ
của ííiá trị đưỢc lưu tron^ĩ vị trí bộ nhớ dành cho biến. Một biến chỉ có một kiểu trong suốt
chươníĩ trình và kiểu này xác định các phép toán có thể thực hiện trôn nó. Trong chương
trình bảníĩ nhiệt độ. cả hai biến Tmhrmáhmit và c«x*iu« cùng có kiểu fXoat. Có nhiều kiểu
hiến trong C++ nhưng hiện thời ta chỉ nói đến kiểu fio a t và kiểu in t.
Giá trị của kiểu £ioat là số có phần th ậ p phản:
3.14X59,

7.12,


9.0,

0.5« + 001,

-X€.3« + 002


CÌHiang

z Các phẳn tử cơ bản

Ký hiệu • là ký hiệu khoa họe sà dụng tnm g C-H- đ ỉ idiAii cách sế vdi phần mũ. Ví dụ,
tốc độ ánh sáag bằnK 2.9»7»2M m/s. b&n kính electroo lả 2 .ti7 f3 » * -ite .
Số kiểu tiom t được lưu trong m&y tinli ehi l i g ỉn đáng (khác vói số kiểu la t , được ỉưu
chính xác). Độ chính xác của số < lM t ư ên hAu hất máy tính chỉ đạt được 15 số sau dấu
chím thập phân. Do đó, số Kchi được ltfu là 3.1415926S3589793.
Biến kiểu iDt có các giá trị phẲi lả số nguyên:
103

45

-632

Máy tính phân biệt các số kiểu ịmt vdi CMỈ số kiểu flo«« không có phần thập phân. Ví
d ụ biến iAoỉtfhB*wr được địDh n i ^ a :
flo a t

w h o l« d ta ittM c ;

cho phép nó nhận các giá trị 3.0, 2.0, ... cõng như các giá trị 3.Ỉ2, 1.75, ... Trong khi, nếu

dịoh nghĩa
Int Mliol^tadME;

thỉ DÓchỉ được nhận các Riá trị như -3, 2, 65.

2.5. Biểu thức
Nỉũểu tác vụ của chưdng trinh yêu cảu tính toán gỉấ tiị của một biểu thức. Một biểu
thác có thể là một h&ng, một M ái, vải phép tính số ỈIỌC hay hàm áp dụng cho biểĐ hoặc
hằng, kết quả là một giá trị. Ví dụ:
M

com(mnglm)

3 + aiaOahM

mu^ỊiÊimimÊaậ.

Cấc ký hiệu
/ được sử àạng cho các phép tìMÉB cộng, trừ, nhân, chia gọi ỉà các
toán tử số. Chúng được dùng cho các ìõẾt kiẨu f loat và íáỉa int và có ý RRhĩa như ký hiệu
của chúng: « sẻ cộnR 2 số, - sẽ trừ 2 sấ v i « aẽ nhân 2 8ố. Toán tử / ỉà phép ehia ỉấy thươnt;
nguyên vdi các số kiểu nguyên (int). Vđỉ eáe Bố ìâểu thực
thì nó là phép chia bình
thườniỊ. kết quà có đù Gác chữ s ế thập Ịdi&n. T«én tà % được dàag trong phép cbia lấy số dư.
Ví dụ:
8 /4 b ằ n (Ị 2
7 /4 liằ a fĩl
6 3 /8 k Ì a R 7
8%4 bằng 0
7%4 bằnfc 3

63%8 tÀ ag 7

Khi tĩộp ỉỗì chia cho không, mộc vài máy tfnỉi ■§ ềtlag diưdng tiinh và đưa ra tỈMog báo
lỗi. Một số máy tỉnh khác vẫn tiểp tạc tìiực hỉẬn chưmiĩ tiìnli nhưng sẽ cho kết quà s«i.
Kiểu

Ký hiệu

Toán t ử

Thi 4^

fioat

K

Cộng
Trừ
Nhân
Chia
Cộmr
Trừ
Nh&n
Chia
Phần trftjB

4iso«n 4^ s.aoiioo

*
/

ittt

+

*
/
%

lẢNC 2 ^ Câe loãn *ửlò học Ivong

-

5.03M>1

SL57«KI - S.-TOmOX - s.00«02
7M3 * 3.«mM - 2.1«04
/
«5

a«»i

-

4.aii00

s - M

CS7

-


-Noe

S7 • 600



3 - 2100Q

i9 / s • 3
ịO

%3 -

1

N n aM n lử / tar %đitt 9Ộp iAi tronsphép ehio ctio 0.


NGỔN NGỮ LẶP TRlNH c-n- DẨNH CHO SINH VIÊN__________________________________________ M

Bảníĩ 2.2 trìn h bày tấ t cả các toán tử số học tron^í C++ vói 2 kiểu flo a t và

int.

Một biểu thức chỉ thực hiện tín h giá trị khi mọi hiến trong hiểu thửc đã được gán giá
trị. Ví dụ:
(9.0/5.0)

* Cmlaium + 32.0


chỉ được tính sau khi Caisius đã được gán ^iá trị nào đó.
Lổi chia cho không (DMsion byzero)
H ãy kiểm tra xem máy tính của bạn xử lý như thê nào khi íĩặp lỗi chia cho
khôn^. Một máy tính, khi gặp lệnh:
Cout «

#

1/0;

sẻ in ra íĩiá trị 0 mà không cảnh báo gì troníĩ khi một mảy tính khac sè dưa ra thÔHK
báo lỗi:
ArỉthiMtic Excttption (cor« dus^d)

và chương trình bị dừng.
Giống như khi ta tín h tay, các biểu thức tron^^ C++ cần đưỢc tín h theo quy tắc ưu tiên
cho phép cả ngưòi dùng và máy tính hiểu cách biểu thức được tính. Ví dụ, biểu thức 2+4/2
sẽ có ííiá trị là 3 (nếu hiểu là <2+4)/2) hay 4 (nếu hiểu là 2 + (4/2)). Quy tắc ưu tiền tranịĩ
C++ cũnịĩ íĩiông như quy tác khi tín h tay. Các biểu thức con trorií? dấu ngoậc đún 0 cìược
tính trước. Nếu không có dấu ngoặc 0 th ì các phép *, / , %được ưu tiên cao nhất, sau đó là
+,
Thứ tự của các phép +, - hay các phép
/, %được thực hiện từ trái sang phải. Các
cặp dấu n^oác đơn được tính từ trong ra n^oài. Xem hảnịí 2-3 có tống kết các quy tắc ưu
tiên và vài ví dụ. Vì trong C++, ngoài các toán tử sô' học cònnhiểu
toán tử khác nôn các quv
tắc bao quát hơn sẽ được trình hày ở P hụ lục A. Nói churiK. nôn sử
dụng cặp dấu 0 để trán h
khó hiểu cho niĩười đọc.

Quy tắc

Ví dụ

1. Tính mọi biểu thức trong dấu ngoặc ().
2. Tính các dấu ngoặc lồnịĩ nhau từ tronịí ra riKoài
3. Bùn nịịoàì dấu ngoặc hoặc khòng cổ dấu nịĩoặc:
(a) Tính V , %trước 4-, (b) 'Vinh lần lượt
. %từ trá i san^í phải
(c) Tính lần lượt 4 , - từ trá i qua phải

3.146 ~ 0.146/2.0 củnK KÌÔnK như 3.146 - (0.146/2.Oí s: 3.Ì46-0.073
6 + 37%S/5 củn^ ^iốnjĩ như 6 +((37%8)/5ì = 6 t- (5/5) s 7

3.0"3 hay

NhưnK
____________6

37% ( 8 / 5 )

= 6 * 37%1 = 6

0 s 6________________ __________________________ _______________

BẢNG 2.3. Cóc quy tắc uu tién cho càc bỉểu thúc số học trong C+-*-. sủ dụng 0 để trónh khó hiểu cho n g i^ độc.
Xem Phụ lục A để có cóc miéu tà chi n ít hơn.

c+-t“ có rấ t nhiều hàm toán học phổ biến, được định nghĩsi trưóc để sử dụníĩ trong các
hiểu thức số học. Các biểu thức áp dụng cho hàm ^ọi là đôl sô' của hàm . Ví dụ, với các hàm

lượng ^iác, có thể viết s in ( 2 *th«ta> và đôì sô' cho hàm là biểu thửc 2*thmtm. Bảng 2.4 RÌỚi
thiệu một sô" hàm được định nghĩa trước. Một danh sách các hàm đầy đủ hơn được cho
troníí Phụ lục B. Để sử dụng các hàm sô" học phải có dẫn hưđn^ĩ biên dịch:


24

Chưcmg 2. Các phầf) tử cơ bản của C++
#inclucUi<math.h>

ở đầu chương trìn h .
Tên
«co«
asin
atan

cmll
cos
cosh
•xp
floor
Xog
I0 9 IO
sin
đỉnh
sqrt
tan
fcanh

M iêu tả

Arc cosin
Arc sin
Arc tang
Số nguyẽn tiếp theo
Cos
C 08 hypebol
Hàm e mũ
Sô' nguyen trước đó
Logarit cơ sô e
Loíĩarit cơ sô" 10
Sin
Sin hypebol
Càn bậc hai
Tang '
Tang hypebol

BÀNG 2.4. Một VÒI bàm sổ Học
nghỉò tnlóc trong
x«m Phụ lục B để có
danh sách đầy đù hon. Néu sử dụng cóc hòm trén. cán có đôn huông bién dịch
t includ*<m«th.h> ỏ đổu chuong tmìh.

2.6. Câu lệnh gán
Một câu lệnh gán th iế t lập giá trị cho một biến. Nó gồm một biến ỏ bên trái, ký hiệu =
ồ giữa và một biểu thửc ở bên phải. Quy tắc churiịĩ: <hiến> = <biểu thức>;
<hiên> thay cho mọi biên trong c+-t- còn <biểu thửc> thay cho mọi biểu thức trong C++.
Ví dụ tron^í chương trìn h bản^ĩ n hiệt độ, cáu lệnh:
c« lsiu s » “10.0;

FAhr«nh«it - (9.0/5.0)* c«lsius + 32.0;// Chuyan do c M n g do r


là các câu lệnh ^án.
Nhắc lại rằriK các biến có kiểu được cho troxìịi phần khai báo. Trong câu lệnh íỉán, các
biên Hên trái phải luôn cùng kiểu với biểu thửc bên phải. Ví dụ trong câu lệnh:
c« lsiu s * -10.0;
do hiên Caisius có kiểu fio * t nên sô' níĩuyỏn 10 phải được viết là 10.0 để nó cữníĩ là kiểu
fio at. Nếu 2 kiểu khác nhau, giá trị của biểu thức sẽ được chuyển thành kiểu cần thiết.
Một Ịĩiả trí kiểu in t khi cần sẽ dưỢc chuyển th àn h kiểu fio a t mà khônịỉ có cảnh báo nào.
Một giá trị kiểu fio « t sẽ được chuyển thành kiểu in t bằriK cách bỏ đi phần thập phân nôn
p á trị có thế hị thay đổi. Do đó, C++ sẽ cảnh báo nếu một giá trị kiểu fio « t bị chuyển
th à n h một ^iá trị kiểu int (có th ể tr á n h cảnh háo này b ằng ép kiểu (casting) như ng ta
khônịĩ nên sử dụng. Xem Phụ lục E nếu muốn hiết vể cách ép kiểu troĩiK C++).


NGỔN NGỮ LẬP TRlNH C++ DÀNH CHO SINH VIÊN

25

Câu lệnh gán
Cttlsỉua

Celsỉus

s

-10.0;

().()
Celsỉus


HÍNH 2.4. Tác động của lệnh gán Ceỉsius = *10.0; già trị ỉrưóc dó củo Celsius không cần bíét.

Câu lệnh ííán thực hiện việc thay t h ế ịĩiả trị hiện thòi của biến th àn h ịXìii trị (ĩược ịxán.
Với lệnh ỉĩán:
Calsius « -XO.O;

^iá trị cùa

C eisius

đưỢc thav báng vị trí -10.0 (xem hình 2.4).

Troníĩ câu lệnh gán:
Celsius » C«Xsius + 1.0; // tang gi* tri do c

hiến Hôn trái được gằn cho giá trị của biểu thức bôn phải. Nhưnií biểu thức bôn phải có
chứa biên bôn trái nôn 1.0 sẽ được cộng với ííiá trị hiện thòi của hiên Coiaỉus và kết quả
được lưu trong c®iaius. Như vậy, hiên Ceisius được nhặn ịĩiá trị mới. Mầu câu lệnh ự.ầr\
trên cho thấy cách hoạt động của một lệnh ịíán: Đầu tiên giá trị của hiểu thửc bỏn phải
được tính, bằníĩ cách sử dụng bất kì giá trị được ịĩằn trước đó của các biến. Sau đỏ ịỉik trị
của biểu thức đưỢc Jíán cho biên bên trái.
Độ chính xác hũu họn của kiểu in t
Các giá trị nguyên trong máy tính bị giới hạn bỏi cấu trúc bôn tronịĩ của máy
tính. Giới hạn này có thể gây ra kết quả khôn^ mon^ đợi mà không có cảnh háo nào
từ trình biôn dịch.
Xét hai lệnh:
int X » 100000 * 100000;
cout «

X «


" \n " ;

ChúriK tạo ra kết quả:
1410065408

mà khôn^^ phải ^iá trị đún^í là lOOOOOOOCXX) vì ỉíiá trị đúng quá líỉn vói máy tính.
Cảu lệnh ịĩằn

5.0
Calsius

Celsius-f+ ;

6.0
Celsius

HÌNH 2.5. Kất quà của lệnh Cetsìus

C áocâu lệnh ịĩấn tănfí, Ặĩiảm giá trị một biến một đơn vị được dùníĩ thường xuvẽn nên
C++ cho phép viết tắ t chún^. Như troĩiK chương trìn h hảng nhiệt độ, toán tử ++ là toán tử
tăn g giá trị một biến lên 1 (hình 2.5 minh họa lệnh này).
C«lsius4
t r i dồ c

Tương tự toán từ - trừ một hiến đi 1;
c«isỉua
//
gi* t r i do c



2 6 _____________________________________________________ Chương 2. Các phần tử co bần của C++

2.7. Hằng kỷ hiệu
Tron^ chươn^í trình bảng nhiệt độ, ịỉiả sử ta muôn tạo ra một hảnịĩ tưưriỊĩ ứnjĩ KÌửa **F
và *‘C từ giá trị nhỏ nhất nào đó đến giá trị lớn nhất nào đỏy với giá trị nhỏ nhất và lớn nhã't
tùy thuộc vào thời KÌan và địa điểm hảriịĩ có thể đưỢc sử dụnịí. Việc thay đổi này có thê làm
đưỢc bằĩìíĩ cách địn h níĩhĩa hai hằnK ký hiệu.
»

______

Độ chính xóc hữu họn của kiểu f lo a t
Do các sô' kiểu fio * t được miôu tả troTìịi máy tính với các số phần th ập phân hữu
hạn nên tronịĩ nhiều trường hỢp chúnịí khônK phải là giá trị chính xác. Ví dụ, khi viết
£lo«t X - 1.0/5.0 + 1.0/5.0 + 1.0/5.0 - 0.6;
cout «

X «

"\n";

thì thay cho kết quả 0, ta nhận được 8.88178«-17 vi các ^iá trị 1/5 và 0.6 khôn^ĩ được
biểu thị íĩiông nhau ỏ bẽn troníỊ máy tính.
Đảm bảo rằnịĩ ^iá trị nhỏ nhất và lổn n h ất là -10.0 và 10.0. ta viết chương trìn h như
sau:
const float
XowTtt»p » -10.0,
h ig h T M ^ m 1 0 .0 ;


£lo«t
C«18ÌU8, Ị Ị do c
Fahr«nh«ỉt; // do r
C«Xsiu8 « lowT«n^;
cout «

"DEGRỈXS c DEGREES F\n" ;

whil« (Cttl8ius <« hỉghTamp) {
. // Chỉ tỉ«t trttĩi trang 19.

Các từ định danh io%rT«mp và highT«mp được Kọi là các hằng ký hiệu.

Các hầĩìịỉ ký hiệu cho phép sử dụn^ tên thay cho sử dụn^ số, làm chưtíntí trìn h dễ đọc
hơn. Nỏn dùn^ hầìiịĩ số khi một giá trị cốđịnh đưỢc dùng tron^ cà chươníí trình. Ví dụ, nỏn
dùnK n hay e là hăn^ số khi sử dụníí chúng tron^ chươnK trình. Giá trị các háriK số khỏn^^
bao ịỉiờ bị thay đối sau khi đã khai háo.

2.8. Dòng chú thích
Chươnjí trìn h có thề trỏ nên dễ đọc hơn với các dònịĩ chú thích, ííiải thích ý njíhìa các
câu lệnh. Các àònịĩ chú thích bắt đầu bằnỊĩ cặp dấu // theo sau là một đoạn ván hản bất kỳ.
Chúnịí khônịĩ có ý nịíhĩa gì với máy tính, mà chỉ giúp người đọc dễ hiêu chơơriịí trình.


NGỔN NGỮ LẬP TRlNH c** DÀNH CHO SINH VIÊN________________________________________

Ịl

Lổi dổu câu

Các lỏi hay gặp nhất đôi với cả n^íười mới lập trình và níĩưòi lập trình dày dạn
kinh nghiệm là các lỗi ghép đôi cảc dấu { } không đúng và quên dấu chấm
phẩy. Máy tính không bao KÌÒ hỏ qua lỗi này. Nó luôn thực hiện các câu lệnh
cùng với việc tìm kiếm các dấu chấm phẩy hay dấu đóng khô'i Ị tương ứng.
Việc này thường đem đến các kết quả không bình thường. Để trán h lỗi dấu
cáu, nên viết các dòng lệnh thụt vào (so với đầu dòng) một cách phù hỢp và dễ
đọc như minh họa trong cuốh sách này.

,

KhôriK nôn hoàn thiện chương trình xong mới thêm các dòng chủ thích mà h ã y coi
chún^ như một phần của chương trình (củng đưỢc viết, hiệu chỉnh và gỡ lỗi cùng với
chương trình). Nếu khônịĩ, khi quay lại chính bạn có thể quên đi ý nghĩa của một vài đoạn
mã còn những người khác thì luôn cần àòng chú thích để hiểu chươnK trình của hạn. Bắt
đầu chương; trình, nỏn đưa ra tên tác giả, nịĩày viết, mục đích chưdng trình và cách giải
quyết. Mỗi phần của chương trình nên có các dòng chú thích miêu tả mục đích của chúng.

2.9. Câu lệnh phức
Ta đà xem xét hầu hết các phần của chươnịĩ trình ví dụ và háy ^iờ là khun^^ chương
trìn h . Thân của chươnK trình được nằm tronịĩ cặp dấu ị ỉ theo sau từ khóa main. Từ khóa
main là từ định danh cho chương trình. Trong thân chương trinh, mỗi cầu lệnh riêng rẽ
được kết thúc bằnK dấu chấm phẩy gọi là câu lệnh đơn. Câu lệnh đơn là các câu lệnh gán,
khai báo hằng, biến hay các cáu lệnh nhập/xuất và một vài kiểu lệnh khác sè được nói
tronK các chương sau. Oặp dấu { } nhóm các câu lệnh đơn thành một đfln vị đdn giản gọi là
câu lệnh phức. Sau dấu đóng }, không đưđc có dấu chấm phẩy. Toàn bộ chưdn^ trình là một
cáu lệnh phửc được bao bởi cặp dấu {}.

2.10. Trình bày một chương trình C++
Hình thức mõt chưríng trình được trình hày trôn giấy (hay trôn màn hình) khôníí quan
troníĩ đối vói trình biên dịch C++. Nó chỉ quan tám đến các từ khóa và các dấu câvi (dấu

n^Ịoậc đơn, dấu phẩy, dấu ngoặc móc và dấu chấm phẩy). Chương trình có thể đưọc viết nén
lại sao cho hầu như khônịĩ có khoảng trống. Sau đây là chương trình bảng nhiệt độ được
v iết dồn lại, khôníx có dòng chú thích hoậc từ định danh có nghĩa:
1

iincXudtt <Ỉ 0 8 trtt&m.h>

:

#includ« <iomanỉp.h>

3

main<)(flo«t c, r;C— 10.0;cout «

4

(C<-10.0) {F»(9.0/5.0) *C+32.0;cout"«a«tw(7)<
5

) « r « " \ n ‘’ ;C++;}}

"DEcaaXS c DEGREES F\n";whiX«
"«a«tw(7

Chương trình trên vẫn thực hiện tốt như chương trình ở trang 17. Trình biôn dịch"
không thấv khác biệt
Nói chung, việc viết tách dòng được chấp nhận, trừ các dẫn hướng
biên dịch p h ải nằm trên các dòng riênị; hiệt và các ký tự nằm tro n g dấu nháy kép phải

cùng trên một dòn^. Khônfĩ có íỊÌỚi hạn về độ dài của một dòng. Tuy nhiẽn, chương trình
nh ư trên lai làm ta rất khó khán trong viêc đoc và hiểu chương trình. Ta gần như khôn^

'ậ
1


28____________________________________________________ Chưong 2. Các phần tử cơ bển của

th ể tìm ra các lỗi n h ư g h ép không tương thích các dấu ( ) , { } ; quỏn hoặc th ừ a d ấu chấm
phẩy, hay viết nhầm từ định danh.

Theo quan điểm chung, một chưởng trình nên được trình bày nhất quán sao cho mục
đích và phươniỉ pháp cùa chưdng trình được sáng sủa. Các từ định danh nên đứỢc miôu tả
theo vai trò của chúng. Các câu lệnh nên được căn hàníĩ phù hỢp. Các khoảniỊ trống và
dòng trống nôn được thêm vào. Các cặp dấu { } và ( ) nên được trình bày theo cách dễ nhìn
thấy. Nhưng không có quy tắc tuyệt đốì cho việc trình bày chươĩiK trình. Với một vài cáu
lệnh chỉ có một cách trìn h bày, nhưng vdi các.câu lệnh khác, có nhiều cách tương đươnjỊ,
mỗi cách thích hỢp trong một sô' hoàn cảnh. Mỗi câu lệnh nên trình bày dễ đọc và sắp đặt
các dấu { K ( ) cho thích hỢp. Toàn bộ chương trình nên trình bày như sau:
main 0 {

với các câu ỉệnh của chương trìn h được chứa trong phần có màu xám.

2.11. Nhập/Xuât đơn giản
Mục đích của chương trìn h bảng nhiệt độ là in ra một hảng của nhiệt độ Celcius và
F ah ren h cit. Quá trìn h in dữ liệu (thường ỉà đưa ra màn hình) gọi là xuất (output). Trong
C++, toán tử << (toán tử chèn) là cách đơn giản n h ất để xuất dữ liệu. Nó hiển thị các ký tự
lên m àn h ình như với lệnh cout. Trong C++, cout được gọi là luồn^ĩ xuất chuẩn. Tương tự,
quá trình nhập được tiến hành nhò toán tử trích >> cùng câu lệnh cin được gọi là luồng

n h ập chuẩn. Luồng sẽ được nói kỹ hđn ở phần sau, còn mục này chỉ bàn về phần cơ bản
n h ấ t cần cho một chương trìn h để đọc và viết. Câu lệnh:
cout «

"DEGREES c DEQREES r\n";

chỉ d ẫ n cho m áy tín h in r a mọi ký tự giữa hai dấu nháy kép:
OXGREXS c DEGIUEES r

Ký tự "dòng mới", \n, cho máy tính biết chuyển xuống đầu dòng xuất dữ liệu tiếp theo.
Nếu Hỏ ký tự \n dữ liệu sẽ đưỢc đưa ra liên tiếp trên cùng một dòng. Khi muôn kết hỢp dữ
liệu ra bằng cách viết mỗi phần tử của dòng một lần ta sẽ bỏ các ký tự \n đó. Nêu muôn
viết dấu nháy kép ('*), ta sử dụng V , máy tính sẽ in ra dấy nháy kép còn ký tự \ chỉ báo
hiệu ký tự theo sau nó là ký tự cần in mà không mang ý nghĩa thông thườniĩ của ký tự theo
sau đó. Một số dạnịĩ hay dùng nhất:
\n

Xuông dòng mới

V

In dấu nháy kép

\\

In dấu gạch chéo \

Các dạng khác ít được sử dụng khi cần sẽ đưỢc nói đến.

Nếu không biết trước bảng nhiệt độ bắt đầu từ -lO^C đến lơ*c ta có thể nhập vào giá

trị nhiệt độ trực tiếp bằng cách dùng toán tử trích và ỉuồng xuất cin, Luồng này sừ dụng


×