1. Giới thiệu
Có 5 cách để tạo kiểu dữ liệu tùy biến
(custom data types).
1.Structure
2.bit-field
3.Union
4.Enumeration
5.typedef
25 trang |
Chia sẻ: phuongt97 | Lượt xem: 545 | Lượt tải: 0
Bạn đang xem trước 20 trang nội dung tài liệu Bài giảng Phương pháp lập trình - Chương 8: Structures-Enum-Typedef - Võ Quang Hoàng Khang, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
CHƯƠNG 8
STRUCTURES ENUM – -
typedef
1. Giới thiệu
Có 5 cách để tạo kiểu dữ liệu tùy biến
(custom data types).
1.Structure
2.bit-field
3 Union.
4.Enumeration
5.typedef
2. Struct (cấu trúc)
y Một cấu trúc là một tập các biến được
tham chiếu thông qua một tên chung.
Những biến tạo nên cấu trúc được gọi là
các thành viên (members).
y Sự khác biệt giữa kiểu cấu trúc và kiểu
mảng là: các phần tử của mảng là cùng
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. Khai báo Struct
Struct tructureName y structureName: Tên
{
type member1;
của cấu trúc
y type: Kiểu dữ liệu của
thà h iê t ứ
type member2;
n v n ương ng
y Member1,...,
memberN: Tên các biến...
type memberN;
thành viên của cấu trúc
y varNames: Tên các biến
.. .
} varNames;
cấu trúc phân cách nhau
bằng dấu phẩy.
Ví dụ:
y Tạo một struct sinh viên gồm các thông tin:
mã số sinh viên, họ tên, năm sinh, địa chỉ.
struct sinhvien
{
char *MaSv;
char *TenSv;
int Namsinh;
char *Diachi;
};
y Khai báo biến kiểu sinhvien: sinhvien sv1, sv2;
2.2.Truy cập biến cấu trúc
y Dùng toán tử dấu chấm (dot operator)
để truy cập các thành viên của một biến
cấu trúc.
y Cú pháp:
varNames memberName.
Ví dụ:
1 M S “ 001”sv . a v= a ;
sv1.TenSv=“Nguyen van A”;
sv2.Namsinh=1977;
2.3. Lệnh gán cấu trúc
y Dùng lệnh gán để gán nội dung trong 1 biến
cấu trúc cho một biến cấu trúc khác có cùng
kiểu
í dy V ụ:
struct coordXY
{
int x;
int y;
} diemA, diemB;
y diemA.x = 100; diemA.y = 200;
2.3. Lệnh gán cấu trúc
y Gán nội dung biến cấu trúc diemA cho
biến diemB:
diemB = diemA ;
y Hoặc có thể sao chép từng thành viên:
pointB x pointA x;. = .
pointB.y = pointA.y;
2.4. Mảng các cấu trúc
y Mảng cấu trúc là một mảng mà mỗi phần tử là
ểmột biến ki u cấu trúc.
y Để khai báo một mảng các cấu trúc, trước hết
hả kh bá ấ ú đó kh bá ộp i ai o c u tr c, sau ai o m t
mảng của cấu trúc đó.
Ví d t t d {ụ: s ruc s
char hoten[25];
fl t t l hoa oan, y, oa;
};
d b d [ ] // ả hầ ử k ể ds ang iem 50 ; m ng 50 p n t i u s
2.4. Mảng các cấu trúc
y Để truy cập đến từng thành viên của từng
phần tử của mảng, ta dùng chỉ mục của phần
tử và toán tử thành viên (.).
í dV ụ:
for(int i=0; i<n; i++)
{
cout <<"Ho va ten: "; gets(bangdiem[i].hoten)
cout > bangdiem[i].toan;
cout > bangdiem[i].ly;
cout > bangdiem[i].hoa;
}
2.5. Truyền tham số kiểu cấu trúc
a. Truyền thành viên của biến cấu trúc vào hàm
y Có 2 cách truyền thành viên của biến cấu trúc
vào hàm:
x Truyền tham trị
x Truyền tham biến
Ví dụ: Truyền tham trị
struct diem
{
int x;
i tn y;
};
double khcach(int x1 int y1 int x2 int y2) , , ,
{
double kc;
kc=sqrt(pow((x2-x1),2)+pow((y2-y1),2));
return kc;
}
Ví dụ: Truyền tham trị
void main()
{
diem a,b; double kcach;
cout<<"\ntoa do diem a:";
cout>a.x;
cout>a.y;
cout<<"\ntoa do diem b:";
cout>b.x;
cout>b.y;
cout<<"\nKhoang cach giua a diem:";
kcach=khcach(a.x, a.y,b.x, b.y);
cout<<kcach;
}
Ví dụ: truyền tham chiếu
y Để truyền địa chỉ của thành viên của cấu trúc
vào hàm dùng toán tử & đặt trước tên biến
cấu trúc
d d d ( b)voi oitoa o int &x, int& y, int a, int
{ x=x-a; y=y-b; }
void main()
{ diem a,b;
doitoado(a.x, a.y, 10, 10);
cout<<"\nx="<<a.x;
cout<<"\ny="<<a.y;
}
2.5. Truyền tham số kiểu cấu trúc
b. Truyền toàn bộ biến cấu trúc đến hàm
Khi một cấu trúc được dùng như một đối số
của một hàm, toàn bộ cấu trúc được truyền
vào tham số hình thức Có hai cách truyền.
◦ Truyền tham trị.
double khcach(diem a,diem b)
{
double kc;
kc=sqrt(pow((b.x-a.x),2)+pow((b.y-a.y),2));
return kc;
}
2.5. Truyền tham số kiểu cấu trú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;
doitoado(a, 10, 10);
cout<<« x="<<a x<<« y="<<a y;. .
}
2.6. Con trỏ đến cấu trúc
y Một biến con trỏ có thể trỏ đến một biến kiểu
ấ t úc u r c.
y Cú pháp khai báo một con trỏ cấu trúc
structureName *structurePointers;
Ví dụ:
struct diem
{
int x;
int y;
};
diem *p;//p là con trỏ cấu trúc.
2.7. Sử dụng con trỏ cấu trúc
y Để tham chiếu đến thành viên của một
cấu trúc được trỏ đến bởi một con trỏ,
ta dùng toán tử -> (toán tử tham chiếu
gồm một dấu trừ và một dấu lớn hơn).
Ví dụ:
P->x=100;
P >y 150;- =
2.7. Sử dụng con trỏ cấu trúc
void main()
{
struct diem
{
int x;
int y;
};
diem *p, a;
p=&a;
p >x=100;-
p->y=120;
cout<<a.x;
cout<<a.y;
}
2.7. Sử dụng con trỏ cấu trúc
y Lưu ý:
y Để truy cập đến thành viên của một cấu trúc:
◦ Nếu dùng biến cấu trúc thì dùng toán tử
chấm (dot operator).
◦ Nếu dùng biến con trỏ thì dùng toán tử ->
(arrow operator).
y Truyền tham số là con trỏ cấu trúc thì mặc
đị h là t ề th hiến ruy n am c u
3. Kiểu liệt kê (Enumerations, enum)
y Một enum là một tập của các tên hằng
nguyên xác định tất cả các giá trị hợp lệ mà
một biến của kiểu đó có thể có.
ú háy C p p:
enum enumName {enumList} enumVars;
ể◦ enum: từ khóa đ khai báo enum
◦ enumName: Tên của enum
◦ enumList: Danh sách các tên hằng nguyên
phân cách nhau bởi dấu phẩy
ê á b ế k ể◦ enumVars: T n c c i n i u enum.
3. Kiểu liệt kê (Enumerations, enum)
y Ví dụ:
enum color {red, orange, yellow, green, blue, indigo};
color c1 = indigo;
if( c1 == indigo )
{
cout << "c1 is indigo" << endl;
}
3. Kiểu liệt kê (Enumerations, enum)
y Mỗi một tên trong danh sách enum tượng
trưng cho một giá trị nguyên. Giá trị của tên
thứ nhất trong enum là 0, kế tiếp là 1, ...
ó hể á á khá h ỗ ê hằy Ta c t g n gi trị c c o m i t n ng
nguyên
3. typedef
y Từ khóa typedef dùng để định nghĩa một tên
ểmới cho một ki u dữ liệu đã có.
y Dạng tổng quát của dùng typedef là
typedef existingType newType;
◦ existingType: là kiểu dữ liệu nào đã tồn tại
◦ newType: tên mới của kiểu dữ liệu
3. typedef
y Ví dụ: Tạo một tên mới cho kiểu dữ liệu int
typedef int int2bytes;
typedef long int4bytes;
Sau khi các lệnh trên thực hiện thì lệnh
int n1;
long n2;
tương đương
int2bytes n1;
Int4bytes n2;
Các file đính kèm theo tài liệu này:
- bai_giang_phuong_phap_lap_trinh_chuong_8_structures_enum_typ.pdf