Professional Documents
Culture Documents
Lap Trinh C Tu Co Ban Den Nang Cao PDF
Lap Trinh C Tu Co Ban Den Nang Cao PDF
M u
Chng ny gii thiu nhng phn c bn ca mt chng trnh C++. Chng ta s dng
nhng v d n gin trnh by cu trc cc chng trnh C++ v cch thc bin dch
chng. Cc khi nim c bn nh l hng, bin, v vic lu tr chng trong b nh cng
s c tho lun trong chng ny. Sau y l mt c t s b v khi nim lp trnh.
Lp trnh
My tnh s l mt cng c gii quyt hng lot cc bi ton ln. Mt li gii cho mt
bi ton no c gi l mt gii th u t (algorithm); n m t mt chui cc bc cn
thc hin gii quyt bi ton. Mt v d n gin cho mt bi ton v mt gii thut c
th l:
Bi ton: sp xp mt danh sch cc s theo th t tng dn.
G ii thut:G i s danh sch cho l listl ; to ra mt danh sch rng, list2,
lu danh sch sp xp. Lp i lp li cng vic, tm s nh nht trong
listl, xa n khi listl, v thm vo phn t k tip trong danh sch list2, cho
n khi lstl l rng.
Gii thut c din gii bng cc thut ng tru tng mang tnh cht d hiu. Ngn
ng tht s c hiu bi my tnh l ngn ng my. Chng trnh c din t bng
ngn ng my c gi l c th thc thi. Mt chng trnh c vit bng bt k mt
ngn ng no khc th trc ht cn c dch sang ngn ng my my tnh c th
hiu v thc thi n.
Ngn ng my cc k kh hiu i vi lp trnh vin v th h khng th s dng
trc tip ngn ng my vit chng trnh. Mt s tru tng khc l ngn ng
assembly. N cung cp nhng tn d nh cho cc lnh v mt k hiu d hiu hn cho
d liu. B dch c gi l assembler chuyn ngn ng assembly sang ngn ng my.
Ngay c nhng ngn ng assembly cng kh s dng. Nhng ngn ng cp cao
nh C++ cung cp cc k hiu thun tin hon nhiu cho vic thi hnh cc gii thut.
Chng gip cho cc lp trnh vin khng phi ngh nhiu v cc thut ng cp thp, v
gip h ch tp trung vo gii thut. T rn h bin dch (compiler) s m nhim vic dch
chng trnh vit bng ngn ng cp cao sang ngn ng assembly. M assembly c
to ra bi trnh bin dch sau s c tp hp li cho ra mt chng trnh c th
thc thi.
Chng 1: M u
Bng 1.1
$ c c hello.cc
1
2
3
4
$ a.out
Hello World
$
Ch gii
1
$ c c heflo.cc -o heDo
$ heBo
Hello World
$
Mc d lnh thc s c th khc ph thuc vo trnh bin dch, mt th
tc bin dch tng t c th c dng di mi trng MS-DOS. Trnh
bin dch C++ da trn Windows dng tn mt mi trng thn thin vi
ngi dng m vic bin dch rt n gin bng cch chn lnh t menu. Qui
nh tn di MS-DOS v Windows l tn ca tp tin ngun C++ phi c
phn m rng l .cpp.
1.3. Vic
bin dich
C++ din ra nh th no
u tin, b tin x l C++ xem qua m trong chng trnh v thc hin
cc ch th c ch nh bi cc ch th tin x l (v d, #include). Ket
qu l mt m chng trnh sa i m khng cn cha bt k mt chi
th tin x l no c.
Chng 1: M u
Sau , trnh bin dch C++ dch cc m ca chng trnh. Trnh bin
dch c th l mt trnh bin dch C++ tht s pht ra m assembly hay
m my, hoc ch l trnh chuyn i dch m sang c . trng hp th
hai, m c sau khi c dch ra s to thnh m assembly hay m my
thng qua trnh bin dch c . Trong c hai trng hp, u ra c th
khng hon chnh v chng trnh tham kho ti cc th tc trong th
vin cn cha c nh ngha nh mt phn ca chng trnh. V d
Danh sch 1.1 tham chiu ti ton t m thc s c nh ngha
trong mt th vin 10 ring bit.
Hnh 1.1 minh ha cc bc trn cho c hai trnh chuyn i C++ v trnh
bin dch C++. Thc t th tt c cc bc trn c triu gi bi mt lnh
n (nh l C Q v ngi dng thm ch s khng thy cc tp tin c pht
ra ngay lp tc.
Hnh 1.1
17
C++
Program
_J7
C++
TRANSLATOR
c
Code
c
COMPILER
C++
NATIVE
COMPILER
1.4. Bin
Bin l mt tn tng trng cho mt vng nh m d liu c th c lu tr
trn hay l c s dng li. Cc bin c s dng gi cc gi tri d
liu v th m chng c th c dng trong nhiu tnh ton khc nhau trong
mt chng trnh. Tt c cc bin c hai thuc tnh quan trng:
Chng 1: M u
2
3
4
5
woikDays=5;
workHours _ 7.5;
payRate=38.55;
weeklyPay= woikDays * workHours * payRate;
cout "Weekly Pay= " weeklyPay V;
6
7
8
9
10
11
Ch gii
4
9
10
11
9
10
11
12
13
Chng 1: M u
Ch gii
9-13
Khi chy, chng trnh s xut ra mn hnh nh sau (d liu nhp ca ngi
dng c in m);
What Lsthe hourlypay rate? 33.55
Weekly Pay = 1258.125
C hai v tr v ton hng tri nh l kt qu ca chng, cho php
nhiu thao tc nhp hay nhiu thao tc xut c kt hp trong mt cu lnh.
iu ny c minh ha trong danh sch 1.5 vi trng hp cho php nhp
c s gi lm vic mi ngy v s tin phi tr mi gi.
2
3
4
5
int
wotfcDays=5;
float workHouK, payRate, weeklyPay;
cout "What are the work hours and the hourlypay rate?
cin workHours payRate;
7
8
9
Chng 1: M u
1.6. Ch thch
Ch thch thng l mt on vn bn. N c dng gii thch mt vi
kha cnh ca chng trnh. Trnh bin dch b qua hon ton cc ch thch
trong chng trnh. Tuy nhin cc ch thch ny l c ngha v i khi l rt
quan trng i vi ngi c (ngi xem cc m chng trnh c sn) v
ngi pht trin phn mm. C++ cung cp hai loi ch thch:
Nhng g sau // (cho n khi kt thc hng m n xut hin) c xem
nh l mt ch thch.
Nhng g ng ngoc trong cp du * v */ c xem nh l mt ch
thch.
Danh sch 1.6 minh ha vic s dng c hai hnh thc ny.
Danh sch 1.6
#inude <iostream.h>
2
3
4
5
6
7
8
/* Chuong trinh nay tinh toantong so tien phai teahang tuan cho mot cong nhan ua tren tong so gio
lamviec va so tien phai tra moi gi. */
int main (void)
{
int
workDays=5;
//songay lamviec trongtuan
float workHours=7.5;
// so gio lamviec trong ngay
float payRate=33.50;
// so tien phai tra moi gio
float weeklyPay,
//tong so tien phai tra moi tuan
10
11
12
13
}
Cc ch thch nn c s dng tng cng (khng phi gy tr ngi)
vic c mt chng trnh. Mt vi im sau nn c ch :
Chng 1: M u
1.7. B nh
My tnh s dng b nh truy xut ngu nhin (RAM) lu tr m chng
trnh thc thi v d liu m chng trnh thc hin. B nh ny c th c
xem nh l mt chui tun t cc bit nh phn (0 hoc 1). Thng thng, b
nh c chia thnh nhng nhm 8 bit lin tip (gi l byte). Cc byte c
nh v lin tc. V th mi byte c th c ch nh duv nht bi a ch
(xem Hnh 1.2).
Hnh 1.2
1212
1213
1214
1215
1216
Byte
Byte
Byte
Byte
Byte
Byte
1217
Byte
Bit
lm cho trnh bin dch cp pht mt vi byte cho bin salary. So byte cn
c cp pht v phng thc c s dng cho vic biu din nh phn ca
s nguyn ph thuc vo s thi hnh c th ca C++. Trnh bin dch s
dng a ch ca byte u tin ca bin salary c cp pht tham kho ti
n. Vic gn trn lm cho gi tr 65000 c lu tr nh l mt s nguyn
b hai trong hai byte c cp pht (xem Hnh 1.3).
Hnh 1.3
Chng 1: M u
1211
1212
1213
1214
1215
Byte
Byte
Byte
10110011
10110011
1216
Byte
1217
Byte
salary
mt s nguyn 2 byte a ch 1214
1.8. S nguyn
Bin s nguyn c th c nh ngha l kiu short, int, hay long. Ch khc
nhau l s int s dng nhiu hn hoc t nht bng so byte nh l mt so short,
v mt s long s dng nhiu hn hoc t nht cng s bytc vi mt so int. V
d, trn my tnh c nhn th mt so short s dng 2 byte, mt s int cng 2
bytc, v mt s long l 4 byte.
short age=20;
int
salary=65000;
long price=4500000;
Mc nh, mt bin s nguyn c gi s l c du (chng hn, c mt
s biu din du m n c th biu din cc gi tr dng cng nh l cc
gi tr m). Tuy nhin, mt s nguyn c th c nh ngha l khng c du
bng cch s dng t kha unsigned trong nh ngha ca n. T kha signed
cng c cho php nhng hi d tha.
unsigned short age=20;
unsigned int
salary=65000;
unsigned long price=4500000;
S nguyn (v d, 1984) lun lun c gi s l kiu int,tr khic mt
hu t L hoc 1th n c hiu l kiu long. Mt s nguyn cng c thc
c t s dng hu t l u hoc u., v d:
1984L
19841
1984U
1984u
1984LU
1984ul
1.9. S thc
Bin s thc c th c nh ngha l kiu float hay double. Kiu double s
dng nhiu byte hn v v th cho min ln hn v chnh xc hn biu
din cc s thc. V d, trn cc my tnh c nhn mt so float s dng 4 byte
v mt so double s dng 8 byte.
Chng 1: M u
10
float interestRate=0.06;
double pi=3.141592654;
S thc (v d, 0.06) lun lun c gi s l kiu double, tr phi c mt hu
t F hay f th n c hiu l kiu float, hoc mt hu t L hay 1 th n c
hiu l kiu long double. Kiu long double s dng nhiu byte hom kiu double
cho chnh xc tt hn (v d, 10 byte trn cc my PC). V d:
0.06F
0.06f3.141592654L
3.1415926541
or
2.164e-3
l.lO.K t
Bin k t c nh ngha l kiu char. Mt bin k t chim mt byte n
lu gi m cho k t. M ny l mt gi tr s v ph thuc h thong m
k t ang c dng (ngha l ph thuc my). H thng chung nht l
ASCII (American Standard Code for Information Interchange). V d, k t A
c m ASCII l 65, v k t a c m ASCII l 97.
char ch='A';
unsigned char
offset=-88;
row=2, column=26;
// xung hng mi
// phm xung dng
'\t'
'\v'
'\b'
// trch dn n (')
// trch dn i (")
// du vch cho ngc (\)
l.ll.ChuS
Chui l mt dy lin tip cc k t c kt thc bng mt k t null. Bin
chui c nh ngha kiu char* (ngha l, con tr k t). Con tr on gin
ch l mt v tr trong b nh. (Cc con tr s c tho lun trong chng 5).
V th bin chui cha ng a ch ca k t u tin trong chui. V d,
xem xt nh ngha:
char *str="HELLO";
Hnh 1.4 minh ha bin chui v chui "HELLO" c th xut hin nh th no
trong b nh.
Hnh 1.4
1208
1209
1212
1210
1211
1212
1213
1214
1215
1216
1217
'H'
'E '
'L'
'L'
'O '
V0'
1218
str
Chng 1: M u
12
1.12.Tn
Ngn ng lp trnh s dng tn tham kho ti cc thc th khc nhau dng
to ra chng trnh. Chng ta cng thy cc v d ca mt loi cc tn
(ngha l tn bin) nh th. Cc loi khc gm: tn hm, tn kiu, v tn
macro.
S dng tn rt tin li cho vic lp trnh, n cho php lp trnh vin t
chc d liu theo cch thc m con ngi c th hiu c. Tn khng c
a vo m c th thc thi c to ra bi trnh bin dch. V d, mt bin
temperature cui cng tr thnh mt vi byte b nh m c tham kho ti
bi cc m c th thc thi thng qua a ch ca n (khng thng qua tn ca
n).
C++ p t nhng lut sau xy dng cc tn hp l (cng c gi l
cc nh danh). Mt tn cha mt hay nhiu k t, mi k t c th l mt
ch ci (ngha l, 'A'-'Z' v 'a'-'z'), mt s (ngha l, '0'-'9'), hoc mt k t
gch di
ngoi tr k t u tin khng th l mt s. Cc k t vit
hoa v vit thng l khc nhau.V d:
salary
salaiy2
Zsalary
_salary
Salary
Chng 1: M u
//nh danh hp l
// nh danh hp l
//nh danh khng hp l (bt u vi mt s)
// nh danh hp l
// hp l nhung khc vi salary
13
Cc t kha c++.
asm
continue
float
new
signed
auto
default
for
operator
sizeof
try
typedef
break
delete
friend
private
static
union
case
do
goto
protected
struct
unsigned
catch
double
if
public
switch
virtual
char
else
inline
register
template
void
class
enum
int
return
this
volatile
const
extern
long
short
throw
while
Bi tp cui chng 1
1.1
C = - ( F - 32)
9
Bin dch v chy chng trnh. Vic thc hin ca n ging nh th ny:
Nhiet do theo do Fahrenheit: 41
41 do Fahrenheit=5 do Celsius
1.2
Hng no trong cc hng sau biu din vic nh ngha bin l khng hp l?
int n=-100;
unsigned inti-100;
signed int=2.9;
longm =2,p=4;
mt 2k;
double x = 2 *m;
floaty=y *2;
unsigned double z =0.0;
double d=0.67F;
float -0.52L;
signed char=-1786;
charc = '$'+2;
sign char h = M il';
Chng 1: M u
14
1.4
Tui ca mt ngi.
S t trong mt t in.
Mt k t alphabet.
Chng 1: M u
15
Chng ny gii thiu cc ton t xy dng sn cho vic son tho cc biu
thc. Mt biu thc l bt k s tnh ton no m cho ra mt gi tr.
Khi tho lun v cc biu thc, chng ta thng s dng thut ng c
lng. V d, chng ta ni rng mt biu thc c lng mt gi tr no .
Thng th gi tr sau cng ch l l do cho vic c lng biu thc. Tuy
nhin, trong mt vi trng hp, biu thc cng c th cho cc kt qu ph.
Cc kt qu ny l s thay i lu di trong trng thi ca chng trnh.
Trong trng hp ny, cc biu thc c++ th khc vi cc biu thc ton hc.
C++ cung cp cc ton t cho vic son tho cc biu thc ton hc,
quan h, lun l, trn bit, v iu kin. N cng cung cp cc ton t cho ra
cc kt qu ph hu dng nh l gn, tng, v gim. Chng ta s xem xt ln
lt tng loi ton t. Chng ta cng s tho lun v cc lut u tin m nh
hng n th t c lng ca cc ton t trong mt biu thc c nhiu
ton t.
2 . 1.
Bng 2.1
*
/
%
Tn
Cng
Tr
Nhn
Chia
Ly phn d
V d
12+4.9
3.98-4
2*3.4
9/2.0
13% 3
//cho 16.9
//ch o -0.02
//cho 6.8
//cho 4.5
//ch o i
17
cost=100;
volume=80;
double
//c 1.25
k=10*92;
Cc ton t quan h.
Ton t
=
=
<
<=
>
>=
So
So
So
So
So
So
Tn
snh bng
snh khng bng
snh h hn
snh h hn hoc bng
snh ln hn
snh ln hn hoc bng
V du
5= 5
//choi
5!= 5
//choO
5< 5.5 //c h o i
5<=5
//choi
5 >5.5 // cho 0
6.3>=5 //c h o i
18
so snh
Cc ton t lun l.
Ton t
&&
II
Tn
Ph nh lun l
V lun l
Hoc lun l
V du
// c 0
1(5 5)
5 < 6 && 6 < 6 // c 0
5 < 6 II 6 < 5
// c 1
19
!20
10 && 5
10II 5.5
10& & 0
//cO
// u cl
//uc 1
//cO
sorted=0;
int
balanced = 1;
//false
// true
Tn
Ph nh bit
V bit
Hoc bit
Hoc exclusive bit
Dch tri bit
Dch phi bit
V du
~\011'
w & \0 2 7
W IN 0 2 7
W A\027
w 2
N 0 1 1 ' 2
//uocMS
// c W
// c \02>T
// c \036
//c \044
//oc \002'
20
B ng 2.5
Gi tri c s 8
011
027
366
001
037
036
044
002
1
0
1
0
1
0
0
0
1
0
1
0
0
1
y
~x
x & y
X y
x Ay
x2
x2
Chui bit
I
1
0
I
0
0
0
0
1
0
0
0
Bng 2.6
k=5;
Tn
Tng mt (tin t)
Tng mt (hu t)
Gim mt (tin t)
Gim mt (hu t)
V du
-H-k+10
k + + + 10
-k + 1 0
k -+ 1 0
//c
//c
//c
//c
16
15
14
15
21
=
+=
*_
/=
%=
&=
=
=
=
V du
n=25
n+ =25
n-=25
11*=25
n/= 25
n% = 25
n&=0xF2F2
n=0xF2F2
n A=0xF2F2
n=4
n=4
Tng ng vi
n = n +25
n = n -2 5
n=n*25
n = n /2 5
n=n% 25
n=n& QxF2F2
n=n|QxF2F2
n = n AQxF2F2
n=n4
n=n4
//nghal:m=m+(n=p=10);
22
in tm l , n 2;
intmin=(m<n?m:n);
// min nhn gi tr 1
//...
min= (m < n ? mCount-H-, m : nCount++, n);
y khi m nh hon n, mCount-H- c c lng v gi tr ca m c lu
ong min. Ngc li, nCount-H- c c lng v gi tr ca n c lu
trong min.
23
#indude <iostneamii>
int main (void)
{
3
4
6
7
8
10
11
12
u tin ca cc ton t.
Mc
Cao nht
Ton t
1+
->*
*
+
<
=
&
n
++
->
&
*
/
<=
=
>
>=
new
delete
sizeof
0
Loai
T h t
n hng
Nh hng
C hai
Tri ti phi
n hng
Phi ti tri
Nh
Nh
Nh
Nh
Nh
Nh
Nh
Tri
Tri
Tri
Tri
Tri
Tri
Tri
hng
hng
hng
hng
hng
hng
hng
ti
ti
ti
ti
ti
ti
ti
phi
phi
phi
phi
phi
phi
phi
A
1
&&
II
? ;
=
Thp nht
+=
-=
*=
/=
/s=
%=
&=
1=
=
=
Nh hng
Nh hng
Nh hng
Nh hng
Tam hng
Tri
Tri
Tri
Tri
Tri
ti
ti
ti
ti
ti
phi
phi
phi
phi
phi
Nh hng
Phi ti tri
Nh hng
Tri ti phi
//nhl:(int)3.14
25
Trong mt vi trng hp, C++ cng thc hin chuyn kiu khng
tng minh. iu ny xy ra khi cc gi tr ca cc kiu khc nhau c trn
ln trong mt biu thc. V d:
double
int
i= i+ d ;
d = 1;
1=10.5;
//d n h n l.o
// i nhn 10
//ngha l: i=int(double(i)+d)
Bi tp cui chng 2
2.1
2.2
t li k bit ca mt s nguyn n ti 0.
t k bit ca mt s nguyn t i 1.
Cho gi tr tuyt i ca mt s n.
2.4
d=2 * int(3.14);
k = 3.14 - 3;
c='a'+2;
c=lp'+''-'a';
26
2.5
27
Chng 3. Lnh
Chng ny gii thiu cc hnh thc khc nhau ca cc cu lnh C++ son
tho chng trnh. Cc lnh trnh by vic xy dng cc khi mc thp
nht ca mt chng trnh. Ni chung mi lnh trnh by mt bc tnh ton
c mt tc ng chnh yu. Bn cnh cng c th c cc tc n ph
khc. Cc lnh l hu dng v tc dng chnh yu m n gy ra, s kt ni ca
cc lnh cho php chng trnh phc v mt mc ch c th (v d, sp xp
mt danh sch cc tn).
Mt chng trnh ang chy dnh ton b thi gian thc thi cc cu
lnh. Th t m cc cu lnh c thc hin c gi l dng iu khin
(flow control). Thut ng ny phn nh vic cc cu lnh ang thc thi hin
thi c s iu khin ca CPU, khi CPU hon thnh s c chuyn giao ti
mt lnh khc. c trng dng iu khin trong mt chng trnh l tun t,
lnh ny n lnh k, nhng c th chuyn hng ti n dn khc bi cc
lnh r nhnh. Dng iu khin l mt s xem xt trng yu bi v n quyt
nh lnh no c thc thi v lnh no khng c thc thi trong qu trnh
chy, v th lm nh hng n kt qu ton b ca chng trnh.
Ging nhiu ngn ng th tc khc, C++ cung cp nhng hnh thc khc
nhau cho cc mc ch khc nhau. Cc lnh khai bo c s dng cho nh
ngha cc bin. Cc lnh nh gn c s dng cho cc tnh ton i s n
gin. Cc lnh r nhnh c s dng ch nh ng dn ca vic thc thi
ph thuc vo kt qu ca mt iu kin lun l. Cc lnh lp c s dng
ch nh cc tnh ton cn c lp cho ti khi mt iu kin lun l no
c tha. Cc lnh iu khin c s dng lm chuyn ng dn
thc thi ti mt ng dn khc ca chng trnh. Chng ta s ln lt tho
lun tt c nhng vn ny.
Chng 3: Lnh
30
doubled= 10.5;
d+5;
//lnhkhai bo
// lnh ny c mt tc ng chnhyu
//lnhkhai bo
// lnh khng hu ng
3.2.
Lnh if
i khi chng ta mun lm cho s thc thi mt lnh ph thuc vo mt iu
kin no cn c tha. Lnh if cung cp cch thc hin cng vic ny,
hnh thc chung ca lnh ny l:
if (biu thc)
lnh;
Trc tin biu thc c c lng. Nu kt qu khc 0 (ng) th sau
lnh c thc thi. Ngc li, khng lm g c.
V d, khi chia hai gi tr chng ta mun kim tra rng mu s c khc 0
hay khng.
if(count!=0)
Chng 3: Lnh
31
}
Mt hnh thc khc ca lnh if cho php chng ta chn mt trong hai
lnh: mt lnh c thc thi nu nh iu kin c tha v lnh cn li
c thc hin nu nh iu kin khng tha. Hnh thc ny c gi l lnh
if-else v c hnh thc chung l:
if {biu thc)
lnh 1;
else
lnh 2;
Trc tin biu thc c c lng. Neu kt qu khc 0 th lnh 1 c
thc thi. Ngc li, lnh 2 c thc thi.
V d:
if(balance>0) {
interestbalance * creditRate;
balance += interest;
} else {
interest= balance * debitRate;
balance+=interest;
}
Trong c hai phn c s ging nhau lnh balance -H=interest v th ton b cu
lnh c th vit li nh sau:
if(balance>0)
interestbalance * creditRate;
else
interest= balance * debitRate;
balance+= interest;
Hoc ch l:
balance += balance * (balance > 0 ? creditRate: debitRate);
Chng 3: Lnh
32
if(calIHour>6) {
if(callDuration <= 5)
charge= callDuration * tarrifl;
else
charge= 5 * tarrifl + (callDuration - 5) * tarrif2;
} else
charge=flatFee;
Mt hnh thc c s dng thng xuyn ca nhng lnh if lng nhau
lin quan n phn else gm c mt lnh if-else khc. V d:
if(ch >='()'&& ch <= 9')
kind=git;
clsc {
}
>
e cho d c c th s dng hnh thc sau:
if(ch >= '0' && ch <= V)
kind=digit;
else if(ch >= 'A' && ch <= Z)
kind= capitalLetter,
else if (ch >= 'a && ch<= V)
kind = smallLetter,
else
kind= special;
Chng 3: Lnh
33
switch (operator) {
case
result=operandl + operand2;
break;
c a s e r e s u l t =operand1- operand2;
break;
case hi:
case
result=operand1* operand2;
break;
case 7:
result=operandl / operand2;
default:
break;
cout "unknownoperator "operatorVi';
break;
}
Bi v case 'x' khng c lnh break nn khi case ny c tha th s thc thi
tip tc thc hin cc lnh trong case k tip v php nhn c thi hnh.
Chng ta c th quan st rng bt k lnh switch no cng c th c
vit nh nhiu cu lnh if-else. V d, lnh trn c th c vit nh sau:
Chng 3: Lnh
34
if (operator - '+1)
result= operand1+operand2;
else if(operator= -1)
result= operand 1 - operand2;
else if (operator= bc' IIoperator '*')
else if(operator= 7)
result= operand 1/ operand2;
else
cout "unknown operator " ch V;
ngi ta c th cho rang phin bn switch l r rng hn trong trng hp
ny. Tip cn if-else nn c dnh ring cho tnh hung m trong switch
khng th lm c cng vic (v d, khi cc iu kin l phc tp khng th
n gin thnh cc ng thc ton hc hay khi cc nhn cho cc case khng
l cc hng s).
sum=0;
while (i<=n){
sum+=i;
H-+;
}
Trng hp n l 5, Bng 3.1 cung cp bng pht ha vng lp bng cch
lit k cc gi tr ca cc bin c lin quan v iu kin lp.
Bng 3.1
v t ca vng lp while.________________________________
Vng lp
Mt
Hai
Ba
Bn
Nm
Su
Chng 3: Lnh
i
1
'
L
3
4
5
6
n
5
5
5
5
5
5
i <= n
1
1
1
1
1
0
sum -H=i++
1
3
6
10
15
35
Chng 3: Lnh
36
// vng lp v hn
something;
Chng 3: Lnh
37
")\n";
2,1
)
23)
3,1)
(33)
}
}while (num !=0);
Chng 3: Lnh
38
cinnum;
if(num<0) continue;
//xlsy...
}
Khi lnh continue xut hin bn trong vng lp c lng vo th n p
dng trc tip ln vng lp gn n ch khng p dng cho vng lp bn
ngoi. V d, trong mt tp cc vng lp c lng nhau sau y, lnh
continue p dng cho vng lp for v khng p dng cho vng lp while:
while (more) {
fo r(i= 0;i<n;-H-i) {
cinnum;
if(num<0) continue;
// process num here...
}
//etc...
>
Lnh break c th xut hin bn trong vng lp (while, do, hay for) hoc mt
lnh switch. N gy ra bc nhy ra bn ngoi nhng lnh ny v v th kt
thc chng. Ging nh lnh continue, lnh break ch p dng cho vng lp
hoc lnh switch gn n. S dng lnh break bn ngoi vng lp hay lnh
switch l li.
V d, chng ta c vo mt mt khu ngi dng nhng khng cho
php mt s hu hn ln th:
for (i=0; i < attempts; ++i) {
cout "Please enteryour password:
d n password;
if(Veriiy(password)) //kiem tra mt khu ng hay sai
break;
// Ihot khi vng lp
cout "Incorrect!\n";
}
y chng ta phi gi s rng c mt hm c gi Verify kim tra mt
mt khu v tr v true nu nh mt khu ng v ngc li l false.
Chng ta c th vit li vng lp m khng cn lnh break bng cch s
dng mt bin lun l c thm vo (verified) v thm n vo iu kin vng
lp:
verified=0;
for (i=0; i < attempts && !verified; ++i) {
Chng 3: Lnh
39
3.10.Lnh return
Lnh return cho php mt hm tr v mt gi tr cho thnh phn gi n. N c
hnh thc tng qut:
return biu thc',
Chng 3: Lnh
40
Bi tp cui chong 3
3.1
Vit chng trnh nhp vo chiu cao (theo centimet) v trng lng (theo
kilogram) ca mt ngi v xut mt trong nhng thng ip: underweight,
normal, hoc overweight, s dng iu kin:
Underweight: weight < height/2.5
Normal:
height/2.5 <= weight <= height/2.3
Overweight: height/2.3 < weight
3.2
3.3
Vit chng trnh nhp mt ngy theo nh dng dd/mm/yy v xut n theo
nh dng month dd,year. V d, 25/12/61 tr thnh:
Thang muoi hai 25,1961
3.4
Chng 3: Lnh
41
giaithua (0) = 1
giaithua (n) = n X giaithua (n-1)
3.5
3.6
9x9=81
Chng 3: Lnh
42
Chng 4. Hm
Chng 4: Hm
45
4.1. Hm on gin
Danh sch 4.1 trnh by nh ngha ca mt hm on gin tnh ly tha
ca mt s nguyn.
Danh sch A A______________________________
1 int Power (int base, unsigned int exponent)
2 {
int result= 1;
3
4
5
6
7
Ch gii
1
main (void)
3 {
4
cout " 2 A8=" Power(2,8) V;
5 U ________________________________
Chng 4: Hm
46
int Power (int base, unsigned int exponent); //khai bao ham
3
4
main (void)
5
6
11
12
13
4.2. Tham s v i s
C++ h tr hai kiu tham s: gi tr v tham chiu. Tham s gi tr nhn mt
sao chp gi tr ca i s c truyn ti n. Ket qu l, nu hm c bt k
chuyn i no ti tham s th vn khng tc ng n i s. V d, trong
#include <iostrearah>
void Foo (int num)
Chng 4: Hm
num=0;
47
}
int mam (void)
intx=10;
Foo(x);
cout << "x="
V;
return 0;
}
th tham s duy nht ca hm Foo l mt tham s gi tr. en lc m hm ny
c thc thi th num c s ng nh l mt bin cc b bn trong hm.
Khi hm c gi v X c truyn ti n,num nhn mt sao chp gi tr ca
X. Ket qu l mc d num c t v 0
bihm nhng vn khng c gtc
ng ln X. Chng trnh cho kt qu nh sau:
num=0;
x=10;
Tri li, tham s tham chiu nhn cc i s c truyn ti n v lm
trc tip trn i s . Bt k chuyn i no c to ra bi hm ti tham
s tham chiu u tc ng trc tip ln i s.
Bn trong ng cnh ca cc li gi hm, hai kiu truyn i s tng ng
c gi l truyn-bng-gi tr v truyn-bng-tham cbiu. Tht l hon
ton hp l cho mt hm truyn-bng-gi tr i vi mt vi tham s v
truyn-bng-tham chiu cho mt vi tham s khc. Trong thc t th truynbng-gi tr thng c s dng nhiu hn.
4.3. Phm
b v ton cc
vi cc
//bintoncc
// hm ton cc
// hm ton cc
II...
}
Cc bin ton cc khng c khi to, s c khi to t ng l 0.
V cc u vo ton cc l c th thy c mc chng trnh nn
chng cng phi l duy nht mc chng trnh. iu ny ngha l cng cc
bin hoc hm ton cc c th khng c nh ngha nhiu hn mt ln
Chng 4: Hm
48
//xyz l ton cc
voidFoo(intxyz)
.
"
if(xyz>0) {
double xyz:
//xyzlccbchothncaFoo
//...
}
>
c ba phm vi ring bit, mi phm vi cha ng mt xyz ring.
Thng thng, thi gian sng ca mt bin b gii hn bi phm vi ca
n. V th, v d cc bin ton cc tn ti sut thi gian thc hin chng
trnh trong khi cc bin cc b c to ra khi phm vi ca chng bt u v
mt i khi phm vi ca chng kt thc. Khng gian b nh cho cc bin ton
cc c dnh ring trc khi s thc hin ca chng trinh bt u nhng
ngc li khng gian b nh cho cc bin cc b c cp pht thi im
thc hin chng trnh.
II...
}
bin ton cc error l khng th truy xut c bn trong hm Eor bi v n
c ghi chng bi tham so error cc b.
Vn ny c gii quyt nh vo s dng ton t phm vi n hng
(::),ton t ny ly u vo ton cc nh l i s:
Chng 4: Hm
49
int error,
II...
if ("error !=0)
//...
}
4.5. Bin t ng
Bi v thi gian sng ca mt bin cc b l c gii hn v c xc nh
hon ton t ng nn nhng bin ny cng c gi l t ng. B xc nh
lp lu tr auto c th c dng ch nh r rng mt bin cc b l t
ng. V d:
void Foo (void)
//nhl: intxyz;
}
iu ny t khi c s dng bi v tt c cc bin cc b mc nh l t
ng.
Chng 4: Hm
50
4.7. Hm ni tuyn
Gi s mt chng trnh thng xuyn yu cu tm gi tr tuyt i ca mt
s cc s nguyn. Cho mt gi tr c biu th bi n, iu ny c th c
gii thch nh sau:
(n>0?n:-n)
retumn>0?n:-n;
}
Phin bn hm c mt s cc thun li. Th nht, n lm cho chng
trnh d c. Th hai, n c th c s dng li. V th ba, n trnh c
hiu ng ph khng mong mun khi i s chnh n l mt biu thc c cc
hiu ng ph.
Tuy nhin, bt li ca phin bn hm l vic s dng thng xuyn c
th dn ti s bt li v hiu sut ng k v cc tn ph dnh cho vic gi
hm. V d, nu hm Abs c s dng trong mt vng lp c lp i lp li
mt ngn ln th sau n s c mt tc ng trn hiu sut. Tn ph c th
c trnh bng cch nh ngha hm Abs nh l hm ni tuyn (inline);
inlineint Abs(intn)
{
retumn>0?n:-n;
}
Hiu qu ca vic s dng hm ni tuyn l khi hm Abs c gi, trnh
bin dch thay v pht ra m gi hm Abs th m rng v thay th thn ca
hm Abs vo ni gi. Trong khi v bn cht th cng tnh ton c thc hin
nhng khng c lin quan n li gi hm v th m khng c cp pht stack.
Chng 4: Hm
51
4.8. qui
Mt hm gi chnh n c gi l qui. qui l mt k thut lp trnh
tng qut c th ng dng cho cc bi ton m c th nh ngha theo thut
ng ca chnh chng. Chng hn bi ton giai tha c nh ngha nh sau:
Giai tha ca 0 l 1.
Hng th hai r rng cho bit giai tha c nh ngha theo thut ng ca
chnh n v v th c th c biu din nh mt hm qui:
int Factorial (unsigned int n)
return n = 0 ? 1 : n * Factorial(n-1);
}
Cho n bng 3, Bng 4.1 cung cp vt ca cc li gi Factorial. Cc khung
stack cho cc li gi ny xut hin tun t tng ci mt trn runtime stack.
Bng 4.1
n
3
o
\
0
11= 0
0
0
0
1
n * Factorial(n-l)
3 * Factorial(2)
2 * Factorial 1)
1 * Factorial(O)
Returns
6
2
1
1
Chng 4: Hm
52
4.9. i s mc
inh
Chng 4: Hm
53
Chng 4: Hm
54
Bi tp cui chong 4
4.1
4.2
inttemp=x;
x=y,
y=temp;
}
cho bit gi tr ca X v y sau khi gi hm:
x=10;
y=20;
Swap(x,y);
4.3
co u t str V i';
char *str="local";
c o irt str W ;
cout::str<< V;
co u t str V i';
}
int main (void)
Print(Tarameter);
return 0;
}
4.4
4.6
Chng 4: Hm
55
4.7
4.8
Chng 4: Hm
56
Chng 5.
Chng ny gii thiu v mng, con tr, cc kiu d liu tham chiu v minh
ha cch dng chng nh ngha cc bin.
M ng (array) gm mt tp cc i tng (c gi l cc phn t) tt
c chng c cng kiu v c sp xp lin tip trong b nh. Ni chung ch
c mng l c tn i din ch khng phi l cc phn t ca n. Mi phn t
c xc nh bi mt ch s biu th v tr ca phn t trong mng, s lng
phn t trong mng c gi l kch thc ca mng. Kch thc ca mng
l c nh v phi c xc nh trc; n khng th thay i trong sut qu
trnh thc hin chng trnh.
Mng i din cho d liu hn hp gm nhiu hng mc ring l tng
t. V d: danh sch cc tn, bng cc thnh ph trn th gii cng vi nhit
hin ti ca cc chng, hoc cc giao dch hng thng ca mt ti khon
ngn hng.
Con tr (pointer) on gin l a ch ca mt i tng trong b nh.
Thng thng, cc i tng c th c truy xut trong hai cch: trc tip
bi tn i din hoc gin tip thng qua con tr. Cc bin con tr c nh
ngha tr ti cc i tng ca mt kiu c th sao cho khi con hy th
vng nh m i tng chim gi c thu hi.
Cc con tr thng c dng cho vic to ra cc i tng ng trong
thi gian thc thi chng trnh. Khng ging nh cc i tng bnh thng
(ton cc v cc b) c cp pht lu tr trn runtime stack, mt i tng
ng c cp pht vng nh t vng lu tr khc c gi l heap. Cc i
tng khng tun theo cc lut phm vi thng thng. Phm vi ca chng
c iu khin r rng bi lp trnh vin.
T ham chiu (reference) cung cp mt tn tng trng khc gi l bit
hiu (alias) cho mt i tng. Truy xut mt i tng thng qua mt tham
chiu ging nh l truy xut thng qua tn gc ca n. Tham chiu nng cao
tnh hu dng ca cc con tr v s tin li ca vic truy xut trc tip cc
i tng. Chng c s dng h tr cc kiu gi thng qua tham chiu
ca cc tham s hm c bit khi cc i tng ln c truyn ti hm.
59
// nums[2] khi to ti 0
60
61
B ng 5.1
Sydney
Melbourne
Brisbane
Ma xun
26
24
28
Ma h
34
32
38
Ma thu
22
19
25
Ma ng
17
13
20
seasonTemp[3][4];
hng hai
20
hng ba
62
{28,38,25,20}
};
X l mng nhiu chiu th tng t nh l mng mt chiu nhng phi
x l cc vng lp lng nhau thay v vn lp on. Danh sch 5.3 minh ha
iu ny bng cch trnh by mt hm tm nhit cao nht trong mng
seasonTemp.
Danh sch 5.3
1 coast introws
2 const int columns
3
4
5
6
7
=3;
=4;
int seasonTemp[rows][columas] = {
{26,34,22,17},
{24,32,19,13},
{28,38,25,20}
};
8
9
10
11
12
13
14
15
16
int
highest=0;
5.3. Con tr
Con tr on gin ch l a ch ca mt v tr b nh v cng cp cch gin
tip truy xut d liu trong b nh. Bin con tr c nh ngha tr
ti d liu thuc kiu d liu c th. V d,
int
char
*ptrl;
*ptr2;
//tr ti mt int
//t ti mt char
num;
chng ta c th vit:
ptrl =#
K hiu & l ton t ly a ch; n nhn mt bin nh l mt i s v
tr v a ch b nh ca bin . Tc ng ca vic gn trn l a ch ca
63
num c khi to ti ptrl. V th, chng ta ni rng ptrl tr ti num. Hnh 5.2
minh ha s lc iu ny.
Hnh 5.2
num
5.4. B nh ng
Ngoi vng nh stack ca chng trnh (thnh phn c s dng lu tr
cc bin ton cc v cc khung stack cho cc li gi hm), mt vng b nh
khc gi l heap c cung cap. Heap c s dng cho vic cp pht ng
cc khi b nh trong thi gian thc thi chng trnh. V the heap cng c
gi l b nh ng (dynamic memory). Vng nh stack ca chng trnh
cng c gi l b nh tnh (static memory).
C hai ton t c s dng cho vic cp pht v thu hi cc khi b nh
trn heap. Ton t new nhn mt kiu nh l mt i s v c cp pht mt
klioi b nh cho mt i tng ca kiu . N tr v mt con tr ti klioi
c cp pht. V d,
int *ptr=newint;
64
//xamtitung
// xa mt mng cc i tung
5
6
7
strcpy(copy, str);
return copy,
}______________________________
Ch gii
1
65
V ti nguyn b nh l c gii hn nn rt c th b nh ng c th b
cn kit trong thi gian thc thi chng trnh, c bit l khi nhiu khi ln
c cp pht v khng c gii phng. Ton t new khng th cp pht mt
khi c kch thc c yu cu th n tr v 0. Chnh lp trnh vin phi
chu trch nhim gii quyt nhng vn ny. C ch iu khin ngoi l ca
C++ cung cp mt cch thc thc t gii quyt nhng vn nh th.
int *ptr=&nums[0];
str
.ow .
Hnh 5.3
10
30
40
_L
ptr+
str++
//ntinh2
66
Ch gii
3
67
int
4
5
6
7
highest=0;
8 J ______________________________________________
5.6. Con tr hm
Chng ta c th ly a ch mt hm v lu vo trong mt con tr hm. Sau
con tr c th c s dng gi gin tip hm. V d,
int (*CompareXcoast char*, coast char*);
// Compare ti hmstrcmp
//Compare tr ti hmstrcmp
// gi trc tip
//gi gian tip
// gi gin tiep (ngn gn)
68
in tto p = n -1;
intmid,cmp;
8
9
if ((cmp= Compare(item,table[mid]))
10
returnmid;
eLseif(cmp<0)
top=m id-l;
else
bot=m id+l;
11
12
13
14
15
16
17
retum-1;
0)
//travechisohanggmuc
//gioi hn tim kiern toi nua thap hon
//gioi han tim kiem toi nua cao hon
(1
.
//khong tim thay
Ch gii
1
69
iu ny s xut ra 2 nh c mong i.
inty=x+1;
1 hng u tin v 1 hng th ba ging nhau l cng i tng (hu ht
cc trnh bin dch thc hin ti u hng v cp pht c hai 1 trong cng mt
v tr b nh). V th chng ta mong i y l 3 nhng n c th chuyn thnh
70
inttemp=x;
x=y,
y=temp;
10
11
inttemp=*x;
*x = *y,
*y=temp;
12
13
14
15
16
inttemp=x;
x=y,
17
18
y=temp;
!
Ch gii
1
cout i " j V;
71
Swap3(i,j);
cout i
" j V;
}
Khi chy chng trnh s cho kt qu sau:
10,20
20,10
20,10
uint n;
str,
name;
//...
if ((cmp= comp(item, table[mid]))= 0 )
return mid;
II...
}
typedef m u Compare nh l mt tn kiu mi cho bt k hm vi nguyn
mu (prototype) cho trc. Ngi ta cho rng iu ny lm cho du hiu ca
BinScarch n gin hn.
72
Bi tp cui chong 5
5.1
5.2
5.3
12.U
22g
28g
32g
ng
Bo
16g
8g
Mui
0.4g
0.3g
0.5g
- l l l i 1 .............. 0.2g
Sap xp ni bt lin quan n vic qut lp li danh sch, ong trong khi
thc hin qut cc hng mc k nhau c so snh v i ch nu khng theo
th t. Qut m khng lin quan n vic i ch ch ra rng danh sch
c sp xp th t.
5.5
intlen=strlen(str);
char *result= new chaiflen +1 ];
for (register i =0; i < len; -Hi)
result[i] = strpen-i-1];
resuftflen] - \0';
return result;
73
74
76
TlT
Tui
a ch
Chiu cao
Mu tc
77
Con ch
Xe p
Trng thi
Tn
Mu
Ging
Vui sng
Bnh rng
Bn p
Dy xch
Bnh xe
Hnh ng
Sa
vy tai
Chy
n
Tng tc
Gim lc
Chuyn
bnh rng
78
Ilnh 6.1
Mt i tng phn mm
Methods
(behavior)
Variables
(state)
i tng phn mm xe p
10 mph
90 rpm
5th gear
79
6.4. Lp (Class)
Trong th gii thc thng thng c nhiu loi i tng cng loi. Chng
hn chic xe p ca bn ch l mt trong hng t chic xe p trn th gii.
Tng t, trong mt chng trnh hng i tng c th c nhiu i tng
cng loi v chia s nhng c im chung. S dng thut ng hng i
tng, chng ta c th ni rng chic xe p ca bn l mt th hin ca lp
xe p. Cc xe p c mt vi trng thi chung (bnh rng hin ti, s vng
quay hin ti, hai bnh xe) v cc hnh ng (chuyn bnh rng, gim tc).
Tuy nhin, trng thi ca mi xe p l c lp v c th khc vi cc trng
thi ca cc xe p khc. Trc khi to ra cc xe p, cc nh sn xut
thng thit lp mt bng thit k (blueprint) m t cc c im v cc yu
t c bn ca xe p. Sau hng lot xe p s c to ra t bn thit k
ny. Khng hiu qu nu nh to ra mt bn thit k mi cho mi xe p
c sn xut.
Trong phn mm hng i tng cng c th c nhiu i tng cng
loi chia s nhng c im chung nh l: cc hnh ch nht, cc mu tin
nhn vin, cc on phim, ... Ging nh l cc nh sn xut xe p, bn c
th to ra mt bng thit k cho cc i tng ny. Mt bng thit k phn
mm cho cc i tng c gi l lp (class).
Khi nim 6.5
Lp (class) l mt thit k (blueprint) hay mt mu ban
u (prototype) nh ngha cc thuc tinh v cc phng
thc chung cho tt c cc i tng ca cng mt loi
no .
Mt i tng l mt th hin c th ca mt lp.
80
Hnh 6.3
HyBi ke
Y ou r B i k e
81
Hnh 6.5
Lp v th hin ca lp
82
83
Mt thng ip gm c:
84
85
Bi tp cui chng 6
6.1
86
6.2
Phn bit s khc nhau gia lp v i tng, gia thuc tnh v gi t, gia
thng ip v truyn thng ip.
6.3
Trnh by cc c im ca OOP.
6.4
6.5
6.6
6.7
6.8
6.9
87