Chương 8
Nội dung trình bày
Giới thiệu
2. Kiểu cấu trúc
3. Kiểu liệt kê enum
4. Từ khóa typedef
1.
1. Giới thiệu
Vấn
đề: các kiểu dữ liệu cơ sở khơng đủ để
giải quyết các bài tốn phức tạp
Ví dụ: Viết chương trình tính lương cho nhân
viên, hoặc viết chương trình cho nhập danh
sách sinh viên giải quyết bài tốn phức
tạp vì C khơng có kiểu nhân viên, sinh viên
Giải quyết: Cần phải có cách để tạo ra các
kiểu dữ liệu theo như ý muốn để giải quyết
bài tốn phức tạp
Có 5 cách để tạo kiểu dữ liệu tùy biến
◦ Structure
(Cấu trúc)
◦ bit-field
◦ Union
◦ Enumeration
◦ typedef
Nội dung trình bày
Giới thiệu
2. Kiểu cấu trúc
3. Kiểu liệt kê enum
4. Từ khóa typedef
1.
2. Cấu trúc: Giới thiệu
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)
Ví dụ: Cần tạo cấu trúc để lưu trữ bảng
dữ liệu sau:
Mã số
Họ tên
Điểm
Kết quả
0123
Lê An
19
Đậu
0124
Nguyễn Bê
12
Rớt
◦ Cấu trúc này gồm các thành viên: mã số,
họ tên, điểm, kết quả
2. Cấu trúc: Khai báo
struct structureName
{
type member1;
type member2;
...
type memberN;
.. .
} [varNames];
structureName:
Tên của
cấu trúc
type: Kiểu dữ liệu của
thành viên tương ứng
member1,..., memberN:
Tên các biến thành viên
của cấu trúc
varNames: Tên các biến
cấu trúc (nếu có) phân
cách nhau bởi dấu phẩy
Struct phải được khai
báo liền sau những dòng
include
2. Cấu trúc: Ví dụ 1
Tạo
một cấu trúc sinh viên gồm các
thông tin: mã số sinh viên (chuỗi), họ tên
(chuỗi), năm sinh (số), địa chỉ (chuỗi)
struct SinhVien
{
char MaSV[10];
char TenSV[30];
int NamSinh;
char DiaChi[50];
} sv1, sv2;
Có 2 biến kiểu cấu trúc SinhVien là: sv1,
sv2
2. Cấu trúc: Ví dụ 2
Thành
phần của cấu trúc có thể có kiểu
là một cấu trúc đã được định nghĩa trước
struct NGAY
{
int ngay;
int thang;
int nam;
};
struct HOSO
{
char hoten [30];
struct NGAY ns;
long LCB;
long thuong;
long thuclanh;
};
2. Cấu trúc: Khai báo biến cấu
trúc
Cú
pháp (dùng 1 trong 2 cách):
struct structureName varName;
structureName varName;
◦ Cách thứ 2 tương tự cách khai báo biến thơng
thường
Ví
dụ:
◦ Khai báo biến s1, s2 có kiểu SinhVien
struct SinhVien s1, s2;
SinhVien s1, s2;
// c1
// c2
2. Cấu trúc: Truy cập biến cấu
trúc
Dùng
toán tử chấm (dot operator) để truy
cập các thành viên của một biến cấu trúc
Cú
pháp: varName.memberName
Phải dùng toán tử chấm trong lệnh nhập
(cin, gets), lệnh xuất (cout, puts) và các
lệnh gán thành viên
Ví
dụ:
gets(sv1.MaSV)
gets(sv1.TenSV);
gets(sv1.NamSinh);
cout<
Sinh;
2. Cấu trúc: Lệnh gán cấu trúc
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
Hoặc có thể gán từng
Ví dụ:
thành viên:
struct SinhVien sv1, sv2;
sv2.MaSV = sv1.MaSV;
sv1.MaSV= “a001”;
sv2.TenSV=sv1.MaSV;
sv1.TenSV=“Nguyen vansv2.NamSinh=sv1.NamS
A”;
inh;
sv1.NamSinh=1977;
sv2 = sv1;
sv1
sv2
a001
Nguyen Van
A
1977
2. Cấu trúc: Mảng các cấu trúc
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
Để 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 mảng của cấu trúc đó
Ví dụ:
struct DS{
char hoten[25];
float toan, ly, hoa;
};
DS bangdiem[50]; //mảng 50 phần tử kiểu
DS
2. Cấu trúc: Mảng các cấu trúc
Để
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à tốn tử chấm
Ví dụ: Cho nhập liệu vào mảng bangdiem
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. Cấu trúc: 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
Ví dụ:
struct diem
{
int x;
int 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;
}
2. Cấu trúc: Truyền tham số
kiểu cấu trúc (tt)
Ví dụ (tiếp theo):
void main()
{
diem a, b;
cout<<"\ntoa do diem a:";
cout<<"\nx1=";cin>>a.x;
cout<<"\ny1=";cin>>a.y;
cout<<"\ntoa do diem b:";
cout<<"\nx2=";cin>>b.x;
cout<<"\ny2=";cin>>b.y;
cout<<"\nKhoang cach giua a diem: ";
double kc = khcach(a.x, a.y, b.x, b.y);
cout<<"khoang cach giua a va b la: "<
}
2. Cấu trúc: Truyền tham số
kiểu cấu trúc (tt)
b. Truyền tồn bộ biến cấu trúc đến hàm
Ví dụ:
struct diem
{
int x;
int y;
};
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. Cấu trúc: Truyền tham số
kiểu cấu trúc (tt)
Ví dụ (tiếp theo):
void main()
{
diem a, b;
cout<<"\ntoa do diem a:";
cout<<"\nx1=";cin>>a.x;
cout<<"\ny1=";cin>>a.y;
cout<<"\ntoa do diem b:";
cout<<"\nx2=";cin>>b.x;
cout<<"\ny2=";cin>>b.y;
cout<<"\nKhoang cach giua a diem: ";
double kc = khcach(a, b);
cout<<"khoang cach giua a va b la: "<
}
2. Cấu trúc: Truyền tham số
kiểu cấu trúc (tt)
c. Truyền mảng cấu trúc đến hàm
Ví dụ:
struct diem
{
int x;
int y;
};
void NhapMangToaDo( diem list[], int n )
{
for (int i=0; i
cout<<"\ntoa do diem thu "<
cout<<"\nx1="; cin>>list[i].x;
cout<<"\ny1="; cin>>list[i].y;
}
}
2. Cấu trúc: Truyền tham số
kiểu cấu trúc (tt)
Ví dụ (tiếp theo):
void XuatMangToaDo( diem list[], int n )
{
for (int i=0; i
cout<<"Toa do thu "<
cout<
}
}
void main()
{
diem d[10];
int n;
cout<<"Nhap so toa do: "; cin>>n;
NhapMangToaDo(d, n);
XuatMangToaDo (d,n);
}
2. Cấu trúc: Con trỏ cấu trúc
structureName *structurePointers;
2. Cấu trúc: Sử dụng con trỏ
cấu trúc
Để
truy cập đến thành viên của một con
trỏ cấu trúc, ta dùng tốn tử ->
Ví dụ:
struct diem{
int x;
int y;
};
void main() {
diem *p;
cout<<"Nhap x:";
cin>>p->x;
cout<<"Nhap y:";
cin>>p->y;
cout<
x<<" "<y;
}
Nội dung trình bày
Giới thiệu
2. Kiểu cấu trúc
3. Kiểu liệt kê enum
4. Từ khóa typedef
1.
3. Kiểu liệt kê enum
Kiểu
enum là một kiểu dữ liệu đặc biệt
được dùng để định nghĩa một quan hệ thứ
tự cho một tập hợp hữu hạn các tên
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, ...
Cú pháp:
enum enumName {enumList}
[enumVars];
◦ enumName: Tên
của enum
◦ enumList: Danh sách các tên hằng phân
cách nhau bởi dấu phẩy
◦ enumVars: Tên các biến kiểu enum
3. Kiểu liệt kê enum: Ví dụ
Ví
dụ khai báo enum:
enum color {red, orange, yellow, green,
blue, indigo};
enum Tên_enum;
Khai
Ví
báo biến kiểu enum:
dụ khai báo biến kiểu enum:
color c1 = indigo;
if (c1 == indigo)
cout<< "c1 is indigo"<< endl;
Nội dung trình bày
Giới thiệu
2. Kiểu cấu trúc
3. Kiểu liệt kê enum
4. Từ khóa typedef
1.