SlideShare ist ein Scribd-Unternehmen logo
1 von 162
Downloaden Sie, um offline zu lesen
Mc lc 
Gii thieu...........................................................................................................6 
Chơng 1. M dâu .........................................................................................8 
1.1. Chơng trình là gì?.............................................................................8 
1.2. Lap trình là gì? ...................................................................................8 
1.2.1. M
c cao doc lap vi máy tính ......................................................8 
1.2.2. M
c thâp ph thuoc vào máy tính ..............................................10 
1.3. Ngôn ng
 lap trình và chơng trình dch ..........................................10 
1.4. Môi trng lap trình bac cao.............................................................11 
1.5. Loi và tìm loi ....................................................................................13 
1.6. Lch s C và C++ .............................................................................14 
1.7. Chơng trình C++ dâu tiên ...............................................................15 
Bài tap .........................................................................................................19 
Chơng 2. Biên, kieu d
 lieu và các phép toán ............................................20 
2.1. Kieu d
 lieu......................................................................................22 
2.1.1. Kieu d
 lieu cơ bn ....................................................................22 
2.1.2. Kieu d
 lieu dan xuât .................................................................24 
2.2. Khai báo và s dng biên .................................................................24 
2.2.1. Dnh danh và cách dat tên biên...................................................24 
2.2.2. Khai báo biên .............................................................................25 
2.3. Hang.................................................................................................25 
2.4. Các phép toán cơ bn........................................................................26 
2.4.1. Phép gán.....................................................................................26 
2.4.2. Các phép toán sô hc..................................................................26 
2.4.3. Các phép toán quan he................................................................27 
1
2.4.4. Các phép toán lô-gic...................................................................28 
2.4.5. Do u tiên ca các phép toán......................................................28 
2.4.6. Tơng thích gi
a các kieu ..........................................................29 
Bài tap .........................................................................................................30 
Chơng 3. Các câu trúc diêu khien ..............................................................32 
3.1. Luông diêu khien..............................................................................32 
3.2. Các câu trúc re nhánh .......................................................................33 
3.2.1. Lenh if-else ...........................................................................33 
3.2.2. Lenh switch .............................................................................39 
3.3. Các câu trúc lap ................................................................................43 
3.3.1. Vòng while...............................................................................43 
3.3.2. Vòng do-while ........................................................................46 
3.3.3. Vòng for ...................................................................................49 
3.4. Các lenh break và continue .........................................................54 
3.5. Bieu th
c diêu kien trong các câu trúc diêu khien.............................57 
Bài tap .........................................................................................................59 
Chơng 4. Hàm............................................................................................61 
4.1. Các hàm có san.................................................................................62 
4.2. Câu trúc chung ca hàm ...................................................................63 
4.3. Cách s dng hàm............................................................................64 
4.4. Biên toàn cc và biên da phơng.....................................................65 
4.4.1. Ph m vi ca biên ........................................................................65 
4.4.2. Thi gian sông ca biên..............................................................67 
4.5. Tham sô, dôi sô, và cơ chê truyên tham sô cho hàm.........................68 
4.5.1. Truyên giá tr..............................................................................68 
2
4.5.2. Truyên tham chiêu......................................................................69 
4.5.3. Tham sô mac dnh ......................................................................72 
4.6. Hàm trùng tên...................................................................................74 
4.7. Hàm de quy ......................................................................................76 
Bài tap .........................................................................................................78 
Chơng 5. Mng ..........................................................................................80 
5.1. Mng mot chiêu................................................................................80 
5.1.1. Khai báo và khi t o mng .........................................................81 
5.1.2. !ng dng ca mng ...................................................................83 
5.1.3. Trách nhiem kiem soát tính hp le ca ch# sô mng....................85 
5.1.4. Mng làm tham sô cho hàm........................................................85 
5.2. Mng nhiêu chiêu .............................................................................86 
5.3. Mng và xâu kí t$.............................................................................88 
5.3.1. Khi t o giá tr cho xâu kí t$......................................................90 
5.3.2. Th vien x lý xâu kí t$ .............................................................90 
5.4. Tìm kiêm và sap xêp d
 lieu trong mng ..........................................91 
5.4.1. Tìm kiêm tuyên tính ...................................................................91 
5.4.2. Tìm kiêm nh phân .....................................................................92 
5.4.3. Sap xêp chn ..............................................................................94 
Bài tap .........................................................................................................96 
Chơng 6. Con tr và bo nh.......................................................................99 
6.1. Bo nh máy tính ...............................................................................99 
6.2. Biên và da ch# ca biên....................................................................99 
6.3. Biên con tr ....................................................................................100 
6.4. Mng và con tr..............................................................................105 
3
6.5. Bo nh dong ...................................................................................107 
6.5.1. Câp phát bo nh dong...............................................................107 
6.5.2. Gii phóng bo nh dong ...........................................................108 
6.6. Mng dong và con tr.....................................................................109 
6.7. Truyên tham sô là con tr ...............................................................111 
Bài tap .......................................................................................................115 
Chơng 7. Các kieu d
 lieu tr'u tng ......................................................118 
7.1. Dnh nghia kieu d
 lieu tr'u tng bang câu trúc struct .................118 
7.2. Dnh nghia kieu d
 lieu tr'u tng bang câu trúc class ...............124 
7.2.1. Quyên truy nhap.......................................................................127 
7.2.2. Toán t ph m vi và dnh nghia các hàm thành viên ..................128 
7.2.3. Hàm khi t o và hàm hy.........................................................129 
7.3. Li ích ca lap trình hng dôi tng.............................................132 
7.4. Biên dch riêng re ...........................................................................133 
Bài tap .......................................................................................................137 
Chơng 8. Vào ra d
 lieu...........................................................................140 
8.1. Khái niem dòng d
 lieu ..................................................................140 
8.2. Tep van bn và tep nh phân ...........................................................141 
8.3. Vào ra tep .......................................................................................141 
8.3.1. M tep......................................................................................142 
8.3.2. Dóng tep...................................................................................143 
8.3.3. X lý tep van bn .....................................................................144 
8.3.4. X lý tep nh phân....................................................................147 
Bài tap .......................................................................................................151 
Ph lc A. Phong cách lap trình .................................................................153 
4
Ph lc B. Dch chơng trình C++ bang GNU C++...................................157 
Ph lc C. X lý xâu bang th vien cstring................................................160 
Tài lieu tham kho .........................................................................................162 
5
6 
Gii thieu 
Lap trình là mot trong nh
ng bc quan trng nhât trong quy trình gii quyêt 
mot bài toán. Nhiêu ngôn ng
 lap trình dã dc ra di nham giúp chúng ta gii 
quyêt các bài toán mot cách hieu qu nhât. Moi ngôn ng
 lap trình có nh
ng thê 
m nh và nhc diem riêng. Các ngôn ng
 lap trình có the chia ra thành hai lo i 
chính là ngôn ng
 lap trình bac thâp (gân gui vi ngôn ng
 máy), và ngôn ng
 
lap trình bac cao (ngân gui vi ngôn ng
 t$ nhiên ca con ngi). 
Giáo trình này trang b cho sinh viên nh
ng kiên th
c cơ bn vê lap trình. Ngôn 
ng
 lap trình C++ dc s dng de minh ha cho viec lap trình. Viec l$a chn 
C++ bi vì nó là mot ngôn ng
 lap trình hng dôi tng chuyên nghiep dc 
s dng rong rãi trên toàn thê gii de phát trien các chơng trình t' dơn gin 
dên ph
c t p. Hơn thê n
a, s$ mêm d+o ca C++ cho phép chúng ta gii quyêt 
nh
ng bài toán th$c tê mot cách nhanh chóng, ngoài ra cho phép chúng ta qun 
lý và tơng tác tr$c tiêp dên he thông, bo nh de nâng cao hieu qu ca chơng 
trình. 
Giáo trình dc chia thành 8 chơng, moi chơng trình bày mot vân dê lý 
thuyêt trong lap trình. Các vân dê lý thuyêt dc mô t bang các ví d th$c tê. 
Kêt thúc moi chơng là phân bài tap de sinh viên gii quyêt và nam rõ hơn vê lý 
thuyêt. Câu trúc ca giáo trình nh sau: 
• Chơng 1: gii thieu các khái niem cơ bn vê lap trình và quy trình gii 
quyêt mot bài toán. Sinh viên se hieu vê ngôn ng
 lap trình bac cao và ngôn 
ng
 lap trình bac thâp. Cuôi chơng chúng tôi gii thieu vê môi trng lap 
trình cung nh ngôn ng
 lap trình C++. 
• Chơng 2: Chúng tôi gii thieu các khái niem cơ bn vê biên sô, hang sô, 
các kieu d
 lieu cơ bn và các phép toán cơ bn. Sau khi hc, sinh viên se 
biêt cách khai báo và s dng biên sô, hang sô, và các phép toán trên biên và 
hang sô. 
• Chơng 3: Trơng này gii thieu vê câu trúc chơng trình cung nh các câu 
trúc diêu khien. C the là các câu re nhánh (if-else, switch), câu trúc lap (for, 
while, do-while) se dc gii thieu. 
• Chơng 4: Chơng trình con và hàm se dc gii thieu de sinh viên hieu 
dc chiên lc lap trình “chia de tr”. Chúng tôi se trình bày chi tiêt vê
cách khai báo và s dng hàm, cung nh cách truyên tham sô, truyên giá tr 
cho hàm. 
• Chơng 5: Chơng này trình bày câu trúc d
 lieu kieu mng và xâu kí t$. 
Cách khai báo và s dng mng mot chiêu cung nh mng nhiêu chiêu và ví 
d liên quan dc trình bày chi tiêt  chơng này. 
• Chơng 6: Dây là mot chơng tơng dôi dac thù cho C++, khi chúng tôi 
trình bày vê bo nh và kieu d
 lieu con tr. Câu trúc bo nh, cách qun lý 
và xin câp phép bo nh dong thông qua viec s dng biên con tr se dc 
trình bày. 
• Chơng 7: Trong chơng này chúng tôi se trình bày vê câu trúc d
 lieu tr'u 
tng (c the là struct và class trong C++). Sinh viên se hieu và biêt cách 
t o ra nh
ng câu trúc d
 lieu tr'u tng phù hp vi các kieu dôi tng d
 
lieu cân bieu dien. Cuôi chơng, chúng tôi cung gii thieu vê lap trình hng 
dôi tng, mot thê m nh ca ngôn ng
 lap trình C++. 
• Chơng 8: Chúng tôi gii thieu vê cách vào ra d
 lieu. Sinh viên se dc 
gii thieu chi tiêt vê cách làm viec vi các tep d
 lieu. 
7
8 
Chơng 1. M dâu 
Trong chơng này, chúng tôi se gii thieu qua mot sô khái niem cơ bn vê: 
chơng trình, lap trình, ngôn ng
 lap trình. 
1.1. Chơng trình là gì? 
B n chac chan dã dùng qua nhiêu chơng trình khác nhau, ví d nh chơng 
trình so n tho van bn “Microsoft Word”. Chơng trình, hay phân mêm, dc 
hieu dơn gin là mot tap các lenh de máy tính th$c hien theo. Khi b n da cho 
máy tính mot chơng trình và yêu câu máy tính th$c hien theo các lenh ca 
chơng trình, b n dang ch y chơng trình dó. 
1.2. Lap trình là gì? 
Lap trình là có the hieu dơn gin là quá trình viêt ra các lenh hng dan máy 
tính th$c hien de gii quyêt mot bài toán c the nào dó. Lap trình là mot bc 
quan trng trong quy trình gii quyêt mot bài toán nh mô t  Hình 1.1. 
bút/giây 
bút/giây 
trình son tho 
chng trình dch 
Hình 1.1: Quy trình gii quyêt mot bài toán. 
Quy trình trên có the dc chia ra thành hai m
c: m
c cao doc lap vi máy tính 
(machine independent) và m
c thâp ph thuoc vào máy tính (machine specific). 
1.2.1. M	c cao doc lap vi máy tính 
M
c cao doc lap vi máy tính thng dc chia thành ba bc chính là: xác 
dnh vân dê, thiêt kê thuat toán và lap trình.
Xác dnh vân dê: Bc này dnh nghia bài toán, xác dnh d
 lieu dâu vào, các 
ràng buoc, yêu câu cân gii quyêt và kêt qu dâu ra. Bc này thng s dng 
bút/giây và ngôn ng
 t$ nhiên nh tiêng Anh, tiêng Viet de mô t và xác dnh 
vân dê cân gii quyêt. 
Thiêt kê thuat toán: Mot thuat toán là mot bo các ch# dan nham gii quyêt mot 
bài toán. Các ch# dan này cân dc dien d t mot cách hoàn ch#nh và chính xác 
sao cho mi ngi có the hieu và tiên hành theo. Thuat toán thng dc mô t 
di d ng mã gi (pseudocode). Bc này có the s dng giây bút và thng 
không ph thuoc vào ngôn ng
 lap trình. Ví d vê thuat toán “tìm c sô chung 
ln nhât (UCLN) ca hai sô x và y” viêt bang ngôn ng
 t$ nhiên: 
• Bc 1: Nêu xy thì thay x bang phân d ca phép chia x/y. 
• Bc 2: Nêu không, thay y bang phân d ca phép chia y/x. 
• Bc 3: Nêu trong hai sô x và y có mot sô bang 0 thì kêt luan UCLN 
9 
là sô còn l i. 
• Bc 4: Nêu không, quay l i Bc 1. 
hoac bang mã gi: 
repeat 
if x  y then x := x mod y 
else y := y mod x 
until x = 0 or y = 0 
if x = 0 then UCLN := y 
else UCLN := x 
Lap trình là bc chuyen doi thuat toán sang mot ngôn ng
 lap trình, pho biên 
là các ngôn ng
 lap trình bac cao, ví d nh các ngôn ng
 C++, Java. Bc 
này, lap trình viên s dng mot chơng trình so n tho van bn de viêt chơng 
trình. Trong và sau quá trình lap trình, ngi ta phi tiên hành kiem th và sa 
loi chơng trình. Có ba lo i loi thng gap: loi cú pháp, loi trong thi gian 
ch y, và loi lô-gic (xem chi tiêt  Mc 1.5).
1.2.2. M	c thâp ph thuoc vào máy tính 
Các ngôn ng
 lap trình bac cao, ví d nh C, C++, Java, Visual Basic, C#, dc 
thiêt kê de con ngi tơng dôi de hieu và de s dng. Tuy nhiên, máy tính 
không hieu dc các ngôn ng
 bac cao. Do dó, trc khi mot chơng trình viêt 
bang ngôn ng
 bac cao có the ch y dc, nó phi dc dch sang ngôn ng 
máy, hay còn gi là mã máy, mà máy tính có the hieu và th$c hien dc. Viec 
dch dó dc th$c hien bi mot chơng trình máy tính gi là chơng trình dch. 
1.3. Ngôn ng lap trình và chơng trình dch 
Nh chúng ta thây, quá trình gii quyêt mot bài toán thông qua các bc khác 
nhau de chuyen doi t' ngôn ng
 t$ nhiên mà con ngi hieu dc sang ngôn 
ng
 máy mà máy tính có the hieu và th$c hien dc. Ngôn ng
 lap trình thng 
dc chia ra thành hai lo i: ngôn ng
 lap trình bac thâp và ngôn ng
 lap trình 
bac cao. 
Ngôn ng lap trình bac thâp nh hp ng
 (assembly language) hoac mã máy 
là ngôn ng
 gân vi ngôn ng
 máy mà máy tính có the hieu dc. Dac diem 
chính ca các ngôn ng
 này là chúng có liên quan chat che dên phân c
ng ca 
máy tính. Các h máy tính khác nhau s dng các ngôn ng
 khác nhau. Chơng 
trình viêt bang các ngôn ng
 này có the ch y mà không cân qua chơng trình 
dch. Các ngôn ng
 bac thâp có the dùng de viêt nh
ng chơng trình cân tôi u 
hóa vê tôc do. Tuy nhiên, chúng thng khó hieu dôi vi con ngi và không 
thuan tien cho viec lap trình. 
Ngôn ng lap trình bac cao nh Pascal, Ada, C, C++, Java, Visual Basic, 
Python, … là các ngôn ng
 có m
c do tr'u tng hóa cao, gân vi ngôn ng
 t$ 
nhiên ca con ngi hơn. Viec s dng các ngôn ng
 này cho viec lap trình do 
dó de dàng hơn và nhanh hơn rât nhiêu so vi ngôn ng
 lap trình bac thâp. Khác 
vi ngôn ng
 bac thâp, chơng trình viêt bang các ngôn ng
 bac cao nói chung 
có the s dng dc trên nhiêu lo i máy tính khác nhau. 
Các chơng trình viêt bang mot ngôn ng
 bac cao muôn ch y dc thì phi 
dc dch sang ngôn ng
 máy bang cách s dng chơng trình dch. Chơng 
trình dch có the chia ra thành hai lo i là trình biên dch và trình thông dch. 
Mot sô ngôn ng
 bac cao nh C, C++ yêu câu lo i chơng trình dch dc gi 
là trình biên dch (compiler). Trình biên dch dch mã nguôn thành mã máy – 
d ng có the th$c thi dc. Kêt qu ca viec dch là mot chơng trình th$c thi 
dc và có the ch y nhiêu lân mà không cân dch l i. Ví d, vi ngôn ng
 C++ 
10
mot trình biên dch rât pho biên là gcc/g++ trong bo GNU Compiler Collection 
(GCC) ch y trong các môi trng Unix/Linux cung nh Windows. Ngoài ra, 
Microsoft Visual C++ là trình biên dch C++ pho biên nhât trong môi trng 
Windows. Mot sô ngôn ng
 bac cao khác nh Perl, Python yêu câu lo i chơng 
trình dch gi là trình thông dch (interpreter). Khác vi trình biên dch, thay 
vì dch toàn bo chơng trình mot lân, trình thông dch v'a dch v'a ch y 
chơng trình, dch dên dâu ch y chơng trình dên dó. 
Trong môn hc này, C++ dc chn làm ngôn ng
 the hien. Dây là mot trong 
nh
ng ngôn ng
 lap trình chuyên nghiep dc s dng rong rãi nhât trên thê 
gii. Trong ph m vi nhap môn ca môn hc này, C++ ch# dc gii thieu  m
c 
rât cơ bn, rât nhiêu tính nang m nh ca C++ se không dc nói dên hoac ch# 
dc gii thieu sơ qua. Ngi hc nên tiêp tc tìm hieu vê ngôn ng
 C++, vt 
ra ngoài gii h n ca cuôn sách này. 
1.4. Môi trng lap trình bac cao 
De lap trình gii quyêt mot bài toán bang ngôn ng
 lap trình bac cao, b n cân có 
công c chính là: chơng trình so n tho, chơng trình dch dành cho ngôn ng
 
s dng, và các th vien chuan ca ngôn ng
 s dng (standard library), và 
chơng trình tìm loi (debugger). 
Các bc cơ bn de xây d$ng và th$c hien mot chơng trình: 
1. Son tho: Mã nguôn chơng trình dc viêt bang mot phân mêm so n tho 
van bn d ng text và lu trên o dia. Ta có the dùng nh
ng phân mêm so n 
tho van bn dơn gin nhât nh Notepad (trong môi trng Windows) hay vi 
(trong môi trng Unix/Linux), hoac các công c so n tho trong môi trng 
tích hp de viêt mã nguôn chơng trình. Mã nguôn C++ thng dat trong 
các tep vi tên có phân m rong là .cpp, cxx, .cc, hoac .C (viêt hoa). 
2. Dch: Dùng trình biên dch dch mã nguôn chơng trình ra thành các do n 
mã máy riêng l+ (gi là “object code”) lu trên o dia. Các trình biên dch pho 
biên cho C++ là vc.exe trong bo Microsoft Visual Studio hay gcc trong bo 
GNU Compiler vi các tham sô thích hp de dch và liên kêt de t o ra tep 
ch y dc. Vi C++, ngay trc khi dch còn có giai do n tiên x lý 
(preprocessing) khi các dnh hng tiên x lý dc th$c thi de làm các thao 
tác nh bo sung các tep van bn cân dch hay thay thê mot sô chuoi van bn. 
Mot sô dnh hng tiên x lý quan trng se dc gii thieu dân trong cuôn 
sách này. 
11
3. Liên kêt: Mot tep mã nguôn thng không ch
a dây d nh
ng phân cân 
thiêt cho mot chơng trình hoàn ch#nh. Nó thng dùng dên d
 lieu hoac 
hàm dc dnh nghia trong các tep khác hoac trong th vien chuan. Trình 
liên kêt (linker) kêt nôi các do n mã máy riêng l+ vi nhau và vi các th 
vien có san de t o ra mot chơng trình mã máy hoàn ch#nh ch y dc. 
4. Np: Trình n p (loader) se n p chơng trình di d ng mã máy vào bo nh. 
Các thành phân bo sung t' th vien cung dc n p vào bo nh. 
5. Chy: CPU nhan và th$c hien lân lt các lenh ca chơng trình, d
 lieu và 
kêt qu thng dc ghi ra màn hình hoac o dia. 
Thng thì không phi chơng trình nào cung ch y dc và ch y dúng ngay  
lân ch y th dâu tiên. Chơng trình có the có loi cú pháp nên không qua dc 
bc dch, hoac chơng trình dch dc nhng gap loi trong khi ch y. Trong 
nh
ng trng hp dó, lap trình viên phi quay l i bc so n tho de sa loi và 
th$c hien l i các bc sau dó. 
Hình 1.2: Các bc cơ bn de xây d	ng mot chơng trình. 
De thuan tien cho viec lap trình, các công c so n tho, dch, liên kêt, ch y... 
nói trên dc kêt hp l i trong mot môi trng lap trình tích hp (IDE – 
integrated development environment), trong dó, tât c các công do n dôi vi 
ngi dùng ch# còn là viec ch y các tính nang trong mot phân mêm duy nhât. 
IDE rât h
u ích cho các lap trình viên. Tuy nhiên, dôi vi nh
ng ngi mi hc 
lap trình, thi gian dâu nên t$ th$c hien các bc dch và ch y chơng trình 
thay vì thông qua các ch
c nang ca IDE. Nh vay, ngi hc se có the nam 
dc bn chât các bc ca quá trình xây d$ng chơng trình, hieu dc bn 
12
chât và dac diem chung ca các IDE, tránh tình tr ng b ph thuoc vào mot IDE 
c the. 
Ví d vê các IDE pho biên là Microsoft Visual Studio – môi trng lap trình 
thơng m i cho môi trng Windows, và Eclipse – phân mêm mien phí vi các 
phiên bn cho c môi trng Windows cung nh Unix/Linux, c hai dêu ho tr 
nhiêu ngôn ng
 lap trình. 
Dành cho C++, mot sô môi trng lap trình tích hp pho biên là Microsoft 
Visual Studio, Dev-C++, Code::Blocks, KDevelop. Moi môi trng có the ho 
tr mot hoac nhiêu trình biên dch. Chang h n Code::Blocks ho tr c GCC và 
MSVC Do C++ có các phiên bn khác nhau. 
Có nh
ng bn cài dat khác nhau ca C++. Các bn ra di trc chuan C++ 1998 
(ISO/IEC 14882) có the không ho tr dây d các tính nang dc dac t trong 
chuan ANSI/ISO 1998. Bn C++ do Microsoft phát trien khác vi bn C++ ca 
GNU. Tuy nhiên, các trình biên dch hien d i hâu hêt ho tr C++ chuan, ta cung 
nên chn dùng các phân mêm này. Ngôn ng
 C++ dc dùng trong cuôn sách 
này tuân theo chuan ISO/IEC 14882, còn gi là C++ thuân túy (pure C++). 
1.5. Loi và tìm loi 
Trong và sau quá trình lap trình, chúng ta phi tiên hành kiem th và sa loi 
chơng trình. Có ba lo i loi thng gap: loi cú pháp, loi run-time và loi lô-gic. 
Loi cú pháp là do lap trình viên viêt sai vi các quy tac cú pháp ca ngôn ng
 
lap trình, chang h n thiêu dâu châm phy  cuôi lenh. Chơng trình biên dch se 
phát hien ra các loi cú pháp và cung câp thông báo vê v trí mà nó cho là có loi. 
Nêu trình biên dch nói rang chơng trình có loi cú pháp thì chac chan là có loi 
cú pháp trong chơng trình. Tuy nhiên, loi là cho nào thì trình biên dch ch# có 
the doán, và nó có the doán sai. 
Loi run-time là loi xuât hien trong khi chơng trình dang ch y. Loi d ng này se 
gây ra thông báo loi và ng'ng chơng trình. Ví d là khi chơng trình th$c hien 
phép chia cho 0. 
Loi lô-gic có nguyên nhân là do thuat toán không dúng, hoac do lap trình viên 
gap sai sót khi the hien thuat toán bang ngôn ng
 lap trình (ví d viêt nhâm dâu 
cong thành dâu tr'). Khi có loi lô-gic, chơng trình ca b n có the dch và ch y 
bình thng, nhng kêt qu ca chơng trình da ra l i có trng hp sai hoac 
13
ho t dong ca chơng trình không nh mong di. Loi lô-gic là lo i loi khó tìm 
ra nhât. 
Nêu chơng trình ca b n dch và ch y không phát sinh thông báo loi, tham chí 
chơng trình cho ra kêt qu có dúng vi mot vài bo d
 lieu test, diêu dó không 
có nghia chơng trình ca b n hoàn toàn không có loi. De có the chac chan hơn 
vê tính dúng dan ca chơng trình, b n cân ch y th chơng trình vi nhiêu bo 
d
 lieu khác nhau và so sánh kêt qu mà chơng trình t o ra vi kêt qu mong 
di. 
1.6. Lch s C và C++ 
Ngôn ng
 lap trình C dc t o ra bi Dennis Ritchie (phòng thí nghiem Bell) và 
dc s dng de phát trien he diêu hành UNIX. Mot trong nh
ng dac diem noi 
bat ca C là doc lap vi phân c
ng (portable), t
c là chơng trình có the ch y 
trên các lo i máy tính và các he diêu hành khác nhau. Nam 1983, ngôn ng
 C dã 
dc chuan hóa và dc gi là ANSI C bi Vien chuan hóa quôc gia Hoa Ky 
(American National Standards Institute). Hien nay ANSI C van là ngôn ng
 lap 
trình chuyên nghiep và dc s dng rong rãi de phát trien các he thông tính 
toán hieu nang cao. 
Ngôn ng
 lap trình C++ do Bjarne Stroustrup (thuoc phòng thí nghiem Bell) 
phát trien trên nên là ngôn ng
 lap trình C và cm h
ng chính t' ngôn ng
 lap 
trình Simula67. So vi C, C++ là ngôn ng
 an toàn hơn, kh nang dien d t cao 
hơn, và ít dòi hi các ky thuat bac thâp. Ngoài nh
ng thê m nh th'a kê t' C, 
C++ ho tr tr'u tng hóa d
 lieu, lap trình hng dôi tng và lap trình tong 
quát, C++ giúp xây d$ng de dàng hơn nh
ng he thông ln và ph
c t p. 
Bat dâu t' phiên bn dâu tiên nam 1979 vi cái tên C with Classes (C kèm lp 
dôi tng)1 vi các tính nang cơ bn ca lap trình hng dôi tng, C++ dc 
phát trien dân theo thi gian. Nam 1983, cái tên C++ chính th
c ra di, các 
tính nang nh hàm o (virtual function), hàm trùng tên và dnh nghia l i toán t 
(overloading), hang ... dc bo sung. Nam 1989, C++ có thêm lp tr'u tng, 
da th'a kê, hàm thành viên tinh, hang hàm, và thành viên kieu protected. Các bo 
sung cho C++ trong thap k# sau dó là khuôn mau (template), không gian tên 
(namespace), ngo i le (exception), các toán t doi kieu d
 lieu mi, và kieu d
 
1 Theo li ke ca Bjarne Stroustrup t i trang cá nhân ca ông t i trang web ca phòng thí nghiem ATT 
http://www2.research.att.com/~bs/bs_faq.html#invention 
14
lieu Boolean. Nam 1998, lân dâu tiên C++ dc chính th
c chuan hóa quôc tê 
bi to ch
c ISO, kêt qu là chuan ISO/IEC 148822. 
Di kèm vi s$ phát trien ca ngôn ng
 là s$ phát trien ca th vien chuan C++. 
Bên c nh viec tích hp th vien chuan truyên thông ca C vi các sa doi nh 
cho phù hp vi C++, th vien chuan C++ còn có thêm th vien stream I/O 
phc v viec vào ra d
 lieu d ng dòng. Chuan C++ nam 1998 tích hp thêm 
phân ln th vien STL (Standard Template Library – th vien khuôn mau 
chuan)3. Phân này cung câp các câu trúc d
 lieu rât h
u ích nh vector, danh 
sách, và các thuat toán nh sap xêp và tìm kiêm. 
Hien nay, C++ là mot trong các ngôn ng
 lap trình chuyên nghiep dc s dng 
rong rãi nhât. 
1.7. Chơng trình C++ dâu tiên 
Chơng trình dơn gin trong Hình 1.3 se hien ra màn hình dòng ch
 “Hello 
world!”. Trong chơng trình có nh
ng dac diem quan trng ca C++. Ta se xem 
xét t'ng dòng. 
2 Van bn này (ISO/IEC 14882:1998) sau dó dc phát hien loi ch#nh sa vào nam 2003, thành phiên bn 
ISO/IEC 14882:2003. 
3 STL vôn không nam trong th vien chuan mà là mot th vien riêng do HP và sau dó là SGI phát trien. 
15
Hình 1.3: Chơng trình C++ dâu tiên. 
Hai dòng dâu tiên bat dâu bang chuoi // là các dòng chú thích chơng trình. Dó 
là kieu chú thích dòng dơn. Các dòng chú thích không gây ra ho t dong gì ca 
chơng trình khi ch y, trình biên dch b qua các dòng này. Ngoài ra còn có 
d ng chú thích kieu C dùng chuoi /* và */ de dánh dâu diem bat dâu và kêt thúc 
chú thích. Các lap trình viên dùng chú thích de gii thích và gii thieu vê noi 
dung chơng trình. 
Dòng th
 ba, #include iostream là mot dnh hng tiên x lý 
(preprocessor directive) – ch# dan vê mot công viec mà trình biên dch cân th$c 
hien trc khi dch chơng trình. #include là khai báo vê th vien se dc s 
dng trong chơng trình, trong trng hp này là th vien vào ra d
 lieu 
iostream trong th vien chuan C++. 
Tiêp theo là hàm main, phân không the thiêu ca moi chơng trình C++. Nó bat 
dâu t' dòng khai báo header ca hàm: 
16 
int main() 
Moi chơng trình C++ thng bao gôm mot hoac nhiêu hàm, trong dó có dúng 
mot hàm có tên main, dây là nơi chơng trình bat dâu th$c hien và kêt thúc. 
Bên trái t' main là t' khóa int, nó có nghia là hàm main se tr vê mot giá tr là 
sô nguyên. T' khóa là nh
ng t' dac biet mà C++ dành riêng cho nh
ng mc
dích c the. Chơng 4 se cung câp thông tin chi tiêt vê khái niem hàm và viec 
hàm tr vê giá tr. 
Thân hàm main dc bat dâu và kêt thúc bi cap ngoac {}, bên trong dó là 
chuoi các lenh mà khi chơng trình ch y chúng se dc th$c hien tuân t$ t' 
lenh dàu tiên cho dên lenh cuôi cùng. Hàm main trong ví d dang xét có ch
a 
hai lenh. Moi lenh dêu kêt thúc bang mot dâu cham phy, các dnh hng tiên 
x lý thì không. 
Lenh th
 nhât gôm cout, toán t , xâu kí t$ Hello world!, và dâu châm 
phy. Nó ch# th cho máy tính th$c hien mot nhiem v: in ra màn hình chuoi kí 
t$ nam gi
a hai dâu nháy kép – Hello world!. Khi lenh dc th$c thi, chuoi kí 
t$ Hello world se dc gi cho cout – luông d
 lieu ra chuan ca C++, 
thng dc nôi vi màn hình. Chi tiêt vê vào ra d
 lieu se dc nói dên trong 
Chơng 8. Chuoi kí t$ nam gi
a hai dâu nháy kép dc gi là mot xâu kí t 
(string). De ý dòng 
17 
using namespace std; 
nam  gân dâu chơng trình. Tât c thành phân ca th vien chuan C++, trong 
dó có cout dc dùng dên trong hàm main, dc khai báo trong mot không gian 
tên (namespace) có tên là std. Dòng trên thông báo vi trình biên dch rang 
chơng trình ví d ca ta se s dng dên mot sô thành phân nam trong không 
gian tên std. Nêu không có khai báo trên, tiên tô std:: se phi di kèm theo tên 
ca tât c các thành phân ca th vien chuan dc dùng trong chơng trình, 
chang h n cout se phi dc viêt thành std::cout. Chi tiêt vê không gian tên 
nam ngoài ph m vi ca cuôn sách này, ngi dc có the tìm hieu t i các tài lieu 
[1] hoac [2]. Nêu không có lu ý dac biet thì tât c các chơng trình ví d trong 
cuôn sách này dêu s dng khai báo s dng không gian tên std nh  trên. 
Lenh th
 hai nhy ra khi hàm và tr vê giá tr 0 làm kêt qu ca hàm. Dây là 
bc có tính chât quy trình do C++ quy dnh hàm main cân tr l i mot giá tr là 
sô nguyên cho biêt tr ng thái kêt thúc ca chơng trình. Giá tr 0 dc tr vê  
cuôi hàm main có nghia rang hàm dã kêt thúc thành công. 
De ý rang tât các lenh nam bên trong cap ngoac {} ca thân hàm dêu dc lùi 
dâu dòng mot m
c. Vi C++, viec này không có ý nghia vê cú pháp. Tuy nhiên, 
nó l i giúp cho câu trúc chơng trình de thây hơn và chơng trình de hieu hơn 
dôi vi ngi lap trình. Dây là mot trong các diem quan trng trong các quy c 
vê phong cách lap trình. Ph lc A se hng dan chi tiêt hơn vê các quy c 
này.
Dên dây ta có the sa chơng trình trong Hình 1.3 de in ra li chào Hello 
world! theo các cách khác nhau. Chang h n, ta có the in ra cùng mot noi dung 
nh cu nhng bang hai lenh gi cout: 
cout  Hello ; cout  world!; 
hoac in ra li chào trên nhiêu dòng bang cách chèn vào gi
a xâu kí t$ các kí t$ 
xuông dòng (kí t$ dac biet dc kí hieu là n): 
cout  Hello n world!n; 
Ph lc B hng dan vê cách s dng bo công c GNU C++ de dch và ch y 
chơng trình. 
18
19 
Bài tap 
1. Trình bày các bc chính de gii quyêt mot bài toán. Phân tích noi dung 
và dac diem chính ca t'ng bc. 
2. T i sao cân phi có chơng trình dch, s$ khác biet gi
a trình biên dch 
và trình thông dch? Liet kê các ngôn ng
 lap trình cân có trình biên dch, 
và các ngôn ng
 lap trình cân có trình thông dch. 
3. S$ khác biet, u diem và nhc diem gi
a ngôn ng
 lap trình bac cao và 
ngôn ng
 lap trình bac thâp? Nêu mot ví d mà nên s dng ngôn ng
 lap 
trình bac thâp de gii quyêt, và mot ví d mà nên s dng ngôn ng
 lap 
trình bac cao de gii quyêt. 
4. Trình bày các ngôn ng
 lap trình bac thâp mà b n biêt, nêu ra các dac 
diem noi bat ca t'ng ngôn ng
 lap trình dó. 
5. Trình bày các ngôn ng
 lap trình bac cao mà b n biêt, nêu ra các dac 
diem noi bat ca t'ng ngôn ng
 lap trình dó. 
6. Trình bày s$ khác biet, u diem và nhc diem gi
a ngôn ng
 lap trình C 
và C++. 
7. Trình bày các lo i loi thng gap khi lap trình. Phân tích dac diem ca 
t'ng lo i loi trên. 
8. Trình bày 5 ví d vê loi logic mà b n có the gap trong lap trình. 
9. Làm quen vi môi trng lap trình Dev-C++. Liet kê ra các ch
c nang 
chính ca môi trng Dev-C++. Tìm hieu và so sánh các môi trng lap 
trình khác cho C và C++. 
10. Viêt mot chơng trình C++ de hien ra màn hình tên ca b n. S dng 
biên dch dòng lenh bang bo công c GNU C++ de dch và ch y chơng 
trình.
Chơng 2. Biên, kieu d lieu và các phép toán 
Da sô chơng trình không ch# có nh
ng ho t dong dơn gin nh là hien th mot 
xâu kí t$ ra màn hình mà còn phi thao tác vi d
 lieu. Trong mot chơng trình, 
biên là tên ca mot vùng bo nh dc dùng de lu d
 lieu trong khi chơng 
trình ch y. D
 lieu lu trong mot biên dc gi là giá tr ca biên dó. Chúng ta 
có the truy nhap, gán hay thay doi giá tr ca các biên, khi biên dc gán mot 
giá tr mi, giá tr cu se b ghi dè lên. 
20 
Khai báo biên toàn cc 
totalApples kieu int 
Khai báo biên da phng 
numberOfBaskets 
sau dó gán giá tr 5 cho nó 
#include iostream 
using namespace std; 
int total(pples; 
int main() 
{ 
int number)f*askets + ,; 
int apple-er*asket; 
cout  .nter number apples per baskets: ; 
cin  apple-er*asket; 
total(pples + number)f*askets / apple-er*asket; 
cout  0umber of apples is   total(pples; 
return 1; 
} 
Gán giá tr nhap t- bàn phím 
cho biên applePerBasket 
Hình 2.1: Khai báo và s d
ng biên. 
Hình 2.1 minh ha viec khai báo và s dng biên. Trong dó, các dòng 
int total(pples; 
int number)f*askets + ,; 
int apple-er*asket; 
là các dòng khai báo biên. total(pples, number)f*askets, và 
apple-er*asket là các tên biên. Các khai báo trên có nghia rang total(pples, 
number)f*askets, và apple-er*asket là d
 lieu thuoc kieu int, nghia là các 
biên này se gi
 giá tr kieu nguyên. Dòng khai báo number)f*askets có mot 
diem khác vi hai dòng còn l i, dó là number)f*askets dc khi t o vi giá 
tr 5. C++ quy dnh rang tât c các biên dêu phi dc khai báo vi mot cái tên
và mot kieu d
 lieu trc khi biên dó dc s dng. Các biên thuoc cùng mot 
kieu có the dc khai báo trên cùng mot dòng, cách nhau bi mot dâu phy. 
Chang h n, có the thay hai dòng khai báo cho number)f*askets, và 
apple-er*asket bang: 
int number)f*askets + ,, apple-er*asket; 
Chơng trình trong Hình 2.1 yêu câu ngi dùng nhap sô táo trong moi gi 
(apple-er*asket), tính tong sô táo (total(pples) vi d
 kien dã biêt là sô gi 
táo (number)f*asket), rôi in ra màn hình. C the, dòng 
cout  .nter number apples per baskets: ; 
in ra màn hình xâu kí t$ .nter number apples per baskets: . Dó là li mi 
nhap d
 lieu, là hng dan dành cho ngi s dng chơng trình. 
Dòng tiêp theo 
21 
cin  apple-er*asket; 
dc d
 lieu dc ngi dùng nhap vào t' dâu vào chuan – thng là t' bàn 
phím. Khi ch y lenh này, chơng trình se di ngi dùng nhap vào mot giá tr 
cho biên apple-er*asket. Ngi dùng dáp 
ng bang cách gõ vào mot sô 
nguyên di d ng chuoi các ch
 sô rôi nhân phím Enter de gi các ch
 sô dó 
cho máy tính. Dên lt nó, máy tính biên doi chuoi các ch
 sô nó nhan dc 
thành mot giá tr kieu nguyên rôi chép giá tr này vào biên apple-er*asket. 
Tơng 
ng vi cout là dôi tng qun lý dòng d
 lieu ra chuan ca th vien 
C++, cin là dôi tng qun lý dòng d
 lieu vào chuan, thng là t' bàn phím. 
Tiêp theo là lenh gán 
total(pples + number)f*askets / apple-er*asket; 
Lenh này tính tích giá tr ca hai biên number)f*askets và apple-er*asket 
rôi gán kêt qu cho biên total(pples, trong dó / là kí hieu ca phép nhân và + 
là kí hieu ca phép gán. 
Lenh in kêt qu ra màn hình 
cout  0umber of apples is   total(pples; 
hien th liên tiêp hai thành phân: xâu kí t$ 0umber of apples is  và giá tr 
ca biên total(pples.
Ngoài viec in giá tr ca mot biên, C++ còn cho phép ta in kêt qu ca mot bieu 
th
c. Do dó, ta có mot l$a chn khác là gop công viec ca hai lenh trên (tính 
tích hai biên và in tích ra màn hình) vào mot lenh: 
cout  0umber of apples is   number)f*askets / 
apple-er*asket; 
Khi dó, biên total(pples vôn dc dùng de lu tr
 kêt qu ca phép tính tr 
nên không còn cân thiêt, ta có the xóa b dòng khai báo biên này. De ý là lenh 
trên dài và chiêm c sang dòng th
 hai. C++ cho phép mot lenh nam trên nhiêu 
dòng, dâu châm phy cuôi moi lenh se giúp trình biên dch hieu dâu là kêt thúc 
ca lenh. 
2.1. Kieu d lieu 
Moi biên phi dc khai báo de lu gi
 giá tr thuoc mot kieu d
 lieu nào dó. 
Ngôn ng
 lap trình bac cao thng có hai lo i kieu d
 lieu: các kieu d
 lieu cơ 
bn và các kieu d
 lieu dan xuât. 
2.1.1. Kieu d lieu cơ bn 
Kieu d
 lieu cơ bn là kieu d
 lieu do ngôn ng
 lap trình dnh nghia san. Ví d 
nh các kieu sô nguyên – char, int, long int. Biên thuoc kieu nguyên dc 
dùng de lu các sô có giá tr nguyên. Dôi vi kieu cơ bn chúng ta thng quan 
tâm dên kích thc bo nh ca kieu d
 lieu, gii h n giá tr mà kieu d
 lieu dó 
có the lu gi
. Dôi vi các kieu dâu châm dong (floating-point) de lu các giá 
tr thuoc kieu sô th$c, chúng ta còn quan tâm dên do chính xác ca kieu d
 lieu 
dó. Tài lieu chuan C++ không quy dnh chính xác sô byte cân dùng de lu các 
biên thuoc các kieu d
 lieu cơ bn trong bo nh mà ch# quy dnh yêu câu vê 
kích thc ca kieu d
 lieu này so vi kieu d
 lieu kia. Các kieu nguyên có dâu, 
signed char, short int, int và long int, phi có kích thc tang dân. Moi kieu 
nguyên có dâu tơng 
ng vi mot kieu nguyên không dâu vi cùng kích thc. 
Các kieu nguyên không dâu không the bieu dien giá tr âm nhng có the bieu 
dien sô giá tr dơng nhiêu gâp dôi kieu có dâu tơng 
ng. Tơng t$, các kieu 
châm dong, float, double và long double cung phi có kích thc tang dân. 
Bng 2.1 liet kê mot sô kieu d
 lieu cơ bn ca C++ vi kích thc dc nhiêu 
bn cài dat C++ s dng. 
22
23 
Kieu Mô t 
Kích thc 
thông dng 
(byte) 
Phm vi (tơng 	ng vi kích thc) 
char 
ký t$ / 
sô nguyên nh 
1 
các kí t$ ASCII 
signed char: -128 2 127, hoac 
unsighed char: 0 2 255 
bool giá tr Boolean 1 true hoac false 
short sô nguyên 2 
signed short: -327672 32767 
unsigned short: 02 65536 
int sô nguyên ln 4 
signed int: 2147483648 2 2147483647 
unsigned int: 0 2 -4294967296 
long 
sô nguyên 
rât ln 
4 
signed long: 2147483648 2 2147483647 
unsigned long: 0 2 -4294967296 
float sô th$c 4 +/- 1.4023x10-45 2 3.4028x10+38 
double 
sô th$c vi 
do chính xác cao 
8 +/- 4.9406x10-324 2 1.7977x10308 
long 
double 
sô th$c vi 
do chính xác 
rât cao 
8 +/- 4.9406x10-324 2 1.7977x10308 
Bng 2.1: Mot sô kieu d lieu cơ bn trong C++. 
Mot sô lu ý: 
• Kích thc và ph m vi ca các kieu d
 lieu cơ bn ph thuoc vào he thông 
mà chơng trình dc biên dch t i dó. Tuy nhiên,  tât c các he thông, kieu 
char bao gi cung có kích thc là 1 byte; các kieu d
 lieu char, short, 
int, long phi có kích thc tang dân; còn các kieu float, double, long 
double phi có do chính xác cao dân. 
• Kieu char dùng de lu các kí t$ dơn (có mã nh hơn 256), chang h n nh 
ch
 cái La-tinh, ch
 sô, hay các kí hieu. Trong C++, mot kí t$ dơn dc 
dóng trong cap nháy dơn, ví d '('. De lu các kí t$ có mã ln hơn 255, ta 
có the s dng kieu wchar_t.
• Kieu d
 lieu bool ch# có hai giá tr true và false. Ta có the dùng biên 
thuoc kieu này de lu câu tr li ca nh
ng câu hi dúng/sai chang h n nh 
Có phi index ln hơn 100? hay lu các tr ng thái Ta dã tìm thây giá tr 
âm cha?. Các giá tr true và false trong C++ th$c ra ch# là 0 và 1. 
2.1.2. Kieu d lieu dan xuât 
Kieu d
 lieu dan xuât là kieu d
 lieu dc xây d$ng t' các kieu d
 lieu cơ bn 
bang các toán t nh * (con tr),  (tham chiêu), [] (mng), () hàm, hoac dc 
dnh nghia bang cơ chê struct hay class. Các kieu d
 lieu dc dnh nghia 
bang cơ chê struct hay class còn dc gi là các kieu d
 lieu có câu trúc hoac 
kieu d
 lieu tr'u tng. Chi tiêt vê các kieu d
 lieu dan xuât se dc trình bày 
dân dân trong các chơng sau. 
2.2. Khai báo và s dng biên 
De bat dâu s dng mot biên, chúng ta phi tiên hành hai bc: dat cho biên 
mot cái tên hp le và khai báo biên. 
2.2.1. Dnh danh và cách dat tên biên 
Dnh danh (identifier) là thuat ng
 trong ngôn ng
 lap trình khi nói dên tên (tên 
biên, tên hàm, tên lp…). Dnh danh là mot chuoi kí t$ (bao gôm các ch
 cái 
a..z, A..Z, ch
 sô 0..9, dâu g ch chân ‘_’) viêt liên nhau. Dnh danh không dc 
bat dâu bang ch
 sô và không dc trùng vi các t khóa (nh
ng t' mang ý 
nghia dac biet) ca ngôn ng
 lap trình. Lu ý, C++ phân biet ch
 cái hoa và ch
 
cái thng. 
Cách dat tên biên tuân th theo cách dat tên dnh danh. Ví d vê các tên biên: 
• _sinhvien, sinhvien_11, sinhVien_11 là các tên biên hp le khác nhau 
• 11sinhvien, sinhviên, sinhvien là các tên biên không hp le 
Tên biên nên de dc, và gi nh dên công dng ca biên hay kieu d
 lieu mà 
biên se lu tr
. Ví d, nêu cân dùng mot biên de lu sô lng qu táo, ta có the 
dat tên là total(pples. Không nên s dng các tên biên ch# gôm mot kí t$ và 
không có ý nghia nh a hay b. 
24
2.2.2. Khai báo biên 
Các ngôn ng
 lap trình dnh kieu m nh, trong dó có C++, yêu câu moi biên 
trc khi dùng phi dc khai báo và biên phi thuoc vê mot kieu d
 lieu nào 
dó. Có the chia các biên thành hai lo i: 
• các biên dc khai báo  ngoài tât c các chơng trình con là biên toàn cc, 
có hieu l$c trên toàn bo chơng trình, chang h n biên total(pples trong 
Hình 2.1. 
• các biên dc khai báo t i mot chơng trình con là biên da phơng, có 
hieu l$c  bên trong chơng trình con dó, chang h n number)f*askets và 
apple-er*asket trong Hình 2.1 là các biên da phơng ca hàm main và ch# 
có hieu l$c  bên trong hàm main. 
Chơng 4 se nói ki hơn vê hai lo i biên trên. 
Trong C++, biên có the dc khai báo gân nh bât c
 dâu trong chơng trình, 
mien là trc dòng dâu tiên s dng dên biên dó (xem Hình 2.1). 
Mot biên da phơng dã dc khai báo nhng cha dc gán mot giá tr nào 
dc gi là biên cha dc khi t o. Giá tr ca biên cha dc khi t o thng 
là không xác dnh. De tránh tình tr ng này, ta có the khi t o giá tr ca các biên 
bang cách gán giá tr ngay t i lenh khai báo biên. 
2.3. Hang 
Hang là mot lo i biên dac biet mà giá tr ca nó dc xác dnh t i thi diem 
khai báo và không dc thay doi trong suôt chơng trình. De khai báo mot 
hang, ta thêm t' khóa const vào phía trc lenh khai báo biên. Ví d: 
const float -I + 3.141,926,3,; 
const float SCR..0_WIDTH + 317.24; 
Hang dc dùng de dat tên cho các giá tr không thay doi dc dùng trong 
chơng trình, chang h n nh do rong màn hình nh trong ví d trên. Công dng 
ca hang là moi khi cân thay doi giá tr dó, ta ch# cân sa lenh khai báo hang 
thay vì tìm và sa giá tr tơng 
ng t i tât c các v trí dùng dên nó. Ngoài ra, 
mot cái tên có ý nghia dat cho mot giá tr dc dùng di dùng l i se giúp cho 
chơng trình de dc và de hieu hơn. 
25
2.4. Các phép toán cơ bn 
2.4.1. Phép gán 
Phép gán là cách gan mot giá tr cho mot biên hoac thay doi giá tr ca mot 
biên. Lenh gán trong C++ là: 
26 
biên = bieu thc; 
trong dó dâu bang (“=”) dc gi là dâu gán hay toán t gán. Lu ý, dâu bang 
trong C++ không dùng de so sánh giá tr nh trong mot sô ngôn ng
 lap trình 
khác. Ví d 
symbol + '('; 
là phép gán giá tr ‘A’ cho biên symbol, không phi là bieu th
c so sánh xem 
giá tr ca symbol có phi là 'A' hay không. 
Công viec ca phép gán là tính giá tr ca bieu th
c bên phi dâu gán rôi lu giá 
tr dó vào trong biên nam bên trái dâu gán. 
Bieu th
c có the là mot sô, mot biên, hoac mot bieu th
c ph
c t p. Lu ý rang 
mot biên có the xuât hien  c hai bên ca dâu gán. Ví d lenh sau tang giá tr 
ca biên apples thêm 2. 
apples + apples + 2; 
Diem dac biet ca C++ là bn thân phép gán cung chính là mot bieu th
c vi 
giá tr tr vê là kêt qu ca phép gán. Ví d, phép gán x = 3 là mot bieu th
c có 
giá tr bang 3. 
2.4.2. Các phép toán sô hc 
C++ ho tr nam phép toán sô hc sau: + (cong), - (tr'), / (nhân), / (chia), % 
(modulo – lây phân d ca phép chia). Phép chia dc th$c hien cho hai giá tr 
kieu nguyên se cho kêt qu là thơng nguyên. Ví d bieu th
c 4 / 3 cho kêt qu 
bang 1, còn 3 / 5 cho kêt qu bang 0. 
Mot sô phép gán kèm theo bieu th
c xuât hien nhiêu lân trong mot chơng 
trình, vì vay C++ cho phép viêt các phép gán bieu th
c dó mot cách gan ngn 
hơn, s dng các phép gán ph
c hp (++, -+, /+, /+, %+, +, +, +, ^+, |+). 
Cách s dng phép gán ph
c hp ++ nh sau: 
biên += bieu thc; tơng dơng biên = biên + bieu thc;
27 
Ví d: 
apples ++ 2; tơng dơng apples + apples + 2; 
Các phép gán ph
c hp khác dc s dng tơng t$. 
C++ còn cung câp các phép toán ++ (hay --) de tang (gim) giá tr ca biên lên 
mot dơn v. Ví d: 
apples++ hay ++apple có tác dng tang apples thêm 1 dơn v 
apples-- hay --apple có tác dng gim apples di 1 dơn v 
Khác biet gi
a viec viêt phép tang/gim  trc biên (tang/gim trc) và viêt 
phép tang/gim  sau biên (tang/gim sau) là thi diem th$c hien phép 
tang/gim, the hien  giá tr ca bieu th
c. Phép tang/gim trc dc th$c hien 
trc khi bieu th
c dc tính giá tr, còn phép tang/gim sau dc th$c hien sau 
khi bieu th
c dc tính giá tr. Ví d, nêu apples vôn có giá tr 1 thì các bieu 
th
c ++apples hay apples++ dêu có hieu 
ng là apples dc tang t' 1 lên 2. 
Tuy nhiên, ++apples là bieu th
c có giá tr bang 2 (tang apples trc tính giá 
tr), trong khi apples++ là bieu th
c có giá tr bang 1 (tang apples sau khi tính 
giá tr bieu th
c). Nêu ta ch# quan tâm dên hieu 
ng tang hay gim ca các phép 
++ hay – thì viec phép toán dc dat trc hay dat sau không quan trng. Dó 
cung là cách dùng pho biên nhât ca các phép toán này. 
Lu ý, cân hêt s
c can than khi s dng các phép tang và gim trong các bieu 
th
c. Viec này không dc khuyên khích vì tuy nó có the tiêt kiem dc mot 
hai dòng lenh nhng l i làm gim tính trong sáng ca chơng trình. 
2.4.3. Các phép toán quan he 
Các phép toán quan he dc s dng de so sánh giá tr hai bieu th
c. Các phép 
toán này cho kêt qu bang 0 nêu dúng và khác 0 nêu sai. Ta s dng giá tr ca 
mot bieu th
c quan he nh là mot giá tr thuoc kieu bool. Ví d: 
bool enough(pples + (total(pples  11); 
Các phép toán quan he trong ngôn ng
 C++ dc liet kê trong Bng 2.2.
Ký hieu toán hc Toán t ca C++ Ví d Ý nghia 
  x  y x ln hơn y 
  x  y x nh hơn y 
³ + x + y x ln hơn hoac bang y 
£ + x + y x nh hơn hoac bang y 
+ ++ x ++ y x bang y 
¹ !+ x !+ y x khác y 
Bng 2.2: Các phép toán quan he. 
Chú ý tránh nhâm lan gi
a phép gán giá tr “+” và phép so sánh bang “++”. 
Nh
ng nhâm lan gi
a các phép toán kieu này thng dan dên nh
ng loi lôgic 
rât khó phát hien. 
2.4.4. Các phép toán lô-gic 
Toán t C++ Ý nghia Ví d Ý nghia ca ví d 
 and x  y Cho giá tr dúng khi c x và y dúng, 
ngc l i cho giá tr sai. 
|| or x || y Cho giá tr dúng khi hoac x dúng hoac y 
dúng, ngc l i cho giá tr sai 
28 
! not !x 
Ph dnh ca x. Cho giá tr dúng khi x sai; 
cho giá tr sai khi x dúng 
Bng 2.3: Các phép toán lô-gic. 
Các phép toán lô-gic dành cho các toán h ng là các bieu th
c quan he hoac các 
giá tr bool. Kêt qu ca bieu th
c lôgic là giá tr bool. 
Ví d: 
bool enough(pples + (apples  3)  (apples  11); 
có kêt qu là biên enough(pples nhan giá tr là câu tr li ca câu hi biên 
apples có giá tr ln hơn 3 và nh hơn 10 hay không?. 
2.4.5. Do u tiên ca các phép toán 
Di dây là m
c do u tiên ca mot sô phép toán thng gap. Th
 t$ ca chúng 
nh sau:
Các phép toán nam trong cap dâu ngoac ( ) có do u tiên ln nhât. Ví d: 
29 
2 * (1 + 3) cho kêt qu bang 8 
Các phép toán /, /, +, -. Trong dó /, / có do u tiên nh nhau và cao hơn +, -. 
Ví d: 
2 * 1 + 3 cho kêt qu là 5 
Các phép toán so sánh , , =, =. Ví d: 
3 + 4  2 + 6 cho kêt qu dúng 
Các phép toán lô-gic có th
 th
 t$ u tiên nh sau: !, , ||. Ví d: 
1 || 0  0 tơng dơng vi 1 || (0  0) và cho kêt qu 1 
2.4.6. Tơng thích gia các kieu 
Vê cơ bn, giá tr gán cho mot biên nên cùng kieu vi biên dó. Khi mot biên 
dc gán mot giá tr không dúng vi kieu d
 lieu ca biên dó, thì giá tr dó se 
dc chuyen doi sang kieu ca biên (type conversion). Mot vài trng hp 
thng gap trong viec chuyen kieu là: 
Chuyen doi gi
a sô th$c và sô nguyên 
int x + 2.,; // x nhan giá tr 2 
double y + 3.,; // y nhan giá tr 3,, 
x + y; // x nhan giá tr 3 
Phép chia ca sô nguyên 
int divisor + 4; 
int dividend + 6; 
int quo + dividend/divisor; // quo nhan giá tr 1. 
Lu ý: Phép chia mot sô nguyên cho mot sô nguyên se cho kêt qu là mot sô 
nguyên. Muôn kêt qu là mot sô th$c thì ít nhât mot trong hai sô phi là sô th$c.
Bài tap 
1. Viêt chơng trình tính dien tích ca mot hình tròn. Bán kính là mot sô th$c 
và dc nhap vào t' bàn phím. Dien tích hình tròn dc hien ra màn hình. 
2. Nhap t' bàn phím hai sô nguyên là chiêu cao ca Peter và Essen. Hãy tính 
xem Peter cao gâp bao nhiêu lân Essen. Ví d, nêu chiêu cao ca Peter là 
180, chiêu cao ca Essen là 150, thì hien ra màn hình dòng ch
 “Peter is 1.2 
times as tall as Essen”. 
3. Nhap t' bàn phím mot sô nguyên là nhiet do di d ng do F (Fahrenheit), 
hãy hien ra màn hình nhiet do di d ng do C (Celsius). Sinh viên t$ tìm 
hieu công th
c chuyen doi. 
4. Viêt mot chơng trình trong dó có hai hang sô WIDTH vi giá tr bang 
3.17654, và hang sô LENGTH vi giá tr bang 10.03212. Tính và hien ra 
màn hình dien tích ca hình ch
 nhat vi hai c nh là WIDTH và LENGTH. 
5. Nhap t' bàn phím bôn sô nguyên a, b, c, d. Hãy tính và hien ra màn hình giá 
30 
tr ca bieu th
c: 
(a + b)  (c + d) || (a - b)  (c - d) 
6. Trình bày s$ khác biet gi
a biên da phơng và biên toàn cc. Khi nào thì 
nên dùng biên da phơng, khi nào thì nên dùng biên toàn cc. Nêu các lu y 
khi s dng biên toàn cc. 
7. Viêt mot chơng trình có ch
a hai biên: biên da phơng bonus và biên toàn 
cc score. Nhap giá tr hai biên t' bàn phím, tính và hien ra màn hình tong 
ca score và bonus. 
8. Hãy tính (không dùng chơng trình) giá tr ca các bieu th
c sau: 
a) 1 + 3  2 * 4 – 1  1 
b) 2 * 2 – 1 + 5 / 1  4 – 3 
c) (2 – 3 * 1)  0 / 5 * 2 + 1 
9. Tính giá tr ca biên c t' do n chơng trình sau: 
a) int a = 3; int b = 2; int c = a/b; 
b) double a = 3.1; int b = 2; int c = a/b;
c) int a = 3; int b = 2; double c = a/b; 
10. Nhap hai sô nguyên dơng x và y t' bàn phím, hãy tính: 
a) Thơng ca phép toán x chia cho y 
b) Tích ca phép toán x nhân y 
c) Phân nguyên ca x chia cho y 
d) Phân d ca x chia cho y 
11. Nhap t' bàn phím 3 sô th$c x, y, và z. Hãy tính 
a) Trung bình cong ca ba sô trên 
b) Hien ra màn hình sô 1 nêu x là sô ln nhât trong ba sô trên, ngc l i 
31 
hien ra màn hình sô 0. 
c) Hien ra màn hình sô 1 nêu z là sô nh trong ba sô trên, ngc l i hien ra 
màn hình sô 0. 
12. Tính giá tr (không dùng chơng trình) ca bieu th
c so sánh di dây: 
a) x = 1; y = 2; x++  y 
b) x = 2; y = 1; x--  y++ 
c) x = 2; y = 2; x++ == y
Chơng 3. Các câu trúc diêu khien 
Nh dã nói  phân trên, chơng trình máy tính mà chúng ta lap trình t o ra th$c 
chât là mot tap các lenh. Các chơng trình dc viêt bang ngôn ng
 bac cao 
thng ch
a mot hàm chính (trong C++ là hàm main), nơi chơng trình bat dâu 
th$c hien các lenh. 
Trong chơng này chúng ta se tìm hieu th
 t$ th$c hien các lenh trong mot 
chơng trình. 
3.1. Luông diêu khien 
Luông diêu khien ca chơng trình là th
 t$ các lenh (hành dong) mà chơng 
trình th$c hien. Cho dên chơng này, chúng ta mi gap th
 t$ dơn gin: th
 t$ 
tuân t$, nghia là các hành dong dc th$c hien dúng theo th
 t$ mà chúng dc 
viêt trong chơng trình. Ví d, Hình 3.1 là sơ dô minh ha mot câu trúc tuân t$ 
dien hình, trong dó hai hành dong và các mui tên bieu dien th
 t$ th$c hien các 
hành dong. 
Hình 3.1: Sơ dô chuyen trng thái ca mot don lenh có th t	 th	c thi tuân t	. 
Trong chơng này, ta se làm quen vi các luông diêu khien ph
c t p hơn. Hâu 
hêt các ngôn ng
 lap trình, trong dó có C++, cung câp hai lo i lenh de kiem soát 
luông diêu khien: 
• lenh re nhánh (branching) chn mot hành dong t' danh sách gôm nhiêu 
32 
hành dong. 
• lenh lap (loop) th$c hien lap di lap l i mot hành dong cho dên khi mot 
diêu kien d'ng nào dó dc tha mãn.
Hai lo i lenh dó t o thành các câu trúc diêu khien (control structure) bên trong 
chơng trình. 
3.2. Các câu trúc re nhánh 
3.2.1. Lenh if-else 
Lenh if-else (hay gi tat là lenh if) cho phép re nhánh bang cách l$a chn 
th$c hien mot trong hai hành dong. Ví d, trong mot chơng trình xêp lo i diem 
thi, nêu diem ca sinh viên nh hơn 60, sinh viên dó dc coi là trt, nêu 
không thì dc coi là do. 
[score  60] [score = 60] 
in Failed in Passed 
Hình 3.2: Sơ dô mot lenh if. 
Thuat toán nh này dc the hien bang sơ dô trong Hình 3.2. Trong dó hình qu 
trám bieu dien diem re nhánh, nơi chơng trình da ra quyêt dnh xem nên re 
theo hng nào. T' diem re nhánh có các mui tên di ra, moi mui tên kèm theo 
mot diêu kien. Luông diêu khien se di theo mui tên nào mà diêu kien ca nó 
dc tha mãn. 
Cung có the trình bày thuat toán bang mã gi nh sau: 
33 
If student’s score is less than 60 
print “Failed” 
else 
print “Passed” 
The hien thuat toán trên bang mot lenh if-else ca C++, ta có do n mã:
34 
if (score  61) 
cout  Failed; 
else 
cout  -assed; 
Khi chơng trình ch y mot lenh if-else, dâu tiên nó kiem tra bieu th
c diêu 
kien nam trong cap ngoac dơn sau t' khóa if. Nêu bieu th
c có giá tr bang 
true thì lenh nam sau t' khóa if se dc th$c hien. Ngc l i, lenh nam sau 
else se dc th$c hien. Chú ý là bieu th
c diêu kien phi dc dat trong mot 
cap ngoac dơn. 
#include iostream 
using namespace std; 
int main() 
{ 
int score; 
cout  .nter your score: ; 
cin  score; //get the score from the keyboard 
if (score  61) 
cout  Sorry. NouOve failed the course.n; 
else 
cout  Congratulations! NouOve passed the course.n; 
return 1; 
} 
ê
.
F
$1 
@
FN
O6
.
F
$E1
N
O6
Hình 3.3: Ví d
vê câu trúc -. 
Chơng trình ví d trong Hình 3.3 yêu câu ngi dùng nhap diem rôi in ra các 
thông báo khác nhau tùy theo diem sô d do hoac trt. De ý rang các lenh nam 
bên trong khôi - cân dc lùi dâu dòng mot m
c de chơng trình trông 
sáng sa de dc.
Trong câu trúc re nhánh -, ta có the b phân  nêu không muôn 
chơng trình th$c hien hành dong nào nêu diêu kien không tha mãn. Chang 
h n, nêu muôn thêm mot li khen dac biet cho diem sô xuât sac t' 90 tr lên, ta 
có the thêm lenh  sau vào trong chơng trình t i Hình 3.3. 
35 
(
=91)
.x	; 
Ta có the dùng các câu trúc - lông nhau de t o ra diêu kien re nhánh 
ph
c t p. Hình 3.3 là mot ví d dơn gin vi ch# hai trng hp và mot lenh . 
Xét mot ví d ph
c t p hơn: cho trc diem sô (lu t i biên
kieu ), 
xác dnh xêp lo i hc l$c A, B, C, D, F tùy theo diem dó. Quy tac xêp lo i là: 
nêu diem t' 90 tr lên thì d t lo i A, diem t' 80 ti di 90 d t lo i B, v.v.. T i 
do n mã xét các trng hp ca xêp lo i diem, ta có the dùng câu trúc - 
lông nhau nh sau: 
(
=91) 

='A'; 
 
(
=81) 

='B'; 
 
(
=E1) 

=''; 
 
(
=61) 

='D'; 
 

='F'; 
De ý rang moi khôi lenh - sau nam trong phân  ca khôi lenh - 
 liên trc. Nêu
không di 90, diêu kien ca c bôn lenh - 
dêu cho kêt qu 
. Tuy nhiên, do diêu kien ca lenh - ngoài cùng 
tha mãn, ch# có lenh gán dâu tiên 
 = 'A' dc th$c thi, còn toàn bo 
phân  ca lenh - ngoài cùng, bao gôm ba lenh - còn l i, b 
b qua. 
Vi các khôi lenh - lông nhau nh  trên, khi phi lùi dâu dòng quá xa 
vê bên phi, dòng còn l i quá ngan khiên moi lenh có the phi tri trên vài dòng, 
dan dên viec chơng trình khó dc. Do dó, da sô lap trình viên C++ thng
dùng kieu lùi dâu dòng nh di dây. (Hai cách lùi dâu dòng này là nh nhau 
dôi vi trình biên dch vì nó b qua các kí t$ trang.) 
36 
(
=91) 

='A'; 
(
=81) 

='B'; 
(
=E1) 

=''; 
(
=61) 

='D'; 
 

='F'; 
Hình 3.4 là chơng trình hoàn ch#nh th$c hien nhiem v yêu câu ngi dùng 
nhap diem sô sau dó tính và in ra xêp lo i hc l$c tơng 
ng.
37
; 
()
; 
	


;
.
F
$;
; 
(
=91) 

='A'; 
(
=81) 

='B'; 
(
=E1) 

=''; 
(
=61) 

='D'; 
 

='F';
Q
=
; 


1; 
  
 
Hình 3.4: Câu trúc if-else lông nhau. 
Mot diêu cân dac biet lu ý là nêu muôn th$c hien nhiêu hơn mot lenh trong 
moi trng hp ca lenh -, ta cân dùng cap ngoac {} bc tap lenh dó 
thành mot khôi chơng trình. Ví d, phiên bn ph
c t p hơn ca lenh  trong 
Hình 3.3:
(
61)
F;
N
6
k
;
;
N
; 
  
De tránh loi quên cap ngoac, có mot li khuyên là tap thói quen dùng cap ngoac 
ngay c khi khôi lenh ch# bao gôm dúng mot lenh. Chang h n, xét khôi lenh 
lông nhau di dây: 
(
Q
=='A') 
(
Q
=='A')
N
6
w
A';
N
'
6
A
; 
Thông báo trong phân  dáng ra cân dc th$c thi khi xêp h ng ca môn 
Toán (
Q
) không d t A. Tuy nhiên, trong th$c tê, trình biên dch l i 
hieu rang phân  dó cùng cap vi lenh  th
 hai – lenh  gân nhât, nghia 
là: 
(
Q
=='A') 
(
Q
=='A')
N
6
w
A';
N
'
6
A
; 
Các loi lôgic d ng này thng khó phát hien. Dôi vi C++, viec lùi dâu dòng 
ch# nham mc dích de lap trình viên de dc chơng trình ch
 không có ý nghia 
vi trình biên dch. Cách gii quyêt là s dng cap ngoac {} de ch# rõ cho trình 
biên dch rang lenh  th
 hai nam trong lenh  ngoài cùng và rang phân  
cùng cap vi lenh  ngoài cùng dó: 
38
(
Q
=='A') 
(
Q
=='A')
N
6
w
A';
N
'
6
A
; 
3.2.2. Lenh swi
 
Khi chúng ta muôn viêt mot câu trúc re nhánh có nhiêu l$a chn, ta có the s 
dng nhiêu lenh - lông nhau. Tuy nhiên, trong trng hp viec l$a chn 
re nhánh ph thuoc vào giá tr (kieu sô nguyên hoac kí t$) ca mot biên hay 
bieu th
c, ta có the s dng câu trúc w	
 de chơng trình de hieu hơn. Lenh 
w	
 dien hình có d ng nh sau: 
w	
(bieu_thc) 
	hang_1$ 
tap_lenh_1;b
k; 
	hang_2$ 
tap_lenh_2;b
k; 
 
$ 
tap_lenh_mac_d
nh; 
  
Khi lenh w	
 dc ch y, bieu_thc dc tính giá tr và so sánh vi hang_1. 
Nêu bang nhau, chuoi lenh ke t' tap_lenh_1 dc th$c thi cho dên khi gap lenh 
b
k dâu tiên, dên dây chơng trình se nhy ti diem kêt thúc câu trúc w	
. 
Nêu bieu_thc không có giá tr bang hang_1, nó se dc so sánh vi hang_2, 
nêu bang nhau, chơng trình se th$c thi chuoi lenh ke t' tap_lenh_2 ti khi gap 
lenh b
k dâu tiên thì nhy ti cuôi câu trúc w	
. Quy trình c
 tiêp dien 
nh vay. Cuôi cùng, nêu bieu_thc có giá tr khác vi tât c các giá tr dã dc 
liet kê (hang_1, hang_2, ...), chơng trình se th$c thi tap_lenh_mac_d
nh nam 
sau nhãn $ nêu nh có nhãn này (không bat buoc). 
Ví d, lenh sau so sánh giá tr ca biên 
 vi các hang kí t$ 'A', 'B', 'C' và 
in ra các thông báo khác nhau cho t'ng trng hp. 
39
w	
(
) 
	'A'$
Q
=A;b
k; 
	'B'$
Q
=B;b
k; 
	''$
Q
=;b
k; 
$
Q
A,B,
; 
  
Nó tơng dơng vi khôi lenh - lông nhau sau: 
(
=='A')
Q
=A; 
(
=='B')
Q
=B; 
(
=='')
Q
=;
Q
A,B,
; 
  
Lu ý, các nhãn 	 trong câu trúc w	
 phi là hang ch
 không the là biên 
hay bieu th
c. Nêu cân so sánh vi biên hay bieu th
c, ta nên dùng khôi lenh 
- lông nhau. 
Vân dê dac biet ca câu trúc w	
 là các lenh b
k. Nêu ta không t$ gan mot 
lenh b
k vào cuôi chuoi lenh cân th$c hien cho moi trng hp, chơng trình 
se ch y tiêp chuoi lenh ca trng hp sau ch
 không t$ dong nhy ti cuôi câu 
trúc w	
. Ví d, do n chơng trình sau se ch y lenh in th
 nhât nêu grade 
nhan mot trong ba giá tr 'A', 'B', 'C' và ch y lenh in th
 hai trong trng hp 
còn l i: 
40
w	
(
) 
	'A'$ 
	'B'$ 
	''$
Q
A,B
;b
k; 
$
Q
A,B
; 
  
Chơng trình trong Hình 3.5 là mot ví d hoàn ch#nh s dng câu trúc w	
 
de in ra các thông báo khác nhau tùy theo xêp lo i hc l$c (
) mà ngi 
dùng nhap t' bàn phím. Trong dó, 	'A' kêt thúc vi b
k sau ch# mot 
lenh, còn	'B' ch y tiêp qua 	'', 'D' rôi mi gap b
k và thoát 
khi lenh w	
. Nhãn  dc dùng de x lý trng hp biên grade gi
 
giá tr không hp le dôi vi xêp lo i hc l$c. Trong nhiêu chơng trình, phân 
 thng dc dùng de x lý các trng hp không mong di, chang 
h n nh de bat loi các kí hieu hc l$c không hp le mà ngi dùng có the nhap 
sai trong Hình 3.5. 
41
42
; 
() 
 
	


;
.
F
$; 
	
; 
w	
(
) 
 
	'A'$
.x	';b
k; 
	'B'$
Q
'; 
	''$ 
	'D'$
B
';b
k; 
	'F'$
@
F,F
';b
k; 
$
.
:6
; 
  


1; 
} 
ê
.
F
$A 
.x	 
.
F
$B 
Q
 
B
.
F
$D 
B
.
F
$F 
@
F,F
Hình 3.5: Ví d
s d
ng câu trúc switch.
3.3. Các câu trúc lap 
Các chơng trình thng cân phi lap di lap l i mot ho t dong nào dó. Ví d, 
mot chơng trình xêp lo i hc l$c se ch
a các lenh re nhánh de gán xêp lo i A, 
B, C… cho mot sinh viên tùy theo diem sô ca sinh viên này. De xêp lo i cho 
c mot lp, chơng trình se phi lap l i thao tác dó cho t'ng sinh viên trong lp. 
Phân chơng trình lap di lap l i mot lenh hoac mot khôi lenh dc gi là mot 
vòng lap. Lenh hoac khôi lenh dc lap di lap l i dc gi là thân ca vòng lap. 
Câu trúc lap cho phép lap trình viên ch# th cho chơng trình lap di lap l i mot 
ho t dong trong khi mot diêu kien nào dó van dc tha mãn. 
Khi thiêt kê mot vòng lap, ta cân xác dnh thân vòng lap th$c hien hành dong gì. 
Ngoài ra, ta còn cân mot cơ chê de quyêt dnh khi nào vòng lap se kêt thúc. 
Mc này se gii thieu vê các lenh lap mà C++ cung câp. 
3.3.1. Vòng wile 
Vòngwilelap di lap l i chuoi hành dong, gi là thân vòng lap, nêu nh diêu 
kien lap van còn dc tha mãn. Cú pháp ca vòng lap w
 nh sau: 
43 
w
(diêu_kien_lap) 
thân_vòng_lap 
Câu trúc này bat dâu bang t' khóa w
, tiêp theo là diêu kien lap dat trong 
mot cap ngoac dơn, cuôi cùng là thân vòng lap. Thân vòng lap hay ch
a nhiêu 
hơn mot lenh và khi dó thì phi dc gói trong mot cap ngoac {}. 
Khi th$c thi mot câu trúc w
, dâu tiên chơng trình kiem tra giá tr ca bieu 
th
c diêu kien, nêu bieu th
c cho giá tr  (th$c chât là bang 0) thì nhy 
dên diem kêt thúc lenh w
, còn nêu diêu kien lap có giá tr 
 (th$c chât là 
mot giá tr nào dó khác 0) thì tiên hành th$c hien tap lenh trong thân vòng lap 
rôi quay tr l i kiem tra diêu kien lap, nêu không tha mãn thì kêt thúc, nêu tha 
mãn thì l i th$c thi thân vòng lap rôi quay l i... Tap lenh  thân vòng lap có the 
làm thay doi giá tr ca bieu th
c diêu kien t' 
 sang  (th$c chât là t' 
khác 0 sang bang 0) de d'ng vòng lap. 
Ví d, xét mot chơng trình có nhiem v dêm t' 1 dên mot ng4ng b
 cho 
trc. Do n mã dêm t' 1 dên b
 có the dc viêt nh sau:
=1; 
w
(
=b
)
,;
++; 
  
Gi s biên b
 có giá tr bang 2, do n mã trên ho t dong nh sau: Dâu tiên, 
biên
dc khi t o bang 1. Vòng while bat dâu bang viec kiem tra diêu 
kien (
=b
), nghia là 1 5 2, diêu kien tha mãn. Thân vòng lap 
dc th$c thi lân th
 nhât: giá tr 1 ca
dc in ra màn hình kèm theo 
dâu phy, sau dó
dc tang lên 2. Vòng lap quay vê diem xuât phát: kiem 
tra diêu kien lap, gi là 2 5 2, van tha mãn. Thân vòng lap dc ch y lân th
 
hai (in giá tr 2 ca
và tang
lên 3) trc khi quay l i diem xuât 
phát ca vòng lap. T i lân kiem tra diêu kien lap này, bieu th
c 3 5 2 cho giá tr 
, vòng lap kêt thúc do diêu kien lap không còn dc tha mãn, chơng 
trình ch y tiêp  lenh nam sau câu trúc w
 dang xét. 
Câu trúc w
 trong do n mã trên có the dc bieu dien bang sơ dô trong Hình 
3.6. Trong sơ dô, mui tên sau chuoi hành dong in biên
và tang biên
quay ngc tr l i diem kiem tra diêu kien re nhánh, chuoi hành dong se lap l i 
nêu diêu kien
=b
 van tiêp tc dc tha mãn. Còn nêu

Weitere ähnliche Inhalte

Was ist angesagt?

Lập trình hướng đối tượng với C++
Lập trình hướng đối tượng với C++Lập trình hướng đối tượng với C++
Lập trình hướng đối tượng với C++Trần Thiên Đại
 
36 Ke Nhan Hoa(Q2) 792
36 Ke Nhan Hoa(Q2)  79236 Ke Nhan Hoa(Q2)  792
36 Ke Nhan Hoa(Q2) 792bstuananh
 
36 Ke Nhan Hoa 2
36 Ke Nhan Hoa 236 Ke Nhan Hoa 2
36 Ke Nhan Hoa 2dungpv299
 
Lập trình sáng tạo creative computing textbook mastercode.vn
Lập trình sáng tạo creative computing textbook mastercode.vnLập trình sáng tạo creative computing textbook mastercode.vn
Lập trình sáng tạo creative computing textbook mastercode.vnMasterCode.vn
 
Giáo trình: quản lý chất lượng sản phẩm
Giáo trình: quản lý chất lượng sản phẩmGiáo trình: quản lý chất lượng sản phẩm
Giáo trình: quản lý chất lượng sản phẩmLe Nguyen Truong Giang
 
800 meo vat_trong_cuoc_song
800 meo vat_trong_cuoc_song800 meo vat_trong_cuoc_song
800 meo vat_trong_cuoc_songHung Pham Thai
 
36 Ke Nhan Hoa 1
36 Ke Nhan Hoa 136 Ke Nhan Hoa 1
36 Ke Nhan Hoa 1dungpv299
 
Thuyet minh tahaka- du an dau tu
Thuyet minh tahaka- du an dau tuThuyet minh tahaka- du an dau tu
Thuyet minh tahaka- du an dau tuMỵ Dương
 
thuyết minh đồ án thép 2
thuyết minh đồ án thép 2 thuyết minh đồ án thép 2
thuyết minh đồ án thép 2 Ho Ngoc Thuan
 
Huong dan do an chi tiet may sao đỏ
Huong dan do an chi tiet may sao đỏHuong dan do an chi tiet may sao đỏ
Huong dan do an chi tiet may sao đỏMạc Văn Giang
 
Giáo trình tin học đại cương đỗ thị mơ[bookbooming.com]
Giáo trình tin học đại cương   đỗ thị mơ[bookbooming.com]Giáo trình tin học đại cương   đỗ thị mơ[bookbooming.com]
Giáo trình tin học đại cương đỗ thị mơ[bookbooming.com]bookbooming1
 
Bài giảng-mạng-viễn-thông-2016
Bài giảng-mạng-viễn-thông-2016Bài giảng-mạng-viễn-thông-2016
Bài giảng-mạng-viễn-thông-2016Huynh MVT
 

Was ist angesagt? (18)

Lập trình hướng đối tượng với C++
Lập trình hướng đối tượng với C++Lập trình hướng đối tượng với C++
Lập trình hướng đối tượng với C++
 
36 Ke Nhan Hoa(Q2) 792
36 Ke Nhan Hoa(Q2)  79236 Ke Nhan Hoa(Q2)  792
36 Ke Nhan Hoa(Q2) 792
 
36 Ke Nhan Hoa 2
36 Ke Nhan Hoa 236 Ke Nhan Hoa 2
36 Ke Nhan Hoa 2
 
Ngôn ngữ lập trình C#
Ngôn ngữ lập trình C#Ngôn ngữ lập trình C#
Ngôn ngữ lập trình C#
 
Lập trình sáng tạo creative computing textbook mastercode.vn
Lập trình sáng tạo creative computing textbook mastercode.vnLập trình sáng tạo creative computing textbook mastercode.vn
Lập trình sáng tạo creative computing textbook mastercode.vn
 
Giáo trình: quản lý chất lượng sản phẩm
Giáo trình: quản lý chất lượng sản phẩmGiáo trình: quản lý chất lượng sản phẩm
Giáo trình: quản lý chất lượng sản phẩm
 
800 meo vat_trong_cuoc_song
800 meo vat_trong_cuoc_song800 meo vat_trong_cuoc_song
800 meo vat_trong_cuoc_song
 
Đề tài: Tải trọng động do gió và động đất tác dụng lên nhà cao tầng
Đề tài: Tải trọng động do gió và động đất tác dụng lên nhà cao tầngĐề tài: Tải trọng động do gió và động đất tác dụng lên nhà cao tầng
Đề tài: Tải trọng động do gió và động đất tác dụng lên nhà cao tầng
 
36 Ke Nhan Hoa 1
36 Ke Nhan Hoa 136 Ke Nhan Hoa 1
36 Ke Nhan Hoa 1
 
36.Ke.Nhan.Hoa
36.Ke.Nhan.Hoa36.Ke.Nhan.Hoa
36.Ke.Nhan.Hoa
 
Thuyet minh tahaka- du an dau tu
Thuyet minh tahaka- du an dau tuThuyet minh tahaka- du an dau tu
Thuyet minh tahaka- du an dau tu
 
thuyết minh đồ án thép 2
thuyết minh đồ án thép 2 thuyết minh đồ án thép 2
thuyết minh đồ án thép 2
 
Huong dan do an chi tiet may sao đỏ
Huong dan do an chi tiet may sao đỏHuong dan do an chi tiet may sao đỏ
Huong dan do an chi tiet may sao đỏ
 
Giao trinh ngon ngu lap trinh c#
Giao trinh ngon ngu lap trinh c#Giao trinh ngon ngu lap trinh c#
Giao trinh ngon ngu lap trinh c#
 
Giáo trình tin học đại cương đỗ thị mơ[bookbooming.com]
Giáo trình tin học đại cương   đỗ thị mơ[bookbooming.com]Giáo trình tin học đại cương   đỗ thị mơ[bookbooming.com]
Giáo trình tin học đại cương đỗ thị mơ[bookbooming.com]
 
Bài giảng-mạng-viễn-thông-2016
Bài giảng-mạng-viễn-thông-2016Bài giảng-mạng-viễn-thông-2016
Bài giảng-mạng-viễn-thông-2016
 
Đề tài: So sánh tiêu chuẩn tính toán tải trọng gió theo TCVN, HAY
Đề tài: So sánh tiêu chuẩn tính toán tải trọng gió theo TCVN, HAYĐề tài: So sánh tiêu chuẩn tính toán tải trọng gió theo TCVN, HAY
Đề tài: So sánh tiêu chuẩn tính toán tải trọng gió theo TCVN, HAY
 
Basics Of Document Processing
Basics Of Document ProcessingBasics Of Document Processing
Basics Of Document Processing
 

Ähnlich wie C++ 2011 april_draft

36 Ke Nhan Hoa(Q1) 791
36 Ke Nhan Hoa(Q1) 79136 Ke Nhan Hoa(Q1) 791
36 Ke Nhan Hoa(Q1) 791bstuananh
 
Li thuyet dieu khien tu dong
Li thuyet dieu khien tu dongLi thuyet dieu khien tu dong
Li thuyet dieu khien tu dongengineertrongbk
 
Mô hình điều khiển
Mô hình điều khiểnMô hình điều khiển
Mô hình điều khiểnDv Dv
 
Giaotrinhautocad2004pdf
Giaotrinhautocad2004pdfGiaotrinhautocad2004pdf
Giaotrinhautocad2004pdfArc Nguyen
 
Thiết kế hệ điều khiển và giám sát cho hệ thống cung cấp điện cho nhà máy Đạm...
Thiết kế hệ điều khiển và giám sát cho hệ thống cung cấp điện cho nhà máy Đạm...Thiết kế hệ điều khiển và giám sát cho hệ thống cung cấp điện cho nhà máy Đạm...
Thiết kế hệ điều khiển và giám sát cho hệ thống cung cấp điện cho nhà máy Đạm...Man_Ebook
 
Thuyet minh datn hoang cao khai - 373052 - 52cb1
Thuyet minh datn   hoang cao khai - 373052 - 52cb1Thuyet minh datn   hoang cao khai - 373052 - 52cb1
Thuyet minh datn hoang cao khai - 373052 - 52cb1luuguxd
 
DATN K52
DATN K52DATN K52
DATN K52luuguxd
 
F:\Lehuuhien\Tai Lieu Giao Tiep Kinh Doanh\Business Communication Skills
F:\Lehuuhien\Tai Lieu Giao Tiep Kinh Doanh\Business Communication SkillsF:\Lehuuhien\Tai Lieu Giao Tiep Kinh Doanh\Business Communication Skills
F:\Lehuuhien\Tai Lieu Giao Tiep Kinh Doanh\Business Communication Skillslehuuhien99
 
Xây dựng Robot tự hành dạng Nonholonomic và tổng hợp bộ điều khiển bám quỹ đạo
Xây dựng Robot tự hành dạng Nonholonomic và tổng hợp bộ điều khiển bám quỹ đạoXây dựng Robot tự hành dạng Nonholonomic và tổng hợp bộ điều khiển bám quỹ đạo
Xây dựng Robot tự hành dạng Nonholonomic và tổng hợp bộ điều khiển bám quỹ đạoMan_Ebook
 
Nghiên cứu ảnh hưởng của một số thông số ĐLH tới độ bền trục các đăng xe tải ...
Nghiên cứu ảnh hưởng của một số thông số ĐLH tới độ bền trục các đăng xe tải ...Nghiên cứu ảnh hưởng của một số thông số ĐLH tới độ bền trục các đăng xe tải ...
Nghiên cứu ảnh hưởng của một số thông số ĐLH tới độ bền trục các đăng xe tải ...KhoTi1
 
Dgthcv Bctttn Anh Nguyet
Dgthcv Bctttn Anh NguyetDgthcv Bctttn Anh Nguyet
Dgthcv Bctttn Anh NguyetÁnh Nguyệt
 
hoccokhi.vn Lý Thuyết Điều Khiển Tự Động - Nhiều Tác Giả, 79 Trang
hoccokhi.vn Lý Thuyết Điều Khiển Tự Động - Nhiều Tác Giả, 79 Tranghoccokhi.vn Lý Thuyết Điều Khiển Tự Động - Nhiều Tác Giả, 79 Trang
hoccokhi.vn Lý Thuyết Điều Khiển Tự Động - Nhiều Tác Giả, 79 TrangHọc Cơ Khí
 

Ähnlich wie C++ 2011 april_draft (20)

Computer Basics
Computer BasicsComputer Basics
Computer Basics
 
36.ke.nhan hoa1
36.ke.nhan hoa136.ke.nhan hoa1
36.ke.nhan hoa1
 
36 Kế nhân hòa (1)
36 Kế nhân hòa (1)36 Kế nhân hòa (1)
36 Kế nhân hòa (1)
 
36 Ke Nhan Hoa(Q1) 791
36 Ke Nhan Hoa(Q1) 79136 Ke Nhan Hoa(Q1) 791
36 Ke Nhan Hoa(Q1) 791
 
Li thuyet dieu khien tu dong
Li thuyet dieu khien tu dongLi thuyet dieu khien tu dong
Li thuyet dieu khien tu dong
 
Mô hình điều khiển
Mô hình điều khiểnMô hình điều khiển
Mô hình điều khiển
 
Giaotrinhautocad2004pdf
Giaotrinhautocad2004pdfGiaotrinhautocad2004pdf
Giaotrinhautocad2004pdf
 
Thiết kế hệ điều khiển và giám sát cho hệ thống cung cấp điện cho nhà máy Đạm...
Thiết kế hệ điều khiển và giám sát cho hệ thống cung cấp điện cho nhà máy Đạm...Thiết kế hệ điều khiển và giám sát cho hệ thống cung cấp điện cho nhà máy Đạm...
Thiết kế hệ điều khiển và giám sát cho hệ thống cung cấp điện cho nhà máy Đạm...
 
Thuyet minh datn hoang cao khai - 373052 - 52cb1
Thuyet minh datn   hoang cao khai - 373052 - 52cb1Thuyet minh datn   hoang cao khai - 373052 - 52cb1
Thuyet minh datn hoang cao khai - 373052 - 52cb1
 
DATN K52
DATN K52DATN K52
DATN K52
 
F:\Lehuuhien\Tai Lieu Giao Tiep Kinh Doanh\Business Communication Skills
F:\Lehuuhien\Tai Lieu Giao Tiep Kinh Doanh\Business Communication SkillsF:\Lehuuhien\Tai Lieu Giao Tiep Kinh Doanh\Business Communication Skills
F:\Lehuuhien\Tai Lieu Giao Tiep Kinh Doanh\Business Communication Skills
 
Xây dựng Robot tự hành dạng Nonholonomic và tổng hợp bộ điều khiển bám quỹ đạo
Xây dựng Robot tự hành dạng Nonholonomic và tổng hợp bộ điều khiển bám quỹ đạoXây dựng Robot tự hành dạng Nonholonomic và tổng hợp bộ điều khiển bám quỹ đạo
Xây dựng Robot tự hành dạng Nonholonomic và tổng hợp bộ điều khiển bám quỹ đạo
 
Nghiên cứu ảnh hưởng của một số thông số ĐLH tới độ bền trục các đăng xe tải ...
Nghiên cứu ảnh hưởng của một số thông số ĐLH tới độ bền trục các đăng xe tải ...Nghiên cứu ảnh hưởng của một số thông số ĐLH tới độ bền trục các đăng xe tải ...
Nghiên cứu ảnh hưởng của một số thông số ĐLH tới độ bền trục các đăng xe tải ...
 
56251639 bao-dam-chat-luong-pm
56251639 bao-dam-chat-luong-pm56251639 bao-dam-chat-luong-pm
56251639 bao-dam-chat-luong-pm
 
36.ke.nhan.hoa
36.ke.nhan.hoa36.ke.nhan.hoa
36.ke.nhan.hoa
 
36 Kế Nhân Hoà
36 Kế  Nhân Hoà 36 Kế  Nhân Hoà
36 Kế Nhân Hoà
 
Dgthcv Bctttn Anh Nguyet
Dgthcv Bctttn Anh NguyetDgthcv Bctttn Anh Nguyet
Dgthcv Bctttn Anh Nguyet
 
Tai lieu huong_dan_microsoft_word_2010
Tai lieu huong_dan_microsoft_word_2010Tai lieu huong_dan_microsoft_word_2010
Tai lieu huong_dan_microsoft_word_2010
 
hoccokhi.vn Lý Thuyết Điều Khiển Tự Động - Nhiều Tác Giả, 79 Trang
hoccokhi.vn Lý Thuyết Điều Khiển Tự Động - Nhiều Tác Giả, 79 Tranghoccokhi.vn Lý Thuyết Điều Khiển Tự Động - Nhiều Tác Giả, 79 Trang
hoccokhi.vn Lý Thuyết Điều Khiển Tự Động - Nhiều Tác Giả, 79 Trang
 
36 Kế nhân hòa (2)
36 Kế nhân hòa (2)36 Kế nhân hòa (2)
36 Kế nhân hòa (2)
 

Mehr von Trần Văn Nam

Mehr von Trần Văn Nam (20)

Tut6 solution
Tut6 solutionTut6 solution
Tut6 solution
 
Tut6
Tut6Tut6
Tut6
 
Tut5 solution
Tut5 solutionTut5 solution
Tut5 solution
 
Tut4 solution
Tut4 solutionTut4 solution
Tut4 solution
 
Tn ktlt
Tn ktltTn ktlt
Tn ktlt
 
Pointer
PointerPointer
Pointer
 
Stl string
Stl stringStl string
Stl string
 
Phan 2 chuong 8 (chuoi ky tu)
Phan 2   chuong 8 (chuoi ky tu)Phan 2   chuong 8 (chuoi ky tu)
Phan 2 chuong 8 (chuoi ky tu)
 
Phan 2 chuong 9 (cau truc)
Phan 2   chuong 9 (cau truc)Phan 2   chuong 9 (cau truc)
Phan 2 chuong 9 (cau truc)
 
Phan 2 chuong 10 (tap tin)
Phan 2   chuong 10 (tap tin)Phan 2   chuong 10 (tap tin)
Phan 2 chuong 10 (tap tin)
 
Lect09 string
Lect09 stringLect09 string
Lect09 string
 
Hướng dẫn làm bt về chuỗi.doc
Hướng dẫn làm bt về chuỗi.docHướng dẫn làm bt về chuỗi.doc
Hướng dẫn làm bt về chuỗi.doc
 
Ktlt lab full
Ktlt lab fullKtlt lab full
Ktlt lab full
 
Lab4
Lab4Lab4
Lab4
 
Local sakainame 501127 ktl_trình hlmt1 a01 fall 2013 _ modules
Local sakainame   501127 ktl_trình hlmt1 a01 fall 2013 _ modulesLocal sakainame   501127 ktl_trình hlmt1 a01 fall 2013 _ modules
Local sakainame 501127 ktl_trình hlmt1 a01 fall 2013 _ modules
 
Lect05 array
Lect05 arrayLect05 array
Lect05 array
 
Huong dan thao_tac_file
Huong dan thao_tac_fileHuong dan thao_tac_file
Huong dan thao_tac_file
 
Cam bien gia toc
Cam bien gia tocCam bien gia toc
Cam bien gia toc
 
Bai tap c
Bai tap cBai tap c
Bai tap c
 
Giáo trình cấu trúc dữ liệu và giải thuật phần 1 tài liệu, ebook, giáo trình
Giáo trình cấu trúc dữ liệu và giải thuật phần 1   tài liệu, ebook, giáo trìnhGiáo trình cấu trúc dữ liệu và giải thuật phần 1   tài liệu, ebook, giáo trình
Giáo trình cấu trúc dữ liệu và giải thuật phần 1 tài liệu, ebook, giáo trình
 

C++ 2011 april_draft

  • 1. Mc lc Gii thieu...........................................................................................................6 Chơng 1. M dâu .........................................................................................8 1.1. Chơng trình là gì?.............................................................................8 1.2. Lap trình là gì? ...................................................................................8 1.2.1. M c cao doc lap vi máy tính ......................................................8 1.2.2. M c thâp ph thuoc vào máy tính ..............................................10 1.3. Ngôn ng lap trình và chơng trình dch ..........................................10 1.4. Môi trng lap trình bac cao.............................................................11 1.5. Loi và tìm loi ....................................................................................13 1.6. Lch s C và C++ .............................................................................14 1.7. Chơng trình C++ dâu tiên ...............................................................15 Bài tap .........................................................................................................19 Chơng 2. Biên, kieu d lieu và các phép toán ............................................20 2.1. Kieu d lieu......................................................................................22 2.1.1. Kieu d lieu cơ bn ....................................................................22 2.1.2. Kieu d lieu dan xuât .................................................................24 2.2. Khai báo và s dng biên .................................................................24 2.2.1. Dnh danh và cách dat tên biên...................................................24 2.2.2. Khai báo biên .............................................................................25 2.3. Hang.................................................................................................25 2.4. Các phép toán cơ bn........................................................................26 2.4.1. Phép gán.....................................................................................26 2.4.2. Các phép toán sô hc..................................................................26 2.4.3. Các phép toán quan he................................................................27 1
  • 2. 2.4.4. Các phép toán lô-gic...................................................................28 2.4.5. Do u tiên ca các phép toán......................................................28 2.4.6. Tơng thích gi a các kieu ..........................................................29 Bài tap .........................................................................................................30 Chơng 3. Các câu trúc diêu khien ..............................................................32 3.1. Luông diêu khien..............................................................................32 3.2. Các câu trúc re nhánh .......................................................................33 3.2.1. Lenh if-else ...........................................................................33 3.2.2. Lenh switch .............................................................................39 3.3. Các câu trúc lap ................................................................................43 3.3.1. Vòng while...............................................................................43 3.3.2. Vòng do-while ........................................................................46 3.3.3. Vòng for ...................................................................................49 3.4. Các lenh break và continue .........................................................54 3.5. Bieu th c diêu kien trong các câu trúc diêu khien.............................57 Bài tap .........................................................................................................59 Chơng 4. Hàm............................................................................................61 4.1. Các hàm có san.................................................................................62 4.2. Câu trúc chung ca hàm ...................................................................63 4.3. Cách s dng hàm............................................................................64 4.4. Biên toàn cc và biên da phơng.....................................................65 4.4.1. Ph m vi ca biên ........................................................................65 4.4.2. Thi gian sông ca biên..............................................................67 4.5. Tham sô, dôi sô, và cơ chê truyên tham sô cho hàm.........................68 4.5.1. Truyên giá tr..............................................................................68 2
  • 3. 4.5.2. Truyên tham chiêu......................................................................69 4.5.3. Tham sô mac dnh ......................................................................72 4.6. Hàm trùng tên...................................................................................74 4.7. Hàm de quy ......................................................................................76 Bài tap .........................................................................................................78 Chơng 5. Mng ..........................................................................................80 5.1. Mng mot chiêu................................................................................80 5.1.1. Khai báo và khi t o mng .........................................................81 5.1.2. !ng dng ca mng ...................................................................83 5.1.3. Trách nhiem kiem soát tính hp le ca ch# sô mng....................85 5.1.4. Mng làm tham sô cho hàm........................................................85 5.2. Mng nhiêu chiêu .............................................................................86 5.3. Mng và xâu kí t$.............................................................................88 5.3.1. Khi t o giá tr cho xâu kí t$......................................................90 5.3.2. Th vien x lý xâu kí t$ .............................................................90 5.4. Tìm kiêm và sap xêp d lieu trong mng ..........................................91 5.4.1. Tìm kiêm tuyên tính ...................................................................91 5.4.2. Tìm kiêm nh phân .....................................................................92 5.4.3. Sap xêp chn ..............................................................................94 Bài tap .........................................................................................................96 Chơng 6. Con tr và bo nh.......................................................................99 6.1. Bo nh máy tính ...............................................................................99 6.2. Biên và da ch# ca biên....................................................................99 6.3. Biên con tr ....................................................................................100 6.4. Mng và con tr..............................................................................105 3
  • 4. 6.5. Bo nh dong ...................................................................................107 6.5.1. Câp phát bo nh dong...............................................................107 6.5.2. Gii phóng bo nh dong ...........................................................108 6.6. Mng dong và con tr.....................................................................109 6.7. Truyên tham sô là con tr ...............................................................111 Bài tap .......................................................................................................115 Chơng 7. Các kieu d lieu tr'u tng ......................................................118 7.1. Dnh nghia kieu d lieu tr'u tng bang câu trúc struct .................118 7.2. Dnh nghia kieu d lieu tr'u tng bang câu trúc class ...............124 7.2.1. Quyên truy nhap.......................................................................127 7.2.2. Toán t ph m vi và dnh nghia các hàm thành viên ..................128 7.2.3. Hàm khi t o và hàm hy.........................................................129 7.3. Li ích ca lap trình hng dôi tng.............................................132 7.4. Biên dch riêng re ...........................................................................133 Bài tap .......................................................................................................137 Chơng 8. Vào ra d lieu...........................................................................140 8.1. Khái niem dòng d lieu ..................................................................140 8.2. Tep van bn và tep nh phân ...........................................................141 8.3. Vào ra tep .......................................................................................141 8.3.1. M tep......................................................................................142 8.3.2. Dóng tep...................................................................................143 8.3.3. X lý tep van bn .....................................................................144 8.3.4. X lý tep nh phân....................................................................147 Bài tap .......................................................................................................151 Ph lc A. Phong cách lap trình .................................................................153 4
  • 5. Ph lc B. Dch chơng trình C++ bang GNU C++...................................157 Ph lc C. X lý xâu bang th vien cstring................................................160 Tài lieu tham kho .........................................................................................162 5
  • 6. 6 Gii thieu Lap trình là mot trong nh ng bc quan trng nhât trong quy trình gii quyêt mot bài toán. Nhiêu ngôn ng lap trình dã dc ra di nham giúp chúng ta gii quyêt các bài toán mot cách hieu qu nhât. Moi ngôn ng lap trình có nh ng thê m nh và nhc diem riêng. Các ngôn ng lap trình có the chia ra thành hai lo i chính là ngôn ng lap trình bac thâp (gân gui vi ngôn ng máy), và ngôn ng lap trình bac cao (ngân gui vi ngôn ng t$ nhiên ca con ngi). Giáo trình này trang b cho sinh viên nh ng kiên th c cơ bn vê lap trình. Ngôn ng lap trình C++ dc s dng de minh ha cho viec lap trình. Viec l$a chn C++ bi vì nó là mot ngôn ng lap trình hng dôi tng chuyên nghiep dc s dng rong rãi trên toàn thê gii de phát trien các chơng trình t' dơn gin dên ph c t p. Hơn thê n a, s$ mêm d+o ca C++ cho phép chúng ta gii quyêt nh ng bài toán th$c tê mot cách nhanh chóng, ngoài ra cho phép chúng ta qun lý và tơng tác tr$c tiêp dên he thông, bo nh de nâng cao hieu qu ca chơng trình. Giáo trình dc chia thành 8 chơng, moi chơng trình bày mot vân dê lý thuyêt trong lap trình. Các vân dê lý thuyêt dc mô t bang các ví d th$c tê. Kêt thúc moi chơng là phân bài tap de sinh viên gii quyêt và nam rõ hơn vê lý thuyêt. Câu trúc ca giáo trình nh sau: • Chơng 1: gii thieu các khái niem cơ bn vê lap trình và quy trình gii quyêt mot bài toán. Sinh viên se hieu vê ngôn ng lap trình bac cao và ngôn ng lap trình bac thâp. Cuôi chơng chúng tôi gii thieu vê môi trng lap trình cung nh ngôn ng lap trình C++. • Chơng 2: Chúng tôi gii thieu các khái niem cơ bn vê biên sô, hang sô, các kieu d lieu cơ bn và các phép toán cơ bn. Sau khi hc, sinh viên se biêt cách khai báo và s dng biên sô, hang sô, và các phép toán trên biên và hang sô. • Chơng 3: Trơng này gii thieu vê câu trúc chơng trình cung nh các câu trúc diêu khien. C the là các câu re nhánh (if-else, switch), câu trúc lap (for, while, do-while) se dc gii thieu. • Chơng 4: Chơng trình con và hàm se dc gii thieu de sinh viên hieu dc chiên lc lap trình “chia de tr”. Chúng tôi se trình bày chi tiêt vê
  • 7. cách khai báo và s dng hàm, cung nh cách truyên tham sô, truyên giá tr cho hàm. • Chơng 5: Chơng này trình bày câu trúc d lieu kieu mng và xâu kí t$. Cách khai báo và s dng mng mot chiêu cung nh mng nhiêu chiêu và ví d liên quan dc trình bày chi tiêt chơng này. • Chơng 6: Dây là mot chơng tơng dôi dac thù cho C++, khi chúng tôi trình bày vê bo nh và kieu d lieu con tr. Câu trúc bo nh, cách qun lý và xin câp phép bo nh dong thông qua viec s dng biên con tr se dc trình bày. • Chơng 7: Trong chơng này chúng tôi se trình bày vê câu trúc d lieu tr'u tng (c the là struct và class trong C++). Sinh viên se hieu và biêt cách t o ra nh ng câu trúc d lieu tr'u tng phù hp vi các kieu dôi tng d lieu cân bieu dien. Cuôi chơng, chúng tôi cung gii thieu vê lap trình hng dôi tng, mot thê m nh ca ngôn ng lap trình C++. • Chơng 8: Chúng tôi gii thieu vê cách vào ra d lieu. Sinh viên se dc gii thieu chi tiêt vê cách làm viec vi các tep d lieu. 7
  • 8. 8 Chơng 1. M dâu Trong chơng này, chúng tôi se gii thieu qua mot sô khái niem cơ bn vê: chơng trình, lap trình, ngôn ng lap trình. 1.1. Chơng trình là gì? B n chac chan dã dùng qua nhiêu chơng trình khác nhau, ví d nh chơng trình so n tho van bn “Microsoft Word”. Chơng trình, hay phân mêm, dc hieu dơn gin là mot tap các lenh de máy tính th$c hien theo. Khi b n da cho máy tính mot chơng trình và yêu câu máy tính th$c hien theo các lenh ca chơng trình, b n dang ch y chơng trình dó. 1.2. Lap trình là gì? Lap trình là có the hieu dơn gin là quá trình viêt ra các lenh hng dan máy tính th$c hien de gii quyêt mot bài toán c the nào dó. Lap trình là mot bc quan trng trong quy trình gii quyêt mot bài toán nh mô t Hình 1.1. bút/giây bút/giây trình son tho chng trình dch Hình 1.1: Quy trình gii quyêt mot bài toán. Quy trình trên có the dc chia ra thành hai m c: m c cao doc lap vi máy tính (machine independent) và m c thâp ph thuoc vào máy tính (machine specific). 1.2.1. M c cao doc lap vi máy tính M c cao doc lap vi máy tính thng dc chia thành ba bc chính là: xác dnh vân dê, thiêt kê thuat toán và lap trình.
  • 9. Xác dnh vân dê: Bc này dnh nghia bài toán, xác dnh d lieu dâu vào, các ràng buoc, yêu câu cân gii quyêt và kêt qu dâu ra. Bc này thng s dng bút/giây và ngôn ng t$ nhiên nh tiêng Anh, tiêng Viet de mô t và xác dnh vân dê cân gii quyêt. Thiêt kê thuat toán: Mot thuat toán là mot bo các ch# dan nham gii quyêt mot bài toán. Các ch# dan này cân dc dien d t mot cách hoàn ch#nh và chính xác sao cho mi ngi có the hieu và tiên hành theo. Thuat toán thng dc mô t di d ng mã gi (pseudocode). Bc này có the s dng giây bút và thng không ph thuoc vào ngôn ng lap trình. Ví d vê thuat toán “tìm c sô chung ln nhât (UCLN) ca hai sô x và y” viêt bang ngôn ng t$ nhiên: • Bc 1: Nêu xy thì thay x bang phân d ca phép chia x/y. • Bc 2: Nêu không, thay y bang phân d ca phép chia y/x. • Bc 3: Nêu trong hai sô x và y có mot sô bang 0 thì kêt luan UCLN 9 là sô còn l i. • Bc 4: Nêu không, quay l i Bc 1. hoac bang mã gi: repeat if x y then x := x mod y else y := y mod x until x = 0 or y = 0 if x = 0 then UCLN := y else UCLN := x Lap trình là bc chuyen doi thuat toán sang mot ngôn ng lap trình, pho biên là các ngôn ng lap trình bac cao, ví d nh các ngôn ng C++, Java. Bc này, lap trình viên s dng mot chơng trình so n tho van bn de viêt chơng trình. Trong và sau quá trình lap trình, ngi ta phi tiên hành kiem th và sa loi chơng trình. Có ba lo i loi thng gap: loi cú pháp, loi trong thi gian ch y, và loi lô-gic (xem chi tiêt Mc 1.5).
  • 10. 1.2.2. M c thâp ph thuoc vào máy tính Các ngôn ng lap trình bac cao, ví d nh C, C++, Java, Visual Basic, C#, dc thiêt kê de con ngi tơng dôi de hieu và de s dng. Tuy nhiên, máy tính không hieu dc các ngôn ng bac cao. Do dó, trc khi mot chơng trình viêt bang ngôn ng bac cao có the ch y dc, nó phi dc dch sang ngôn ng máy, hay còn gi là mã máy, mà máy tính có the hieu và th$c hien dc. Viec dch dó dc th$c hien bi mot chơng trình máy tính gi là chơng trình dch. 1.3. Ngôn ng lap trình và chơng trình dch Nh chúng ta thây, quá trình gii quyêt mot bài toán thông qua các bc khác nhau de chuyen doi t' ngôn ng t$ nhiên mà con ngi hieu dc sang ngôn ng máy mà máy tính có the hieu và th$c hien dc. Ngôn ng lap trình thng dc chia ra thành hai lo i: ngôn ng lap trình bac thâp và ngôn ng lap trình bac cao. Ngôn ng lap trình bac thâp nh hp ng (assembly language) hoac mã máy là ngôn ng gân vi ngôn ng máy mà máy tính có the hieu dc. Dac diem chính ca các ngôn ng này là chúng có liên quan chat che dên phân c ng ca máy tính. Các h máy tính khác nhau s dng các ngôn ng khác nhau. Chơng trình viêt bang các ngôn ng này có the ch y mà không cân qua chơng trình dch. Các ngôn ng bac thâp có the dùng de viêt nh ng chơng trình cân tôi u hóa vê tôc do. Tuy nhiên, chúng thng khó hieu dôi vi con ngi và không thuan tien cho viec lap trình. Ngôn ng lap trình bac cao nh Pascal, Ada, C, C++, Java, Visual Basic, Python, … là các ngôn ng có m c do tr'u tng hóa cao, gân vi ngôn ng t$ nhiên ca con ngi hơn. Viec s dng các ngôn ng này cho viec lap trình do dó de dàng hơn và nhanh hơn rât nhiêu so vi ngôn ng lap trình bac thâp. Khác vi ngôn ng bac thâp, chơng trình viêt bang các ngôn ng bac cao nói chung có the s dng dc trên nhiêu lo i máy tính khác nhau. Các chơng trình viêt bang mot ngôn ng bac cao muôn ch y dc thì phi dc dch sang ngôn ng máy bang cách s dng chơng trình dch. Chơng trình dch có the chia ra thành hai lo i là trình biên dch và trình thông dch. Mot sô ngôn ng bac cao nh C, C++ yêu câu lo i chơng trình dch dc gi là trình biên dch (compiler). Trình biên dch dch mã nguôn thành mã máy – d ng có the th$c thi dc. Kêt qu ca viec dch là mot chơng trình th$c thi dc và có the ch y nhiêu lân mà không cân dch l i. Ví d, vi ngôn ng C++ 10
  • 11. mot trình biên dch rât pho biên là gcc/g++ trong bo GNU Compiler Collection (GCC) ch y trong các môi trng Unix/Linux cung nh Windows. Ngoài ra, Microsoft Visual C++ là trình biên dch C++ pho biên nhât trong môi trng Windows. Mot sô ngôn ng bac cao khác nh Perl, Python yêu câu lo i chơng trình dch gi là trình thông dch (interpreter). Khác vi trình biên dch, thay vì dch toàn bo chơng trình mot lân, trình thông dch v'a dch v'a ch y chơng trình, dch dên dâu ch y chơng trình dên dó. Trong môn hc này, C++ dc chn làm ngôn ng the hien. Dây là mot trong nh ng ngôn ng lap trình chuyên nghiep dc s dng rong rãi nhât trên thê gii. Trong ph m vi nhap môn ca môn hc này, C++ ch# dc gii thieu m c rât cơ bn, rât nhiêu tính nang m nh ca C++ se không dc nói dên hoac ch# dc gii thieu sơ qua. Ngi hc nên tiêp tc tìm hieu vê ngôn ng C++, vt ra ngoài gii h n ca cuôn sách này. 1.4. Môi trng lap trình bac cao De lap trình gii quyêt mot bài toán bang ngôn ng lap trình bac cao, b n cân có công c chính là: chơng trình so n tho, chơng trình dch dành cho ngôn ng s dng, và các th vien chuan ca ngôn ng s dng (standard library), và chơng trình tìm loi (debugger). Các bc cơ bn de xây d$ng và th$c hien mot chơng trình: 1. Son tho: Mã nguôn chơng trình dc viêt bang mot phân mêm so n tho van bn d ng text và lu trên o dia. Ta có the dùng nh ng phân mêm so n tho van bn dơn gin nhât nh Notepad (trong môi trng Windows) hay vi (trong môi trng Unix/Linux), hoac các công c so n tho trong môi trng tích hp de viêt mã nguôn chơng trình. Mã nguôn C++ thng dat trong các tep vi tên có phân m rong là .cpp, cxx, .cc, hoac .C (viêt hoa). 2. Dch: Dùng trình biên dch dch mã nguôn chơng trình ra thành các do n mã máy riêng l+ (gi là “object code”) lu trên o dia. Các trình biên dch pho biên cho C++ là vc.exe trong bo Microsoft Visual Studio hay gcc trong bo GNU Compiler vi các tham sô thích hp de dch và liên kêt de t o ra tep ch y dc. Vi C++, ngay trc khi dch còn có giai do n tiên x lý (preprocessing) khi các dnh hng tiên x lý dc th$c thi de làm các thao tác nh bo sung các tep van bn cân dch hay thay thê mot sô chuoi van bn. Mot sô dnh hng tiên x lý quan trng se dc gii thieu dân trong cuôn sách này. 11
  • 12. 3. Liên kêt: Mot tep mã nguôn thng không ch a dây d nh ng phân cân thiêt cho mot chơng trình hoàn ch#nh. Nó thng dùng dên d lieu hoac hàm dc dnh nghia trong các tep khác hoac trong th vien chuan. Trình liên kêt (linker) kêt nôi các do n mã máy riêng l+ vi nhau và vi các th vien có san de t o ra mot chơng trình mã máy hoàn ch#nh ch y dc. 4. Np: Trình n p (loader) se n p chơng trình di d ng mã máy vào bo nh. Các thành phân bo sung t' th vien cung dc n p vào bo nh. 5. Chy: CPU nhan và th$c hien lân lt các lenh ca chơng trình, d lieu và kêt qu thng dc ghi ra màn hình hoac o dia. Thng thì không phi chơng trình nào cung ch y dc và ch y dúng ngay lân ch y th dâu tiên. Chơng trình có the có loi cú pháp nên không qua dc bc dch, hoac chơng trình dch dc nhng gap loi trong khi ch y. Trong nh ng trng hp dó, lap trình viên phi quay l i bc so n tho de sa loi và th$c hien l i các bc sau dó. Hình 1.2: Các bc cơ bn de xây d ng mot chơng trình. De thuan tien cho viec lap trình, các công c so n tho, dch, liên kêt, ch y... nói trên dc kêt hp l i trong mot môi trng lap trình tích hp (IDE – integrated development environment), trong dó, tât c các công do n dôi vi ngi dùng ch# còn là viec ch y các tính nang trong mot phân mêm duy nhât. IDE rât h u ích cho các lap trình viên. Tuy nhiên, dôi vi nh ng ngi mi hc lap trình, thi gian dâu nên t$ th$c hien các bc dch và ch y chơng trình thay vì thông qua các ch c nang ca IDE. Nh vay, ngi hc se có the nam dc bn chât các bc ca quá trình xây d$ng chơng trình, hieu dc bn 12
  • 13. chât và dac diem chung ca các IDE, tránh tình tr ng b ph thuoc vào mot IDE c the. Ví d vê các IDE pho biên là Microsoft Visual Studio – môi trng lap trình thơng m i cho môi trng Windows, và Eclipse – phân mêm mien phí vi các phiên bn cho c môi trng Windows cung nh Unix/Linux, c hai dêu ho tr nhiêu ngôn ng lap trình. Dành cho C++, mot sô môi trng lap trình tích hp pho biên là Microsoft Visual Studio, Dev-C++, Code::Blocks, KDevelop. Moi môi trng có the ho tr mot hoac nhiêu trình biên dch. Chang h n Code::Blocks ho tr c GCC và MSVC Do C++ có các phiên bn khác nhau. Có nh ng bn cài dat khác nhau ca C++. Các bn ra di trc chuan C++ 1998 (ISO/IEC 14882) có the không ho tr dây d các tính nang dc dac t trong chuan ANSI/ISO 1998. Bn C++ do Microsoft phát trien khác vi bn C++ ca GNU. Tuy nhiên, các trình biên dch hien d i hâu hêt ho tr C++ chuan, ta cung nên chn dùng các phân mêm này. Ngôn ng C++ dc dùng trong cuôn sách này tuân theo chuan ISO/IEC 14882, còn gi là C++ thuân túy (pure C++). 1.5. Loi và tìm loi Trong và sau quá trình lap trình, chúng ta phi tiên hành kiem th và sa loi chơng trình. Có ba lo i loi thng gap: loi cú pháp, loi run-time và loi lô-gic. Loi cú pháp là do lap trình viên viêt sai vi các quy tac cú pháp ca ngôn ng lap trình, chang h n thiêu dâu châm phy cuôi lenh. Chơng trình biên dch se phát hien ra các loi cú pháp và cung câp thông báo vê v trí mà nó cho là có loi. Nêu trình biên dch nói rang chơng trình có loi cú pháp thì chac chan là có loi cú pháp trong chơng trình. Tuy nhiên, loi là cho nào thì trình biên dch ch# có the doán, và nó có the doán sai. Loi run-time là loi xuât hien trong khi chơng trình dang ch y. Loi d ng này se gây ra thông báo loi và ng'ng chơng trình. Ví d là khi chơng trình th$c hien phép chia cho 0. Loi lô-gic có nguyên nhân là do thuat toán không dúng, hoac do lap trình viên gap sai sót khi the hien thuat toán bang ngôn ng lap trình (ví d viêt nhâm dâu cong thành dâu tr'). Khi có loi lô-gic, chơng trình ca b n có the dch và ch y bình thng, nhng kêt qu ca chơng trình da ra l i có trng hp sai hoac 13
  • 14. ho t dong ca chơng trình không nh mong di. Loi lô-gic là lo i loi khó tìm ra nhât. Nêu chơng trình ca b n dch và ch y không phát sinh thông báo loi, tham chí chơng trình cho ra kêt qu có dúng vi mot vài bo d lieu test, diêu dó không có nghia chơng trình ca b n hoàn toàn không có loi. De có the chac chan hơn vê tính dúng dan ca chơng trình, b n cân ch y th chơng trình vi nhiêu bo d lieu khác nhau và so sánh kêt qu mà chơng trình t o ra vi kêt qu mong di. 1.6. Lch s C và C++ Ngôn ng lap trình C dc t o ra bi Dennis Ritchie (phòng thí nghiem Bell) và dc s dng de phát trien he diêu hành UNIX. Mot trong nh ng dac diem noi bat ca C là doc lap vi phân c ng (portable), t c là chơng trình có the ch y trên các lo i máy tính và các he diêu hành khác nhau. Nam 1983, ngôn ng C dã dc chuan hóa và dc gi là ANSI C bi Vien chuan hóa quôc gia Hoa Ky (American National Standards Institute). Hien nay ANSI C van là ngôn ng lap trình chuyên nghiep và dc s dng rong rãi de phát trien các he thông tính toán hieu nang cao. Ngôn ng lap trình C++ do Bjarne Stroustrup (thuoc phòng thí nghiem Bell) phát trien trên nên là ngôn ng lap trình C và cm h ng chính t' ngôn ng lap trình Simula67. So vi C, C++ là ngôn ng an toàn hơn, kh nang dien d t cao hơn, và ít dòi hi các ky thuat bac thâp. Ngoài nh ng thê m nh th'a kê t' C, C++ ho tr tr'u tng hóa d lieu, lap trình hng dôi tng và lap trình tong quát, C++ giúp xây d$ng de dàng hơn nh ng he thông ln và ph c t p. Bat dâu t' phiên bn dâu tiên nam 1979 vi cái tên C with Classes (C kèm lp dôi tng)1 vi các tính nang cơ bn ca lap trình hng dôi tng, C++ dc phát trien dân theo thi gian. Nam 1983, cái tên C++ chính th c ra di, các tính nang nh hàm o (virtual function), hàm trùng tên và dnh nghia l i toán t (overloading), hang ... dc bo sung. Nam 1989, C++ có thêm lp tr'u tng, da th'a kê, hàm thành viên tinh, hang hàm, và thành viên kieu protected. Các bo sung cho C++ trong thap k# sau dó là khuôn mau (template), không gian tên (namespace), ngo i le (exception), các toán t doi kieu d lieu mi, và kieu d 1 Theo li ke ca Bjarne Stroustrup t i trang cá nhân ca ông t i trang web ca phòng thí nghiem ATT http://www2.research.att.com/~bs/bs_faq.html#invention 14
  • 15. lieu Boolean. Nam 1998, lân dâu tiên C++ dc chính th c chuan hóa quôc tê bi to ch c ISO, kêt qu là chuan ISO/IEC 148822. Di kèm vi s$ phát trien ca ngôn ng là s$ phát trien ca th vien chuan C++. Bên c nh viec tích hp th vien chuan truyên thông ca C vi các sa doi nh cho phù hp vi C++, th vien chuan C++ còn có thêm th vien stream I/O phc v viec vào ra d lieu d ng dòng. Chuan C++ nam 1998 tích hp thêm phân ln th vien STL (Standard Template Library – th vien khuôn mau chuan)3. Phân này cung câp các câu trúc d lieu rât h u ích nh vector, danh sách, và các thuat toán nh sap xêp và tìm kiêm. Hien nay, C++ là mot trong các ngôn ng lap trình chuyên nghiep dc s dng rong rãi nhât. 1.7. Chơng trình C++ dâu tiên Chơng trình dơn gin trong Hình 1.3 se hien ra màn hình dòng ch “Hello world!”. Trong chơng trình có nh ng dac diem quan trng ca C++. Ta se xem xét t'ng dòng. 2 Van bn này (ISO/IEC 14882:1998) sau dó dc phát hien loi ch#nh sa vào nam 2003, thành phiên bn ISO/IEC 14882:2003. 3 STL vôn không nam trong th vien chuan mà là mot th vien riêng do HP và sau dó là SGI phát trien. 15
  • 16. Hình 1.3: Chơng trình C++ dâu tiên. Hai dòng dâu tiên bat dâu bang chuoi // là các dòng chú thích chơng trình. Dó là kieu chú thích dòng dơn. Các dòng chú thích không gây ra ho t dong gì ca chơng trình khi ch y, trình biên dch b qua các dòng này. Ngoài ra còn có d ng chú thích kieu C dùng chuoi /* và */ de dánh dâu diem bat dâu và kêt thúc chú thích. Các lap trình viên dùng chú thích de gii thích và gii thieu vê noi dung chơng trình. Dòng th ba, #include iostream là mot dnh hng tiên x lý (preprocessor directive) – ch# dan vê mot công viec mà trình biên dch cân th$c hien trc khi dch chơng trình. #include là khai báo vê th vien se dc s dng trong chơng trình, trong trng hp này là th vien vào ra d lieu iostream trong th vien chuan C++. Tiêp theo là hàm main, phân không the thiêu ca moi chơng trình C++. Nó bat dâu t' dòng khai báo header ca hàm: 16 int main() Moi chơng trình C++ thng bao gôm mot hoac nhiêu hàm, trong dó có dúng mot hàm có tên main, dây là nơi chơng trình bat dâu th$c hien và kêt thúc. Bên trái t' main là t' khóa int, nó có nghia là hàm main se tr vê mot giá tr là sô nguyên. T' khóa là nh ng t' dac biet mà C++ dành riêng cho nh ng mc
  • 17. dích c the. Chơng 4 se cung câp thông tin chi tiêt vê khái niem hàm và viec hàm tr vê giá tr. Thân hàm main dc bat dâu và kêt thúc bi cap ngoac {}, bên trong dó là chuoi các lenh mà khi chơng trình ch y chúng se dc th$c hien tuân t$ t' lenh dàu tiên cho dên lenh cuôi cùng. Hàm main trong ví d dang xét có ch a hai lenh. Moi lenh dêu kêt thúc bang mot dâu cham phy, các dnh hng tiên x lý thì không. Lenh th nhât gôm cout, toán t , xâu kí t$ Hello world!, và dâu châm phy. Nó ch# th cho máy tính th$c hien mot nhiem v: in ra màn hình chuoi kí t$ nam gi a hai dâu nháy kép – Hello world!. Khi lenh dc th$c thi, chuoi kí t$ Hello world se dc gi cho cout – luông d lieu ra chuan ca C++, thng dc nôi vi màn hình. Chi tiêt vê vào ra d lieu se dc nói dên trong Chơng 8. Chuoi kí t$ nam gi a hai dâu nháy kép dc gi là mot xâu kí t (string). De ý dòng 17 using namespace std; nam gân dâu chơng trình. Tât c thành phân ca th vien chuan C++, trong dó có cout dc dùng dên trong hàm main, dc khai báo trong mot không gian tên (namespace) có tên là std. Dòng trên thông báo vi trình biên dch rang chơng trình ví d ca ta se s dng dên mot sô thành phân nam trong không gian tên std. Nêu không có khai báo trên, tiên tô std:: se phi di kèm theo tên ca tât c các thành phân ca th vien chuan dc dùng trong chơng trình, chang h n cout se phi dc viêt thành std::cout. Chi tiêt vê không gian tên nam ngoài ph m vi ca cuôn sách này, ngi dc có the tìm hieu t i các tài lieu [1] hoac [2]. Nêu không có lu ý dac biet thì tât c các chơng trình ví d trong cuôn sách này dêu s dng khai báo s dng không gian tên std nh trên. Lenh th hai nhy ra khi hàm và tr vê giá tr 0 làm kêt qu ca hàm. Dây là bc có tính chât quy trình do C++ quy dnh hàm main cân tr l i mot giá tr là sô nguyên cho biêt tr ng thái kêt thúc ca chơng trình. Giá tr 0 dc tr vê cuôi hàm main có nghia rang hàm dã kêt thúc thành công. De ý rang tât các lenh nam bên trong cap ngoac {} ca thân hàm dêu dc lùi dâu dòng mot m c. Vi C++, viec này không có ý nghia vê cú pháp. Tuy nhiên, nó l i giúp cho câu trúc chơng trình de thây hơn và chơng trình de hieu hơn dôi vi ngi lap trình. Dây là mot trong các diem quan trng trong các quy c vê phong cách lap trình. Ph lc A se hng dan chi tiêt hơn vê các quy c này.
  • 18. Dên dây ta có the sa chơng trình trong Hình 1.3 de in ra li chào Hello world! theo các cách khác nhau. Chang h n, ta có the in ra cùng mot noi dung nh cu nhng bang hai lenh gi cout: cout Hello ; cout world!; hoac in ra li chào trên nhiêu dòng bang cách chèn vào gi a xâu kí t$ các kí t$ xuông dòng (kí t$ dac biet dc kí hieu là n): cout Hello n world!n; Ph lc B hng dan vê cách s dng bo công c GNU C++ de dch và ch y chơng trình. 18
  • 19. 19 Bài tap 1. Trình bày các bc chính de gii quyêt mot bài toán. Phân tích noi dung và dac diem chính ca t'ng bc. 2. T i sao cân phi có chơng trình dch, s$ khác biet gi a trình biên dch và trình thông dch? Liet kê các ngôn ng lap trình cân có trình biên dch, và các ngôn ng lap trình cân có trình thông dch. 3. S$ khác biet, u diem và nhc diem gi a ngôn ng lap trình bac cao và ngôn ng lap trình bac thâp? Nêu mot ví d mà nên s dng ngôn ng lap trình bac thâp de gii quyêt, và mot ví d mà nên s dng ngôn ng lap trình bac cao de gii quyêt. 4. Trình bày các ngôn ng lap trình bac thâp mà b n biêt, nêu ra các dac diem noi bat ca t'ng ngôn ng lap trình dó. 5. Trình bày các ngôn ng lap trình bac cao mà b n biêt, nêu ra các dac diem noi bat ca t'ng ngôn ng lap trình dó. 6. Trình bày s$ khác biet, u diem và nhc diem gi a ngôn ng lap trình C và C++. 7. Trình bày các lo i loi thng gap khi lap trình. Phân tích dac diem ca t'ng lo i loi trên. 8. Trình bày 5 ví d vê loi logic mà b n có the gap trong lap trình. 9. Làm quen vi môi trng lap trình Dev-C++. Liet kê ra các ch c nang chính ca môi trng Dev-C++. Tìm hieu và so sánh các môi trng lap trình khác cho C và C++. 10. Viêt mot chơng trình C++ de hien ra màn hình tên ca b n. S dng biên dch dòng lenh bang bo công c GNU C++ de dch và ch y chơng trình.
  • 20. Chơng 2. Biên, kieu d lieu và các phép toán Da sô chơng trình không ch# có nh ng ho t dong dơn gin nh là hien th mot xâu kí t$ ra màn hình mà còn phi thao tác vi d lieu. Trong mot chơng trình, biên là tên ca mot vùng bo nh dc dùng de lu d lieu trong khi chơng trình ch y. D lieu lu trong mot biên dc gi là giá tr ca biên dó. Chúng ta có the truy nhap, gán hay thay doi giá tr ca các biên, khi biên dc gán mot giá tr mi, giá tr cu se b ghi dè lên. 20 Khai báo biên toàn cc totalApples kieu int Khai báo biên da phng numberOfBaskets sau dó gán giá tr 5 cho nó #include iostream using namespace std; int total(pples; int main() { int number)f*askets + ,; int apple-er*asket; cout .nter number apples per baskets: ; cin apple-er*asket; total(pples + number)f*askets / apple-er*asket; cout 0umber of apples is total(pples; return 1; } Gán giá tr nhap t- bàn phím cho biên applePerBasket Hình 2.1: Khai báo và s d
  • 21. ng biên. Hình 2.1 minh ha viec khai báo và s dng biên. Trong dó, các dòng int total(pples; int number)f*askets + ,; int apple-er*asket; là các dòng khai báo biên. total(pples, number)f*askets, và apple-er*asket là các tên biên. Các khai báo trên có nghia rang total(pples, number)f*askets, và apple-er*asket là d lieu thuoc kieu int, nghia là các biên này se gi giá tr kieu nguyên. Dòng khai báo number)f*askets có mot diem khác vi hai dòng còn l i, dó là number)f*askets dc khi t o vi giá tr 5. C++ quy dnh rang tât c các biên dêu phi dc khai báo vi mot cái tên
  • 22. và mot kieu d lieu trc khi biên dó dc s dng. Các biên thuoc cùng mot kieu có the dc khai báo trên cùng mot dòng, cách nhau bi mot dâu phy. Chang h n, có the thay hai dòng khai báo cho number)f*askets, và apple-er*asket bang: int number)f*askets + ,, apple-er*asket; Chơng trình trong Hình 2.1 yêu câu ngi dùng nhap sô táo trong moi gi (apple-er*asket), tính tong sô táo (total(pples) vi d kien dã biêt là sô gi táo (number)f*asket), rôi in ra màn hình. C the, dòng cout .nter number apples per baskets: ; in ra màn hình xâu kí t$ .nter number apples per baskets: . Dó là li mi nhap d lieu, là hng dan dành cho ngi s dng chơng trình. Dòng tiêp theo 21 cin apple-er*asket; dc d lieu dc ngi dùng nhap vào t' dâu vào chuan – thng là t' bàn phím. Khi ch y lenh này, chơng trình se di ngi dùng nhap vào mot giá tr cho biên apple-er*asket. Ngi dùng dáp ng bang cách gõ vào mot sô nguyên di d ng chuoi các ch sô rôi nhân phím Enter de gi các ch sô dó cho máy tính. Dên lt nó, máy tính biên doi chuoi các ch sô nó nhan dc thành mot giá tr kieu nguyên rôi chép giá tr này vào biên apple-er*asket. Tơng ng vi cout là dôi tng qun lý dòng d lieu ra chuan ca th vien C++, cin là dôi tng qun lý dòng d lieu vào chuan, thng là t' bàn phím. Tiêp theo là lenh gán total(pples + number)f*askets / apple-er*asket; Lenh này tính tích giá tr ca hai biên number)f*askets và apple-er*asket rôi gán kêt qu cho biên total(pples, trong dó / là kí hieu ca phép nhân và + là kí hieu ca phép gán. Lenh in kêt qu ra màn hình cout 0umber of apples is total(pples; hien th liên tiêp hai thành phân: xâu kí t$ 0umber of apples is và giá tr ca biên total(pples.
  • 23. Ngoài viec in giá tr ca mot biên, C++ còn cho phép ta in kêt qu ca mot bieu th c. Do dó, ta có mot l$a chn khác là gop công viec ca hai lenh trên (tính tích hai biên và in tích ra màn hình) vào mot lenh: cout 0umber of apples is number)f*askets / apple-er*asket; Khi dó, biên total(pples vôn dc dùng de lu tr kêt qu ca phép tính tr nên không còn cân thiêt, ta có the xóa b dòng khai báo biên này. De ý là lenh trên dài và chiêm c sang dòng th hai. C++ cho phép mot lenh nam trên nhiêu dòng, dâu châm phy cuôi moi lenh se giúp trình biên dch hieu dâu là kêt thúc ca lenh. 2.1. Kieu d lieu Moi biên phi dc khai báo de lu gi giá tr thuoc mot kieu d lieu nào dó. Ngôn ng lap trình bac cao thng có hai lo i kieu d lieu: các kieu d lieu cơ bn và các kieu d lieu dan xuât. 2.1.1. Kieu d lieu cơ bn Kieu d lieu cơ bn là kieu d lieu do ngôn ng lap trình dnh nghia san. Ví d nh các kieu sô nguyên – char, int, long int. Biên thuoc kieu nguyên dc dùng de lu các sô có giá tr nguyên. Dôi vi kieu cơ bn chúng ta thng quan tâm dên kích thc bo nh ca kieu d lieu, gii h n giá tr mà kieu d lieu dó có the lu gi . Dôi vi các kieu dâu châm dong (floating-point) de lu các giá tr thuoc kieu sô th$c, chúng ta còn quan tâm dên do chính xác ca kieu d lieu dó. Tài lieu chuan C++ không quy dnh chính xác sô byte cân dùng de lu các biên thuoc các kieu d lieu cơ bn trong bo nh mà ch# quy dnh yêu câu vê kích thc ca kieu d lieu này so vi kieu d lieu kia. Các kieu nguyên có dâu, signed char, short int, int và long int, phi có kích thc tang dân. Moi kieu nguyên có dâu tơng ng vi mot kieu nguyên không dâu vi cùng kích thc. Các kieu nguyên không dâu không the bieu dien giá tr âm nhng có the bieu dien sô giá tr dơng nhiêu gâp dôi kieu có dâu tơng ng. Tơng t$, các kieu châm dong, float, double và long double cung phi có kích thc tang dân. Bng 2.1 liet kê mot sô kieu d lieu cơ bn ca C++ vi kích thc dc nhiêu bn cài dat C++ s dng. 22
  • 24. 23 Kieu Mô t Kích thc thông dng (byte) Phm vi (tơng ng vi kích thc) char ký t$ / sô nguyên nh 1 các kí t$ ASCII signed char: -128 2 127, hoac unsighed char: 0 2 255 bool giá tr Boolean 1 true hoac false short sô nguyên 2 signed short: -327672 32767 unsigned short: 02 65536 int sô nguyên ln 4 signed int: 2147483648 2 2147483647 unsigned int: 0 2 -4294967296 long sô nguyên rât ln 4 signed long: 2147483648 2 2147483647 unsigned long: 0 2 -4294967296 float sô th$c 4 +/- 1.4023x10-45 2 3.4028x10+38 double sô th$c vi do chính xác cao 8 +/- 4.9406x10-324 2 1.7977x10308 long double sô th$c vi do chính xác rât cao 8 +/- 4.9406x10-324 2 1.7977x10308 Bng 2.1: Mot sô kieu d lieu cơ bn trong C++. Mot sô lu ý: • Kích thc và ph m vi ca các kieu d lieu cơ bn ph thuoc vào he thông mà chơng trình dc biên dch t i dó. Tuy nhiên, tât c các he thông, kieu char bao gi cung có kích thc là 1 byte; các kieu d lieu char, short, int, long phi có kích thc tang dân; còn các kieu float, double, long double phi có do chính xác cao dân. • Kieu char dùng de lu các kí t$ dơn (có mã nh hơn 256), chang h n nh ch cái La-tinh, ch sô, hay các kí hieu. Trong C++, mot kí t$ dơn dc dóng trong cap nháy dơn, ví d '('. De lu các kí t$ có mã ln hơn 255, ta có the s dng kieu wchar_t.
  • 25. • Kieu d lieu bool ch# có hai giá tr true và false. Ta có the dùng biên thuoc kieu này de lu câu tr li ca nh ng câu hi dúng/sai chang h n nh Có phi index ln hơn 100? hay lu các tr ng thái Ta dã tìm thây giá tr âm cha?. Các giá tr true và false trong C++ th$c ra ch# là 0 và 1. 2.1.2. Kieu d lieu dan xuât Kieu d lieu dan xuât là kieu d lieu dc xây d$ng t' các kieu d lieu cơ bn bang các toán t nh * (con tr), (tham chiêu), [] (mng), () hàm, hoac dc dnh nghia bang cơ chê struct hay class. Các kieu d lieu dc dnh nghia bang cơ chê struct hay class còn dc gi là các kieu d lieu có câu trúc hoac kieu d lieu tr'u tng. Chi tiêt vê các kieu d lieu dan xuât se dc trình bày dân dân trong các chơng sau. 2.2. Khai báo và s dng biên De bat dâu s dng mot biên, chúng ta phi tiên hành hai bc: dat cho biên mot cái tên hp le và khai báo biên. 2.2.1. Dnh danh và cách dat tên biên Dnh danh (identifier) là thuat ng trong ngôn ng lap trình khi nói dên tên (tên biên, tên hàm, tên lp…). Dnh danh là mot chuoi kí t$ (bao gôm các ch cái a..z, A..Z, ch sô 0..9, dâu g ch chân ‘_’) viêt liên nhau. Dnh danh không dc bat dâu bang ch sô và không dc trùng vi các t khóa (nh ng t' mang ý nghia dac biet) ca ngôn ng lap trình. Lu ý, C++ phân biet ch cái hoa và ch cái thng. Cách dat tên biên tuân th theo cách dat tên dnh danh. Ví d vê các tên biên: • _sinhvien, sinhvien_11, sinhVien_11 là các tên biên hp le khác nhau • 11sinhvien, sinhviên, sinhvien là các tên biên không hp le Tên biên nên de dc, và gi nh dên công dng ca biên hay kieu d lieu mà biên se lu tr . Ví d, nêu cân dùng mot biên de lu sô lng qu táo, ta có the dat tên là total(pples. Không nên s dng các tên biên ch# gôm mot kí t$ và không có ý nghia nh a hay b. 24
  • 26. 2.2.2. Khai báo biên Các ngôn ng lap trình dnh kieu m nh, trong dó có C++, yêu câu moi biên trc khi dùng phi dc khai báo và biên phi thuoc vê mot kieu d lieu nào dó. Có the chia các biên thành hai lo i: • các biên dc khai báo ngoài tât c các chơng trình con là biên toàn cc, có hieu l$c trên toàn bo chơng trình, chang h n biên total(pples trong Hình 2.1. • các biên dc khai báo t i mot chơng trình con là biên da phơng, có hieu l$c bên trong chơng trình con dó, chang h n number)f*askets và apple-er*asket trong Hình 2.1 là các biên da phơng ca hàm main và ch# có hieu l$c bên trong hàm main. Chơng 4 se nói ki hơn vê hai lo i biên trên. Trong C++, biên có the dc khai báo gân nh bât c dâu trong chơng trình, mien là trc dòng dâu tiên s dng dên biên dó (xem Hình 2.1). Mot biên da phơng dã dc khai báo nhng cha dc gán mot giá tr nào dc gi là biên cha dc khi t o. Giá tr ca biên cha dc khi t o thng là không xác dnh. De tránh tình tr ng này, ta có the khi t o giá tr ca các biên bang cách gán giá tr ngay t i lenh khai báo biên. 2.3. Hang Hang là mot lo i biên dac biet mà giá tr ca nó dc xác dnh t i thi diem khai báo và không dc thay doi trong suôt chơng trình. De khai báo mot hang, ta thêm t' khóa const vào phía trc lenh khai báo biên. Ví d: const float -I + 3.141,926,3,; const float SCR..0_WIDTH + 317.24; Hang dc dùng de dat tên cho các giá tr không thay doi dc dùng trong chơng trình, chang h n nh do rong màn hình nh trong ví d trên. Công dng ca hang là moi khi cân thay doi giá tr dó, ta ch# cân sa lenh khai báo hang thay vì tìm và sa giá tr tơng ng t i tât c các v trí dùng dên nó. Ngoài ra, mot cái tên có ý nghia dat cho mot giá tr dc dùng di dùng l i se giúp cho chơng trình de dc và de hieu hơn. 25
  • 27. 2.4. Các phép toán cơ bn 2.4.1. Phép gán Phép gán là cách gan mot giá tr cho mot biên hoac thay doi giá tr ca mot biên. Lenh gán trong C++ là: 26 biên = bieu thc; trong dó dâu bang (“=”) dc gi là dâu gán hay toán t gán. Lu ý, dâu bang trong C++ không dùng de so sánh giá tr nh trong mot sô ngôn ng lap trình khác. Ví d symbol + '('; là phép gán giá tr ‘A’ cho biên symbol, không phi là bieu th c so sánh xem giá tr ca symbol có phi là 'A' hay không. Công viec ca phép gán là tính giá tr ca bieu th c bên phi dâu gán rôi lu giá tr dó vào trong biên nam bên trái dâu gán. Bieu th c có the là mot sô, mot biên, hoac mot bieu th c ph c t p. Lu ý rang mot biên có the xuât hien c hai bên ca dâu gán. Ví d lenh sau tang giá tr ca biên apples thêm 2. apples + apples + 2; Diem dac biet ca C++ là bn thân phép gán cung chính là mot bieu th c vi giá tr tr vê là kêt qu ca phép gán. Ví d, phép gán x = 3 là mot bieu th c có giá tr bang 3. 2.4.2. Các phép toán sô hc C++ ho tr nam phép toán sô hc sau: + (cong), - (tr'), / (nhân), / (chia), % (modulo – lây phân d ca phép chia). Phép chia dc th$c hien cho hai giá tr kieu nguyên se cho kêt qu là thơng nguyên. Ví d bieu th c 4 / 3 cho kêt qu bang 1, còn 3 / 5 cho kêt qu bang 0. Mot sô phép gán kèm theo bieu th c xuât hien nhiêu lân trong mot chơng trình, vì vay C++ cho phép viêt các phép gán bieu th c dó mot cách gan ngn hơn, s dng các phép gán ph c hp (++, -+, /+, /+, %+, +, +, +, ^+, |+). Cách s dng phép gán ph c hp ++ nh sau: biên += bieu thc; tơng dơng biên = biên + bieu thc;
  • 28. 27 Ví d: apples ++ 2; tơng dơng apples + apples + 2; Các phép gán ph c hp khác dc s dng tơng t$. C++ còn cung câp các phép toán ++ (hay --) de tang (gim) giá tr ca biên lên mot dơn v. Ví d: apples++ hay ++apple có tác dng tang apples thêm 1 dơn v apples-- hay --apple có tác dng gim apples di 1 dơn v Khác biet gi a viec viêt phép tang/gim trc biên (tang/gim trc) và viêt phép tang/gim sau biên (tang/gim sau) là thi diem th$c hien phép tang/gim, the hien giá tr ca bieu th c. Phép tang/gim trc dc th$c hien trc khi bieu th c dc tính giá tr, còn phép tang/gim sau dc th$c hien sau khi bieu th c dc tính giá tr. Ví d, nêu apples vôn có giá tr 1 thì các bieu th c ++apples hay apples++ dêu có hieu ng là apples dc tang t' 1 lên 2. Tuy nhiên, ++apples là bieu th c có giá tr bang 2 (tang apples trc tính giá tr), trong khi apples++ là bieu th c có giá tr bang 1 (tang apples sau khi tính giá tr bieu th c). Nêu ta ch# quan tâm dên hieu ng tang hay gim ca các phép ++ hay – thì viec phép toán dc dat trc hay dat sau không quan trng. Dó cung là cách dùng pho biên nhât ca các phép toán này. Lu ý, cân hêt s c can than khi s dng các phép tang và gim trong các bieu th c. Viec này không dc khuyên khích vì tuy nó có the tiêt kiem dc mot hai dòng lenh nhng l i làm gim tính trong sáng ca chơng trình. 2.4.3. Các phép toán quan he Các phép toán quan he dc s dng de so sánh giá tr hai bieu th c. Các phép toán này cho kêt qu bang 0 nêu dúng và khác 0 nêu sai. Ta s dng giá tr ca mot bieu th c quan he nh là mot giá tr thuoc kieu bool. Ví d: bool enough(pples + (total(pples 11); Các phép toán quan he trong ngôn ng C++ dc liet kê trong Bng 2.2.
  • 29. Ký hieu toán hc Toán t ca C++ Ví d Ý nghia x y x ln hơn y x y x nh hơn y ³ + x + y x ln hơn hoac bang y £ + x + y x nh hơn hoac bang y + ++ x ++ y x bang y ¹ !+ x !+ y x khác y Bng 2.2: Các phép toán quan he. Chú ý tránh nhâm lan gi a phép gán giá tr “+” và phép so sánh bang “++”. Nh ng nhâm lan gi a các phép toán kieu này thng dan dên nh ng loi lôgic rât khó phát hien. 2.4.4. Các phép toán lô-gic Toán t C++ Ý nghia Ví d Ý nghia ca ví d and x y Cho giá tr dúng khi c x và y dúng, ngc l i cho giá tr sai. || or x || y Cho giá tr dúng khi hoac x dúng hoac y dúng, ngc l i cho giá tr sai 28 ! not !x Ph dnh ca x. Cho giá tr dúng khi x sai; cho giá tr sai khi x dúng Bng 2.3: Các phép toán lô-gic. Các phép toán lô-gic dành cho các toán h ng là các bieu th c quan he hoac các giá tr bool. Kêt qu ca bieu th c lôgic là giá tr bool. Ví d: bool enough(pples + (apples 3) (apples 11); có kêt qu là biên enough(pples nhan giá tr là câu tr li ca câu hi biên apples có giá tr ln hơn 3 và nh hơn 10 hay không?. 2.4.5. Do u tiên ca các phép toán Di dây là m c do u tiên ca mot sô phép toán thng gap. Th t$ ca chúng nh sau:
  • 30. Các phép toán nam trong cap dâu ngoac ( ) có do u tiên ln nhât. Ví d: 29 2 * (1 + 3) cho kêt qu bang 8 Các phép toán /, /, +, -. Trong dó /, / có do u tiên nh nhau và cao hơn +, -. Ví d: 2 * 1 + 3 cho kêt qu là 5 Các phép toán so sánh , , =, =. Ví d: 3 + 4 2 + 6 cho kêt qu dúng Các phép toán lô-gic có th th t$ u tiên nh sau: !, , ||. Ví d: 1 || 0 0 tơng dơng vi 1 || (0 0) và cho kêt qu 1 2.4.6. Tơng thích gia các kieu Vê cơ bn, giá tr gán cho mot biên nên cùng kieu vi biên dó. Khi mot biên dc gán mot giá tr không dúng vi kieu d lieu ca biên dó, thì giá tr dó se dc chuyen doi sang kieu ca biên (type conversion). Mot vài trng hp thng gap trong viec chuyen kieu là: Chuyen doi gi a sô th$c và sô nguyên int x + 2.,; // x nhan giá tr 2 double y + 3.,; // y nhan giá tr 3,, x + y; // x nhan giá tr 3 Phép chia ca sô nguyên int divisor + 4; int dividend + 6; int quo + dividend/divisor; // quo nhan giá tr 1. Lu ý: Phép chia mot sô nguyên cho mot sô nguyên se cho kêt qu là mot sô nguyên. Muôn kêt qu là mot sô th$c thì ít nhât mot trong hai sô phi là sô th$c.
  • 31. Bài tap 1. Viêt chơng trình tính dien tích ca mot hình tròn. Bán kính là mot sô th$c và dc nhap vào t' bàn phím. Dien tích hình tròn dc hien ra màn hình. 2. Nhap t' bàn phím hai sô nguyên là chiêu cao ca Peter và Essen. Hãy tính xem Peter cao gâp bao nhiêu lân Essen. Ví d, nêu chiêu cao ca Peter là 180, chiêu cao ca Essen là 150, thì hien ra màn hình dòng ch “Peter is 1.2 times as tall as Essen”. 3. Nhap t' bàn phím mot sô nguyên là nhiet do di d ng do F (Fahrenheit), hãy hien ra màn hình nhiet do di d ng do C (Celsius). Sinh viên t$ tìm hieu công th c chuyen doi. 4. Viêt mot chơng trình trong dó có hai hang sô WIDTH vi giá tr bang 3.17654, và hang sô LENGTH vi giá tr bang 10.03212. Tính và hien ra màn hình dien tích ca hình ch nhat vi hai c nh là WIDTH và LENGTH. 5. Nhap t' bàn phím bôn sô nguyên a, b, c, d. Hãy tính và hien ra màn hình giá 30 tr ca bieu th c: (a + b) (c + d) || (a - b) (c - d) 6. Trình bày s$ khác biet gi a biên da phơng và biên toàn cc. Khi nào thì nên dùng biên da phơng, khi nào thì nên dùng biên toàn cc. Nêu các lu y khi s dng biên toàn cc. 7. Viêt mot chơng trình có ch a hai biên: biên da phơng bonus và biên toàn cc score. Nhap giá tr hai biên t' bàn phím, tính và hien ra màn hình tong ca score và bonus. 8. Hãy tính (không dùng chơng trình) giá tr ca các bieu th c sau: a) 1 + 3 2 * 4 – 1 1 b) 2 * 2 – 1 + 5 / 1 4 – 3 c) (2 – 3 * 1) 0 / 5 * 2 + 1 9. Tính giá tr ca biên c t' do n chơng trình sau: a) int a = 3; int b = 2; int c = a/b; b) double a = 3.1; int b = 2; int c = a/b;
  • 32. c) int a = 3; int b = 2; double c = a/b; 10. Nhap hai sô nguyên dơng x và y t' bàn phím, hãy tính: a) Thơng ca phép toán x chia cho y b) Tích ca phép toán x nhân y c) Phân nguyên ca x chia cho y d) Phân d ca x chia cho y 11. Nhap t' bàn phím 3 sô th$c x, y, và z. Hãy tính a) Trung bình cong ca ba sô trên b) Hien ra màn hình sô 1 nêu x là sô ln nhât trong ba sô trên, ngc l i 31 hien ra màn hình sô 0. c) Hien ra màn hình sô 1 nêu z là sô nh trong ba sô trên, ngc l i hien ra màn hình sô 0. 12. Tính giá tr (không dùng chơng trình) ca bieu th c so sánh di dây: a) x = 1; y = 2; x++ y b) x = 2; y = 1; x-- y++ c) x = 2; y = 2; x++ == y
  • 33. Chơng 3. Các câu trúc diêu khien Nh dã nói phân trên, chơng trình máy tính mà chúng ta lap trình t o ra th$c chât là mot tap các lenh. Các chơng trình dc viêt bang ngôn ng bac cao thng ch a mot hàm chính (trong C++ là hàm main), nơi chơng trình bat dâu th$c hien các lenh. Trong chơng này chúng ta se tìm hieu th t$ th$c hien các lenh trong mot chơng trình. 3.1. Luông diêu khien Luông diêu khien ca chơng trình là th t$ các lenh (hành dong) mà chơng trình th$c hien. Cho dên chơng này, chúng ta mi gap th t$ dơn gin: th t$ tuân t$, nghia là các hành dong dc th$c hien dúng theo th t$ mà chúng dc viêt trong chơng trình. Ví d, Hình 3.1 là sơ dô minh ha mot câu trúc tuân t$ dien hình, trong dó hai hành dong và các mui tên bieu dien th t$ th$c hien các hành dong. Hình 3.1: Sơ dô chuyen trng thái ca mot don lenh có th t th c thi tuân t . Trong chơng này, ta se làm quen vi các luông diêu khien ph c t p hơn. Hâu hêt các ngôn ng lap trình, trong dó có C++, cung câp hai lo i lenh de kiem soát luông diêu khien: • lenh re nhánh (branching) chn mot hành dong t' danh sách gôm nhiêu 32 hành dong. • lenh lap (loop) th$c hien lap di lap l i mot hành dong cho dên khi mot diêu kien d'ng nào dó dc tha mãn.
  • 34. Hai lo i lenh dó t o thành các câu trúc diêu khien (control structure) bên trong chơng trình. 3.2. Các câu trúc re nhánh 3.2.1. Lenh if-else Lenh if-else (hay gi tat là lenh if) cho phép re nhánh bang cách l$a chn th$c hien mot trong hai hành dong. Ví d, trong mot chơng trình xêp lo i diem thi, nêu diem ca sinh viên nh hơn 60, sinh viên dó dc coi là trt, nêu không thì dc coi là do. [score 60] [score = 60] in Failed in Passed Hình 3.2: Sơ dô mot lenh if. Thuat toán nh này dc the hien bang sơ dô trong Hình 3.2. Trong dó hình qu trám bieu dien diem re nhánh, nơi chơng trình da ra quyêt dnh xem nên re theo hng nào. T' diem re nhánh có các mui tên di ra, moi mui tên kèm theo mot diêu kien. Luông diêu khien se di theo mui tên nào mà diêu kien ca nó dc tha mãn. Cung có the trình bày thuat toán bang mã gi nh sau: 33 If student’s score is less than 60 print “Failed” else print “Passed” The hien thuat toán trên bang mot lenh if-else ca C++, ta có do n mã:
  • 35. 34 if (score 61) cout Failed; else cout -assed; Khi chơng trình ch y mot lenh if-else, dâu tiên nó kiem tra bieu th c diêu kien nam trong cap ngoac dơn sau t' khóa if. Nêu bieu th c có giá tr bang true thì lenh nam sau t' khóa if se dc th$c hien. Ngc l i, lenh nam sau else se dc th$c hien. Chú ý là bieu th c diêu kien phi dc dat trong mot cap ngoac dơn. #include iostream using namespace std; int main() { int score; cout .nter your score: ; cin score; //get the score from the keyboard if (score 61) cout Sorry. NouOve failed the course.n; else cout Congratulations! NouOve passed the course.n; return 1; } ê
  • 36. . F
  • 37. $1 @
  • 38. FN
  • 39. O6
  • 40. . F
  • 41. $E1
  • 42. N
  • 43. O6
  • 45. vê câu trúc -. Chơng trình ví d trong Hình 3.3 yêu câu ngi dùng nhap diem rôi in ra các thông báo khác nhau tùy theo diem sô d do hoac trt. De ý rang các lenh nam bên trong khôi - cân dc lùi dâu dòng mot m c de chơng trình trông sáng sa de dc.
  • 46. Trong câu trúc re nhánh -, ta có the b phân nêu không muôn chơng trình th$c hien hành dong nào nêu diêu kien không tha mãn. Chang h n, nêu muôn thêm mot li khen dac biet cho diem sô xuât sac t' 90 tr lên, ta có the thêm lenh sau vào trong chơng trình t i Hình 3.3. 35 (
  • 47. =91)
  • 48. .x ; Ta có the dùng các câu trúc - lông nhau de t o ra diêu kien re nhánh ph c t p. Hình 3.3 là mot ví d dơn gin vi ch# hai trng hp và mot lenh . Xét mot ví d ph c t p hơn: cho trc diem sô (lu t i biên
  • 49. kieu ), xác dnh xêp lo i hc l$c A, B, C, D, F tùy theo diem dó. Quy tac xêp lo i là: nêu diem t' 90 tr lên thì d t lo i A, diem t' 80 ti di 90 d t lo i B, v.v.. T i do n mã xét các trng hp ca xêp lo i diem, ta có the dùng câu trúc - lông nhau nh sau: (
  • 53. =61) ='D'; ='F'; De ý rang moi khôi lenh - sau nam trong phân ca khôi lenh - liên trc. Nêu
  • 54. không di 90, diêu kien ca c bôn lenh - dêu cho kêt qu . Tuy nhiên, do diêu kien ca lenh - ngoài cùng tha mãn, ch# có lenh gán dâu tiên = 'A' dc th$c thi, còn toàn bo phân ca lenh - ngoài cùng, bao gôm ba lenh - còn l i, b b qua. Vi các khôi lenh - lông nhau nh trên, khi phi lùi dâu dòng quá xa vê bên phi, dòng còn l i quá ngan khiên moi lenh có the phi tri trên vài dòng, dan dên viec chơng trình khó dc. Do dó, da sô lap trình viên C++ thng
  • 55. dùng kieu lùi dâu dòng nh di dây. (Hai cách lùi dâu dòng này là nh nhau dôi vi trình biên dch vì nó b qua các kí t$ trang.) 36 (
  • 59. =61) ='D'; ='F'; Hình 3.4 là chơng trình hoàn ch#nh th$c hien nhiem v yêu câu ngi dùng nhap diem sô sau dó tính và in ra xêp lo i hc l$c tơng ng.
  • 60. 37
  • 61. ; ()
  • 62. ; ;
  • 63. . F
  • 64. $;
  • 65. ; (
  • 69. =61) ='D'; ='F';
  • 70. Q = ; 1; Hình 3.4: Câu trúc if-else lông nhau. Mot diêu cân dac biet lu ý là nêu muôn th$c hien nhiêu hơn mot lenh trong moi trng hp ca lenh -, ta cân dùng cap ngoac {} bc tap lenh dó thành mot khôi chơng trình. Ví d, phiên bn ph c t p hơn ca lenh trong Hình 3.3:
  • 71. (
  • 72. 61)
  • 73. F;
  • 74. N
  • 75. 6
  • 76. k
  • 77. ;
  • 78. ;
  • 79. N
  • 80. ; De tránh loi quên cap ngoac, có mot li khuyên là tap thói quen dùng cap ngoac ngay c khi khôi lenh ch# bao gôm dúng mot lenh. Chang h n, xét khôi lenh lông nhau di dây: ( Q =='A') ( Q =='A')
  • 81. N
  • 82. 6
  • 83. w
  • 84. A';
  • 85. N
  • 86. ' 6 A
  • 87. ; Thông báo trong phân dáng ra cân dc th$c thi khi xêp h ng ca môn Toán ( Q ) không d t A. Tuy nhiên, trong th$c tê, trình biên dch l i hieu rang phân dó cùng cap vi lenh th hai – lenh gân nhât, nghia là: ( Q =='A') ( Q =='A')
  • 88. N
  • 89. 6
  • 90. w
  • 91. A';
  • 92. N
  • 93. ' 6 A
  • 94. ; Các loi lôgic d ng này thng khó phát hien. Dôi vi C++, viec lùi dâu dòng ch# nham mc dích de lap trình viên de dc chơng trình ch không có ý nghia vi trình biên dch. Cách gii quyêt là s dng cap ngoac {} de ch# rõ cho trình biên dch rang lenh th hai nam trong lenh ngoài cùng và rang phân cùng cap vi lenh ngoài cùng dó: 38
  • 96. N
  • 97. 6
  • 98. w
  • 99. A';
  • 100. N
  • 101. ' 6 A
  • 102. ; 3.2.2. Lenh swi Khi chúng ta muôn viêt mot câu trúc re nhánh có nhiêu l$a chn, ta có the s dng nhiêu lenh - lông nhau. Tuy nhiên, trong trng hp viec l$a chn re nhánh ph thuoc vào giá tr (kieu sô nguyên hoac kí t$) ca mot biên hay bieu th c, ta có the s dng câu trúc w de chơng trình de hieu hơn. Lenh w dien hình có d ng nh sau: w (bieu_thc) hang_1$ tap_lenh_1;b k; hang_2$ tap_lenh_2;b k; $ tap_lenh_mac_d
  • 103. nh; Khi lenh w dc ch y, bieu_thc dc tính giá tr và so sánh vi hang_1. Nêu bang nhau, chuoi lenh ke t' tap_lenh_1 dc th$c thi cho dên khi gap lenh b k dâu tiên, dên dây chơng trình se nhy ti diem kêt thúc câu trúc w . Nêu bieu_thc không có giá tr bang hang_1, nó se dc so sánh vi hang_2, nêu bang nhau, chơng trình se th$c thi chuoi lenh ke t' tap_lenh_2 ti khi gap lenh b k dâu tiên thì nhy ti cuôi câu trúc w . Quy trình c tiêp dien nh vay. Cuôi cùng, nêu bieu_thc có giá tr khác vi tât c các giá tr dã dc liet kê (hang_1, hang_2, ...), chơng trình se th$c thi tap_lenh_mac_d
  • 104. nh nam sau nhãn $ nêu nh có nhãn này (không bat buoc). Ví d, lenh sau so sánh giá tr ca biên vi các hang kí t$ 'A', 'B', 'C' và in ra các thông báo khác nhau cho t'ng trng hp. 39
  • 109. Q
  • 110. A,B,
  • 111. ; Nó tơng dơng vi khôi lenh - lông nhau sau: ( =='A')
  • 114. Q =;
  • 115. Q
  • 116. A,B,
  • 117. ; Lu ý, các nhãn trong câu trúc w phi là hang ch không the là biên hay bieu th c. Nêu cân so sánh vi biên hay bieu th c, ta nên dùng khôi lenh - lông nhau. Vân dê dac biet ca câu trúc w là các lenh b k. Nêu ta không t$ gan mot lenh b k vào cuôi chuoi lenh cân th$c hien cho moi trng hp, chơng trình se ch y tiêp chuoi lenh ca trng hp sau ch không t$ dong nhy ti cuôi câu trúc w . Ví d, do n chơng trình sau se ch y lenh in th nhât nêu grade nhan mot trong ba giá tr 'A', 'B', 'C' và ch y lenh in th hai trong trng hp còn l i: 40
  • 119. Q A,B
  • 121. Q
  • 122. A,B
  • 123. ; Chơng trình trong Hình 3.5 là mot ví d hoàn ch#nh s dng câu trúc w de in ra các thông báo khác nhau tùy theo xêp lo i hc l$c ( ) mà ngi dùng nhap t' bàn phím. Trong dó, 'A' kêt thúc vi b k sau ch# mot lenh, còn 'B' ch y tiêp qua '', 'D' rôi mi gap b k và thoát khi lenh w . Nhãn dc dùng de x lý trng hp biên grade gi giá tr không hp le dôi vi xêp lo i hc l$c. Trong nhiêu chơng trình, phân thng dc dùng de x lý các trng hp không mong di, chang h n nh de bat loi các kí hieu hc l$c không hp le mà ngi dùng có the nhap sai trong Hình 3.5. 41
  • 124. 42
  • 125. ; () ;
  • 126. . F
  • 127. $; ; w ( ) 'A'$
  • 130. B
  • 132. @
  • 133. F,F
  • 135. .
  • 136. :6 ; 1; } ê
  • 137. . F
  • 139. $B Q B
  • 140. . F
  • 141. $D B
  • 142. . F
  • 143. $F @
  • 144. F,F
  • 146. s d
  • 147. ng câu trúc switch.
  • 148. 3.3. Các câu trúc lap Các chơng trình thng cân phi lap di lap l i mot ho t dong nào dó. Ví d, mot chơng trình xêp lo i hc l$c se ch a các lenh re nhánh de gán xêp lo i A, B, C… cho mot sinh viên tùy theo diem sô ca sinh viên này. De xêp lo i cho c mot lp, chơng trình se phi lap l i thao tác dó cho t'ng sinh viên trong lp. Phân chơng trình lap di lap l i mot lenh hoac mot khôi lenh dc gi là mot vòng lap. Lenh hoac khôi lenh dc lap di lap l i dc gi là thân ca vòng lap. Câu trúc lap cho phép lap trình viên ch# th cho chơng trình lap di lap l i mot ho t dong trong khi mot diêu kien nào dó van dc tha mãn. Khi thiêt kê mot vòng lap, ta cân xác dnh thân vòng lap th$c hien hành dong gì. Ngoài ra, ta còn cân mot cơ chê de quyêt dnh khi nào vòng lap se kêt thúc. Mc này se gii thieu vê các lenh lap mà C++ cung câp. 3.3.1. Vòng wile Vòngwilelap di lap l i chuoi hành dong, gi là thân vòng lap, nêu nh diêu kien lap van còn dc tha mãn. Cú pháp ca vòng lap w nh sau: 43 w (diêu_kien_lap) thân_vòng_lap Câu trúc này bat dâu bang t' khóa w , tiêp theo là diêu kien lap dat trong mot cap ngoac dơn, cuôi cùng là thân vòng lap. Thân vòng lap hay ch a nhiêu hơn mot lenh và khi dó thì phi dc gói trong mot cap ngoac {}. Khi th$c thi mot câu trúc w , dâu tiên chơng trình kiem tra giá tr ca bieu th c diêu kien, nêu bieu th c cho giá tr (th$c chât là bang 0) thì nhy dên diem kêt thúc lenh w , còn nêu diêu kien lap có giá tr (th$c chât là mot giá tr nào dó khác 0) thì tiên hành th$c hien tap lenh trong thân vòng lap rôi quay tr l i kiem tra diêu kien lap, nêu không tha mãn thì kêt thúc, nêu tha mãn thì l i th$c thi thân vòng lap rôi quay l i... Tap lenh thân vòng lap có the làm thay doi giá tr ca bieu th c diêu kien t' sang (th$c chât là t' khác 0 sang bang 0) de d'ng vòng lap. Ví d, xét mot chơng trình có nhiem v dêm t' 1 dên mot ng4ng b cho trc. Do n mã dêm t' 1 dên b có the dc viêt nh sau:
  • 149.
  • 151. =b )
  • 152. ,;
  • 153. ++; Gi s biên b có giá tr bang 2, do n mã trên ho t dong nh sau: Dâu tiên, biên
  • 154. dc khi t o bang 1. Vòng while bat dâu bang viec kiem tra diêu kien (
  • 155. =b ), nghia là 1 5 2, diêu kien tha mãn. Thân vòng lap dc th$c thi lân th nhât: giá tr 1 ca
  • 156. dc in ra màn hình kèm theo dâu phy, sau dó
  • 157. dc tang lên 2. Vòng lap quay vê diem xuât phát: kiem tra diêu kien lap, gi là 2 5 2, van tha mãn. Thân vòng lap dc ch y lân th hai (in giá tr 2 ca
  • 159. lên 3) trc khi quay l i diem xuât phát ca vòng lap. T i lân kiem tra diêu kien lap này, bieu th c 3 5 2 cho giá tr , vòng lap kêt thúc do diêu kien lap không còn dc tha mãn, chơng trình ch y tiêp lenh nam sau câu trúc w dang xét. Câu trúc w trong do n mã trên có the dc bieu dien bang sơ dô trong Hình 3.6. Trong sơ dô, mui tên sau chuoi hành dong in biên
  • 161. quay ngc tr l i diem kiem tra diêu kien re nhánh, chuoi hành dong se lap l i nêu diêu kien
  • 162. =b van tiêp tc dc tha mãn. Còn nêu
  • 163. b , vòng while di dên diem kêt thúc, trao diêu khien cho lenh tiêp theo trong chuoi lenh ca chơng trình. Hình 3.6: Sơ dô mot vòng lap while. Chơng trình hoàn ch#nh trong Hình 3.7 minh ha cách s dng vòng lap w de in ra các sô nguyên (biên
  • 164. ) t' 1 cho dên mot ng4ng giá tr do ngi dùng nhap vào t' bàn phím (lu t i biên b ). Kèm theo là kêt qu ca các lân ch y khác nhau vi các giá tr khác nhau ca b . Dac biet, khi ngi 44
  • 165. dùng nhap giá tr 0 cho b , thân vòng w không ch y mot lân nào, the hien viec không mot sô nào dc in ra màn hình. Lí do là vì nêu b bang 0 thì bieu th c
  • 166. =b ngay t' dâu vòng w dã có giá tr . 45
  • 167. ; ()
  • 168. ,b ;
  • 171. =b )
  • 172. ,;
  • 173. ++;
  • 174. B)))))R; 1; ê
  • 175. . b $ 1,,B)))))R . b $1 1,B)))))R . b $1 B)))))R Hình 3.7: Ví d
  • 176. vê vòng lap while. Vòng lap vô tan Mot trong nh ng loi chơng trình thng gap là mot vòng lap không the kêt thúc, thân vòng lap dó dc lap di lap l i mà không bao gi ng'ng. Mot vòng lap nh vay dc gi là vòng lap vô tan. Thông thng, mot vài lenh trong thân mot vòng w hay
  • 177. -w se làm thay doi giá tr ca mot vài biên de bieu th c diêu kien cho giá tr (hoac 0), chang h n lenh tang biên dêm
  • 178.
  • 179. trong Hình 3.7. Nêu (các) biên dó không dc thay doi giá tr mot cách thích hp hoac khi diêu kien lap dc viêt không chính xác (có the do thuat toán sai hay nhâm lan khi viêt mã chơng trình), ta se nhan dc mot vòng lap vô tan do diêu kien lap không bao gi nhan giá tr . Hình 3.8 minh ha mot vòng lap vô tan khi biên
  • 180. tang dân dên vô h n nhng luôn nhan giá tr l+ và không bao gi có the có giá tr bang 12 de kêt thúc vòng lap w . Dây có the gi là loi lô-gic. Nêu do n chơng trình có nhiem v tính tong các sô 1, 3, 5, 7, 9, 11 thì diêu kien lap nên dc sa thành (
  • 181. 1) de chơng trình có the ch y dúng. 46
  • 184. =1) =+
  • 185. ;
  • 186. =
  • 187. +; 1; } Hình 3.8: Ví d
  • 188. vê vòng lap vô tan. 3.3.2. Vòng do-wile Vòng do-wile rât giông vi vòng w , khác biet chính là cho thân vòng lap se dc th$c hien trc, sau dó mi kiem tra diêu kien lap, nêu dúng thì quay l i ch y thân vòng lap, nêu sai thì d'ng vòng lap. Khác biet dó có nghia rang thân ca vòng
  • 189. -w luôn dc ch y ít nhât mot lân, trong khi thân vòng w có the không dc ch y lân nào.
  • 190. Công th c ca vòng
  • 191. -w tong quát là: 47
  • 192. thân_vòng_lap w (diêu_kien_lap); Tơng t$ nh vòng w , thân_vòng_lap ca vòng
  • 193. -w có the ch# gôm mot lenh hoac thng gap hơn là mot chuoi lenh dc bc trong mot cap ngoac {}. Lu ý dâu châm phy dat cuôi toàn bo khôi
  • 194. -w . Công th c tong quát ca vòng
  • 195. -w trên tơng dơng vi công th c sau nêu dùng vòng w : thân_vòng_lap w (diêu_kien_lap) thân_vòng_lap De minh ha ho t dong ca hai câu trúc lap w và
  • 196. -w , ta so sánh hai do n mã di dây:
  • 198. =b )
  • 199. ,;
  • 200. ++;
  • 201. =1;
  • 202. ,;
  • 204. =b ); Hai do n mã ch# khác nhau cho mot bên trái dùng vòng w , bên phi dùng vòng
  • 205. -w , còn l i, các phân thân vòng lap, diêu kien, khi t o dêu giông het nhau. Do n bên trái dc lây t' ví d trong mc trc, nó in ra các sô t' 1 dên b . Do n mã dùng vòng
  • 206. -w bên phi cung th$c hien công viec giông het do n bên trái, ngo i tr' mot diem: khi b nh hơn 1 thì nó van dêm 1 trc khi d'ng vòng lap – thân vòng lap ch y 01 lân trc khi kiem tra diêu kien. De minh ha rõ hơn, ta xem xét Hình 3.9 là bn sa doi ca ví d trong Hình 3.7 bang cách thay câu trúc w bang câu trúc
  • 207. -w và gi nguyên các phân còn l i. Kêt qu ch y chơng trình cho thây ho t dong ca chơng trình trong Hình 3.9 không hoàn toàn nh mong muôn. C the, khi b dc nhap giá tr 0, chơng trình van dêm mot lân trong khi dáng ra không nên dêm lân nào nh chơng trình nguyên gôc trong Hình 3.7. Dó là mot minh ha vê s$ khác biet gi a ho t dong ca hai câu trúc w và
  • 208. -w . Trong bài toán c the này, câu trúc
  • 209. -w không phi là l$a chn tôt so vi câu trúc w .
  • 210. 48
  • 211. ; ()
  • 212. ,b ;
  • 214. =1; do
  • 215. ,;
  • 216. ++; wileo
  • 217. e;
  • 218. B)))))R; 1; ê
  • 219. . b $ 1,,B)))))R . b $1 1,B)))))R . b $1 1,B)))))R Hình 3.9: Ví d
  • 220. vê vòng lap do-wile. Tan dng dac diem ch y mot lân trc khi kiem tra diêu kien, chơng trình trong Hình 3.10 làm nhiem v nhap t' bàn phím mot chuoi sô kêt thúc bang sô 0 và tính tong ca chúng. Công viec lap di lap l i là nhap vào mot sô () rôi cong dôn giá tr ca sô dó vào tong (). Diêu kien lap là sô v'a nhap phi khác 0. Rõ ràng, không cân và không nên kiem tra diêu kien lap trc khi lân dâu th$c hien thân vòng lap. Trong trng hp này, câu trúc
  • 221. -w là l$a chn tôt hơn so vi câu trúc w . Chơng trình trong Hình 3.10 còn là mot ví d vê mot vòng lap không dùng con dêm de diêu khien vòng lap mà dùng mot biên canh hay c tr ng thái de dánh
  • 222. dâu diem kêt thúc. 6 dây, 0 là giá tr canh dánh dâu phân t d lieu cuôi cùng mà ngi dùng nhap vào chơng trình. 49
  • 223. ; ()
  • 224. =1; ;
  • 225. . b (1
  • 226. ); ;
  • 227. =
  • 229. D
  • 230. b F
  • 231. ; 1; ê
  • 232. . b (1
  • 236. )1 D
  • 237. b F
  • 238. E Hình 3.10: Vòng lap do-while dùng biên canh. 3.3.3. Vòng fo Vòng fo là câu trúc ho tr viec viêt các vòng lap mà sô lân lap dc kiem soát bang biên dêm. Chang h n, do n mã gi sau dây mô t thuat toán in ra các sô t' 1 dên b :
  • 239. Làm nhiem v sau dây dôi vi moi giá tr
  • 240. ca
  • 241. t 1 dên b : 50 In
  • 242. ra màn hình Do n mã gi dó có the dc viêt bang vòng
  • 243. ca C++ nh sau:
  • 244. (
  • 245. =1;
  • 246. =b ;
  • 247. ++)
  • 248. ,; Vi b có giá tr bang 3, do n trình trên cho kêt qu in ra màn hình là: 1,,3, Câu trúc tong quát ca vòng lap
  • 249. là:
  • 250. ( khi_to; diêu_kien_lap; cap_nhat) thân_vòng_lap Trong dó, bieu th c khi_to thng khi t o con dêm diêu khien vòng lap, diêu_kien_lap xác dnh xem thân vòng lap có nên ch y tiêp hay không (diêu kien này thng ch a ng4ng cuôi cùng ca con dêm), và bieu th c cap_nhat làm tang hay gim con dêm. Cung tơng t$ nh các câu trúc , w ..., nêu thân_vòng_lap có nhiêu hơn mot lenh thì cân phi bc nó trong mot cap ngoac {}. Lu ý rang cap ngoac dơn bao quanh bo ba khi_to, diêu_kien_lap, cap_nhat, cung nh hai dâu châm phy ngan cách ba thành phân dó, là các thành bat buoc ca cú pháp câu trúc
  • 251. . Ba thành phân dó cung có the là bieu th c rong nêu cân thiêt, nhng ke c khi dó van phi có d hai dâu châm phy. Trong hâu hêt các trng hp, câu trúc
  • 252. tong quát trên tơng dơng vi câu trúc lap w sau (ngo i le dc nói dên trong Mc 0): khi_to; w (diêu_kien_lap) thân_vòng_lap cap_nhat; Ta có the khai báo biên ngay trong phân khi_to ca vòng
  • 253. , chang h n dôi vi biên con dêm. Nhng các biên dc khai báo t i dó ch# có hieu l$c bên trong câu trúc lap (chi tiêt vê ph m vi ca biên se dc nói dên trong Mc 4.4). Ví d:
  • 254. (
  • 255. =1;
  • 256. =b ;
  • 257. ++)
  • 258. ,; Hình 3.11 minh ha cách s dng vòng lap
  • 259. de tính diem trung bình t' diem ca 10 môn hc (sô môn hc lu trong biên bj ). Ngi dùng se dc yêu câu nhap t' bàn phím diem sô ca 10 môn hc trong khi chơng trình cong dôn tong ca 10 diem sô này. Công viec mà chơng trình cân lap di lap l i 10 lân là: nhap diem ca mot môn hc, cong dôn diem dó vào tong diem. Dâu tiên vòng
  • 260. se tiên hành bc khi t o vi mc dích chính là khi t o biên dêm. Viec khi t o ch# dc tiên hành duy nhât mot lân. Trong ví d này, biên
  • 261. dc khai báo ngay t i vòng
  • 262. và khi t o giá tr bang 0. Tiêp theo vòng
  • 263. se tiên hành kiem tra diêu kien lap
  • 264. bj . Nêu diêu kien sai, vòng lap
  • 265. se kêt thúc. Nêu diêu kien dúng, thân vòng lap
  • 266. se dc th$c hien (nhap mot giá tr kieu
  • 267. rôi cong dôn vào biên ). Sau dó là bc cap nhat vi nhiem v tang biên dêm thêm 1. Kêt qu là vòng lap se ch y 10 lân vi các giá tr
  • 268. bang 0, 1, .., 9 (khi
  • 269. nhan giá tr 10 thì diêu kien lap không còn dúng và vòng lap kêt thúc). 51
  • 270. ; ()
  • 272. . k
  • 274. (
  • 275. =1;
  • 276. bj ;
  • 277. ++)
  • 279. A6 k=bj ; 1; Hình 3.11: Ví d
  • 280. vê vòng lap for. Xét mot bài toán khác: Tính lãi gi tiên tiêt kiem. Mot ngi gi mot so tiêt kiem kì h n 12 tháng vi sô tiên ban dâu là 1.000.000 VND, lãi suât 12% mot nam. Gi s tiên lãi hàng nam không dc rút ra mà gop chung vào vôn. Sô tiên
  • 281. nam trong so tiêt kiem sau moi nam (kì h n 12 tháng) dc tính theo công th c sau: amount = principal * (1 + interest_rate)year trong dó amount là sô tiên trong so tiêt kiem, principal là vôn ban dâu, interest_rate là lãi xuât hàng nam, và year là sô nam dã gi. Hãy tính và in ra sô tiên trong so tiêt kiem vào thi diem cuôi các kì 12 tháng hàng nam trong vòng 5 nam theo d ng 52 N A
  • 282. 1 xxxx xxxx Thuat toán cho bài toán dó nh sau: Khi to các biên amount, principal, interestRate In dê mc hai cot Year và Amount in deposit ra màn hình Vi year chy t 1 dên 5, thc hien các công viec sau: tính amount sau year nam theo công thc in amount theo cot Chơng trình hoàn ch#nh cho trong Hình 3.12. Trong dó có mot sô diem cân chú ý. Th nhât, vân dê dnh d ng các giá tr sô khi in ra màn hình. Dnh d ng mac dnh khi in ra màn hình là dnh d ng khoa hc, chang h n sô 1120000 he thap phân se có d ng 1.12e+006. Ta se nhìn thây kêt qu này nêu xóa b dòng sau khi chơng trình:
  • 283. x
  • 284. ();b F
  • 285. Dòng trên không hien th gì ra màn hình mà ch# dat câu hình cho các lân in tiêp theo. C the, x giúp quy dnh rang các giá tr th$c in ra theo d ng có dâu châm thap phân (he do lng Anh-My, tơng dơng vi dâu phy thap phân ca he mét), còn
  • 286. () quy dnh rang các giá tr th$c dc in ra vi do chính xác 2 ch sô sau dâu châm. Dó là hai trong nhiêu phép dnh d ng luông d lieu (stream manipulator). Các phép dnh d ng này nam trong th vien iomanip ca th vien chuan. Do dó, de s dng chúng, ta phi có dnh hng tiên x lý
  • 287. dâu tep mã nguôn (xem phân dâu ca chơng trình trong Hình 3.12).
  • 288. Th hai là s dng hàm th vien toán hc de tính luy th'a. C++ không có phép tính luy th'a. Thay vào dó, th vien cmath trong th vien chuan C++ cung câp hàm
  • 290. w( x, F) cho kêt qu là giá tr ca phép tính xy. De dùng hàm này, ta cung cân có dnh hng tiên x lý dâu tep mã nguôn.
  • 291. ++ b F 53 ; ()
  • 292. b
  • 293. ;
  • 294. F
  • 296. b A=1;
  • 297. N 'A
  • 298. ;F
  • 299. x
  • 300. ();b F
  • 301. 6F
  • 303. = /
  • 305. F '
  • 306. ; 1; ê
  • 307. N A
  • 308. 111111111 1,1111 3119811 1,E3,1936 ,1E63168 Hình 3.12: Tính tiên tiêt kiem hàng nam s d
  • 310. 3.4. Các lenh eak và o
  • 311. i
  • 312. e Nh dã gii thieu các mc trc, các vòng lap w ,
  • 314. dêu kêt thúc khi kiem tra bieu th c diêu kien dc giá tr và ch y tiêp thân vòng lap trong trng hp còn l i. Các lenh b k và