Professional Documents
Culture Documents
Session 19 - Concept
Session 19 - Concept
Session 19 - Concept
Mc tiu:
Kt thc bi hc ny, bn c th:
Gii thch Tm hiu cu trc (structure) v cng dng ca chng
nh ngha cu trc
Khai bo cc bin kiu cu trc
Gii thchTm hiu cch truy cp vo cc phn t ca cu trc
Gii thchTm hiu cch khi to cu trc
Gii thchTm hiu cch s dng cu trc vi cu lnh gn
Gii thch cch truyn cu trc vo hm nh cc i sGii thchTm hiu cch truyn itham s
kiu kiu cu trc vo hm
S dng mng cc cu trc
Gii thchTm hiu s cch khi to ca cc mng cu trc
Gii thchTm hiu con tr n cu trc
Gii thchTm hiu cch truyn cc i s kiu con tr cu trc vo hm nh cc i s.
Gii thchTm hiu t kha typedef
Gii thchTm hiu vic sp xp mng vi hai thut ton sp xp mng l Insertion sort v Bubble
sort.
Gii thiu
Cc chng trnh ng dng trong bi cnh ca th gii thctrong thc t i hi lu tr cc kiu d
liu khc nhau. C th cc kiu d liu c nh ngha trc ca C t ra l khng trong nhng
trng hp nh vy. Tuy nhin, cc kiu d liu ca C m chng ta c hc c th khng trong
cc trng hp . V vy, C cho php to ra cc kiu d liu ty do ngi dng nh ngha. Mt
trong nhng kiu nh vy l cu trc (structure). Mt cu trc l mt nhm tp cc bin c gom
nhm li vi nhau cdi cng mt tn. Mt kiu d liu cng c th c t tn mi bng cch s
dng t kha typedef.
Cc ng dng thng lu tr mt s lng d liu rt ln. Trong nhng trng hp ny, vic nh v
mt mc d liu no c th tn nhiu thi gian. Sp xp cc gi tr theo mt trt t no s lm
cho cng vic tm kim nhanh chng v d dng hn. Trong chng ny, chng ta cng s xem mt s
gii thut dng sp xp cc mng.
19.1
Cu trc
225
1
Bin
I
L
L
U
S
I
O
N
S
Mn
g
I
L
L
U
S
I
O
N
S
B
A
C
H
1
Tn sch
Tn
tc gi
Ln
xut bn
Cu trc
Hnh 19.1. S khc nhau gia mt bin, mt mng v mt cu trc.
19.1.1 nh ngha mt cu trc
Mt cu trc c nh ngha chnh l mt khun mu ca bin cu trc. Cc bin trong cu trc c
gi l cc phn t ca cu trc hay thnh phn ca cu trcMt nh ngha cu trc hnh thnh
mt khun mu to ra cc bin cu trc. Cc bin trong cu trc c gi l cc phn t ca cu
trc hay thnh vin ca cu trc.
Vic nh ngha cu trc s to ra kiu d liu mi cho php ngi dng s dng chng khai bo
cc bin kiu cu trc. Cc bin trong cu trc c gi l cc phn t hay cc thnh phn ca cu
trc.
Mt cch tng qut, cc phn t ca mt cu trc quan h vi nhau mt cch logic v chng lin quan
n mt thc th duy nht. V d, v mt danh mc sch c th c biu din nh sau:
struct cat
{
char bk_name [25];
char author [20];
int edn;
float price;
};
226
Lp trnh c bn C
Cu lnh trn nh ngha mt kiu d liu mi gic tn l struct cat. Mi bin ca kiu ny bao gm
bn phn t - bk_name, author, edn, v price. Cu lnh khng khai bo bt k bin no v v vy
chng trnh khng dnh bt k vng nh no trong b nh. N ch nh ngha cu trc ca cat. T
kha struct bo cho trnh bin dch bit rng mt structure ang c nh ngha. Nhn cat khng
phi l tn bin, v khng phi ta ang khai bo bin. N l mt tn kiu. Cc phn t ca cu trc
c nh ngha trong du mc, v kt thc ton b cu lnh bng mt du chm phy.
19.1.2 Khai bo bin kiu cu trc
Mt Kkhi mt cu trc c nh ngha, chng mt hay nhiu bin kiu ny c th c khai bota
c th khai bo mt hoc nhiu bin kiu ny. iu ny c th thc hin nh sauV d:
struct cat books1;
Cu lnh ny s dnh vng nh lu gi tt c cc mc trong mt cu trc. Khai bo trn thc
hin chc nng tng t nh cc khai bo bin: int xyz v float ans. N bo vi trnh bin dch dnh
ra mt vng lu tr cho mt bin vi kiu no v gn tn cho bin.
Cng nh vi int, float v cc kiu d liu khc, ta c th c mt s bt k cc bin c kiu cu trc
cho. Trong mt chng trnh, c th khai bo hai bin books1 v books2 c kiu cu trc cat . iu
ny c th thc hin c theo nhiu cch.
struct cat
{
char bk_name[25];
char author[20];
int edn;
float price;
} books1, books2;
hoc
hoc
struct cat books1;
struct cat books2;
Cc khai bo ny s dnh vng nh cho c hai bin books1 v books2.
Cc phn t ca cu trc c truy cp thng qua vic s dng ton t chm (.), ton t ny cn c
gi l ton t thnh vin membership. C php tng qut dng truy cp mt phn t ca cu trc
l:
structure_name.element_name
V d nh, m lnh sau y lin htruy cp n trng bk_name ca bin kiu cu trc books1 khai
bo bn trn.
books1.bk_name
c vo tn ca quyn sch, cu lnh s l:
scanf(%s, books1.bk_name);
in ra tn sch, cu lnh s l:
227
228
Lp trnh c bn C
struct issue
{
char borrower [20];
char dt_of_issue[8];
struct cat books;
}issl;
Cu lnh ny khai bo books l mt thnh phn ca cu trc issue. Bn thn thnh phn ny l mt
cu trc kiu struct cat c kiu cu trc. Bin Ccu trc trn c th c khi to nh sau:
struct issue issl = {Jane, 04/22/03, {Illusions,
Richard Bach, 2, 150.00}};
Cc du ngoc lng nhau c s dng khi to mt cu trc nm trong mt cu trc.
truy cp vo cc phn t ca cu trc, hnh thc tng t nh cch s dng vi cc cu trc bnh
thng, chng hn truy cp vo tn ca ngi mn, m lnh s l:
i vi bin cu trc c thnh phn l mt cu trc khc, vic truy cp cc thnh phn ca bin ny
hon ton tng t i vi mt bin cu trc thng thng. Chng hn, truy cp vo tn ca ngi
mn ta dng lnh l:
issl.borrower
Tuy nhin truy cp vo phn t ca cu trc cat, chnh l mt phn ca cu trc issue, biu thc sau
y s c s dng:
Tuy nhin, truy cp thnh phn author ca bin cu trc cat m bin cu trc ny li l thnh phn
ca mt bin cu trc issl ta s dng lnh sau:
issl.books.author
Biu thc ny lin h n phn t author ca cu trc books trong cu trc issl.
Mc lng ca cc cu trc ch b gii hn bi dung lng hin thi ca b nh ang c. C th c
mt cu trc lng trong mt cu trc ri lng trong mt cu trc khc v v.vCc tn bin s dng
thng t m t v hnh dng ca n. Tn ca cc bin thng c t theo cch thc gi nh ni
dung thng tin m n lu tr. V d nh:
company.division.employee.salary
Cng cn nh rng nu mt cu trc c lng trong mt cu trc khc, n phi c khai bo trc
cu trc khc s dng n.
19.1.6 Truyn cu trc nh l cc i s ca hm tham s kiu cu trc
Mt bin cu trc c th c truyn vo mt hm nh l mt i sKiu tham s ca mt hm c th
l cu trc. y l mt phng tin hu dng v n c s dng truyn mt nhm cc mc d
liu c lin quan logic vi nhau thay v phi truyn tng mc mt. y l mt phng tin hu dng
khi ta mun truyn mt nhm cc thnh phn d liu c quan h logic vi nhau thng qua mt bin
thay v phi truyn tng thnh phn mt. Tuy nhin, khi mt cu trc c s dng nh mt i
stham s, cn phi lu rng kiu ca i stham s thc phi trng vi kiu ca tham s hnh thc.
Chng hn nh, mt cu trc c khai bo lu tr tn, m s khch hng v s tin gi gc vo ti
khon ca khch hng. D liu c nhp trong hm main() v cu trc c truyn vo hm
intcal()-hm tnh ton s tin li phi tr, vic ton s tin li phi tr c thc hin bng cch gi
hm intcal() c mt tham s kiu cu trc. on lnh nh sau:
229
V d 1:
#include <stdio.h>
struct strucintcal /* Defines the structure */
{
char name[20];
int numb;
float amt;
};
void main()
{
struct strucintcal xyz; /* Declares a variable */
void intcal(struct strucintcal);
clrscr();
/* Accepts data into the structure */
printf("\nEnter Customer name: ");
gets(xyz.name);
printf("\nEnter Customer number: ");
scanf("%d", &xyz.numb);
printf("\nEnter Principal amount: ");
scanf("%f", &xyz.amt);
intcal(xyz); /* Passes the structure to a function */
getch();
}
void intcal(struct strucintcal abc)
{
float si, rate = 5.5, yrs = 2.5;
/* Computes the interest */
si = (abc.amt * rate * yrs) / 100;
printf ("\nThe customer name is %s", abc.name);
printf("\nThe customer number is %d", abc.numb);
printf("\nThe amount is %f", abc.amt);
printf("\nThe interest is %f", si);
}
return;
230
Lp trnh c bn C
231
232
Lp trnh c bn C
T kha typedef
Mt kiu d liu mi c th c nh ngha bng cch s dng t kha typedef. T kha ny khng
to ra mt kiu d liu mi, m nh ngha mt tn mi cho mt kiu c. C php tng qut ca cu
lnh typedef l:
typedef type name;
trong type l mt kiu d liu cho php bt k v name l mt tn mi cho kiu d liu ny.
Tn mi c nh ngha, l mt tn thm vo, ch khng phi l tn thay th, cho kiu d liu c.
V d nh, mt tn mi cho float c th c nh ngha theo cch sau:
typedef float deci;
233
Cu lnh ny s bo cho trnh bin dch bit nhn dng deci l mt tn khc ca float. Mt bin
float c th c nh ngha s dng deci nh sau:
deci amt;
y, amt l mt bin s thc kiu deci, chnh l mt tn khc ca float. Sau khi c nh ngha,
deci c th c s dng nh mt kiu d liu trong cu lnh typedef gn mt tn khc cho kiu
float. Chng hn,
typedef deci point;
Cu lnh trn bo cho trnh bin dch bit nhn dng point nh l mt tn khc ca deci, cng
chnh l mt tn khc ca float. c tnh typedef c bit tin li khi nh ngha cc cu trc, v ta
khng cn nhc li nhn struct mi khi mt s dng cu trc. V vy, cu trc c th c lin h mt
cch chnh xc hnKhi vic s dng cu trc s thun tin hn. Thm vo , tn cho mt kiu cu
trc do ngi dng nh ngha thng gi nh n mc ch ca cu trc trong chng trnh. Mt
cch tng qut, mt cu trc do ngi dng nh ngha c th c vit nh sau:
typedef struct new_type
{
type var1;
type var2;
}
y, new_type l kiu cu trc do ngi dng nh ngha v n khng phi l mt bin cu trc.
By gi, cc bin kiu cu trc c th c nh ngha theo kiu d liu mi. Mt v d nh sau:V
d:
typedef
{
int
int
int
} date;
struct
day;
month;
year;
date due_date;
y, date l mt kiu d liu mi v due_date l mt bin kiu date.
Cn nh rng typedef khng th s dng vi storage classes.
19.3
234
Lp trnh c bn C
23
23
23
90
90
90
23
90
90
25
16
16
16
16
16
25
25
25
25
23
23
23
16
90
90
16
23
16
16
90
90
25
25
25
25
16
16
16
23
23
23
90
25
25
25
90
90
16
16
23
23
25
25
235
90
90
9
16
23
25
90
236
getch();
Lp trnh c bn C
23
23
90
90
25
25
16
16
23
90
23
90
25
25
16
16
23
23
23
23
90
90
90
25
25
25
25
90
16
16
16
16
23
23
16
25
25
23
237
90
90
25
16
16
90
getch();
238
Lp trnh c bn C
arrnum[x] = temp;
239
Tm tt
Mt cu trc l mt nhm cc bin c kiu d liu khc nhau c gom li di cng mt tn .Mt
cu trc l tp cc bin c th c kiu d liu khc nhau c nhm li vi nhau di cng mt
tn.
Mt nh ngha cu trc to thnh mt khun mu, khun mu ny c th c s dng to ra
cc bin cu trc.Vic nh ngha cu trc s to ra kiu d liu mi cho php ngi dng s
dng chng khai bo cc bin kiu cu trc
Cc phn t c lp ca cu trc c tham chiu ntruy cp bng cch s dng ton t chm
(.), hay cn c gi l ton t thnh vin.
Cc gi tr ca mt bin cu trc c th c gn cho mt bin khc c cng kiu bng cch s
dng cu lnh gn n gin.
C th c mt cu trc nm trong mt cu trc khc. Tuy nhin mt cu trc khng th lng trong
chnh n.
Mt bin cu trc c th c truyn vo mt hm nh l mt itham s.
Cch ci ts dng thng dng nht ca cu trc l di hnh thc cc mng cu trc.
Ton t -> c s dng truy cp vo cc phn t ca mt cu trc thng qua mt con tr tr
n cu trc .
Mt kiu d liu mi c th c nh ngha bng t kha typedef.
Hai k thutphng php dng sp xp mt mng l bubble sort v insertion sort.
Trong bubble sort, gi tr ca cc phn t c so snh vi gi tr ca phn t k tip. Trong
phng php ny, cc phn t nh hn ni ln dn, v cui cng mng s c sp xp.
Trong insertion sort, ta xt mi phn t trong mng s c xem xt, v chn vo v tr ng ca
n gia cc phn t c sp xp.
240
Lp trnh c bn C
(ng / Sai)
241
Bi tp t lm
1. Vit mt chng trnh C ci t mt h thng qun l kho. Hy lu tr m s, tn hng, gi c
v s lng ang c ca mi mn hng trong mt cu trc. Nhp chi tit ca 5 mn hng vo mt
mng cc cu trc v hin th tn tng mn hng v tng gi tr ca n. cui chng trnh , hy
hin th tng gi tr ca kho hng.
2. Vit mt chng trnh C lu tr cc tn v im s ca 5 sinh vin trong mt mng cu trc.
Hy sp xp mng cu trc theo th t im s gim dn. Hin th 3 im s cao nht.
242
Lp trnh c bn C