Professional Documents
Culture Documents
File Goc 771413
File Goc 771413
CU TRC
Mc tiu
Gii thiu cc kin thc v kiu Con tr v kiu Cu
trc: khi nim, cch nh ngha, khai bo bin con tr,
bin cu trc, cch truy xut d liu bng con tr v
thao tc vi tng thnh phn ca cu trc.
Ngn ng Lp trnh C ++
1/56
Ni dung
Kiu con tr
Kiu cu trc
Cu trc t tr
Mng cu trc
Con tr v mng
Mng con tr
Ngn ng Lp trnh C ++
2/56
Ngn ng Lp trnh C ++
3/56
Ngn ng Lp trnh C ++
4/56
\\Ly a ch ca bin
Yu cu:
Xc nh a ch ca i tng nu l mng, chui
k t?
Ngn ng Lp trnh C ++
5/56
6/56
Ngn ng Lp trnh C ++
7/56
*tn_bin_con_tr;
Trong :
- Kiu_d_liu l kiu d liu ca nh m ta mun con
tr tr ti.
- Du (*) nhm bo cho trnh bin dch bit ang lm vic
vi kiu d liu l kiu con tr
- tn_bin_con_tr cng c t theo quy tc t tn
=> Khai bo con tr c tn tn_bin_con_tr tr ti nh
cha d liu c kiu_d_liu
Ngn ng Lp trnh C ++
8/56
9/56
Ngn ng Lp trnh C ++
10/56
Ngn ng Lp trnh C ++
11/56
12/56
Ngn ng Lp trnh C ++
13/56
14/56
Ngn ng Lp trnh C ++
15/56
Ngn ng Lp trnh C ++
16/56
Ngn ng Lp trnh C ++
17/56
Ngn ng Lp trnh C ++
int *p;
cout<<"Nhap mot so nguyen : ";
p = new int;
cin>>*p;
cout<<*p<<endl;
18/56
Theo th t nhp vo
Theo th t ngc li
Ngn ng Lp trnh C ++
19/56
Ngn ng Lp trnh C ++
20/56
Khi nim
- Kiu cu trc l kiu d liu bao gm nhiu thnh phn
c kiu khc nhau, mi thnh phn c gi l mt trng
(field)
- Chng hn, Sinh vin gm nhiu trng: m sinh vin, h
tn, ngy thng nm sinh, gii tnh, qu qun,
Ngn ng Lp trnh C ++
21/56
nh ngha cu trc
- Xc nh cc kiu d liu n gin ca cc bin thnh
phn c nhm li trong cu trc .
- Cn ch ra: tn ca cu trc v cc thnh phn ca n.
Phn bit thnh phn ny vi thnh phn khc thng qua
kiu d liu, tn bin v kt thc bng du chm phy (;).
Cc thnh phn ca cu trc c t trong cp du mc
nhn ({}) v dng du chm phy (;) kt thc vic nh
ngha mt cu trc.
Ngn ng Lp trnh C ++
22/56
nh ngha cu trc
C php tng qut nh ngha mt kiu cu trc nh sau:
struct
Tn_kiu_cu_trc
{
/*Bt u mt cu trc*/
<Kiudl> <Bin 1>;
<Kiudl> <Bin 2>;
..
<Kiudl> <Bin n>;
};
/*Kt thc mt cu trc
Ngn ng Lp trnh C ++
23/56
nh ngha cu trc
V d:
struct Ngaythang
{
unsigned int Ngay;
unsigned int Thang;
unsigned int Nam;
};
Ngn ng Lp trnh C ++
24/56
Ngn ng Lp trnh C ++
25/56
Ngn ng Lp trnh C ++
26/56
struct Ngaythang
{
unsigned int Ngay, Thang, Nam;
};
Ngaythang Ngay_den={20,04,2010};
cout<<Ngay_den.Ngay<<endl;
cout<<Ngay_den.Thang<<endl;
cout<<Ngay_den.Nam<<endl;
Ngn ng Lp trnh C ++
27/56
Ngn ng Lp trnh C ++
28/56
Phm vi ca cu trc
- Nu kiu struct c khai bo trc tt c cc hm, n c
hiu lc trong ton b chng trnh c s dng n.
- Nu n t bn trong mt hm, th ch c hm c
dng n.
- Thng thng kiu cu trc c khai bo trong tp tiu
(.h) v c s dng trong chng trnh bng lnh
#include.
Ngn ng Lp trnh C ++
29/56
Ngn ng Lp trnh C ++
31/56
32/56
Con tr cu trc
- Con tr cu trc l con tr cha a ch ca mt bin cu
trc hoc mt vng nh c kiu cu trc no .
- Cch khi to mt con tr cu trc:
+ Gn a ch ca mt bin cu trc cho mt thnh
phn ca mng
+ Con tr c khi to bng vic s dng ton t
new cp pht b nh
+ i vi con tr p tr n mng a, ta c th truy
cp n cc thnh phn ca phn t mng:
p[i].Hoten; (p+i)->Hoten; *(p+i).Hoten;
Ngn ng Lp trnh C ++
33/56
Con tr cu trc
struct Sinhvien
{
char Hoten[30], Gioitinh[5];
float Diem;
} lop[50];
Sinhvien *p;
cout<<"Nhap ho ten sinh vien thu 11: ";
cin.getline(lop[10].Hoten,30);
cout<<"Nhap gioi tinh : "; cin.getline(lop[10].Gioitinh,5);
cout<<"Nhap diem : "; cin>>lop[10].Diem;
p = lop;
cout<<p[10].Hoten<<endl;
cout<<(p+10)->Gioitinh<<endl;
cout<<"Diem : "<<(*(p+10)).Diem<<endl;
Ngn ng Lp trnh C ++
34/56
Ngn ng Lp trnh C ++
35/56
5.3 Cu trc t tr
Cch 1:
typedef
struct
{
struct Tncutrc
tnbincutrc;
Tncutrc
cc thnh phn;
tnbincutrc *contr;
};
Ngn ng Lp trnh C ++
36/56
5.3 Cu trc t tr
Cch 2:
struct
Tncutrc
{
cc thnh phn;
Tncutrc *contr;
};
typedef Tncutrc
Ngn ng Lp trnh C ++
tnbincutrc;
Chng 5: Kiu con tr v kiu cu trc
37/56
5.3 Cu trc t tr
Cch 3:
typedef struct
tnbincutrc
{
cc thnh phn;
tnbincutrc *contr;
};
Ngn ng Lp trnh C ++
38/56
5.3 Cu trc t tr
Cch 4:
struct tnbincutrc
{
cc thnh phn;
tnbincutrc *contr;
};
Ngn ng Lp trnh C ++
39/56
5.3 Cu trc t tr
V d:
typedef
struct
struct
SV sinhvien;
SV
struct
SV
char Hoten[30];
char
Hoten[30];
float
float
Diem;
SV *tiep;
sinhvien *tiep;
};
Ngn ng Lp trnh C ++
Diem;
};
typedef
SV sinhvien;
40/56
5.3 Cu trc t tr
V d:
typedef
struct
sinhvien;
struct
sinhvien
{
char
Hoten[30];
char Hoten[30];
float
Diem;
float
sinhvien *tiep;
};
Ngn ng Lp trnh C ++
Diem;
sinhvien *tiep;
};
41/56
};
sinhvien
SV[60];
42/56
Ngn ng Lp trnh C ++
43/56
44/56
Ngn ng Lp trnh C ++
45/56
Con tr v xu k t
Mt con tr k t c th xem nh mt xu k t, trong
xu chnh l tt c cc k t k t byte con tr u tin n
byte \0 gp u tin. V vy, c th khai bo cc xu di
dng con tr k t nh sau:
char *st;
char *st1=Hello;
Ngn ng Lp trnh C ++
46/56
Con tr v xu k t
Cc hm trn xu vn c p dng nh khai bo n di
dng mng k t. Tuy nhin, ta c th gn trc tip 2 xu
di dng con tr.
V d: char
char
*st;
*s=Hello;
st = s;
Ngn ng Lp trnh C ++
47/56
Con tr v xu k t
Khi khai bo xu dng con tr, th n vn cha cp pht b
nh c th. Do , ta phi s dng ton t new xin cp
pht b nh cho xu vi di cn thit.
V d 1: char
strcpy(s, Hello);
st = s;
V d 2: char *st, *s = new char[30];
strcpy(s, Hello);
st = new char[30]; strcpy(st,s);
Ngn ng Lp trnh C ++
48/56
Ngn ng Lp trnh C ++
49/56
*tnmng[sphnt];
Ngn ng Lp trnh C ++
50/56
51/56
BI TP THC HNH
1. Cho p, q l cc con tr tr n k t c. Gn *p = *q + 1. Khi
, c th khng nh *q = *p 1?
2. Cho p, q l 2 con tr tr n bin nguyn x = 10. Gn *p = *q +
5. Lc ny, gi tr ca *p v *q l bao nhiu?
3. Cho p, q, r, s l cc con tr tr n bin nguyn x = 5. Gn *q =
*p + 1; *r = *q + 1; *s = *r + 1. *q = *s 2. Hi gi tr ca
bin x l bao nhiu?
4. Khng dng mng, hy nhp vo mt dy s nguyn sau
xut dy ra mn hnh theo th t ngc li.
5. Khng dng mng, hy nhp vo mt dy s nguyn sau in
ra mn hnh dy c sp xp dy theo chiu tng (hoc
gim) dn?
Ngn ng Lp trnh C ++
52/56
BI TP THC HNH
6. Dng con tr, nhp gi tr vo cho mt dy cc s thc. Sau ,
tm v xut ra mn hnh phn t ln nht v b nht c trong
dy.
7. S dng con tr, nhp vo mt dy k t. Sau , tm v thay
th cc k t a bng k t b. Hin th ra mn hnh dy k t
trc v sau khi thay th.
8. Xy dng hm nhp, xut, sp xp mng bt k bng cch s
dng bin con tr lm tham s hnh thc ca hm. S dng cc
hm trn vit chng trnh nhp cc gi tr vo cho mng
sau xut ra mn hnh cc gi tr ca mng trc v sau khi
sp xp
9. S dng con tr xy dng hm tnh tng 2 mng. Sau ,
xut ra mn hnh kt qu tnh c.
Ngn ng Lp trnh C ++
53/56
BI TP THC HNH
10. S dng con tr, nhp vo mt xu k t. Sau , m v xut
ra mn hnh tn sut xut hin cc k t trong xu.
11. S dng con tr, nhp vo mt xu k t. Sau , m v xut
ra mn hnh cc t c trong xu.
12. Tnh s ngy qua k t u nm cho n ngy hin ti.
Quy c ngy c khai bo di dng cu trc.
13. Nhp mt ngy thng nm di dang cu trc. Tnh chnh xc
(k c nm nhun) s ngy qua bt u t ngy 1/ 1/ 1 n
ngy va nhp.
14. Khai bo ngy thng nm theo kiu cu trc. Vit chng
trnh tnh khong cch (s ngy) gia 2 thng bt k
Ngn ng Lp trnh C ++
54/56
BI TP THC HNH
15. Vit chng trnh nhp vo mt ngy thng nm bt k. Xut
ra mn hnh ngy l th my nu ta xem ngy 1/ 1/ 1 l th
2.
16. Vit chng trnh nhp vo 2 ngy no ca thng bt k
ca nm bt k. Tnh v hin th ra mn hnh khong cch gia
2 ngy l bao nhiu ngy.
17. Cho s phc di dng cu trc gm c 2 phn l phn thc
v phn o. Vit chng trnh nhp vo 2 s phc bt k. Tnh
v xut ra mn hnh kt qu tng, hiu, tch, thng ca chng
18. Cho phn s di dng cu trc gm 2 phn l t s v mu
s. Vit chng trnh nhp vo 2 phn s. Tnh v hin th ra
mn hnh tng, hiu, tch, thng ca chng sau khi rt gn.
Ngn ng Lp trnh C ++
55/56
BI TP THC HNH
19. Vit chng trnh nhp vo mt mng sinh vin, thng tin v
mi sinh vin gm: Hoten, tuoi, quequan. Sp xp mng va
nhp theo chiu tng dn ca chui. Sau , xut ra mn hnh
mng sau khi sp xp.
20. Cho hnh ch nht di dng cu trc gm chiu di v chiu
rng. Nhp vo mt mng cc hnh ch nht. Tnh v xut ra
mn hnh chu vi, din tch tng ng ca mi hnh.
21. To danh sch gm 10 s nguyn dng. Sau sp xp danh
sch theo th t tng dn.
22. To danh sch LIFO gm 100 s nguyn t u tin
23. To danh sch FIFO gm n sinh vin, mi sinh vin c
qun l bi: h tn, tui, im trung bnh. Sau sp xp danh
sch sinh vin theo th t gim dn ca im trung bnh.
Ngn ng Lp trnh C ++
56/56