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^í
Trang 2TỐNG ĐÌNH QUỲ
(LÝ THUYẾT)
NHÀ XUẤT BẢN THỐNG KÊ
Trang 3LỜ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ản g dạy tru yề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ỏ,
th ao 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Ả
Trang 4MỤ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ặpdowhit e 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ỂÌ h<m v« hâm thành phán 162
6.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 ầ n 3 ’. 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 p hần m 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Ợìm bà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.T oánửne w 209
7.3 Darti sách 214
B ảitặp-P hán2 222
7.4 Phép trèn danh sádi i 4 h / 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 ự 251
7.7.1 Ký .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.T oântìdetete 259 Tổng hết 261
Trang 5G ở 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 u y 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 T rô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 k h ú 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,1 2 ĩr u y nhặp phẩn tử tỉong một mảng tỶiờ chỉsó 332
9.1.3 Tính toàn ir ê n c ả c c h ỉs ố 332
9.1 4 Khờ'tạo màng 333
9.1.5 Các vòng lặp x ừ lý mảTg đơn g ià n 333
9.1,6 So sảnh màng vả darýì sảch 336
Bải tặp - Phán m ộ tl 336
9 2 Truyén mảng cho h ãm 337
9.2.2 Các hàm mảng sừ dự ìg bộ rứìở hiện ỉh ừ ^ 339
9.2.3 Căp phát màng trong bộ nhớ H ea p 341
B à itâ p ‘ p h ẩ n 2 343
9.3 Gở rối với m ảng 345
9.4 Xâu “ - 355
Bà! táp phẩn 3 362
5 5- Sáp xếp m ản g 363
9.5.1 X ử lỷ mảng bằng ơẻQuỵ 363
9.5 2 Sàp xếp ctìọn .365
9.5.3 Sắp xép chèn 367
9.5 4, O uicksort 370
B ả ịtặ p p h é n 4 377
9 6 , Bảng 1 1 380
Bài tập phán 5 393
9 7 Mảng hâi chiéu 9 7 1 Cấc vấn ơé cơ bản của mảng hai chiéu 396
9.7.2 Truỳén màng hai chtểư cho h à m 399
9.7.3 Khởi tạo mảng hai chiéu 399
9 7 4 V ỗ N n h 400
9.7,5 G ấ ih ệ phương trình tuyén tirứi 409
B à itặ p -p h ắ n S 414
Tổng k é t 417
Chưcmg 10 ỨNG DỤNG MULTI'FỊLE Giới ứH/ơng., 419
10.1 Biẻn Tiéng f é 420'
10.2 TKư viện luổng 424
10.3 C ả c ô à số lệ n h 428
Chương 8 DỆ QUY 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 rs e 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 c.2.stdlò.h. 494
Phụ lục D Nhặp/Xuất vdl iostream.h và ỉomanip.h D.1 Định dạng xuấ! vã n h ập 496
D.2 Thư viẻnĩuổng 49B Phụ iục E Các dặc tính khảc của E.1 Chú thích kiểu c ũ 503
E.2 Chỉ thị tíén xử l ý 503
£ 2 x n ơ c ỉm 503
E.2.2 Mifacf 504
E 3 Kiểu dữ l i ệ u 505
E.3.1 Toản ĩừ size o f. 506
E.3 2 Cóc kiếu co sẵn k h ố c 506
Chuyển đổị kiểu 507
E.3.4 Khaibồo coỉist SOS E.3.5 Kiều số nguyên rỶtư kiểu lo g ỉc 509
E 3.6 Toàn từ 509
E.3.7 Số học con t r ò 512
E z.s.typedef 513
£.2.9 Hàm như ổ ó is ổ 513
E.4 Hám nội tuyén 516’
E.5 Cấu trúc diéu khiển 5 1 Ĩ E.6 Khuòn m ắu 518‘
E 7 Lớp 1 ^.518
E.7.1 C ú p h ả p c ù a lở p 51Ô' Ẹ l l C a u t n k 520
6.7.3 Hám ố ạ n .520
E 7 4 Càc /<5p đệ quy tương h ỗ 522
E 7.5 Đinh nghĩa cục b ộ 523
E-8 Thừa kế lớ p 525
E.8.1 Các thảnh phẩn héng. c/ĩung và bào vớ 527
Ẹ.Q.2 Hàm d ự n g 528
E.8.3 Hàm ảo và két buộc dộng 529
E.8.4 V i đ ụ ” 1 5 3 2 E,9 Các đặc lính còn lạ i 535
Trang 6\ ' 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, trin h soạn thảo, trinh hiên
dịch, gỡ lồi uà hệ điều hành.
Quan 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ìn h 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
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
ì
Trang 7turn rig h t;
i£ f«clng a waix? th«n
turn ỉa f t and i f f«cing a w«ll? thttn
turn l«ft «nd i£ facing m wall? thttn
ị;
? 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ị
f 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:
} )
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:
whil« {facỉng a wall?) {
turn
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
i
ị ' Sau khi theo các lệnh trên thì sẽ íĩặp một cửa mở n^hĩa là có thế đi thẳnK m à k hỏn^
^ặp tườnịĩ và chuột sẽ lặp lại tiến trình đỏ cho đến k h i thoát khỏi mê cung:
} step forw«rd;
i f (not outside thm m«z«?) { turn riọht;
Trang 8NGỐN NGỮ LẬP TRỈNH Ct^• DÀNH CHO SINH VIÉN 11
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 M Z « ? ) {
Đoạn chươiìịí trìn h 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 cung
vrhile (not outsida the maxtt?) {
(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 trin h , chuột sẽ luôn đi
theo th u ật toán đã chỉ và th o át khỏi mô cung Xum hình sau:
ChưíỉnỊí trin h trên là kết quả cùa việc phán tích hài toán th àn h 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ìn h 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 th iế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ìn h đơ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ìn h đơn giản hơn?
Nêu cổ, hã y viết lại chương trìn h
J
Trang 95 Đ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 n h ấ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ện h 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ả tru n g íí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.
• N hậ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 n h ất của máy tính là nó có th ể thi h àn h các lệnh vói tốc độ rấ t n h an h -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ìn h viết một chươĩiịĩ trìn h máy tính hoàn toàn với quy trìn h ịĩ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ể n h ất là nịĩười lập trìn h 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ín h sẽ chuyển kết quả th àn h 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
12^ _ Chương 1 LẬP TRỈNHLA GÌ?
Trang 10C++ được th iế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ìn h 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ìn h sẽ là một côn^ việc rấ t khó k h àn và nhiều khi k ết quả nhận đưỢc khi chạy chương trìn h 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ìn h 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 n h ấ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++
NGỔN NGỮ LẬP TRlNH DẨNH CHO SINH VIÉN _13^
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ìn h trôn KÌấy, cần phải n h ậ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ìn h 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ìn h được lưn trữ Nhập và hiệu chỉnh chươn^í trìn h đưỢc tiến hành nhò trìn h 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ìn h 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
Trang 11-Nên nhớ rằnK các chương trìn h đượ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ìn h đó saníí nííôn n^ữ máv Kọi là trìn h 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 àn h côn^ và m áy tín h 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ìn h 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ìn h 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àn h 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ìn h 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ìn h được m inh họa ở hình 1.1 Nííay d ư d i ( S o ạ n t^ ^ lã một chưíỉn^ trìn h 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 àn h là chưdníx trìn h 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ìn h biên dịch hay các trìn h soạn thảo wà
chạy các chươn^ĩ trìn h Vởi máy tín h 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 h iện
bỏi một chươntĩ trìn h ịỉhép KÌữa trìn h biôn dịch và trìn h 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ý tru n j; tâm ) với bộ nhớ dành cho nó và các th iế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 th iết kế để tirở
th àn h '*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ín h 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ín h 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ìn h 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 th iết kế, thực thi cáic
th u à t toán
1 4 Chương 1 LẬP TRlNH LẦGÌ?
Trang 12NGỔN NGỮ LẬP TRlNH C-t-H DẨNH CHO SINH VIÊN 15
I * •
l * 4
3 » 1
a * ) « •
//
/ / / y
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 tu y ệ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
Trang 13Chưong 2
CÂC PHẦN TỬ Cơ BẢN CỦA C++
G iới t h iệ u chư ơ n g
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:
ỏ đầu mọi chương trìn h C hú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 ăn h cho người đọc chương trìn h Mây tín h sẽ bỏ qua chúng
* H a i 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 a n 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 ư ơ n g tr ì n h có t h ể n h ậ p /x u ấ t d ừ liệvỉ, V ấn để n ă y sẻ đvrợc nói kỹ hơn đ chư ơng 10.
a»
Trang 14Dònu 9:
9 c o u t «
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
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ín h để
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.
NGÒN NGỮ LẬP TRlNH DẨNH CHO SINH VIÊN _ n
Trang 15Giố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 p eratu re), P hần quan trọng n h ất của chương trìn h là các dòng sau:
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
Trang 16Câ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 tố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ĩ;
NGỊN NGỮ LẬP TRỈNH c * * DẤNH CHO SINH VIÊN _ 19
Hbm 2^ Câc vf M Irona nhố m ãr M i e io hai blÌR
toong diM ing NMi bâng nhiệt dộw
Việc tính tốn các biến là cốt lơi cùa chưdng ti^nh trong đĩ cdng thửc:
dược thực hiện lộp cho tới khi giá trị C m X m X u m bằng 10.0 Vì giá trỊ CttisiM ban đầu là -ỈO.O
(câu lệnh 15) và câu lệnh cuếì tro n g các lện h 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 ị n g mởi Smtmịi} cho C-M- h iế 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 sá đãiy lả ị^oỉi đặc trưng để tính tốn các biến trong C-M-
20 / / Vang 9 1« trl ởữ c.
CĨ nghĩa là ( iá trị biến C m lm X u m l è n V H ié p tốn này đ ư ^ niinh họa ồ hình 2.3 Một
cátch viết khác:
Phép tốn trên cho thấy ý nghĩa của tên gọi "Ngốn nĩĩũ 9 i là Đfến n fS c vdi
nhiều tính năng mổí đưỢc đưa vào.
Trang 17Việc thực hiện lặp câc cđu lệnh n h ư băi toân con chuột ò chươnịĩ 1 hay tro n g chương trìn h hkrxịĩ n h iệ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 N hư th ế sẽ khôn^ bị sa văo câc chi tiế t khôníí cần thiết
2 Giải thích tại sao bảng kết quả (h ìn h 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 T roĩìị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ìn h 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 ăn h -5.0, th ăn h 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 « ia iu s + 2;
(i) Đối dònK 20 thănh Cttisiua - Cttisius -i;
4 Sửa lại chương trìn h để đổi nKưỢc từ -10“F, -9”F, 1Ơ’F, dùng công thức;
"C = ("F - 32) X -
5 Viết lại chươníx trìn h để chuyển n h iệt độ K ahrcnheit th ăn h nhiệt đô Ktílvins (n h iệt
độ tu y ệ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 ă n h chỡ sinh viín - băi tậ p ”)
1 độ Kelvin tươníí ứníí với 1 độ C elsius nhưng Ơ*K = -273.16“C
Trang 182.3 Từ định danhm
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 d a n h là tên được C++ th ừ a n h ậ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ừ k hóa của C++
BẢNG 2.1 Từ khổo trcMìQ C^I-
Nịĩoài các từ khóa là các từ định d an h 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 d an h sau là hỢp lệ trong C++:
còn các từ sau khônịí hỢp lệ:
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 d an h
khôn^ hị ịỊÌỞi hạn vể độ dài Trong C++ có p h ân hiệt chữ hoa chữ thường: Từ định d an h
DATA khác với d*ta, c h ú n g là h ai từ đ ịn h d a n h riê n g b iệ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, v iết thưòng cho
các từ định danh ^ĩhép như sau: BiAxTttB^ratura hay frMEingPoint
NGỔN NGỮ LẬP TRỈNH C-t-^ DẨNH CHO SINH VIÊN _ ^
chươníĩ trìn h và kiểu này xác định các phép to án có th ể thực hiện trôn nó T rong 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 f io a t và kiểu in t
Giá trị của kiểu £ioat là số có phần th ậ p phản:
Trang 19CÌ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 l a 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ố K chi được ltfu là 3.1415926S3589793.
Biến kiểu iDt có các giá trị phẲi lả số nguyên:
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 :
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 l i ằ 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ưm iĩ tiìnli nhưng sẽ cho kết quà s«i.
Trang 20Bả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 f lo 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 tro n g hiểu thửc đã được gán giá
trị Ví dụ:
(9.0/5.0) * Cmlaium + 32.0
chỉ được tính sau khi C aisius đã được gán ^iá trị nào đó
Lổi chia cho không (DMsion byzero)
H ãy kiểm tr a xem máy tín h 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ín h 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
NGỔN NGỮ LẶP TRlNH c-n- DẨNH CHO SINH VIÊN M
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 p h é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ín h từ tro n g 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ì tro n g C++, ngoài các toán tử sô' học còn nhiểu toán tử khác nôn các quvtắc bao quát hơn sẽ được trìn h hày ở P h ụ lục A Nói churiK nôn sử dụng cặp dấu 0 để trán hkhó hiểu cho niĩười đọc
Quy tắc 1 Tính mọi biểu thức tro n g 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
Ví dụ 3.146 ~ 0.146/2.0 củnK KÌÔnK như 3.146 - ( 0.146/2.Oí s: 3.Ì46-0.073 3.0"3 hay
6 + 37%S/5 củn^ ^iốnjĩ như 6 +((37%8)/5ì = 6 t- (5/5) s 7
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:
Trang 2124 Chưcmg 2 Các phầf) tử cơ bản của C++
#inclucUi<math h>
ở đầu chương trìn h
I0 9IO Loíĩarit cơ sô" 10
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> th ay cho mọi biểu thức trong C++
Ví dụ tron^í chương trìn h bản^ĩ n h iệt độ, cáu lệnh:
c « lsiu s » “10.0;
và
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 a t Nếu 2 kiểu khác nhau, giá trị của biểu thức sẽ được chuyển th àn h kiểu cần thiết
Một Ịĩiả trí kiểu i n t khi cần sẽ dưỢc chuyển th à n h kiểu f io a t mà khônịỉ có cảnh báo nào
Một g iá trị kiểu f io « 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ị th ay đổ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 ị k iểu int (có th ể tr á n h c ản h háo n ày b ằ n g ép kiểu (casting) n h ư n g ta khônịĩ nên sử dụng Xem P h ụ lục E nếu muốn hiết vể cách ép kiểu troĩiK C++)
Trang 22NGỔN NGỮ LẬP TRlNH C++ DÀNH CHO SINH VIÊN 25
Câu lệnh gán
().()
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 th ay 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 e i s i u s đưỢc th av 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 C eisius đượ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
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‘;// tAng gia t r i dồ c
Tương tự toán từ - trừ một hiến đi 1;
Trang 232.7 Hằng kỷ hiệu
Tron^ chươn^í trìn h 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 h ai 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
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ố đ ịn h đưỢc dùng tron^ că chươníí trìn h Ví dụ, nỏn dùnK n hay e lă hăn^ số khi sử dụníí chúng tron^ chươnK trìn h 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
2 6 _ Chương 2 Câc phần tử co bần của C++
Trang 24Lổi dổu cđu
Câc lỏi hay gặp n h ất đôi với cả n^íười mới lập trìn h vă níĩưòi lập trìn h 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ìn h 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ìn h của hạn Bắt
đầu chương; trìn h , nỏn đưa ra tín tâc giả, nịĩăy viết, mục đích chưdng trìn h vă câch giải
quyết Mỗi phần của chương trìn h 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ìn h ví dụ vă hây ^iờ lă khun^^ chương
trìn h Thđn của chươnK trìn h đượ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 ăn h 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ìn h 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ìn h được trìn h hăy trôn giấy (hay trôn măn hình) khôníí quan
troníĩ đối vói trìn h 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ìn h 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ìn h 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:
Chương trìn h trín vẫn thực hiện tốt như chương trìn h ở tran g 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 1
b iín dịch p h ả i nằm trí n câc dòng riínị; h iệt vă câc ký tự nằm tro n g dấu n h ây kĩp p h ả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
n h ư trí n lai lăm ta rất khó khân trong viíc đoc vă hiểu chương trìn h Ta gần như khôn^
NGỔN NGỮ LẬP TRlNH c** DĂNH CHO SINH VIÍN Ị l
Trang 2528 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ừ đ ịn h 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 N hưng không có quy tắc tu y ệt đốì cho việc trìn h bày chươĩiK trìn h 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 n h iệt độ Celcius và
F ah ren h cit Q uá trìn h in dữ liệu (thường ỉà đưa ra m àn hình) gọi là x u ất (output) Trong C++, toán tử << (toán tử chèn) là cách đơn giản n h ấ t để x u ất dữ liệu Nó hiển thị các ký tự lên m àn h ìn h như với lện h 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ề p h ầ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 h ai dấu nh áy kép:
OXGREXS c DEGIUEES r
Ký tự "dòng mới", \n, cho máy tín h 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 p h ầ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 m ang ý nghĩa thông thườniĩ của ký tự theo sau đó Một số dạnịĩ hay d ùng nhất:
\ \ 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
Trang 26để gán dữ liệu vào cho các biến của chương trìn h Khi ịíặp câu lệnh:
cin » loìềTmmp;
máy tín h sẽ nKÙng lạ i đợi nịĩưòi sử d ụ n g n h ậ p vào một sô" từ b àn phím và g án giá tr ị vừa
nhặn cho biến iowT«mp Tất nhiên cần phải có một lời nhắc để ngưòi sừ dụriK hiết máy tín h
đan^ đợi nhập dữ liệu vào Sau đây là chươĩiíí trình yêu cầu nííười sử dụnịỉ nhập vào giá trị
22 cout « "DEGREES c DECTEES F\n" ;
23 whil® (C«lsiua <» highTen^) {
24 Fahr«nhelt «1 (9.0/5.0) * Cttl«ỉus -f 32.0; // Chuy«n c mmmg r.
Ent«r starting tmmpmrềítìixm (C«l8Ỉus) :0
Sau khi nịĩưòi dùníĩ nhập một số cho giá trị hắt đầu và n h ấn phím E nter, chươníỊ trin h nhắc tiếp:
Cnt«r stoppỉng t*n^ratur« (C«l8Ìus) :10
và lúc này, người dùng nhập vào giá trị kết thúc
Chú ý rănịí, khi sử dụng c o u t« , các ký tự xuất không được đưa ra màn hình trực tiêp
mà được lưu tron^ một vùng Rọi là vùng đệm (buffer) Khi vùnK đệm đầy nó sẽ chuyển tất
cả ra màn hình Cách tổ chức phức tạp như vậy gọi là vùng đệm x u ất Vùng đệm x u ấ t đưtk:
NGÒN NGỮ LẬP TRlNH c^•+ DÀNH CHO SINH VIÊN _ M
Trang 27sứ d ụ n ^ vì cán mút thơi uinn rất dài ban dâu dế khíỉi tạo th iê t lìị sau đó mới đ ư a đưỢc các
kv tự ra màn ìiinh Tuv vunịĩ đẹnì xuất tiết kiệm đuííc thời í^ian của máy tính nhưníí nó
củn^ có thtí ^ủv ỉ a Cik kỗt quả khỏnịĩ Xtít chươn^ĩ trìn h đ(ín ^íiản sau:
Khi chạy, ta sẽ nhận đươc áònịĩ háo lỗi
Arlthmtttic Excttption (cor« d\mẸpmá)
mà không phải các ký tự H«iio! được gửi trưííc khi có phép chia ch<» 0 à dõn;; 5.
Đỏ là do trạnK thái đợi ỏ vừng đệm Dữ liệu vần đanií nám tron^" vừnự đệm, khi lỗi chia
cho 0 xảv ra và chươnịỉ trình hị dừriK lại- Đế tránh việc in thiẻu dử liệu như trên, có thể
dùng lệnh fiush để đưa toàn bộ dữ liệu tronịí vùriK đệm xuất ra màn hình n^ay lâp tức Chương trìn h viết lại như sau:
Ballo? A r i t hMtỉ c £xcttption (cortt ávat^á)
Khi dừnK cout, câu lệnh mnáX có ý níĩhĩa tương tự như \n nhưnií được đưa ra m àn hình
Cảu lệnh vhiia đưỢc giới thiệu trong bài toán chú chuột troníỉ mê cung (chương 1) và
trong chương trìn h hkng nhiệt độ là một câu lệnh tiện lợi Nó được sừ dụng mồi khi có một
tác vụ cần lặp lại trong khi đợi một hay nhiều điểu kiện kết thúc Giả sử cần in bài h át tiếng Anh sau:
10 in « hmá and thm XittX« O M sald,
"Roll ov»r, roll ov«r.”
Thay aix roXlad ovttr and o m tmXX out,
9 in a bttd^and thm littl* o m saỉd,
'*Roll ovttr, roll ov«r."
8 in a hmd and thm littltt O M SAÌd,
Trang 28NGỔN NGỮ LẬP TRÌNH DẦNH CHO SINH VIÊN ^ , _ ^
1 in a bed and the little on« sald^
'Alonẹ «t la«t.”
Bãi h át có thế ctuõc chia thanh các phán:
DònK^ đầu tiên
10 in bed and the little one said,
cac dorií^ lẠp lại, mỗỉ lần thOin mỏt sô hiện hãnh
"Roll over, roll ov«r."
They «11 rolled over and one fell out,
in a bed and the little one said,
va don^ cuối cunịi'
'I ron^í chưcínịí trìn h sè cản một biến nu«i>«rinBed một hhnịĩ, maxNumb®rrinB«đ đe xác định
số kho thỉi đưỢc viết ra Chường trình như fiau:
16 cout « '’\\"Roll ov«r, roll ov«r.\"\n”
17 « "Th«y all roll«d ovttr and one fmix out,\n"
Trang 292.13 Gd lỗi chương trình
Trong p h ần này, ta để cập đến các dạnK lỗi, từ lỗi nhầm lẫn cú p h áp đơn ịỉiản đến các
lỗi thiếu sót về th iế t k ế tro n g th u ậ t toán Các chươnK sau, khi bạn đọc đã nám vữnK vê lỗi
cú pháp, ta chỉ đề cập đến các lỗi khi th iế t k ế th u ậ t toán và các lỗi cài đ ặt nảy sinh khi thực hiện chương trìn h Đó chính là quá trin h gở lỗi nếu muốn viết đưỢc một chươnK trình tốt: việc sửa lại chương trìn h với các chi tiế t sai là rấ t quan trọnK-
Quá trìn h lỗi một chương trìn h dưới đây khi đem áp dụng vể cơ bản là íĩiôníí nhau
nhưníĩ chi tiết có th ể sẽ khác do ngưòi dùng có thể tạo thêm các lỗi khác Tìịĩoầi chủ đích của
cuốn sách Ngoài ra, các trìn h biên dịch C++ cũng khác nhau nên chúng có thể đưa ra các thông báo lỗi khác nhau
Xét chương trìn h tín h giá một đơn đ ặ t hànjí cà phô của cửa hànịĩ Peet Công thửc tính:
(Giá m ỗi pao) X trọng lượng + p h í vận chuyển
tron^ đó:
P h í vận chuyển = (mức giá mỗi pao) X trọng lượng + p h í hÕ€ xếp cố đ ịn h
Giá mỗi pao và sô' lượng theo pao của mỗi đơn đ ặt hàng là khác nhau nhưnịí cước vặnchuyển theo pao (shipping) và lệ phí bốíc xếp cô" định (fixed handlinjí fee) thì khôriỊĩ Để tính được ịĩiá củ a m ột đơn đ ặ t h à n g th e o yẽu cầu trô n , ta d ù n g các biến pric«p«rPound và w«ight cho các ịĩiá tr ị c ầ n n h ậ p vào và các h ằ n g fixttdFM và rat«p«rPounđ cho các giá trị không đổi Chương trìn h sẽ tín h to án và in ra íĩiá trị các biến •hippingPric« và to t« iP ric«
10 ratttP«rPoi2nd « 1 2 5 , // muc cuoc van chuy«n raoỉ pao
1 2
13 int
Trang 3025 shipingCost «» ratttP«rPound * fix«dFM;
26 tot«lPric« * pricaPttrPound * m i g h t + shipplngCost;
27
28 cout « " C o f f M totaX Ì8 '* « c o f f M C o s t « “\N"
29 « '*Shippỉng coat ỉs ’* « shipỉngCost « "\M"
30 « "Total co«t is " « totalPrictt "\N";
d ễ p h á t hiện n h ấ t là các lỗi cú p h á p (Khép kh ô n g tươnií ứ n ^ cặp d ấu ( th iế u hoặc th ừ a
d ấu chấm ph ẩy v.v ) vì khi chương trìn h có các lỗi này, tr ìn h biên dịch sẽ đ ư a ra các thôníĩ báo lỗi Các lỗi cú pháp thưòng dễ sửa
Khó nhận dạng hơn và nghiêm trọng hđn là các lỗi ìo^ic T rìn h biôn dịch không p h át hiện ra chún^ĩ troĩìịĩ khi chúng gây ra các lỗi riíĩhiẽm trọng cho k ết quả cùa chương trình.
Một lỗi mà mọi nuưòi thưỜTiK hay bỏ qua đó là lỗi trìn h bày Một chương trìn h có th ể vẫn dịch, chạy và cho ra kết quả đúng nhưng lại được trìn h bày khó hiểu Ta sẽ sửa lại chương trìn h , ịĩiải quyết cả ba loại lỗi vừa rồi
Hã y thử chạv chương trìn h vừa viết xem nó có nhữĩiịĩ lỗi Với m ột sô" máy tín h lỗi đủ nghiôm trọng sẽ làm dừníĩ quá trìn h biên dịch Cảc máy khác có th ế cho một hản danh sách
lỗi rất dài Thường xảy ra trường hỢp một lỗi đơn íĩiản củnK kéo theo rất nhiều các lỗi khác
Nguyên nhân là lồi ban đầu làm trìn h biên dịch hị nhầm và báo thôm một sô' lỗi nữa trong khi thực chất chỉ có một lỗi Lỗi đầu tiên n h ận được :
Can't find includa fil«
vì ta đã nhập vào tOn file không đúng Hã y sửa lại là ioatr#*m.h (dùng dấu chấm chứ không phải dấu phẩy) Sau đó, biên dịch lại chương trìn h ta n h ận được dòníĩ thôníí báo lỗi nhưsau;
linti 13: ttrror: syntax «rror
Tại dònịí 13 có vạch sán^ mà trình hiên dịch chỉ ra lỗi Vân để ò đây khôn^^ phải là dÕTìịi 13 của chướng trìn h có lỗi mà lỗi nằm ở dòng trước là dòn^ 11 ở dòriK 11, ta khôn^
dùng dấu chấm phẩy để kết thúc lệnh khai háo mà là dấu phẩy, do đó nên h ã y sửa lại;
11 fix«dFa«;// rauc cuoc van chuyên moi chuyttn
Biên dịch lại chươníĩ trìn h ta sẽ nhận được các thôn^ háo lỗi sau:
lin« 20: «rror; syntax «rror
Như trưònj^ hỢp trôn, lỗi của ta khôníĩ p h ải ỏ dòng 20 m à nằm ỏ dòng 19 T rên dòng 19,
ta đưa dấu chấm phẩy vào trong cặp dấu nháy nên trìn h hiên dịch coi nó là m ột p h ần của xâu ký tự mà khôníĩ thấy dấu chấm phẩy kết th ú c câu lệnh Hã y sửa lại lỗi đó và biên dịch lại chương trìn h Ta nhận được thông báo lỗi:
l Ì M 30: m rroxĩ mỵntmx mrxor
T hật là hối rối với dòng thôn^ háo lỗi này, vì nó chỉ báo chung chung là lỗi cú p h áp chứ
NGON NGỮ LẬP TRÌNH DÀNH CHO SINH VIÊN _ 33
Trang 31không đưa ra lời ịxiằi thích gì thôm T ron^ trưòĩiíĩ hỢp năy, nếu khÔHẶĩ tìm được lỗi thì ta
h ả y biến toăn bộ dòn^ lệnh đó thănh dòriíĩ chú thích bằiiK câch thím văo đầu mỏi dỏn^' một cập dấu gạch chĩo // Như thế ta sửa lại chương trình như sau:
28 // cout « ”C o ££ m totAl ỉs " « c o f f M C o s t « "\N"
29 // « "Shỉppin? coat ia " « shipingCoat « ”\N"
30 // « "Tot*l coat ia ** « tot«lPric« *'\N";
Dòng bị sai trong thông bêo lổt
ThưònẬĩ tìm thấy một lỗi sai cú phâp đưỢc trình biín dịch thòn^ bâo ờ một
ă ò n ịĩ cụ thể năo đó mă thực tí lỗi lại nằm ở ăÒTìịỉ trước đó.
34 _Chương 2 Câc phẩn tử cơ bản của
C+-*-r
w
Lổi chữ hoa
Một trontĩ câc lỗi thường mâc phải lă viết sai tín định danh do câc ký tự viết
hoa vă viết thưòriK Như ta đê biết trình biín dịch C++ có phđn biệt câc ký tự
viết thưòníĩ vă viết hoa vậy, câc tín định danh sau lă khâc nhau: fix«dF*«
Fix*dF«* Vả CixadTM.
r
Biín dịch chương trình lại lần nữa, ta nhận được một danh sâch câc thónịĩ bâo lỗi sau:
l Ì M 20: ttrror: poỉnt#r op«rand for »
X Ỉ M 25: «rror: shipỉngCost u n d * f Ỉ M d
Xin« 26: m rro ri tot«XPric« u n d « £ l M d
l Ì M 1 1 : varnlng: f i x « d T M nmmê but not mmt
X i M 14: W«raia9: prỉctorPound U8«d but not mmt
l Ì M 16: wmrnỉn9; shÌỊ^ingCost not ummâ
l i M 17: waraing: c o f f M C o s t aot ummd
Lỗi của dònK 10: ỏ giâ trị khởi tạo của biến rat«p«rp0\in<ỉ, ta phải khai bâo nó lă kiểu
I n t (kiểu số n^uyôn) n h ư n g lạ i g ân giâ trị của nó lă kiểu thự c (fio « t) nôn trìn h hiín dịch
C++ cảnh hâo rằn^ giâ trị thực t ế nhận được troriK biến r»t«p«rPound cỏ thể bị sai Thực
vậy, vì J(iâ của coffee theo pao sẽ lă ịĩiả trị tính theo đô la vă ccnt cho nín ta cần phâi
khai bâo nỏ lă kiểu fXoat H êy sửa lại! Lỗi tiếp theo của chương trình lă ỏ dồTìịi 11: phải
lỉân ^iâ trị cho con»t fix«dF«« Trong trưòng hỢp năy, h ă y đặt giâ trị cho hằng fỉx«dFM lă
$1.95 Lổi tiếp theo cũng dễ hiểu vì theo đún^ ý nghĩa thỉ trẽn hiến ỉă pric«p«rp0und nhưng troni' khai bâo nó ỏ dòng 14» ta đê nhập tôn biến sai lă pricP«rPound (tron^ tín biến thiếu ký tự "e") Lỗi năy kĩo theo một lỗi khâc ò dòng 26 cho nôn h ê y bỏ qua thôn^í
hâo đó Lỗi 4 th ì th ậ t khó hiểu (p o in ter lă câi gì vậy?) H êy bỏ qua nó vă tiếp tục ở lỗi thứ
5 Lại một lổi v ể sai tín biến, h ê y sửa lại shipingCoat thănh •hippingCoat Lỗi năy cũn^í
Trang 32lặp lại ỏ dòn^ 29 h ã y tim và sửa lại cho đủiỉK Lỗi th ứ 6 báo rằ n g t a q u ê n khồng k h a i báo I
biến totaiPrictt mà ỉại sử dụng nó ỏ dòng 26.
Với 4 lồi còn ỉại chỉ là nhữn^ câu cảnh báo mà thực sự không là lỗi, có thể bỏ qua
chúnịĩ và chỉ nên thay đổi chương trình của ta theo các bước đã làm Vậy, ta được chương ỉ trình sau khi đã sửa lại:
NGÓN NGỮ LẬP TRlNH c * * DÀNH CHO SINH VIÊN _ 35 Ị
14 pricttPttcPouĐd, // 61« cmtmthao pou&d
26 shippingCost » ratttParPound * m i g h t + fix«dTM;
Hã y hiên dịch chương trìn h , sau đó ta sẽ n h ận được hai câu cảnh báo:
liĩìm 17: trarniag: coffMCost not usttd
NhưnK chương trình của ta vẫn biên dịch được, khi chạy chương trình nhận được:
I
Trang 33ChươnR trìn h không cho ta tiếp tục nhập sô' th ử 2 mà nó dừnịí níĩay Bỏi vì ỏ trôn, khi không chắc chắn về n hữ ng gì xảy ra thì ta bỏ qua nó để ịĩiải quyết nhữn^ lỗi tiếp sau, lỗi này chính là do sự hỏ qua đó Từ dòng 29 tới dòng 31 do không biết rõ vê lỗi nên ta đã bỏ
qua bằng cách cho toàn bộ chúníĩ thành các dòng chú thích và tiếp tục thực hiện chương
trìn h Vậy thì ta h ã y bỏ đi các dấu // để chúng trỏ lại th àn h các dòng lệnh, biên dịch và
nhận đưỢc:
lintt 31; ttrror: syntAx mrror
Đến đâv thì hoàn toàn chịu! Cảu lệnh dường như chăng có ự} sai cả, nhưnịí một n^ưòi
lập trìn h kinh nịíhiệm sè p h á t hiện ra: trong chươnịĩ trìn h , đáng nhẽ viết \ n , ta lại viết \N
Đó chính là lỗi do có sự phân hiệt chữ hoa, chữ thường tro n ^ C++ H ãy đổi lại các chủ N
th àn h n, đồTìịĩ thòi thêm các dấu // vào hai dòng 30 và 31, còn để n^íuyẽn dòng 29 để xem những ựị xảy ra Khi đó chương trìn h được thay đổi lại như sau:
29 cout « ''C o tt— to tm l is •’ « cottmmCoat « '*\n"
30 // « "Shipping cost is " « shipingCost « "\n"
31 // « "Totaĩ coat ia •’ « tot*lPric« "Xn” ;
Khi biỏn dịch, chương trìn h sẽ nhận được các câu cảnh báo:
lỉne 26: warning; float asaignad to int
linm 17: warnỉng: c o f f MCo st xLBmá but not smt
Nhưng chươnịí trìn h vần được biôn dịch và ta thực hiện chương trìn h lại lần nữa:
P M t ' s C o f f M
Enter prỉctt pmr pound; 8.95
£nt«r nuinbttr oỉ pounda: C o ££ m total is 32768
Giá trị lạ 32768 x u ấ t hiện vì ta chưa gán giá trị cho biến coff«eCo8t H ã y thôm vào
dòng lệnh tính líiá trị của nó, mặt khác nó còn phục vụ cho việc tính totaiPric® nôn cần
p h ải chèn dòn^ tín h coffM C ost vào giữa hai dòng 26 và 27 Khi đó, đoạn chưíínK trìn h được sửa lại như sau:
26 s h i ^ l n g C o s t ratttPttrPoiind * * £ixmđFmm;
27 c o f f M C o s t - prỉcttterPound * M i g h t ;
28 totalPrictt • c o f f M C o s t 4- shippingCost;
Chương trìn h biôn dịch bây giờ chỉ nhận được một câu cảnh báo:
Xin« 26: rarning: tXomt a s s i ợ M d to int
Và khi thực hiện sẽ được:
Cottmm
Entar pric« pmr pound: 8.95
Enter nunbttr of pouads: C o f f M totaX 1« 0
Tiếp tục hỏ cặp dấu gạch chéo // ở dòng 31 đồng thòi phải chuyển dấu chấm phẩy ồ cuối
dòng 30 xuống cuối dòng 31 để biến dòng 31 từ dòng chú thích th à n h dòng lệnh Biỏn dịch
Trang 34N hư vậy, ta đã p h á t hiện ra câu lệnh x u ất kết quả bị sai ỏ dòng cuối cừng C ũng rấ t dễ
hiểu bởi vì ta hỏ quên mất toán tử « trước ký tự nhảy dòng mổi H ã y sửa lại dòng đó (bỏ dấu chéo kép và bỏ dấu chẩm phẩy ỏ dòng 31 Cuối cùng thẽm toán tử « vào trước ký tự
\n) Khi đó, thực hiện chương trình sẽ có kết quả như sau;
C o f f M
Ent«r pxicm pmx pouad: 8.95
£nt«r nuab«r o t pounds: C o f f M total ỉs 0
nguyên) và trìn h hiôn dịch đã cảnh báo cho ta biết Vậy h ã y th ay đổi k h ai báo biến th àn h
kiểu fio a t Cuôl cùníĩ, chương trình của chúng ta cũng đã làm việc tốt
sẽ đưỢc thích n h ư sau : Vì hiến pricttP«rPound có kiểu I n t n ẽ n m áy tín h chỉ n h ậ n n h ữ n g
giá trị n^Ịuyỏn cho nó Khi ta nhập 8.95, chỉ phần nguyên "8** đưỢc gán cho pricttP«rFound và
p h ần ".95" đưỢc ịĩấn cho ííiá trị cần nhập tiếp theo là W«ỉ9h t N hưng do m ig h t củng được
khai báo là kiểu in t nên giá trị ".95" (đưỢc hiểu như "0.95") bị cắt lần nữa và hiến M igh t
n h ận Ịĩiá tri 0 Đó là lý do tại sao có kết quả sai
Hiện lợi dử liệu nhộp vào
Một cách để p h á t hiện lỗi khi nhập dữ liệu vào là cho hiện lại ngay giá t iị
n^ưòi sử dụng vừa nhập xong Cách này cũng có ích cho việc phát triển
chương trìn h
NGỔN NGƠ LẬP TRlNH DÀNH CHO SINH VIÊN _ 37
Trang 3510 rataPttrPound « 1.25, // vmc cuoo van e h u y m aoỉ pmo
XI f ỉ x « d F M « l 95; // mue cuoe van c h u y u noi chuyên
12
15 might , t i tong trong luong thmo don dmt, hang
28 totalPrỉctt » coffMCost 4 shippỉngCost;
29
30 cout « "Cof£«« totaX i« " « co££««Cost « ”\n"
31 « "ShÌK>ing cost is " « •hipingCost « "\n”
32 « "Total cost ỉs " « totmlPric« « "\n";
33
34 )
Trang 36Bàỉ tập phẩn 2
1 Những tên định danh sau, tên nào là hớp lệ? Giải thích cho mỗi trưòng hỢp?
2 H ãy biểu diễn những số thực sau theo dạn^ có sấ mũ e:
6543210.0 897654321 3 X 10^" 0,000061 45.8 X 10^"
3 H ãy biểu diễn các hàm sau trong C++:
(a) Nhiệt độ Fahrenheit là một hàm của nhiệt độ tuyệt đối theo độ Kelvins (xem bài
tậ p 5)
(b) Nhiệt độ Kelvin là một hàm của nhiệt độ Celsius.
(c) Nhiệt độ Kelvin là một hàm của nhiệt độ Pahrenhcit.
4 Đo giky của ngưòi Châu Ảu theo kích thưóc hàn chân (đơn vị centimet) bằng cách ỉấy
độ dài bàn chản, trừ đi 9, nhân với 3, chia cho 2 rồi tấ t cả cộng thêm 15 Viết một
chươnịĩ trình C++ nhập vào kích thước chân của một ngaíòi đo bằn>Ị inches, chuyển
đổi thành centim et và in ra kích thước íỊÌày tương ứng (với 0,394 ìnch = Icm) Chương
trìn h chạy sẽ cho kết quả dạng;
EƯROPEAK SHOC SIZ£
Eiìtar tha Xttngth of your foot in incỈMs: 9.5
Vour Europ««n shoA sì.zm is 38
5 Để xác đinh nhịp tim của một người, lấy 220 trừ đi sô' tuổi người đỏ Giới hạn trên của nhịp tim bằnjĩ 85% giá t ộ đó còn giỏi hạn dưới bằng 65% Ví dụ: một người đàn ôn^ĩ 40 tuồi có nhịp tim tru n g bình là từ: 117/153 nhịp/phút Viết một chương trìn h C++ nhập vào sô' tuổi cùa một người và in ra khoảng giá trị nhịp tim của người đó Chươnịí trìn h khi chạy 8ẻ cho kết quả dạng:
Enter your mgm: 40
Your targttt httart rate is 1X7 to 153 hmmta pmx minut*.
6 Phương trìn h trạnịĩ th ái của khí lý tưởng:
Trang 37cho các khí đơn nguyên tử V là th ể tích riêng theo 1 mol khí (V/n) Viết m ột chương trìn h C++ tín h nhiệt^độ của khí theo phưđng trìn h trôn.
8 Quy lu ật Snell về tỷ số khúc xạ:
sin ạ sin (ỉ
Trong đó: a-góc tới; P- góc khúc xạ Viết một chương trìn h C++ biểu thị tỷ sô' khúc xạ (gỢi ý: h à m 8 Ỉ n có góc đo tín h b ằn g ra d ia n )
9 Vốn đầu tư ban đầu là p Q ua n giai đoạn, mỗi giai đoạn có lã i su ất r, sau n giai
đoạn ta có:
P (l+ r )"
Viết một chương trìn h C++ biểu th ị công thức trên (gỢi ý: dùng các hàm mxp và log).
10 Lực tương tắc tĩn h điện giữa h ai h ạ t có điện tích và ^2 theo Cu-lôn|Ị:
4 n t Q r ^
11 a Phươníĩ trìn h T etens về mối q u an hệ giữa áp su ất hơi nước b ã o hoà với n h iệ t độ
không khí Nếu đơn vị của áp suất là m ilỉim ét thủy nKân (mmHg) và nhiệt độ khôn^ k h í là
Celsius C’C ) thì công thức cho áp su ấ t của hơi nước bã o hoà là;
12 Sửa lại chương trìn h in ra m àn hình bài h á t 'T en in a Bèd" troniĩ bài học th à n h
chương trình in ra màn hình bài hát "99 Bottles of Beer on the Wair*:
Trang 3814 Viết và gd lổi một chương trìn h tín h toán íĩiá bán của các m ặt hàng (có chiết khấu khi m ua n h iểu ) vỏi CÔĨIK thức sau:
Selling price = (List price - Discount) + Tax (Giá bán = Giá niêm y ết - C hiết khấu + Thuê)
Sử dụng biến ListPrictt, discount và tax để chứa các giá trị cần nhập vào In ra màn
hình \riấ trị của biến ••xiinợPrictt.
15 Số ngày tronị; năm tín h từ ngày trá n g non (ngày 1/1) gọi là G regorian opact dùng
để xác đ ịn h nịỉkỵ lễ ph ụ c sin h , s ố ngày n ày là sô' d ư củ a biểu thứ c sau k h i c h ia cho 30:
8 + (Century/4) - C entury + ((8 * C entury + 13)/25) + 11 *(Golden num ber - l)Trong biểu thức này: century là thương số của phép chia năm cho 100 Và golden nuraber bằng 1 cộniĩ với số dư của phép chia nám cho 19 Viết một chương trìn h in ra
Gre^ĩorian epact của một nàm nào đó được nhập vào Khi chạy chương trình, sẽ cho kết quả
dạng như sau:
Grttgorỉan •pact
£nt«r tha y m x ĩ 1986
Thtt Gragorlan apact o£ 1986 Ỉ8 19
16^ Công thức Heron tín h diện tích của một tam giác theo độ dài các cạnh của nó:
Area = ^ s ịs - a)(s - b)ịs - c), Troníí đỏ: a, b, c là độ dài các cạnh của tam giác, s là nửa chu vi.
18 Ta có công thức tính độ sương (dew point) thông qua nhiệt độ (temperature) và độ
ẩm tương đối (relativ e hum id ity )
Dew point = T em perature
(14.55 + 0.114 X T e m p e ra tu re ) X (1 - 0.01 X R elativ e h u m id ity )
- [(2.5 + 0.0007 X T em perature) X (1 - 0.01 X R elative humidity)]^
-(15.9 + 0.117 X T e m p e ratu re) X (1 - 0.01 X R elativ e humidity)*^
Viết một chươnịĩ trìn h C++ nhập vào n h iệt độ độ ẩm tương đối và tín h toán in ra m àn hình
độ sương (dew point)
NGỒN NGỮ LẬP TRÌNH c-*-^ DẢNH CHO SINH VIÊN _ _ 4^
Trang 3942 Chương 2 Các phán íử cơ bản của C++
f l o « t có th ể được biểiĩ diễn theo cách thông thưòng của các sổ* thực hay theo ký pháp khoa
học (có sô' mũ e) N hững từ địn h danh đặc biệt đưạc gọi là các từ khóa, chúng dành riònự,
cho các mục đích đặc biệt cho nên không th ể đ ặt cho tên hằng hay tôn biến Những từ khỏa
đă dùnịí nhiều:
c o n a t , ỉ n t , %fhiX«
Xem d a n h sách đầy đủ trong bảng 2.1
Biểu thức là một hằng, một biến hay một vài phép toán hoặc các hàm cho ta giá trị là hằng số hay biến sô" theo từng kiểu ( f lo « t hay in t) của mỗi loại ịĩiá trị Một số hàm toán
học tronịỊ C++ được cho ò bảng 2.4 Các biểu thức đưỢc tính toán theo các quy tắc ưu tiỏn;
Biểu thức con ở trong, cặp dấu ngoặc đơn đưỢc tính trước Khi khôn^ có dấu ngoặc đơn, các phép toán *, /, % có mức ưu tiên cao hơn các phép toán +, Nếu cùng mức víu tiên thi biểu thửc được tín h từ trá i qua phải
Dòng chú thích b ắt đầu bầníí cặp dấu !L Khi gặp cặp dấu này, máy tính sẽ bỏ qua các
ký tự tiếp theo của dòng chú thích Dòng chú thích râ*t cần cho ngưòi đọc chương trình, chúng nôn đirợc coi là một p h ần khỏng thể thiếu của chương trình
Các câu lện h tro n g một chương trìn h có th ể là một câu lệnh đơn hay câu lệnh phức
Các câu lệnh đơn bao gồm các lệnh ịĩán, các lệnh khai báo hằng hiến, và các lệnh nhập xuất
Trang 40kết thúc bởi dấu chấm phẩy Cáu lệnh phức được bao đóng bởi cặp dấu ngoặc ôm { } Toàn
bộ thân chương trình chính là một câu lệnh phức.
Cách trình bày một chương trình là cần thiết đối với người đọc và không ảnh hưởng tới trình biôn dịch Việc sắp đặt chương trình cẩn thận sẽ giúp ta trong việc đọc, hiểu và sửa lỗi chướng; trình Các câu lệnh trong cùng một khôi nên được dóng thẳng cột, nên tạo các
dồììịĩ trốĩìịĩ hay các khoảng trống và thốniỉ nhất cách trình bày để dễ đọc và tạo sự sáng sủa
cho chưđng trình.
Lệnh xuất đưỢc thực hiện với toán tử chèn « và luồng xuất cout Lệnh nhập được thực hiện với toán tử trích » và luồng nhập cin Để cán hay dóng theo cột của dữ liệu xuâ't ra màn hình ta dùng để chỉ ra độ rộng được phép của các con sô xuất ra.
Nếu chương trình cần phải lặp đi lặp lại nhiều lần một công việc nào đó thì ta sử dụng lệnh whii« cùn^ điều kiện để kết thúc lặp: