Bài giảng "Phương pháp lập trình - Chương 8: Kiểu cấu trúc" giới thiệu khái quát về kiểu dữ liệu, kiểu dữ liệu cấu trúc, kiểu dữ liệu liệt kê enum, từ khóa typedef. Mời các bạn cùng tham khảo nội dung chi tiết.
AMBIENT/
Chủ đề:
Nội dung Text: Bài giảng Phương pháp lập trình - Chương 8: Kiểu cấu trúc (2016)
- Chương 8
- Nội dung trình bày
1. Giới thiệu
2. Kiểu cấu trúc
3. Kiểu liệt kê enum
4. Từ khóa typedef
- 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 toá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 toá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 toá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)
◦ bitfield
◦ Union
◦ Enumeration
◦ typedef
- Nội dung trình bày
1. Giới thiệu
2. Kiểu cấu trúc
3. Kiểu liệt kê enum
4. Từ khóa typedef
- 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 structureName: Tên của
cấu trúc
{
type: Kiểu dữ liệu của
type member1; thành viên tương ứng
type member2; member1,..., memberN:
... Tên các biến thành viên
của cấu trúc
type memberN; varNames: Tên các biến
.. . cấu trúc (nếu có) phân
} [varNames]; 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; // c1
SinhVien s1, s2; // 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
- 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
Ví dụ:
Hoặc có thể gán từng thành
struct SinhVien sv1, sv2; viên:
sv1.MaSV= “a001”; sv2.MaSV = sv1.MaSV;
sv1.TenSV=“Nguyen van A”; sv2.TenSV=sv1.MaSV;
sv1.NamSinh=1977; sv2.NamSinh=sv1.NamSinh
sv2 = sv1; ;
sv1 a001 Nguyen Van A 1977
sv2
- 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à
toán tử chấm
Ví dụ: Cho nhập liệu vào mảng bangdiem
for( int i=0; i
- 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((x2x1),2)+pow((y2y1),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
- 2. Cấu trúc: Truyền tham số kiểu
cấu trúc (tt)
b. Truyền toà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.xa.x),2)+pow((b.ya.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
- 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
- 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
- 2. Cấu trúc: Con trỏ cấu trúc
structureName *structurePointers;