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)
bit-field
Union
Enumeration
typedef
29 trang |
Chia sẻ: candy98 | Lượt xem: 599 | Lượt tải: 0
Bạn đang xem trước 20 trang tài liệu Bài giảng Phương pháp lập trình - Chương 8: Kiểu cấu trúc (Structures), để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
KIỂU CẤU TRÚC(Structures)Chương 8Nội dung trình bàyGiới thiệuKiểu cấu trúcKiểu liệt kê enumTừ khóa typedef1. Giới thiệuVấ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ạpVí 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ênGiả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ạpCó 5 cách để tạo kiểu dữ liệu tùy biếnStructure (Cấu trúc)bit-fieldUnionEnumerationtypedefNội dung trình bàyGiới thiệuKiểu cấu trúcKiểu liệt kê enumTừ khóa typedef2. Cấu trúc: Giới thiệuMộ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 chungNhữ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:Cấu trúc này gồm các thành viên: mã số, họ tên, điểm, kết quảMã sốHọ tênĐiểmKết quả0123Lê An19Đậu0124Nguyễn Bê12Rớt2. Cấu trúc: Khai báostruct structureName { type member1; type member2; ... type memberN; .. .} [varNames];structureName: Tên của cấu trúctype: Kiểu dữ liệu của thành viên tương ứngmember1,..., memberN: Tên các biến thành viên của cấu trúcvarNames: 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 include2. Cấu trúc: Ví dụ 1Tạ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, sv22. Cấu trúc: Ví dụ 2Thà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ướcstruct 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úcCú pháp (dùng 1 trong 2 cách):Cách thứ 2 tương tự cách khai báo biến thông thườngVí dụ:Khai báo biến s1, s2 có kiểu SinhVienstruct SinhVien s1, s2; // c1SinhVien s1, s2; // c2struct structureName varName;structureName varName;2. Cấu trúc: Truy cập biến cấu trúcDù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úcCú pháp: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ênVí dụ: gets(sv1.MaSV) gets(sv1.TenSV); gets(sv1.NamSinh); cout> bangdiem[i].toan; cout > bangdiem[i].ly; cout > bangdiem[i].hoa;}2. Cấu trúc: Truyền tham số kiểu cấu trúcTruyề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>a.x; cout>a.y; cout>b.x; cout>b.y; cout>a.x; cout>a.y; cout>b.x; cout>b.y; cout>list[i].x; cout>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>n; NhapMangToaDo(d, n); XuatMangToaDo (d,n); }2. Cấu trúc: Con trỏ cấu trúcMột biến con trỏ có thể trỏ đến một biến kiểu cấu trúcCú pháp khai báo một con trỏ cấu trúc:Ví dụ: struct diem{ int x; int y;};diem *p; //p là con trỏ cấu trúcstructureName *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 toán tử ->Ví dụ:struct diem{ int x; int y;}; void main() { diem *p; cout>p->x; cout>p->y; coutxy; }Nội dung trình bàyGiới thiệuKiểu cấu trúcKiểu liệt kê enumTừ khóa typedef3. Kiểu liệt kê enumKiể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ênMỗ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:enumName: Tên của enumenumList: Danh sách các tên hằng phân cách nhau bởi dấu phẩyenumVars: Tên các biến kiểu enumenum enumName {enumList} [enumVars];3. Kiểu liệt kê enum: Ví dụVí dụ khai báo enum:enum color {red, orange, yellow, green, blue, indigo};Khai báo biến kiểu enum:Ví dụ khai báo biến kiểu enum:color c1 = indigo; if (c1 == indigo) cout (arrow operator).Truyền tham số là con trỏ cấu trúc thì mặc định là truyền tham chiếu