Professional Documents
Culture Documents
Lập trình C++ từ cơ bản đến nâng cao PDF
Lập trình C++ từ cơ bản đến nâng 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.
Chng 1: M u 1
1.1. Mt chong trnh C++ on gin
Danh sch 1.1 trnh by chng trnh C++ u tin. Chng trnh ny khi
chy s xut ra thng ip Hello World.
Ch gii
1 Hng ny s dng ch th tin x l #include chn vo ni dung ca tp
tin header iosteam.h trong chng trnh, iostrcamli l tp tin header chun
ca C++ v cha ng cc nh ngha cho xut v nhp.
2 Hng ny nh ngha mt hm c gi l main. Hm c th khng c
hay c nhiu tham s (parameters); cc tham s ny lun xut hin sau
tn hm, gia mt cp du ngoc. Vic xut hin ca t void gia du
n |o c chi nh rng hm main khng c tham s. Hm c th c kiu tr
v; kiu tr v lun xut hin trc tn hm. Kiu tr v cho hm main l
int (v d: mt s nguyn). Tt c cc chng trnh C++ phi c mt hm
main duy nht.Vic thc thi chng trnh lun bt u t hm main.
3 Du ngoc nhn bt u thn ca hm mam.
4 Hng ny l mt cu lnh (statement). Mt lnh l mt s tnh ton
cho ra mt gi tr. Ket thc mt lnh th lun lun c nh du bng
du chm phy (;). Cu lnh ny xut ra chui "Hello World" gi n
dng xut cout Chui l mt dy cc k t c t trong cp nhy kp.
K t cui cng trong chui ny (\n) l mt k t xung hng (newline).
Dng l mt i tng c dng thc hin cc xut hoc nhp, cout
l dng xut chun trong C++ (xut chun thng c hiu l mn hnh
my tnh). K t l ton t xut, n xem dng xut nh l ton hng
tri v xem biu thc nh l ton hng phi, v to nn gi tr ca biu
thc c gi n dng xut. Trong trng hp ny, kt qu l chui
"Hello Worl\n" c gi n dng cout, lm cho n c hin th trn
mn hnh my tnh.
5 Du ngoc ng kt thc thn hm main.
Chng 1: M u 2
Bng 1.1
1 $ c c hello.cc
2 $ a.out
3 Hello World
4 $
Ch gii
1 Lnh triu gi b dch AT&T ca c++ trong mi trng UNIX l cc.
i s cho lnh ny (hello.cc) l tn ca tp tin cha ng chng trnh.
Theo qui nh th tn tp tin c phn m rng l .c, .c, hoc l .cc. (Phn
m rng ny c th l khc nhau i vi nhng h iu hnh khc nhau)
2 Ket qu ca s bin dch l mt tp tin c th thc thi mc nh l a.out.
chy chng trnh, chng ta s dng a.out nh l lnh.
3 y l kt qu c cung cp bi chng trnh.
4 Du nhc v h thng ch nh rng chng trnh hon tt s thc
thi ca n.
Lnh cc chp nhn cc phn ty chn. Mi ty chn xut hin nh name,
trong name l tn ca ty chn (thn l mt k t n). Mt vi ty
chn yu cu c i s. V d ty chn xut (-o) cho php ch nh r tp tin
c th c cung cp bi trnh bin dch thay v l aout. Bng 1.2 minh ha
vic s dng ty chn ny bng cch ch nh r hello nh l tn ca tp tin c
th thc thi.
Bng 1.2
1 $ c c heflo.cc -o heDo
2 $ heBo
3 Hello World
4 $
1.3. Vic
bin dich
C++ din ra nh th no
Bin dch mt chng trnh C++ lin quan n mt s bc (hu ht cc bc
l trong sut vi ngi dng):
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 3
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.
Cui cng, trnh lin kt hon tt m i tng bng cch lin kt n vi
m i tng ca bt k cc module th vin m chng trnh tham
kho ti. Ket qu cui cng l mt tp tin thc thi.
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.
C++ C++
Program NATIVE
COMPILER
_J7
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:
Kiu c thit lp khi cc bin c nh ngha (v d nh: integer,
real, character). Mt khi c nh ngha, kiu ca mt bin C++
khng th c chuyn i.
Chng 1: M u 4
Gi tr c th c chuyn i bng cch gn mt gi tr mi cho bin.
Loi gi tr ca bin c th nhn ph thuc vo kiu ca n. V d, mt
bin s nguyn ch c th gi cc gi tr nguyn (chng hn, 2, 100, -12).
Danh sch 1.2 minh ha s dng mt vi bin on gin.
6 woikDays=5;
7 workHours _ 7.5;
8 payRate=38.55;
9 weeklyPay= woikDays * workHours * payRate;
10 cout "Weekly Pay= " weeklyPay V;
11
Ch gii
4 Hng ny nh ngha mt bin int (kiu s nguyn) tn l workDays, bin
ny i din cho s ngy lm vic trong tun. Theo nh lut chung, trc
tin mt bin c nh ngha bng cch chi nh kiu ca n, theo sau
l tn bin v cui cng l c kt thc bi du chm phy.
5 Hng ny nh ngha ba bin float (kiu s thc) ln lt thay cho s gi
lm vic trong ngy, s tin phi tr hng gi, v s tin phi tr hng
tun. Nh chng ta thy hng ny, nhiu bin ca cng kiu c th nh
ngha mt lt qua vic dng du phy ngn cch chng.
6 Hng ny l mt cu lnh gn. N gn gi tr 5 cho bin workDays. V th,
sau khi cu lnh ny c thc thi, workDays biu th gi tr 5.
7 Hng ny gn gi 7.5 ti bin workHours.
8 Hng ny gn gi tr 38.55 ti bin payRate.
9 Hng ny tnh ton s tin phi tr hng tun t cc bin workDays,
workHours, v payRate (* l ton t nhn). Gi tr kt qu c lu vo
bin weeklyPay.
10-12 Cc hng ny xut ba mc tun t l: chui "Weekly Pay = ", gi tr
ca bin weeklyPay, v mt k t xung dng.
Khi chy, chng trnh s cho kt qu nh sau:
Chng 1: M u 5
bin c khi to tmc khi 11 c s dng trong bt k cng vic tnh
ton no l rt quan trng.
Chng 1: M u 6
Ch gii
7 Hng ny xut ra li nhc nh What is the hourly pay rate? tm d liu
nhp ca ngi dng.
8 Hng ny c gi tr nhp c g bi ngi dng v sao chp gi tr ny
ti bin payRatc. Ton t nhp ly mt dng nhp nh l ton hng tri
(cn l dng nhp chun ca C++ m tng ng vi d liu c nhp
vo t bn phm) v mt bin (m d liu nhp c sao chp ti) nh l
ton hng phi.
9-13 Phn cn li ca chng trnh l nh trc.
Khi chy, chng trnh s xut ra mn hnh nh sau (d liu nhp ca ngi
dng c in m);
6 cout "What are the work hours and the hourlypay rate?
7 cin workHours payRate;
Ch gii
7 Hng ny c hai gi tr nhp c nlip vo t ngi dng v chp
tng ng chng ti hai bin workHours v payRale. Hai gi tr cn c
tch bit bi mt khng gian trng (chng hn, mt hay l nhiu khon
trng hay l cc k t tab). Cu lnh ny tng ng vi:
(cin workHours) payRale;
V kt qu ca l ton hng tri, (cinworkHours) nh gi cho cin m
sau c s dng nh l ton hng tri cho ton t k tip.
Chng 1: M u 7
9 Hng xiy l kt qu ca vic kt hp t hng 10 n hng 12 trong danli
sch 1.4. N xut "Weekly Pay = ", theo sau l gi tr ca bin
weeklyPay, v cui cng l mt k t xung dng. Cu lnh ny tng
ng vi:
((cout 'Weekly Pay= " ) weeklyPay) Vi';
V kt qu ca l ton hng tri, (cout "Weekly Pay = ") nh gi cho
cout m sau c s dng nh l ton hng tri ca ton t k tip.
Khi chy, chng trnh s hin th nh sau:
What are the work hours and the houriypay rate? 75 33.55
Weekly Pay = 1258.125
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.
2 /* Chuong trinh nay tinh toantong so tien phai teahang tuan cho mot cong nhan ua tren tong so gio
3 lamviec va so tien phai tra moi gi. */
4
int main (void)
5 {
6 int workDays=5; //songay lamviec trongtuan
7 float workHours=7.5; // so gio lamviec trong ngay
8 float payRate=33.50; // so tien phai tra moi gio
9 float weeklyPay, //tong so tien phai tra moi tuan
10
weeklyPay= workDays * workHours * payRate;
11 cout << "Weekly Pay - " weeklyPay << V;
12 }
13
Chng 1: M u 8
Ch thch nn d c v d hiu hn s gii thcli thng qua m chng
trnh. Th l khng c ch thch no cn hn c mt ch thch phc tp
d gy lm ln mt cch khng cn thit.
S dng qu nhiu ch thch c th dn n kh c. Mt chng trnh
cha qu nhiu ch thch lm bn kh c th thy m th khng th no
c xem nh l mt chng trnh d c v d hiu.
Vic s dng cc tn m t c ngha cho cc bin v cc thc th khc
trong chng trnh, v nhng ch tht vo ca m c th lm gim i
vic s dng ch thch mt cch ng k, v cng gip cho lp trnh vin
d c v kim sot chng trnh.
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).
1211 1212 1213 1214 1215 1216 1217
Byte Byte Byte Byte Byte Byte Byte
1 1 0 1 0 0 0 1
Bit
int salary=65000;
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).
Chng 1: M u 9
1211 1212 1213 1214 1215 1216 1217
Byte Byte Byte 10110011 10110011 Byte 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;
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;
2.164E-3 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';
Chng 1: M u
'\t' // phm tab ngang
'\v' // phm tab dc
'\b' //p h m li
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";
Chng 1: M u 12
Chui di c th ni rng qua khi mt hng n, trong trng hp ny
th mi hng trc phi c kt thc bng mt du vch cho ngc. V d:
"Example to show\
the use of backslash for \
writing a long string"
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.
Chng 1: M u 13
c + + kling c gii hn s k t ca mt nh danh. Tuy nhin, hu ht
thi cng li p t s gii hn ny nhng thng ln khng gy bn
tm cho cc lp trnh vin (v d 255 k t).
Bi tp cui chng 1
1.1 Vit chng trnh cho php nhp vo mt s o nhit theo Fahrenheit
v xut ra nhit tng ng ca n theo Celsius, s dng cng thc
chuyn i:
C = - ( F - 32)
9
Bin dch v chy chng trnh. Vic thc hin ca n ging nh th ny:
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
char *name = "Peter Pan'';
unsigned char *num= "276811";
identifier
scvcn_l 1
_uniqe_
gross-incomc
gross$income
2by2
default
avcragc_wcight_of_a_largc_pizza
variable
object-oriented
Chng 1: M u 15
Chng 2. Biu thc
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.
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.
Ton t Tn V d
+ Cng 12+4.9 //cho 16.9
- Tr 3.98-4 //ch o -0.02
* Nhn 2*3.4 //cho 6.8
/ Chia 9/2.0 //cho 4.5
% Ly phn d 13% 3 //ch o i
Khi c hai ton hng ca ton t chia l s nguyn th sau php chia
c thc hin nh l mt php chia s nguyn v khng phi l php chia
thng thng m chng ta s dng. Php chia s nguyn lun cho kt qu
nguyn (c ngha l lun c lm trn). V d:
int cost=100;
int volume=80;
double unitPrice= cost / (double) volume; //c 1.25
Ton t Tn V du
= So snh bng 5= 5 //choi
= So snh khng bng 5!= 5 //choO
< So snh h hn 5< 5.5 //c h o i
<= So snh h hn hoc bng 5<=5 //choi
> So snh ln hn 5 >5.5 // cho 0
>= So snh ln hn hoc bng 6.3>=5 //c h o i
"HELLO" <"BYE"
Ton t Tn V du
Ph nh lun l 1(5 5) // c 0
&& V lun l 5 < 6 && 6 < 6 // c 0
II Hoc lun l 5 < 6 II 6 < 5 // c 1
Ton t Tn V du
~ Ph nh bit ~\011' //uocMS
& V bit w & \0 2 7 // c W
Hoc bit W IN 0 2 7 // c \02>T
A Hoc exclusive bit W A\027 // c \036
Dch tri bit w 2 //c \044
Dch phi bit N 0 1 1 ' 2 //oc \002'
C hai ton t dch tri bit v dch phi bit ly mt chui bit lm ton
hng tri ca chng v mt s nguyn dng n lm ton hng phi. Ton t
dch tri cho kt qu l mt chui bit sau khi thc hin dch n bit trong chui
bit ca ton hng tri v pha tri. Ton t dch phi cho kt qu l mt chui
bit sau khi thc hin dch n bit trong chui bit ca ton hng tri v pha phi.
Cc bit trng sau khi dch c t ti 0.
unsigned charx=l\01 ;
unsigned chary=*'027;
y 027 0 0 0 I 0 1 1 1
~x 366 1 1 1 1 0 1 1 0
x & y 001 0 0 0 0 0 0 0 1
X y 037 0 0 0 I 1 1 1 1
x Ay 036 0 0 0 1 1 1 1 0
x2 044 0 0 1 0 0 1 0 0
x2 002 0 0 0 0 0 0 1 0
int k=5;
Ton t Tn V du
++ Tng mt (tin t) -H-k+10 //c 16
++ Tng mt (hu t) k + + + 10 //c 15
Gim mt (tin t) -k + 1 0 //c 14
Gim mt (hu t) k -+ 1 0 //c 15
Ton t V du Tng ng vi
= n=25
+= n+ =25 n = n +25
- n-=25 n = n -2 5
*_ 11*=25 n=n*25
/= n/= 25 n = n /2 5
%= n% = 25 n=n% 25
&= n&=0xF2F2 n=n& QxF2F2
n=0xF2F2 n=n|QxF2F2
= n A=0xF2F2 n = n AQxF2F2
= n=4 n=n4
= n=4 n=n4
intm,p;
m=n=p=100; //ngha l: n=(m=(p= 100));
m=(n=p=100)+2; // ngha l: m=(n=(p = 100))+2;
m=100;
m-H=n=p=10; //nghal:m=m+(n=p=10);
intm=l,n=2,p=3;
intmin=(m<n ?(m<p?m:p)
:(n<p?n:p));
intm=l,n=2,min;
int mCount=0, nCount=0;
//...
min= (m < n ? mCount-H-, m : nCount++, n);
Mc Ton t Loai T h t
Cao nht n hng C hai
1+ n
++
->
* new sizeof
Nh hng Tri ti phi
n hng Phi ti tri
& delete 0
->* * Nh hng Tri ti phi
* / % Nh hng Tri ti phi
+ - Nh hng Tri ti phi
Nh hng Tri ti phi
< <= > >= Nh hng Tri ti phi
= = Nh hng Tri ti phi
& Nh hng Tri ti phi
a= (b + c)* d
a=b+=c
int(3.14) //nhl:(int)3.14
Bi tp cui chng 2
2.1 Vit cc biu thc sau y:
Kim tra mt s n l chn hay khng.
Kim tra mt k t c l mt s hay khng.
Kim tra mt k t c l mt mu t hay khng.
Thc hin kim tra: n l l v dng hoc n chn v m.
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.
Cho s k t trong mt chui s c kt thc bi k t null.
2.4 Vit mt chng trnh cho php nhp vo mt s nguyn dng n v xut ra
gi tr ca n m 2 v 2 m n.
Chng 2: Biu thc 26
2.5 Vit mt chng trnh cho php nhp ba s v xut ra thng ip Sorted nu
cc s l tng dn v xut ra Not sorted trong trng hp ngc li.
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
3.1. Lnh on v lnh phc
Lnh n l mt s tirh ton c kt thc bng du chm phy. Cc nh
ngha bin v cc biu thc c kt thc bng du chm phy nh trong v
d sau:
int i; //lnhkhai bo
++i; // lnh ny c mt tc ng chnhyu
doubled= 10.5; //lnhkhai bo
d+5; // 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;
if(count!=0)
Chng 3: Lnh 31
average sum/ count;
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;
case hng
cc lnh',
default:
cc lnh',
}
Biu thc (gi l th switch) c c lng trc tin v kt qu c so
snh vi mi hng s (gi l cc nhn) theo th t chng xut hin cho n
khi mt so khp c tm thy. Lnh ngay sau khi so khp c thc hin
Chng 3: Lnh 33
sau . Ch s nhiu: mi case c th c theo sau bi khng hay nhiu
lnh (khng ch l mt lnh). Vic thc thi tip tc cho ti khi hoc l bt gp
mt lnh hrcak hoc tt c cc lnh xen vo n cui lnh switch c thc
hin.Trng hp default cui cng l mt ty chn v c thc hin nu
nh tt c cc case trc khng c so khp.
switch (operator) {
case result=operandl + operand2;
break;
case result=operand1- operand2;
break;
case result=operand1* operand2;
break;
case'A result=operand1/ operand2;
break;
default: cout"unknownoperator "operator V;
break;
}
Nh c minh ha trong v d, chng ta cn thit chn mt lnh
break cui mi case. Lnh break ngt cu lnh switch bng cch nhy n
im kt thc ca lnh ny. V d, nu chng ta m rng lnh trn cho
php X cng c th c s dng nh l ton t nhn, chng ta s c:
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;
break;
default: 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 3: Lnh 34
if (operator - '+1)
result= operand1+operand2;
else if(operator= -1)
result= operand 1 - operand2;
else if (operator= bc' IIoperator '*')
result= operand 1* operand2;
else if(operator= 7)
result= operand 1/ operand2;
else
cout "unknown operator " ch V;
Chng 3: Lnh 35
i khi chng ta c th gp vng lp while c thn rng (ngha l mt
cu lnh null). V d vng lp sau t n ti tha s l ln nht ca n.
while(n%2=0&&n/=2) ;
do
lnh'
while (biu thc)',
Lnh c thc thi trc tin v sau biu thc c c lng. Neu kt
qu ca biu thc khc 0 th sau ton b qu trnh c lp li. Ngc li
th vng lp kt thc.
Chng 3: Lnh 36
for (biu thc ; biu thc 2, biu thc)
lnh',
biu thcJ,
while (biu thc 2 ) {
nh;
biu thc 3;
}
C++ cho php biu thc u tin trong vng lp for l mt nh ngha
bin. V d trong vng lp trn th i c th c nh ngha bn trong vng
lp:
for(inti= l;i<=n;+-H)
sum+=i;
inti;
for(i=l;i<=n;-Hi)
sum+=i;
]1)
?
2,1
)
23)
3,1)
(33)
do {
cinnum;
if(num< 0) continue;
//x l s y ...
}while (num !=0);
iu ny tng ng vi:
do {
cinnum;
if(num>=0) {
//x i s y ...
}
}while (num !=0);
Chng 3: Lnh 38
Mt bin th ca vng lp ny c chnh xc mt s n ln (hn l cho
ti khi s l 0) c th c din gii nh sau:
fo r(i= 0;i<n;+-H ) {
cinnum;
if(num<0) continue; //lm cho nhy ti:-Hi
//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; //lm cho nhy ti:++i
// 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.
goto nhn',
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:
Chng 3: Lnh 40
trong biu thc ch r gi tr c tr v bi hm. Kiu ca gi tr xiy nn
hp vi kiu ca hm. Trng hp kiu tr v ca hm l void, biu thc nn
rong:
return;
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:
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 Vit chng trnh nhp vo mt gi tr s nguyn, kim tra n l dng hay
khng v xut ra giai tha ca n, s dng cng thc:
Chng 3: Lnh 41
giaithua (0) = 1
giaithua (n) = n X giaithua (n-1)
3.6 Vit chng trnh cung cp mt bng cu chng om gin ca nh dng sau
cho cc s nguyn t 1 ti 9:
1x 1 = 1
1 x 2 =2
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.
2 main (void)
3 {
4 cout " 2 A8=" Power(2,8) V;
5 U ________________________________
2 A8=256
Chng 4: Hm 46
Ni chung, mt hm phi c kliai bo trc khi s ng n. Khai bo
hm (function declaration) n gin gm c mu ban u ca hm gi l
nguyn mu hm (function prototype) ch nh tn hm, cc kiu tham s, v
kiu tr v. Hng 2 trong Danh sch 4.3 trnh by hm Power c th c khai
bo nh th no cho chng trnh trn. Nhng mt hm cng c th c
khai bo m khng cn tn cc tham s ca n,
3 main (void)
4 {
5 cout "2 A8=" Power(2,8) V;
6 }
7 int Power (int base, unsigned int exponent)
8 {
9 int result=l;
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>
Chng 4: Hm 47
cout "num - " num V ;
}
int mam (void)
{
intx=10;
Foo(x);
cout << "x=" 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;
4.3. Phm
vi cc
b v ton cc
Chng 4: Hm 48
mc ton cc. (Tuy nliin chng ta s thy sau ny mt tn hm c th c
s dng li). Thng thng cc bin hay hm ton cc c th c truy xut
t mi ni trong chng trnh.
interior,
Chng 4: Hm 49
int error,
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:
Thm ch khi lp trnh vin khng khai bo thanh ghi, nhiu trnh bin
dch ti u c gng thc hin mt d on thng minh v s dng cc thanh
ghi m chng mun ci thin hiu sut ca chng trnh.
tng s dng khai bo thanh ghi thng c xut sau cng; ngha
l sau khi vit m chng trnh hon tt lp trnh vin c th xem li m v
chn cc khai bo thanh ghi vo nhng ni cn thit.
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)
intAbs(intn)
{
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.
Chng 4: Hm 51
Bi v cc li gi ti hm ni tuyn c m xng nn khng c vt ca
chnh hm c a vo trong m bin dch. V th, nu mt hm c
nh ngha ni tuyn trong mt tp tin th n khng sn dng cho cc tp tin
khc. Do , cc hm ni tuyn thng c t vo trong cc tp tin header
m chng c th c chia s.
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.
Giai tha ca mt s l n ln giai tha ca 77-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:
Chng 4: Hm 52
4.9. i s mc
inh
r r
Chng 4: Hm 53
V d nh xem xt mt chng trnh c t tn l sum in ra tng ca
tp hp cc s c cung cp ti n nh l cc i s hng lnh. Hp thoi
4.1 minh ha hai s c truyn nh l cc i s ti hm sum nh th no ($
l du nhc UNIX).
Hp thoi 4.1
1 $sum 10.4 12.5
2 22.9
3 $____________
intmain(void);
int main (int argc, coast char* argvQ);
Danh sch 4.4 minh ha mt thi cng n gin cho chng trnh tnh tng
sum. Cc chui c chuyn i sang s thc s dng hm atof c nh
ngha trong th vin stdlibii
Danh sch 4.4
1 #inude <iostnsamii>
2 #inude <stdlib.h>
Chng 4: Hm 54
Bi tp cui chong 4
4.1 Vit chng trnh trong bi tp 1.1 v 3.1 s dng hm.
x=10;
y=20;
Swap(x,y);
#include <iostreami>
char *str="global";
Chng 4: Hm 55
4.7 nh ngha mt phin bn qui ca hm Power c trnh by trong
chng ny.
Chng 4: Hm 56
r
Chng ny gii thiu v mng, con tr, cc kiu d liu tham chiu v minh
ha cch dng chng nh ngha cc bin.
intheights[10];
Mi phn t trong mng c th c truy xut thng qua chi s mng. Phn
t u tin ca mng lun c ch s 0. V th, hcights[0] v heights[9 biu th
tng ng cho phn t u v phn t cui ca mng hdghts. Mi phn t ca
mng hghts c th c xem nh l mt bin s nguyn. V th, v d t
phn t th ba ti gi tr 177 chng ta c th vit:
heights[2] = 177;
intnums[3]= {5,10,15};
sizeof(ar) / sizeof(Type)
int seasonTemp[3][4];
int seasonTemp[3][4] = {
{26,34.22,17},
{24,32,19,13},
{28,38,25,20}
};
int seasonTemp[3][4] = {
26,34,22,17,24,32,19,13,28,38,25,20
};
int seasonTemp[j[4] = {
{26,34,22,17},
{24,32,19,13),
3 int seasonTemp[rows][columas] = {
4 {26,34,22,17},
5 {24,32,19,13},
6 {28,38,25,20}
7 };
8 int HighestTemp (int temp[nows][columns])
9 {
10 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,
Tt num;
chng ta c th vit:
ptrl =#
ptrl num
ptr2=(char*)ptrl;
chuyn con tr ptrl thnh con tr chai' trc khi gn n ti con tr ptr2.
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).
int *ptr=newint;
char *str= new char[10];
5 strcpy(copy, str);
6 return copy,
7 }______________________________
Ch gii
1 y l tp tin header chui chun khai bo cc dng hm cho thao tc
n chui.
4 Hm strlcn (c khai bo trong th vin string.h) m cc k t trong i
s chui ca n cho n (nhng khng vt qu) k t null sau cng. Bi
v k t null khng c tnh vo trong vic m nn chng ta cng thm
1 ti tng v cp pht mt mng k t ca kch thc .
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.
char *str="HELLO";
int nunisQ = {10,20,30,40};
int *ptr=&nums[0]; //t ti phn t u tin
H E L L 0 \0 10 30 40
str _L
str++ ptr+
Mt hnh thc khc ca tnh ton con tr c cho php trong C++ lin
quan n tr hai con tr ca cng kiu. V d:
Ch gii
3 iu kin ca vng lp ny gn ni dung ca chui src cho ni dung ca
chui dest v sau tng c hai con tr. iu kin ny tr thnh 0 khi k
t null kt thc ca chui src c chp ti chui dest
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,
Ch gii
1 Tm kim nh phn l mt gii thut ni ting tm kim thng qua mt
danh sch cc hng mc c sp xp. Danh sch tm kim c biu
din bi table - mt mng cc chui c kch thc a Hng mc tm kim
c biu th bi item.
2 Compare l con tr hm c s dng so snh item vi cc phn t ca
mng.
7 mi vng lp, vic tm kim c gim i phn na. iu ny c
lp li cho ti khi hai u tm kim giao nhau (c biu th bi bot v
top) hoc cho ti khi mt so khp c tm thy.
9 Hng mc c so snh vi mc gia ca mng.
10 Neu item khp vi hng mc gia th tr v chi mc ca phn sau.
11 Neu item nh hon hng mc gia th sau tm kim c gii hn ti
na thp hn ca mng.
14 Neu item ln hn hng mc gia th sau tm kim c gii hn ti
na cao hn ca mng..
Chapter 5: Mng, con tr, v tham chiu 69
16 Tr v -1 ch nh rng khng c mt hng mc so khp.
V d sau trnh by hm BinScarch c th c gi vi strcmp c truyn
nh hm so snh nh th no:
iu ny s xut ra 2 nh c mong i.
numl =0.16;
int& x=l;
-H-x;
inty=x+1;
13 void Swap3 (int &x, int &y) // truyn bng tham chiu
14
15 inttemp=x;
16 x=y,
17 y=temp;
18 !
Ch gii
1 Mc d Swapl chuyn i X v y, iu ny khng nh hng ti cc i
s c truyn ti hm bi v Swapl nhn mt bn sao ca cc i s.
Nhng thay i trn bn sao th khng nh hng n d liu gc.
7 Swap2 vt qua vn ca Swapl bng cch s dng cc tham s con tr
thay th. Thng qua gii tham kho (dereferencing) cc con tr Swap2
ly gi tr gc v chuyn i chng.
13 Swap3 vt qua vn ca Swapl bng cch s dng cc tham s tham
chiu thay th. Cc tham s tr thnh cc bit danh cho cc i s
c truyn ti hm v v th chuyn i chng khi cn.
Swap3 c thun li thm, c php gi ca n ging nh Swapl v khng
c lin quan n nh a ch (addressing) hay l gii tham kho
(dereferencing). Hm main sau minh ha s khc nhau gia cc li gi hm
Sw apl, Swap2, v Swap3.
10,20
20,10
20,10
typedefchar *String;
typedefcharName[12];
typedefunsigned int uint;
S ng Bo Mui
Top Flake 12.U 16g 0.4g
Comabix 22g 8g 0.3g
Oatabix 28g 0.5g
Ultrabran 32g - 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 Vit li hm sau bng cch s dng tnh ton con tr:
char* ReverseString (char *str)
{
intlen=strlen(str);
char *result= new chaiflen +1 ];
Variables
(state)
Methods
(behavior)
10 mph
90 rpm
5th gear
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.
HyBi ke Y ou r B i k e
Mt chng trnh hay ng dng ln thng cha nhiu i tng khc nhau.
Cc i tng phn mm tng tc v giao tip vi nhau bng cch gi cc
thng ip (message). Khi i tng A mun i tng B thc hin cc
phng thc ca i tng B th i tng A gi mt thng ip ti i
tng B.
Bi tp cui chng 6
6.1 Trnh by cc nh ngha ca cc thut ng:
Lp trnh hng i tng
Tru tng ha
i tng
Lp
Thuc tnh
Phng thc
Thng ip