Tải bản đầy đủ (.ppt) (21 trang)

CHƯƠNG 7 CẤU TRÚC TRONG LẬP TRÌNH

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (70.13 KB, 21 trang )


CHỈÅNG 7
CÁÚU TRỤC
Cáúu trục l táûp håüp ca mäüt hồûc nhiãưu biãún,
cọ thãø khạc kiãøu nhau, âỉåüc nhọm lải dỉåïi dảng mäüt
tãn duy nháút cho tiãûn xỉí l. (Giäúng cáúu trục Record
trong Pascal).
Cáúu trục giụp cho viãûc täø chỉïc cạc dỉỵ liãûu phỉïc
tảp, âàûc biãût trong nhỉỵng chỉång trçnh låïn vç trong
nhiãưu tçnh húng chụng cho phpẹ nhọm cạc biãún cọ
liãn quan lải âãø xỉí l nhỉ mäüt âån vë thay vç nhỉ cạc
thỉûc thãø tạch biãût.

I. ởnh nghộa cỏỳu truùc vaỡ khai baùo bióỳn cỏỳu truùc
1. ởnh nghộa cỏỳu truùc
struct <Tón_kióứu_cỏỳu_truùc> {
<Kióứu> <Tón trổồỡng 1>;
<Kióứu> <Tón trổồỡng 2>;

}
Trong õoù: struct: Laỡ tổỡ khoaù
Tón_kióứu_cỏỳu_truùc: laỡ tón bỏỳt kyỡ, do ngổồỡi sổớ
duỷng õỷt

Vờ duỷ:
struct Date {
int day;
int month;
int year;
};
2. ởnh nghộa cỏỳu truùc bũng typedef


Nóỳu mọỹt cỏỳu truùc õổồỹc õởnh nghộa vồùi
tón_kióứu_cỏỳu_truùc thỗ ta coù thóứ cuỡng typedef õó
õởnh nghộa nhổ sau:
Typedef struct < tón_kióứu_cỏỳu_truùc> <Tón_kióứu>;


Vờ duỷ:
typedef struct Date DATE;
Nóỳu mọỹt cỏỳu truùc chổa õởnh nghộa, thỗ ta coù thóứ duỡng
typedef õóứ õởnh nghộa:
Typedef struct [Tón_kióứu_cỏỳu_truùc] {
<Kióứu> <Trổồỡng 1>;
<Kióứu> <Trổồỡng 2>;

} <tón_kióứu>;
Vờ duỷ:
Vồùi vờ duỷ trón ta coù thóứ duỡng typedef õóứ õởnh nghộa
laỷi nhổ sau:

typedef struct {
int day;
int month;
int year;
} DATE;
3. Khai baïo biãún cáúu truïc
Khai baïo kãút håüp:
struct <Tãn_kiãøu_cáúu_truïc> {
<Kiãøu> <Træång1>;
<Kiãøu> <Træång2>;


} <Danh_saïch_caïc_biãún>;

Vờ duỷ:
struct Date {
int day;
int month;
int year;
} date, *pd;
Khai baùo rióng leợ:
Duỡng Tón_kióứu_baớn_ghi hoỷc thọng qua tón cỏỳu
truùc õaợ õổồỹc õởnh nghộa bũng typedef
+ Duỡng tón_kióứu_cỏỳu_truùc:
struct < tón_kióứu_cỏỳu_truùc> <Danh saùch caùc bióỳn>

Vờ duỷ:
struct Date date,*pd;
+ Duỡng tón õởnh nghộa bũng typedef
<Tón_kióứu> <danh saùch caùc bióỳn>
Vờ duỷ:
DATE date,*pd
II. Khồới õỏửu giaù trở cho cỏỳu truùc:
Ta coù thóứ khồới õỏửu giaù trở cho mọỹt cỏỳu truùc theo
phổồng caùch nhổ laỡ khồới õỏửu giaù trở cho maớng.
Theo sau tón_bióỳn_cỏỳu_truùc laỡ dỏỳu bũng (=), sau
õoù laỡ danh daùch caùc giaù trở khồới õỏửu õổồỹc õỷt trong
caùc dỏỳu moùc {}. Caùc giaù trở khồới õỏửu coù cuỡng kióứu
vồùi caùc trổồỡng tổồng ổùng trong cỏỳu truùc.

Vờ duỷ:
DATE date = {12, 3, 2003}

III. Truy cỏỷp õóỳn caùc thaỡnh phỏửn cuớa cỏỳu truùc:
Coù hai caùch tham chióỳu õóỳn caùc thaỡnh phỏửn cuớa
cỏỳu truùc tổồng ổùng vồùi hai trổồỡng hồỹp sau:
Nóỳu noù laỡ mọỹt bióỳn cỏỳu truùc:
Ta duỡng toaùn tổớ dỏỳu chỏỳm (.) õóứ tham chióỳu õóỳn
caùc trổồỡng (thaỡnh phỏửn) cuớa cỏỳu truùc.
Cuù phaùp:
<tón_bióỳn_cỏỳu_truùc>.<Tón_trổồỡng>

Nóỳu noù laỡ mọỹt bióỳn con troớ troớ õóỳn cỏỳu truùc:
Ta duỡng toaùn tổớ muợi tón (->) õóứ tham chióỳu õóỳn.
Cuù phaùp:
<tón_bióỳn_cỏỳu_truùc>-><Tón_trổồỡng>
Vờ duỷ:
struct Date {
int day;
int month;
int year;
} date;
typedef struct Date DATE
DATE *p

Vồùi caùc khai baùo trón ta coù caùc caùch tham chióỳu sau:
date.day=18;
date.month=4;
date.year=2003;
Hoỷc:
p->day = 18
p->month=4;
p->year=2003;

Caùc pheùp toaùn con troớ tổồng õổồng vồùi:
(*p).day=18;
(*p).month=4;
(*p).year=2003;

Gaùn hai bióỳn cỏỳu truùc cho nhau(cuỡng kióứu cỏỳu truùc)
Vờ duỷ:
struct Date d={18,4,2003};
struct Date today;
today=d;
Coù thóứ lỏỳy õởa chố caùc trổồỡng cuớa cỏỳu truùc, kóỳt quaớ laỡ
con troớ troớ õóỳn thaỡnh phỏửn tổồng ổùng.
Vờ duỷ:
scanf(%2d - %2d %4d, &today.day,
&today.month, &today.year);

IV. Mng cạc cáúu trục
Vç cáúu trục l khäúi âäúi tỉåüng dỉỵ liãûu, do âọ hon ton cọ
kh nàng tảo ra mäüt mng cạc cáúu trục. Khai bạo mng
cạc cáúu truc nhỉ sau:
struct <Tãn_kiãøu_cáúu_trục> <Tãn_mng> [<kêch_thỉåïc>];
Hồûc l dng tãn â âỉåüc khai bạo båíi typedef:
<Tãn_kiãøu> <Tãn_mng>[<kêch_thỉåïc>];
Vê dủ:
Khai bạo mng cáúu trục:
struct Date aa[10];
DATE ab[10];
Lục âọ âãø tham chiãúu âãún cạc trỉåìng ta cọ thãø dng nhỉ sau:
aa[2].month = 4;
(*(aa+2)).year=2003


V. Cáúu trục läưng nhau
Mäüt cáúu trục âỉåüc gi l läưng nhau nãúu cọ mäüt
trong cạc trỉåìng ca cáúu trục ny lải cọ kiãøu cáúu
trục. Cáúu trục läưng nhau thỉåìng âỉåüc dng phäø
biãún trong láûp trçnh C båíi vç nọ cho phẹp tảo ra
cạc dỉỵ liãûu cọ thỉï báûc.
Vi dủ: Tảo cáúu trục âãø lỉu thäng tin ngy sinh
ca mäüt ngỉåìi.

typedef struct
{
char name[30];
struct
{
int day;
int month;
int year;
} birth_day;
} BDATE;

Hoàûc:
typedef struct
{
char name[30];
struct Date birth_day;
} BDATE;
Hoàûc
typedef
{

char name[30];
DATE birth_day;
}BDATE;

Tham chióỳu õóỳn caùc thaỡnh phỏửn cuớa cỏỳu truùc lọửng
nhau thỗ hoaỡn toaỡn giọỳng vồùi vióỷc tham chióỳu trong cỏỳu
truùc khọng lọửng nhau, tuy chố coù nhổợng trổồỡng chổùa cỏỳu
truùc thỗ phaới thóm tón bióỳn cỏỳu truùc õoù vaỡo.
Vờ duỷ
Vồùi cỏỳu truùc vổỡa õởnh nghộa ồớ vờ duỷ trón, ta tham chióỳu
õóỳn caùc thaỡnh phỏửn cuớa bióỳn ngaysinh coù kióứu BDATE
laỡ:
Tón: ngaysinh.name=Tran Van A;
Ngaỡy sinh:
ngaysinh.birth_day.day=19;
ngaysinh.birth_day.month=04;
ngaysinh.birth_day.year=2003;

Vóử mỷt lyù thuyóỳt thỗ khọng coù bỏỳt kyỡ mọỹt giồùi haỷn naỡo
vóử sọỳ mổùc lọửng nhau cuớa cỏỳu truùc. Nhổng luùc õoù caùc tham
chióỳu õóỳn caùc trổồỡng seợ caỡng trồớ nón phuùc taỷp vaỡ khoù õoỹc
hồn.

Cỏỳu truùc tổỷ tham chióỳu:
Caùc cỏỳu truùc goỹi laỡ tổỷ tham chióỳu nóỳu noù chổùa mọỹt
trổồỡng laỡ con troớ troớ õóỳn chờnh noù.
Vờ duỷ:
struct a
{
int a,b;

float c;
struct a *ptoa;
};


Tênh tham chiãúu trỉåïc (Forward Referencing)
Tênh cháút ny cho phẹp ta âỉa ra cạc khai bạo cạc
con tr tr âãún cạc cáúu trục chỉa âỉåüc âënh nghéa,
âàûc tênh ny cng cho phẹp ta tảo ra sỉû tỉû tham
chiãúu nhỉ â âãư cáûp åí trãn. Ta cọ thãø tảo ra cáúu trục
sỉû tham chiãúu láùn nhau.
Vê dủ:
struct s1
{
int a;
struct s2 *b;
};

struct s2
{
int a;
struct s1 *b;
};
ỷc tờnh naỡy khọng aùp duỷng trong caùc khai baùo
bũng typedef
VI. Truyóửn cỏỳu truùc cho haỡm
Coù hai caùch truyóửn cỏỳu truùc cho haỡm:
-
Truyóửn theo bióỳn cỏỳu truùc (goỹi laỡ truyóửn theo
giaù trở)

-
Truyóửn con troớ troớ õóỳn cỏỳu truùc (goỹi laỡ truyóửn
theo tham chióỳu)

Vờ duỷ:
DATE d;
.
.
func (d); /* ởnh nghộa haỡm func(DATE d) */
func(&d);/* ởnh nghộa haỡm func (DATE *d)*/
.
.
Truyóửn theo õởa chố luọn nhanh hồn bồới vỗ chố laỡ mọỹt
con troớ õồn giaớn õổồỹc sao cheùp õóỳn vuỡng õọỳi sọỳ. Mỷt
khaùc, truyóửn theo giaù trở seợ õoỡi hoới toaỡn bọỹ caùc cỏỳu
truùc seợ õổồỹc sao cheùp. Chố coù hai trổồng hồỹp nón
truyóửn theo giaù trở:


Cỏỳu truùc nhoớ (tổùc laỡ kờch thổồùc cồợ xỏỳp xố vồùi mọỹt
con troớ)

Muọỳn baớo õaớm rũng lồỡi goỹi haỡm seợ khọng laỡm thay
õọứi cỏỳu truùc õổồỹc truyóửn vaỡo. (Khi mọỹt õọỳi sọỳ truyóửn
theo giaù trở, trỗnh bión dởch seợ taỷo mọỹt baớn sao cuớa
õọỳi sọỳ õoù. Haỡm õổồỹc goỹi chố coù thóứ thay õọứi trón baớn
sao maỡ thọi).

×