Bài giảng Giới thiệu lập trình - Chương 10: Cấu trúc Struct - Lê Nguyên Khôi

pdf 24 trang hoanguyen 3230
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Giới thiệu lập trình - Chương 10: Cấu trúc Struct - Lê Nguyên Khôi", để 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_gioi_thieu_lap_trinh_chuong_10_cau_truc_struct_le.pdf

Nội dung text: Bài giảng Giới thiệu lập trình - Chương 10: Cấu trúc Struct - Lê Nguyên Khôi

  1. Gi ới Thi ệu Lập Trình Cấu Trúc struct TS. Lê Nguyên Khôi Tr ườ ng Đại học Công ngh ệ, ĐHQGHN
  2. Nội Dung  Cu trúc struct  Ki u d li u nhóm  nh ngh a  Khai báo / Kh i t o  S d ng  Truy n bi n cho hàm Gi i Thi u L p Trình 1
  3. Ki ểu D ữ Li ệu Nhóm  Ki u M ng:  Tp h p d li u cùng ki u  Khai báo sau ó s d ng nh ư bi n ơ n l  Truy n cho hàm: truy n a ch  Ki u cu trúc struct :  Tp h p d li u có th khác ki u  Ph i nh ngh a tr ư c khi s d ng  Khai báo sau ó s d ng nh ư bi n ơ n l  Truy n cho hàm: gi ng bi n ơ n l Gi i Thi u L p Trình 2
  4. Ki ểu DL C ấu Trúc struct  Tp h p d li u, có th khác ki u, ư c nhóm  Mi d li u ư c l ưu trong m t bi n (tr ư ng)  Mi d li u có ki u d li u c th  H tr t ch c d li u ph c t p vào cùng m t i t ư ng  H tr làm vi c gi a các d li u trên i t ư ng Gi i Thi u L p Trình 3
  5. Ki ểu DL C ấu Trúc struct – Ví D ụ Tên Tr ườ ng Ki ểu Dữ Li ệu Dữ Li ệu MSSV string 12345678 HoTen string Trach Van Doanh NgaySinh string 01/01/1999 GioiTinh bool true Gi i Thi u L p Trình 4
  6. Ki ểu DL C ấu Trúc struct –Định Nghĩa  nh ngh a b i t khóa struct  nh ngh a toàn c c  Ngoài và tr ư c int main()  Tt c các hàm u hi u  Không ư c c p phát b nh  Ch có m c ích miêu t c u trúc  Ch c p phát b nh  Khi khai báo bi n ki u c u trúc  Miêu t :  Các thành ph n (tr ư ng) và ki u c a chúng Gi i Thi u L p Trình 5
  7. struct sinhvien –Định Nghĩa Tên Tr ườ ng Ki ểu Dữ Li ệu Dữ Li ệu MSSV string 12345678 HoTen string Trach Van Doanh NgaySinh string 01/01/1999 GioiTinh bool true struct sinhvien { string MSSV; string HoTen; string NgaySinh; bool GioiTinh; } ; Gi i Thi u L p Trình 6
  8. struct sinhvien – Khai Báo/Kh ởi T ạo struct sinhvien { string MSSV; string HoTen; string NgaySinh; bool GioiTinh; } ; int main() { struct sinhvien sv1; struct sinhvien sv2 = { "12345678" , "Trach Van Doanh" , "01/01/1999" , true } ; } Gi i Thi u L p Trình 7
  9. Truy C ập Thành Ph ần struct  S d ng toán t ch m ( .) sv1 . MSSV sv1 . HoTen sv1 . NgaySinh sv1 . GioiTinh  Gi tên là “bi n thành ph n”  Các thành ph n c a bi n ki u c u trúc  Ki u c u trúc struct khác nhau có th có cùng tên bi n thành ph n  Bi n thành ph n là bi n c c b Gi i Thi u L p Trình 8
  10. Truy C ập Thành Ph ần struct – Ví D ụ struct sinhvien { string MSSV; string HoTen; string NgaySinh; bool GioiTinh; } ; int main() { struct sinhvien sv1; sv1.MSSV = "12345678"; sv1.HoTen = "Trach Van Doanh"; sv1.NgaySinh = "01/01/1999"; sv1.GioiTinh = true; } Gi i Thi u L p Trình 9
  11. struct ngaythangnam struct ngaythangnam { int ngay; int thang; int nam; } ; int main() { struct ngaythangnam homNay = {1, 4, 2000}; struct ngaythangnam ngayMai; ngayMai.ngay = homNay.ngay + 1; ngayMai.thang = homNay.thang; ngayMai.nam = homNay.nam; } Gi i Thi u L p Trình 10
  12. Cấu Trúc struct – Phép Gán  Vi c u trúc struct ngaythangnam  Khai báo 2 bi n c u trúc struct ngaythangnam homQua, homNay;  C 2 bi n u ki u struct ngaythangnam  Th c hi n phép gán ơ n gi n h p l homQua = homNay;  Sao chép giá tr bi n thành ph n homNay ca cho các bi n thành ph n c a homQua , t ươ ng ươ ng homQua.ngay = homNay.ngay; homQua.thang = homNay.thang; homQua.nam = homNay.nam; Gi i Thi u L p Trình 11
  13. Cấu Trúc struct – Phép Toán Khác  Các phép toán khác không ư c nh ngh a cho ki u c u trúc struct  So sánh b ng/khác ( == , != ) (homQua == homNay bi u th c không h p l )  So sánh th t ( , ) (homQua < homNay bi u th c không h p l )  Các phép toán (homQua + homNay bi u th c không h p l )  Nh p & in (cin & cout không h p l ) Gi i Thi u L p Trình 12
  14. Truy ền Bi ến C ấu Trúc struct Cho Hàm struct toado { int x, y; } ; typedef struct toado ToaDo; void _nhapToaDo(ToaDo & td) { cin >> td.x >> td.y; } void _inToaDo(const ToaDo & td) { cout << "(" << td.x << "," << td.y << ")"; } Gi i Thi u L p Trình 13
  15. Truy ền Bi ến C ấu Trúc struct Cho Hàm struct toado { int x , y ; } ; typedef struct toado ToaDo; void _nhapToaDo ( ToaDo & td ) ; void _inToaDo ( const ToaDo & td ) ; int main ( ) { ToaDo td1; _nhapToaDo ( td1 ) ; _inToaDo ( td1 ) ; ToaDo td2; _nhapToaDo ( td2 ) ; _inToaDo ( td2 ) ; } Gi i Thi u L p Trình 14
  16. Truy ền Bi ến C ấu Trúc struct Cho Hàm void _trungDiem ( const ToaDo & td1 , const ToaDo & td2 , ToaDo & trungDiem ) { trungDiem.x = ( td1.x + td2.x ) / 2; trungDiem.y = ( td1.y + td2.y ) / 2; } ToaDo * _trungDiem ( const ToaDo & td1 , const ToaDo & td2 ) { ToaDo * trungDiem = new ToaDo; (*trungDiem).x = ( td1.x + td2.x ) / 2; (*trungDiem).y = ( td1.y + td2.y ) / 2; return trungDiem; } Gi i Thi u L p Trình 15
  17. Truy ền Bi ến C ấu Trúc struct Cho Hàm int main ( ) { ToaDo td1 ; _nhapToaDo ( td1 ) ; ToaDo td2 ; _nhapToaDo ( td2 ) ; ToaDo tdTrgD1 ; _trungDiem ( td1 , td2 , tdTrgD1 ) ; ToaDo * tdTrgD2 = new ToaDo; tdTrgD2 = _trungDiem ( td1 , td2 ) ; _inToaDo ( tdTrgD1 ) ; _inToaDo ( *tdTrgD2 ) ; } Gi i Thi u L p Trình 16
  18. Cấu Trúc struct & Con Tr ỏ  Gi ng các ki u d li u khác:  struct toado * là con tr t i struct toado  Toán t & tr v a ch c a bi n c u trúc  Theo th t ưu tiên: “ .” ư c ưu tiên tr ư c “ *”  Nu td là con tr ti cu trúc struct toado :  *p.x tươ ng ươ ng *(p.x) không h p l  Ph i s d ng (*p).x  thu n ti n, có th dùng toán t ->:  kt hp con tr (*) v i truy c p tr ư ng (.)  p->a tươ ng ươ ng (*p).a Gi i Thi u L p Trình 17
  19. struct thoigian Gi i Thi u L p Trình 18
  20. struct thoigian Gi i Thi u L p Trình 19
  21. struct sohuuti Gi i Thi u L p Trình 20
  22. struct sohuuti Gi i Thi u L p Trình 21
  23. struct dathuc Gi i Thi u L p Trình 22
  24. struct dathuc Gi i Thi u L p Trình 23