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

Giáo trình lập trình cơ bản với c++

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

Hồ Sĩ Đàm, Trần Thị Minh Châu, Lê Sỹ Vinh

GIÁO TRÌNH
LẬP TRÌNH CƠ BẢN VỚI
C++

NXB Đại học Quốc gia


M cl c
Gi i thi u...........................................................................................................6
Ch ơng 1.

M

u .........................................................................................8

1.1.

Ch ơng trình là gì?.............................................................................8

1.2.

L p trình là gì? ...................................................................................8

1.2.1.

M c cao

c l p v i máy tính ......................................................8


1.2.2.

M c th p ph thu c vào máy tính ..............................................10

1.3.

Ngơn ng l p trình và ch ơng trình d ch ..........................................10

1.4.

Mơi tr

1.5.

L i và tìm l i ....................................................................................13

1.6.

L ch s C và C++ .............................................................................14

1.7.

Ch ơng trình C++

ng l p trình b c cao.............................................................11

u tiên ...............................................................15

Bài t p .........................................................................................................19
Ch ơng 2.

2.1.

Bi n, ki u d li u và các phép toán ............................................20

Ki u d li u......................................................................................22

2.1.1.

Ki u d li u cơ b n ....................................................................22

2.1.2.

Ki u d li u d n xu t .................................................................24

2.2.

Khai báo và s d ng bi n .................................................................24

2.2.1.
2.2.2.

nh danh và cách

t tên bi n ...................................................24

Khai báo bi n .............................................................................25

2.3.

H ng.................................................................................................25


2.4.

Các phép toán cơ b n........................................................................26

2.4.1.

Phép gán.....................................................................................26

2.4.2.

Các phép toán s h c..................................................................26

2.4.3.

Các phép toán quan h ................................................................27
1


2.4.4.

Các phép tốn lơ-gic...................................................................28

2.4.5.

u tiên c a các phép tốn......................................................28

2.4.6.

T ơng thích gi a các ki u ..........................................................29


Bài t p .........................................................................................................30
Ch ơng 3.

Các c u trúc i u khi n ..............................................................31

3.1.

Lu ng i u khi n..............................................................................31

3.2.

Các c u trúc r nhánh .......................................................................32

3.2.1.

L nh if-else ...........................................................................32

3.2.2.

L nh switch .............................................................................38

3.3.

Các c u trúc l p ................................................................................42

3.3.1.

Vòng while...............................................................................42


3.3.2.

Vòng do-while ........................................................................45

3.3.3.

Vòng for ...................................................................................48

3.4.

Thu t toán và các c u trúc i u khi n l ng nhau...............................50

3.5.

Các l nh break và continue .........................................................53

3.6.

Bi u th c i u ki n trong các c u trúc i u khi n.............................56

Bài t p .........................................................................................................58
Ch ơng 4.

Hàm............................................................................................59

4.1.

C u trúc chung c a hàm ...................................................................60

4.2.


Cách s d ng hàm ............................................................................62

4.3.

Các hàm có s n.................................................................................60

4.4.

Bi n tồn c c và bi n

a ph ơng .....................................................63

4.4.1.

Ph m vi c a bi n ........................................................................63

4.4.2.

Th i gian s ng c a bi n..............................................................65

4.5.

Tham s ,

i s , và cơ ch truy n d li u cho hàm...........................66

2



4.5.1.

Truy n giá tr ..............................................................................66

4.5.2.

Truy n tham chi u......................................................................67

4.5.3.

Tham s m c

nh ......................................................................70

4.6.

Hàm trùng tên...................................................................................72

4.7.

Hàm

quy ......................................................................................73

Bài t p .........................................................................................................76
Ch ơng 5.
5.1.

M ng và xâu kí t!.......................................................................77


M ng m t chi u................................................................................77

5.1.1.

Kh i t o m ng ............................................................................78

5.1.2.

Trách nhi m ki m sốt tính h"p l c a ch# s m ng....................78

5.1.3.

M ng làm tham s cho hàm........................................................79

5.2.

M ng nhi u chi u .............................................................................81

5.3.

Xâu kí t!...........................................................................................82

5.3.1.

Kh i t o giá tr cho xâu kí t! ......................................................83

5.3.2.

Th vi n x lý xâu kí t! .............................................................84


5.4.

Tìm ki m và s$p x p d li u trong m ng ..........................................84

5.4.1.

Tìm ki m tuy n tính ...................................................................84

5.4.2.

Tìm ki m nh phân .....................................................................86

5.4.3.

S$p x p ch n ..............................................................................87

Bài t p .........................................................................................................89
Ch ơng 6.

Con tr% và b nh .......................................................................91

6.1.

B nh máy tính ...............................................................................91

6.2.

Bi n và

6.3.


Bi n con tr% ......................................................................................92

6.4.

M ng và con tr%................................................................................94

a ch# c a bi n....................................................................91

3


6.5.

B nh

ng .....................................................................................95

6.5.1.

C p phát b nh

6.5.2.

Gi i phóng b nh

ng.................................................................96
ng .............................................................96

6.6.


M ng

ng và con tr% .......................................................................97

6.7.

Truy n tham s là con tr% .................................................................99

Bài t p .......................................................................................................102
Ch ơng 7.

Các ki u d li u tr&u t "ng ......................................................104

7.1.

nh ngh'a ki u d li u tr&u t "ng b ng c u trúc struct .................104

7.2.

nh ngh'a ki u d li u tr&u t "ng b ng c u trúc class ...............110

7.2.1.

Quy n truy nh p .......................................................................113

7.2.2.

Toán t ph m vi và


7.2.3.

Hàm kh i t o và hàm h y.........................................................115

nh ngh'a các hàm thành viên ..................114

ng

i t "ng.............................................118

7.3.

L"i ích c a l p trình h

7.4.

Biên d ch riêng r ...........................................................................119

Bài t p .......................................................................................................123
Ch ơng 8.

Vào ra d li u...........................................................................125

8.1.

Khái ni m dòng d li u ..................................................................125

8.2.

T p v(n b n và t p nh phân ...........................................................126


8.3.

Vào ra t p .......................................................................................126

8.3.1.

M t p......................................................................................127

8.3.2.

óng t p...................................................................................128

8.3.3.

X lý t p v(n b n .....................................................................129

8.3.4.

X lý t p nh phân ....................................................................132

Bài t p .......................................................................................................136
Ph l c A.

Phong cách l p trình .................................................................138

4


Ph l c B.


D ch ch ơng trình C++ b ng GNU C++...................................142

Tài li u tham kh o .........................................................................................145

5


Gi i thi u
L p trình là m t trong nh ng b c quan tr ng nh t trong quy trình gi i quy t
m t bài tốn. Nhi u ngơn ng l p trình ã "c ra i nh m giúp chúng ta gi i
quy t các bài toán m t cách hi u qu nh t. M i ngơn ng l p trình có nh ng th
m nh và nh "c i m riêng. Các ngôn ng l p trình có th chia ra thành hai lo i
chính là ngơn ng l p trình b c th p (g n g)i v i ngôn ng máy), và ngơn ng
l p trình b c cao (ng n g)i v i ngôn ng t! nhiên c a con ng i).
Giáo trình này trang b cho sinh viên nh ng ki n th c cơ b n v l p trình. Ngơn
ng l p trình C++ "c s d ng
minh h a cho vi c l p trình. Vi c l!a ch n
C++ b i vì nó là m t ngơn ng l p trình h ng i t "ng chuyên nghi p "c
s d ng r ng rãi trên tồn th gi i
phát tri n các ch ơng trình t& ơn gi n
n ph c t p. Hơn th n a, s! m m d*o c a C++ cho phép chúng ta gi i quy t
nh ng bài toán th!c t m t cách nhanh chóng, ngồi ra cho phép chúng ta qu n
lý và t ơng tác tr!c ti p n h th ng, b nh
nâng cao hi u qu c a ch ơng
trình.
Giáo trình "c chia thành 8 ch ơng, m i ch ơng trình bày m t v n

thuy t trong l p trình. Các v n
lý thuy t "c mơ t b ng các ví d th!c t .

K t thúc m i ch ơng là ph n bài t p sinh viên gi i quy t và n$m rõ hơn v lý
thuy t. C u trúc c a giáo trình nh sau:
• Ch ơng 1: gi i thi u các khái ni m cơ b n v l p trình và quy trình gi i
quy t m t bài toán. Sinh viên s hi u v ngơn ng l p trình b c cao và ngơn
ng l p trình b c th p. Cu i ch ơng chúng tôi gi i thi u v mơi tr ng l p
trình c)ng nh ngơn ng l p trình C++.
• Ch ơng 2: Chúng tơi gi i thi u các khái ni m cơ b n v bi n s , h ng s ,
các ki u d li u cơ b n và các phép toán cơ b n. Sau khi h c, sinh viên s
bi t cách khai báo và s d ng bi n s , h ng s , và các phép toán trên bi n và
h ng s .
• Ch ơng 3: Tr ơng này gi i thi u v c u trúc ch ơng trình c)ng nh các c u
trúc i u khi n. C th là các c u r nhánh (if-else, switch), c u trúc l p (fordo, while-do, repeat) s
"c gi i thi u.
• Ch ơng 4: Ch ơng trình con và hàm s
"c gi i thi u
sinh viên hi u
"c chi n l "c l p trình “chia
tr ”. Chúng tơi s trình bày chi ti t v

6


cách khai báo và s d ng hàm, c)ng 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 li u ki u m ng và xâu kí t!.
Cách khai báo và s d ng m ng m t chi u c)ng nh m ng nhi u chi u và ví
d liên quan "c trình bày chi ti t ch ơng này.
• Ch ơng 6: ây là m t ch ơng t ơng i c thù cho C++, khi chúng tơi
trình bày v b nh và ki u d li u con tr%. C u trúc b nh , cách qu n lý
và xin c p phép b nh

ng thông qua vi c s d ng bi n con tr% s
"c
trình bày.
• Ch ơng 7: Trong ch ơng này chúng tơi s trình bày v c u trúc d li u tr&u
t "ng (c th là struct và class trong C++). Sinh viên s hi u và bi t cách
t o ra nh ng c u trúc d li u tr&u t "ng phù h"p v i các ki u i t "ng d
li u c n bi u di+n. Cu i ch ơng, chúng tôi c)ng gi i thi u v l p trình h ng
i t "ng, m t th m nh c a ngơn ng l p trình C++.
• Ch ơng 8: Chúng tôi gi i thi u v cách vào ra d li u. Sinh viên s
gi i thi u chi ti t v cách làm vi c v i các t p d li u.

7

"c


Ch ơng 1. M

u

Trong ch ơng này, chúng tôi s gi i thi u qua m t s khái ni m cơ b n v :
ch ơng trình, l p trình, ngơn ng l p trình.

1.1. Ch ơng trình là gì?
B n ch$c ch$n ã dùng qua nhi u ch ơng trình khác nhau, ví d nh ch ơng
trình so n th o v(n b n “Microsoft Word”. Ch ơng trình, hay ph n m m, "c
hi u ơn gi n là m t t p các l nh
máy tính th!c hi n theo. Khi b n a cho
máy tính m t ch ơng trình và yêu c u máy tính th!c hi n theo các l nh c a
ch ơng trình, b n ang ch y ch ơng trình ó.


1.2. L p trình là gì?
L p trình là có th hi u ơn gi n là quá trình vi t ra các l nh h ng d n máy
tính th!c hi n
gi i quy t m t bài toán c th nào ó. L p trình là m t b c
quan tr ng trong quy trình gi i quy t m t bài tốn nh mơ t Hình 1.1.

Hình 1.1: Quy trình gi i quy t m t bài tốn.

Quy trình trên có th
"c chia ra thành hai m c: m c cao c l p v i máy tính
(machine independent) và m c th p ph thu c vào máy tính (machine specific).
1.2.1. M c cao
M c cao
nh v n

c l p v i máy tính

c l p v i máy tính th ng "c chia thành ba b
, thi t k thu t toán và l p trình.

8

c chính là: xác


Xác nh v n : B c này nh ngh'a bài toán, xác nh d li u u vào, các
ràng bu c, yêu c u c n gi i quy t và k t qu
u ra. B c này th ng s d ng
bút/gi y và ngôn ng t! nhiên nh ti ng Anh, ti ng Vi t

mô t và xác nh
v n c n gi i quy t.
Thi t k thu t toán: M t thu t toán là m t b các ch# d n nh m gi i quy t m t
bài toán. Các ch# d n này c n "c di+n t m t cách hoàn ch#nh và chính xác
sao cho m i ng i có th hi u và ti n hành theo. Thu t tốn th ng "c mơ t
d i d ng mã gi (pseudocode). B c này có th s d ng gi y bút và th ng
không ph thu c vào ngơn ng l p trình. Ví d v thu t tốn “tìm c s chung
l n nh t (UCLN) c a hai s x và y” vi t b ng ngơn ng t! nhiên:
• B

c 1: N u x>y thì thay x b ng ph n d c a phép chia x/y.

• B

c 2: N u khơng, thay y b ng ph n d c a phép chia y/x.

• B c 3: N u trong hai s x và y có m t s b ng 0 thì k t lu n UCLN
là s cịn l i.
• B

c 4: N u không, quay l i B

c 1.

ho c b ng 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
L p trình là b c chuy n ,i thu t tốn sang m t ngơn ng l p trình, ph, bi n
là các ngơn ng l p trình b c cao, ví d nh các ngơn ng C++, Java. B c
này, l p trình viên s d ng m t ch ơng trình so n th o v(n b n
vi t ch ơng
trình. Trong và sau quá trình l p trình, ng i ta ph i ti n hành ki m th và s a
l i ch ơng trình. Có ba lo i l i th ng g p: l i cú pháp, l i trong th i gian
ch y, và l i lô-gic (xem chi ti t M c 1.5).

9


1.2.2. M c th p ph thu c vào máy tính
Các ngơn ng l p trình b c cao, ví d nh C, C++, Java, Visual Basic, C#, "c
thi t k
con ng i t ơng i d+ hi u và d+ s d ng. Tuy nhiên, máy tính
khơng hi u "c các ngơn ng b c cao. Do ó, tr c khi m t ch ơng trình vi t
b ng ngơn ng b c cao có th ch y "c, nó ph i "c d ch sang ngơn ng
máy, hay cịn g i là mã máy, mà máy tính có th hi u và th!c hi n "c. Vi c
d ch ó "c th!c hi n b i m t ch ơng trình máy tính g i là ch ơng trình d ch.

1.3. Ngơn ng l p trình và ch ơng trình d ch
Nh chúng ta th y, quá trình gi i quy t m t bài tốn thơng qua các b c khác
nhau
chuy n ,i t& ngôn ng t! nhiên mà con ng i hi u "c sang ngôn
ng máy mà máy tính có th hi u và th!c hi n "c. Ngơn ng l p trình th ng
"c chia ra thành hai lo i: ngôn ng l p trình b c th p và ngơn ng l p trình
b c cao.
Ngơn ng l p trình b c th p nh h"p ng (assembly language) ho c mã máy
là ngôn ng g n v i ngôn ng máy mà máy tính có th hi u "c.

c i m
chính c a các ngơn ng này là chúng có liên quan ch t ch
n ph n c ng c a
máy tính. Các h máy tính khác nhau s d ng các ngơn ng khác nhau. Ch ơng
trình vi t b ng các ngơn ng này có th ch y mà khơng c n qua ch ơng trình
d ch. Các ngơn ng b c th p có th dùng
vi t nh ng ch ơng trình c n t i u
hóa v t c . Tuy nhiên, chúng th ng khó hi u i v i con ng i và không
thu n ti n cho vi c l p trình.
Ngơn ng l p trình b c cao nh Pascal, Ada, C, C++, Java, Visual Basic,
Python, … là các ngơn ng có m c
tr&u t "ng hóa cao, g n v i ngơn ng t!
nhiên c a con ng i hơn. Vi c s d ng các ngôn ng này cho vi c l p trình do
ó d+ dàng hơn và nhanh hơn r t nhi u so v i ngôn ng l p trình b c th p. Khác
v i ngơn ng b c th p, ch ơng trình vi t b ng các ngơn ng b c cao nói chung
có th s d ng "c trên nhi u lo i máy tính khác nhau.
Các ch ơng trình vi t b ng m t ngôn ng b c cao mu n ch y "c thì ph i
"c d ch sang ngơn ng máy b ng cách s d ng ch ơng trình d ch. Ch ơng
trình d ch có th chia ra thành hai lo i là trình biên d ch và trình thông d ch.
M t s ngôn ng b c cao nh C, C++ yêu c u lo i ch ơng trình d ch "c g i
là trình biên d ch (compiler). Trình biên d ch d ch mã ngu n thành mã máy –
d ng có th th!c thi "c. K t qu c a vi c d ch là m t ch ơng trình th!c thi
"c và có th ch y nhi u l n mà không c n d ch l i. Ví d , v i ngơn ng C++
10


m t trình biên d ch r t ph, bi n là gcc/g++ trong b GNU Compiler Collection
(GCC) ch y trong các mơi tr ng Unix/Linux c)ng nh Windows. Ngồi ra,
Microsoft Visual C++ là trình biên d ch C++ ph, bi n nh t trong môi tr ng
Windows. M t s ngôn ng b c cao khác nh Perl, Python yêu c u lo i ch ơng

trình d ch g i là trình thơng d ch (interpreter). Khác v i trình biên d ch, thay
vì d ch tồn b ch ơng trình m t l n, trình thơng d ch v&a d ch v&a ch y
ch ơng trình, d ch n âu ch y ch ơng trình n ó.
Trong mơn h c này, C++ "c ch n làm ngôn ng th hi n. ây là m t trong
nh ng ngôn ng l p trình chuyên nghi p "c s d ng r ng rãi nh t trên th
gi i. Trong ph m vi nh p môn c a môn h c này, C++ ch# "c gi i thi u m c
r t cơ b n, r t nhi u tính n(ng m nh c a C++ s khơng "c nói n ho c ch#
"c gi i thi u sơ qua. Ng i h c nên ti p t c tìm hi u v ngơn ng C++, v "t
ra ngồi gi i h n c a cu n sách này.

1.4. Môi tr

ng l p trình b c cao

l p trình gi i quy t m t bài tốn b ng ngơn ng l p trình b c cao, b n c n có
cơng c chính là: ch ơng trình so n th o, ch ơng trình d ch dành cho ngơn ng
s d ng, và các th vi n chu-n c a ngôn ng s d ng (standard library), và
ch ơng trình tìm l i (debugger).
Các b

c cơ b n

xây d!ng và th!c hi n m t ch ơng trình:

1. So n th o: Mã ngu n ch ơng trình "c vi t b ng m t ph n m m so n th o
v(n b n d ng text và l u trên , 'a. Ta có th dùng nh ng ph n m m so n
th o v(n b n ơn gi n nh t nh Notepad (trong môi tr ng Windows) hay vi
(trong môi tr ng Unix/Linux), ho c các công c so n th o trong môi tr ng
tích h"p
vi t mã ngu n ch ơng trình. Mã ngu n C++ th ng t trong

các t p v i tên có ph n m r ng là .cpp, cxx, .cc, ho c .C (vi t hoa).
2. D ch: Dùng trình biên d ch d ch mã ngu n ch ơng trình ra thành các o n
mã máy riêng l* (g i là “object code”) l u trên , 'a. Các trình biên d ch ph,
bi n cho C++ là vc.exe trong b Microsoft Visual Studio hay gcc trong b
GNU Compiler v i các tham s thích h"p
d ch và liên k t
t o ra t p
ch y
"c. V i C++, ngay tr c khi d ch còn có giai o n ti n x lý
(preprocessing) khi các nh h ng ti n x lý "c th!c thi làm các thao
tác nh b, sung các t p v(n b n c n d ch hay thay th m t s chu i v(n b n.
M ts
nh h ng ti n x lý quan tr ng s
"c gi i thi u d n trong cu n
sách này.
11


3. Liên k t: M t t p mã ngu n th ng không ch a y
nh ng ph n c n
thi t cho m t ch ơng trình hồn ch#nh. Nó th ng dùng n d li u ho c
hàm "c nh ngh'a trong các t p khác ho c trong th vi n chu-n. Trình
liên k t (linker) k t n i các o n mã máy riêng l* v i nhau và v i các th
vi n có s n t o ra m t ch ơng trình mã máy hồn ch#nh ch y "c.
4. N p: Trình n p (loader) s n p ch ơng trình d i d ng mã máy vào b nh .
Các thành ph n b, sung t& th vi n c)ng "c n p vào b nh .
5. Ch y: CPU nh n và th!c hi n l n l "t các l nh c a ch ơng trình, d li u và
k t qu th ng "c ghi ra màn hình ho c , 'a.
Th ng thì khơng ph i ch ơng trình nào c)ng ch y "c và ch y úng ngay
l n ch y th

u tiên. Ch ơng trình có th có l i cú pháp nên khơng qua "c
b c d ch, ho c ch ơng trình d ch "c nh ng g p l i trong khi ch y. Trong
nh ng tr ng h"p ó, l p trình viên ph i quay l i b c so n th o
s a l i và
th!c hi n l i các b c sau ó.
!"
!

'

(
) *

&

+,

-

# $%&
Hình 1.2: Các b

c cơ b n

xây d ng m t ch ơng trình.

thu n ti n cho vi c l p trình, các cơng c so n th o, d ch, liên k t, ch y...
nói trên
"c k t h"p l i trong m t mơi tr ng l p trình tích h"p (IDE –
integrated development environment), trong ó, t t c các công o n i v i

ng i dùng ch# cịn là vi c ch y các tính n(ng trong m t ph n m m duy nh t.
IDE r t h u ích cho các l p trình viên. Tuy nhiên, i v i nh ng ng i m i h c
l p trình, th i gian u nên t! th!c hi n các b c d ch và ch y ch ơng trình
thay vì thơng qua các ch c n(ng c a IDE. Nh v y, ng i h c s có th n$m

12


"c b n ch t các b c c a quá trình xây d!ng ch ơng trình, hi u "c b n
ch t và c i m chung c a các IDE, tránh tình tr ng b ph thu c vào m t IDE
c th .
Ví d v các IDE ph, bi n là Microsoft Visual Studio – môi tr ng l p trình
th ơng m i cho mơi tr ng Windows, và Eclipse – ph n m m mi+n phí v i các
phiên b n cho c mơi tr ng Windows c)ng nh Unix/Linux, c hai u h tr"
nhi u ngơn ng l p trình.
Dành cho C++, m t s mơi tr ng l p trình tích h"p ph, bi n là Microsoft
Visual Studio, Dev-C++, Code::Blocks, KDevelop. M i mơi tr ng có th h
tr" m t ho c nhi u trình biên d ch. Ch.ng h n Code::Blocks h tr" c GCC và
MSVC Do C++ có các phiên b n khác nhau.
Có nh ng b n cài t khác nhau c a C++. Các b n ra i tr c chu-n C++ 1998
(ISO/IEC 14882) có th khơng h tr" y
các tính n(ng "c c t trong
chu-n ANSI/ISO 1998. B n C++ do Microsoft phát tri n khác v i b n C++ c a
GNU. Tuy nhiên, các trình biên d ch hi n i h u h t h tr" C++ chu-n, ta c)ng
nên ch n dùng các ph n m m này. Ngôn ng C++ "c dùng trong cu n sách
này tuân theo chu-n ISO/IEC 14882, còn g i là "C++ thu n túy" (pure C++).

1.5. L i và tìm l i
Trong và sau quá trình l p trình, chúng ta ph i ti n hành ki m th và s a l i
ch ơng trình. Có ba lo i l i th ng g p: l i cú pháp, l i run-time và l i lô-gic.

L i cú pháp là do l p trình viên vi t sai v i các quy t$c cú pháp c a ngơn ng
l p trình, ch.ng h n thi u d u ch m ph y cu i l nh. Ch ơng trình biên d ch s
phát hi n ra các l i cú pháp và cung c p thông báo v v trí mà nó cho là có l i.
N u trình biên d ch nói r ng ch ơng trình có l i cú pháp thì ch$c ch$n là có l i
cú pháp trong ch ơng trình. Tuy nhiên, l i là ch nào thì trình biên d ch ch# có
th ốn, và nó có th ốn sai.
L i run-time là l i xu t hi n trong khi ch ơng trình ang ch y. L i d ng này s
gây ra thông báo l i và ng&ng ch ơng trình. Ví d là khi ch ơng trình th!c hi n
phép chia cho 0.
L i lơ-gic có ngun nhân là do thu t tốn khơng úng, ho c do l p trình viên
g p sai sót khi th hi n thu t tốn b ng ngơn ng l p trình (ví d vi t nh m d u
c ng thành d u tr&). Khi có l i lơ-gic, ch ơng trình c a b n có th d ch và ch y
bình th ng, nh ng k t qu c a ch ơng trình a ra l i có tr ng h"p sai ho c

13


ho t ng c a ch ơng trình khơng nh mong "i. L i lô-gic là lo i l i khó tìm
ra nh t.
N u ch ơng trình c a b n d ch và ch y không phát sinh thơng báo l i, th m chí
ch ơng trình cho ra k t qu có úng v i m t vài b d li u test, i u ó khơng
có ngh'a ch ơng trình c a b n hồn tồn khơng có l i.
có th ch$c ch$n hơn
v tính úng $n c a ch ơng trình, b n c n ch y th ch ơng trình v i nhi u b
d li u khác nhau và so sánh k t qu mà ch ơng trình t o ra v i k t qu mong
"i.

1.6. L ch s C và C++
Ngôn ng l p trình C "c t o ra b i Dennis Ritchie (phịng thí nghi m Bell) và
"c s d ng phát tri n h i u hành UNIX. M t trong nh ng c i m n,i

b t c a C là c l p v i ph n c ng (portable), t c là ch ơng trình có th ch y
trên các lo i máy tính và các h i u hành khác nhau. N(m 1983, ngôn ng C ã
"c chu-n hóa và "c g i là ANSI C b i Vi n chu-n hóa qu c gia Hoa K/
(American National Standards Institute). Hi n nay ANSI C v n là ngơn ng l p
trình chun nghi p và "c s d ng r ng rãi
phát tri n các h th ng tính
tốn hi u n(ng cao.
Ngơn ng l p trình C++ do Bjarne Stroustrup (thu c phịng thí nghi m Bell)
phát tri n trên n n là ngơn ng l p trình C và c m h ng chính t& ngơn ng l p
trình Simula67. So v i C, C++ là ngơn ng an tồn hơn, kh n(ng di+n t cao
hơn, và ít ịi h%i các k0 thu t b c th p. Ngoài nh ng th m nh th&a k t& C,
C++ h tr" tr&u t "ng hóa d li u, l p trình h ng i t "ng và l p trình t,ng
quát, C++ giúp xây d!ng d+ dàng hơn nh ng h th ng l n và ph c t p.
B$t u t& phiên b n u tiên n(m 1979 v i cái tên "C with Classes" (C kèm l p
i t "ng)1 v i các tính n(ng cơ b n c a l p trình h ng i t "ng, C++ "c
phát tri n d n theo th i gian. N(m 1983, cái tên "C++" chính th c ra i, các
tính n(ng nh hàm o (virtual function), hàm trùng tên và nh ngh'a l i toán t
(overloading), h ng ... "c b, sung. N(m 1989, C++ có thêm l p tr&u t "ng,
a th&a k , hàm thành viên t'nh, h ng hàm, và thành viên ki u protected. Các b,
sung cho C++ trong th p k# sau ó là khn m u (template), không gian tên
(namespace), ngo i l (exception), các toán t ,i ki u d li u m i, và ki u d

1

Theo l i k c a Bjarne Stroustrup t i trang cá nhân c a ông t i trang web c a phịng thí nghi m AT&T
/>
14


li u Boolean. N(m 1998, l n u tiên C++ "c chính th c chu-n hóa qu c t

b i t, ch c ISO, k t qu là chu-n ISO/IEC 148822.
i kèm v i s! phát tri n c a ngôn ng là s! phát tri n c a th vi n chu-n C++.
Bên c nh vi c tích h"p th vi n chu-n truy n th ng c a C v i các s a ,i nh%
cho phù h"p v i C++, th vi n chu-n C++ cịn có thêm th vi n stream I/O
ph c v vi c vào ra d li u d ng dòng. Chu-n C++ n(m 1998 tích h"p thêm
ph n l n th vi n STL (Standard Template Library – th vi n khuôn m u
chu n)3. Ph n này cung c p các c u trúc d li u r t h u ích nh vector, danh
sách, và các thu t toán nh s$p x p và tìm ki m.
Hi n nay, C++ là m t trong các ngơn ng l p trình chuyên nghi p
r ng rãi nh t.

1.7. Ch ơng trình C++

"c s d ng

u tiên

Ch ơng trình ơn gi n trong Hình 1.3 s hi n ra màn hình dịng ch “Hello
world!”. Trong ch ơng trình có nh ng c i m quan tr ng c a C++. Ta s xem
xét t&ng dịng.

2

V(n b n này (ISO/IEC 14882:1998) sau ó
ISO/IEC 14882:2003.

3

"c phát hi n l i ch#nh s a vào n(m 2003, thành phiên b n


STL v n không n m trong th vi n chu-n mà là m t th vi n riêng do HP và sau ó là SGI phát tri n.

15


Hình 1.3: Ch ơng trình C++

u tiên.

Hai dịng u tiên b$t u b ng chu i // là các dòng chú thích ch ơng trình. ó
là ki u chú thích dịng ơn. Các dịng chú thích khơng gây ra ho t ng gì c a
ch ơng trình khi ch y, trình biên d ch b% qua các dịng này. Ngồi ra cịn có
d ng chú thích ki u C dùng chu i /* và */
ánh d u i m b$t u và k t thúc
chú thích. Các l p trình viên dùng chú thích
gi i thích và gi i thi u v n i
dung ch ơng trình.
Dịng th ba, #include <iostream> là m t
nh h ng ti n x lý
(preprocessor directive) – ch# d n v m t công vi c mà trình biên d ch c n th!c
hi n tr c khi d ch ch ơng trình. #include là khai báo v th vi n s
"c s
d ng trong ch ơng trình, trong tr ng h"p này là th vi n vào ra d li u
iostream trong th vi n chu-n C++.
Ti p theo là hàm main, ph n không th thi u c a m i ch ơng trình C++. Nó b$t
u t& dịng khai báo header c a hàm:
int main()

M i ch ơng trình C++ th ng bao g m m t ho c nhi u hàm, trong ó có úng
m t hàm có tên main, ây là nơi ch ơng trình b$t u th!c hi n và k t thúc.

Bên trái t& main là t& khóa int, nó có ngh'a là hàm main s tr v m t giá tr là
s nguyên. T& khóa là nh ng t& c bi t mà C++ dành riêng cho nh ng m c

16


ích c th . Ch ơng 4 s cung c p thông tin chi ti t v khái ni m hàm và vi c
hàm tr v giá tr .
Thân hàm main "c b$t u và k t thúc b i c p ngo c {}, bên trong ó là
chu i các l nh mà khi ch ơng trình ch y chúng s
"c th!c hi n tu n t! t&
l nh àu tiên cho n l nh cu i cùng. Hàm main trong ví d ang xét có ch a
hai l nh. M i l nh u k t thúc b ng m t d u ch-m ph y, các nh h ng ti n
x lý thì khơng.
L nh th nh t g m cout, tốn t <<, xâu kí t! "Hello world!", và d u ch m
ph y. Nó ch# th cho máy tính th!c hi n m t nhi m v : in ra màn hình chu i kí
t! n m gi a hai d u nháy kép – "Hello world!". Khi l nh "c th!c thi, chu i kí
t! Hello world s
"c g i cho cout – lu ng d li u ra chu-n c a C++,
th ng "c n i v i màn hình. Chi ti t v vào ra d li u s
"c nói n trong
Ch ơng 8. Chu i kí t! n m gi a hai d u nháy kép "c g i là m t xâu kí t
(string).
ý dịng
using namespace std;

n m g n u ch ơng trình. T t c thành ph n c a th vi n chu-n C++, trong
ó có cout "c dùng n trong hàm main, "c khai báo trong m t khơng gian
tên (namespace) có tên là std. Dịng trên thơng báo v i trình biên d ch r ng
ch ơng trình ví d c a ta s s d ng n m t s thành ph n n m trong khơng

gian tên std. N u khơng có khai báo trên, ti n t std:: s ph i i kèm theo tên
c a t t c các thành ph n c a th vi n chu-n "c dùng trong ch ơng trình,
ch.ng h n cout s ph i "c vi t thành std::cout. Chi ti t v không gian tên
n m ngoài ph m vi c a cu n sách này, ng i c có th tìm hi u t i các tài li u
[1] ho c [2]. N u khơng có l u ý c bi t thì t t c các ch ơng trình ví d trong
cu n sách này u s d ng khai báo s d ng không gian tên std nh
trên.
L nh th hai nh y ra kh%i hàm và tr v giá tr 0 làm k t qu c a hàm. ây là
b c có tính ch t quy trình do C++ quy nh hàm main c n tr l i m t giá tr là
s nguyên cho bi t tr ng thái k t thúc c a ch ơng trình. Giá tr 0 "c tr v
cu i hàm main có ngh'a r ng hàm ã k t thúc thành công.
ý r ng t t các l nh n m bên trong c p ngo c {} c a thân hàm u "c lùi
u dòng m t m c. V i C++, vi c này khơng có ý ngh'a v cú pháp. Tuy nhiên,
nó l i giúp cho c u trúc ch ơng trình d+ th y hơn và ch ơng trình d+ hi u hơn
i v i ng i l p trình. ây là m t trong các i m quan tr ng trong các quy c
v phong cách l p trình. Ph l c A s h ng d n chi ti t hơn v các quy c
này.
17


n ây ta có th s a ch ơng trình trong Hình 1.3
in ra l i chào "Hello
world!" theo các cách khác nhau. Ch.ng h n, ta có th in ra cùng m t n i dung
nh c) nh ng b ng hai l nh g i cout:
cout << "Hello "; cout << "world!";

ho c in ra l i chào trên nhi u dòng b ng cách chèn vào gi a xâu kí t! các kí t!
xu ng dịng (kí t! c bi t "c kí hi u là \n):
cout << "Hello \n world!\n";


18


Bài t p
1. Trình bày các b

c chính

gi i quy t m t bài toán.

2. T i sao c n ph i có ch ơng trình d ch, s! khác bi t gi a trình biên d ch
và trình thơng d ch?
3. S! khác bi t gi a ngôn ng l p trình b c cao và ngơn ng l p trình b c
th p?
4. Li t kê ra t t c các ngơn ng l p trình b c th p, b c cao mà b n bi t
5. Trình bày v mơi tr
6. Làm quen v i mơi tr

ng l p trình b c cao.
ng l p trình Dev-C.

7. Vi t m t ch ơng trình C++

hi n ra màn hình tên c a b n.

8. Trình bày s! khác bi t gi a C và C++.
9. Trình bày các lo i l i th

ng g p khi l p trình.


19


Ch ơng 2. Bi n, ki u d li u và các phép tốn
a s ch ơng trình khơng ch# có nh ng ho t ng ơn gi n nh là hi n th m t
xâu kí t! ra màn hình mà cịn ph i thao tác v i d li u. Trong m t ch ơng trình,
bi n là tên c a m t vùng b nh
"c dùng
l u d li u trong khi ch ơng
trình ch y. D li u l u trong m t bi n "c g i là giá tr c a bi n ó. Chúng ta
có th truy nh p, gán hay thay ,i giá tr c a các bi n, khi bi n "c gán m t
giá tr m i, giá tr c) s b ghi è lên.
#include <iostream>

. & /
&2

using namespace std;

"
0
! 3*

1

int total(pples;
int main()
{
int number)f*askets + ,;
int apple-er*asket;


. & /
" $&
*
45+& !
&* $6 /
/ 7

cout << ".nter number apples per baskets: ";
cin >> apple-er*asket;
8/

/
" &

9 : 0
< +& !

6

;

total(pples + number)f*askets / apple-er*asket;
cout << "0umber of apples is " << total(pples;
return 1;
}

Hình 2.1: Khai báo và s d ng bi n.

Hình 2.1 minh h a vi c khai báo và s d ng bi n. Trong ó, các dịng

int total(pples;
int number)f*askets + ,;
int apple-er*asket;

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ó ngh'a r ng total(pples,
number)f*askets, và apple-er*asket là d li u thu c ki u int, ngh'a là các
bi n này s gi giá tr ki u nguyên. Dòng khai báo number)f*askets có m t
i m khác v i hai dịng cịn l i, ó là number)f*askets "c kh i t o v i giá
tr 5. C++ quy nh r ng t t c các bi n u ph i "c khai báo v i m t cái tên


các

dòng

20


và m t ki u d li u tr c khi bi n ó "c s d ng. Các bi n thu c cùng m t
ki u có th
"c khai báo trên cùng m t dòng, cách nhau b i m t d u ph y.
Ch.ng h n, có th thay hai dòng khai báo cho number)f*askets, và
apple-er*asket b ng:
int number)f*askets + ,, apple-er*asket;

Ch ơng trình trong Hình 2.1 yêu c u ng i dùng nh p s táo trong m i gi%
(apple-er*asket), tính t,ng s táo (total(pples) v i d ki n ã bi t là s gi%
táo (number)f*asket), r i in ra màn hình. C th , dịng
cout << ".nter number apples per baskets: ";


in ra màn hình xâu kí t! .nter number apples per baskets: . ó là l i m i
nh p d li u, là h ng d n dành cho ng i s d ng ch ơng trình.
Dịng ti p theo
cin >> apple-er*asket;

c d li u "c ng i dùng nh p vào t& u vào chu-n – th ng là t& bàn
phím. Khi ch y l nh này, ch ơng trình s "i ng i dùng nh p vào m t giá tr
cho bi n apple-er*asket. Ng i dùng áp ng b ng cách gõ vào m t s
nguyên d i d ng chu i các ch s r i nh n phím Enter
g i các ch s ó
cho máy tính.
n l "t nó, máy tính bi n ,i chu i các ch s nó nh n "c
thành m t giá tr ki u nguyên r i chép giá tr này vào bi n apple-er*asket.
T ơng ng v i cout là i t "ng qu n lý dòng d li u ra chu-n c a th vi n
C++, cin là i t "ng qu n lý dòng d li u vào chu-n, th ng là t& bàn phím.
Ti p theo là l nh gán
total(pples + number)f*askets / apple-er*asket;

L nh này tính tích giá tr c a hai bi n number)f*askets và apple-er*asket
r i gán k t qu cho bi n total(pples, trong ó / là kí hi u c a phép nhân và +
là kí hi u c a phép gán.
L nh in k t qu ra màn hình
cout << "0umber of apples is " << total(pples;

hi n th liên ti p hai thành ph n: xâu kí t! "0umber of apples is " và giá tr
c a bi n total(pples.

21



Ngoài vi c in giá tr c a m t bi n, C++ còn cho phép ta in k t qu c a m t bi u
th c. Do ó, ta có m t l!a ch n khác là g p công vi c c a hai l nh trên (tính
tích hai bi n và in tích ra màn hình) vào m t l nh:
cout << "0umber of apples is " << number)f*askets /
apple-er*asket;

Khi ó, bi n total(pples v n "c dùng
l u tr k t qu c a phép tính tr
nên khơng cịn c n thi t, ta có th xóa b% dịng khai báo bi n này.
ý là l nh
trên dài và chi m c sang dòng th hai. C++ cho phép m t l nh n m trên nhi u
dòng, d u ch m ph y cu i m i l nh s giúp trình biên d ch hi u âu là k t thúc
c a l nh.

2.1. Ki u d li u
M i bi n ph i "c khai báo
l u gi giá tr thu c m t ki u d li u nào ó.
Ngơn ng l p trình b c cao th ng có hai lo i ki u d li u: các ki u d li u cơ
b n và các ki u d li u d n xu t.
2.1.1. Ki u d li u cơ b n
Ki u d li u cơ b n là ki u d li u do ngôn ng l p trình nh ngh'a s n. Ví d
nh các ki u s nguyên – char, int, long int. Bi n thu c ki u nguyên "c
dùng l u các s có giá tr nguyên. i v i ki u cơ b n chúng ta th ng quan
tâm n kích th c b nh c a ki u d li u, gi i h n giá tr mà ki u d li u ó
có th l u gi .
i v i các ki u d u ch m ng (floating-point)
l u các giá
tr thu c ki u s th!c, chúng ta cịn quan tâm n
chính xác c a ki u d li u

ó. Tài li u chu-n C++ khơng quy nh chính xác s byte c n dùng
l u các
bi n thu c các ki u d li u cơ b n trong b nh mà ch# quy nh yêu c u v
kích th c c a ki u d li u này so v i ki u d li u kia. Các ki u nguyên có d u,
signed char, short int, int và long int, ph i có kích th c t(ng d n. M i ki u
nguyên có d u t ơng ng v i m t ki u ngun khơng d u v i cùng kích th c.
Các ki u nguyên không d u không th bi u di+n giá tr âm nh ng có th bi u
di+n s giá tr d ơng nhi u g p ôi ki u có d u t ơng ng. T ơng t!, các ki u
ch m ng, float, double và long double c)ng ph i có kích th c t(ng d n.
B ng 2.1 li t kê m t s ki u d li u cơ b n c a C++ v i kích th c "c nhi u
b n cài t C++ s d ng.

22


Kích th c
thơng d ng
(byte)

Ki u

Mơ t

Ph m vi (t ơng ng v i kích th

char

ký t! /
s nguyên nh%


1

các kí t! ASCII
signed char: -128 1 127, ho c
unsighed char: 0 1 255

bool

giá tr Boolean

1

true ho c false

short

s nguyên

2

signed short: -327671 32767
unsigned short: 01 65536

int

s nguyên l n

4

signed int: 2147483648 1 2147483647

unsigned int: 0 1 -4294967296

long

s nguyên
r tl n

4

signed long: 2147483648 1 2147483647
unsigned long: 0 1 -4294967296

float

s th!c

4

+/- 1.4023x10-45 1 3.4028x10+38

double

s th!c v i
chính xác cao

8

+/- 4.9406x10-324 1 1.7977x10308

long

double

s th!c v i
chính xác
r t cao

8

+/- 4.9406x10-324 1 1.7977x10308

c)

B ng 2.1: M t s ki u d li u cơ b n trong C++.

M t s l u ý:
• Kích th c và ph m vi c a các ki u d li u cơ b n ph thu c vào h th ng
mà ch ơng trình "c biên d ch t i ó. Tuy nhiên, t t c các h th ng, ki u
char bao gi c)ng có kích th c là 1 byte; các ki u d li u char, short,
int, long ph i có kích th c t(ng d n; còn các ki u float, double, long
double ph i có
chính xác cao d n.
l u các kí t! ơn (có mã nh% hơn 256), ch.ng h n nh
• Ki u char dùng
ch cái La-tinh, ch s , hay các kí hi u. Trong C++, m t kí t! ơn "c
óng trong c p nháy ơn, ví d '('.
l u các kí t! có mã l n hơn 255, ta
có th s d ng ki u wchar_t.
23



• Ki u d li u bool ch# có hai giá tr true và false. Ta có th dùng bi n
thu c ki u này
l u câu tr l i c a nh ng câu h%i úng/sai ch.ng h n nh
"Có ph i index l n hơn 100?" hay l u các tr ng thái "Ta ã tìm th y giá tr
âm ch a?". Các giá tr true và false trong C++ th!c ra ch# là 0 và 1.
2.1.2. Ki u d li u d n xu t
Ki u d li u d n xu t là ki u d li u "c xây d!ng t& các ki u d li u cơ b n
b ng các toán t nh * (con tr%), & (tham chi u), [] (m ng), () hàm, ho c "c
nh ngh'a b ng cơ ch struct hay class. Các ki u d li u "c nh ngh'a
b ng cơ ch struct hay class còn "c g i là các ki u d li u có c u trúc ho c
ki u d li u tr&u t "ng. Chi ti t v các ki u d li u d n xu t s
"c trình bày
d n d n trong các ch ơng sau.

2.2. Khai báo và s d ng bi n
b$t u s d ng m t bi n, chúng ta ph i ti n hành hai b
m t cái tên h"p l và khai báo bi n.
2.2.1.

nh danh và cách

c:

t cho bi n

t tên bi n

nh danh (identifier) là thu t ng trong ngôn ng l p trình khi nói n tên (tên
bi n, tên hàm, tên l p…). nh danh là m t chu i 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.

nh danh không "c
b$t u b ng ch s và không "c trùng v i các t khóa (nh ng t& mang ý
ngh'a c bi t) c a ngơn ng l p trình. L u ý, C++ phân bi t ch cái hoa và ch
cái th ng.
Cách

t tên bi n tuân th theo cách

t tên

nh danh. Ví d v các tên bi n:

• _sinhvien, sinhvien_11, sinhVien_11 là các tên bi n h"p l khác nhau
• 11sinhvien, sinhviên, "sinhvien" là các tên bi n không h"p l
Tên bi n nên d+ c, và g"i nh
n công d ng c a bi n hay ki u d li u mà
bi n s l u tr . Ví d , n u c n dùng m t bi n l u s l "ng qu táo, ta có th
t tên là total(pples. Không nên s d ng các tên bi n ch# g m m t kí t! và
khơng có ý ngh'a nh a hay b.

24


×