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

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

Có 5 cách để tạo kiểu dữ liệu tùy biến

y

(customdatatypes).

1.Structure 1.Structure 2.bit-field 3.Union 3 Union 4.Enumeration 5.typedef

2. 2. Struct 2.2. Struct

trúc)) Struct ((cấucấu trúc Struct ((cấucấu trúc trúc))

ập

g

ợ gọ

ợ (cid:121) 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). Sự khác biệt giữa kiểu cấu trúc và kiểu (cid:121) 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 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.

Struct 2.1.2.1. KhaiKhai báobáo Struct 2.1. 2.1. KhaiKhai báobáo Struct Struct

của cấu trúc

Struct tructureName (cid:121) structureName: Tên Struct tructureName {

(cid:121) type: Kiểu dữ liệu của thành viên tương ứng thà h iê t (cid:121) Member1,...,

type member1; type member1; type member2; ... type memberN; .. .

memberN: Tên các biến memberN: Tên các biến thành viên của cấu trúc (cid:121) varNames: Tên các biến a a es ê các b ế cấu trúc phân cách nhau bằng dấu phẩy.

} varNames; } varNames;

VíVí dụdụ:: VíVí dụdụ::

(cid:121) 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;

(cid:121) Khai báo biến kiểu sinhvien: sinhvien sv1, sv2;

};

trúc 2.2.Truy ccậậpp bibiếếnn ccấấuu trúc 2.2.Truy ccậậpp bibiếếnn ccấấuu trúc 2.2.Truy 2.2.Truy trúc

g

p

(

) (cid:121) 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. (cid:121) Cú pháp:

varNames.memberName varNames memberName

Ví dụ:

1 M S

sv1.MaSv= “a001”; “ 001” sv1.TenSv=“Nguyen van A”; sv2.Namsinh=1977;

trúc 2.3.2.3. LệnhLệnh gángán cấucấu trúc 2.3. 2.3. LệnhLệnh gángán cấucấu trúc trúc

(cid:121) 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 (cid:121) Ví dụ: í d

struct coordXY {

int x; int y;

} diemA, diemB; (cid:121) diemA.x = 100; diemA.y = 200;

trúc 2.3.2.3. LệnhLệnh gángán cấucấu trúc 2.3. 2.3. LệnhLệnh gángán cấucấu trúc trúc

(cid:121) Gán nội dung biến cấu trúc diemA cho

g

ộ biến diemB:

diemB diemA ; diemB = diemA ;

(cid:121) Hoặc có thể sao chép từng thành viên:

pointB.x = pointA.x; pointB x pointA x; pointB.y = pointA.y;

trúc 2.4.2.4. MảngMảng cáccác cấucấu trúc 2.4. 2.4. MảngMảng cáccác cấucấu trúc trúc

(cid:121) 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. ể

(cid:121) Để khai báo một mảng các cấu trúc, trước hết phải khai báo cấu trúc, sau đó khai báo một ộ ú bá mảng của cấu trúc đó. Ví dụ: struct ds{ Ví d t d { t

hả kh đó kh bá ấ

l h t t

char hoten[25]; float toan,ly,hoa; fl };

ds bangdiem[50];//mảng 50 phần tử kiểu ds d b hầ ử k ể d ] // ả d [

trúc 2.4.2.4. MảngMảng cáccác cấucấu trúc 2.4. 2.4. MảngMảng cáccác cấucấu trúc trúc

(cid:121) Để 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í dụ: for(int i=0; i

cout <<"Ho va ten: "; gets(bangdiem[i].hoten) cout <<"Diem toan: "; cin >> bangdiem[i].toan; cout <<"Diem ly: "; cin >> bangdiem[i].ly; cout <<"Diem hoa "; cin >> bangdiem[i].hoa;

}

2.5. 2.5. Truyền 2.5.2.5. Truyền

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

a. Truyền thành viên của biến cấu trúc vào hàm (cid:121) Có 2 cách truyền thành viên của biến cấu trúc

vào hàm:

(cid:120) Truyền tham trị (cid:120) Truyền tham biến

VíVí dụdụ: : Truyền VíVí dụdụ:: Truyền

Truyền thamtham trịtrị Truyền thamtham trịtrị

struct diem {

int x; i tint 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ền VíVí dụdụ:: Truyền

Truyền thamtham trịtrị Truyề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 a diem:"; cout<<"\nKhoang cach giua a diem:"; kcach=khcach(a.x, a.y,b.x, b.y); cout<

}

VíVí dụdụ: : truyền VíVí dụdụ:: truyền

chiếu truyền thamtham chiếu truyền thamtham chiếu chiếu

d (

(cid:121) Để 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 void doitoado(int &x, int& y, int a, int b) b) d d { x=x-a; void main() { diem a,b;

y=y-b; }

doitoado(a.x, a.y, 10, 10); cout<<"\nx="<

} }

(Enumerations, enumenum)) (Enumerations, enumenum))

3. 3. KiKiểểuu liliệệtt kêkê (Enumerations, 3. 3. KiKiểểuu liliệệtt kêkê (Enumerations,

(cid:121) 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, ...

(cid:121) Ta có thể gán giá trị khác cho mỗi tên hằng

ỗ ê hằ ó hể á khá h á

nguyên

typedef 3.3. typedef 3. 3. typedef typedef

(cid:121) Từ khóa typedef dùng để định nghĩa một tên

(cid:121) Dạng tổng quát của dùng typedef là

mới cho một kiểu dữ liệu đã có. ể

typedef existingType newType;

◦ existingType: là kiểu dữ liệu nào đã tồn tại ◦ 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

typedef 3.3. typedef 3. 3. typedef typedef

(cid:121) Ví dụ: Tạo một tên mới cho kiểu dữ liệu int

y typedef int int2bytes; g typedef long int4bytes; yp

Sau khi các lệnh trên thực hiện thì lệnh

int n1;; long n2; tương đương tương đương

int2bytes n1; Int4bytes n2; Int4bytes n2;