You are on page 1of 194

T TR R N NG G I I H H C C M M T TP P. .

H HC CM M





L PH HIU
Bin son

GIO TRNH LP TRNH C++


2
TRNG I HC M TP.HCM




GIO TRNH LP TRNH C++
DNG CHO SINH VIN
THUC KHI NGNH K THUT
KHNG CHUYN V CNG NGH THNG TIN



Tc gi L Ph Hiu


THNH PH H CH MINH
3
LI NI U

C++ hin l ngn ng lp trnh (NNLT) c a chung v
s dng rng ri do tnh nng mnh m, a dng ca n.
y l NNLT c nhiu trng i hc v cao ng trong
v ngoi nc s dng ging dy lp trnh ban u cho
sinh vin.
Gio trnh Lp trnh C++ ny c vit nhm phc v cho
i tng l sinh vin cc h Cao ng v i hc thuc
khi ngnh K thut (Khng chuyn v Cng ngh Thng
Tin). Mc tiu ca gio trnh nhm cung cp kin thc c
bn v ngn ng lp trnh C++, gii quyt nhng bi
ton lp trnh trong nhiu lnh vc khc nhau nh: tnh ton,
k thut, sinh hc, qun l,
Vi s lng trang khim tn, gio trnh ny gii hn,
khng cp n cch tip cn lp trnh hng i tng
m ch nhn mnh n kiu lp trnh truyn thng, lp trnh
n th (module), theo tip cn hng cu trc. Kiu lp
trnh truyn thng l quan trng v theo kin c nhn l
bt buc phi ging dy cho ngi mi bt u hc lp trnh
trc khi chuyn sang hc lp trnh theo tip cn hng i
tng.
Gio trnh c t chc thnh 8 chng, cui mi chng
u c cu hi v bi tp cng c kin thc phn l
thuyt. Phn l thuyt c trnh by c ng, tp trung vo
nhng kin ct li, cn thit p dng trong vit m
4
chng trnh. Phn gii bi tp s c thc hin trong ti
liu khc. Cc chng trnh v d minh ha trong ti liu
c th nghim v chy tt trong mi trng Visual C++
6.0.
Gio trnh ny c th c dng lm ti liu cho sinh vin
t hc. Ging vin cng c th s dng tham kho trong
ging dy mn lp trnh.
Mc d c nhiu c gng nhng khng th trnh khi thiu
st, rt mong nhn c s nhn xt, ph bnh ca ng
nghip v bn c ti liu c hon thin hn.
Tc gi

5
Mc lc
B GIO DC V O TO _________________________________ 1
CHNG 1. MT S KHI NIM C BN V LP TRNH _____ 13
1. Thut ton (Algorithm) ________________________________ 13
1.1. Khi nim ________________________________________ 13
1.2. Cc c trng ca thut ton __________________________ 13
1.3. Cc cng c biu din thut ton _______________________ 14
2. Ngn ng lp trnh (NNLT) _____________________________ 15
3. Chng trnh (my tnh) _______________________________ 16
4. Cc bc xy dng chng trnh ________________________ 17
5. Cu hi v bi tp _____________________________________ 18
CHNG 2. CC YU T C BN CA NNLT C/C++ __________ 21
1. B k t (character set) ________________________________ 21
2. Danh hiu (identifier) __________________________________ 21
3. T kha (keyword) ____________________________________ 22
4. Ch thch (comment) __________________________________ 22
5. Cc kiu d liu c bn (base type) ______________________ 23
5.1. S nguyn ________________________________________ 23
6
5.2. S thc ( chnh xc n 6 ch s l) ________________ 23
5.3. S thc ( chnh xc kp 15 ch s l): _______________ 24
5.4. K t _____________________________________________ 24
6. Hng (constant) _______________________________________ 25
Mt s k t c bit: ________________________________________ 26
7. Bin (variable) ________________________________________ 27
8. Biu thc (expression) _________________________________ 29
9. Chuyn i kiu (type conversion) _______________________ 29
10. Cc ton t (operator) _________________________________ 30
10.1. Ton t s hc _____________________________________ 30
10.2. Ton t quan h (so snh) ____________________________ 30
10.3. Ton t logic ______________________________________ 31
10.4. Ton t gn _______________________________________ 31
10.5. Ton t iu kin ( ? : ) _____________________________ 32
10.6. Ton t tng (++), gim () mt n v _________________ 33
Biu thc c dng __________________________________________ 33
10.7. Ton t dch chuyn s hc ___________________________ 34
10.8. Ton t thao tc trn tng bt _________________________ 34
7
10.9. Ton t p kiu ( ni trn) ________________________ 34
10.10.Ton t ly a ch ca ( & ) ________________________ 34
10.11.Ton t sizeof: _____________________________________ 34
11. u tin v trt t kt hp cc ton t (precedence and
associativity) _____________________________________________ 35
12. Cu lnh (statement, instruction) ________________________ 36
13. Xut / Nhp d liu n gin trong C/C++ ________________ 37
14. Mt vi chng trnh C/C++ n gin ___________________ 39
15. Cu hi ______________________________________________ 46
16. Bi tp v php ton v biu thc ________________________ 49
CHNG 3. CC CU TRC IU KHIN (CONTROL
STRUCTURES) ____________________________________________ 62
1. Cu trc r nhnh (if then else ) __________________ 62
2. Cu trc la chn (switch . . .) ___________________________ 66
3. Cu trc lp while () _________________________________ 69
4. Cu trc lp do while () ____________________________ 71
5. Cu trc lp for () ___________________________________ 74
6. Cu lnh break _______________________________________ 77
7. Cu lnh continue (t dng) _____________________________ 78
8
8. Cu lnh goto ________________________________________ 78
9. Cu hi ______________________________________________ 79
10. Bi tp ______________________________________________ 91
10.1. Cu trc r nhnh ___________________________________ 91
10.2. Cu trc la chn ___________________________________ 92
10.3. Cu trc lp _______________________________________ 93
CHNG 4. HM (FUNCTION) ____________________________ 102
1. Khi nim __________________________________________ 102
2. Khai bo v nh ngha hm ___________________________ 103
3. Lnh return _________________________________________ 104
4. Cc dng hm _______________________________________ 104
4.1. Hm khng c tham s _____________________________ 104
4.2. Hm vi nhiu tham s _____________________________ 106
4.3. Hm nguyn mu (function prototype) _________________ 107
4.4. T chc mt chng trnh C/C++ (trn cng 1 tp tin) ___ 108
5. Cc phng php truyn tham s _______________________ 109
6. Phm vi (scope) v cp lu tr (storage class) ca cc i
tng __________________________________________________ 111
6.1. Phm vi _________________________________________ 111
9
6.2. Cp lu tr _______________________________________ 113
7. C ch gi hm v b nh stack ________________________ 120
8. Hm c tham s vi gi tr ngm nh (Function with
default arguments) ______________________________________ 123
9. Np chng hm (Function overloading) __________________ 124
10. Mt s gi khi thit k hm __________________________ 126
11. Mt s v d minh ha ________________________________ 127
12. Cu hi _____________________________________________ 127
13. Bi tp _____________________________________________ 131
CHNG 5. KIU MNG (ARRAY) _________________________ 134
1. Khi nim __________________________________________ 134
2. Khai bo & khi to gi tr cc phn t mng trong
C/C++ _______________________________________________ 134
3. Truy xut cc phn t ca mng _______________________ 136
4. Truyn tham s mng cho hm _________________________ 137
5. Cc thao tc c bn trn mng 1 chiu ___________________ 138
5.1. Nhp gi tr cho cc phn t mng. ____________________ 138
5.2. Xut gi tr cc phn t mng (ra mn hnh). ____________ 140
5.3. Thm 1 phn t vo mng. __________________________ 141
10
5.4. Xa mt phn t ra khi mng. _______________________ 142
5.5. Tm kim trn mng. _______________________________ 143
5.6. Sp xp mng. ____________________________________ 145
6. Cu hi _____________________________________________ 149
7. Bi tp _____________________________________________ 149
Mng 1 chiu _____________________________________________ 149
Mng 2 chiu _____________________________________________ 152
CHNG 6. CON TR (POINTER) __________________________ 153
1. Khi nim __________________________________________ 153
2. Khai bo bin con tr _________________________________ 153
3. Truy xut bin tr ___________________________________ 154
4. S hc con tr _______________________________________ 155
5. Lin h gia con tr v mng __________________________ 156
6. Con tr a cp _______________________________________ 157
7. Truyn tham s con tr cho hm _______________________ 158
8. Mng cc con tr ____________________________________ 158
9. T kha const vi con tr _____________________________ 159
10. Cp pht ng _______________________________________ 160
11
11. Con tr hm ________________________________________ 164
12. Con tr v chui k t ________________________________ 165
13. ng dng con tr ____________________________________ 167
14. S lc v kiu tham chiu (Reference) - Ch c trong C++. _ 167
15. Bi tp _____________________________________________ 168
CHNG 7. KIU STRUCT ________________________________ 175
1. Khi nim __________________________________________ 175
2. Khai bo v truy xut bin struct trong C ______________ 175
3. Lnh typedef ________________________________________ 177
4. Kiu enum __________________________________________ 178
Khai bo _________________________________________________ 178
5. Mng cc struct ______________________________________ 179
6. Con tr tr n bin kiu struct ________________________ 180
7. Truyn tham s kiu struct cho hm ____________________ 181
8. Kiu union __________________________________________ 181
9. Bi tp _____________________________________________ 182
CHNG 8. File __________________________________________ 183
1. Gii thiu chung _____________________________________ 183
12
2. Thao tc trn kiu file ________________________________ 183
2.1. M File ( lin kt knh nhp/xut vi file a ) ___________ 183
2.2. X l File ________________________________________ 184
2.3. ng File ________________________________________ 185
2.4. V d Vo/Ra File nh dng _________________________ 185
2.5. V d Vo/Ra k t _________________________________ 188
2.6. V d Vo/Ra File nh phn __________________________ 189
3. Bi tp _____________________________________________ 191
TI LIU THAM KHO ___________________________________ 193
13
CHNG 1. MT S KHI NIM C BN V LP
TRNH
1. Thut ton (Algorithm)
1.1. Khi nim
Thut ton l khi nim c s ca ton hc v tin hc.
Thut ton l phng php th hin li gii ca vn bi
ton.
Thut ton l dy cc thao tc, cc hng dn r rng, c
sp xp theo mt trnh t xc nh, sao cho 2 b x l
(ngi/my) khc nhau, vi cng iu kin u vo nh
nhau th sau mt s bc hu hn thc hin, s cho kt qu
ging nhau m khng cn bit ngha ca cc thao tc ny.
Cn ch l khng phi mi dy thao tc, ch dn no cng
u to ra thut ton. Phng php nu n, cch dng thuc,.
.. u khng phi l thut ton do cc thao tc, cc ch dn l
khng xc nh, khng r rng.
1.2. Cc c trng ca thut ton
Tnh xc nh: Cc thao tc ca thut ton phi xc nh, khng
c nhp nhng, m h c th d dng ci t trn mt h t ng
ha.
Tnh dng: Thut ton phi dng sau mt s hu hn bc thc
hin.
Tnh ng n: Thut ton phi cho kt qu ng theo yu cu
ca bi ton t ra.
14
Tnh ph dng: Thut ton c th c s dng li gii mt
lp bi ton tng t.
Tnh hiu qu: Thut ton cn ti u v s dng b nh v p
ng yu cu ca bi ton trong thi gian ngn nht c th c. Thc
t rt kh t c c 2 yu cu ny trong mt thut ton.
1.3. Cc cng c biu din thut ton
Ngn ng t nhin: l ngn ng lit k cc bc, m t thut
ton theo ngn ng t nhin ca con ngi.
V d: Thut ton xc nh tr ln nht trong 5 s nguyn.
B1. Gi a, b, c, d, e l 5 bin lu tr cc tr nguyn cho trc (nhp t
bn phm).
B2. Gi max l bin lu tr tr ln nht trong 5 s nguyn trn, v gi
s a c tr ln nht.
B3. Ln lt so snh tr ca max vi cc bin b, c, d, e cn li. Nu tr
ca max nh hn bt k bin no th gn tr ca bin cho max.
B4. Xut kt qu tr bin max ra mn hnh
Lu thut ton hay s khi (Flow chart): l cng c cho
php biu din thut ton mt cch trc quan. Thng ch c th dng
cng c lu i vi cc thut ton tng i ngn, c th c biu
din trong mt trang giy. Cc hnh c bn s dng trong lu :


15
Hnh oval m t im xut pht /
kt thc.

Hnh ch nht m t mt hay
nhiu ch th my cn thc hin.

Hnh bnh hnh m t thao tc
nhp/xut d liu.

Hnh thoi m t s r nhnh, la
chn, php kim tra iu kin

Mi tn ch hng lu chuyn
ca cc thao tc.

M gi (Pseudo code) gn ging nh ngn ng t nhin, nhng
c s dng cc cu trc chun ha (khai bo bin, ch thch, cu trc
iu khin, . . .) do ngi thit k quy nh.
Ngn ng lp trnh (Programming language) l h thng cc k
hiu cho php m t cc quy trnh tnh ton di dng vn bn.
2. Ngn ng lp trnh (NNLT)
Cc thnh phn c bn ca NNLT bao gm:
B k t (character set) hay bng ch ci dng vit
chng trnh.
C php (syntax) l b quy tc vit chng trnh.
Ng ngha (semantic) xc nh ngha cc thao tc, hnh
ng cn phi thc hin, ng cnh (context) ca cc cu lnh
trong chng trnh.
Hin c hng nghn NNLT c thit k, v hng nm li c
thm nhiu NNLT mi xut hin. S pht trin ca NNLT gn lin
16
vi s pht trin ca ngnh tin hc. Mi loi NNLT ph hp vi mt
s lp bi ton nht nh.
Phn loi NNLT:
Ngn ng my (machine language) hay cn gi l NNLT
cp thp c tp lnh ph thuc vo mt h my c th.
Chng trnh vit bng ngn ng my s dng bng ch ci
ch gm 2 k t 0, 1. Chng trnh ngn ng my c np
trc tip vo b nh v thc hin ngay.
Ngn ng lp trnh cp cao ni chung khng ph thuc vo
loi my tnh c th. Chng trnh vit bng NNLT cp cao
s dng b k t phong ph hn, v phi c chuyn i
sang dng m my my tnh c th hiu c bng
chng trnh dch. Mt s NNLT cp cao thng dng hin
nay: Pascal, C, C++, Java, Smalltalk, Basic, Ruby, Fortran,
Algol, Lisp, Prolog, Cobol,
3. Chng trnh (my tnh)
L tp hp hu hn cc ch th my c b tr, sp xp theo mt
trt t xc nh, nhm gii quyt yu cu ca bi ton t ra. Chng
trnh c vit bng mt NNLT c th no .
Cc chng trnh C/C++ (trong mi trng DOS) c to ra
bng 1 trnh son tho vn bn (EDITOR) nh: SK, NC Editor, VRES
. . . Hin nay, cc chng trnh dch u tch hp sn editor ring cho
php USER son thn, bin dch, kim li, lin kt v thc hin
chng trnh mt cch d dng.
17
Cc chng trnh ny (m ngun source code), thc cht l
dng ngn ng t nhin, do phi c bin dch li di dng m
my (object code) m my tnh c th hiu c. Vic ny c thc
hin bi chng trnh dch.
C 2 loi chng trnh dch:
Trnh thng dch (interpreter): mi lnh c dch sang m my
v cho thc hin ngay.
Trnh bin dch (compiler): ton b chng trnh ngun c
dch sang m my (tp tin.obj), sau trnh lin kt (linker) s
kt ni cc module chng trnh to thnh tp tin EXE.
Ni chung, mt chng trnh my tnh c b cc thnh 3 phn:

4. Cc bc xy dng chng trnh
B1. Xc nh ng yu cu ca bi ton: Cn xc nh phm vi, cc
gii hn, rng buc, cc gi thit ca bi ton. c bit cn khc
phc sc v mt tm l trong qu trnh tm hiu bi ton.
B2. Xy dng thut gii: Cn c kin thc lin quan n vn ang
gii quyt. Cn xc nh r thut ton s tc ng trn nhng i
tng (thng tin) no ? C bao nhiu i tng (bin) cn x l?
Mi bin c th c lu tr di dng no, kiu g ? Gi tr ban
u ca cc bin ? Hnh dung trc kt xut DL sau khi x l s
nh th no?
Nhp X l Xut
18
B3. Th hin thut gii bng lu thut ton (nu c).
B4. Ci t thut ton bng mt NNLT c th: Dng mt trnh son
tho VB to chng trnh ngun (source code) theo mt NNLT
no .
B5. Th nghim thut ton, nu sai quay li B2. Cn xc nh li ca
thut ton thuc loi no: li v mt c php (syntax error), li lc
thc hin chng trnh (run-time error), v li logic. Li c php
xy ra lc bin dch chng trnh, do vi phm cc quy nh v mt
c php ca NNLT ang s dng. Li ny tng i d khc phc.
Li run-time error nh: divide by zero, stack overflow, khng
b nh, Li logic (logic error) kh pht hin hn nhiu.
B6. Kt thc.
5. Cu hi v bi tp
Thut ton (Algorithm)
Thut ton l g?
Nu cc c trng cn c ca mt thut ton.
Cc cch biu din mt thut ton?
Ngn ng lp trnh (Programming language) l g?
Nu cc bc xy dng thut ton.
Danh hiu (Identifier)
Danh hiu c dng lm g?
Nh th no l mt danh hiu hp l?
Nguyn tc s dng danh hiu?
19
T kha l g?
c im ca cc t kha trong NNLT C/C++?
Kiu d liu (Data type)
Trnh by cc kiu d liu n gin m Anh (Ch)
bit.
Hng (Constant)
Hng l g?
Hng c s dng khi no?
Cho bit cch thc khai bo mt hng?
Cho v d v cch biu din hng nguyn, thc, k t,
chui k t.
Bin (Variable)
Bin l g?
Bin c s dng lm g?
Cho bit cch thc khai bo mt bin?
Hy cho bit cch thc lm thay i ni dung (gi tr) ca
mt bin?
Biu thc (Expression)
Biu thc l g?
Kiu ca biu thc do . . . . . . . . . . . . . . . .. quyt nh?
Khi no xy ra vic p kiu t ng?
Khi no cn phi s dng ton t p kiu?
20
Trnh by nguyn tc NNLT C/C++ tnh tr cc biu
thc?
Ton t
Hy trnh by cc ton t m Anh (Ch) bit.
Cho v d v ton t iu kin (.. .? .. ..: .. .).
Hy vit biu thc tng ng khng c ton t !:
! (x <= 5)
! (x > 5)
! (x > 2 && y!= 3)
! (x > 2 || y == 3)
! (x == 1 &&! (x!= 3) || x > 10)
! (x > 100 || x < 0 &&! (x == 0))
Cu lnh (Statement, Instruction)
Cho bit cc loi cu lnh trong C/C++ ? Cho v d.

21
CHNG 2. CC YU T C BN CA NNLT C/C++

1. B k t (character set)
NNLT C/C++ ch chp nhn cc k t sau:
Cc k t ch hoa: A, B, C,. .. , Z
Cc k t ch thng: a, b, c, . . . , z
Cc ch s: 0, 1, . . . , 9
Cc k t du: , . ! ? : . . .
Cc k t trng: ENTER, BACKSPACE, khong trng.
Cc k t c bit khc: + - * / ^ | # $ & % ( ) [ ] _ = ~ . .
.
2. Danh hiu (identifier)
Dng t tn cho cc i tng nh hng, bin, hm, . . .
di ti a ca 1 danh hiu (ty theo chng trnh dch) thng
l 31-32 k t.
Danh hiu hp l c bt u bng mt k t ch ci hoc du
gch ni (underscore), tip theo sau l dy cc k t ch hoc s hoc
du gch ni, v khng php c khong trng gia.
Nn t danh hiu theo cc gi sau:
t tn cho cc i tng mt cch gi nh (Mnemonic).
Tn hng c t bng ch hoa.
22
Tn bin, tn hm c t nh sau: t u tin bng ch thng,
cc t cn li bt u bng ch hoa.
Tn kiu d liu do USER nh ngha c bt u bng ch hoa.
Ch :
Mi danh hiu phi c khai bo trc khi s dng.
TRNH BIN DCH s bo li undefined symbol trong qu
trnh bin dch chng trnh nu vi phm nguyn tc ny.
C/C++ phn bit ch hoa v ch thng (Case sensitive).
Trong cng mt phm vi (scope), khng c t trng danh
hiu..
3. T kha (keyword)
L t dnh ring v c ng ngha xc nh do NNLT quy nh.
Mi NNLT u c mt b t kha ring. Ngn ng lp trnh C/C++
(version 3.1) th hin cc t kha di dng cc k t mu trng, cc
danh hiu di dng cc k t mu vng, s di dng mu xanh l, . .
.
4. Ch thch (comment)
c dng lm cho chng trnh d c, d hiu, d bo tr
hn.
Chng trnh dch s b qua nhng ni dung nm trong phn ch
thch.
C 2 loi ch thch:
Ch thch trn mt dng:
23
// . . . phn ch thch (cho n cui dng)
Ch thch trn nhiu dng:
/*... phn ch thch (c th tri di trn nhiu dng)... */
5. Cc kiu d liu c bn (base type)
5.1. S nguyn
Tn kiu: int
Kch thc: 2 bytes v c phm vi biu din gi tr 32768 . .
32767
Cc php ton p dng c trn kiu int::
Cc php ton s hc: +, -, *, /, %
Cc php ton so snh: <, <=, >, >=, ==, !=
Cc php ton dch chuyn s hc: >>, v <<
Cc php ton trn bit: ~ (not bit), & (and bit), | (or bit), ^
(xor bit)
5.2. S thc ( chnh xc n 6 ch s l)
Tn kiu: float
Kch thc: 4 bytes v c phm vi biu din gi tr 3.4E 38 . .
3.4E +38
Cc php ton p dng c trn kiu float:
Cc php ton s hc: + , -, *, / (khng c php ton %)
Cc php ton so snh: <, <=, >, >=, ==, !=
24
5.3. S thc ( chnh xc kp 15 ch s l):
Tn kiu: double (Mc nh trong Visual C++)
Kch thc: 8 bytes v c phm vi biu din gi tr 1.7E 308 . .
1.7E+308
Cc php ton p dng c trn kiu double: nh kiu float
5.4. K t
Tn kiu: char
Kch thc: 1 byte v c phm vi biu din gi tr 128 . . 127
Cc php ton p dng c trn kiu char:
Cc php ton s hc: +, -, *, /, %
Cc php ton so snh: <, <=, >, >=, ==, !=

m rng cc kiu d liu c s, C/C++ a thm cc tin t
(prefix): short, long, unsigned, signed vo trc tn cc kiu c s
nh sau:
Tn kiu Kch thc
unsigned char 1 byte (0 .. 256)
Char 1 byte (128 . . 127)
unsigned int 2 bytes (0 . . 65535)
(unsigned)
short int 2 byres (32768 . . 32767)
Int 2 bytes (32768 . . 32767)
25
unsigned long int 4 bytes (0 . . 4294967295)
(unsigned long)
long int 4 bytes (2147483648 . . 2147483647)
(long)
float 4 bytes (3.4E 38 . . 3.4E +38)
double 8 bytes (1.7E 308 . . 1.7E +308)
long double 10 bytes (3.4 E 4932 . . 1.1E+4932)
6. Hng (constant)
L i lng c gi tr khng thay i trong sut thi gian tn ti
ca n.
Tn hng phi l mt danh hiu hp l v phi c khai bo
trc khi s dng.
Hng c dng thay th cho cc con s ti ngha trong
chng trnh. Vic s dng hng nhng lc cn thit l mt phong
cch lp trnh tt v cn c khuyn khch.
Hng s nguyn: c th c biu din di dng thp phn, nh
phn, bt phn, v thp lc phn.
Hng s thc: c th c biu din di dng k php thng
thng hoc dng k php khoa hc.
K php thng thng (cn gi l s thc du phy tnh)
gm 2 phn, c phn cch bi du chm thp phn. V d:
1234.5
K php khoa hc (cn gi l s thc du phy ng) gm
phn nh tr (l mt s thc) v phn m (l mt s
26
nguyn). Hai phn ny c phn cch bi ch e hoc E. V
d: 1.2345 E+03.
Hng k t: c t trong cp nhy n v c th c biu din
bng:
K hiu trong bng m ASSCI. V d: A.
Escape character (k t thot) bao gm cp k t \n, vi n l
s th t ca k t trong bng m ASSCII. V d: \65, \7,
\n
Mt s k t c bit:
K hiu ngha
\n K t xung dng
\t K t TAB
\0 K t NULL
\ Du nhy n
\ Du nhy kp
\\ Du s cho ngc (Backslash)
. . . .

Hng chui k t: c t trong cp nhy i. Thc cht l
mng cc k t c k t kt thc chui l k t NULL, k hiu \0
Khai bo hng: thng c t trong phn khai bo ton cc
u chng trnh, ngay sau sau cc khai bo ch th tin x l. C 2
cch khai bo hng:
27
Dng ch th tin x l: #define <tn hng> <chui thay
th>
Dng t kho const: const <tn kiu> <tn
hng>=<gi tr>;
V d:
const int MAX = 10;
hay
#define MAX 10
7. Bin (variable)
L i lng c gi tr c th thay i bng ton t gn (k hiu =).
Bin c dng lu tr thng tin v cc i tng v c gi tr c
th, xc nh ti mi thi im trong chng trnh.
Tn bin phi l mt danh hiu hp l v khng c t trng vi
t kha. Nn t tn bin sao cho c tnh gi nh, khng di qu v
cng khng nn qu ngn. Nn trnh t tn bin trng vi tn cc
hm th vin (sin, cos, . . . ).
C/C++ cho php khai bo bin khp mi ni trong chng
trnh, min sao m bo nguyn tc Mi danh hiu trc khi s dng
phi c khai trc.
Cch khai bo bin:
<type> <variables list>;
Trong :
28
<type> l mt kiu d liu hp l bt k c trong C/C++.
<variables list> l mt hay nhiu bin, c phn cch bng
du ,.
Ch : lnh khai bo bin lun c kt thc bng du ;
V d:
khai bo bin k t
char ch; // khai bo bin k t
khai bo 2 bin nguyn:
int x, y; // khai bo 2 bin kiu nguyn
hoc
int x;
int y;

C th khai bo v ng thi khi to gi tr cho bin nh sau:
<tn kiu> <tn bin> = <gi tr>;
V d:
int tong = 0, x = 5, y = 7;
29
8. Biu thc (expression)
L cng thc tnh ton bao gm cc ton hng v cc ton t
tng ng. Cc ton hng c th l mt bin, hng, li gi hm. Bn
thn cc ton hng cng c th l mt biu thc con khc t trong
cp ngoc n, hnh thnh nn mt biu thc phc hp.
C cc loi biu thc thng dng sau: biu thc gn, biu thc s
hc, biu thc logic. c bit, biu thc logic trong C/C++ c
xem l c gi tr nguyn. Biu thc c tr khc 0 (k c s m) tng
ng vi mnh logic TRUE, v biu thc c tr = 0 tng ng vi
mnh logic FALSE.
Trong C/C++, biu thc lun tr v mt gi tr.
Kiu ca biu thc ph thuc vo kiu ca gi tr tr v.
9. Chuyn i kiu (type conversion)
Chuyn i kiu ngm nh: Trong cng 1 biu thc, nu cc
ton hng khng cng kiu vi nhau th trc khi tnh ton gi tr
ca biu thc, chng trnh dch s thc hin vic chuyn i kiu
ngm nh (nu c) theo nguyn tc Kiu c phm vi gi tr
biu din nh hn s c chuyn sang kiu c phm v gi tr
biu din ln hn. S chuyn i kiu ngm nh:
char int long float double long double
p kiu (type casting): Trong mt s trng hp, ta bt buc phi
s dng n ton t p kiu to ra mt biu thc hp l nh sau:
<tn kiu> (<biu thc>) hoc (<tn kiu>) <biu thc>
30
V d, to biu thc s hc hp l sau 8.0 % 3, ta cn thc hin
p kiu nh sau:
(int) 8.0 % 3
Hay
int (8.0 % 3)
10. Cc ton t (operator)
C/C++ rt giu v ton t. Sau y l mt s ton t thng
dng:
10.1. Ton t s hc
K
hiu
ngha S ngi Ton hng
+ Cng 2 int, float, double, char
- Tr 2 - nt -
* Nhn 2 - nt -
/ Chia 2 - nt -
% Modulo 2 int, char (khng c kiu s
thc)
10.2. Ton t quan h (so snh)
K
hiu
ngha
S
ngi
Ton hng
< Nh hn 2 int, float, double,
char
<= Nh hn hoc bng 2 - nt -
31
> Ln hn 2 - nt -
>= Ln hn hoc bng 2 - nt -
== So snh bng 2 - nt -
!= So snh khc nhau 2 - nt -
10.3. Ton t logic
K
hiu
ngha
S
ngi
Ton hng
! NOT logic 1 int, float, double, char
&& AND logic 2 - nt -
|| OR logic 2 - nt -
10.4. Ton t gn
Ton t gn dng thay i tr ca mt bin bng tr ca mt
biu thc.
K hiu: =
Biu thc gn c dng: <bin> = <biu thc>, trong <bin>
l mt danh hiu hp l (nm v tri), v <biu thc> (nm v
phi) l biu thc c cng kiu vi kiu ca <bin>.
Cch tnh tr ca biu thc gn: TRNH BIN DCH tnh tr ca
<biu thc>, sau gn tr ny cho <bin>. Ton b biu thc gn
ny cng tr v mt gi tr l tr ca <biu thc> va tnh c.
V d:
x = 1; // gn tr 1 cho bin nguyn x
x = 2*y; // tnh tr 2*y, sau gn kt qu tnh c cho bin x
32
z = x + 2*y; // tnh tr x+2*y, sau gn kt qu tnh c cho
bin z
a = sin(2*b); // gi hm th vin tnh sin(2*b), sau gn kt qu
cho a
C/C++ cho php vit gn cc biu thc gn bng cc ton t gn
sau:
Dng vit thng
thng
Dng vit thu
gn
ngha
i = i+<bt> i += <bt> T cng
i = i-<bt> i -= <bt> T tr
i = i*<bt> i *= <bt> T nhn
i = i/<bt> i /= <bt> T chia
i = i%<bt> i %= <bt> T modulo

10.5. Ton t iu kin ( ? : )
L ton t 3 ngi, v c dng:
<BT1> ? <BT2> : <BT3>
Trong :
<BT1> thng l mt biu thc so snh hay mt biu thc
logic
<BT2>, v <BT3> l mt biu thc thng thng no
Kiu ca biu thc iu kin ph thuc vo kiu ca <BT2>,
<BT3>.
33
Cch tnh gi tr biu thc iu kin
B1: Tnh tr ca <BT1>
B2: Nu <BT1> c tr !=0 th ton b biu thc iu kin s nhn tr
cho bi <BT2>. Ngc li th chng trnh dch s dng tr ca
<BT3> lm tr ca ton b biu thc iu kin.
V d
Biu thc iu kin tr v tr nh nht gia 2 s nguyn cho trc
x v y
(x < y) ? (x) : (y)
Biu thc iu kin tr v tr ln nht trong 3 s nguyn cho trc
a, b, c
(x > y) ? (x > z ? x : z) : (y > z ? y : z)
10.6. Ton t tng (++), gim () mt n v
Biu thc c dng
<bin>++ <bin>--
++<bin> --<bin>
S khc nhau gia 2 dng tin t v hu t ch ny sinh khi biu
thc nm trong mt biu thc khc nh sau:
Dng tin t: tr ca <bin> c thay i trc khi tham
gia biu thc chung
34
Dng hu t: biu thc chung s dng tr c ca <bin>, sau
<bin> mi c thay i tr.
10.7. Ton t dch chuyn s hc
K hiu ngha S ngi Ton hng
<< Dch tri 2 int
>> Dch phi 2 - nt -
10.8. Ton t thao tc trn tng bt
K hiu ngha S ngi Ton hng
! o bit 1 int
& AND bit 2 - nt -
| OR bit 2 - nt -
10.9. Ton t p kiu ( ni trn)
10.10. Ton t ly a ch ca ( & )
K hiu: &
B nh trong ca my tnh bao gm cc nh lin tip c nh
s t 0 n gii hn ca b nh. Mi bin khai bo trong chng trnh
s chim 1 vng nh c kch thc qui nh bi kiu khai bo cho
bin v c a ch l byte u tin c cp pht. Ta c th xc nh
a ch ca bin nh vo ton t & nh sau:
& <bin>
10.11. Ton t sizeof:
sizeof(<biu thc>) tr v kch thc (s bytes) ca biu thc.
35
sizeof(<kiu>) tr v kch thc (s bytes) ca kiu.
11. u tin v trt t kt hp cc ton t (precedence and
associativity)
Trong qu trnh tnh tr ca cc biu thc, NNLT C/C++ cn c
vo u tin v trt t kt hp ca cc ton t nh sau:
Ton t c u tin cao nht c thc hin trc
Trong trng hp ton hng gia 2 ton t c cng u
tin th trt t kt hp (phi hoc tri) ca ton t s qui nh
th t thc hin ca cc ton t.
Mc Ton t Trt t kt hp
1 () [] ->

2 ! ~ ++ -- - * & (type)
sizeof()

3 * /

4 +

5 << >>

6 < <= > >=

7 == !=

8 &

9 ^

10 |

11 &&

12 ||

13 ? :

14 = += -= *= /= %= . . .

36
12. Cu lnh (statement, instruction)
C 3 loi cu lnh:
Cu lnh n l mt biu thc c kt thc bng du ; v c
th tri di trn nhiu dng. Cu lnh n c dng: <bin> = <biu
thc>; hay <biu thc>; hay <li gi hm>;
Cu lnh ghp hay cn gi l khi lnh bao gm t 2 cu lnh tr
ln, v c t trong cp ngoc nhn { } nh sau:
{
<lnh 1>;
<lnh 2>;
. . .
<lnh n>;
}
Cu lnh iu khin c xy dng t cc cu trc iu khin
nh:
Cu trc r nhnh: cu lnh if else
Cu trc la chn: cu lnh switch ()
Cu trc lp: cu lnh for () , cu lnh while(), cu lnh
dowhile().
Ch :
Cu lnh ; l mt cu lnh rng, nhng hp l.
37
Khai bo bin, khai bo hm nguyn mu cng c kt
thc bng du chm phy ;)
13. Xut / Nhp d liu n gin trong C/C++
Xut d liu ra mn hnh:
Trong C/C++, dng hm printf(. . .) khai bo trong tp tin
tiu <stdio.h> (xem ti liu)
Trong C++, dng i tng cout v ton t << khai bo
trong <iostream.h> nh sau:
cout<< BT1[<<BT2<<BT3 . . .];
trong :
BT1, BT2, . . . l cc biu thc hp l (kiu char, int, float,
double, char*).
V d:
Cout << 65;
Cout << A;
Cout << A;
Cout << 65 << << ch << <<A<< << A\n;
Nhp d liu t bn phm:
Trong C/C++, ta dng hm scanf() khai bo trong tp
tin tiu <stdio.h> (xem ti liu)
38
Trong C++, ta dng i tng cin v ton t >> khai bo
trong <iostream.h> nh sau:
Cin >> var1 [ >> var2 >> var3 ];
trong :
var1, var2, l cc bin hp l (kiu char, int, float, double,
char*).
Lnh cin >> var yu cu c cc gi tr t bn phm cho bin var
vi cc qui c sau:
Cc gi tr s c phn cch bi cc k t trng (SPACE BAR,
TAB, ENTER). Khi gp mt k t khng hp l (du . i vi s
nguyn, ch ci i vi s, . . .) s kt thc vic c t cin. Cc k t
khng hp l ny s c xem xt trong ln c sau.
i vi gi tr k t, v xu k t du phn cch l SPACE BAR,
TAB, ENTER. Khng c khi nim k t khng hp l trong vic
nhp cc gi tr k t hay xu k t.
V d:
Gi s c cc khai bo sau:
int x,y;
double z;
char ch;
Ta c th vit cc lnh xut/nhp DL:
39
cin >> x >> y;
cin >> z;
cin >> ch;
cout << x << << y << << ch << < < z << \n;
Thng thng, nhp d liu cho bin ta dng cp cu lnh sau:
cout << Nhap tri cho bien :; // cu dn hng
cin >> var ; // nhp gi tr t bn phm cho bin var
Ch :
Lnh sau y l cu lnh hp l:
cin >> x, y, z;// ngha ch nhp tr cho bin x
nhp y tr cho 3 bin x, y v z:
cin >> x >> y >> z;
14. Mt vi chng trnh C/C++ n gin
Chng trnh rng ch c hm main()
// Null.cpp
void main(){
}
40
Gii thch:
Mt chng trnh C/C++ l tp hp nhiu hm, trong hm
main() l khng th thiu.
Dng u tin l tiu hm main(). void l t kha cho bit hm
main() khng tr v gi tr no. C th vit hm main() c tr tr v
nh sau:
int main(){
// cc cu lnh
return 0;
}
Phn t trong cp du { v du } l thn ca hm main().
Chng trnh trn l rng, khng thc hin thao tc no (Phn
nm gia cp du {} khng cha bt k cu lnh no). Tuy nhin
l chng trnh hp l.
Trong mi trng Visual C++:
bin dch: n t hp phm CTRL+F.
to ra tp tin .exe: n phm F7.
chy chng trnh: n t hp phm CTRL+F5.

Chng trnh in ra mn hnh dng ch HELLO C!.
// Hello.cpp
41
#include <iostream.h> // de su dung cout
void main() {
cout << HELLO C++\n;
}
Gii thch:
Trong C/C++ c 2 dng ch thch:
Ch thch trn dng: // . . . phn ch thch . . .
Ch thch trn 1 hoc nhiu dng: /* . . . phn ch thch . . .
*/
Ch thch thng c dng nu r chc nng, nhim v ca 1
hm, bin, hng. Phn ch thch ch c ngha i vi programmer,
chng trnh dch s b qua khng bin dch nhng ni dung nm
trong phn ch thch.
Dng u tin l ch th tin x l, yu cu chng trnh dch chn
ni dung ca tp tin <iostream.h> ti v tr khai bo ch th tin x l.
Tp tin <iostream.h> c gi l tp tin tiu , v c cha cc khai
bo, nh ngha hng, bin, hm lin quan n vic xut nhp d liu
trong c i tng cout v ton t <<.
Trong phn thn ca hm main() ch c 1 cu lnh duy nht, yu
cu chng trnh dch thc hin vic in dng ch HELLO C! t trong
cp nhy i.
Chng trnh m phng my tnh n gin.
42
// Calculator.cpp
#include <iostream.h>
void main() {
int x,y;
cout << Nhap tri cho cac bien x, y : ; cin >> x >> y;
cout << x << + << y << = << x+y;
cout << x << - << y << = << x-y;
cout << x << * << y << = << x*y;
//chu y, neu y=0 th Chng trnh dch se bao loi divide by zero
cout << x << / << y << = << x/y;
}
Chng trnh nhp vo 3 s nguyn, sau in ra mn hnh cho
bit s min, max ca 3 s ny.
// MinMax.cpp
#include <iostream.h>
void main() {
int a, b, c;
cout << Nhap 3 so a, b, c : ; cin >> a >> b >> c;
43
cout << MAX = << (a>b ? (a>c ? a : c) : (b>c ? b : c));
cout << MIN = << (a<b ? (a<c ? a : c) : (b<c ? b : c));
}
Chng trnh nhp 1 k t ch thng/hoa, sau in ra k t
ch hoa/thng tng ng.
// Kitu.cpp
#include <iostream.h>
#include <assert.h>//de su dung ham thu vien assert(<bt logic>)
void main() {
int kt;
cout << Nhap 1 ki tu chu(thuong/hoa) : ; cin >> kt;
assert(kt>=A && kt<=Z || kt>=a && kt<=z);
cout << Ki tu tng ung la ;
cout << char((kt>=a && kt<=z)?(kt-a+A):(kt-A+a));
}
Chng trnh nhp mt s ch thng, v mt s ch nm. Sau
in ra cho bit thng c bao nhiu ngy?
// NumDays.cpp
#include <iostream.h>
44
void main() {
int m, y;
cout << Nhap vao thang m = ; cin >> m;
cout << Nhap vao nam y = ; cin>>y;
// Kiem tra DL nhap tai day . . .
int m30 = (m==4 || m==6 || m==9 || m==11);
int leapyear = (y%400==0 || y%4==0 && y%!=100);
int numDays = (m==28 ? 28+leaoyear : m30 != 0 ? 30 : 31);
cout << So ngay cua thang << m << nam << y
<< la <<numDays;
}
Chng trnh nhp vo gi, pht, giy v tnh thi im 1 giy
sau .
// NextSec.cpp
#include <iostream.h>
void main() {
int h, m, s;
cout << Nhap gio, phut, giay : ; cin >> h >> m >> s;
45
// Kiem tra DL nhap tai day
++s>59 ? (++m>59 ? ++h : 0) : 0;
s %= 60;
m %= 60;
h %= 24;
cout << Thoi diem 1 giy sau : ;
cout << h/10<<h%10 << : << m/10<<m%10 << : << s/10<<
s%10;
}

Chng trnh nhp vo ngy, thng, nm v tnh ngy hm sau,
ngy hm trc?
// NextDays.cpp
#include <iostream.h>
void main() {
int d, m, y;
cout << Nhap ngay, thang, nam : ; cin >> d >> m >>y;
// Kiem tra DL nhap tai day
int m30 = (m==4 || m==6 || m==9 || m==11);
46
int leapyear = (y%400==0 || y%4==0 && y%!=100);
int numDays = (m==28 ? 28+leaoyear : m30 != 0 ? 30 : 31);
++d>numDays ? (d=1,++m>12 ? m=1,++y : 0) : 0;
cout << Hm sau l ngy << d<</<<m<</<<y<<endl;
}
15. Cu hi
1) Mt chng trnh C/C++ cha cc khai bo sau:
int i, j;
long ix;
short s;
float x;
double dx;
char c;
Hy xc nh kiu ca cc biu thc sau:
i + c
x + c
(int) dx + ix
i + x
47
s + j
ix + j
s + c
ix + c
2) Cho 2 s nguyn M, N. Hy m t cc v t logic sau bng
cc biu thc logic (theo M, N) tng ng trong NNLT
C/C++:
N l s m.
N l s dng.
N l s chn.
N l s l.
N l s m chn.
N l s m l.
N l s dng chn.
N l s dng l.
N l bi s ca M.
N l c s ca M.
N l s t nhin gm 3 ch s tha tnh cht P = Tng ca
cc ch s bng Tch ca cc ch s.
3) Cho a, b, c l 3 s t nhin i din cho 3 cnh ca tam
gic T. Hy m t cc mnh di y bng biu thc
logic (theo a, b, c) tng ng trong NNLT C/C++:
T l tam gic thng.
T l tam gic cn.
48
T l tam gic vung.
T l tam gic vung cn.
T l tam gic u.
4) Gi N l s t nhin ch nm. Hy m t mnh nh
ngha nm nhun bng biu thc logic (theo N) tng ng
trong NNLT C/C++ nh sau: Nm nhun l nm chia
chn cho 400 hoc nu n chia chn cho 4 th ng thi
khng c chia chn cho 100.
5) Cho M l ma trn vung cp n x n, n > 0. Gi i, j l cc ch
s hng v ct ca ma trn. Hy m t cc v t logic di
y bng cc biu thc logic (theo cc ch s i, j) tng ng
trong NNLT C/C++:
Cc phn t nm trn hng u tin.
Cc phn t nm trn hng cui cng.
Cc phn t nm trn ct u tin.
Cc phn t nm trn ct cui cng.
Cc phn t nm trn ng cho chnh.
Cc phn t nm trn ng cho ph.
Cc phn t nm cao hn ng cho chnh.
Cc phn t nm cao hn ng cho ph.
Cc phn t nm pha di ng cho chnh.
Cc phn t nm pha di ng cho ph.
Cc phn t nm trn mt ng song song vi ng cho
chnh.
Cc phn t nm trn mt ng song song vi ng cho
ph.
49
16. Bi tp v php ton v biu thc
Mc tiu
Lm quen vi mi trng Visual Studio 6.0
S dng php ton v biu thc gii mt s bi ton n
gin.
Yu cu
Bit cch to mi chng trnh, m chng trnh c trn
a, lu tr chng trnh,
Hiu c cu trc ca mt chng trnh C/C++ n gin.
Vit c mt s chng trnh c s dng php ton v biu
thc gii mt s bi ton n gin.
To mi chng trnh C/C++:
Cch 1:
Chn menu FileNew: (c th b bc ny)
Xut hin hp thoi New.
50

Chn mc Win32 Console Application, sau cung cp tn
v th mc ni s lu project v click vo nt OK.

G vo tn project
Xc nh v tr lu project
51
Chn mc An empty project, sau n nt Finish.

To file mi c tn dng *.cpp, chn menu FileNew
52

Chn mc C++ Source File, v t tn file trong hp vn bn
File name (Khng cn g phn m rng .cpp), sau chn
OK.
Cch 2:
Click vo biu tng New Text File
53

Chn menu FileSave, hoc n t hp phm CTRL+S, hoc
Click vo biu tng Save.

Lu tp tin, nh ch tn phn m rng phi l .cpp
G vo chng trnh u tin sau y:
void main()
{
// statements
Mn hnh son tho cho php g vo m ngun (source code)
Nhp tn file dng *.cpp
54
return; // c th b qua
}
Hoc
int main()
{
// statements
return 0;
}

bin dch
(BD):
(Cn thit phi
thc hin ln u tin)
Chn menu BuildCompile (to file
__.obj)
n t hp phm CTRL+F7
Click biu tng trn thanh Toolbar
bin dch v
lin kt:
(C th b qua)
Chn menu BuildBuild (to file
__.obj v file __.exe)
Chn menu BuildRebuild All
n phm F7
Click biu tng trn thanh Toolbar
55
bin dch, lin
kt v chy chng
trnh:
(Ch c th thc
hin sau khi BD)
Chn menu BuildExecute
n t hp phm CTRL+F5
Click biu tng trn thanh Toolbar

lu tr file chng trnh:
Dng t hp phm CTRL+S, hoc dng menu File->Save, hoc
dng biu tng save trn thanh toolbar.
to mi chng trnh trc tin cn phi ng chng trnh
ang chy (nu c) nh sau:
Chn menu FileClose Workspace

Chn Yes ng tt c cc ca s ti liu li.
m file to trc :
Chn biu tng Open, hoc n t hp phm CTRL+O,
hoc chn menu FileOpen
Chn file mun m, sau chn nt Open
56

G vo chng trnh th hai sau y:
#include <iostream.h>
void main()
{
cout << HELLO C++\n;
}
Kt qu sau khi bin dch (CTRL+F7) v cho thc hin chng
trnh (CTRL+F5):

57
Cu hi: C th s dng chng trnh trn vit thm c cc
chng trnh g?
G vo chng trnh sau:
#include <iostream.h>
void main()
{
cout << 1 + 2 = << 1+ 2 << \n;
cout << 1.0 / 2 = << 1.0 / 2 << \n;
cout << 1 / 2.0 = << 1 / 2.0 << \n;
cout << 1.0 / 2.0 = << 1.0 / 2.0 << \n;
cout << 11 % 8 = << 11 % 8 << \n;
cout << -11 % 8 = << -11 % 8 << \n;
cout << 11 % -8 = << 11 % -8 << \n;
cout << -11 % -8 = << -11 % -8 << \n;
cout << (1 + 2 > 1 * 2) = << (1 + 2 > 1 * 2) << \n;
cout << (1 + 2 <= 1 * 2) = << (1 + 2 <= 1 * 2) << \n;
cout << (B > a && 1 + 2 > 1 * 2) = << (B > a && 1 +
2 > 1 * 2) << \n;
58
cout << (B > a || 1 + 2 > 1 * 2) = << (B > a || 1 + 2 > 1
* 2) << \n;
cout << sizeof(int) = << sizeof(int) << \n;
cout << sizeof(double) = << sizeof(double) << \n;
cout << sizeof(long int) = << sizeof(Iong int) << \n;
cout << sizeof(1.0 / 2) = << sizeof(int) << \n;
cout << (4 & 5) = << (4 & 5) << \n;
cout << (4 | 5) = << (4 | 5) << \n;
cout << (4 ^ 5) = << (4 ^ 5) << \n;
cout << (2 << 3 )= << (2 << 3) << \n;
cout << (8 >> 3 )= << (8 >> 3) << \n;
}
Kt qu xut ra mn hnh:
59

Cu hi: mc tiu ca chng trnh trn l g ?
G vo chng trnh sau:
// chuong trinh doi do Fareinheit sang do Celsius
#include <iostream.h>
void main()
{
// B1. Nhap du lieu
double f, c;
cout << Nhap do Fareinheit f = ; cin >> f;
// B2. Xu ly
c = 5.0 / 9 * (f-32);
60
// B3. Xuat ket qua c
cout << Do Celsius tuong ung la << c << \n;
}
Kt qu sau khi nhp tr 50 cho bin f:



Cu hi: C th pht trin chng trnh trn vit thm c
cc chng trnh g ?
Sinh vin t vit cc chng trnh sau:
6) Vit chng trnh lm calculator n gin (+, -, *, /, %)
7) Vit chng trnh tnh chu vi, din tch hnh trn.
8) Vit chng trnh tnh chu vi, din tch hnh tam gic theo
3 cnh.
9) Vit chng trnh in tr o ngc ca s nguyn gm 3
ch s (ch s hng n v khc 0). V d, nu nhp vo
483 th in ra 384.
10) Vit chng trnh hon i tr ca 2 s nguyn.
61
11) Vit chng trnh nhp vo 3 s nguyn. In ra cho bit s
ln th nht, s ln th hai, v s nh nht.
12) Vit chng trnh nhp vo 1 k t. In ra cho bit:
M ASCII ca k t
K t ng sau v m ASCII ca k t .
K t ng trc v m ASCII ca k t .
13) Vit chng trnh nhp vo 1 k t. Sau in ra k t
hoa/thng tng ng ngc li.
14) Vit chng trnh th nghim ton t ++, --.
15) Vit chng trnh nhp vo 1 thi im (gi, pht, giy). In
ra cho bit thi im 1 giy sau ? / 1 giy trc ?
16) Vit chng trnh nhp nm y. In ra cho bit nm y c
nhun hay khng ?
17) Vit chng trnh nhp thng m, nm y. In ra cho bit
thng m, nm y c ti a bao nhiu ngy ?
18) Vit chng trnh nhp ngy d, thng m, nm y. In ra cho
bit ngy va nhp c hp l hay khng ?
19) Vit chng trnh nhp vo 1 b ngy thng nm. In ra cho
bit ngy hm sau l ngy my?
20) Vit chng trnh nhp vo 1 b ngy thng nm. In ra cho
bit ngy hm trc l ngy my?
62
CHNG 3. CC CU TRC IU KHIN (CONTROL
STRUCTURES)
Hu ht cc thut ton u c th c ci t bng 1 trong 3 cu
trc c bn sau:
Cu trc tun t: Cc cu lnh c thc hin ln lt theo th
t tuyn tnh t trn xung v t tri sang phi.
Cu trc r nhnh hoc la chn: mt trong nhng c im c
bn ca mt chng trnh my tnh l tnh d on v p ng.
Chng trnh phi d on tt c cc trng hp c th c ca bi
ton v phi p ng y cho tng trng hp ny. Nu khng
thut ton s cho kt qu khng ng.
Cu trc lp cho php th hin mt cch ngn gn mt s cu
lnh lp i lp li v bn cht. Khi s dng cu trc lp, cn phi bo
m tnh dng, tnh kt thc ca vng lp, trnh cho vng lp b qun,
b lp v tn (LOOP).
1. Cu trc r nhnh (if then else )
C php (syntax)
if (<K>)
<lnh1> ;
[else
<lnh2>;]
Trong
63
<K> thng l biu thc logic. Tng qut, <K> c th l
1 biu thc nguyn tnh (integral type)
Phn else l khng bt buc phi c. Cu lnh if khng c
phn else c gi l cu lnh if thiu.
<lnh1>, <lnh2> l cu lnh hp l bt k: cu lnh n,
hoc cu lnh ghp, hoc cu lnh iu khin.
ngha
Nu <K> tha th thc hin <lnh1> phn if, cn ngc li th
thc hin <lnh2> phn else.
Nh vy ch <lnh1> hoc <lnh2> c thc hin m thi.
S thc hin cu lnh (Xem lu c php)
B1: <K> c tnh tr.
B2: Nu <K> c tr 0 (tng ng vi mnh TRUE) th <lnh1>
trong phn if c thc hin.
Cn ngc li, nu <K> c tr = 0 (tng ng vi mnh FALSE)
th <lnh2> trong phn else c thc hin (nu c).
B3: Chuyn quyn iu khin sang cu lnh k tip sau lnh if.
Lu c php cu lnh if else
64

Ch
Coi chng qun cp du (<K>) sau t kha if.
if K
S1;
Coi chng d du ;
if (K) ;
S1;
Coi chng thiu cp du bao quanh {<khi lnh>}
if (K)
S1;
S2;

K
<Lnh else> <Lnh if>
False True
65
Mt s dng cu trc if else lng nhau
Dng 1
if (K1)
S1;
else
if (K2)
S2;
else
S3;
Dng 2
if (K1)
if (K2)
S1;
else
S2;
else
S3;
Dng 3
66
if (K1)
if (K2)
S1;
else
S2;
Dng 4
if (K1)
{
if (K2) S1;
}
else
S2;
2. Cu trc la chn (switch . . .)
C php (syntax)
switch(<BT>)
{
case <val1>: [<lnh1>; break;]
case <val2>: [<lnh2>; break;]
67
. . . .
case <valn>: [<lnhn>; break;]
[default: <lnh>; break;]
}
ngha
Ty theo gi tr ca <BT> so trng vi <val> ca nhn case no
th thc hin <lnh> tng ng cho n khi gp lnh break th thot
khi cu lnh switch().
y l cu trc tng qut
S thc hin cu lnh
B1: <BT> c tnh tr.
B2: Ln lt so snh tr ca <BT> va tnh c vi cc gi tr
<val
1
>, <val
2
>, sau nhn case. Nu so trng th <lnh
i
> tng
ng c thc hin, cho n khi gp lnh break.
Nu khng c nhn gi tr no so trng vi tr ca <BT> th
<lnh> phn default c thc hin (nu c).
B3: Thot khi lnh switch(), v chuyn quyn iu khin sang cu
lnh k tip.
Lu c php cu lnh switch
68

Ch
Coi chng qun lnh break;
Nu mun thc hin <lnh> trong mt s trng hp gi tr
<val
i
> sau nhn case, ta t cc <val
i
> gn nhau, v ghi
lnh ti <val
i
> cui cng ca nhm.
Cch vit cu lnh switch:
switch()
{
}
<BT>
Val
1
Val
2
.
.
.
Val
n
default
<Lnh
1
> <break>
<Lnh
2
> <break>
<Lnh
n
> <break>
69
3. Cu trc lp while ()
C php (syntax)
while (<K>)
<lnh>;
trong :
<K> thng l biu thc logic.
<lnh> c th l cu lnh n, khi lnh, hoc cu lnh iu
khin.
ngha
Chng no m iu kin cn tha th thc hin <lnh>.
S thc hin cu lnh (Xem lu c php)
B1: Tnh tr ca <K>.
B2: Nu tr ca <K>!=0 (k c s m tng ng vi mnh
logic TRUE), thc hin <lnh>, sau quay v B1.
Cn ngc li (<K>=0) th chuyn sang B3.
B3: Thot khi vng lp, v chuyn quyn iu khin sang cu lnh
k tip sau lnh while.
Lu c php cu lnh while
70


Nhn xt
Do <K> c kim tra trc, nn phn <lnh> ca vng
lp while c th khng c thc hin ln no.
bo m cho vng lp while() khng b qun, th phi
c t nht mt cu lnh trong phn thn vng lp c tc dng
lm thay i vic nh gi li <K> thot sau mi ln lp.
Ch
Coi chng qun cp du (<K>) sau t kha while.
while K // sai do thiu (K)
{
//
}
Coi chng d du ; sau cp du ()
K
<Lnh>
True
False
71
while (K) ;
{
//
}
Coi chng thiu cp du bao quanh khi lnh {<khi lnh>}
while (K)
S1;
S2;

4. Cu trc lp do while ()
C php (syntax)
do{
<lnh>;
}while (<K>);
trong :
<K> thng l biu thc logic.
<lnh> c th l cu lnh n, khi lnh, hoc cu lnh iu
khin.
72
ngha
Thc hin <lnh> cho n khi <K> khng cn c tha.
S thc hin cu lnh:
B1: Thc hin <lnh>.
B2: Tnh tr ca <K>.
B3: Nu tr ca <K> != 0 (k c s m tng ng vi mnh
logic TRUE), th quay v B1.
Cn ngc li (<K> c tr = 0) th chuyn sang B4.
B4: Thot khi vng lp, v chuyn quyn iu khin sang cu lnh
k tip sau lnh while.
Lu c php cu lnh do while

Nhn xt
Khc vi vng lp while(), phn <lnh> trong do
while() lun c thc hin t nht l 1 ln, do <K>
c kim tra sau.
<Lnh>
K
True
False
73
Trong trng hp vng lp do . . . while () b qun, ta nn
xem xt v hiu chnh li cc cu lnh trong phn thn vng
lp do while() c lin quan n <K> thot ca vng
lp.
Ch
Coi chng qun cp du ngoc trn bao quanh <K> sau t
kha while.
do {
//
} while K // sai do thiu (K)
Coi chng thiu du ; sau cp du ()
do {
//
} while (K) // sai do thiu ;
Coi chng thiu cp du bao quanh khi lnh {<khi lnh>}
do
S1;
S2;

74
while (K);
5. Cu trc lp for ()
C php (syntax)
for ([<phn khi to>] ; [<K>] ; [<phn hiu chnh>])
<lnh>;
Trong :
<phn khi to> l mt hay nhiu biu thc gn (c phn
cch bi du ,) c nhim v khi to gi tr ban u cho
cc bin m.
<K> thng l biu thc logic.
<phn hiu chnh> l mt hay nhiu biu thc gn (c
phn cch bi du ,) c nhim v thay i tr ca cc bin
<phn khi to>.
<lnh> c th l cu lnh n, khi lnh, hoc cu lnh iu
khin.
ngha
Tng t nh cu trc while, v thng c dng cho cu lnh
vi s ln lp xc nh.
S thc hin cu lnh
B1: Thc hin <phn khi to> (nu c).
B2: Tnh tr ca <K>.
75
B3: Nu tr ca <K>0 (k c s m tng ng vi mnh
logic TRUE), th thc hin <lnh>, sau thc hin <phn khi
to> (nu c) v quay v B2.
Cn ngc li (<K> c tr = 0) th chuyn sang B4.
B4: Thot khi vng lp, v chuyn quyn iu khin sang cu lnh
k tip sau lnh for.
Lu c php cu lnh for

Nhn

xt
<phn khi to> ch c thc hin duy nht 1 ln.
<Phn khi to>
<K
<Lnh>
<Phn hiu chnh>
False
True
76
Trong trng hp vng lp for b qun, ta nn xem xt v
hiu chnh li cc cu lnh trong phn thn vng lp for c
lin quan n <K> thot ca vng lp.
C th chuyn i qua li gia 2 cu trc lp while () v
for ().
Cc dng khc ca cu lnh for ()
Ch
Cc phn ca vng lp for c phn cch bng du chm
phy ;.
for (<KT>,<K>,<HC>) // sai dng du , phn cch cc phn
{
//
}
Coi chng d du ; sau cp du ()
for (<khi to>; <K>; <hiu chnh>) ; // d du ;
{
//
}
Coi chng thiu cp du bao quanh khi lnh {<khi lnh>}
for (<khi to>; <K>; <hiu chnh>)
77
S1;
S2;

6. Cu lnh break
Dng thot khi cu lnh switch().
Dng thot khi vng lp trong cng cha n. Chng
trnh dch s b qua cc cu lnh sau lnh break;
V d 1:
while (1)
{

if (K)
break; // nhy khi vng lp while(1)

}
V d 2:
while (1)
{

78
for (; ; )
{
if (K)
break; // ch thot khi vng lp for (; ; ) cha n

}

}
7. Cu lnh continue (t dng)
Khi gp cu lnh continue trong 1 vng lp, chng trnh
dch b qua cc lnh cn li trong thn vng lp ny bt
u mt ln lp mi.
Thng thng, ta c th thay th thut ton c s dng lnh
break, hoc lnh continue bng mt thut ton s dng cu
trc iu khin khc.
8. Cu lnh goto
Khi gp cu lnh goto case, vi case l nhn (c dng
identifier:)c t ti v tr no , chng trnh dch
chuyn quyn iu khin n cu lnh t ti v tr nhn v
thc hin lnh ny.
Cu lnh goto lm cho chng trnh kh theo di, kh kim
sot, lm mt tnh cu trc ca chng trnh.
79
Cu lnh goto t c dng v c th c thay th bng cc
cu lnh s dng cc cu trc iu khin khc.
9. Cu hi
Trnh by c php, ngha, lu v cho v d v cc cu
trc:
if else
switch ()
while ()
do while ()
for ( ; ; )
Cu no sau y l phn u ca cu lnh if hp l? i vi
cu lnh khng hp l, hy cho bit ti sao?
if ( delta > 0 )
if delta < 0
if ( delta == 0 )
if ( delta = = 0 )
if ( delta =< 0 )
if ( delta <= 0 )
if ( delta => 0 )
if ( delta >= 0 )
if ( delta != 0 )
if (delta ! = 0 )
if ( 1 + 2 )
if ( 2 2 )
80
Hy rt gn on chng trnh sau:
if ( a > b )
{
b = x;
a = 1;
}
else
{
b = x;
a = 0;
}
Hy rt gn on chng trnh sau:
if ( a > b )
{
a = b;
c = x;
}
else
81
{
a += b;
c = x;
}
Hy rt gn on chng trnh sau:
if ( a > b )
{
c = a;
}
else
{
c = a;
a = 0;
}
Hy rt gn on chng trnh sau:
if ( a > b )
{
a = 1;
82
c = x;
}
else
{
b = 2;
c = x;
}

Hy chuyn i cu lnh for thnh cu lnh while:
for ( int i = 0; i < 100; i++ )
cout << setw( 5 ) << i ;
Hy chuyn i cu lnh for thnh cu lnh while:
for ( int i = 2000; i > 0; i /= 2 )
cout << setw( 5 ) << i ;
Hy chuyn i cu lnh for thnh cu lnh while:
for ( int i = 0; i < 100; i++ )
{
for ( int j = 0; j < 200; j++ )
83
cout << setw( 5 ) << i * j;
cout << endl ;
}
Hy chuyn i cu lnh while thnh cu lnh for:
int count = 0;
while ( count < 100 )
{
cout << count;
count++;
}
Hy chuyn i cu lnh while thnh cu lnh for:
int count = 0;
while ( count < 100 )
{
count++;
cout << count;
}
Hy chuyn i cu lnh while thnh cu lnh for:
84
int x =10, i = x, y = 0, j = 0;
while ( i > j )
{
y += i; i;
}
Hy chuyn i cu lnh while thnh cu lnh do . . . while:
int x =10, i = x, y = 0, j = 0;
while ( i > j )
{
y += i; i;
}
Xt cc on lnh sau. Hy cho bit kt qu xut ra mn
hnh ca cc bin x, y. Gii thch.

int x = 0, y = 1;
for ( int i = 0; i < 5; i++ )
{
for ( int j = 0; j < 5; j++ )
85
if ( ( i + j ) % 2 == 0 )
x++;
y += x;
}

Nh bi tp trn

int x = 0, y = 1;
for ( int i = 0; i < 5; i++ )
for ( int j = 0; j < 5; j++ )
{
if ( ( i + j ) % 2 == 0 )
x++;
y += x;
}

Nh bi tp trn

86
int x = 0, y = 1;
for ( int i = 0; i < 5; i++ ) {
for ( int j = 0; j < 5; j++ )
if ( (x + y ) % 2 == 0 ) x++;
y += x;
}


Nh bi tp trn

int x = 0, y = 1;
for ( int i = 0; i < 5; i++ )
for ( int j = 0; j < 5; j++ )
{
if ( ( i + j ) % 2 == 0 )
x++;
else
y += x;
87
}

Nh bi tp trn

int i = 0, x = 0;
do{
if ( x %5 == 0 )
{
x++;
cout << setw( 4 ) << x;
}
i++;
} while ( i < 20 );

Nh bi tp trn

int i = 0, x = 0;
while ( i < 20 )
88
{
if ( x % 5 == 0 )
{
x += i;
cout << setw( 4 ) << x;
}
i++;
}

Nh bi tp trn

int i, x = 0;
for ( i = 1; i < 10; i*=2 )
{
x++;
cout << setw( 4 ) << x;
}

89
Nh bi tp trn

int i, x = 0;
for (i = 1; i < 10; i++)
{
if ( i % 2 == 1 )
x += i;
else
x ;
cout << setw( 4 ) << x;
}

Nh bi tp trn

int i, j, k, x = 0;
for ( i = 1; i < 5; i++ )
for ( j = 0; j < i; j++ )
{
90
k = (i + j 1);
if ( k % 2 == 0 )
x += k;
else
if ( k % 3 ==0 )
x += k 2;
cout << setw( 4 ) << x;
}

Nh bi tp trn

int i, j, k, x = 0;
for ( i = 1; i < 5; i++ )
for ( j = 0; j < i; j++ )
{
switch ( i + j 1 )
{
case 1:
91
case 0: x += 1; break;
case 1:
case 2:
case 3: x += 2; break;
default: x += 3;
}
cout << setw( 4 ) << x;
}

10. Bi tp
10.1. Cu trc r nhnh
1) Vit chng trnh nhp vo mt s nguyn v cho bit
s m hay dng, chn hay l.
2) Vit chng trnh hon i tr ca 2 bin nguyn.
3) Vit chng trnh gii phng trnh bc 1: Ax + B = 0.
4) Vit chng trnh gii phng trnh bc 2: Ax2 + Bx + C =
0.
5) Vit chng trnh gii phng trnh trng phng Ax4 +
Bx2 + C = 0.
6) Vit chng trnh nhp 3 s nguyn dng i din cho 3
cnh ca 1 tam gic. Hin th ra mn hnh cho bit l
tam gic u, vung cn, cn, vung, thng, hay khng
phi l 3 cnh ca tam gic.
92
7) Vit chng trnh nhp 3 s nguyn. Sau hin th ra mn
hnh cho bit s ln nht, s ln th hai, v s nh nht
bng 2 cch:
Cch 1: Dng cu trc IF . . . ELSE . . . lng nhau
Cch 2: Dng ton t iu kin: exp1 ? exp2 : exp3
10.2. Cu trc la chn
1) Vit chng trnh tnh s ngy ti a ca thng m, nm y
cho trc.
2) Cho trc 2 s nguyn v cc k hiu php ton sau: (+, -,
*, /, %). Vit chng trnh tnh v xut kt qu php tnh ra
mn hnh (c lu n li chia cho gi tr 0).
3) Vit chng trnh xp hng theo im nh sau (gi s
khng c im l):
im 1 4: Km
im 5: Trung bnh
im 6: Trung bnh kh
im 7: Kh
im 8 9: Gii
im 10: Xut sc
4) Vit chng trnh nhp vo 2 s nguyn v mt php ton
(+, -, *, /, %). In kt qu ca php ton ra mn hnh (c ch
n li chia khng).
5) B bi ty 52 l c nh s nh sau:
ch Hai Ba Bn Nm Su By Tm Chn Mi Bi
m Gi
93
C 1 2 3 4 5 6 7 8 9 10 11
12 13
R 14 15 16 17 18 19 20 21 22 23 24
25 26
Chun 27 28 29 30 31 32 33 34 35 36 37
38 39
Bch 40 41 42 43 44 45 46 47 48 49 50
51 52
Vit chng trnh nhp mt s c gi tr trong on [1..52], sau
in ra cho bit s tng ng vi l bi no? VD: vi N = 31 th hin
th ra mn hnh Nm Chun.
6) Tng t nh bi trn, cc qun c c nh s nh sau:
Tng S Tng Xe Pho M Cht
en 1 2 3 4 5 6 7
Trng 8 9 10 11 12 13 14
Vit chng trnh nhp mt s c gi tr trong on [1..14], sau
in ra cho bit s tng ng vi qun c no? VD: vi N = 11 th
hin th ra mn hnh Xe Trng.
10.3. Cu trc lp
1) Vit chng trnh in ra cc k t v th t ca cc k t
ny theo bng m ASCII (Ch ch in ra cc k t c m
ASCII > 32).
2) Vit chng trnh hin th ra mn hnh tt cc s trong on
[100 . . 999] tha tnh cht P=Tng cc ch s = Tch cc
ch s. VD: 123 l s tha tnh cht P.
94
3) Vit chng trnh tm tt c cc s gm 3 ch s tha tnh
cht c ch s hng chc bng na tng ca ch s hng
trm v ch s hng n v.
4) Vit chng trnh in cc s Amstrong (l s c tng lp
phng ca cc ch s bng chnh n).
5) Cho trc s nguyn n>0. Vit chng trnh tm tt c cc
b s Pithagore (x, y, z) tha mn:

< <
= +
n z y x
z y x
2 2 2

6) Cho trc s t nhin n (vi 1500 < n < 2000). Vit
chng trnh cho hin ra mn hnh cc cch phn tch s n
thnh dng tng lp phng ca 2 s t nhin x, y nh sau:
n = x
3
+y
3
.
7) S hon thin (perfect number) l s t nhin c tng cc
c s (k c 1) bng chnh n. VD: s t nhin 28 l s
hon thin. Vit chng trnh hin th ra mn hnh tt c
cc s hon thin < 1000.
8) Vit chng trnh tm s t nhin b nht c t nht 2 cch
biu din n thnh tng ca 4 s chnh phng i mt
khc nhau. V d, 78=9+16+9+4=36+25+16+1
9) Vit chng trnh nhp vo s n > 0. Sau tnh cc biu
thc tng gm n s hng nh sau:
S1 = 1 + 2 + 3 + . . .
S2 = 1 2 + 3 4 + . . .
S3 = 1 + 3 + 5 + 7 + . . .
S4 = 1 + 2 + 4 + . . .
S5 = 1! + 2! + 3! + . . .
95
10) Cho s t nhin n. Hy tnh:
2
n

n!

+
2 2 2
1
1
2
1
1
1
1
1
n
L
2 2 2 2 + + + + K (n du cn)

=
chan n neu
le n neu
n
!... 6 !. 4 !. 2
!... 5 !. 3 !. 1
! !
11) Cho s thc a v s t nhin n. Hy tnh:
a
n

a(a+1) (a+n-1)

) ( ) 1 (
1
...
) 1 (
1 1
n a a a a a a + +
+ +
+
+
K

12) Vit chng trnh m s ch s ca s t nhin n nhp
vo t bn phm.
13) Cho trc s t nhin n. Vit chng trnh tnh tng ca
cc ch s ca s n.
14) Cho trc s t nhin n. Vit chng trnh tnh v in tr o
ngc ca s n.
15) Cho trc s t nhin n. Vit chng trnh kim tra tnh
i xng ca s n. V d, vi n = 12321 th hin th thng
bo s 12321 l s i xng.
16) Cho trc s t nhin n. Vit chng trnh kim tra tnh
tun hon v in ra s chu k (nu c) ca s n. V d, vi
n=12121212 th in ra s 12121212 tun hon vi cc chu
k 12, 1212.
96
17) Cho trc s t nhin n. Vit chng trnh tnh s i ng
ca s n. V d, vi n = 1047 th s i ng l 9063.
18) Cho trc s t nhin n. Hy cho bit:
n c bao nhiu ch s ?
Tnh tng cc ch s ca n.
Tnh tch cc ch s ca n.
Tm ch s u tin ca n.
19) Cho 2 s t nhin a, b. Hy:
Tm c s chung ln nht ca chng.
Tm bi s chung nh nht ca chng.
20) Cho s t nhin n. Hy xy dng s m bng cch loi b i
trong s n tt c cc ch s 0 v ch s 5 (th t ban u
ca cc ch s c gi nguyn). V d, vi n = 50915509
th m = 919.
21) Vit chng trnh in ra mn hnh bng cu chng theo
chiu dc v theo chiu ngang.
22) Trm tru n c, tru ng n 5. tru nm n 3, ba tru gi
n 1. Vit chng trnh hin th s tru theo tng loi.
23) Vit chng trnh kim tra xem 2 s t nhin a, b c
nguyn t cng nhau?
24) Vit chng trnh nhp s nguyn n > 0 v mt s nguyn
h ch h (c gi tr 2, 8 hoc 16). Sau hin th ra mn
hnh tr tng ng ca N di dng ch nh bi h h (nh
phn, bt phn, hoc thp lc phn).
VD: nhp n = 65, h = 2 In ra : 0000000001000001 B
97
25) Vit chng trnh kim tra xem s n > 0 nhp vo t bn
phm c phi l s nguyn t?
26) Vit chng trnh nhp vo s n > 0 v hin th ra mn hnh
tt c cc s nguyn t < n.
27) Vit chng trnh nhp vo s n > 0 v hin th ra mn hnh
n s nguyn t u tin.
28) Dy s Fibonacci: 1 1 2 3 5 8 13 21 34 55 Vit
chng trnh kim tra xem s N nhp vo c phi l s
Fibonacci?
29) Vit chng trnh nhp vo s n>0 v hin th ra mn hnh
cc s Fibonacci < n.
30) Vit chng trnh nhp vo s n>0 v hin th ra mn hnh
n s Fibonacci u tin.
31) Vit chng trnh v cc hnh sau y vi h l chiu cao
nhp vo t bn phm: VD: vi h = 5
* * * * * * * * * * * *
* * * * * * * * * * * *
* * * * * * * * * * * *
* * * * * * * * * * * *
* * * * * * * * * * * *
* * * * * * * * * * * *
* * * * * * * *
* * * * * * * *
* * * * * * * *
98
* * * * * * * * * * * *
* *
* * * * *
* * * * * * *
* * * * * * * * *
* * * * * * * * * * * * * * * * * *

* * * * * * * * * * * * * * * * * *
* * * * * * * * *
* * * * * * *
* * * * *
* *
32) Vit chng trnh nhp vo s n > 0 v hin th ra mn hnh
theo dng sau:
VD: vi n = 5
1 2 3 4 5 A B C D E
2 3 4 5 1 B C D E A
3 4 5 1 2 C D E A B
4 5 1 2 3 D E A B C
99
5 1 2 3 4 E A B C D
33) Vit chng trnh ln lt nhp vo cc tr nguyn cho n
khi nhp tr 0 th dng. Hy tnh:
S lng cc s nhp tha tiu chun P (V d: l s
m, l s l, l s nguyn t, l s Fibonacci, )
Tng cc s nhp tha tiu chun P.
Trung bnh tng cc s nhp tha tiu chun P.
34) Vit chng trnh phn tch s nguyn n > 0 thnh tch cc
tha s nguyn t theo cc dng sau: V d, vi n = 120 th:
Dng 1: 120 = 2 * 2 * 2 * 3 * 5
Dng 2: 120 = 2 ^ 3 * 3 * 5
35) Vit chng trnh nhp vo cp ta x, y < 10. Sau v
du * ti ta (x,y) va nhp nh sau: V d, nhp x =
8, y = 5



1 2 3 4 5 6 7 8 9 10
1 .
2 .
3 .
100
4 .
5 . . . . . . . . . . . . . . . . *
6
7
8
9
10
36) Vit chng trnh tnh cn bc 2, cn bc 3, cn bc 4, cn
bc N ca s nguyn A, (N > 0, A > 0) theo h thc truy
hi sau:
Cn bc 2:

+
=
=

2
1
1
1
0
n
n
n
x
A
x
x
x

Cn bc 3:

+
=
=

3
2
1
2
1
1
0
n
n
n
x
A
x
x
x

Cn bc 4:
101

+
=
=

4
3
1
3
1
1
0
n
n
n
x
A
x
x
x

Mt cch tng qut vi cn bc N:

+
=
=

n
x
A
x n
x
x
n
n
n
n
1
1
1
0
) 1 (
1

37) Cho trc sai s . Vit chng trnh tnh E
x
, Sin(x),
Cos(x) theo cc cng thc khai trin sau:
...
! 3 ! 2 ! 1
1
3 2
+ + + + =
x x x
E
x

...
! 7 ! 5 ! 3
) sin(
7 5 3
+ + =
x x x
x x
...
! 6 ! 4 ! 2
1 ) cos(
6 4 2
+ + =
x x x
x

102
CHNG 4. HM (FUNCTION)
1. Khi nim
gii quyt mt vn tng i ln, phc tp, ta thng c
khuynh hng phn chia vn ban u thnh nhng vn con nh
hn. V t nhng vn con ny, ta li tip tc phn r thnh nhng
vn con nh hn na (nu c) ... cho n khi gp vn con s
cp c th thy ngay cch gii quyt. Cch tip cn ny p dng t
tng chia tr v c gi l phng php phn tch t trn
xung (Top Down Analysis). Mi vn con l mt n th
(module) m trch gii quyt mt chc nng c th, xc nh. Cc
n th lin lc vi nhau thng qua cc thng s.
Ta c th xem hot ng ca hm nh hot ng ca mt hp en.
Cng mt d kin vo s cho ra cng kt qu.
Hu ht cc NNLT cp cao (C, C++, PASCAL, FOX . . .) u h
tr phng php lp trnh cu trc cho php t chc chng trnh my
tnh thnh nhiu n th (module). Mi n th chng trnh tng
ng vi 1 hm (trong C/C++).
C 2 loi hm trong NNLT C/C++:
Hm th vin do chng trnh dch cung cp.
Hm t to do USE R nh ngha.
Hm th vin (library functions): chng trnh dch C/C++
cung cp mt th vin s cc hm tin ch gip gim nh cng sc
lp trnh v cho php USER tp trung nhiu hn vo logic ca vn
ang gii quyt. s dng cc hm ny trong chng trnh, cn chn
vo u chng trnh cc tp tin tiu cha cc khai bo v nh
103
ngha hng, bin, hm nguyn mu, . . . bng cc ch th tin x l
#include <tn tp tin>.
Hm t to: Ngoi ra, C/C++ cho php USER nh ngha thm
cc hm khc phc v cho nhu cu lp trnh ca mnh.
2. Khai bo v nh ngha hm
Gm c 2 phn: dng tiu v phn thn hm
[<kiu gi tr tr v>] <tn hm>([<danh sch cc tham s>])
{
// cc khai bo cc b
. . . .
// cc cu lnh
. . . .
}
Trong :
<kiu gi tr tr v>:
M t kiu d liu ca gi tr m hm s tr v cho ni
gi n. Ni chung, gi tr tr v ca hm c th thuc mt
kiu d liu hp l bt k, ngoi tr C/C++ khng cho
php tr v mt bin kiu mng.
Nu ta b qua, khng m t <kiu gi tr tr v> th
chng trnh dch s ngm hiu l kiu int.
104
M t <kiu gi tr tr v> l void nu ta mun hm
khng tr v gi tr no (hm ny tng ng vi th
tc trong PASCAL).
<tn hm>: l danh hiu hp l
<danh sch cc tham s> c dng:
<tn kiu> <tn bin>, <tn kiu> <tn bin>,
Phn thn hm t trong cp du { }, v cha cc cu lnh
m t hot ng ca hm.
3. Lnh return
Hm sau khi c khai bo v nh ngha, c th c gi thc
hin bng li gi hm trong chng trnh. Hot ng ca c kt
thc theo 1 trong 3 cch nh sau:
Trng hp hm c gi tr tr v l void: hm kt thc hot
ng sau khi thc hin cu lnh cui trc du } sau cng,
hoc nu ta mun hm kt thc sm trong iu kin no
th dng lnh return;
Trng hp hm c gi tr tr v khc void: Khi gp lnh
return <biu thc>; chng trnh dch s kt thc hot
ng ca hm, v tr ca <biu thc> c tr v cho ni gi
hm.
4. Cc dng hm
4.1. Hm khng c tham s
V d 1: hm in dng ch HELLO C
105
void PrintHello()
{
cout << Hello C++\n;
}
Cch gi hm:
PrintHello();
V d 2: hm gii phng trnh bc 2:
void GiaiPTBac2()
{
double a, b, c;
cout << Nhap cac he so a, b, c : ; cin >> a >> b >> c;
double delta = b*b-4*a*c;
if (delta<0)
cout << Phuong trinh vo nghiem\n;
else if (delta==0)
cout << Phuong trinh co nghiem kep X = << -b/2/a;
else // delta>0
cout << Phuong trinh co 2 nghiem phan biet:
106
<< \nX1 = << (-b-sqrt(delta))/2/a
<< \nX2 = << (-b+sqrt(delta))/2/a;
}
Cch gi hm:
GiaiPTBac2();
4.2. Hm vi nhiu tham s
V d 1, hm tnh s max ca 2 s nguyn:
int Max(int a, int b)
{
return (a > b ? a : b);
}
Cch gi hm:
Max(x, y); // voi x, y co kieu int
V d 2, hm v hnh vung c chiu cao h:
void Draw(int h)
{
for (int i=1; i<=h; ++i) // lap h dong
107
{
for (int j=1; j<=h; ++j) // lap h cot
cout << setw(3) << *;
cout << endl;
}
}
Cch gi hm:
Draw(5)
Hoc
Draw(h), vi h c kiu int
4.3. Hm nguyn mu (function prototype)
Hm nguyn mu c dng cung cp thng tin cho chng
trnh dch v tn hm, kiu gi tr tr v, s lng, th t v kiu ca
cc tham s ca hm. Chng trnh dch cn c vo cc thng tin ny
kim tra cc li gi hm trong chng trnh.
Hm nguyn mu c t sau phn khai bo ton cc v ngay
trc hm main() hoc c th t trong tp tin khc.
Khai bo:
[<kiu gi tr tr v>] <tn hm>([<danh sch cc tham s>]) ;
108
Trong :
<kiu gi tr tr v> m t kiu ca gi tr tr v bi hm
<tn hm> l danh hiu hp l v nn t tn sao cho th
hin c chc nng ca hm
<danh sch cc tham s> m t cc kiu d liu v tn bin
i din ca tng tham s., mi cp kiu d liu v tn bin
c phn cch bi du phy ,
V d: Khai bo hm nguyn mu c chc nng xc nh tr min
gia 2 s nguyn.
int Min(int, int) ;
hay
int Min(int a, int b) ; // nn dng cch khai bo ny
4.4. T chc mt chng trnh C/C++ (trn cng 1 tp tin)
Cch 1: chng trnh gm 3 phn
PHN KHAI BO TON CC
PHN KHAI BO V NH NGHA HM
HM main()
Cch 2: chng trnh gm 4 phn (nn dng cch ny)
PHN KHAI BO TON CC
PHN KHAI BO HM NGUYN MU
109
HM main()
PHN NH NGHA HM
5. Cc phng php truyn tham s
Tham s thc (actual parameter) l tham s trong li gi hm.
Tham s hnh thc (formal parameter) l tham s trong phn khai
bo v nh ngha. Tham s hnh thc ch l tn i din cho tham s
thc tng ng. Kiu ca tham s hnh thc s qui nh kiu ca tham
s thc.
C 2 cch truyn tham s cho hm:
Truyn bng gi tr (ch yu trong C/C++): Trong phng
php ny, chng trnh dch cp pht vng nh ring cho
tng tham s hnh thc, sau sao chp gi tr ca tham s
thc tng ng vo cc tham s hnh thc. Sau khi kt thc
thc hin hm, chng trnh dch s thu hi cc vng nh
cp pht cho cc tham s hnh thc, v cc bin cc b khai
bo bn trong hm. Nh vy, mi s thay i tr ca cc
tham s hnh thc u khng nh hng n cc tham s
thc bn ngoi hm.
Truyn bng tham chiu (cn gi l truyn bng a ch):
Ch c trong C++.Thay v cp pht vng nh ring nh trong
phng php truyn bng gi tr, chng trnh dch s truyn
a ch ca cc tham s thc tng ng cho cc tham s hnh
thc. iu c ngha l ta c th xem tham s hnh thc
cng chnh l tham s thc, hay ni cch khc tham s hnh
thc l tn gi khc ca tham s thc. Nh vy, mi s thay
110
i tr ca tham s hnh thc bn trong hm chnh l thay i
tr ca tham s thc bn ngoi hm.
phn bit cch truyn tham chiu, vi cch truyn tr,
ta t k hiu & trc tn bin hnh thc.
V d: Khai bo hm nguyn mu c chc nng hon i tr ca 2
bin nguyn:
void Swap(int &,int &); // truyn bng tham chiu
hay
void Swap(int & a,int & b); // truyn bng tham chiu

void F(int, int ); // truyn bng tr
hay
void F(int a, int b); // truyn bng tr
Ch :
Trong cch truyn tham chiu, tham s thc tng ng phi
l mt bin. Cn trong cch truyn tr, tham s thc tng
ng c th l bin, hng, li gi hm, hoc mt biu thc
cng kiu vi tham s hnh thc.
Cc tham s hnh thc trong cch truyn bng gi tr c
gi l tham tr. Cn cc tham s hnh thc trong cch truyn
bng tham chiu c gi l tham bin.
111
6. Phm vi (scope) v cp lu tr (storage class) ca cc i
tng
ti u ha vic s dng b nh v qun l vic truy xut cc
i tng (bin, hng, hm) trong chng trnh, C/C++ a ra cc
khi nim phm vi v cp lu tr.
6.1. Phm vi
Phm vi l vng chng trnh m i tng c nhn bit v c
th c s dng. Ni chung, phm vi ca mt i tng tri di t
ni n c khai bo n cui khi, hm, hay tp tin cha i tng
. C cc loi phm vi sau:
Phm vi cuc b (local scope)
Phm vi khi (Block scope)
Phm vi hm (Function scope)
Phm vi ton cuc (global scope)
Phm vi tp tin (File scope)
Phm vi chng trnh (Program scope)
V d v phm vi:
#include <iostream.h>
int x=3; // bin x ton cc
const int MAX = 10;
void fct(int x);
112
void main(){
int x=1; // x cc b ca hm main()
fct(x);
{
int y=4;
x += y;
}
cout<<Y = <<y; // Sai v bin y b hy, khng th truy
xut
cout<<X ca hm main() = <<x;
cout<<X ton cc = <<::x;
}
void fct(int x){
x += MAX;
cout<<X bn trong hm fct() = <<x<<endl;
}
Bin khai bo bn trong khi hay hm c gi l bin cc b
(local variable) ca khi, hm v ch c th c truy xut bn
trong phm vi khi hay hm m thi. Cn bin khai bo bn ngoi
113
mi hm, mi khi uc gi l bin ton cc (global variable) v c
th c truy xut mi ni trong chng trnh.
Cc bin cc b c thi gian tn ti tng i ngn. Chng s b
hy mi khi ra khi khi hay kt thc thc hin hm cha n.
Ngc li, cc bin ton cc c thi gian tn ti l thi gian ca
chng trnh.
6.2. Cp lu tr
Cp lu tr (storage class) l cch thc NNLT cp pht vng nh
v lu tr bin. Cp lu tr ca mt bin c xc nh bng cc t
kha sau: auto, register, static, extern.
Bin auto (cn gi l bin t ng, bin cc b)
Mi bin khai bo bn trong mt khi hay hm mc nhin c tnh
cht auto, tr khi xc nh r cp lu tr khc.
V d, khai bo int x; tng ng vi khai bo auto int x;.
Bin auto c phm vi cc b bn trong hm hay khi v c thi
gian tn ti ngn, do c cp pht trong vng nh STACK.


Bin register (t dng)
tng tc truy xut bin (thng l cc bin m trong vng
lp for), ta t t kha register trc khai bo bin, yu cu chng
trnh dch lu tr bin trong thanh ghi. Ch , chng trnh dch c
114
th b qua khng p ng li yu cu ny nu c qu nhiu li
ngh loi ny hoc nu khng cn thanh ghi cp pht.
Bin static (cn gi l bin tnh)
L bin c cp pht trong vng nh DATA (trnh by s s
dng b nh ca mt chng trnh C/C++), v do c tnh cht c
nh, lu di. Thi gian tn ti ca bin static l thi gian ca chng
trnh. Nh vy bin static khai bo bn trong mt khi, hay hm s
khng b hy khi ra khi khi hay hm o, v vn lu gi gi tr c
ca ln gi hm trc. Ch , bin static phi c khi to gi tr khi
khai bo. Chng trnh dch s ch khi to gi tr cho bin static duy
nht mt ln trong ln gi hm u tin.
Bin extern
Mt chng trnh C/C++ c th c t chc trn nhiu tp tin
khc nhau. V phm vi ca mt bin no trong chng trnh c th
c tri di trn nhiu tp tin nh vo t kha extern nh sau: ( v
hnh )
T kha extern ng trc khai bo bin c ngha l bin
c khai bo v nh ngha ni khc trong chng trnh (trong
cng tp tin hay trong tp tin khc), chng trnh dch s khng cp
pht thm vng nh cho bin c khai bo extern m s dng chung
vng nh cp pht trc .


Tm tt v cp lu tr bin (Storage class)
115
V tr khai bo
bin
T kha Thi gian tn ti Phm vi
Hm auto
(default)
Hm Hm
Hm register Hm Hm
Hm static Chng trnh Hm
Bn ngoi hm static Chng trnh File
Bn ngoi hm ----- Chng trnh File
Bn ngoi hm extern Chng trnh Nhiu File

V d 1:
Minh ha tm vc, phm vi ca bin (Visibility (Scope) of
variables)









116



File1.cpp
int a; __
int b; __ ______________________________________________
int c; __
int d; __ _______________________________________
void main()
{
int e; _
auto int f; _
register int i; __
static int j;
}
int k; __ __________________________________
void F1()
{
117
int m; ______________________________
}







File2.cpp
extern int a; _

void F2()
{
extern int b;
}

extern int c; _
118

void F3()
{
extern int d;
}

V d 2:
#include <iostream.h>
#include "file3.cpp"

const int MAX=10;
int x=3;

void main()
{
const int MAX = 5;
int x = 1;
x += ::MAX;
119
cout<<"X cuc bo trong ham main() = "<<x<<endl;
cout<<"X toan cuc = "<<::x<<endl;
f1();
f2();
}
File3.cpp
#include <iostream.h>
extern int x; // dung chung bien x da khai bao o noi khac
extern const int MAX; // dung chung hang MAX da khai bao o noi
khac
void F1()
{
int x=2; // x cuc bo
cout<<"X cuc bo trong ham f1() = "<<x<<endl;
cout<<"X toan cuc da khai bao trong ham main() =
"<<::x<<endl;
}

void F2()
120
{
const int MAX=15; // hang cuc bo
cout<<"Hang MAX cuc bo trong ham f2() = "<<MAX<<endl;
cout<<"Hang MAX toan cuc da khai bao trong File1 = "
<<::MAX<<endl;
cout<<"Bien x toan cuc da khai bao trong File1 =
"<<::x<<endl;
}
7. C ch gi hm v b nh stack
Mt chng trnh C/C++ l tp hp cc hm trong hm
main() l quan trng nht v khng th thiu do y l im u vo
ca chng trnh. Khi ta cho thc hin chng trnh th hm main()
c gi thc hin trc tin. Khi , hm main() c th gi chy cc
hm khc, v cc hm ny li c th gi chy cc hm khc na,
Khi mt hm c gi th C/C++ s to ra mt khung kch hot
(activation frame) trong vng nh stack. Khung kch hat cha cc
bin cc b v mu tin hot ng (active record) ca hm. Mu tin
hot ng cha a ch tr v (return address) ca hm gi n v cc
thng s khc. Sau khi kt thc thc hin hm, trnh bin dch s xa
cc bin cc b cp pht cho hm (cc tham s hnh thc tr, cc
bin cc b khai bo bn trong hm) v chuyn iu khin v dng
lnh ti a ch tr v ca hm gi n.
V d, xt chng trnh sau:
121
void A();
void B();
void C();
void D();
void E();
void main(){

D();
E();

}
void A()
{

B();

}
void B()
122
{

C();

}
void C()
{

}
void D()
{

A();

}
void E()
{

123
C();

}
Ta c hnh nh sau:

8. Hm c tham s vi gi tr ngm nh (Function with default
arguments)
C++ cho php ci t hm vi tham s c gi tr ngm nh. Cc
tham s ny phi c khai bo lin tc v theo th t t phi sang
tri.
Khai bo:
<return type> <function name>(<type> <param1>=<val1>,
<type> <param>=<val2>, );
Thi gian chy chng trnh
B


n
h


S
T
A
C
K

M M
D
M
D
A
M
D
A
B
M
D
A
B
C
M
D
A
B
M
D
A
M
D
M M
E
M
E
B
M
E
M
C
B
E
M
124


Phn nh ngha c thc hin nh hm thng thng.
<return type> <function name>(<type> <param1>, <type>
<param2>,)
{
// cc cu lnh
}
9. Np chng hm (Function overloading)
C++ cho php dng chung mt danh hiu t tn cho cc hm
khc nhau. Ta gi l np chng hm.
Thng thng, ta ch np chng hm i vi nhng hm ging
nhau v bn cht, nhng khc nhau s lng, v kiu d liu ca cc
tham s.
V d, tm tr max ca 2 s nguyn, 3 s nguyn, , hoc 2 s
thc, 3 s thc, trong C chun, ta vit nhiu hm khc nhau, mi
hm phi c t tn khc nhau. Trong C++, ta c th np chng,
i.e., ta c th dng chung tn hm (VD max) cho tt c cc hm ny.
Cc hm c np chng c th ging nhau v kiu ca tr tr v,
nhng bt buc phi khc nhau s lng, hoc kiu ca cc tham s.
Chng trnh dch s cn c vo cc yu t ny xc nh hm cn
thc hin mi khi gp li gi hm c np chng.
125
Ch
Kh nng np chng hm kt hp vi hm c tham s vi gi tr
ngm nh c th gy ra tnh trng nhp nhng, m h nh sau:


void F(int=2, double=3.0);
void F(int);
void F(double);
void main()
{
double x = 20.0;
int y = 10;
F(x, y); // m h! chng trnh dch khng bit gi hm no
}
void F(int, double)
{
}
void F(int)
{
126
}
void F(double)
{
}
10. Mt s gi khi thit k hm
Xc nh r chc nng, nhim v ca hm.
Ch nn thit k hm theo phng chm mi hm ch
thc hin mt nhim v duy nht, v nn thit k sao cho
c th s dng li hm h tr cho cc vic khc
(reusable).
t tn hm sao cho c tnh gi nh (Mnemonic)
Nn t ch thch, ghi r cc thng tin v hm nh chc
nng, iu kin d liu vo, xc nh d liu ra ca hm, . . .
Xc nh tr tr v: hm c cn tr v gi tr? Nu c, xc
nh r kiu tr v. i vi cc hm c chc nng nhp/xut
d liu, tr tr v thng l void (tng ng vi th tc
trong Pasccal). Cn i vi loi hm kim tra mt tnh cht
P no , ta thng tr v gi tr 0 hoc 1, i.e. tr v tr ca
mt biu thc logic.
Xc nh s lng tham s v kiu ca tng tham s: hm
c nhn tham s hay khng? Bao nhiu tham s? Kiu ca
tng tham s?
Xc nh r phng php truyn tham s: nu khng c
nhu cu lm thay i tr ca tham s thc truyn vo cho
127
hm th p dng phng php truyn bng gi tr. Cn
ngc li th p dng cch truyn bng tham chiu.
11. Mt s v d minh ha
12. Cu hi
Nu cch khai bo hm, nh ngha hm, cch gi hm.
Phm vi ca mt i tng (bin, hng) trong chng trnh ?
Trnh by cc phng php truyn tham s cho hm (truyn
bng gi tr, bng tham chiu, v bng tham tr)
Nu cch thit k hm m theo Anh (Ch) cho l t yu cu.
Cho v d v hm xut/nhp.
Cho v d v hm kim tra mt gi tr nguyn tha tnh cht
P no .
Cho v d v hm xc nh gi tr nguyn tha tnh cht P
no .
Trnh by cch t chc mt chng trnh C/C++.
Trnh by cp lu tr ca mt i tng (auto, register,
static, extern).
Khai bo cc hm nguyn mu sau:
Gii phng trnh bc 2 ax
2
+ bx + c = 0
Gii phng trnh bc 4 ax
4
+ bx
2
+ c = 0
In bng cu chng theo chiu dc.
In bng cu chng theo chiu ngang.
V hnh tam gic vi chiu cao h dng
Phn tch s n > 0 thnh tch cc tha s nguyn t theo
dng n = 120 = 2*2*2*3*5.
128
Phn tch s n > 0 thnh tch cc tha s nguyn t theo
dng n = 120 = 2^3*3*5.
Kim tra nm y c phi l nm nhun ?
Kim tra 1 b ngy, thng, nm c hp l hay khng ?
Kim tra s t nhin n > 0 c phi l s nguyn t ?
Kim tra 2 s t nhin c nguyn t cng nhau ?
Kim tra s t nhin n > 0 c phi l s thuc dy s
Fibonacci ?
Kim tra s n > 0 c phi l s i xng ?
Kim tra s n [100 999] c phi l s tha tnh cht P
= c tng cc ch s bng tch cc ch s ?
Kim tra s n > 0 c phi l s hon thin ?
Tnh tr max ca 2 s nguyn.
Tnh tr min ca 2 s nguyn.
Tnh USCLN ca 2 s t nhin.
Tnh tng S ca n > 0 s hng u tin theo cng thc
cho trc.
Tnh tr o ca s t nhin.
Tnh tr i ng b 10 ca s t nhin.
Tnh s ngy ti a ca thng m, nm y.
Tnh ngy hm sau ca 1 b ngy thng nm.
Tnh khong cch gia 2 b ngy, thng, nm.
nh ngha cc hm nguyn mu trn, v vit chng
trnh ng dng.
Cho chng trnh sau y:
#include <iostream.h>
129
void mul(int&,int,int&);
int main( ) {
int x = 4, y = 3, z = 2;
mul( y, z, x );
cout << "\nX = " << x;
cout << "\nY = " << y;
cout << "\nZ = " << z;
return 0;
}
void mul( int & x,int y, int & z ) {
x *= y;
y *= z;
z *= x;
}
Hy cho bit tr in ra mn hnh ca cc bin x, y, v z. Gii thch
theo mu bng sau:
Cu
lnh
Hm main() Hm mul()
X Y Z X Y Z
130
Cho chng trnh sau y:
#include <iostream.h>
void f( int x, int & y, int z );
void g( int & x, int y, int & z );
int main() {
int x = 2, y = 3, z = 4;
f( y, z, x );
cout << "\nX = " << x;
cout << "\nY = " << y;
cout << "\nZ = " << z;
return 0;
}
void f( int x, int & y, int z ){
g( z, y, x );
x += y;
y += z;
z += x;
}
131
void g( int & a, int b, int & c ) {
a *= b;
b *= c;
c *= a;
}
Hy cho bit tr in ra mn hnh ca cc bin x, y, v z. Gii thch
theo mu bng sau:
Cu
lnh
Hm main() Hm f() Hm g()
X Y Z X Y Z A B C
13. Bi tp
1) Vit hm xc nh s Max trong 2 s nguyn. Sau vit
chng trnh p dng in ra mn hnh s Max trong 5 s
nguyn.
2) Vit hm hon i tr 2 bin nguyn. Sau vit chng
trnh ng dng.
3) Vit hm xc nh USCLN ca 2 s t nhin. Sau vit
chng trnh p dng nhp vo 2 s t nhin v cho bit 2
s c nguyn t cng nhau ? Sau tnh BSCNN ca 2
s ny.
4) Cho trc s t nhin n. Vit hm xc nh s nguyn t
th n. Sau vit chng trnh p dng.
5) Cho trc s t nhin n. Vit hm xc nh s Fibonacci
th n. Sau vit chng trnh p dng.
132
6) Cho trc s t nhin n. Vit hm kim tra s n c phi l
s nguyn t hay khng ? Sau vit chng trnh p
dng.
7) Vit hm kim tra 2 s c nguyn t cng nhau hay khng
? Sau vit chng trnh p dng.
8) Cho trc s t nhin n. Vit hm kim tra s n c phi l
s Fibonacci hay khng ? Sau vit chng trnh p
dng.
9) Cho trc s t nhin n. Vit hm kim tra s n c phi l
s i xng hay khng ? Sau vit chng trnh p dng.
10) Cho tnh cht P=Tng cc ch s ca 1 s nguyn bng
tch ca cc ch s ca n. Vit hm kim tra mt s (gm
3 ch s) c tha tnh cht P hay khng ? Sau vit
chng trnh p dng.
11) Vit hm in ra mn hnh bng cu chng dc (ngang).
Sau vit chng trnh p dng.
12) Vit cc hm in ra mn hnh cc loi tam gic c v rng
vi chiu cao h. Sau vit chng trnh p dng to mt
menu cho php chn dng hnh tam gic in ra mn hnh.
13) Vit chng trnh bao gm cc hm sau:
Hm kim tra nm y cho trc c nhun hay khng ?
Hm xc nh s ngy ti a ca thng m trong nm y
cho trc.
Hm kim tra tnh hp l ca mt b ngy, thng, nm
cho trc.
Hm xc nh ngy k tip ca mt b ngy, thng, nm
cho trc.
133
Hm xc nh N ngy k tip ca mt b ngy, thng,
nm cho trc.
Vit chng trnh p dng cc hm trn.
14) Vit chng trnh tnh khong cch ngy gia 2 b ngy
thng nm.
134
CHNG 5. KIU MNG (ARRAY)
1. Khi nim
Kiu mng cho php gii quyt nhiu bi ton lp trnh lin quan
n mt lng ln d liu mt cch gn, sc tch. V d: bi ton xc
nh s min, max ca nhiu s nguyn, tm kim, sp xp trn 1 dy
cc s liu, . . .
Mng l kiu d liu c cu trc bao gm nhiu phn t cng
kiu v c b tr vng nh lin tc.
Kiu ca cc phn t mng gi l kiu c s. Mi phn t mng l
mt bin c kiu c s.
Mng c kch thc l s phn t trong mng. Kch thc mng
bt buc phi l biu thc hng nguyn c th cp pht vng nh
lc bin dch.
Mng c th c 1 chiu hay nhiu chiu. Mng n chiu (n>1) c
th c coi nh mng 1 chiu m mi phn t l mng n-1 chiu. S
phn t ca mng nhiu chiu bng tch ca kch thc cc chiu.
V d: mng cc s nguyn, cc s thc, cc k t,
2. Khai bo & khi to gi tr cc phn t mng trong C/C++
<kiu c s> <tn bin mng> [<kch thc>];
Trong :
<kiu c s> c th l kiu d liu hp l bt ky trong
C/C++.
135
<tn bin mng> l 1 danh hiu hp l v c gi tr l a ch
ca vng nh ca phn t u tin ca mng.
<kch thc> l mt gi tr hng nguyn hoc mt biu thc
hng nguyn (khng th l 1 bin) v c t trong cp du
[]. Trng hp mng c nhiu chiu, th mi chiu phi
c xc nh r kch thc bng [<kch thc 1>][<kch
thc 2>]. . .
V d:
khai bo mng nguyn 1 chiu c tn arr1D gm 5 phn t.
int arr1D[5];
khai bo mng nguyn 2 chiu c tn arr2D gm 6 phn t (2
dng 3 ct)
int arr2D[2][3];
Ta c th khi to gi tr ban u cho cc phn t ca mng 1
chiu nh sau:
int arr1D[5] = {3,5,4,6,2};
int arr1D[ ] = {3,5,4,6,2};
int arr1D[5] = {3}; //phn t u = 3, cc phn t cn li = 0
khai bo v khi to mng 1 chiu vi tt c cc phn t c tr
= 0:
int arr1D[5] = {0};
136
Ta c th khi to gi tr ban u cho cc phn t ca mng 2
chiu nh sau:
int arr2D[2][3] = {3,5,6,2,4,1};
int arr2D[ ][3] = {3,5,6,2,4,1};
int arr2D[2 ][3] = {{3,5,6},{2,4,1}};
int arr2D[ ][3] = {{3,5,6},{2,4,1}};
khai bo v khi to mng 2 chiu vi tt c cc phn t c tr
= 0:
int arr2D[2 ][3] = {0};
3. Truy xut cc phn t ca mng
Cc phn t mng c th c truy xut thng qua ch s ca n
trong mng.
Cc phn t mng c nh s th t bt u t 0, s th t ny
gi l ch s mng. Cc phn t mng c th c truy xut nh sau:
<tn bin mng>[ch s]
V d: mng 1 chiu

V d: mng 2 chiu
22 55 44 11 33
a
0 1 2 3 4
137

Ch
Chng trnh dch C/C++ khng kim tra vic vi phm
bin mng.
Kch thc ca mng phi l biu thc hng
4. Truyn tham s mng cho hm
Trong phn khai bo v nh ngha hm, i vi mng 1 chiu
ta ghi cp du [] ngay sau tn kiu c s ca mng. i vi mng
nhiu chiu, ta phi ghi y s lng cp du [] bng ng s chiu
v t ngay sau tn kiu c s, cc chiu phi ghi r kch thc, ngoi
tr kch thc ca chiu u tin trng nh i vi mng 1 chiu.
Trong li gi hm, ta ch cn ghi tn bin mng ti v tr tng
ng vi tham s mng hnh thc.
Thc cht ca vic truyn tham s mng cho hm l s truyn gi
tr a ch ca tham s thc cho tham s mng hnh thc. iu ny c
ngha l trc khi cho thc hin hm chng trnh dch s cp pht
vng nh ring cho tham s mng hnh thc nh mt bin cc b.
Tham s cc b ny nhn tr ban u l bn sao gi tr a ch ca
vng nh u tin ca mng truyn vo cho hm v s b hy khi kt
thc thc hin hm. Tuy nhin, do tham s thc truyn a ch ca n
22 55 44
66 33 11
a
0 1 2
0
1
138
cho tham s hnh thc nn mi s thay i tr ca cc phn t mng
trong hm s lm thay i tr ca cc phn t mng bn ngoi hm.
5. Cc thao tc c bn trn mng 1 chiu
Nhp gi tr cho cc phn t mng.
Xut gi tr cc phn t mng (ra mn hnh).
Thm 1 phn t vo mng.
Xa mt phn t ra khi mng.
Tm kim trn mng.
Sp xp mng.
Cc thao tc trn thc cht l duyt mng v x l trn tng
phn t mng nh vo cu trc lp mt cch tng qut nh sau:
i vi mng 1 chiu gm MAX phn t:
for (i=0; i<MAX; i++)
x l phn t a[i];
i vi mng 2 chiu gm ROWS dng, COLS ct:
for (i=0; i<ROWS; i++)
for (j=0; j<ROWS; j++)
x l phn t a[i][j];
5.1. Nhp gi tr cho cc phn t mng.
Gi s khai bo mng 1 chiu cc s nguyn gm MAX=20
phn t
139
Hm nhp gi tr cho cc phn t mng t bn phm
void Input(int a[], int n)
{
for (int i=0; i<n; i++)
{
cout << a[ << i << ] = ; cin >> a[i];
}
}
Hm to gi tr ngu nhin cho cc phn t mng trong on [-M
M]
void InitArray(int a[], int n)
{
//hm khi ng b to s ngu nhin khai bo trong <stdlib.h>
srand(time(0));
for (int i=0; i<n; i++)
a[i] = rand()(2*M+1) M;
}
Hm to gi tr ngu nhin tng dn cho cc phn t mng, phn
t u tin c tr trong on [x y], vi 0<x<y.
140
void InitArray(int a[], int n, int x, int y)
{
srand(time(0));
a[0] = rand()%(b-a+1) + a;
for (int i=1; i<n; i++)
a[i] = a[i-1]+ rand()%10;
}
5.2. Xut gi tr cc phn t mng (ra mn hnh).
Hm xut gi tr cho cc phn t mng 1 chiu ra mn hnh
void Output(const int a[], int n)
{
for (int i=0; i<n; i++)
cout << setw(4) <<a [i];
cout << endl;
}
// Hm xut gi tr cho cc phn t mng 2 chiu gm ROWS
dng, COLS ct ra mn hnh
void Output(const int a[][COLS], int m, int n)
141
{
for (int i=0; i<m; i++)
{
for (int j=0; j<n; j++)
cout << setw(4) << a[i][j];
cout << endl;
}
}
5.3. Thm 1 phn t vo mng.
Hm thm gi tr x vo cui mng
void InsertLast(int a[], int &n, int x)
{
a[n] = x;
n++;
}
Hm thm gi tr x vo mng ti v tr c ch s pos th t tng
quan ban u ca cc phn t mng l khng quan trng
void Insert(int a[], int &n, int x, int pos)
142
{
a[n] = a[pos];
a[pos] = x;
n++;
}
Hm thm gi tr x vo mng ti v tr c ch s pos th t tng
quan ban u ca cc phn t mng khng thay i
void Insert(int a[], int &n, int x, int pos)
{
for (int i=n; i>pos; i--)
a[i] = a[i-1];
a[pos] = x;
n++;
}
5.4. Xa mt phn t ra khi mng.
Hm xo phn t ti v tr c ch s pos ra khi mng, th t mng
l khng quan trng
void Remove(int a[], int &n, int pos)
{
143
a[pos] = a[n];
n--;
}
Hm xo phn t ti v tr c ch s pos ra khi mng, th t mng
l quan trng
void Remove(int a[], int &n, int pos)
{
for (int i=pos; i<n-1; i++)
a[i] = a[i+1];
n--;
}
5.5. Tm kim trn mng.
Hm tm kim gi tr x, tr v ch s ca phn t u tin c tr =
x, nu khng tm thy th tr v tr 1 (hoc n).
Hm tm kim tuyn tnh trn mng cha c th t
int LinearSearch(const int a[], int n, int x)
{
for (int i=0; i<n; i++)
if (a[i]==x)
144
return i;
return 1;
}
Hm tm kim gi tr x, tr v ch s ca phn t u tin c tr=x,
tr v tr 1 (hoc n) nu khng tm thy, mng c th t tng dn
Tm kim tuyn tnh
int LinearSearch(const int a[], int n, int x)
{
for (int i=0; i<n && a[i]<x; i++)
if (a[i]==x) return i;
return 1;
}
Tm kim nh phn
int BinarySearch(const int a[], int n, int x)
{
int first=0, last=n-1, mid;
while(first<=last) {
mid = (first + last) / 2;
145
if (a[mid]<x)
first= mid + 1; // tm x phn na sau ca mng
else if (a[mid]>x) last = mid 1;
else // a[mid]==x
return i;
}
return 1;
}
5.6. Sp xp mng.
sp xp mng gm n phn t, ta tm cch t (n-1) phn t vo
ng v tr ca n theo tiu chun sp xp. ln xp phn t th i, ta
so snh phn t ny vi cc phn t cn li ca mng v thc hin i
ch khi cn thit tha mn tiu chun sp xp. Cui cng ta c mt
mng c xp th t.
a. Phng php sp xp n gin (simple sort)
Ni dung phng php: bc th i (i=0, 1, . . . , n-2) ta so snh
phn t a[i] vi cc phn t a[j] cn li (j=i+1, . . . , n-1) xc nh
phn t nh nht, sau i ch phn t nh nht ny vi a[i].
void Swap (int &x, int &y)
{
146
int z = x;
x = y; y = z;
}
void SimpleSort(int a[], int n)
{
int i, j;
for (i=0; i<n-1; i++)
for (j=i; j<n; j++)
if (a[i] > a[j])
swap(a[i],a[j]);
}
b. Phng php sp xp la chn (selection sort)
void SelectionSort(int a[], int n)
{
int i, j, min, tam;
for (i=0; i<n-1; i++)
{
tam = a[i];
147
min = i;
for (j=i; j<n; j++)
if (a[min] > a[j]) min = j;
a[i] = a[min];
a[min] = tam;
}
}
c. Phng php sp xp ni bt (bubble sort)
Ni dung phng php: bc th i (i=0, 1, . . . , n-2) ta ln
lt so snh tng cp phn t a[j], a[j-1], vi (j=i+1, . . . , n-1), sau
i ch 2 phn t ny nu a[j-1]>a[j].
void BubbleSort(int a[], int n)
{
int i, j;
for (i=0; i<n-1; i++)
for (j=n-1; j>i; j--)
if (a[j-1] > a[j])
swap(a[j-1],a[j]);
}
148
d. Phng php sp xp chn (insertion sort)
Ni dung phng php: Gi s dy con (a[0] . . a[i-1]) c
sp. bc th i (i=1, . . ., i<n-1), ta xc nh v tr thch hp ca a[i]
chn vo dy con c sp th t bng phng php tm kim
tun t t a[i] tr v a[0].
void InsertionSort(int a[], int n)
{
int i, j, tam;
for (i=1; i<n; i++)
{
tam = a[i];
for (j=i-1; j>=0; j--) {
if (a[j]<=tam) break;
a[j+1] = a[j];
}
a[j+1] = tam;
}
}
149
e. Phng php sp xp l tng chn gim
Ni dung phng php: Cch tin hnh ging nh thut ton
simple sort, ch khc tiu chun so snh thc hin vic hon i
tr ca cc phn t.
6. Cu hi
Nu li ch ca vic dng mng.
Nu cch khai bo v khi to gi tr cho bin mng mt
chiu, bin mng hai chiu.
Nu cch truyn tham s mng cho hm, cch gi hm c
tham s mng.
Trnh by cc thao tc c bn trn kiu mng (1 chiu):
Nhp/Xut gi tr cho cc phn t mng
Thm phn t mi vo mng
Xa mt phn t trong mng tha tiu chun P no .
Tm kim trn mng
Sp xp mng.
7. Bi tp
Mng 1 chiu
1) Cho trc n>0. Lit k tt c cc s nguyn t n dng
phng php sng Erathosthene.
2) Cho trc mng nguyn kch thc MAX=100. Cho trc
tiu chun P (V d: L s chn, L s dng, L s
chnh phng, L s nguyn t, ). Xy dng cc hm
sau y v vit chng trnh p dng:
150
Lit k tt c cc phn t mng tha tiu chun P.
m s lng cc phn t mng tha tiu chun P.
Tnh tng cc phn t mng tha tiu chun P.
Tnh trung bnh tng cc phn t mng tha tiu chun
P.
Cho trc mng nguyn kch thc MAX=100. Vit
chng trnh thng k s ln xut hin cc phn t trong
mng.
3) Cho trc mng nguyn c kch thc gm MAX=100.
Vit cc hm sau y:
Khi to gi tr cho cc phn t ca mng (nhp t bn
phm).
Khi to gi tr ngu nhin cho cc phn t ca mng,
mi phn t c tr trong on [ab], vi 0<a<b.
Khi to gi tr ngu nhin cho cc phn t ca mng,
sao cho mng c th t tng dn.
Xut gi tr ca cc phn t ca mng ra mn hnh.
Kim tra mng c th t tng ? gim ? hay khng c th
t?
o ngc th t cc phn t trong mng.
Xoay tri/phi cc phn t trong mng k>0 ln.
Tm kim gi tr x trong mng.
Xa phn t u tin trong mng tha tiu chun P.
Xa tt c cc phn t trong mng tha tiu chun P.
Sp xp mng theo th t tng dn.
Sp xp mng theo th t l tng chn gim.
151
Sp xp theo th t tng dn v loi b cc phn t trng
nhau.
m s dy con tng dn trong mng v xut cc dy con
ny ra mn hnh, mi dy con trn 1 dng.
Xut dy con tng dn c s lng phn t nhiu nht.
Xut dy con tng dn c tng cc phn t ln nht.
Vit chng trnh p dng cc hm xy dng trn.
4) Cho trc mng nguyn c kch thc gm MAX=100.
Vit chng trnh sp xp mng theo th t tng, ng thi
loi b cc phn t trng nhau.
5) Vit chng trnh trn 2 mng nguyn c th t
tng/gim dn, thnh mng nguyn mi cng c th t
tng/gim dn.
6) Vit hm v biu ng, v hm v biu ngang. Vit
chng trnh p dng.
V d, vi mng nguyn int a[5]={4, 7, 10, 6, 3} ta c:
Biu ngang Biu ng

* * * * *
* * * * * * * *
* * * * * * * * * * *
* * * * * * * *
* * * * * *
152
* * *
* * * *
* * * * *
* * * * *
* * * * *
Mng 2 chiu
1) Vit chng trnh in ma phng bc l.
2) Vit chng trnh in mng 2 chiu kch thc MAX*MAX
theo th t xon c sau:
V d, vi MAX = 4:
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
3) Tng t nh bi trn, vit chng trnh sp xp mng 2
chiu theo th t xon c vi cc phn t mng c tr ngu
nhin.
4) Vit chng trnh xc nh cc phn t yn nga (nu
c) ca mng 2 chiu cho trc. Phn t yn nga c gi
tr min dng v max ct hoc max dng v min ct.
153
CHNG 6. CON TR (POINTER)
1. Khi nim
Con tr (Pointer) l kiu d liu c bit, c gi tr l a ch
vng nh ca mt i tng (bin, hm).
Tng ng vi mi kiu d liu s c mt kiu bin tr
ring bit. VD ta c con tr char*, int*, float*, double*, . . .
cha a ch ca bin char, int, float, double.
Tu theo h my, kch thc ca bin tr l 2 bytes (h my
PC) hoc 4 bytes (h my tnh ln).
Bin tr cho php truy xut i tng mt cch gin tip, i.e.
thm chiu n 1 i tng khc thng qua a ch ca n.
Vic cp pht ng cho mng c thc hin thng qua con
tr.
nm bt kiu con tr, cn phn bit ni dung ca vng
nh v a ch ca n.
2. Khai bo bin con tr
<type> * <tn bin tr>;
trong :
<type> l kiu d liu ca bin m con tr ang tr n,.
<tn bin tr> l danh hiu hp l.
Nh vy, <type> * l kiu con tr.
Cng nh cc kiu d liu khc, ta c th khai bo ng thi khi
to gi tr cho bin tr nh sau:
154
int x;
int *px = &x; // px cha a ch ca bin x.
Ch :
int *px, x, *py, y;
3. Truy xut bin tr
Sau khi khai bo bin tr, ta c th truy xut n thng qua tn bin
nh mt bin thng thng. Khi , ta c gi tr (ni dung) ca bin
tr l a ch ca mt vng nh no . Nu mun truy xut ni dung
ca vng nh m bin tr ang tr n, ta dng ton t * (gi l kh
tham chiu dereference) t trc tn bin tr nh sau:
*<tn bin tr>
Gi s c cc khai bo sau:
int x =5, y= 7;
int *px, *py;
Ta c th gn tr ca px, py nh sau:
px = &x;
py = &y;
Cc bin x, y c th c truy xut gin tip nh sau:
*px = 2; // tng ng vi cu lnh gn x = 2;
155
*py = 3; // tng ng vi cu lnh gn y = 3;
Ch :
Cn phn bit
*px = *py; //gn tr ca vng nh m py ang tr n cho vng
nh m px ang tr n.
vi
px = py; //sau lnh ny px v py cng tr n cng 1 vng nh.

Con tr NULL l con tr khng cha a ch ca bt k vng nh
no. Nn khi to gi tr NULL hoc a ch ca vng nh no cho
bin tr lc khai bo. Cn lu , vic truy xut vng nh thng qua
con tr NULL l li v c php.
int *py = NULL; // py khng tr n bt k vng nh no.
Con tr void * l con tr a nng, v tng thch vi mi kiu d
liu m 1 bin tr tr n, i.e. ta c th gn gi tr ca con tr thuc
mt kiu bt k no cho con tr void *. Khng c php thc
hin cc php tnh s hc trn con tr void*.
4. S hc con tr
Ngoi php gn tr ca 1 bin tr cho bin tr khc cng kiu vi
n, ta c th thc hin cc php ton s hc sau trn bin tr:
156
Php cng con tr ptr vi mt s nguyn N s cho kt qu a
ch vng nh cch con tr ptr N v tr nh sau: (v hnh)
Php tr 2 bin tr cng kiu ptr1 v ptr2 s cho kt qu khong
cch (s phn t) gia 2 bin tr trn nh sau: (v hnh)
Php so snh 2 con tr cng kiu vi nhau c thc hin da
trn v tr vng nh tng ng vi 2 bin tr (v kt qu tr v l tr 0
hoc 1).
5. Lin h gia con tr v mng
Do tn bin mng l 1 gi tr hng a ch ca phn t u tin ca
mng, nn ta c th gn gi tr a ch ny cho con tr c kiu nn
cng kiu vi kiu c s ca bin mng.
Gi s c cc khai bo sau:
int a[5];
int *pa=a;
Khi , ta c th truy xut cc phn t mng v a ch ca chng
nh sau:
a[0] *(a+0) *(pa+0) pa[0] &a[0] a+0 pa+0
&pa[0]
a[1] *(a+1) *(pa+1) pa[1] &a[1] a+1 pa+1
&pa[1]
a[2] *(a+2) *(pa+2) pa[2] &a[2] a+2 pa+2
&pa[2]
157
a[3] *(a+3) *(pa+3) pa[3] &a[3] a+3 pa+3
&pa[3]
a[4] *(a+4) *(pa+4) pa[4] &a[4] a+4 pa+4
&pa[4]
6. Con tr a cp
Bn thn bin tr cng c a ch, do ta c th cha a ch ca
n trong 1 bin tr khc. Ta gi bin tr ny l con tr tr n con tr,
hay con tr 2 cp. S lng du * xc nh cp ca 1 bin tr. Ta c
con tr 2 cp, con tr 3 cp, . . .
Con tr 2 cp c lin quan mt thit vi mng 2 chiu.
Gi s c cc khai bo sau:
int a[2][3];
int **ppa = new int*[2];
ppa[0] = a[0];
ppa[1] = a[1];
Khi , ta c th truy xut cc phn t mng nh sau:
a[0][0] *(*(a+0)+0) *(*(ppa+0)+0) ppa[0][0]
a[0][1] *(*(a+0)+1) *(*(ppa+0)+1) ppa[0][1]
a[0][2] *(*(a+0)+2) *(*(ppa+0)+2) ppa[0][2]
a[1][0] *(*(a+1)+0) *(*(ppa+1)+0) ppa[1][0]
158
a[1][1] *(*(a+1)+1) *(*(ppa+1)+1) ppa[1][1]
a[1][2] *(*(a+1)+2) *(*(ppa+1)+2) ppa[1][2]
truy xut a ch cc phn t mng:
&a[0][0] &(a+0) &(ppa+0)
&a[0][1] &(a+0) &(ppa+1)
&a[0][2] &(a+0) &(ppa+2)
&a[1][0] &(a+1) &(ppa+0)
&a[1][1] &(a+1) &(ppa+1)
&a[1][2] &(a+1) &(ppa+2)
7. Truyn tham s con tr cho hm
Trong phn khai bo v nh ngha hm, ta khai bo kiu d liu
con tr l <type> *.
Cn trong li gi hm, ta phi cung cp biu thc c tr l a ch
ca vng nh cng kiu vi kiu ca tham s bin tr tng ng.
V d: hm Swap( int*, int* ); // c 2 tham s l bin tr
8. Mng cc con tr
Kiu phn t ca bin mng c th l kiu con tr Khi ta s c
mt mng cc con tr, v ta c th xem cc bin c a ch cha trong
cc phn t mng con tr l mt mng, nhng c vng nh khng
lin tc. (V hnh)
159
9. T kha const vi con tr
Ta bit mt cng dng ca t kha const trong vic nh ngha
mt bin hng. Khi ta khai bo const int MAX = . . .; th TBD s cp
pht vng nh cho hng MAX ( y l 2 bytes) v khng cho php
USER thay i gi tr ca MAX trong chng trnh.
Tng t, cc khai bo sau:
// px v *px c th thay i gi tr.
<datatype>* px;

// px l con tr tr n vng nh c gi tr khng i, i.e. px c th
thay i, *px th khng c php thay i.
const <datatype>* px;

// px l con tr hng, i.e. *px c th thay i, px th khng c
php thay i.
<datatype>* const px;

// px l con tr hng tr n vng nh c gi tr khng i.
const <datatype>* const px;
160
10. Cp pht ng
Cp pht ng l cp pht vng nh lc thc hin chng trnh.
Cn cp pht vng nh lc bin dch c gi l cp pht tnh.
Vng nh ca cc i tng (bin) cp pht ng s c t ti
HEAP. Vic cp pht ng c thc hin nh vo cc hm cp pht
b nh sau:
Trong C, dng cc hm malloc( . . . ), calloc( . . . ), realloc( . . . ), .
. . c khai bo trong <alloc.h>, <stdlib.h>
// size_t l kiu d liu nh ngha trong <stdlib.h> v tng
ng vi mt unsigned int.
void* malloc(size_t size);
void* calloc(size_t nitems, size_t size);
void* realloc(void * ptr, size_t size);
Trong C++, dng ton t new :
// xin cp pht vng nh trn HEAP c kch thc =
sizeof(<type>)
<bin> = new <type>;
// xin cp pht vng nh trn HEAP kch thc =
sizeof(<type>)*n
<bin> = new <type>[n];
161
Khi khng cn s dng cc vng nh cp pht ng, ta phi thu
hi chng, c th s dng vo vic khc. Nu khng lm nh vy
th b nh s nhanh chng cn kit. Vic thu hi cc vng nh cp
pht ng c thc hin nh vo hm sau:
Trong C, dng hm free(ptr) , vi ptr l bin tr ch n vng nh
c cp pht ng bng cc hm malloc(), calloc(),
realloc()
Trong C++, dng ton t delete:
delete <bin>;
delete [] <bin>;
// Chng trnh cp pht ng mng mt chiu
#include <iostream.h>
#include <iomanip.h>
#include <stdlib.h>
#include <alloc.h>
void randomInit( int* a, int n );
void output( const int* a, int n );
void main() {
int* a;
int n;
162
cout << Cho bit s phn t ? : ; cin >> n;
// a = (int* ) calloc( n, sizeof( int ) );
a = new int [ n ];
randomInit( a, n );
output( a, n );
// free( a );
delete [] a;
}
void randomInit( int* a, int n ) {
for ( int i = 0; i < n; i++ )
a[ i ] = rand()% 100;
}
void output( const int* a, int n ) {
for ( int i = 0; i < n; i++ )
cout << setw( 4 ) << a[ i ];
cout << endl;
// Chng trnh cp pht ng mng 2 chiu
#include <iostream.h>
163
#include <iomanip.h>
#include <stdlib.h>
#include <alloc.h>
void randomInit( int** a, int m, int n );
void output( const int** a, int m, int n );
void main() {
int** a;
int m, n;
cout << Cho bit s dng ? : ; cin >> m;
cout << Cho bit s ct ? : ; cin >> n;
a = new int [ m ];
for ( int i = 0; i < m; i++ )
a[ i ] = new int [ n ];
randomInit( a, m, n );
output( a, m, n );
for ( i = 0; i < m; i++ )
delete [] a[ i ];
delete [] a;
164
}
void randomInit( int** a, int m, int n )
{
for ( int i = 0; i < m; i++ )
for ( int j = 0; j < n; j++ )
a[ i ][ j ] = rand()% 100;
}
void output( const int** a, int m, int n )
{
for ( int i = 0; i < m; i++ )
{
for ( int j = 0; j < n; j++ )
cout << setw( 4 ) << a[ i ][ j ];
cout << endl;
}
}
11. Con tr hm
Trong NNLT C/C++, tn hm l a ch vng nh ca ch th
u tin ca hm v do ta c th gn gi tr a ch ny cho 1 bin
165
tr c kiu nn cng kiu vi kiu gi tr tr v ca hm. Ta gi con
tr ny l con tr hm. Ta c th gi thc hin mt cch gin tip mt
hm no thng qua con tr hm. Mt khc, mt hm no c th
c dng lm tham s cho mt hm khc nh vo con tr hm.
Con tr hm c khai bo nh sau:
<type> (* <tn con tr hm>) ([Danh sch cc tham s]);
Gi s c cc khai bo sau:
int a, b;
void swap( int* px, int* py );
void (* pf) ( int *, int* );
Khi ta c th gi thc hin hm swap mt cc gin tip nh
sau:
pf = swap;
pf( &a, &b );
12. Con tr v chui k t
Chui ( string ) l mt dy cc k t lin tip trong b nh c
kt thc bng k t NUL (\0). Nh vy s dng bin chui cha
MAX k t, ta khai bo nh sau: char s[MAX+1];
Ta cng c th khai bo bin chui nh sau:
char* s;
166
C th khi to bin chui nh sau:
char s[ ] = Hello C++;
C th nhp/xut chui k t bng lnh cin ( dng km vi >> ) v
cout ( dng km vi << ). Tuy nhin cn lu , lnh cin >> s; ch cho
php nhp vo chui k t khng c khong trng.
Hm nhp chui ca i tng cin:
// c cc k t t cin vo s, k c k t khong trng.
getline( char* s, int size, char delim=\n );
read( char* s, int size ); // cin.read( s, 5 );
// cho php c tng k t t cin vo trong ch v tr v tr 1. Hm
tr v tr 0 nu gp k t \n.
get( char ch );
Hm xut chui ca i tng cout:
put( char ); // cout.put( ch ).put( ch );
write( const char* s, int size ); // cout.write( s, 1 ).write( s+1, 2
);
Mt s hm thng dng khai bo trong <string.h> cho php thao
tc, x l chui t t:
size_t strlen( const char* s );
167
int strcmp( const char* s1, const char* s2 );
int strcmpi( const char* s1, const char* s2 );
char* strcpy( char* dest, const char* src );
char* strcat( char* dest, const char* src );

13. ng dng con tr
Sp xp mng cc con tr
Danh sch lin kt
Cp pht mng ng
14. S lc v kiu tham chiu (Reference) - Ch c trong C++.
NNLT C++ cung cp kh nng tham chiu n a ch vng nh
ca bin tn ti trc . V bn cht, tham chiu l b danh ca
mt i tng (bin) xc nh trong chng trnh.
Sau khi khai bo 1 bin, ta c th khai bo bin tham chiu n
bin nh sau:
int x;
int &rx = x; // rx l bin tham chiu n bin x.
Sau cu lnh trn, ta c th xem rx l tn gi khc (b danh) ca
bin x.
168
Ch , bin kiu tham chiu phi tham chiu n mt bin tn
ti, i.e. bin khai bo trc. Khng th c khai bo bin tham chiu
nh sau:
int &rx; // sai !! rx l b danh ca bin no ???
Ta thng dng kiu tham chiu trong vic truyn tham s cho
hm. Cc tham s thc tng ng (theo v tr) c th b thay i gi tr
ngay bn trong hm.
V d: hm swap(int &, int &);
Hng tham chiu khc c th tham chiu n mt bin hay mt
hng trc kin no . V d, ta c cc khai bo sau:
int x = 5, y = 7;
const int &rx = 123; // ok
const int &ry = y;
ry++; // sai
Tuy nhin hng tham chiu khc vi bin tham chiu ch: ta
khng th dng hng tham chiu lm thay i vng nh m n
tham chiu n.
15. Bi tp
1) Gi s c cc khai bo sau:
int i1 = 11,
169
i2 = 22;
double d1 = 3.45,
d2 = 6.78;
Vit cc khai bo sao cho bin p1 v p2 c gi tr ca n
l a ch trong b nh, ni m mt gi tr double c th
cha.
Vit cu lnh gn a ch ca d1 cho p1, hoc gii
thch ti sao iu ny khng th thc hin.
Vit cu lnh gn a ch ca i2 cho p2, hoc gii thch
ti sao iu ny khng th thc hin.
Vit cc khai bo khi to bin ptr1 v ptr2 tr n i1
v i2 tng ng.
Vit cu lnh p1 v p2 tr n cng mt a ch.
Vit cu lnh chp gi tr c cha ti a ch m
ptr2 tr n vo a ch m ptr1 tr n.
Vit cc cu lnh s dng p1 v p2 hon i gi tr ca
d1 v d2.
2) Vit chng trnh C++ thc hin tng bc cc yu cu
sau:
Khai bo bin con tr kiu char c tn l charPtr.
3) Cp pht mt vng nh nc danh v cho charPtr tr n .
4) Nhp mt k t v cha n vo vng nh nc danh.
5) Hin th ni dung trong vng nh nc danh.
6) Nu ni dung ca vng nh nc danh l k t hoa th
chuyn thnh k t thng v hin th kt qu ra mn hnh.
170
7) Vit chng trnh C++ thc hin tng bc cc yu cu
sau:
Khai bo bin con tr kiu double c tn l doublePtr.
Cp pht vng nh nc danh cho mt mng c n (nhp t
bn phm) phn t kiu double v cha a ch ca n vo
doublePtr.
Nhp gi tr cho tt c cc phn t trong mng.
Tnh v hin th trung bnh cng cc gi tr trong mng.
Gii phng vng nh cp pht cho mng.
Hin th a ch v gi tr ca 3 phn t u tin trong
mng c vng nh va c gii phng.
8) Vit chng trnh khi to mt con tr tr n mng
unsigned int c 20 phn t. Sau gn gi tr cho cc phn
t trong mng l nhng s chn bt u t 2, hin th cc
gi tr ny ra mn hnh theo nhiu cch khc nhau (nu c
th) thnh 4 dng, mi dng c 5 phn t.
9) Vit chng trnh c tn l binary khi thc hin ti du
nhc lnh
10) C:\>binary DecimalValue
11) chng trnh s tnh v hin th gi tr nh phn ng vi gi
tr thp phn nhp. Trong , DecimalValue l gi tr
thp phn 2 byte (32768 n 32767).
12) Gi tr trung bnh ca mt dy c n s l mt s thc v
c nh ngha l gi tr m n c n/2 gi tr ln hn n,
v n/2 gi tr nh hn n. Vit chng trnh c tn l
median khi thc hin ti du nhc lnh
13) C:\>median FileName
171
14) chng trnh s tnh v hin th gi tr trung bnh ca cc
gi tr trong tp tin FileName, nhng nu g lnh
15) C:\>median
16) chng trnh s tnh v hin th gi tr trung bnh ca n (2
n 10) gi tr c nhp t bn phm.
17) Vit chng trnh thc hin sao chp tp tin File1 thnh
tp tin File2:
18) C:\>copy File1 File2
19) Vit chng trnh khi thc hin lnh
20) C:\>page File
21) th ni dung tp tin c ch nh s hin th ln mn hnh
theo tng trang (23 dng), ngi s dng c th n phm
bt k xem trang k tip.
22) Vit chng trnh x l chui k t bao gm cc chc nng
sau: (Ch : dng con tr ci t v khng c dng
hm th vin)
Tnh chiu di ca chui nhp.
Sao chp 2 chui vi nhau.
So snh 2 chui vi nhau.
Tm mt k t trong chui nhp.
Tm chui con trong chui nhp.
Thm chui con vo trong chui nhp ti v tr k.
Xo chui con trong chui nhp.
Loi b cc khong trng tha (k t Space, Tab) trong
chui nhp.
Chun ha chui nhp.
o ngc chui nhp.
172
Kim tra 2 chui nhp c gm cng cc k t hay khng ?
Kim tra chui nhp c i xng hay khng ?
Kim tra chui nhp c tun hon hay khng ?
m tn s xut hin ca cc k t trong chui nhp.
m s t trong chui nhp.
m s k t, s t v s dng trong chui nhp.
Chuyn t cui cng thnh t u tin trong chui nhp.
23) Vit chng trnh khai bo chui c tn l last_first c ni
dung l Smith, Bill, sau tch tn v h ca chui ny
ri kt hp chng li thnh Bill Smith v gn cho
chui first_last. Hin th hai chui ra mn hnh.
24) nh ngha mt hm c ba tham s, mi tham s l mt
chui k t gm: tn, tn lt, v h. Hm ny tr v mt
chui cha ba tham s trn theo th t h, tn, v k t u
ca tn lt. V d, nu ba tham s ln lt c ni dung l
John, Quincy, v Doe th hm tr v chui Doe,
John Q.. Vit chng trnh p dng.
25) Tng t nh cu 2, nhng nh ngha hm ch c mt
tham s. V d, nu tham s c ni dung l John Quincy
Doe th hm tr v chui Doe, John Q..
26) nh ngha mt hm nhn vo s th t ca mt thng v
tr v tn ca thng . Vit chng trnh p dng.
27) nh ngha mt hm nhn vo tn ca mt thng v tr v
s th t ca thng . Vit chng trnh p dng.
28) nh ngha hai hm: hm th nht chuyn chui k t bt
k thnh chui k t thng, hm th hai chuyn thnh
chui k t hoa. Vit chng trnh p dng.
173
29) Vit chng trnh c nh ngha mt hm vi tn l
replace_all, biu thc replace_all(str, substring,
newSubstring) tr v mt chui m tt c nhng xut hin
ca substring trong str c thay th bng newSubstring.
30) Mt chui c gi l i xng (palindrome) nu n khng
thay i khi th t ca cc k t c o ngc. V d:
madam, 463364, ABLE WAS I ERE I SAW ELBA l cc
chui i xng. Vit hm nhn vo mt chui v cho bit
chui ny c i xng khng. Vit chng trnh p dng.
31) Vit chng trnh c nh ngha mt hm nhn vo hai
chui v cho bit chui th nht c phi l mt hon v ca
cc k t trong chui th hai hay khng. V d chui
dear l mt hon v ca chui read hay dare.
32) Khng s dng cc hm th vin x l chui ca C++. Gi
s chiu di chui khng ln hn 80 k t v chui c
nhp t bn phm. Hy vit chng trnh c nh ngha cc
hm cho mi yu cu sau:
Sao chp chui s1 sang chui s2. Hin th hai chui ln
mn hnh.
Ly n (gi tr nhp) k t u tin ca chui ngun, hin
th chui ngun v chui kt qu ra mn hnh.
Ly n (gi tr nhp) k t cui cng ca chui ngun,
hin th chui ngun v chui kt qu ra mn hnh.
Chn mt chui vo chui khc ti v tr c ch nh
(nu v tr ch nh khng hp l th chng trnh s
khng thc hin thao tc ny). Hin th chui kt qu ra
mn hnh.
174
Xo mt s k t trong mt chui ti v tr bt u v s
k t cn xo c ch nh (cn kim tra tnh hp l ca
hai tham s ny). Hin th chui cn li ra mn hnh.
33) Vit chng trnh c vo mt chui ti a 80 k t v
nh ngha cc hm thc hin cc yu cu sau:
Hin th s ln m k t xut hin trong chui. Cc k
t c sp theo th t alphabet. V d nhp Le Van B,
th hin th k t 'a' c mt ln, 'b' c mt ln, 'c' khng
c, ...
Hin th s ln m cc t mt k t, hai k t, ba k t, ...
xut hin trong chui. Gi s chiu di ti a ca mt t
l 10 k t.


175
CHNG 7. KIU STRUCT
1. Khi nim
Khc vi kiu mng, struct l kiu d liu c cu trc bao gm
nhiu thnh phn c th thuc nhiu kiu d liu khc nhau.
Kiu struct cho php lu tr thng tin v mt i tng vi y
cc thuc tnh ca n trong mt bin. Mi thuc tnh l mt bin thnh
phn. Kiu d liu ca cc bin ny c th l kiu c s hay kiu
mng, thm ch mt kiu struct khc.
2. Khai bo v truy xut bin struct trong C
Cch 1:
struct <tn cu trc>{

<kiu> <tn bin thnh phn>;

};
struct <tn cu trc> <danh sch bin cu trc>;
Cch 2:
struct <tn cu trc>{

<kiu> <tn bin thnh phn>;
176

} <danh sch bin kiu struct>;
Cch 3:
struct {

<kiu> <tn bin thnh phn>;

} <danh sch bin kiu struct>;
Mi khai bo struct l s m t mt kiu d liu mi, v ch l s
m t cu trc khung chung cho mi bin th hin ca n. Mi bin
kiu struct sau khi khai bo u bao gm bn trong n cc thnh
phn thuc tnh c m t trong phn khai bo kiu struct. Cc thnh
phn thuc tnh ca mi bin th hin c th c truy xut nh vo
ton t du chm . nh sau:
<tn bin struct>.<tn bin thnh phn>
Du chm . c gi l ton t truy nhp thnh phn cu trc.
Nu bn thn thnh phn cu trc cng li l mt kiu struct khc th
vn p dng ton t ny xc nh thnh phn su hn trong cc cu
trc thnh phn.
<tn bin struct>.<tn bin struct thnh phn>.<tn bin tp>
177

3. Lnh typedef
Cho php t tn mi cho mt kiu d liu khai bo v nh
ngha trc:
typedef <tn kiu c> <tn mi>;
V d:
typedef unsigned char byte;
Sau cu lnh ny, byte l tn gi khc ca kiu unsigned char.
Khi , 2 khai bo sau y l tng ng nhau:
byte c;
v
unsigned char c;
Lnh typedef thng c s dng nh ngha cc kiu d liu
phc hp thnh mt tn duy nht. V d: lnh
typedef int * PTR_INT;
nh ngha kiu d liu con tr nguyn. Sau ny khi cn khai bo
mt con tr nguyn, ta ch cn vit:
PTR_INT px; // tng ng vi khai bo int * px;
178
Ta c th n gin cch vit khai bo bin cu trc bng cch s
dng lnh typedef nh sau:
typedef struct{

<kiu> <tn bin thnh phn>;

} <tn mi>;
V d: ta nh ngha phn s nh l kiu cu trc
typedef struct{
int tuso, mauso;
}PHANSO;
Sau , ta nh ngha cc bin kiu PHANSO
PHANSO ps1, ps2;
4. Kiu enum
Cho php dng danh hiu t tn cc gi tr nguyn mt
cch gi nh. Cc tr nguyn trong enum c bt u t tr
0, tr khi xc nh r tr khc. Cc tr nguyn k tip c gi
tr bng tr nguyn trc cng thm mt.
Khai bo
179
enum <tn kiu enum>{Danh sch cc tr nguyn};
V d:
enum Weekdays{Sunday, Monday, Tuesday, Wedneday,
Thirsday, Friday, Satyurday};
Khi : Sunday c tr = 0, Monday c tr = 1, Tuesday c tr = 2,

5. Mng cc struct
const MAX = 20;
const MONHOC = 3;
typedef struct{
int d, m, y;
}NGAYSINH;
typedef struct{
char * ho;
char * ten;
NGAYSINH ngsinh;
float diem[MONHOC];
// . . . .
}SINHVIEN;
180
SINHVIEN sv[MAX];
6. Con tr tr n bin kiu struct
typedef struct{

<kiu> <tn bin thnh phn>;

} <tn mi>;
<tn mi> * <tn bin tr>;
V d:
typedef struct{
int tuso, mauso;
}PHANSO;
PHANSO *pps;
Ta truy xut cc bin thnh phn ca pps nh sau:
(*pps).tuso
(*pps).mauso
hay
181
pps->tuso
pps->mauso
7. Truyn tham s kiu struct cho hm
Truyn bng tham tr: chng trnh s chm i do phi tn thi
gian sao chp gi tr ca bin cu trc dng lm tham s thc cho
tham s hnh thc.
Truyn bng tham bin hay tham tr: d kch thc ca bin cu
trc c ln th a ch ca bin vn ch l kch thc ca a ch vng
nh.
8. Kiu union
Mt bin kiu union cng bao gm nhiu thnh phn ging nh
mt bin cu trc, nhng khc nhau ch: cc trng thuc tnh trong
bin cu trc c cp pht cc vng nh khc nhau, cn cc trng
ca bin union c cp pht chung vng nh. di ca bin union
bng di ca thnh phn di nht trong bin.
Khai bo bin union ging nh khai bo bin struct
V d:
typedef union
{
unsigned int n;
unsigned char ch[2];
182
}VAL;
VAL x;
x.n=0x1B1A;
khi :
ch[0] = 1A v ch[1]=1B
9. Bi tp
1) Cho trc mt thi im gi, pht, giy. Vit chng trnh
tnh thi im 1 giy sau, 1 giy trc.
2) Vit chng trnh tnh khong cch (s giy) gia 2 thi
im cho trc.
3) Cho trc mt b ngy, thng, nm. Vit chng trnh tnh
ngy hm sau, ngy hm trc.
4) Vit chng trnh tnh khong cch (s ngy) gia 2 b
ngy, thng, nm cho trc.
5) Vit chng trnh thc hin cc php tnh (+, -, *, /) trn
phn s.
6) Vit chng trnh thc hin cc php tnh (+, -, *, /) trn s
phc.
7) Vit chng trnh thc hin php cng, v php nhn 2 ma
trn.
183
CHNG 8. File
1. Gii thiu chung
File l c ch cho php lu tr d liu mt cch lu di, vi s
lng ln (v mt l thuyt l khng hn ch).
C++ xem File ch n thun l mt dy cc byte. File c nh
du kt thc bng k hiu c bit (CTRL+Z cho DOS v CTRL+D
cho UNIX, . . .)
c th lm vic vi File a, trc ht ta phi lin kt file vi
dng (stream) nhp/xut bng cch to ra i tng File thuc lp:
fstream (dng cho vic Vo/Ra File), ofstream(dng cho Ghi ra File),
ifstream (dng cho c File). Cc lp ny c khai bo trong tp tin
tiu <fstream.h>.
C 2 loi Vo/Ra file a c bn trong C++: Vo/Ra file nh
dng (formatted file I/O), v Vo/Ra file nh phn (binary file I/O)
Quy trnh thao tc file: m file kim tra x l file ng file
2. Thao tc trn kiu file
2.1. M File ( lin kt knh nhp/xut vi file a )
Dng hm thit lp: <fstream> filevar( <filename> );
Hoc dng hm thnh phn open ca i tng lung nhp/xut:
<fstream> filevar;
filevar.open( <filename>, <i/o mode> );
Cc ch m file:
184
Ch M t
ios::in M c ( mc nh cho
ifstream )
ios::out M ghi ( mc nh cho
ofstream )
ios::ate Bt u c/ghi cui file
ios::app Bt u ghi cui file
ios::trunc Ct b file (TRUNCate)
ios::nocreate Li nu file khng tn ti
ios::noreplace Li khi m ghi ra nu file
tn ti, tr khi ate hoc app
c thit lp
ios::binary M file trong ch nh phn (
mc nh l vn bn)
2.2. X l File
Trc khi c/ghi file, cn kim tra file c m thnh cng
hay khng: if (!file) else
Trong qu trnh lm vic vi file, cn dng hm kim tra kt thc
tp tin trong vng lp: while(!file.eof())
Vo/Ra k t: hm get() v put() lm cc hm thnh phn ca
ofstream v ifstream cho php c k t t file, v ghi k t ra file.
Vo/Ra file nh phn: hm read() v write() cho php thc hin
vic c/ghi mt s lng ln cc byte d liu t b m sang file.
Cc tham s cho hm read() v write() l a ch ca b m d liu
v kch thc ca chng. a ch phi p thnh kiu char v kch
thc c tnh bng byte.
185
Vo/Ra i tng (objects I/O): dng ch m file nh phn, v
cc hm read(), write().
Con tr file: mi i tng file kt hp vi n 2 gi tr nguyn
gi l get pointer ( con tr c ) v put pointer ( con tr ghi ). Hai gi
tr ny cho bit v tr c v v tr ghi hin ti ca con tr trong qu
trnh lm vic vi file. iu khin con tr file phc v cho vic
c/ghi file ti v tr ty , ta dng hm seekg(), seekp() ( di chuyn
con tr file n v tr mong mun), tellg(), tellp() ( c v tr hin
hnh ca con tr file). Hm seekg() v tellg() cho php thit lp v
kim tra con tr c, cn cc hm seekp() v tellp() thc hin tng t
i vi con tr ghi. Hm seekg() v seekp() c 2 tham s: tham s th
1 biu din lch (offset), tnh t v tr c th xc nh bi tham s
th 2 (ios::beg, ios::cur, ios:end)
2.3. ng File
Dng hm close() ca i tng file.
2.4. V d Vo/Ra File nh dng
Hm ghi file s nguyn
void WriteIntFile() {
ofstream outf( test.dat, ios::out );
if ( ! outf ) {
cerr << Cannot open file test.dat . . .\n;
exit( 1 );
186
}
for ( int i = 0; i < 100; i++ )
outf << i + 1 << ;
outf.close();
}
Hm c file s nguyn
void ReadIntFile() {
ifstream inf( test.dat, ios::in );
if ( ! inf ) {
cerr << Cannot open file test.dat . . .\n;
exit( 1 );
}
int i;
while ( ! inf.eof() ) {
inf >> i;
cout << setw( 4 ) << i;
}
inf.close();
187
}
Hm c/ghi file s nguyn
void IntFile() {
fstream file;
file.open( test.dat, ios::out | ios::in );
if ( ! file ) {
cerr << Cannot open file test.dat . . .\n;
exit( 1 );
}
for ( int i = 0; i < 100; i++ )
outf << i + 1 << ;
file.seekg( 0, ios::beg ); // ve dau file
while ( ! file.eof() ) {
inf >> i;
cout << setw( 4 ) << i;
}
file.close();
}
188
2.5. V d Vo/Ra k t
Hm ghi k t ra file
void ReadCharFile() {
ofstream outf( test.txt, ios::out );
if ( ! outf ) {
cerr << Cannot open file test.txt \n;
exit( 1 );
}
char str[] = KHOA TIN HOC;
int i = 0;
while ( s[ i ] ) {
outf.put( s[ i ] ); // outf << s[ i ]
i++;
}
outf.close();
}
Hm c k t t file
void ReadCharFile() {
189
ifstream inf( test.txt, ios::in );
if ( ! inf ) {
cerr << Cannot open file test.txt . . .\n;
exit( 1 );
}
char ch;
while ( ! inf.eof() ) {
inf.get( ch );
cout << ch;
}
inf.close();
}
2.6. V d Vo/Ra File nh phn
#include <iostream.h>
#include <fstream.h>
const int MAX = 100;
void main() {
int buffer[ MAX ] = { 0 };
190
for ( int i = 0; i < MAX; i++ )
buffer[ i ] = i;
ofstream outf( test.dat, ios::binary );
if ( ! outf ) {
cout << Cannot open file test.dat . . .\n;
exit( 1 );
}
outf.write( ( char* ) buffer, MAX * sizeof( int ) );
for ( i = 0; i < MAX; i++ )
buffer[ i ] = 0;
ifstream inf( test.dat, ios::binary );
if ( ! inf ) {
cout << Cannot open file test.dat . . .\n;
exit( 1 );
}
inf.read( ( char* ) buffer, MAX * sizeof( int ) );
for ( i = 0; i < MAX; i++ )
if ( buffer[ i ] = i ) {
191
cerr << Du lieu khong dung . . .\n;
return;
}
cout << Du lieu dung . . .\n;
}
3. Bi tp
1) Vit chng trnh ni hai tp tin vn bn, tp tin th hai
c ni vo cui tp tin th nht. Hin th ni dung ca
tp tin sau khi ni ra mn hnh. Tn hai tp tin c nhp
t bn phm.
2) Vit chng trnh c mt tp tin vn bn, tn tp tin c
nhp t bn phm. Sau m s t trong tp tin v hin
th ra mn hnh.
3) Vit chng trnh c mt tp tin vn bn, m s ln xut
hin ca mt chui (nu c) trong tp tin v hin th ra mn
hnh. Tn tp tin v chui cn tm c nhp t bn phm.
4) Vit chng trnh sao chp mt tp tin vn bn thnh mt
tp tin vn bn khc v mi dng trong tp tin ch phi
c nh s th t pha bn tri. Tn hai tp tin c
nhp t bn phm.
5) Vit chng trnh c mt tp tin vn bn c tn c nhp
t bn phm, m s k t trn mi dng. Chng trnh
phi hin th s dng, chiu di ca dng ngn nht, di
nht, v gi tr trung bnh ca cc k t trn mi dng.
192
6) Vit chng trnh chun ho mt tp tin vn bn thnh tp
tin khc, tn hai tp tin c nhp t bn phm. Chng
trnh s b nhng dng trng v khong trng d tha vi
qui c nh sau: Ch gi li mt khong trng sau du
phy hay du chm v c 5 khong trng cho mi u
dng. Gi s tp tin ch cha cc k t ch ci, khong
trng, du phy, v du chm.
7) Vit chng trnh c tp tin vn bn, m s k t khc
trng, s dng khc trng, s t, v s cu. Sau tnh
trung bnh s k t trn mi t v s t trn mi cu. Gi
s tp tin ch cha cc k t ch ci, khong trng, du
phy, du chm, du chm phy, v du hai chm. Mt t
l mt dy cc k t ch ci lin tip nhau, mt cu l mt
dy cc t c phn cch bng khong trng, du phy,
du chm phy, hay du hai chm v kt thc bng du
chm.
8) Vit chng trnh c tp tin vn bn v hin th ni dung
ca n trong mt khi c ti a 20 dng. Nu sau khi hin
th m ni dung tp tin vn cha c c ht th cn thng
bo cho ngi s dng bit c mun hin th khi k tip
khng. Ngc li, kt thc chng trnh.
9) Gi s mi dng trong tp tin vn bn cha thng tin v
mt sinh vin, bao gm: S th t (t 1 n 100), h tn,
v im (s thc). Vit chng trnh nhp mt s th t
t bn phm v hin th thng tin v sinh vin c s th t
tng ng.
193
TI LIU THAM KHO
1. Nguyn xun Huy, Thut ton, Nh xut bn Khoa Hc v K
Thut.
2. Hong Kim, Gii mt bi ton trn my tnh nh th no, Nh
xut bn Gio dc.
3. Nguyn Thanh Thy (ch bin), Nhp mn lp trnh Ngn
ng C, Nh xut bn Khoa hc v K thut.
4. Trn Vn Lng, Lp trnh hng i tng s dng C++, Nh
xut bn Thng K.
5. GS. Phm Vn t, C++ v lp trnh hng i tng, Nh
xut bn Khoa hc v K thut.
6. Nguyn Thanh Thy, Lp trnh hng i tng, Nh xut
bn Khoa hc v K thut.
7. T Oai Hng, Gio trnh C s lp trnh s dng ngn ng
C++, Ti liu lu hnh ni b (Trng i Hc M TP. HCM)
8. Joel Adams & Larry Nyhoff, C++ An Introduction to
Computing, Prentice Hall 2002, Third Edition.
9. H.M. Deiteil & P.J. Deitel, C++ How to Program, Prentice
Hall, New Jersey, 2003, Fourth Edition.
10. Bjarne Stroustrup, The C++ Programming Language,
Addition Wesley Longman, 1997, Third Edition.




194

















Bin son L PH HIU

You might also like