Upload
quan-duong
View
16
Download
6
Embed Size (px)
DESCRIPTION
Lap trinh C
Citation preview
Trng i hc Khoa hc T nhin Khoa Cng ngh thng tin B mn Cng ngh phn mm
1
ThS. ng Bnh Phng [email protected]
NHP MN LP TRNH
D LIU KIU CU TRC
VC &
BB
2 2
Ni dung
D liu kiu cu trc
Khi nim kiu cu trc (struct) 1
Khai bo & truy xut kiu cu trc 2
Kiu d liu hp nht (union) 3
Bi tp 4
VC &
BB
3 3
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 &
BB
4 4
t vn
Khai bo cc bin lu tr 1 SV
char szMSSV[8]; // 0312078
char szHoten[30]; // H. P. Trang
char szNTNS[9]; // 17/06/85
char cGioiTinh; // y
float fToan, fLy, fHoa; // 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
5 5
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
6 6
Khai bo kiu cu trc
C php
V d
D liu kiu cu trc
struct { ; ; };
struct SDiem2D { int m_nX; int m_nY; };
VC &
BB
7 7
Khai bo bin cu trc
C php tng minh
V d
D liu kiu cu trc
struct { ; ; } , ;
struct SDiem2D { int m_nX; int m_nY; } diem2D1, diem2D2;
VC &
BB
8 8
Khai bo bin cu trc
C php khng tng minh
V d
D liu kiu cu trc
struct { ; ; }; struct ;
struct SDiem2D { int m_nX; int m_nY; }; struct SDiem2D diem2D1, diem2D2; // Trong C chun
VC &
BB
9 9
S dng typedef
C php
V d
D liu kiu cu trc
typedef struct { ; ; } ; ;
typedef struct { int m_nX; int m_nY; } SDiem2D; struct SDiem2D diem2D1, diem2D2;
VC &
BB
10 10
Khi to cho bin cu trc
C php tng minh
V d
D liu kiu cu trc
struct { ; ; } = {,,};
struct SDiem2D { int m_nX; int m_nY; } diem2D1 = {2912, 1706}, diem2D2;
VC &
BB
11 11
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)
V d
D liu kiu cu trc
.
struct SDiem2D { int m_nX; int m_nY; } diem2D1; printf(x = %d, y = %d, diem2D1.m_nX, diem2D1.m_nY);
VC &
BB
12 12
Gn d liu kiu cu trc
C 2 cch
V d
D liu kiu cu trc
= ; . = ;
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;
VC &
BB
13 13
Cu trc phc tp
Thnh phn ca cu trc l cu trc khc
D liu kiu cu trc
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;
VC &
BB
14 14
Cu trc phc tp
Thnh phn ca cu trc l mng
D liu kiu cu trc
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;
VC &
BB
15 15
Cu trc phc tp
Cu trc quy (t tr)
D liu kiu cu trc
struct SNguoi { char m_szHoten[30]; struct SNguoi *m_pNguoiCha, *m_pNguoiMe; }; struct SNut { int m_nKhoa; struct SNut *m_pNut; };
VC &
BB
16 16
Cu trc phc tp
Thnh phn ca cu trc c kch thc theo bit
D liu kiu cu trc
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
VC &
BB
17 17
Kch thc ca struct
V d
D liu kiu cu trc
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) = ???
VC &
BB
18 18
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
D liu kiu cu trc
#pragma pack(push, 1) struct MYSTRUCT { }; #pragma pack(pop)
VC &
BB
19 19
#pragma pack
V d: khng c #pragma pack (1)
D liu kiu cu trc
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
VC &
BB
20 20
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.
D liu kiu cu trc
struct SDiem2D { float m_nX, m_nY; } diem2D1; float fTam; scanf(%f, &fTam); diem2D1.m_nX = fTam;
VC &
BB
21 21
Mng cu trc
Mng cu trc
Tng t nh mng vi kiu d liu c s (char, int, float, )
D liu kiu cu trc
struct SDiem2D { int m_nX; int m_nY; }; SDiem2D arr1[20]; SDiem2D arr2[10] = {{3, 2}, {4, 4}, {2, 7}};
VC &
BB
22 22
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
D liu kiu cu trc
struct SDiem2D { int m_nX, m_nY; }; void xuat1(int x, int y) { }; void xuat2(SDiem2D diem2D) { }; void xuat3(SDiem2D &diem2D) { }; void xuat4(SDiem2D *diem2D) { };
VC &
BB
23 23
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
D liu kiu cu trc
union { ; ; };
VC &
BB
24 24
0 1 2 3 4
So snh struct v union
V d
D liu kiu cu trc
struct SMyStruct { char c; int n; } s; s.c = 1; s.n = 2;
union UMyUnion { char c; int n; } u; u.c = 1; u.n = 2;
01 02 00 00 00
c n
c
n
0 1 2 3
01 02 00 00 00
VC &
BB
25 25
V d
struct trong union
D liu kiu cu trc
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};
VC &
BB
26 26
V d
union trong struct
D liu kiu cu trc
struct generic_tag { char type; union { char c; int i; float f; } share_tag; };
VC &
BB
27 27
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
VC &
BB
28 28
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
VC &
BB
29 29
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
VC &
BB
30 30
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 D liu kiu cu trc
VC &
BB
31 31
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
VC &
BB
32 32
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
VC &
BB
33 33
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