You are on page 1of 79

1

MN HC: C S LP TRNH+K THUT LP TRNH


(L thuyt: .. tit Thc hnh phng my: .. tit)
Mc ch & yu cu .......................................................................................................................................... 3
Ti liu tham kho ........................................................................................................................................ 4
Thi ................................................................................................................ Error! Bookmark not defined.
Phng php bi ging ................................................................................................................................ 4
1
MT S KHI NIM C BN V LP TRNH (. . . tit)............................................................... 5
1.1
Thut ton (Algorithm) .................................................................................................................... 5
Khi nim .......................................................................................................................................... 5
Cc c trng ca thut ton .......................................................................................................... 5
Cc cng c biu din thut ton .................................................................................................... 5
Ngn ng lp trnh............................................................................................................................ 5
Chng trnh (my tnh) .................................................................................................................. 5
1.2
Cc bc xy dng chng trnh .................................................................................................... 6
2
CC YU T C BN CA NNLT C/C++ ( . . . tit) .......................................................................... 7
B k t .................................................................................................................................................. 7
Danh hiu (identifier) ............................................................................................................................ 7
T kha (keyword) ................................................................................................................................ 7
Ch thch (comment) ............................................................................................................................ 7
Cc kiu d liu c bn (base type) ..................................................................................................... 7
Hng (constant) ..................................................................................................................................... 8
Bin (variable)........................................................................................................................................ 9
Biu thc (expression)........................................................................................................................... 9
Chuyn i kiu (type conversion) ....................................................................................................... 9
Cc ton t (operator) ......................................................................................................................... 10
u tin v trt t kt hp cc ton t (precedence and associativity) ....................................... 11
Cu lnh (statement, instruction) ....................................................................................................... 12
Xut / Nhp d liu n gin trong C/C++ ....................................................................................... 12
Mt vi chng trnh C/C++ n gin .............................................................................................. 13
3
CC CU TRC IU KHIN CHNG TRNH (. . . tit) .......................................................... 16
Cu trc r nhnh (if . . . then . . . else . . .) ....................................................................................... 16
Cu trc lp while (. . .) ...................................................................................................................... 17
Cu trc lp do . . . while ( . . .) .......................................................................................................... 17
Cu trc lp for ( . . .) ......................................................................................................................... 18
Cu trc la chn (switch . . .) ........................................................................................................... 18
Cu lnh break..................................................................................................................................... 19
Cu lnh continue (t dng)................................................................................................................. 19
4
HM & QUI (. . . tit) ...................................................................................................................... 20
Khi nim ............................................................................................................................................ 20
Khai bo v nh ngha hm .............................................................................................................. 20
Lnh return ......................................................................................................................................... 20
Hm khng c tham s ....................................................................................................................... 21
Hm vi nhiu tham s....................................................................................................................... 21
Hm nguyn mu (function prototype) .............................................................................................. 21
T chc mt chng trnh C (trn cng 1 tp tin) ........................................................................ 21
Cc phng php truyn tham s ..................................................................................................... 21
Phm vi (scope) v cp lu tr (storage class) ca cc i tng .................................................. 22
Ging vin PTT

Lp trnh C++

C ch gi hm v b nh stack ........................................................................................................ 25
Hm c tham s v gi tr ngm nh (Function with default arguments) ....................................... 26
Np chng hm (Function overloading) ............................................................................................. 26
Mt s gi khi thit k hm ............................................................................................................ 26
Mt s v d minh ha ........................................................................................................................ 26
Khi nim qui (recursion) ............................................................................................................. 26
qui trong C ................................................................................................................................. 27
KIU MNG (. . . tit) ........................................................................................................................... 28
Khi nim mng 1 chiu v mng nhiu chiu................................................................................. 28
Khai bo & khi to gi tr trong C ............................................................................................... 28
Truy xut cc phn t ca mng ....................................................................................................... 28
Truyn tham s mng cho hm ......................................................................................................... 28
Cc thao tc c bn trn mng .......................................................................................................... 29
Chui k t (String) ............................................................................................................................. 34
KIU CON TR & KIU QUI CHIU (. . . tit) ............................................................................... 35
Khi nim con tr ............................................................................................................................... 35
Khai bo bin con tr ......................................................................................................................... 35
Truy xut bin tr ............................................................................................................................... 35
S hc con tr ...................................................................................................................................... 36
Lin h gia con tr v mng ............................................................................................................ 36
Con tr a cp ..................................................................................................................................... 36
Truyn tham s con tr cho hm....................................................................................................... 36
Mng cc con tr ................................................................................................................................. 37
T kha const vi con tr .................................................................................................................. 37
Cp pht ng ..................................................................................................................................... 37
Con tr hm......................................................................................................................................... 39
Con tr v chui k t ......................................................................................................................... 39
ng dng con tr ................................................................................................................................ 39
S lc v kiu tham chiu (Reference) - Ch c trong C++. ........................................................... 39
................................................................................................................................................................... 40
KIU STRUCT (. . . tit) ........................................................................................................................ 41
Khi nim ............................................................................................................................................ 41
Khai bo v truy xut bin struct trong C..................................................................................... 41
Lnh typedef ........................................................................................................................................ 41
Kiu enum............................................................................................................................................ 42
Mng cc struct ................................................................................................................................... 42
Con tr tr n bin kiu struct ........................................................................................................ 42
Truyn tham s kiu struct cho hm ................................................................................................ 43
Kiu union ........................................................................................................................................... 43
ng dng ............................................................................................................................................. 43
I TNG V LP (. . . tit) ............................................................................................................ 44
Khi nim ............................................................................................................................................ 44
Khai bo, nh ngha v s dng lp ................................................................................................ 44
Phm vi (trong C++) ........................................................................................................................... 44
Thuc tnh truy xut........................................................................................................................... 44
Hm dng (constructor)..................................................................................................................... 45
Hm hy (destructor) ......................................................................................................................... 45
Php gn cc i tng ...................................................................................................................... 46
Ging vin PTT

Lp trnh C++

10

11

Hm thit lp sao chp (copy constructor) ....................................................................................... 46


Con tr this .......................................................................................................................................... 47
Thnh phn DL static (static data members) ................................................................................... 47
Hm thnh phn static (static function member) ............................................................................ 47
i tng hng (constant object) ...................................................................................................... 47
Thnh phn DL hng (constant member) ........................................................................................ 47
Hm thnh phn hng (constant function) ...................................................................................... 48
i tng tm thi (temporary object) ............................................................................................ 48
Hm bn (friend function) v lp bn (friend class) ....................................................................... 48
Con tr i tng................................................................................................................................ 49
Tham chiu i tng ........................................................................................................................ 49
Mng cc i tng ............................................................................................................................ 49
V d cui chng ............................................................................................................................... 49
NP CHNG TON T (OPERATOR OVERLOADING) TRONG C++ (. . . tit) ..................... 50
Gii thiu chung .................................................................................................................................. 50
C bn v np chng ton t ............................................................................................................. 50
Cc kh nng v gii hn v np chng ton t .............................................................................. 51
Hm ton t l hm t do (hm bn) ............................................................................................... 51
Hm ton t l hm thnh phn ....................................................................................................... 51
Np chng ton t mt ngi ............................................................................................................... 51
Np chng ton t 2 ngi ................................................................................................................... 51
Mt s v d tiu biu ......................................................................................................................... 51
Chuyn i kiu .................................................................................................................................. 51
File (. . . tit) ......................................................................................................................................... 53
Gii thiu chung .................................................................................................................................. 53
M File ( lin kt knh nhp/xut vi file a ) .................................................................................... 53
X l File ............................................................................................................................................. 53
ng File .............................................................................................................................................. 54
V d Vo/Ra File nh dng ............................................................................................................. 54
V d Vo/Ra k t .............................................................................................................................. 55
V d Vo/Ra File nh phn ............................................................................................................... 55
V d Vo/Ra File i tng .............................................................................................................. 56
N TP (. . . tit) ................................................................................................................................ 56

Mc ch & yu cu
o Rn luyn t duy thut ton, hnh thnh bc u k nng lp trnh theo tip cn hng cu trc
thng qua vic gii mt s bi ton tng i n gin trn my tnh bng NNLT C++.
o Kt thc mn hc, SV cn nm vng cc kin thc c bn v NNLT C++, lm tin cho vic hc
tip mn KTLT.
o Cc ni dung quan trng cn nm vng: cc cu trc iu khin CT (r nhnh, la chn, lp), xy
dng, thit k hm t to, t chc chng trnh C/C++, phng php tip cn phn r, tip cn hm,
phng php tip cn trc tip, . . .
Ni dung:
Phn C s lp trnh
Chng 1: Mt s khi nim c bn v lp trnh.
Chng 2: Cc yu t c bn ca ngn ng C/C++.
Chng 3: Cc cu trc iu khin (chng trnh) control structures.
Ging vin PTT

Lp trnh C++

4
Chng 4: Hm (function) & qui (recursion).
Chng 5: Kiu mng (array). (Mng 1 chiu)
Phn K thut lp trnh
Chng 5: Kiu mng (array). (Mng 2 chiu)
Chng 6: Kiu con tr (pointer) v kiu qui chiu (reference)
Chng 7: Kiu cu trc (struct)
Chng 8: Kiu class (class)
Chng 9: Np chng ton t (operator overloading)
Chng 10: Kiu tp tin (file)
n tp
Ti liu tham kho
Nhp mn lp trnh Ngn ng C NXB KHKT
GT tm tt v bi tp NN C
Cc ti liu gio trnh hin ang bn trn th trng
nh gi kt qu
Gm 2 phn:
Kim tra cui k (6 ): SV c tham gia ti a 2 ln.
Kim tra gia k (4 ) gm 4 t nh sau:
o t 1: sau khi kt thc chng Cc yu t c bn ca NNLT C++. (1 )
o t 2: sau khi kt thc chng Cc cu trc iu khin. (1 )
o t 3: sau khi kt thc chng Hm. (1 )
o t 4: sau khi kt thc chng Mng. (1 )
im kt qu l tng ca 2 phn (im kim tra cui k v im kim tra gia k) cng li.
im t >= 5 .
Phng php bi ging
SV nghe ging kt hp vi ghi chp nhng ni dung c bn.
Thc hin cc bi tp ti nh v ti phng my.

Ging vin PTT

Lp trnh C++

5
CNG CHI TIT
1 MT S KHI NIM C BN V LP TRNH (. . . tit)
1.1 Thut ton (Algorithm)
Khi nim
- Thut ton l khi nim c s ca ton hc v tin hc.
- 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.
- Thut ton l phng php th hin li gii ca vn bi ton.
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. VD:
- Tnh dng: Thut ton phi dng sau mt s hu hn bc thc hin. VD:
- Tnh ng n: Thut ton phi cho kt qu ng theo yu cu ca bi ton t ra. VD:
- Tnh ph dng: Thut ton c th c s dng li gii mt lp bi ton tng t. VD:
- 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. VD:
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.
- 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 :
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 DL.
Hnh thoi m t s r nhnh, la chn.
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.
Ngn ng lp trnh
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 TBD 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.
- 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.
Ging vin PTT

Lp trnh C++

1.2

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 CT to thnh tp tin EXE.
- Ni chung, mt chng trnh my tnh thng b cc gm 3 phn: NHP X L XUT
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 ? . . .
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.

Ging vin PTT

Lp trnh C++

7
2

CC YU T C BN CA NNLT C/C++ ( . . . tit)


B k t
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: + - * / ^ | # $ & % ( ) [ ] _ = ~ . . .
Danh hiu (identifier)
- Dng t tn cho cc i tng nh hng, bin, hm, . . .
- di ti a ca 1 danh hiu (ty theo TBD) 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:
Nn t tn cho cc i tng mt cch gi nh (Mnemonic).
Tn hng c t bng ch hoa.
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 DL do USER nh ngha c bt u bng ch hoa.
- Ch :
Mi danh hiu phi c khai bo trc khi s dng. TBD s bo li undefined symbol trong
qu trnh bin dch chng trnh nu vi phm nguyn tc ny.
C phn bit ch hoa v ch thng (Case sensitive).
Trong cng mt phm vi (scope), khng c t trng danh hiu..
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. NNLT 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, . . .
Ch thch (comment)
- c dng lm cho chng trnh d c, d hiu, d bo tr hn.
- TBD s b qua nhng ni dung nm trong phn ch thch.
- C 2 loi ch thch:
Ch thch trn mt dng: k hiu // . . . phn ch thch (cho n cui dng) . . . .
Ch thch trn nhiu dng: k hiu /*... phn ch thch (c th tri di trn nhiu dng)... */
Cc kiu d liu c bn (base type)
- 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)
- 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:
Ging vin PTT

Lp trnh C++

8
Cc php ton s hc: + , -, *, / (khng c php ton %)
Cc php ton so snh: <, <=, >, >=, ==, !=
- S thc ( chnh xc kp 15 ch s l):
Tn kiu: double
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
- 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 a thm cc tin t: short, long, unsigned, signed vo
trc tn cc kiu c s nh sau:
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)
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)
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. VD: 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 nguyn). Hai phn ny c phn cch bi ch e hoc E. VD: 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. VD: 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. VD: \65, \7, \n
VD: 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
Ging vin PTT

Lp trnh C++

9
\
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:
Dng ch th tin x l: #define <tn hng> <chui thay th>
Dng t kho const:
const <tn kiu> <tn hng>=<gi tr>;
VD:
const int MAX = 10;
hay
#define MAX 10
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: <tn kiu> <danh sch cc bin>;
Trong :
<tn kiu> l mt kiu d liu hp l bt k c trong C.
<Danh sch cc bin> l mt hay nhiu bin, c phn cch bng du ,.
Ch : lnh khai bo bin lun c kt thc bng du ;
VD: . . .
- C th khai bo v ng thi khi to gi tr cho bin nh sau: <tn kiu> <tn bin>=<gi
tr>;
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.
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, TBD 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>
- VD:
Ging vin PTT

Lp trnh C++

10
Cc ton t (operator)
- C rt giu v ton t. Sau y l mt s ton t thng dng:
- Ton t s hc
K hiu
ngha
S ngi
Ton hng
VD
+
Cng
2
int, float, double, char
Tr
2
- nt *
Nhn
2
- nt /
Chia
2
- nt %
Modulo
2
int, char (khng c kiu s thc)
- Ton t quan h (so snh)
K hiu
ngha
S ngi
Ton hng
VD
<
Nh hn
2
int, float, double, char
<=
Nh hn hoc bng 2
- nt >
Ln hn
2
- nt >=
Ln hn hoc bng 2
- nt ==
So snh bng
2
- nt !=
So snh khc nhau
2
- nt - Ton t logic
K hiu
ngha
S ngi
Ton hng
VD
!
NOT logic
1
int, float, double, char
&&
AND logic
2
- nt ||
OR logic
2
- nt - Ton t gn dng thay i tr ca mt bin bng tr ca mt biu thc no .
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: TBD 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.
VD:
- 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
VD
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
...
- 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>.
Cch tnh gi tr biu thc iu kin:
B1: TBD 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
TBD s dng tr ca <BT3> lm tr ca ton b biu thc iu kin.
VD:
Ging vin PTT

Lp trnh C++

11
- 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
Dng hu t: biu thc chung s dng tr c ca <bin>, sau <bin> mi c thay i tr.
- Ton t dch chuyn s hc
K hiu
ngha
S ngi
Ton hng
VD
<<
Dch tri
2
int
>>
Dch phi
2
- nt - Ton t thao tc trn tng bt
K hiu
ngha
S ngi
Ton hng
VD
!
o bit
1
int
&
AND bit
2
- nt |
OR bit
2
- nt - Ton t p kiu ( ni trn)
- Ton t ly a ch ca: &
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>
- Ton t sizeof:
sizeof(<biu thc>) tr v kch thc (s bytes) ca biu thc.
sizeof(<kiu>) tr v kch thc (s bytes) ca kiu.
u tin v trt t kt hp cc ton t (precedence and associativity)
- Trong qu trnh tnh ton 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
= += -= *= /= %= . . .

Ging vin PTT

Lp trnh C++

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 do . . . while().
Ch :
Cu lnh ; l mt cu lnh rng, nhng hp l. (Ch : khai bo bin, khai bo hm nguyn mu
cng c kt thc bng du ;)
Xut / Nhp d liu n gin trong C/C++
Xut d liu ra mn hnh:
Trong 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*).
VD:
cout<<65;
cout<<A;
cout<<A;
cout<<65<< <<ch<< <<A<< <<A\n<<endl;
Nhp d liu t bn phm:
Trong C, dng hm scanf(. . .) khai bo trong tp tin tiu <stdio.h> (xem ti liu)
Trong C++, 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.
VD:
Gi s c cc khai bo sau:
int x,y;
double z;
char ch;
Ging vin PTT

Lp trnh C++

13
Ta c th vit cc lnh xut/nhp DL:
cin>>x>>y;
cin>>z;
cin>>ch;
cout<<x<< <<y<< <<ch<< <<z<<endl;
Thng thng, nhp d liu cho bin ta dng cp cu lnh sau:
cout << Nhp tr cho bin . . . :; // cu dn hng
cin >> . . . ;
Ch :
Lnh sau y l cu lnh hp l: cin>>x,y,z; // ngha . . .
Mt vi chng trnh C/C++ n gin
CT rng ch c hm main()
//Null.cpp
void main(){
}
Gii thch:
Mt chng trnh 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++:
o bin dch: n t hp phm CTRL+F.
o to ra tp tin .exe: n phm F7.
o chy chng trnh: n t hp phm CTRL+F5.
CT in ra mn hnh dng ch HELLO C!.
//Hello.cpp
#include <iostream.h> // s dng cout
void main(){
cout<<HELLO C!;
}
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, TBD 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 TBD 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 <<.

Ging vin PTT

Lp trnh C++

14
Trong phn thn ca hm main() ch c 1 cu lnh duy nht, yu cu TBD thc hin vic in dng ch
HELLO C! t trong cp nhy i.
CT m phng my tnh n gin.
//Calculator.cpp
#include <iostream.h> // s dng cout
void main(){
int x,y;
cout<<Nhp tr cho cc bin x, y : ; cin>>x>>y;
cout<<x<<+<<y<<=<<x+y;
cout<<x<<-<<y<<=<<x-y;
cout<<x<<*<<y<<=<<x*y;
cout<<x<</<<y<<=<<x/y; //ch , nu bin y=0 th TBD s bo li divide by zero
}
CT nhp vo 3 s nguyn, sau in ra mn hnh cho bit s min, max ca 3 s ny.
// MinMax.cpp
#include <iostream.h> // s dng cout
void main(){
int a, b, c;
cout<<Nhp 3 s a, b, c : ; cin>>a>>b>>c;
cout<<MAX = <<(a>b ? (a>c ? a : c) : (b>c ? b : c));
cout<<MIN = <<(a<b ? (a<c ? a : c) : (b<c ? b : c));
}
CT nhp 1 k t ch thng/hoa, sau in ra k t ch hoa/thng tng ng.
// Kitu.cpp
#include <iostream.h> // s dng cout
#include <assert.h> // s dng hm assert(<biu thc logic>)
void main(){
int kt;
cout<<Nhp 1 k t ch (thng/hoa) : ; cin>>kt;
assert(kt>=A && kt<=Z || kt>=a && kt<=z);
cout<<K t tng ng l ;
cout<<char((kt>=a && kt<=z) ? (kt-a+A) : (kt-A+a));
}
CT 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>
void main(){
int m, y;
cout<<Nhp vo thng m = ; cin>>m;
cout<<Nhp vo nm y = ; cin>>y;
// Kim tra DL nhp ti y . . .
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);
Ging vin PTT

Lp trnh C++

15
cout<<S ngy ca thng <<m<< nm <<y<< l <<numDays;
}
CT nhp vo gi, pht, giy v tnh thi im 1 giy sau .
// NextSec.cpp
#include <iostream.h> // s dng cout
void main(){
int h, m, s;
cout<<Nhp gi, pht, giy : ; cin>>h>>m>>s;
// Kim tra DL nhp ti y . . .
++s>59 ? (++m>59 ? ++h : 0) : 0;
s %= 60;
m %= 60;
h %= 24;
cout<<Thi im 1 giy sau : ;
cout << h/10 << h%10 << : << m/10 << m%10 << : << s/10<< s%10;
}
CT nhp vo ngy, thng, nm v tnh ngy hm sau, ngy hm trc?
// NextDays.cpp
#include <iostream.h> // s dng cout
void main(){
int d, m, y;
cout<<Nhp ngy, thng, nm : ; cin>>d>>m>>y;
// Kim tra DL nhp ti y . . .
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);
++d>numDays ? (d=1,++m>12 ? m=1,++y : 0) : 0;
cout<<Ngy hm sau l ngy << d<</<<m<</<<y<<endl;
}

Ging vin PTT

Lp trnh C++

16
3 CC CU TRC IU KHIN CHNG TRNH (. . . tit)
Hu ht cc thut ton u c th c ci t bng 3 cu trc c bn sau:
Cu trc tun t: Cc cu lnh c thc hin ln lt theo th t 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).
Cu trc r nhnh (if . . . then . . . else . . .)
C php:
if (<K>) <lnh1> ;
[else <lnh2>;]
trong :
<K> thng l biu thc logic.
Phn else l khng bt buc phi c. Cu lnh if khng c phn else c gi l cu lnh if
thiu.
<lnh1>, <lnh2> c th l cu lnh n, hoc cu lnh ghp, hoc cu lnh iu khin.
ngha:
Nu <K> tha th thc hin <lnh1>, cn ngc li th thc hin <lnh2>. Nh vy ch
<lnh1> hoc <lnh2> c thc hin ty theo tr ca <K>.
S thc hin cu lnh:
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 (<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 :
Ch :
Coi chng qun cp du (<K>) sau t kha if.
Coi chng d du ;
Coi chng thiu cp du {<khi lnh>}
Mt s dng cu trc if 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:
if (K1)
if (K2) S1;
else S2;
Dng 4:
if (K1)
{
if (K2) S1;
}
Ging vin PTT

Lp trnh C++

17
else S2;
Cu trc lp while (. . .)
C php:
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:
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.
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.
Lu :
Ch :
Coi chng qun cp du (<K>) sau t kha while.
Coi chng d du ;
Coi chng thiu cp du {<khi lnh>}
Cu trc lp do . . . while ( . . .)
C php:
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.
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 :
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.
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 (<K>) sau t kha while.
Coi chng thiu cp du {<khi lnh>}

Ging vin PTT

Lp trnh C++

18
Cu trc lp for ( . . .)
C php:
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.
<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>.
B2: Tnh tr ca <K>.
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> v quay v B2. Cn ngc li (<K>=0) th
chuyn sang B4.
B4: Thot khi vng lp, v chuyn quyn iu khin sang cu lnh k tip sau lnh for.
Lu :
Nhn xt:
<phn khi to> ch c thc hin duy nht 1 ln.
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
Coi chng d du ; trc phn <lnh>
Coi chng thiu cp du {<khi lnh>}
Cu trc la chn (switch . . .)
C php:
switch(<BT>)
{
case <val1>: [<lnh1>; break;]
case <val2>: [<lnh2>; break;]
....
case <valn>: [<lnhn>; break;]
[default: <lnh>; break;]
}
ngha: Tu 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().
S thc hin cu lnh:
B1: <BT> c tnh tr.
B2: TBD s ln lt so snh tr ca <BT> va tnh c vi cc gi tr <val1>, <val2>, . . .
sau nhn case. Nu so trng th <lnh> tng ng (nu c) c thc hin, cho n khi gp
lnh break. Nu khng c 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 :
Ging vin PTT

Lp trnh C++

19
Ch :
Coi chng qun lnh break;
Nu mun thc hin <lnh> trong mt s trng hp gi tr <gti> sau nhn case, ta t cc
<gti> gn nhau, v ghi lnh ti <gti> cui cng ca nhm.
Cch vit cu lnh switch:
switch()
{
}
Cu lnh break
Dng thot khi vng lp trong cng cha n. TBD s b qua cc cu lnh sau lnh break;
Dng thot khi cu lnh switch().
VD:
Cu lnh continue (t dng)
Khi gp cu lnh continue trong 1 vng lp, TBD b qua cc lnh cn li trong thn vng lp ny
bt u mt ln lp mi.
C th thay thut ton c s dng lnh continue bng 1 cu trc iu khin khc.
VD:
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.

Ging vin PTT

Lp trnh C++

20
4

HM & QUI (. . . tit)


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 c 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.
VD: Cc hm th vin.
Kim tra tnh hp l ca 1 b ngy thng nm nhp vo t bn phm.
- 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 C/C++:
Hm th vin do TBD cung cp.
Hm t to do USE R nh ngha.
- Hm th vin (library functions): TBD 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 ngha hng, bin, hm nguyn mu, . . . bng cc ch th
tin x l #include <tn tp tin>.
- Hm t to: Ngoi ra, C cho php USER nh ngha thm cc hm khc phc v cho nhu cu
lp trnh ca mnh.
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
....
}
- <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 DL hp l trong C/C++, 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 TBD s ngm hiu l kiu int.
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).
Lnh return
Hm sau khi c khai bo v nh ngha, c th c gi chy 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;
Ging vin PTT

Lp trnh C++

21
- Trng hp hm c gi tr tr v khc void: Khi gp lnh return <biu thc>; TBD s kt
thc hot ng ca hm, v tr ca <biu thc> c tr v cho ni gi hm.
Hm khng c tham s
VD1: chng trnh in dng ch HELLO C
VD2: chng trnh v hnh . . .
Hm vi nhiu tham s
VD1: chng trnh tnh s max ca 5 s nguyn.
VD2: chng trnh v hnh tam gic rng.
Hm nguyn mu (function prototype)
- Hm nguyn mu c dng cung cp thng tin cho TBD v tn hm, kiu gi tr tr v, s
lng, th t v kiu ca cc tham s ca hm. TBD 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>]) ;
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 DL v tn bin c phn cch bi du phy ,
- VD: 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
T chc mt chng trnh 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
HM MAIN()
PHN NH NGHA HM
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): Trong phng php ny, TBD 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, TBD 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.

Ging vin PTT

Lp trnh C++

22
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, TBD 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 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.
- VD: 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 swap(int ,int ); // truyn bng tr
hay
void swap(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.
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 a ra cc khi nim phm vi v cp lu tr.
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 khi (Block scope)
Phm vi hm (Function scope)
Phm vi tp tin (File scope)
Phm vi chng trnh (Program scope)
VD v phm vi:
#include <iostream.h>
int x=3; // bin x ton cc
const int MAX = 10;
void fct(int x);
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;
}
Ging vin PTT

Lp trnh C++

23
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 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 cha
n hay kt thc thc hin hm. Ngc li, cc bin ton cc c thi gian tn ti l thi gian ca
chng trnh.
Cp lu tr l cch thc TBD 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. (VD 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 TBD lu tr bin trong thanh ghi. Ch , TBD c
th b qua khng p ng li yu cu ny nu c qu nhiu li ngh ny hoc nu khng cn thanh
ghi cp pht.
Bin static (cn gc l bin tnh) l bin c cp pht trong vng nh DATA (trnh by s s
dng b nh ca mt chng trnh 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. TBD 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), TBD s khng cp pht thm
vng nh cho bin c khai bo extern m s dng chung vng nh cp pht trc .
Storage class
Where declared
Keyword
Lifetime
Scope
Function
auto (default)
Function
Function
Function
register
Function
Function
Function
static
program
Function
External
static
program
One File only
External
-----program
One File
External
extern
program
MultiFile

Ging vin PTT

Lp trnh C++

24
Visibility (Scope) of variables
File1
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()
int m;
File2
extern int a;
void F2()
extern int b;
extern int c;
void F3()
extern int d;
#include <iostream.h>
#include "file2.cpp"
const int MAX=10;
int x=3;
void main() {
const int MAX = 5;
int x = 1;
x += ::MAX;
cout<<"X cuc bo trong ham main() = "<<x<<endl;
cout<<"X toan cuc = "<<::x<<endl;
f1();
f2();
}
#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()
{
Ging vin PTT

Lp trnh C++

25
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() {
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;
}

C ch gi hm v b nh stack
- Mt chng trnh C l tp hp cc hm trong hm 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 TBD 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, TBD 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.
- VD: Xt chng trnh sau:
void A();
void B();
void C();
void D();
void E();
void main() {
....
D();
E();
....
}
void A()
{
....
B();
....
}
void B() {
....
C();
....
}
void C() {
....
}
void D() {
....
Ging vin PTT

Lp trnh C++

26
A();
....
}
Hm c tham s v gi tr ngm nh (Function with default arguments)
- C++ cho php ci t hm vi tham s c gi tr ngm nh.
- Khai bo:
<tr tr v> <tn hm>(<kiu> <thamso1>=<giatri1>, <kiu> <thamso2>=<giatri2>, . . . );
- nh ngha: nh hm thng thng.
<tr tr v> <tn hm>(<kiu> <thamso1>, <kiu> <thamso2>, . . . ) {
// cc cu lnh . . .
}
Np chng hm (Function overloading)
- C++ cho php dng chung mt danh hiu t tn cho cc hm khc nhau. Ta gi l s 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. TBD s cn c vo cc yu t ny xc nh hm
cn thc hin mi khi gp li gi hm c np chng.
- Ch :
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 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 hm th p dng phng php truyn bng gi tr. Cn ngc li th p
dng cch truyn bng tham chiu.
Mt s v d minh ha
Khi nim qui (recursion)
- Khi nim
- Mt khi nim c gi l qui nu trong nh ngha ca n c cha m t ca chnh n.
VD1: nh ngha s t nhin.
VD2: nh ngha giai tha.
VD3: nh ngha dy s Fibonacci.
VD4: nh ngha tng N s t nhin u tin.
- Nhn xt:
Dng qui trn c 2 phn: phn dng v phn qui
Ging vin PTT

Lp trnh C++

27
VD5: Bi ton thp H Ni
qui trong C
- Hm qui trong C
- NNLT C/C++ cho php mt hm gi li chnh n. Ta gi l hm qui.

Ging vin PTT

Lp trnh C++

28
KIU MNG (. . . tit)
Khi nim mng 1 chiu v mng nhiu chiu
- Mng l kiu d liu c cu trc bao gm nhiu phn t cng kiu v c b tr vng nh lin
tc. VD: mng cc s nguyn, cc s thc, cc k t, . . .
- Kiu mng cho php gii quyt nhiu bi ton lp trnh mt cch gn, sc tch. VD: bi ton
xc nh s min, max ca nhiu s nguyn, tm kim, sp xp trn 1 dy cc s liu, . . .
- Kiu ca cc phn t mng gi l kiu c s.
- Mng c kch thc l s phn t trong mng.
- 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.
Khai bo & khi to gi tr trong 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++.
<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>]. . .
VD:
int arr1D[5]; // khai bo mng nguyn 1 chiu c tn arr1D gm 5 phn t.
int arr2D[2][3]; // khai bo mng nguyn 2 chiu c tn arr2D gm 6 phn t (2 dng 3 ct)
Ta c th khi to gi tr ban u cho cc phn t ca mng nh sau:
int arr1D[5] = {3,5,4,6,2};
int arr1D[ ] = {3,5,4,6,2};
int arr1D[5] = {3}; // phn t u tin c tr 3, cc phn t cn li = 0.
int arr1D[5] = {0}; // tt c cc phn t mng c khi to gi tr = 0.
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}};
int arr2D[2 ][3] = {0}; // tt c cc phn t mng c khi to gi tr = 0.
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]
VD: mng 1 chiu (v hnh)
VD: mng 2 chiu (v hnh)
- Ch :
TBD C/C++ khng kim tra vic vi phm bin mng.
Kch thc ca mng phi l biu thc hng
Truyn tham s mng cho hm
- Trong phn khai bo v nh ngha hm, ta ghi tn bin mng trc cp du []. i vi mng
nhiu chiu, ta phi ghi r kch thc ca cc chiu cn li ca mng, tr kch thc ca chiu
u tin trng nh i vi mng 1 chiu. Cn 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 TBD s cp
5

Ging vin PTT

Lp trnh C++

29
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 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.
Cc thao tc c bn trn mng
- 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];
Nhp gi tr cho cc phn t mng.
Gi s khai bo mng 1 chiu cc s nguyn gm MAX=20 phn t
// Hm nhp gi tr cho cc phn t mng t bn phm
void Nhap(int a[], int n)
{
assert(n>0 && n<=MAX);
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 TaoMang(int a[], int n)
{
assert(n>0 && n<=MAX);
randomize(); // hm khi ng b to s ngu nhin (khai bo trong <stdlib.h>)
for (int i=0; i<n; i++)
a[i] = random(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 [-M . . M]
void TaoMang(int a[], int n)
{
assert(n>0 && n<=MAX);
randomize(); // hm khi ng b to s ngu nhin (khai bo trong <stdlib.h>)
a[0] = random(2*M+1) M;
for (int i=1; i<n; i++)
Ging vin PTT

Lp trnh C++

30
a[i] = a[i-1]+ random(10);
}
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 Xuat(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 Xuat(const int a[][COLS], 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;
}
}
Thm 1 phn t vo mng.
// Hm thm gi tr x vo cui mng
void Them(int a[], int &n, int x)
{
assert(n>=0 && n<MAX); // bo m khng vi phm bin mng
a[n] = x;
n++;
}
// Hm thm gi tr x vo mng ti v tr c ch s pos th t mng l khng quan trng
void Them(int a[], int &n, int x, int pos)
{
assert(n>=0 && n<MAX && pos>=0 && pos<n); // bo m khng vi phm bin mng
a[n] = a[pos];
a[pos] = x;
n++;
}
// Hm thm gi tr x vo mng ti v tr c ch s pos th t mng l quan trng
void Them(int a[], int &n, int x, int pos)
{
assert(n>=0 && n<MAX && pos>=0 && pos<n); // bo m khng vi phm bin mng
for (int i=n; i>pos; i--)
a[i] = a[i-1];
a[pos] = x;
n++;
}
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 Xoa(int a[], int &n, int pos)
Ging vin PTT

Lp trnh C++

31
{
assert(n>0 && n<=MAX && pos>=0 && pos<n); // bo m khng vi phm bin mng
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 Xoa(int a[], int &n, int pos)
{
assert(n>0 && n<=MAX && pos>=0 && pos<n); // bo m khng vi phm bin mng
for (int i=pos; i<n-1; i++)
a[i] = a[i+1];
n--;
}
Tm kim trn mng.
// 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 cha c th t
// Tm kim tuyn tnh
int TimTT(const int a[], int n, int x)
{
for (int i=0; i<n; i++)
if (a[i]==x) 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 TimTT(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 TimNP(const int a[], int n, int x)
{
int first=0, last=n-1, mid;
while(first<=last)
{
mid = (first + last) / 2;
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;
}
Sp xp mng.
Ging vin PTT

Lp trnh C++

32
sp xp mng gm n phn t, ta tm cch t (n-1) phn t vo ng v tr ca n theo tiu chun t ra.
Cui cng ta c mt mng c xp th t.
// 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].
vois Swap (int &x, int &y)
{
int z = x;
x = y;
y = z;
}
void SimpleSort(int a[], int n)
{
int i, j;
assert(n > 0);
for (i=0; i<n-1; i++)
for (j=i; j<n; j++)
if (a[i] > a[j] swap(a[i],a[j]);
}
// Phng php sp xp la chn (selection sort)
void SelectionSort(int a[], int n)
{
assert(n > 0);
int i, j, min, tam;
for (i=0; i<n-1; i++)
{
tam = a[i];
min = i;
for (j=i; j<n; j++)
if (a[min] > a[j]) min = j;
a[i] = a[min];
a[min] = tam;
}
}
// 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)
{
assert(n > 0);
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]);
}
// Phng php sp xp chn (insertion sort)

Ging vin PTT

Lp trnh C++

33
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;
assert(n > 0);
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;
}
}
// Phng php sp xp chn 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.

Ging vin PTT

Lp trnh C++

34
Chui k t (String)
- Trong C/C++, chui k t l mng cc k t, vi k t nh du kt thc chui l \0 cn gi
l k t NUL. Nh vy, khai bo bin chui k t str gm ti a 9 k t ta dng khai bo sau:
char str[10];
- C th khai bo, ng thi khi to tr ca bin chui nh sau:
char str[20] = Khoa Tin Hc;
- Nhp tr cho bin chui
Trong C: dng hm gets() khai bo trong <stdio.h>.
Trong C++: dng hm cin.getline(char*, int n, char=\n) hay cin.get(char*, int n, char=\n) ca i tng
cin khai bo trong <iostream.h>. C th dng cin km vi ton t trch >>, tuy nhin cch ny khng cho
php nhp chui vi khong trng gia.
- Xut tr ca bin chui ra mn hnh
Trong C: dng hm puts() khai bo trong <stdio.h>.
Trong C++: dng hm cout.write() ca i tng cout khai bo trong <iostream.h> (hay ch n gin dng
i tng cout km vi ton t chn << ).
- Mt s hm thng dng v chui (trong C)
Hm length(const char*)
Hm concat(char*, const char*)
Hm strcpy(char*, const char*);
Hm strcmp(const char*, const char*)

Ging vin PTT

Lp trnh C++

35
KIU CON TR & KIU QUI CHIU (. . . tit)
Khi nim con tr
- 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 DL 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.
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:
int x;
int *px = &x; // px cha a ch ca bin x.
- Ch :
int *px, x, *py, y;
6

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;
*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.

Ging vin PTT

Lp trnh C++

36
- 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*.
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:
- 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).
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]
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]
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=*a;
Khi , ta c th truy xut cc phn t mng v a ch ca chng nh sau:
a[0][0]<--> *(*(a+0)+0) <--> *(*(ppa+0)+0) <--> ppa[0][0]&a[0][0] <--> &(a+0) <--> &(ppa+0)
a[0][1]<--> *(*(a+0)+1) <--> *(*(ppa+0)+1) <--> ppa[0][1]&a[0][1] <--> &(a+1) <--> &(ppa+1)
a[0][2]<--> *(*(a+0)+2) <--> *(*(ppa+0)+2) <--> ppa[0][2]&a[0][2] <--> &(a+2) <--> &(ppa+2)
a[1][0]<--> *(*(a+1)+0) <--> *(*(ppa+1)+0) <--> ppa[1][0]&a[1][0] <--> &(a+1) <--> &(ppa+1)
a[1][1]<--> *(*(a+1)+1) <--> *(*(ppa+1)+1) <--> ppa[1][1]&a[0] <--> a+0 <--> ppa+0
a[1][2]<--> *(*(a+1)+2) <--> *(*(ppa+1)+2) <--> ppa[1][2]&a[0][0] <--> a+0 <--> ppa+0
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 1 biu thc c tr l a ch ca 1 vng nh cng kiu
vi tham s bin tr hnh thc tng ng.
VD: hm swap( int*, int* );
Ging vin PTT

Lp trnh C++

37
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)
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:
- <datatype>* px; // px v *px c th thay i gi tr.
- const <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.
- <datatype>* const px; // px l con tr hng, i.e. *px c th thay i, px th khng c php thay
i.
- const <datatype>* const px; // px l con tr hng tr n vng nh c gi tr khng i.
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>
void* malloc(size_t size); // size_t l kiu d liu nh ngha trong <stdlib.h> v tng ng vi mt
unsigned int.
void* calloc(size_t nitems, size_t size);
void* realloc(void * ptr, size_t size);
- Trong C++: dng ton t new :
<bin> = new <type>; // xin cp pht vng nh trn HEAP c kch thc = sizeof(<type>)
<bin> = new <type>[n]; // xin cp pht vng nh trn HEAP c kch thc = sizeof(<type>)*n
- 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>;
// CT 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;
cout << Cho bit s phn t ? : ; cin >> n;
Ging vin PTT

Lp trnh C++

38
//

//

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 ] = random( 100 );
}
void output( const int* a, int n ) {
for ( int i = 0; i < n; i++ )
cout << setw( 4 ) << a[ i ];
cout << endl;
}
// CT cp pht ng mng 2 chiu
#include <iostream.h>
#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;
}
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 ] = random( 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;
}
Ging vin PTT

Lp trnh C++

39
}
Con tr hm
- Bn thn 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 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 );
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;
- 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:
getline( char* s, int size, char delim=\n ); // c cc k t t cin vo s, k c k t khong trng.
read( char* s, int size ); // cin.read( s, 5 );
get( char ch ); // 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.
- 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 );
- Cc hm khai bo trong <string.h> cho php thao tc, x l chui t t:
size_t strlen( const char* s );
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 );
....
ng dng con tr
- Sp xp mng cc con tr
- Danh sch lin kt
- Cp pht mng ng
S lc v kiu tham chiu (Reference) - Ch c trong C++.
- Tham chiu l kiu DL . . . .
- 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.
Ging vin PTT

Lp trnh C++

40
- 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 c th b thay i gi tr ngay bn trong hm.
VD: hm swap(int &, int &);

Ging vin PTT

Lp trnh C++

41
KIU STRUCT (. . . tit)
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.
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>;
...
} <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 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.
Lnh typedef
- Cho php t tn mi cho mt kiu d liu khai bo v nh ngha trc:
typedef <tn kiu c> <tn mi>;
VD: 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. VD: 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:
7

Ging vin PTT

Lp trnh C++

42
PTR_INT px; // tng ng vi khai bo int * px;
- 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>;
VD: 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;
Kiu enum
- Cho php t tn cc gi tr nguyn.
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;
SINHVIEN sv[MAX];
Con tr tr n bin kiu struct
typedef struct{
...
<kiu> <tn bin thnh phn>;
...
} <tn mi>;
<tn mi> * <tn bin tr>;
VD:
typedef struct{
int tuso, mauso;
}PHANSO;
PHANSO *pps;
Ta truy xut cc bin thnh phn ca pps nh sau:
(*pps).tuso
(*pps).mauso
hay
pps->tuso
pps->mauso

Ging vin PTT

Lp trnh C++

43
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.
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
VD:
typedef union{
unsigned int n;
unsigned char ch[2];
}VAL;
VAL x;
x.n=0x1B1A;
khi :
ch[0] = 1A v ch[1]=1B
ng dng
Gi, pht, giy
Ngy, thng, nm
Phn s
S phc
Zt = Xt + Yt
Za = Xa + Ya
Zt = Xt Yt
Za = Xa Ya
Zt = Xt * Yt Xa * Ya
Za = Xt * Yt + Xa * Ya
Zt = (Xt * Yt + Xa * Ya) / (Yt2 + Ya2)
Za = (Xa * Yt Xt * Ya) / (Yt2 + Ya2)
a thc

Ging vin PTT

Lp trnh C++

44
I TNG V LP (. . . tit)
Khi nim
- Lp (class) l tp hp cc thc th (entity) c cng cc thuc tnh d liu v c cng cc hnh
vi ng x, hay phng thc hot ng. Ni cch khc lp l tp hp cc i tng c cng bn
cht (CTDL v phng thc).
- i tng (Object) biu th s lin kt gia d liu v cc th tc (phng thc) thao tc trn
DL, v l mt th hin c th ca mt lp
- Trong C++, lp l kiu DL mi do USER nh ngha, cn i tng l bin kiu lp..
- Cn ch , lp ch l bn m t khung DL v cc thao tc c th ca lp. Hon ton khng c
s cp pht vng nh y.
Khai bo, nh ngha v s dng lp
- Khai bo lp (class declaration)
class <tn lp>
{
private:
// khai bo cc thnh phn d liu
public:
// khai bo cc phng thc (hm thnh phn)
}; // ch ng qun du chm phy ti y
trong :
<tn lp> l 1 danh hiu hp l, i din cho 1 kiu DL mi.
Private v public l cc t kha xc nh thuc tnh truy xut (access specifier) ca cc thnh phn trong lp.
Vic khai bo cc thnh phn DL (Data members) ca lp ging nh khai bo bin thng thng. Cc thnh
phn DL thng c khai bo trong phn private v do c thuc tnh truy xut private. Cc bin ny c
th thuc kiu DL bt k, nhng khng c php l bin kiu lp ca chnh n. Bin c th l i tng
thuc mt lp c khai bo trc.
Vic khai bo cc hm thnh phn (function members) ging nh khai bo hm nguyn mu thng thng.
Cc hm thnh phn thng c khai bo trong phn public v do c thuc tnh truy xut public. Phn
nh ngha hm thnh phn thng c t bn ngoi khai bo lp. i vi nhng hm ngn th c th
nh ngha hm ngay bn trong lp. Trong trng hp ny, hm c tnh cht inline.
8

- Khai bo i tng (object declaration)


Sau khi nh ngha mt lp, ta c th khai bo cc bin (i tng) thuc kiu lp nh sau:
<tn lp> <DS cc bin> ;
- S dng i tng:
<tn bin>.<tn DL thnh phn>
hay dng ton t -> tong trng hp bin tr tr n kiu lp:
<tn bin tr> -> <tn DL thnh phn>
VD:
Phm vi (trong C++)
- Khi, Hm, Hm nguyn mu
- Lp (ch c trong C++): phm vi lp bao gm phn nh ngha v khai bo cc thnh phn DL
v cc hm thnh vin, bn trong phn nh ngha cc hm thnh vin.
- Tp tin
- Chng trnh
Thuc tnh truy xut
- Private: l thuc tnh mc nh i vi kiu lp. Cc thnh phn ca lp nm trong phn private
ch c th c truy xut bn trong phm vi lp m thi.
Ging vin PTT

Lp trnh C++

45
- Public: cc thnh phn ca lp c thuc tnh truy xut l public th c th c truy xut mi
ni trong chng trnh.
- Protected: (s ni trong phn tha k)
VD:
Hm dng (constructor)
- C chc nng khi to gi tr cho cc i tng.
- C tn trng vi tn lp.
- Phi c khai bo trong phn public.
- Khng c gi tr tr v, v cng khng cn m t bng t kha void.
- c t ng gi mi khi khai bo bin kiu lp..
- C th np chng hm dng, i.e. c th c nhiu hm dng khc nhau.
- Nu khng c hm dng th TBD s gi hm dng mc nh (khng lm g ht ngoi vic lp
l trng). Cn ngc li th hm dng do USER nh ngha s c gi.
- Trong trng hp lp c cha cc thnh phn DL ng, cn phi nh ngha hm thit lp sao
chp (copy constructor) thc hin khi to gi tr cho cc i tng. Hm thit lp sao chp
nhn i s l bin c kiu lp v truyn bng tham chiu. Hm thit lp sao chp c dng: <tn
lp> (const <tn lp> &<tn bin>);
VD:
Hm hy (destructor)
- C chc nng thu hi, gii phng vng nh cp pht cho i tng.
- C tn trng vi tn lp v c du ~ ng trc.
- Phi c khai bo trong phn public.
- Hm hy khng c tham s, v khng c tr tr v.
- Hm hy cng c t ng gi mi khi i tng ra khi phm vi ca n.
- Ch c th c duy nht mt hm hy.
- Nu khng c hm hy th TBD s gi hm hy mc nh (khng lm g ht ngoi vic lp l
trng).
- Trong trng hp lp c cha cc thnh phn DL c cp pht ng, cn thit phi c hm
hy do USER nh ngha gii phng cc vng nh c cp pht ng, nu khng s dn
n tnh trng b nh mau cn kit.
VD: // khai bo v s dng lp
#include <iostream.h>
Class A{
private:
int x, y, z;
public:
void set(int x0, int y0, int z0) { x=x0; y=y0; z=z0; }
void show();
};
void A::show(){
cout<<X = <<x<<\tY = <<y<<\Z = <<z<<endl;
}
int main(){
A a, b;
a.set(1,2);
b.set(3,4);
a.show();
b.show();
Ging vin PTT

Lp trnh C++

46
return 0;
}
VD: //khai bo ng thi khi to gi tr cho bin kiu lp
#include <iostream.h>
Class A{
private:
int x, y, z;
public:
A() { x=0; y=0; z=0; }
A(int x0, int y0=2, int z0=3) { x=x0; y=y0; z=z0; }
A(int x0, int y0, int z0) { x=x0; y=y0; z=z0; }
void show();
};
void A::show(){
cout<<X = <<x<<\tY = <<y<<\Z = <<z<<endl;
}
int main(){
A a, b(4), c(5,6), d(7,8,9);
// A a; gi A(0,0,0)
// A b(4); gi A(4,2,3)
// A c(5,6); gi A(5,6,3)
// A d(7,8,9); gi A(7,8,9)
a.show();
b.show();
c.show();
d.show();
return 0;
}
Trong cc v d nu trn, ta thy:
- Li gi hm thnh phn lun c mt tham s n (hidden parameter) l i tng thc hin li
gi hm.
- Trong khai bo lp, nn nh ngha hm thit lp v hm hy.
- C th np chng cc hm thnh phn, k c hm thit lp.
- Hm thnh phn c th c tham s vi gi tr ngm nh.
- Tham s ca hm thnh phn c th l i tng thuc lp.
- Tr tr v ca hm thnh phn c th l mt i tng thuc lp.
Php gn cc i tng
- C th thc hin php gn gia 2 i tng cng kiu lp bng ton t gn =. Khi TBD s
sao chp gi tr cc thnh phn DL t i tng v phi (php gn) sang i tng v tri
tng ng tng i mt. Vic sao chp ny c gi l sao chp b mt (shallow copy).
Trong trng hp cc i tng trong php gn c cha thnh phn DL ng, cn phi nh
ngha chng ton t gn (assignment operator) (xem phn Np chng ton t) sao chp.
VD:
Hm thit lp sao chp (copy constructor)
- T ng c gi trong cc trng hp sau y:
Khi to ni dung cho mt i tng mi thng qua mt i tng khc tn ti.
Truyn tham s i tng cho hm bng phng php truyn gi tr.
Tr v mt i tng cho ni gi hm.
Ging vin PTT

Lp trnh C++

47
- Nu khng nh ngha hm thit lp sao chp th TBD s gi hm thit lp sao chp mc nh,
hm ny ch thc hin cc thao tc ti thiu (sao chp b mt). Nu lp khng c cha thnh
phn DL ng th c th s dng hm thit lp sao chp mc nh l .
- User cn phi nh ngha hm thit lp sao chp mt cch tng minh khi c yu cu qun l b
nh ng i vi lp c cha thnh phn DL ng.
- Hm thit lp sao chp c dng:
<tn lp> (<tn lp> &);
hay
<tn lp> (const <tn lp> &);
VD:
Con tr this
- Mi khi khai bo mt i tng, TBD s to ra con tr this ch n i tng ny.
- Trong phn nh ngha hm thnh phn, this l con tr tham chiu n i tng ang gi hm
thnh phn. Do , c th truy xut gin tip cc thnh phn ca lp thng qua con tr this:
this -> <tn thnh phn>
VD:
Thnh phn DL static (static data members)
- Mi i tng ca mt lp s hu ring cho mnh tp cc thnh phn DL (thuc tnh). Nu ta
mun mt thnh phn DL no l ca chung ca tt c cc i tng th thm t kha static
vo trc khai bo ca thnh phn DL dng chung.
- Thnh phn DL static c th c khai bo trong phn private hay phn public. Nu n c
khai bo trong phn public th c th c truy xut mi ni trong chng trnh. Nu n c
khai bo trong phn private th ch c th c truy xut bi hm thnh phn static cng lp.
- Ch c mt th hin (instance) duy nht ca thnh phn DL static trong lp. Do , khng th
khi to n bng cc hm thit lp ca lp. Cng khng th khi to gi tr ban u cho thnh
phn DL static trong lc khai bo lp.
- Thnh phn DL static phi c khi to mt cch tng minh bn ngoi khai bo lp nh sau:
<kiu> <tn lp> :: <gi tr>;
C th c truy xut ngay c khi cha khai bo bt k i tng no.
VD:
Hm thnh phn static (static function member)
- C khai bo t kha static ng trc kiu gi tr tr v.
- c lp vi bt k i tng no, v do khng c con tr this v khng c tham s n (i
tng gi hm)
- C th c gi cho d c khai bo cc i tng ca lp hay khng.
<tn lp> :: <tn hm> ([DS cc tham s]);
- Ta c th truy xut hm thnh phn static thng qua tn i tng theo cch thng thng (<tn
i tng>.<tn hm thnh phn static>), tuy nhin cch gi hm thng qua tn lp trc quan
hn v phn nh c bn cht ca hm thnh phn static.
- Thng c dng x l cc thnh phn DL static.
VD:
i tng hng (constant object)
- L i tng khng th thay i, m ch c to ra hoc hy b i.
- Nh vy ch c hm thit lp v hm hy mi c th tc ng n i tng hng trong lp.
Tuy nhin, ta c th s dng hm thnh phn hng x l i tng hng.
VD:
Thnh phn DL hng (constant member)
VD:
Ging vin PTT

Lp trnh C++

48
Hm thnh phn hng (constant function)
- L hm thnh phn ca lp c khai bo vi t kha const ng ngay sau danh sch cc tham
s hnh thc. T kha const phi c m t trong phn khai bo cng nh trong khi nh ngha
hm.
- Hm thnh phn const khng th thay i ni dung mt i tng.
- C th nh ngha chng hm thnh phn const bng mt hm khc khng phi const.
VD:
i tng tm thi (temporary object)
- Li gi hm thit lp mt cch tng minh bn trong mt biu thc s to ra i tng trung
gian, tm thi.
VD: Gi s c lp A vi hm thit lp A(int,int) v a l i tng thuc lp A, khi cu lnh sau a =
A(2,3); s gi hm thit lp tng ng v to ra mt i tng tm thi, sau i tng trung gian ny
c gn cho i tng a.
Hm bn (friend function) v lp bn (friend class)
- Hm bn ca mt lp c th truy xut n thnh phn DL khai bo trong phn private ca mt
lp ging nh hm thnh phn ca lp .
- Hm bn c khai bo vi t kha friend ng trc kiu gi tr tr v ca hm trong khai bo
hm nguyn mu. Vic nh ngha hm bn c thc hin nh thng thng.
- Cc loi hm bn:
Hm t do l hm bn ca mt lp. Thng thng, hm ny phi c tham s hoc gi tr tr v thuc lp
khai bo trc .
VD:
Class A{
....
friend <return type> <function name> (parameters list);
};
Hm thnh phn ca mt lp c th l hm bn ca mt lp khc.
VD: cho 2 lp A, B. Nu ta mun hm f trong lp B c th truy xut c cc thnh phn DL ring ca A,
th khai bo hm f ca lp B l bn ca lp A nh sau:
Class A;
Class B {
....
<return type> f(parameter list);
....
};
Class A{
....
friend <return type> B :: f(parameters list);
};
Hm thnh phn ca mt lp c th l hm bn ca nhiu lp khc.
VD: cho 3 lp A, B, C. Nu ta mun hm f trong lp A c th truy xut c cc thnh phn DL ring ca B
v C, th khai bo hm f ca lp B l bn ca lp B v lp C nh sau:
Class A;
Class B{
....
friend <return type> A :: f(parameters list);
};
Ging vin PTT

Lp trnh C++

49
Class C{
....
friend <return type> A :: f(parameters list);
};
Tt c cc hm thnh phn ca mt lp c th l hm bn ca mt lp khc. Trong trng hp ny ta c mt
lp l bn ca mt lp khc.
VD: cho 2 lp A, B. Nu ta mun tt c cc hm trong lp B c th truy xut c cc thnh phn DL ring
ca A, th khai bo lp B l bn ca lp A nh sau:
Class B;
Class A{
....
friend class B;
};
Con tr i tng
- Ta c th khai bo con tr tr n mt lp c khai bo trc. Khi , vic truy xut cc
thnh phn (DL v hm) ca lp c thc hin thng qua ton t ->
VD:
Tham chiu i tng
- Mt tham chiu n i tng ca mt lp no l b danh (hay tn gi khc) ca i tng
. Nh vy, vic truy xut cc thnh phn (DL v hm) ca mt bin tham chiu n i
tng c thc hin bng ton t du chm . nh mt bin i tng thng thng.
VD:
Mng cc i tng
- Sau khi khai bo v nh ngha mt lp, c th khai bo bin mng c kiu c s l cc i
tng thuc kiu lp .
- Khi , cn ch :
Tn bin mng l con tr hng, c gi tr l a ch vng nh ca phn t u tin ca mng.
- Cn thit phi nh ngha hm thit lp ph hp khi to gi tr cho cc phn t mng.
Khng nn da vo hm thit lp mc nh do TBD cung cp, mc d c php lm nh vy.
VD:
V d cui chng

Ging vin PTT

Lp trnh C++

50
9

NP CHNG TON T (OPERATOR OVERLOADING) TRONG C++ (. . . tit)


Gii thiu chung
- Trong qu trnh ci t, xy dng lp, C/C++ cho php USER nh ngha v s dng cc k
hiu ton t c thay th cho tn hm. Ta gi l s np chng ton t.
- i vi nhng lp c lin quan n ton hc (Vd: lp phn s, lp s phc, lp im, . . .), ta
thng np chng cc ton t s hc (+, -, *, /, %, =. ==, <, >, . . .) nhm lm cho chng trnh
c vit ngn gn, d c v c ngha hn.
- VD: trn cc lp phn s hay lp s phc, thay v phi vit: c = a.cong(b), c = a.tru(b), c =
a.nhan(b), c = a.chia(b), ta c th vit : c = a + b, c = a b, c = a * b, c = a / b, . . . vi a, b, c l
cc i tng thuc lp phn s hay lp s phc.
C bn v np chng ton t
- C++ cho php nh ngha chng hu ht cc ton t mt ngi hoc hai ngi bng cch nh
ngha hot ng ca cc php ton ny ging nh nh ngha mt hm. Nh vy, ta c th xem
vic np chng ton t nh l trng hp ring ca np chng hm. Do , ta cn gi ton t
c np chng l hm ton t (Operator function).
- Ton t np chng c th c nh ngha di dng hm thnh phn, hoc hm bn ca lp.
Nu l hm thnh phn, th s lng tham s ca hm ton t s t hn mt tham s do c mt
tham s n (l i tng gi hm). Nu l hm bn th s lng tham s bng ng vi s ngi
ca ton t.
- Dng tng qut:
<Tn tr tr v> operator <Ton t> ([DS tham s]); // khai bo nguyn mu hm ton t

<Tn tr tr v> operator <Ton t> ([DS tham s])


{
// nh ngha hm ton t . . .
}
trong <Ton t> l mt trong cc k hiu ton t c ca ngn ng.
- Hm ton t thnh phn phi c khai bo trong phn public.
- Hm ton t phi c t nht mt i s ( ton hng ) l i tng lp. Nh vy, nu hm ton t
l hm thnh phn th hm c mt tham s n c kiu lp chnh l i tng gi hm. Tham
s ngm ny ng vai tr l ton hng u tin ( php ton 2 ngi ), hay ton hng duy nht (
php ton 1 ngi ). Nu hm ton t l hm t do, khi t nht tham s th 1 hoc tham s th
2 ( nu c ) phi c kiu lp.
- Cc ton t c np chng vn bo ton s ngi, cng nh u tin v trt t kt hp ca
n.
VD:
- Hm ton t l hm thnh phn ca lp:
Class Rational {
....
public:
....
Rational operator+ ( const Rational& ) const;
}
- Hm ton t l hm bn
Class Rational {
....
public:
....
Ging vin PTT

Lp trnh C++

51
friend Rational operator+ ( const Rational&, const Rational& );
}
Cc kh nng v gii hn v np chng ton t
- C++ cho php nh ngha chng hu ht cc ton t c.
- C++ khng cho php nh ngha cc k hiu ton t mi, ngoi cc k hiu ton t c.
- Cc ton t c php np chng: + * / . . . .
- C++ khng c php np chng: ton t ba ngi ? :, ton t du chm, .*, ton t ::, ton t
sizeof.
- Cc ton t (), [], -> ch c th c np chng di dng mt hm thnh vin, cc ton t cn
li c th c np chng theo mt trong 2 dng nu.
- Ta khng th thay i s ngi ca ton t c np chng.
Hm ton t l hm t do (hm bn)
- Ton t c np chng c th l mt hm t do. Thng thng hm ny l hm bn ca mt
lp v do phi c t nht mt tham s thuc kiu lp ny.
- S lng tham s bng ng vi s ngi ca ton t c np chng.
VD:
Hm ton t l hm thnh phn
- Ta c th ci t mt hm ton t di dng hm thnh vin ca mt lp, khi ton hng bn
tri phi l bin i tng.
- S lng tham s t hn s ngi ca ton t c np chng l mt.
VD:
Np chng ton t mt ngi
Np chng ton t 2 ngi
Mt s v d tiu biu
Chuyn i kiu

Ging vin PTT

Lp trnh C++

52
Bi c thm
Kh qui
P(x) l 1 thut ton qui.
x l 1 dy cc bin x1, x2, x3, . . . . thuc cc kiu d liu khc nhau.
E(x) l iu kin kt thc qui cho thut ton.
+A(x), B(x), D(x) l cc ton t.
f(x), g(x) l cc hm bin i mt hoc tt c cc thnh phn ca dy x.
Dng qui
Dng 1: ED[AP]
P(x) = if ( E(x) ) D(x);
else {
A(x);
P( f(x) );
}
Dng 2: ED[APB]
P(x) = if ( E(x) ) D(x);
else {
A(x);
P( f(x) );
B(x);
}

Dng 3: ED[APBP]
P(x) = if ( E(x) ) D(x);
Else {
A(x);
P( f(x) );
B(x);
P( g(x) );
}

Ging vin PTT

Dng kh qui
P(x) = while E(x) {
A(x);
x = f(x);
}
D(x);

P(x) = Stack S;
while E(x) {
A(x);
S.Push(x);
x = f(x);
}
D(x);
while (!S.empty())
{
S.Pop(x);
B(x);
}
P(x) = Stack S;
S.Push( (x,1) );
while (m!=1) {
while (!S.empty()) {
A(x);
S.Push( (x,2) );
x = f(x);
}
D(x);
S.Pop( (x,m) );
if (m!=1) {
B(x);
x = g(x);
}
}

Lp trnh C++

53
10 File (. . . tit)
Gii thiu chung
- File l c ch cho php lu tr DL 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 lung 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
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:
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)
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.
- 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

Ging vin PTT

Lp trnh C++

54
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)
ng File
- Dng hm close() ca i tng file.
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 );
}
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();
}
// 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 ); // v u file
while ( ! file.eof() ) {
inf >> i;
cout << setw( 4 ) << i;
}
file.close();
}

Ging vin PTT

Lp trnh C++

55
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() {
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();
}
V d Vo/Ra File nh phn
#include <iostream.h>
#include <fstream.h>
const int MAX = 100;
void main() {
int buffer[ MAX ] = { 0 };
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 ) {
Ging vin PTT

Lp trnh C++

56
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 ) {
cerr << Du lieu khong dung . . .\n;
return;
}
cout << Du lieu dung . . .\n;
}
V d Vo/Ra File i tng
11 N TP (. . . tit)

Ging vin PTT

Lp trnh C++

57

CU HI N TP MN C S LP TRNH
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 ?
- T kha l g ?
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 ?
- Trnh by nguyn tc TBD 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 ?
- Cho v d.
Cu trc iu khin (Control stament)
- Trnh by c php, ngha, lu v cho v d v cc cu trc:
- if . . .else . . .
- switch ( . . )
- while (. . . )
Ging vin PTT

Lp trnh C++

58
-

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?
a) if ( delta > 0 ) . . .
b) if delta < 0 . . .
c) if ( delta == 0 ) . . .
d) if ( delta = = 0 ) . . .
e) if ( delta =< 0 ) . . .
f) if ( delta <= 0 ) . . .
g) if ( delta => 0 ) . . .
h) if ( delta != 0 ) . . .
i) if (delta ! = 0 ) . . .
j) if ( 1 + 2 ) . . .
k) if ( 2 2 ) . . .
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 {
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; 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:

Ging vin PTT

Lp trnh C++

59
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++ ) 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:
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;
int x = 0, y = 1;
for ( int i = 0; i < 5; i++ ) {
for ( int i = 0; i < 5; i++ )
for ( int j = 0; j < 5; j++ )
for ( int j = 0; j < 5; j++ ) {
if ( ( i + j ) % 2 == 0 ) x++;
if ( ( i + j ) % 2 == 0 ) x++;
y += x;
y += x;
}
}
....
....
....
....
int x = 0, y = 1;
int x = 0, y = 1;
for ( int i = 0; i < 5; i++ ) {
for ( int i = 0; i < 5; i++ )
for ( int j = 0; j < 5; j++ )
for ( int j = 0; j < 5; j++ ) {
if ( (x + y ) % 2 == 0 ) x++;
if ( ( i + j ) % 2 == 0 ) x++;
y += x;
else y += x;
Ging vin PTT

Lp trnh C++

60
}
....
....
int i = 0, x = 0;
do{
if ( x %5 == 0 ){
x++;
cout << setw( 4 ) << x;
}
i++;
} while ( i < 20 );
....
....
int i, x = 0;
for ( i = 1; i < 10; i*=2 ) {
x++;
cout << setw( 4 ) << x;
}
....
....
int i, j, k, x = 0;
for ( i = 1; i < 5; i++ )
for ( j = 0; j < i; j++ )
{
k = (i + j 1);
if ( k % 2 == 0 ) x += k;
else
if ( k % 3 ==0) x += k 2;
cout << setw( 4 ) << x;
}
....

}
....
....
int i = 0, x = 0;
while ( i < 20 ) {
if ( x % 5 == 0 ) {
x += i;
cout << setw( 4 ) << x;
}
i++;
}
....
....
int i, x = 0;
for (i = 1; i < 10; i++){
if ( i % 2 == 1 ) x += i;
else x ;
cout << setw( 4 ) << x;
}
....
....
int i, j, k, x = 0;
for ( i = 1; i < 5; i++ )
for ( j = 0; j < i; j++ )
{
switch ( i + j 1 )
{
case 1:
case 0: x += 1; break;
case 1:
case 2:
case 3: x += 2; break;
default: x += 3;
}
cout << setw( 4 ) << x;
}
....

V lu thut ton v ci t cc thut ton sau y:


Thut ton gii phng trnh bc 2
B1. Nhp cc h s a, b, c vi a 0
B2. Tnh = b2 4ac
B3. Nu < 0 th thng bo PT v nghim
Cn ngc li, nu == 0 th thng bo
PT c nghim kp X = -b/2a
Ging vin PTT

Thut ton gii phng trnh trng phng


B1. Nhp cc h s a, b, c vi a 0
B2. Tnh = b2 4ac
B3. Nu < 0 th thng bo PT v nghim
Cn ngc li, nu == 0 th:
i)
Tnh T = -b/2a
Lp trnh C++

61
Cn ngc li, thng bo PT c 2
nghim:
X1 = ( -b - ) / 2a, X2 = ( -b + ) / 2a

Nu T < 0 th thng bo PT v
nghim. Cn ngc li, thng bo
PT c 2 nghim: X1 = -T, X2 =
T
Cn ngc li:
i)
Tnh T1 = (-b-)/2a, T2 = (b+)/2a
ii)
Nu T1 > 0 v T2 > 0 th thng bo
PT c 4 nghim:
X1=-T1,
X2=T1,
X3=-T2,
X4=T2
Cn ngc li, nu T1 < 0 v T2 <
0 th thng bo PT v nghim
Cn ngc li, nu T1 > 0 th thng
bo PT c 2 nghim : X1=-T1,
X2= T1
Cn ngc li, thng bo PT c 2
nghim: X1 = -T2, X2 = T2
Thut ton i Fareinheit sang Thut ton tnh chu vi v din tch hnh
Celsius
trn
B1. Nhp bn knh r 0
B1. Nhp Fareinheit F
B2. Celsius C = 5 / 9 * (F 32)
B2. Chu vi p = 2 * PI * r
B3. Xut kt qu C
Din tch s = PI * r * r
B3. Xut kt qu p, s
Thut ton tnh ph tiu th in theo nh Thut ton tnh chu vi, din tch tam gic
mc sau:
vi 3 cnh a, b, c
Mc tiu th in x (Kwh)
n
gi B1. Nhp 3 cnh a, b, c ca tam gic (3 cnh
(/Kwh)
ny phi tha iu kin v cc cnh ca tam
x 100
400
gic)
101 x 150
600
B2. Na chu vi p = (a + b + c) / 2
Din tch s = p (p a) (p b) (p c)
151 x 200
750
x 201
1000
B3. Xut kt qu 2*p, s
B1. Nhp mc tiu th in x
B2. Khi ng s tin phi tr tpt = 0
B3. Nu x 100 th tpt = x * 400
Cn ngc li, nu x 150 th
tpt = 40000 + (x 100) * 600
Cn ngc li, nu x 200 th
tpt = 70000 + (x 150) * 750
Cn ngc li, tpt = 107500+(x
200)*1000
B4. Xut kt qu tpt
ii)

Thut ton tnh tng ca n > 0 s hng u Thut ton tnh v in tr o ca n > 0
tin theo cng thc cho trc
B1. Nhp n > 0
B1. Nhp n > 0
B2. Khi ng tr o x = 0
B2. Khi ng tng S = 0
B2. Chng no m n > 0 th thc hin:
B3. Lp vi i = 1 -> n, thc hin thao tc:
i)
x = x * 10 + n % 10
Ging vin PTT

Lp trnh C++

62
S += tr s hng th i
B4. Xut kt qu S
Thut ton tnh v in tr b 10 ca n > 0
B1. Nhp n > 0
B2. Khi ng tr o x = 0, dv = 1
B2. Chng no m n > 0 th thc hin:
i)
x += (10 n%10) % 10 * dv
ii)
dv *= 10
iii)
n /= 10
B3. Xut kt qu x
Thut ton v hnh vung rng vi chiu
cao h [4 . . 22]
B1. Nhp h [4 . . 22]
B2. Lp vi i = 1 -> h, thc hin thao tc:
i)
Lp vi j = 1 -> h, thc hin thao tc:
Nu (i==1 || i==h || j==1 || j ==h)th in *
Cn ngc li th in (khong trng)
ii)
Xung dng
Thut ton tnh USCLN ca 2 s t nhin (
thut ton Euclide)
B1. Nhp 2 s a > 0, b > 0
B2. Chng no m a b th thc hin:
Nu a > b th a -= b
Cn ngc li, b -= a
B3. Xut kt qu b

ii)
n /= 10
B3. Xut kt qu x
Thut ton v hnh vung c vi chiu cao
h [4 . . 22]
B1. Nhp h [4 . . 22]
B2. Lp vi i = 1 -> h, thc hin thao tc:
i)
Lp vi j = 1 -> h, thc hin thao tc:
In du *
ii)
Xung dng

Thut ton tng qut v hnh tam gic cc


loi vi chiu cao h [4 . . 22]
B1. Nhp h [4 . . 22]
B2. Lp vi i = 1 -> h, thc hin thao tc:
i)
Lp vi j = 1 -> h, thc hin thao tc:
Nu tha (K v dng i, ct j) th in *
Cn ngc li th in (khong trng)
ii)
Xung dng
Thut ton tnh USCLN ca 2 s t nhin (
thut ton Mod Euclide)
B1. Nhp 2 s a > 0, b > 0
B2. Chng no m (c = a % b) 0 th thc
hin:
i)
a=b
ii)
b=c
B3. Xut kt qu b
Thut ton m s ch s ca n > 0
Thut ton tnh tng cc ch s ca n > 0
B1. Nhp n > 0
B1. Nhp n > 0
B2. dem = 0
B2. tong = 0
B3. Chng no m n > 0, th thc hin:
B3. Chng no m n > 0, th thc hin:
i)
dem++
i)
tong += n % 10
ii)
n /= 10
ii)
n /= 10
B4. Xut kt qu dem
B4. Xut kt qu tong
Thut ton in s n > 0 di dng h 2, hoc Thut ton kim tra s n > 0 c phi l s
h 8, hoc h 16
nguyn t ?
B1. Nhp n > 0
B0. Nu n==1 th thng bo 1 l s nguyn t
B2. Nhp h b (= 2, 8, 16)
B1. Nhp n > 0
B3. Nu b == 2 th m = 16384
B2. i = 2
Cn ngc li nu b == 8 hoc b == 16 B3. Chng no m n % i != 0, th thc hin:
th
i++
m = 4096
B4. Nu i == n th thng bo n nguyn t.
B4. Chng no m m > 0 th thc hin:
Cn ngc li, thng bo n khng phi l s
i)
In ra mn hnh tr n / m
nguyn t
ii)
n %= m
iii)
m /= b
Thut ton kim tra s n > 0 c phi thuc Thut ton in n > 0 s nguyn t u tin
dy s Fibonacci ?
B1. Nhp n > 0
B1. Nhp n > 0
B2. In s nguyn t u tin (s 1) ra mn
Ging vin PTT

Lp trnh C++

63
B2. x = 0, y = 1, z = x + y
B3. Chng no m z < n, th thc hin:
i)
x=y
ii)
y=z
iii)
z=x+y
B4. Nu z == n th thng bo n l s
Fibonacci. Cn ngc li th thng bo n
khng phi l s thuc dy s Fibonacci
Thut ton in n > 0 s Fibonacci u tin
B1. Nhp n > 0
B2. In 2 s Fibonacci u tin (in 0 1) ra mn
hnh
B3. dem = 2, x = 0, y = 1, z = x + y
B4. Chng no m dem < n, th thc hin:
i)
In z ra mn hnh
ii)
dem++
iii)
Pht sinh s Fibonacci z k tip

hnh
B3. dem = 1, x = 2
B4. Chng no m dem < n, th thc hin:
i)
Nu x nguyn t th:
a. In x ra mn hnh
b. dem++
ii)
x ++

Thut ton in tt cc s nguyn t <= n, n


>1
B1. Nhp n > 0
B2. In s nguyn t u tin (s 1) ra mn
hnh
B3. x = 2
B4. Chng no m x <= n, th thc hin:
i)
Nu x nguyn t th:
In x ra mn hnh
ii)
x ++
Thut ton tnh ex vi sai s cho trc Thut ton tnh cos(x) vi sai s cho
theo cng thc khai trin:
trc theo cng thc khai trin:
x
2
3
E = 1 + x/1! + x /2! + x /3! + . . .
Cos(x) = 1 + -x2/2! + x4/4! x6/6! + . . .
B1. Nhp x
B1. Nhp n
B2. Khi ng emux = 0, sh = 1, i = 0
B2.
Khi ng cosx = 0, x =
B3. Chng no m sh , th thc hin:
n*3.1415926/180, sh = 1, i = 0
B3. Chng no m sh , th thc hin:
i)
emux += sh
ii)
i++
i)
cosx += sh
iii)
sh *= x / i
ii)
i++
B4. Xut kt qu emux.
iii)
sh *= -x * x / (2 * i -1 ) / ( 2 * i )
B4. Xut kt qu cosx.
Thut ton tnh sin(x) vi sai s cho trc Thut ton tnh cn bc 2 ca s A > 0 theo
theo cng thc khai trin:
cng thc lp:
3
5
7
Sin(x) = x + -x /3! + x /5! x /7! + . . .
- x0 = 1
B1. Nhp n
- xn = ( xn-1 + A / xn-1 ) / 2
B2. Khi ng sinx = 0, x = n*3.1415926/180, Qu trnh lp dng khi | xn xn-1 | < cho
sh = x, i = 0
trc.
B3. Chng no m sh , th thc hin:
iv)
sinx += sh
v)
i++
vi)
sh *= -x * x / (2 * i ) / ( 2 * i + 1 )
B4. Xut kt qu sinx.
Thut ton tnh cn bc 3 ca s A > 0 theo Thut ton tnh cn bc n > 0 ca s A > 0
cng thc lp:
theo cng thc lp:
- x0 = 1
- x0 = 1
- xn = ( 2xn-1 + A / xn-12 ) / 3
- xn = ( (n-1)xn-1 + A / xn-1n-1 ) / n
Qu trnh lp dng khi | xn xn-1 | < cho Qu trnh lp dng khi | xn xn-1 | < cho
trc.
trc.
Hm (Function)
- Nu cch khai bo hm, nh ngha hm, cch gi hm.
Ging vin PTT

Lp trnh C++

64
-

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:
o Gii phng trnh bc 2 ax2 + bx + c = 0
o Gii phng trnh bc 4 ax4 + bx2 + c = 0
o In bng cu chng theo chiu dc.
o In bng cu chng theo chiu ngang.
o V hnh tam gic vi chiu cao h dng . . .
o Phn tch s n > 0 thnh tch cc tha s nguyn t theo dng n = 120 = 2*2*2*3*5.
o Phn tch s n > 0 thnh tch cc tha s nguyn t theo dng n = 120 = 2^3*3*5.
o Kim tra nm y c phi l nm nhun ?
o Kim tra 1 b ngy, thng, nm c hp l hay khng ?
o Kim tra s t nhin n > 0 c phi l s nguyn t ?
o Kim tra 2 s t nhin c nguyn t cng nhau ?
o Kim tra s t nhin n > 0 c phi l s thuc dy s Fibonacci ?
o Kim tra s n > 0 c phi l s i xng ?
o Kim tra s n [100 . . . 999] c phi l s tha tnh cht P = c tng cc ch s
bng tch cc ch s ?
o Kim tra s n > 0 c phi l s hon thin ?
o Tnh tr max ca 2 s nguyn.
o Tnh tr min ca 2 s nguyn.
o Tnh USCLN ca 2 s t nhin.
o Tnh tng S ca n > 0 s hng u tin theo cng thc cho trc.
o Tnh tr o ca s t nhin.
o Tnh tr i ng b 10 ca s t nhin.
o Tnh s ngy ti a ca thng m, nm y.
o Tnh ngy hm sau ca 1 b ngy thng nm.
o Tnh khong cch gia 2 b ngy, thng, nm.
nh ngha cc hm nguyn mu trn, v vit chng trnh ng dng.

Ging vin PTT

Lp trnh C++

65
Mng (Array)
- 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.
- Trnh by cc thao tc c bn trn kiu mng: nhp/xut gi tr cho cc phn t mng, thm
phn t mi vo mng, xa mt phn t trong mng, tm kim trn mng, sp xp mng.
Con tr (Pointer)
-

Ging vin PTT

Lp trnh C++

66
BI TP PHN C S LP TRNH
Biu thc & ton t
1. Mt chng trnh 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:
a) i + c
b) x + c
c) (int) dx + ix
d) i + x
e) s + j
f) ix + j
g) s + c
h) ix + c
2. Cho 2 s nguyn M, N. Hy m t cc mnh sau bng cc biu thc logic (theo M, N) tng ng
trong NNLT 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:
- T l tam gic thng.
- T l tam gic cn.
- 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 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
mnh di y bng cc biu thc logic (theo cc ch s i, j) tng ng trong NNLT 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.
Ging vin PTT

Lp trnh C++

67
- 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.
6. Vit chng trnh nhp vo mt k t t bn phm. Nu k t va nhp l ch thng th in ra mn hnh
k t ch in hoa tng ng, v ngc li.
7. Vit chng trnh nhp vo mt k t. Sau in ra m ASCII ca k t ny, k t ng trc v k t
ng sau.
8. Vit chng trnh nhp vo tng s giy. Sau in ra mn hnh gi, pht, giy tng ng. VD: nhp vo
n = 7273. In ra: 02g : 02 : 03
9. Vit chng trnh nhp mt s kiu LongInt gm 6 ch s. Sau in s ra mn hnh theo dng sau:
hh : mm : ss
10. Vit chng trnh nhp vo s nguyn N gm 2 ch s. Sau in ra mn hnh tr o ngc ca N.
11. Lm li bi trn, nhng vi N gm 3 ch s.

Ging vin PTT

Lp trnh C++

68
Cu trc if . . . else . . .
1. Vit chng trnh nhp vo mt s nguyn v cho bit s m hay dng, chn hay l.
2. Vit chng trnh nhp vo 2 b ba s thc tng ng vi 2 phng trnh ng thng. Sau hin th
thng bo v mi quan h gia 2 ng thng ny nh sau:
- Hai ng thng ct nhau.
- Hai ng thng ct nhau v vung gc vi nhau.
- Hai ung thng song song vi nhau.
- Hai ng thng trng nhau.
3. Vit chng trnh gii phng trnh bc 2: Ax2 + Bx + C = 0.
4. Vit chng trnh gii phng trnh trng phng Ax4 + Bx2 + C = 0.
5. 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.
6. 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
7. Vit chng trnh nhp vo 3 s nguyn dng ch gi, pht, giy. Sau in ra cho bit thi im 1 giy
trc, v 1 giy sau so vi thi im gi, pht, giy va nhp.
8. Vit chng trnh nhp v 2 s ch thng v nm. Sau in ra cho bit s ngy ti a ca thng trong
nm .
9. Vit chng trnh nhp vo 1 s ch nm v in ra cho bit nm c phi l nm nhun hay khng?
(Nm nhun l nm chia chn cho 400 hoc nu n chia chn cho 4 th ng thi khng c chia chn
cho 100).
10. Vit chng trnh kim tra mt b ngy, thng, nm nhp vo c hp l? VD: Ngy 29 thng 2 nm 1995
l ngy khng hp l. Sau tnh ngy trc v sau ngy nhp.
Cu trc switch () . . .
11. B bi ty 52 l c nh s nh sau:
Ach Hai Ba Bn Nm Su By Tm Chn Mi Bi m Gi
C

10

11

12

13

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
12. Tng t nh bi trn, cc qun c c nh s nh sau:
Tng

Tng

Xe

Pho

Cht

en

Trng

10

11

12

13

14

Ging vin PTT

Lp trnh C++

69
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

Ging vin PTT

Lp trnh C++

70
Cu trc lp for . . . , while . . . , do . . . while . . .
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 in ra mn hnh bng cu chng theo chiu dc v theo chiu ngang.
3. Vit chng tnh USCLN, BSCNN ca 2 s t nhin.
4. Vit chng trnh kim tra xem 2 s t nhin a, b c nguyn t cng nhau?
5. 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
6. 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 3 + 5 7 + . . .
- S5 = 1 + 2 + 4 + . . .
- S6 = 1 2 + 4 8 + . . .
- S7 = 1! + 2! + 3! + . . .
- S8 = 1! + 2! 3! + . . .
- S9 =
- S10 =
7. 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.
8. 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.
9. Bi ton i tin: Vit chng trnh hin th ra mn hnh tt cc cc phng n i s tin N ng vi 3
loi giy bc 2 , 5 , v 10 ?
10. 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.
11. Vit chng trnh m s ch s ca s nguyn N nhp vo t bn phm.
12. Vit chng trnh tnh tng ca cc ch s ca s nguyn N nhp vo t bn phm.
13. Vit chng trnh tnh v in tr o ngc ca 1 s nguyn N nhp vo t bn phm.
14. Vit chng trnh kim tra tnh i xng ca 1 s nguyn N nhp vo t bn phm. VD : vi N = 12321
th hin th thng bo s 12321 l s i xng.
15. Vit chng trnh tnh s i ng ca 1 s nguyn N nhp vo t bn phm. VD : vi N = 1047 th s i
ng l 9063
16. 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
Ging vin PTT

Lp trnh C++

71
5 1 2 3 4
E A B C D
17. Vit chng trnh kim tra xem s N > 0 nhp vo t bn phm c phi l s nguyn t?
18. Vit chng trnh nhp vo s N > 0 v hin th ra mn hnh tt c cc s nguyn t < N.
19. Vit chng trnh nhp vo cp ta x, y < 10. Sau v du * ti ta (x,y) va nhp nh sau: Vd
nhp x = 8, y = 5
1 2 3 4 5 6 7 8 9 10
1
.
2
.
3
.
4
.
5
................*
6
7
8
9
10
20. 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?
21. Vit chng trnh nhp vo s N v hin th ra mn hnh cc s Fibonacci < N.
22. Vit chng trnh v cc hnh sau y vi H l chiu cao nhp vo t bn phm:
VD vi H = 5
*
*****
*****
*
**
****
****
**
***
***
***
***
****
**
**
****
*****
*
*
*****

*
*****
**
*
*
* *
* *
*
*
**
*****
*
*
***
*****
*******
*********

*****
*
*
*
**
* *
* *
**
*
*
*
*****
*
* *
*
*
*
*
*********

*********
*********
*******
*
*
*****
*
*
***
* *
*
*
23. 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:
Ging vin PTT

Lp trnh C++

72
Cn bc 2:
- A0 = 1
- AN = (xN-1 + (A/xN-1)) / 2
Cn bc 3:
- A0 = 1
- AN = (2xN-1 + (A/xN-1 2)) / 3
Cn bc 4:
- A0 = 1
- AN = (3xN-1 + (A/xN-1 3)) / 4
Mt cch tng qut vi cn bc N:
- A0 = 1
- AN = ( (N-1) xN-1 + A / (xN-1 N-1) ) / N
24. Vit chng trnh tnh Ex,Sin(x), Cos(x), LN(x) theo cc cng thc sau:
- Ex = 1 + x/1! + x2/2! + . . .
- Sin(x) = x x3/3! + x5/5! . . .
- Cos(x) = 1 x2/2! + x4/4! . . .
25. Vit chng trnh phn tch s nguyn N > 0 thnh tch cc tha s nguyn t theo cc dng sau: (VD: N
= 120)
120 = 2 * 2 * 2 * 3 * 5
120 = 2 ^ 3 * 3 * 5

Ging vin PTT

Lp trnh C++

73
Hm (Function)
1. Vit hm in ra mn hnh bng cu chng dc (ngang). Sau vit chng trnh p dng.
2. 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.
3. 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.
4. 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.
5. Vit hm xc nh s nguyn t th N. Sau vit chng trnh p dng.
6. Vit hm xc nh s Fibonacci th N. Sau vit chng trnh p dng.
7. Vit hm kim tra mt s c phi l s nguyn t hay khng ? Sau vit chng trnh p dng.
8. Vit hm kim tra 2 s c nguyn t cng nhau hay khng ? Sau vit chng trnh p dng.
9. Vit hm kim tra mt s c phi l s Fibonacci hay khng ? Sau vit chng trnh p dng.
10. Vit hm kim tra mt s c phi l s i xng hay khng ? Sau vit chng trnh p dng.
11. 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.
12. Vit chng trnh bao gm cc hm sau:
- Hm kim tra tnh hp l ca mt b ngy, thng, nm nhp vo t bn phm.
- Hm xc nh s ngy ti a ca thng M trong nm Y.
- Hm xc nh ngy k tip ca mt b ngy, thng, nm.
- Hm xc nh N ngy k tip ca mt b ngy, thng, nm.
Vit chng trnh p dng cc hm trn.
13. Vit chng trnh tnh khong cch ngy gia 2 b ngy thng nm.
14. Vit hm qui in s o ca mt s t nhin ra mn hnh. Vit chng trnh p dng.
15. Vit hm qui tnh tng S=1-3+5-7+ . . .. Vit chng trnh p dng.
16. Vit hm qui tnh USCLN ca 2 s t nhin. Vit chng trnh p dng.
17. Cho chng trnh sau y:
#include <iostream.h>
void mul(int & x,int y,int & z);
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(
x *=
y *=
z *=

int & x,int y, int & z ) {


y;
z;
x;

Ging vin PTT

Lp trnh C++

74
}
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()
Y

Hm mul()
Y

18. Cho chng trnh sau y:


#include <iostream.h>
void f( int x, int & y, int z
void g( int & x, int y, int &
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;
}
void g( int & a, int b, int &
a *= b;
b *= c;
c *= a;
}

);
z );

){

c ) {

Hy cho bit tr in ra mn hnh ca cc bin x, y, v z. Gii thch theo mu bng sau:


Cu lnh
X

Ging vin PTT

Hm main()
Y
Z

Hm f()
Y

Hm g()
B
C

Lp trnh C++

75
Mng v cc thut ton c bn trn mng (tm kim v sp xp n gin)
1. Cho mng 1 chiu cc s nguyn gm MAX phn t. 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 [-5050]
- Khi to gi tr ngu nhin cho cc phn t ca mng, mi phn t c tr tng dn trong on
[100100]
- Xut gi tr ca cc phn t ca mng ra mn hnh.
- o ngc th t cc phn t trong mng.
- Tm kim gi tr x trong mng.
- Sp xp mng theo th t tng dn.
- Sp xp mng theo th t l tng chn gim.
- Sp xp mng theo th t l tng chn tng.
- Sp xp mng theo th t l gim chn tng.
- Sp xp mng theo th t l gim chn gim.
- Sp xp theo th t tng dn v loi b cc phn t trng nhau.
- Thm gi tr x vo mng c th t tng dn, phi bo m th t tng dn ca mng.
- Xa gi tr x ra khi mng c th t tng dn, phi bo m th t tng dn ca mng.
- 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.
2. Vit hm v biu ng, v hm v biu ngang. Vit chng trnh p dng.
VD: vi mng nguyn int a[5]={4,7,10,6,3}
Biu ngang:
Biu ng:
* * * *
*
* * * * * * *
*
* * * * * * * * * *
*
* * * * * *
* *
* * *
* * *
* * *
* * * *
* * * * *
* * * * *
* * * * *
3. Vit chng trnh in ma trn vung k o (ma phng) bc l.
4. Vit chng trnh trn 2 mng nguyn c th t tng dn, v phi bo m th t tng dn ny.

Ging vin PTT

Lp trnh C++

76

MN HC: K THUT LP TRNH


(PHN BI TP)
MNG
1. Gi s nh ngha mt mng nguyn gm ti a MAX phn t. Vit chng trnh bao gm cc chc
nng (hm) sau:
To gi tr ngu nhin cho N phn t ca mng (N > 0 v N <= MAX).
To gi tr tng dn (gim dn) ngu nhin cho N phn t ca mng.
To gi tr ngu nhin cho N phn t ca mng, gi tr ca cc phn t mng phi nm trong on [M . . M], vi M > 10.
Kim tra mng c gi tr tng dn (gim dn) ?
Xc nh phn t min (max) trong mng.
Tm kim tuyn tnh trong mng cha c th t.
Tm kim tuyn tnh trong mng c th t.
Tm kim nh phn trong mng c th t.
Kim tra mt s nguyn c xut hin trong mng ?
m s ln xut hin ca mt s nguyn trong mng ?
Thm mt s nguyn vo cui mng.
Thm mt s nguyn vo trong mng ti v tr k.
Xo phn t ti v tr k ra khi mng.
Xo tt c cc xut hin ca s nguyn x ra khi mng.
o cc phn t trong mng.
Xoay vng phi (tri) cc phn t trong mng.
Xoay vng phi (tri) k ln cc phn t trong mng.
Xa cc phn t c tr trng nhau trong mng.
Tnh tng ca cc phn t c tr khc nhau trong mng.
Sp xp v xa cc phn t c tr trng nhau trong mng.
In chui con tng (gim) di nht trong mng.
In chui con c tng cc phn t ln nht trong mng.
Sp xp mng theo chiu l tng, chn gim.
Xc nh cc phn t tha tnh cht P trong mng (VD: P= l s thuc dy s Fibonacci).
Tnh tng cc phn t tha tnh cht P trong mng (VD: P= l s thuc dy s Fibonacci).
Trn 2 mng nguyn cha c th t thnh mt mng nguyn.
Trn 2 mng nguyn c th t tng thnh mt mng nguyn c th t tng.
2. Vit chng trnh tnh tr ca a thc theo phng php Horner.
3. Vit chng trnh i s t nhin t h 10 sang h 2, 8, 16.
4. Vit chng trnh in tam gic Pascal.
5. Vit chng trnh in biu ngang v biu dc.
6. Vit chng trnh tnh tng, hiu, tch ca 2 ma trn.
7. Vit chng trnh sp xp mng 2 chiu cc s nguyn tng dn theo cc dng sau: theo ch s dng v
ct, theo hnh xoy trn c, theo hnh zigzag ngang, zigzag cho, . . .
8. Vit chng trnh xc nh phn t yn nga ca mng 2 chiu cc s nguyn.
9. Vit chng trnh in ma phng bc l.

Ging vin PTT

Lp trnh C++

77
10. Vit chng trnh ci t tp hp v cc php ton trn tp hp (giao, hi, hiu, so snh ==, <=, >=,
php th thuc v. . .).
11. Vit chng trnh in k t di dng phng to (k c k t c du, VD ch ,, , , , ...).

CHUI K T
1. Vit chng trnh bao gm cc chc nng sau: (Ch : dng mng ci t)
o Xc nh s ln xut hin ca tng k t trong chui.
o In cc t trong chui, mi t trn mt dng.
o Chun ha chui (khng c cc khong trng tha, cc t c bt u bng k t ch hoa, cc k t
cn li l ch thng).
o Kim tra mt k t c nm trong chui hay khng ?
o m s t trong mt chui.
o Loi b cc khong trng tha trong chui.
o Tch t u tin trong chui.
o Tch t cui cng trong chui.
o Chuyn t cui cng thnh t u tin trong chui.
o In t di nht (t ngn nht) trong chui.
o o ngc chui.
o Kim tra chui c phi l mt palindrome hay khng ?
o Kim tra chui c tun hon hay khng ?
o Thay th cc k t trong chui nhp bng cc k t tng ng trong chui con.
o Kim tra chui con c nm trong mt chui hay khng ?
o m s ln xut hin chui con trong mt chui.
o Loi b chui con subs (nu c) ra khi chui s.
o Chn chui con subs vo trong chui s ti v tr k.
o M ha v gii m chui dng php thay th (substitution).
o M ha v gii m chui dng bng thay th.
Vit chng trnh p dng cc hm trn.
2. 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)
o Tnh chiu di ca chui nhp.
o Sao chp 2 chui vi nhau.
o So snh 2 chui vi nhau.
o Tm mt k t trong chui nhp.
o Tm chui con trong chui nhp.
o Thm chui con vo trong chui nhp ti v tr k.
o Xo chui con trong chui nhp.
o Loi b cc khong trng tha (k t Space, Tab) trong chui nhp.
o Chun ha chui nhp.
o o ngc chui nhp.
o Kim tra 2 chui nhp c gm cng cc k t hay khng ?
o Kim tra chui nhp c i xng hay khng ?
o Kim tra chui nhp c tun hon hay khng ?
o m tn s xut hin ca cc k t trong chui nhp.
Ging vin PTT

Lp trnh C++

78
o m s t trong chui nhp.
o m s k t, s t v s dng trong chui nhp.
o Chuyn t cui cng thnh t u tin trong chui nhp.

QUI (RECURSION)
1. Vit hm qui m s ch s ca mt s nguyn.
2. Vit hm qui in o ngc cc ch s ca mt s nguyn.
3. Vit hm qui in o ngc mt chui.
4. Vit hm qui tnh tng ca cc ch s ca mt s nguyn.
5. Vit hm qui tnh tng cc phn t ca mt mng nguyn.
6. Vit hm qui tnh giai tha ca s t nhin n>0.
7. Vit hm qui xc nh s fibonacci th n (n>0).
8. Vit hm qui tnh USCLN ca 2 s t nhin.
9. Vit hm qui phn tch s nguyn (n > 0) thnh tch cc tha s nguyn t.
10. Vit hm qui xc nh tr max (min) ca mt mng nguyn.
11. Vit hm qui tnh tng ca cc biu thc sau:
S=1+2+3+...
S=12+34+...
S=1+3+5+...
S=13+57+...
S=1+2+4+...
S=12+48+...
S = 1! + 2! + 3! + . . .
S = 1! 2! + 3! 4! + . . .
12. Vit hm qui thc hin vic tm kim nh phn ca mt mng nguyn c th t.
13. Vit hm qui gii bi ton thp H Ni.
14. Vit hm qui tnh t hp chp k ca n phn t.
15. Vit hm qui tnh chnh hp chp k ca n phn t.
16. Vit hm qui in tt c cc t hp chp k ca n s t nhin u tin.
17. Vit hm qui in tt c cc chnh hp chp k ca n s t nhin u tin.
18. Vit hm qui in tt c cc hon v ca n s t nhin u tin.
19. Vit hm qui gii bi ton 8 qun hu (8 queen).
20. Vit hm qui gii bi ton m i tun.

Ging vin PTT

Lp trnh C++

79
STRUCT, CLASS v np chng ton t
1. Constructor, Destructor, Copy constructor, Assignment operator :
- c t ng gi trong nhng trng hp no ?
- C bao nhiu loi ?
- C th c np chng hay khng ?
- Trong trng hp no th USER cn phi nh ngha chng, khng c da vo cc hm mc nh
do TBD cung cp ?
2. Thit k kiu Complex (S phc) v xy dng cc thao tc khi to gi tr, nhp, xut d liu, cc php
ton cng, tr, nhn, chia, . . . .
3. Thit k kiu Rational (Phn s) v xy dng cc thao tc khi to gi tr, nhp, xut d liu, cc php
ton cng, tr, nhn, chia, so snh, . . . .
4. Thit k kiu myTime v xy dng cc thao tc khi to gi tr, nhp, xut d liu, cc php ton
tng/gim 1 giy, tng/gim N giy, so snh, . . . .
5. Thit k kiu myDate v xy dng cc thao tc khi to gi tr, nhp, xut d liu, cc php ton
tng/gim 1 ngy, tng/gim N ngy, xc nh khong cch gia 2 b ngy thng nm, so snh 2 ngy, . .
..
6. Thit k kiu Polynomial (a thc) v xy dng cc thao tc khi to gi tr, nhp, xut d liu, cc php
ton cng, tr, nhn, chia, tnh tr, . . . .
7. Thit k kiu Point (im trong mt phng) v xy dng cc thao tc khi to gi tr, nhp, xut d liu,
cc thao tc tnh tin, quay, v, . . . .
8. Thit k kiu intArray (mng 1 chiu cc s nguyn) v xy dng cc thao tc khi to gi tr, nhp, xut
d liu, cc thao tc c bn trn mng 1 chiu nh: thm, xa, tm kim, sp xp, ni 2 mng, . . . (Yu
cu lm 2 cch: cp pht mng tnh v cp pht ng).
9. Thit k kiu myString v xy dng cc thao tc khi to gi tr, nhp, xut d liu, cc thao tc c bn
nh: xc nh chiu di, sao chp, ni 2 chui, tm kim, . . .
10. Thit k kiu Matrix v xy dng cc thao tc khi to gi tr, nhp, xut d liu, cc php ton cng v
nhn 2 ma trn, sp xp ma trn theo cc dng xon khc nhau . . . (Yu cu lm 2 cch: cp pht mng
tnh v cp pht mng ng).
11. Thit k kiu Array nh bi 8, nhng vi kiu d liu tng qut c xc nh lc khai bo kiu Array
trong chng trnh (Dng template).
12. Thit k kiu CharSet v xy dng cc thao tc khi to gi tr, nhp/xut d liu, cc thao tc c bn
nh: hi (union), giao (intersection), hiu (difference), bao hm (include), . . .

Ging vin PTT

Lp trnh C++

You might also like