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

PHƯƠNG PHÁP LẬP TRÌNH_8 ppt

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 (527.84 KB, 25 trang )

CHƯƠNG 8CHƯƠNG 8
STRUCTURES STRUCTURES
ENUM ENUM
STRUCTURES STRUCTURES
––
ENUM ENUM

typedeftypedef
typedeftypedef
1.1.
GiớiGiới
thiệuthiệu
1.

1.

GiớiGiới
thiệuthiệu
Có 5 cách đ

t

okiểudữ li

utù
y
biến


y
(


custom data types
).
1.
S
tructure
1.
S
tructure
2.bit-field
3
Union
3
.
Union
4.Enumeration
5.typedef
2.2.
StructStruct
((
cấucấu
trúctrúc
))
2.

2.

StructStruct
((
cấucấu
trúctrúc

))
y M

tcấutrúclàm

tt
ập
các biến đư

c


ập

tham chiếuthôngquamột tên chung.
Nhữn
g
biếnt

onêncấutrúcđư

c
gọ
ilà
g


gọ
các thành viên (
members

).
y
Sự
khác
biệt
giữa
kiểu
cấu
trúc

kiểu
Sự
khác
biệt
giữa
kiểu
cấu
trúc

kiểu
mảng là: các phầntử củamảng là cùng
kiểu
còn
các
phần
tử
của
kiểu
cấu
trúc

kiểu
còn
các
phần
tử
của
kiểu
cấu
trúc
có thể có kiểu khác nhau.
2.1.2.1.
KhaiKhai
báobáo
StructStruct
2.1.

2.1.

KhaiKhai
báobáo
StructStruct
Struct
tructureName
y
structureNam
e
:
T
ên
Struct

tructureName
{
type member1;
củacấutrúc
y
type
: Kiểudữ liệucủa
thà h

t

type member1;
type member2;
thà
n
h
viê
n
t
ươn
g

n
g
y
Member1, ,
memberN
:
Tên
các

bi
ế
n

type memberN;
memberN
:
Tên
các
bi
ế
n
thành viên củacấutrúc
y
va
rN
a
m
es
:

n
các
b
i
ế
n
.
}
varNames

;
aaes
ê
các
b
ế
cấu trúc phân cách nhau
bằng dấuphẩy.
}
varNames
;
VíVí
dụdụ
::
VíVí
dụdụ
::
y Tạomộtstructsinhviêngồmcácthôngtin:
mã số sinh viên, họ tên, năm sinh, địachỉ.
struct sinhvien
{
char *MaSv;
char *TenSv;
int Namsinh;
char *Diachi;
};
y Khai báo biếnkiểu sinhvien: sinhvien sv1, sv2;
2.2.Truy 2.2.Truy
cc
ậậ

pp
bibi
ếế
nn
cc
ấấ
uu
trúctrúc
2.2.Truy 2.2.Truy
cc
ậậ
pp
bibi
ếế
nn
cc
ấấ
uu
trúctrúc
y Dùn
g
toán tử dấuchấm
(
dot o
p
erator
)
g
(
p)

để truy cập các thành viên củamộtbiến
cấutrúc.
y Cú pháp:
varNames
memberName
varNames
.
memberName
Ví dụ:
1
MS

001

sv
1
.
M
a
S
v=

a
001

;
sv1.TenSv=“Nguyen van A”;
sv2.Namsinh=1977;
2.3.2.3.
LệnhLệnh

gángán
cấucấu
trúctrúc
2.3.

2.3.

LệnhLệnh
gángán
cấucấu
trúctrúc
y Dùng lệnh gán để gán nội dung trong 1 biến
cấutrúcchomộtbiếncấutrúckháccócùn
g
kiểu
í
d
y V
í
d
ụ:
struct coordXY
{
int x;
int y;
} diemA, diemB;
y diemA.x = 100; diemA.y = 200;
2.3.2.3.
LệnhLệnh
gángán

cấucấu
trúctrúc
2.3.

2.3.

LệnhLệnh
gángán
cấucấu
trúctrúc
y Gán n

idun
g
biếncấutrúcdiemAcho

g
biếndiemB:
diemB
=
diemA
;
diemB

diemA
;
y Hoặccóthể sao chép từng thành viên:
pointB x

pointA x

;
pointB
.
x
=

pointA
.
x
;
pointB.y = pointA.y;
2.4.2.4.
MảngMảng
cáccác
cấucấu
trúctrúc
2.4.

2.4.

MảngMảng
cáccác
cấucấu
trúctrúc
y Mảng cấutrúclàmộtmảng mà mỗiphầntử là

mộtbiếnki

ucấutrúc.
y Để khai báo mộtmảng các cấutrúc,trướchết

hả
kh


ú
đó
kh


p
hả
i
kh
ai

oc

utr
ú
c, sau
đó
kh
ai

om
ột
mảng củacấutrúcđó.

d
tt

d
{

d
ụ:s
t
ruc
t
d
s
{
char hoten[25];
fl t
tlh
fl
oa
t

t
oan,
l
y,
h
oa;
};
d
bd
[]//

hầ


k ể
d
d
s
b
an
gd
iem
[
50
]
;
//
m

n
g
50 p
hầ
nt

k
i

u
d
s
2.4.2.4.
MảngMảng

cáccác
cấucấu
trúctrúc
2.4.

2.4.

MảngMảng
cáccác
cấucấu
trúctrúc
y Để truy cập đếntừng thành viên củatừng
phầnt

củamản
g
,tadùn
g
chỉ mụccủaphần
tử và toán tử thành viên (.).
í
d
V
í
d
ụ:
for(int i=0; i<n; i++)
{
cout <<"Ho va ten: "; gets(bangdiem[i].hoten)
cou

t
<<"Diem toan: "; cin >> ban
g
diem[i].toan;
cout <<"Diem ly: "; cin >> bangdiem[i].ly;
cou
t
<<"Diem hoa "; cin >> ban
g
diem[i].hoa;
}
2.5.2.5.
TruyềnTruyền
thamtham
sốsố
kiểukiểu
cấucấu
trúctrúc
2.5.

2.5.

TruyềnTruyền
thamtham
sốsố
kiểukiểu
cấucấu
trúctrúc
a. Truyền thành viên củabiếncấu trúc vào hàm
y Có 2 cách truyền thành viên củabiếncấutrúc

vào hàm:
x
T
ruyềnthamtrị
x Truyềnthambiến
VíVí
dụdụ
::
TruyềnTruyền
thamtham
trịtrị
VíVí
dụdụ
:

:

TruyềnTruyền
thamtham
trịtrị
struct diem
{
int x;
it
i
n
t
y;
};
double

khcach
(
int
x1
int
y1
int
x2
int
y2)
double

khcach
(
int
x1
,
int
y1
,
int
x2
,
int
y2)
{
double
kc
;
double


kc
;
kc=sqrt(pow((x2-x1),2)+pow((y2-y1),2));
return
kc
;
return

kc
;
}
VíVí
dụdụ
::
TruyềnTruyền
thamtham
trịtrị
VíVí
dụdụ
:

:

TruyềnTruyền
thamtham
trịtrị
void main()
{
{

diem a,b; double kcach;
cout<<"\ntoa do diem a:";
cout<<"
\
nx1=";cin>>a.x;
cout<<"\ny1=";cin>>a.y;
cout
<<
"
\
ntoa
do diem b:
"
;
cout
<<
\
ntoa
do

diem

b: ;
cout<<"\nx2=";cin>>b.x;
cout<<"\ny2=";cin>>b.y;
cout
<<"
\
nKhoang
cach

giua
adiem:";
cout
<<"
\
nKhoang
cach
giua
a

diem:";
kcach=khcach(a.x, a.y,b.x, b.y);
cout<<kcach;
}
VíVí
dụdụ
::
truyềntruyền
thamtham
chiếuchiếu
VíVí
dụdụ
:

:

truyềntruyền
thamtham
chiếuchiếu
y Để truyền địachỉ của thành viên củacấutrúc

vào hàm dùn
g
toán t

& đặttrướctênbiến
cấutrúc
d
dd
(
b)
voi
d
d
oitoa
d
o
(
in
t
&x, in
t
&
y
,in
t
a, in
t
b)
{ x=x-a; y=y-b; }
void main()

{diema,b;
doitoado(a.
x
,
a.y
,
10
,
10);
cout<<"\nx="<<a.x;
cout<<"
\
ny="<<a.y;
}
2.5.2.5.
TruyềnTruyền
thamtham
sốsố
kiểukiểu
cấucấu
trúctrúc
2.5.

2.5.

TruyềnTruyền
thamtham
sốsố
kiểukiểu
cấucấu

trúctrúc
b. Truyềntoànbộ biếncấutrúcđếnhàm
Khi mộtcấutrúcđượcdùn
g
nh
ư
một đốisố
củamộthàm,toànbộ cấutrúcđượctruyền
vào
tham
số
hình
thức

hai
cách
truyền
vào
tham
số
hình
thức
.

hai
cách
truyền

Truyềnthamtrị.
double

khcach
(diem
a,diem
b)
double
khcach
(diem
a,diem
b)
{
double
kc
;
double
kc
;
kc=sqrt(pow((b.x-a.x),2)+pow((b.y-a.y),2));
return kc
;
;
}
2.5.2.5.
TruyềnTruyền
thamtham
sốsố
kiểukiểu
cấucấu
trúctrúc
2.5.


2.5.

TruyềnTruyền
thamtham
sốsố
kiểukiểu
cấucấu
trúctrúc

Truy

n tham chi
ế
u
void doitoado(diem &a,int n, int m)
{
{
a.x=a.x-n; a.y=a.y-m;
}
}
void main()
{ diem
a,b
;
{ diem
a,b
;
doitoado(a, 10, 10);
cout<<«
x=

"
<<
ax
<<«
y=
"
<<
ay
;
cout<<«
x= <<
a
.
x
<<«
y= <<
a
.
y
;
}
2.6. Con2.6. Con
trỏtrỏ
đếnđến
cấucấu
trúctrúc
2.6.

Con


2.6.

Con

trỏtrỏ
đếnđến
cấucấu
trúctrúc
y Mộtbiếncontrỏ có thể trỏđếnmộtbiếnkiểu


c

u
t
r
ú
c.
y
Cú pháp khai báo mộtcontrỏ cấutrúc
structureName
*
structurePointers
;
structureName
*
structurePointers
;
Ví dụ:
struct

diem
struct
diem
{
int
x
;
int
x
;
int y;
}
;
}
;
diem *p;//p là con trỏ cấutrúc.
2.7.2.7.
SửSử
dụngdụng
concon
trỏtrỏ
cấucấu
trúctrúc
2.7.

2.7.

SửSử
dụngdụng
con


con

trỏtrỏ
cấucấu
trúctrúc
y Đ

tham chiếu đếnthànhviêncủam

t

cấutrúcđượctrỏđếnbởimộtcontrỏ,
ta dùn
g
toán tử ->
(
toán tử tham chiếu
g
(
gồmmộtdấutrừ và mộtdấulớnhơn).

dụ
:

dụ
:
P->x=100;
P
>y

150
;
P
-
>y
=
150
;
2.7.2.7.
SửSử
dụngdụng
concon
trỏtrỏ
cấucấu
trúctrúc
2.7.

2.7.

SửSử
dụngdụng
con

con

trỏtrỏ
cấucấu
trúctrúc
void main()
{

{
struct diem
{
int x;
int y;
};
};
diem *p, a;
p=&a;
p
>x=100;
p
-
>x=100;
p->y=120;
cout<<a.x;
cout<<a.y;
}
2.7.2.7.
SửSử
dụngdụng
concon
trỏtrỏ
cấucấu
trúctrúc
2.7.

2.7.

SửSử

dụngdụng
con

con

trỏtrỏ
cấucấu
trúctrúc
y
Lưuý:
y Để truy cập đến thành viên củamộtcấutrúc:
◦ Nếudùng
biếncấutrúc
thì dùng toán tử
chấ
m
(dot operator).
◦ Nếudùng
biếncontrỏ
thì dùng toán tử ->
(arrow operator).
y Truyềnthamsố là con trỏ cấutrúcthìmặc
đị h

t ề
th
hiế
đị
n
h


t
ruy

n
th
a
m
c
hiếu
3. 3.
KiKi
ểể
uu
lili
ệệ
tt
kêkê
(Enumerations, (Enumerations,
enumenum
))
3. 3.
KiKi
ểể
uu
lili
ệệ
tt
kêkê
(Enumerations, (Enumerations,

enumenum
))
y Một enum là mộttậpcủacáctênhằng
n
g
uyên xác định tấtcả các
g
iá trị hợplệ mà
mộtbiếncủakiểu đócóthể có.
ú

y C
ú
p

p:
enum enumName {enumList} enumVars;


enu
m
: t

khóa đ

khai báo enum

enumName
: Tên của enum


enumLis
t
: Danh sách các tên hằn
g
n
g
uyên
phân cách nhau bởidấuphẩy
ê
á
b ế
k ể

enumVar
s
:

nc
á
c
b
i
ế
n
k
i

u enum.
3. 3.
KiKi

ểể
uu
lili
ệệ
tt
kêkê
(Enumerations, (Enumerations,
enumenum
))
3. 3.
KiKi
ểể
uu
lili
ệệ
tt
kêkê
(Enumerations, (Enumerations,
enumenum
))
y Ví dụ:
enum color {red, orange, yellow, green, blue, indigo};
color c1 = indigo;
if( c1 == indigo )
{

{
cout << "c1 is indigo" << endl;
}


}
3. 3.
KiKi
ểể
uu
lili
ệệ
tt
kêkê
(Enumerations, (Enumerations,
enumenum
))
3. 3.
KiKi
ểể
uu
lili
ệệ
tt
kêkê
(Enumerations, (Enumerations,
enumenum
))
y Mỗimột tên trong danh sách enum tượng
trưn
g
cho một
g
iá trị n
g

uyên. Giá trị củatên
thứ nhất trong enum là 0, kế tiếp là 1,
ó
hể
á
á
khá
h

ê
hằ
y
T
ac
ó
t
hể

n
g
i
á
trị
khá
cc
h
om

it
ê

n
hằ
n
g
nguyên
3.3.
typedeftypedef
3.

3.

typedeftypedef
y Từ khóa typedef dùng để định nghĩamộttên

mớichomộtki

ud

liệu đãcó.
y Dạng tổng quát của dùng typedef là
typedef existingType newType;

existingType
:

kiểu
dữ
liệu
nào
đã

tồn
tại

existingType
:


kiểu
dữ
liệu
nào
đã
tồn
tại

newType
: tên mớicủakiểudữ liệu
3.3.
typedeftypedef
3.

3.

typedeftypedef
y Ví dụ: Tạomộttênmớichokiểudữ liệuint
typedef int int2bytes;
t
yp
edef lon
g

int4b
y
tes;
yp
gy
Sau khi các lệnh trên thựchiệnthìlệnh
int n1
;
;
long n2;
tương
đương
tương
đương
int2bytes n1;
Int4bytes n2;
Int4bytes

n2;

×