Tải bản đầy đủ (.pdf) (14 trang)

kỹ thuật lập trình C chuyên nghiệp phần 7 docx

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 (407.26 KB, 14 trang )

CC
ấấ
u trúc u trúc

StructStruct
CC
ấấ
u trúc u trúc
StructStruct
Phạm Thế Bảo
Trường Đạihọc Khoa họcTự nhiên Tp HCM
Trường

Đại

học

Khoa

học

Tự

nhiên

Tp
.
HCM
Kiể ấ túKiể ấ tú
Kiể
u c



u
t
r
ú
c
Kiể
u c

u
t
r
ú
c
 KháiKhái niệmniệm
 KhaiKhai báobáo

TruyTruy
xuấtxuất
cáccác
thànhthành
phầnphần

TruyTruy
xuấtxuất
cáccác
thànhthành
phầnphần
 CấuCấutrúctrúc &&mảngmảng
 ConCon trỏtrỏđếnđếncấucấutrúctrúc

Khái iệKhái iệ
Khái
n
iệ
m
Khái
n
iệ
m
 CấuCấutrúctrúc làlà kiểukiểudữdữ liệuliệugồmgồmmộtmột nhómnhóm cáccác
thànhthành phầnphầncócó kiểukiểu khôngkhông giốnggiống nhaunhau,, mỗimỗi
hà hhà h
hầhầ
đđ
áá
đị hđị h
bằbằ
ộộ
êê
iêiê
t

n
h
t

n
h
phầ
n

phầ
n
đ
ược
đ
ượcx
á
cx
á
c
đị
n
hđị
n
h
bằ
ng
bằ
ng m

tm

tt
ê
nt
ê
nr

ngr


ng
biệtbiệt((kiểukiểudữdữ liệuliệutrừutrừutượngtượng –– AbstractAbstract DataData
TypeType
––
ADT)ADT)
TypeType
ADT)ADT)


KiểuKiểu
củacủa
mỗimỗi
thànhthành
phầnphần
trongtrong
cấucấu
trúctrúc
làlà
mộtmột

KiểuKiểu
củacủa
mỗimỗi
thànhthành
phầnphần
trongtrong
cấucấu
trúctrúc
làlà
mộtmột

kiếukiếu đãđã đượcđược địnhđịnh nghĩanghĩatrướctrước,, kểkể cảcả mảngmảng vàvà
cáccác c

uc

utrúctrúc kháckhác
Cấ túCấ tú
Kh i bá CKh i bá C
Cấ
u
t
r
ú
c
Cấ
u
t
r
ú
c
––
Kh
a
i


o trong
CKh
a
i



o trong
C
MộtMột
kiểukiểu
cấucấu
trúctrúc
đượcđược
địnhđịnh
nghĩanghĩa
vớivới
từtừ
khóakhóa
structstruct
MộtMột
kiểukiểu
cấucấu
trúctrúc
đượcđược
địnhđịnh
nghĩanghĩa
vớivới
từtừ
khóakhóa
structstruct

typedeftypedef structstruct TênkiểuTênkiểu
{{
Kiểuthành

p
hầnKiểuthành
p
hần Tênthành
p
hầnTênthành
p
hần;;
pp
pp
KiểuthànhphầnKiểuthànhphần TênthànhphầnTênthànhphần;;
KiểuthànhphầnKiểuthànhphần
TênthànhphầnTênthànhphần
;;
KiểuthànhphầnKiểuthànhphần
TênthànhphầnTênthànhphần
;;
KiểuthànhphầnKiểuthànhphần TênthànhphầnTênthànhphần;;

}};;
Cấ túCấ tú
ídíd
Cấ
u
t
r
ú
c
Cấ
u

t
r
ú
c
––
v
í

d
ụv
í

d

t
yp
edef struct TBook
t
yp
edef struct TDate
yp
{
char title[80];
char
author[80];
yp
{
char day;
char
month;

char
author[80];
float price;
char isbn[20];
};
char
month;
int year;
};
};
typedef struct TStudent
{
{
char ID[10];
char firstname[10];
char
lastname[20];
//khai báo các biến
TBook book;
TStudent
list[100];
char
lastname[20];
TDate dob;
float marks[10];
};
TStudent
list[100];
};
Cấ túCấ tú

T ấ áhàhhầT ấ áhàhhầ

CáCá
thà hthà h
hầhầ
ủủ
ộtột
biếbiế
kiểkiể
ấấ
tútú
đđ
tt
ấtất
Cấ
u
t
r
ú
c
Cấ
u
t
r
ú
c
––
T
ruy xu


t c
á
c t

n
h
p
hầ
n
T
ruy xu

t c
á
c t

n
h
p
hầ
n


c

c
thà
n
hthà
n

h
phầ
n
phầ
nc

ac

am
ột
m
ột
biế
n
biế
n
kiểukiểu
c

uc

u
t
r
ú
c
t
r
ú
c

đ
ược
đ
ược
t
ruy
t
ruy xu
ất
xu
ất
thôngthông quaqua têntên biến,biến, dấudấu"" ""vàvà têntên thànhthành phầnphần
void Print(TStudent m)
{
printf(
"
Name
:%s%s
\
n
"
printf( Name
:

%s

%s
\
n
,

m.firstname, m.lastname);
printf("Student ID : %s\n", m.ID);
printf("Date of birth
: %hi/%hi/%i"
printf("Date

of

birth
:

%hi/%hi/%i"
,
m.dob.day, m.dob.month, m.dob.year);
printf("Marks : ");
f (iti0 i10 i )
f
or
(i
n
t

i
=
0
;
i
<
10
;

i
++
)
printf("%.2f ", m.marks[i]);
}
Cấ túCấ tú
T ấ áhàhhầT ấ áhàhhầ
Cấ
u
t
r
ú
c
Cấ
u
t
r
ú
c
––
T
ruy xu

t c
á
c t

n
h
p

hầ
n
T
ruy xu

t c
á
c t

n
h
p
hầ
n
void ReadInfo(TStudent &m)
{
printf("Type student ID: ");
scanf("%s", m.ID);
printf("Type first name: ");
g
ets
(
m.firstname
);
g( );
printf("Type last name: ");
gets(m.lastname);
printf(
"
Date of birth (d m y):

"
);
printf( Date

of

birth

(d

m

y):

);
scanf("%hi %hi %i", &(m.dob.day),
&(m.dob.month), &(m.dob.year));
printf("Marks (10 floats): ");
printf("Marks

(10

floats):

");
for (int i=0; i<10; i++)
scanf("%f", &(m.marks[i]));
}
}
Kí h th ớ ủ ột ấ túKí h th ớ ủ ột ấ tú


c
h

th
ư

c c

a m
ột
c

u
t
r
ú
c

c
h

th
ư

c c

a m
ột
c


u
t
r
ú
c
Kí hKí h
th ớth ớ
kiểkiể
dữdữ
liệliệ
ấấ
tútú


c
hKí
c
h
th
ư

c
th
ư

c
kiể
u
kiể

u
dữdữ
liệ
u
liệ
uc

uc

u
t
r
ú
c
t
r
ú
c::
sizeofsizeof
(
<<
(
<<
typenametypename
>>
)
>>
)
sizeofsizeof
((

typenametypename
))
 v
d
v
d
::
SinhVien_t_sizeSinhVien_t_size = = sizeofsizeof((SinhVienSinhVien);); // 48// 48
Mả áCấ túMả áCấ tú
Mả
ng c
á
c
Cấ
u
t
r
ú
c
Mả
ng c
á
c
Cấ
u
t
r
ú
c
Kh iKh i

bb
biếbiế
ảả
áá
CấCấ
tútú
ũũ
iốiố
hh
kh ikh i
bábá

Kh
a
i

Kh
a
i

b
ao
b
ao
biế
n
biế
nm

ngm


ng c
á
cc
á
c
Cấ
u
Cấ
u
t
r
ú
c
t
r
ú
cc
ũ
ngc
ũ
ng g
iố
ngg
iố
ng n

n

kh

a
ikh
a
i

o

o
biếnbiếnmảngmảng trêntrên cáccác kiểukiểudữdữ liệuliệucơcơ bảnbản kháckhác
 DùngDùng têntên mảngmảng khikhi truytruy cậpcậptừngtừng phầnphầntửtử trongtrong mảngmảng cáccác
cấucấutrúctrúc vàvà toántoán tửtử thànhthành viênviên đểđể truytruy cậpcập cáccác trườngtrường dữdữ
liệuliệu
củacủa
từngtừng
thànhthành
phầnphần
cấucấu
trúctrúc
liệuliệu
củacủa
từngtừng
thànhthành
phầnphần
cấucấu
trúctrúc
. .
struct SinhVien
{
SinhVien
mang

[100];
{
char hoten[31];
int namsinh;
char
noisinh
[4];
SinhVien
mang
[100];

char

noisinh
[4];
char maso[11];
}
mang[i].namsinh
Ctỏ đế Cấ túCtỏ đế Cấ tú
C
on
t
r


đế
n
Cấ
u
t

r
ú
c
C
on
t
r


đế
n
Cấ
u
t
r
ú
c
Kh iKh i
bábá
t ỏt ỏ
đếđế
ấấ
tútú
tt
tt
hh
áá
kiểkiể
dữdữ


Kh
a
i

Kh
a
i


o

o con con
t
r
ỏt
r

đế
n
đế
nc

uc

u
t
r
ú
c
t

r
ú
c
t
ương
t
ương
tựtự
n

n

c
á
cc
á
c
kiể
u
kiể
u
dữdữ
liệuliệu kháckhác
SinhVienSinhVien **SV_ptrSV_ptr
 ToánToán tửtử truytruy cậpcậptrườngtrường thànhthành phầnphầncủacủacấucấutrúctrúc do con do con trỏtrỏ
chỉchỉđếnđến: : >>
SV_ptrSV_ptr >>namsinhnamsinh
SV tSV t
>>
iihiih

SV
_p
t
r
SV
_p
t
r
>>
no
i
s
i
n
h
no
i
s
i
n
h
UiUi
U
n
i
on
U
n
i
on

Kh iKh i
bábá
ii
đđ
dùdù
đểđể
kh ikh i
bábá
áá
biếbiế
dùdù

Kh
a
i

Kh
a
i


o

oun
i
on un
i
on
đ
ược

đ
ược

ng

ng
đểđể
kh
a
ikh
a
i

o

oc
á
cc
á
c
biế
n
biế
n

ng

ng
chungchung bộbộ nhớnhớ. .
union union int_or_longint_or_long {{

intint ii;;
longlong l;l;
} } a_numbera_number; ;
 CácCác thànhthành phầnphầncủacủa union union cócó thểthể khôngkhông cócó kíchkích thướcthướcbằngbằng
nhaunhau
nhaunhau


KíchKích
thướcthước
bộbộ
nhớnhớ
trongtrong
khaikhai
báobáo
unionunion
làlà
kíchkích
thướcthước
củacủa

KíchKích
thướcthước
bộbộ
nhớnhớ
trongtrong
khaikhai
báobáo
union


union

làlà
kíchkích
thướcthước
củacủa
kiểukiểudữdữ liệuliệulớnlớnnhấtnhấtcócó trongtrong khaikhai báobáo union.union.
Ví dVí d


d



d

11
unionunion
int or longint or long
{{
1
.
1
.
unionunion
int
_
or
_
longint

_
or
_
long
{{
2.2. intint ii;;
3.3. longlong ll;;
4.4. }} a_numbe
r
a_numbe
r
;;
5.5. a_numbera_number ii==55;;
66
a numbera number
ll
==
100100
LL
;;
6
.
6
.
a
_
numbera
_
number


ll
100100
LL
;;
7.7. //// anonymousanonymous unionunion
8.8. unionunion {{
9.9. intint ii;;
10.10. floatfloat ff
;;
;;
11.11. }};;
12.12. ii==1010;;
ff
22
22
13.13.
ff
==
22

22
;;
KiểKiể
EE
((
liệtliệt
kêkê
))
Kiể
u

Kiể
u
E
num
E
num
((
liệtliệt
kêkê
))
 KiểuKiểu EnumEnum::
 LiệtLiệtkêkê toàntoàn bộbộ giágiá trịtrị màmà biếnbiếncócó thểthể nhậnnhận
 KhaiKhai báobáo::
enumenum <<tên_kiểu_enumtên_kiểu_enum>{>{
<<danh sách các tr

danh sách các tr

>>___

___

}};;
 VíVí d

d

::
ụụ
enumenum day{Hai,day{Hai, BaBa,, TuTu,, Nam,Nam, SauSau,, Bay,Bay, CN}CN};;

dayday
n
gay
n
gay
;;
dayday
gaygay
;;
ngayngay ==TuTu;;//// 22
enumenum
modes{LASTMODEmodes{LASTMODE
==
11
,,
BWBW
4040
==
00
}}
enumenum
modes{LASTMODEmodes{LASTMODE
11
,,
BWBW
4040
00
}}
TT
ậậ

p tin p tin

FileFile
TT
ậậ
p tin p tin
FileFile
Phạm Thế Bảo
Trường Đạihọc Khoa họcTự nhiên Tp HCM
Trường

Đại

học

Khoa

học

Tự

nhiên

Tp
.
HCM

×