You are on page 1of 33

Trng i hc Khoa hc T nhin Khoa Cng ngh thng tin B mn Tin hc c s

NHP MN LP TRNH

ng Bnh Phng

dbphuong@fit.hcmuns.edu.vn

CU TRC

VC

& BB

Ni dung

1
2 3 4

Khi nim kiu cu trc (struct)

Khai bo & truy xut kiu cu trc

Kiu d liu hp nht (union)

Bi tp

NMLT - Cu trc

VC

& BB

t vn

Thng tin 1 SV MSSV : kiu chui Tn SV : kiu chui NTNS : kiu chui Phi : k t im Ton, L, Ha : s thc Yu cu Lu thng tin n SV? Tuyn thng tin n SV vo hm?
NMLT - Cu trc

VC

& BB

t vn

Khai bo cc bin lu tr 1 SV char mssv[7]; // 0012078 char hoten[30]; // Nguyen Van A char ntns[8]; // 29/12/82 char phai; // y Nam, n N float toan, ly, hoa; // 8.5 9.0 10.0 Truyn thng tin 1 SV cho hm void xuat(char mssv[], char hoten[], char ntns[], char phai, float toan, float ly, float hoa);
NMLT - Cu trc

VC

& BB

t vn

Nhn xt t tn bin kh khn v kh qun l Truyn tham s cho hm qu nhiu Tm kim, sp xp, sao chp, kh khn Tn nhiu b nh tng Gom nhng thng tin ca cng 1 SV thnh mt kiu d liu mi => Kiu struct
NMLT - Cu trc

VC

& BB

Khai bo kiu cu trc

C php
struct <tn kiu cu trc> { <kiu d liu> <tn thnh phn 1>; <kiu d liu> <tn thnh phn n>; };

V d
struct DIEM { int x; int y; };
NMLT - Cu trc

VC

& BB

Khai bo bin cu trc

C php tng minh


struct <tn { <kiu <kiu } <tn bin kiu cu trc> d liu> <tn thnh phn 1>; d liu> <tn thnh phn n>; 1>, <tn bin 2>;

V d
struct DIEM { int x; int y; } diem1, diem2;
NMLT - Cu trc

VC

& BB

Khai bo bin cu trc

C php khng tng minh


struct <tn { <kiu <kiu }; struct <tn kiu cu trc> d liu> <tn thnh phn 1>; d liu> <tn thnh phn n>; kiu cu trc> <tn bin>;

V d

struct DIEM { int x; int y; }; struct DIEM diem1, diem2;// C++ c th b struct
NMLT - Cu trc

VC

& BB

S dng typedef

C php
typedef struct { <kiu d liu> <tn thnh phn 1>; <kiu d liu> <tn thnh phn n>; } <tn kiu cu trc>; <tn kiu cu trc> <tn bin>; typedef struct { int x; int y; } DIEM; struct DIEM diem1, diem2;
NMLT - Cu trc

V d

VC

& BB

Khi to cho bin cu trc

C php tng minh


struct <tn kiu cu { <kiu d liu> <kiu d liu> } <tn bin> = {<gi trc> <tn thnh phn 1>; <tn thnh phn n>; tr 1>,,<gi tr n>};

V d
struct DIEM { int x; int y; } diem1 = {2912, 1706}, diem2;
NMLT - Cu trc

10

VC

& BB

Truy xut d liu kiu cu trc

c im Khng th truy xut trc tip Thng qua ton t thnh phn cu trc . hay cn gi l ton t chm (dot operation)
<tn bin cu trc>.<tn thnh phn>

V d
struct DIEM { int x; int y; } diem1; printf(x = %d, y = %d, diem1.x, diem1.y);
NMLT - Cu trc

11

VC

& BB

Gn d liu kiu cu trc

C 2 cch
<bin cu trc ch> = <bin cu trc ngun>;
<bin cu trc ch>.<tn thnh phn> = <gi tr>;

V d
struct DIEM { int x, y; } diem1 = {2912, 1706}, diem2; diem2 = diem1; diem2.x = diem1.x; diem2.y = diem1.y * 2;
NMLT - Cu trc

12

VC

& BB

Cu trc phc tp

Thnh phn ca cu trc l cu trc khc


struct DIEM { int x; int y; }; struct HINHCHUNHAT { struct DIEM traitren; struct DIEM phaiduoi; } hcn1; hcn1.traitren.x = 2912; hcn1.traitren.y = 1706;
NMLT - Cu trc

13

VC

& BB

Cu trc phc tp

Thnh phn ca cu trc l mng


struct SINHVIEN { char hoten[30]; float toan, ly, hoa; } sv1; strcpy(sv1.hoten, Nguyen Van A); sv1.toan = 10; sv1.ly = 6.5; sv1.hoa = 9;

NMLT - Cu trc

14

VC

& BB

Cu trc phc tp

Cu trc quy (t tr)


struct PERSON { char hoten[30]; struct PERSON *father, *mother; }; struct NODE { int value; struct NODE *pNext; };

NMLT - Cu trc

15

VC

& BB

Cu trc phc tp

Thnh phn ca cu trc c kch thc theo bit


struct bit_fields { int bit_0 : 1; int bit_1_to_4 : 4; int bit_5 : 1; int bit_6_to_15 : 10; };

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

NMLT - Cu trc

16

VC

& BB

Kch thc ca struct

V d
struct A { int a; double b; }; sizeof(A) = ??? struct B1 { int a; int b; double c; }; sizeof(B1) = ??? struct B2 { int a; double c; int b; }; sizeof(B2) = ???
NMLT - Cu trc

17

VC

& BB

Ch th #pragma pack

Ch th #pragma pack (n) n = 1, 2, 4, 8, 16 (byte) Bin ln nht ca cc thnh phn trong struct
BC n mc nh l 1 VC++ n mc nh l 8 Project settings Compile Option C/C++ Code Generation Structure Alignment

Canh bin cho 1 cu trc


#pragma pack(push, 1) struct MYSTRUCT { }; #pragma pack(pop)
NMLT - Cu trc

18

VC

& BB

#pragma pack

V d: khng c #pragma pack (1)


struct A { double a; int b; int c; }; struct B { int b; double a; int c; }; struct C { int b; int c; double a; };

a a a a a a a a b b b b c c c c b b b b m 4B a a a a a a a a c c c c m 4B b b b b c c c c a a a a a a a a
NMLT - Cu trc

19

VC

& BB

Cc lu v cu trc

Lu Kiu cu trc c nh ngha lm khun dng cn bin cu trc c khai bo s dng khun dng nh ngha. Trong C++, c th b t kha struct khi khai bo bin (hoc s dng typedef) Khi nhp cc bin kiu s thc trong cu trc phi nhp thng qua mt bin trung gian.
struct DIEM { float x, y;} d1; float temp; scanf(%f, &temp); d1.x = temp;
NMLT - Cu trc

20

VC

& BB

Mng cu trc

Mng cu trc Tng t nh mng vi kiu d liu c s (char, int, float, )


struct DIEM { int x; int y; }; DIEM mang1[20]; DIEM mang2[10] = {{3, 2}, {4, 4}, {2, 7}};

NMLT - Cu trc

21

VC

& BB

Truyn cu trc cho hm

Truyn cu trc cho hm Ging nh truyn kiu d liu c s


Tham tr (khng thay i sau khi kt thc hm) Tham chiu Con tr

V d
struct DIEM { int x, y; }; void xuat1(int x, int y) { }; void xuat2(DIEM diem) { }; void xuat3(DIEM &diem) { }; void xuat4(DIEM *diem) { };

NMLT - Cu trc

22

VC

& BB

Hp nht union

Khi nim c khai bo v s dng nh cu trc Cc thnh phn ca union c chung a ch u (nm chng ln nhau trong b nh) Khai bo
union <tn kiu union> { <kiu d liu> <tn thnh phn 1>; <kiu d liu> <tn thnh phn 2>; };
NMLT - Cu trc

23

VC

& BB

So snh struct v union

V d
struct MYSTRUCT { char c; int n; } s;
s.c = 1; s.n = 2;

union MYUNION { char c; int n; } u;


u.c = 1; u.n = 2;

0 1 2 3 4

0 1 2 3

01 02 00 00 00
c n

02 01 00 00 00
c n
NMLT - Cu trc

24

VC

& BB

V d

struct trong union


union date_tag { char full_date[9]; struct part_date_tag { char month[2]; char break_value1; char day[2]; char break_value2; char year[2]; }; } date = {29/12/82};

NMLT - Cu trc

25

VC

& BB

V d

union trong struct


struct generic_tag { char type; union share_tag { char c; int i; float f; }; };

NMLT - Cu trc

26

VC

& BB

Bi tp v cu trc

1. Phn s Khai bo kiu d liu phn s (PHANSO) Nhp/Xut phn s Rt gn phn s Tnh tng, hiu, tch, thng hai phn s Kim tra phn s ti gin Quy ng hai phn s Kim tra phn s m hay dng So snh hai phn s
NMLT - Cu trc

27

VC

& BB

Bi tp v cu trc

2. n thc Khai bo kiu d liu n thc (DONTHUC) Nhp/Xut n thc Tnh tch, thng hai n thc Tnh o hm cp 1 ca n thc Tnh gi tr n thc ti x = x0

NMLT - Cu trc

28

VC

& BB

Bi tp v cu trc

3. a thc Khai bo kiu d liu a thc (DATHUC) Nhp/Xut a thc Tnh tng, hiu, tch, thng hai n thc Tnh o hm cp 1 ca n thc Tnh o hm cp k ca n thc Tnh gi tr n thc ti x = x0

NMLT - Cu trc

29

VC

& BB

Bi tp v cu trc

4. im trong mt phng Oxy Khai bo kiu d liu im (DIEM) Nhp/Xut ta im Tnh khong cch gia hai im Tm im i xng qua gc to /trc Ox/Oy Kim tra im thuc phn t no? 5. Tam gic Khai bo kiu d lu tam gic (TAMGIAC) Nhp/Xut tam gic Tnh chu vi, din tch tam gic 30
NMLT - Cu trc

VC

& BB

Bi tp v cu trc

6. Ngy Khai bo kiu d liu ngy (NGAY) Nhp/Xut ngy (ngy, thng, nm) Kim tra nm nhun Tnh s th t ngy trong nm Tnh s th t ngy k t ngy 1/1/1 Tm ngy trc , sau k ngy Tnh khong cch gia hai ngy So snh hai ngy
NMLT - Cu trc

31

VC

& BB

Bi tp v mng cu trc

7. Mng phn s Nhp/Xut n phn s Rt gn mi phn s m s lng phn s m/dng trong mng Tm phn s dng u tin trong mng Tm phn s nh nht/ln nht trong mng Sp xp mng tng dn/gim dn

NMLT - Cu trc

32

VC

& BB

Bi tp v mng cu trc

8. Mng im Nhp/Xut n im m s lng im c honh dng m s lng im khng trng vi cc im khc trong mng Tm im c honh ln nht/nh nht Tm im gn gc ta nht

NMLT - Cu trc

33

You might also like