You are on page 1of 33

Trng i hc Khoa hc T nhin

Khoa Cng ngh thng tin


B mn Cng ngh phn mm

NHP MN LP TRNH
ThS. ng Bnh Phng
dbphuong@fit.hcmus.edu.vn

D LIU KIU CU TRC

VC

&
BB

Ni dung

Khi nim kiu cu trc (struct)

Khai bo & truy xut kiu cu trc

Kiu d liu hp nht (union)

Bi tp

D liu kiu cu trc

VC

&
BB

t vn

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

VC

&

t vn

BB

Khai bo cc bin lu tr 1 SV

char szMSSV[8];
//
char szHoten[30];
//
char szNTNS[9];
//
char cGioiTinh;
//
float fToan, fLy, fHoa;

0312078
H. P. Trang
17/06/85
y
// 8.5 9.0 10.0

Truyn thng tin 1 SV cho hm


void xuat(char* szMSSV, char* szHoten,
char* szNTNS, char cGioiTinh, float fToan,
float fLy, float fHoa);
D liu kiu 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
D liu kiu 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 SDiem2D
{
int m_nX;
int m_nY;
};
D liu kiu cu trc

VC

&
BB

Khai bo bin cu trc

C php tng minh


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

<kiu d liu> <tn thnh phn n>;


} <tn bin 1>, <tn bin 2>;

V d
struct SDiem2D
{
int m_nX;
int m_nY;
} diem2D1, diem2D2;
D liu kiu cu trc

VC

&
BB

Khai bo bin cu trc

C php khng tng minh


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

<kiu d liu> <tn thnh phn n>;


};
struct <tn kiu cu trc> <tn bin>;

V d

struct SDiem2D
{
int m_nX;
int m_nY;
};
struct SDiem2D diem2D1, diem2D2; // Trong C chun
D liu kiu 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>;

V d

typedef struct
{
int m_nX;
int m_nY;
} SDiem2D;
struct SDiem2D diem2D1, diem2D2;
D liu kiu cu trc

VC

&
BB

Khi to cho bin cu trc

C php tng minh


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

<kiu d liu> <tn thnh phn n>;


} <tn bin> = {<gi tr 1>,,<gi tr n>};

V d
struct SDiem2D
{
int m_nX;
int m_nY;
} diem2D1 = {2912, 1706}, diem2D2;
D liu kiu 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 SDiem2D
{
int m_nX;
int m_nY;
} diem2D1;
printf(x = %d, y = %d, diem2D1.m_nX, diem2D1.m_nY);
D liu kiu 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 SDiem2D
{
int m_nX, m_nY;
} diem2D1 = {2912, 1706}, diem2D2;

diem2D2 = diem2D1;
diem2D2.m_nX = diem2D1.m_nX;
diem2D2.m_nY = diem2D1.m_nY * 2;
D liu kiu cu trc

12

VC

&
BB

Cu trc phc tp

Thnh phn ca cu trc l cu trc khc


struct SDiem2D
{
int m_nX;
int m_nY;
};
struct SHinhChuNhat
{
struct SDiem2D m_diem2DTraiTren;
struct SDiem2D m_diem2DPhaiDuoi;
} hinhChuNhat1;

hinhChuNhat1.m_diem2DTraiTren.m_nX = 2912;
hinhChuNhat1.m_diem2DPhaiDuoi.m_nY = 1706;
D liu kiu cu trc

13

VC

&
BB

Cu trc phc tp

Thnh phn ca cu trc l mng


struct SSinhVien
{
char m_szHoten[30];
float m_fToan, m_fLy, m_fHoa;
} sinhVien1;

strcpy(sinhVien1.m_szHoten, Nguyen Van A);


sinhVien1.m_fToan = 10;
sinhVien1.m_fLy = 6.5;
sinhVien1.m_fHoa = 9;

D liu kiu cu trc

14

VC

&
BB

Cu trc phc tp

Cu trc quy (t tr)


struct SNguoi
{
char m_szHoten[30];
struct SNguoi *m_pNguoiCha, *m_pNguoiMe;
};
struct SNut
{
int m_nKhoa;
struct SNut *m_pNut;
};

D liu kiu 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

D liu kiu cu trc

16

VC

&
BB

Kch thc ca struct

V d
struct SA
{
int m_nA;
double m_nB;
};
sizeof(A) = ???

struct SB1
{
int m_nA;
int m_nB;
double m_dC;
};
sizeof(SB1) = ???

struct SB2
{
int m_nA;
double m_dC;
int m_nB;
};
sizeof(SB2) = ???
D liu kiu 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)
D liu kiu cu trc

18

VC

&
BB

#pragma pack

V d: khng c #pragma pack (1)


struct SA {
double a;
int b;
int c;
};
struct SB {
int b;
double a;
int c;
};
struct SC {
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
D liu kiu 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 SDiem2D { float m_nX, m_nY; } diem2D1;
float fTam;
scanf(%f, &fTam); diem2D1.m_nX = fTam;
D liu kiu 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 SDiem2D
{
int m_nX;
int m_nY;
};
SDiem2D arr1[20];
SDiem2D arr2[10] = {{3, 2}, {4, 4}, {2, 7}};

D liu kiu 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 SDiem2D { int m_nX, m_nY; };
void
void
void
void

xuat1(int x, int y) { };
xuat2(SDiem2D diem2D) { };
xuat3(SDiem2D &diem2D) { };
xuat4(SDiem2D *diem2D) { };
D liu kiu 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>;


};
D liu kiu cu trc

23

VC

&

So snh struct v union

BB

V d
struct SMyStruct
{
char c;
int n;
} s;

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

s.c = 1; s.n = 2;

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

0 1 2 3 4
01 02 00 00 00
c

0 1 2 3
02 00 00 00
01
c
n
D liu kiu cu trc

24

VC

&
BB

V d

struct trong union


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

D liu kiu cu trc

25

VC

&
BB

V d

union trong struct


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

D liu kiu cu trc

26

VC

&
BB

Bi tp

Phn s
Khai bo kiu d liu phn s (SPhanSo)
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
D liu kiu cu trc

27

VC

&
BB

Bi tp

n thc
Khai bo kiu d liu n thc (SDonThuc)
Nhp/Xut n thc
Tnh 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

D liu kiu cu trc

28

VC

&
BB

Bi tp

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

D liu kiu cu trc

29

VC

&
BB

Bi tp

im trong mt phng Oxy


Khai bo kiu d liu im (SDiem)
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?
Tam gic
Khai bo kiu d lu tam gic (STamGiac)
Nhp/Xut tam gic
Tnh chu vi, din tch tam gic
30
D liu kiu cu trc

VC

&
BB

Bi tp

Ngy
Khai bo kiu d liu ngy (SNgay)
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
D liu kiu cu trc

31

VC

&
BB

Bi tp

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

D liu kiu cu trc

32

VC

&
BB

Bi tp

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

D liu kiu cu trc

33

You might also like