Bài giảng Phương pháp lập trình - Chương 8: Structures-Enum-typedef - Võ Quang Hoàng Khang

pdf 25 trang phuongnguyen 1451
Bạn đang xem 20 trang mẫu của 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", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pdfbai_giang_phuong_phap_lap_trinh_chuong_8_structures_enum_typ.pdf

Nội dung text: Bài giảng Phương pháp lập trình - Chương 8: Structures-Enum-typedef - Võ Quang Hoàng Khang

  1. CHƯƠNG 8 STRUCTURES – ENUM - typedef
  2. 1. Giới thiệu Có 5 cách để tạokiểudữ liệutùy biến (custom data types). 1.Structure 2.bit-field 3.Union 4.Enumeration 5.typedef
  3. 2. Struct (cấu trúc) y Mộtcấutrúclàmộttập các biến được tham chiếuthôngquamột tên chung. Những biếntạonêncấutrúcđược gọilà 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ầntử củamả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.
  4. 2.1. Khai báo Struct Struct tructureName y structureName: Tên củacấutrúc { y type: Kiểudữ liệucủa type member1; thành viêiên tương ứng type member2; y Member1, , memberN: Tên các biến thành viên củacấutrúc type memberN; y vaaaesrNames: Têên các biến . cấu trúc phân cách nhau bằng dấuphẩy. } varNames;
  5. Ví dụ: y Tạomộtstructsinhviêngồmcácthôngtin: mã số sinh viên, họ tên, năm sinh, địachỉ. struct sinhvien { char *MaSv; char *TenSv; int Namsinh; char *Diachi; }; y Khai báo biếnkiểu sinhvien: sinhvien sv1, sv2;
  6. 2.2.Truy cập biến cấu trúc y Dùng toán tử dấuchấm (dot opp)erator) để truy cập các thành viên củamộtbiến cấutrúc. y Cú pháp: varNames.memberName Ví dụ: sv1.MSMaSv= “a001”; sv1.TenSv=“Nguyen van A”; sv2.Namsinh=1977;
  7. 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ấutrúcchomộtbiếncấutrúckháccócùng kiểu y Ví dụ: struct coordXY { int x; int y; } diemA, diemB; y diemA.x = 100; diemA.y = 200;
  8. 2.3. Lệnh gán cấu trúc y Gán nộidung biếncấutrúcdiemAcho biếndiemB: diemB = diemA ; y Hoặccóthể sao chép từng thành viên: pointB.x = pointA.x ; pointB.y = pointA.y;
  9. 2.4. Mảng các cấu trúc y Mảng cấutrúclàmộtmảng mà mỗiphầntử là mộtbiếnkiểucấutrúc. y Để khai báo mộtmảng các cấutrúc,trướchết phải khai báocấutrúc, sau đó khai báomột mảng củacấutrúcđó. Ví dụ:stttruct ds{ char hoten[25]; float tlhtoan,ly,hoa; }; ds bdbangdiem[]//[50];//mảng 50 phầntử kiểu ds
  10. 2.4. Mảng các cấu trúc y Để truy cập đếntừng thành viên củatừng phầntử củamảng,tadùng chỉ mụccủaphần tử và toán tử thành viên (.). Ví dụ: for(int i=0; i > bangdiem[i].toan; cout > bangdiem[i].ly; cout > bangdiem[i].hoa; }
  11. 2.5. Truyền tham số kiểu cấu trúc a. Truyền thành viên củabiếncấu trúc vào hàm y Có 2 cách truyền thành viên củabiếncấutrúc vào hàm: x Truyềnthamtrị x Truyềnthambiến
  12. Ví dụ: Truyền tham trị struct diem { int x; itint 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; }
  13. Ví dụ: Truyền tham trị void main() { diem a,b; double kcach; cout >a.x; cout >a.y; cout >b.x; cout >b.y; cout<<"\nKhoang cach giua adiem:";a diem:"; kcach=khcach(a.x, a.y,b.x, b.y); cout<<kcach; }
  14. Ví dụ: truyền tham chiếu y Để truyền địachỉ của thành viên củacấutrúc vào hàm dùng toán tử & đặttrướctênbiến cấutrúc void dddoitoado(int &x, int& y,int a, int b) { x=x-a; y=y-b; } void main() {diema,b; doitoado(a.x, a.y, 10, 10); cout<<"\nx="<<a.x; cout<<"\ny="<<a.y; }
  15. 2.5. Truyền tham số kiểu cấu trúc b. Truyềntoànbộ biếncấutrúcđếnhàm Khi mộtcấutrúcđượcdùng như một đốisố củamộthàm,toànbộ cấutrúcđượctruyền vào tham số hình thức. Có hai cách truyền ◦ Truyềnthamtrị. double khcach(diem a,diem b) { double kc; kc=sqrt(pow((b.x-a.x),2)+pow((b.y-a.y),2)); return kc; }
  16. 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="<< axa.x<<« y=" <<aya.y; }
  17. 2.6. Con trỏ đến cấu trúc y Mộtbiếncontrỏ có thể trỏđếnmộtbiếnkiểu cấu tútrúc. y Cú pháp khai báo mộtcontrỏ cấutrúc structureName *structurePointers; Ví dụ: struct diem { int x; int y; }; diem *p;//p là con trỏ cấutrúc.
  18. 2.7. Sử dụng con trỏ cấu trúc y Để tham chiếu đếnthànhviêncủamột cấutrúcđượctrỏđếnbởimộtcontrỏ, ta dùng toán tử -> (toán tử tham chiếu gồmmộtdấutrừ và mộtdấulớnhơn). Ví dụ: P->x=100; P->y=150;
  19. 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; }
  20. 2.7. Sử dụng con trỏ cấu trúc y Lưuý: y Để truy cập đến thành viên củamộtcấutrúc: ◦ Nếudùngbiếncấutrúcthì dùng toán tử chấm (dot operator). ◦ Nếudùngbiếncontrỏ thì dùng toán tử -> (arrow operator). y Truyềnthamsố là con trỏ cấutrúcthìmặc định là truyền tham chiếu
  21. 3. Kiểu liệt kê (Enumerations, enum) y Một enum là mộttậpcủacáctênhằng nguyên xác định tấtcả các giá trị hợplệ mà mộtbiếncủakiểu đócóthể có. y Cú phá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ởidấuphẩy ◦ enumVars: Têêncác biến kiểu enum.
  22. 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; }
  23. 3. Kiểu liệt kê (Enumerations, enum) y Mỗimột tên trong danh sách enum tượng trưng cho một giá trị nguyên. Giá trị củatên thứ nhất trong enum là 0, kế tiếp là 1, y Tacó thể gáán giá trị khácchomỗitên hằng nguyên
  24. 3. typedef y Từ khóa typedef dùng để định nghĩamộttên mớichomộtkiểudữ 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ớicủakiểudữ liệu
  25. 3. typedef y Ví dụ: Tạomộttênmớichokiểudữ liệuint typedef int int2bytes; typedef longgy int4bytes; Sau khi các lệnh trên thựchiệnthìlệnh int n1; long n2; tương đương int2bytes n1; Int4bytes n2;