Bài giảng Công nghệ thông tin - Chương 7: Cấu trúc
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Công nghệ thông tin - Chương 7: Cấu trúc", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
Tài liệu đính kèm:
- bai_giang_cong_nghe_thong_tin_chuong_7_cau_truc.ppt
Nội dung text: Bài giảng Công nghệ thông tin - Chương 7: Cấu trúc
- CHÆÅNG 7 CÁÚU TRUÏC Cáúu truïc laì táûp håüp cuía mäüt hoàûc nhiãöu biãún, coï thãø khaïc kiãøu nhau, âæåüc nhoïm laûi dæåïi daûng mäüt tãn duy nháút cho tiãûn xæí lyï. (Giäúng cáúu truïc Record trong Pascal). Cáúu truïc giuïp cho viãûc täø chæïc caïc dæî liãûu phæïc taûp, âàûc biãût trong nhæîng chæång trçnh låïn vç trong nhiãöu tçnh huäúng chuïng cho phpeï nhoïm caïc biãún coï liãn quan laûi âãø xæí lyï nhæ mäüt âån vë thay vç nhæ caïc thæûc thãø taï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 { ; ; } 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 ;
- 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] { ; ; } ; 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 { ; ; } ;
- 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
- Vê duû: struct Date date,*pd; + Duìng tãn âënh nghéa bàòng typedef 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: .
- 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: -> 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. Maíng caïc cáúu truïc Vç cáúu truïc laì khäúi âäúi tæåüng dæî liãûu, do âoï hoaìn toaìn coï khaí nàng taûo ra mäüt maíng caïc cáúu truïc. Khai baïo maíng caïc cáúu truc nhæ sau: struct [ ]; Hoàûc laì duìng tãn âaî âæåüc khai baïo båíi typedef: [ ]; Vê duû: Khai baïo maíng cáúu truïc: struct Date aa[10]; DATE ab[10]; Luïc âoï âãø tham chiãúu âãún caïc træåìng ta coï thãø duìng nhæ sau: aa[2].month = 4; (*(aa+2)).year=2003
- V. Cáúu truïc läöng nhau Mäüt cáúu truïc âæåüc goüi laì läöng nhau nãúu coï mäüt trong caïc træåìng cuía cáúu truïc naìy laûi coï kiãøu cáúu truïc. Cáúu truïc läöng nhau thæåìng âæåüc duìng phäø biãún trong láûp trçnh C båíi vç noï cho pheïp taûo ra caïc dæî liãûu coï thæï báûc. Vi duû: Taûo cáúu truïc âãø læu thäng tin ngaìy sinh cuía 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 naìy cho pheïp ta âæa ra caïc khai baïo caïc con troí troí âãún caïc cáúu truïc chæa âæåüc âënh nghéa, âàûc tênh naìy cuîng cho pheïp ta taûo ra sæû tæû tham chiãúu nhæ âaî âãö cáûp åí trãn. Ta coï thãø taûo ra cáúu truïc sæû tham chiãúu láùn nhau. Vê duû: 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).