
Bài giảng Lập trình nâng cao: Bài 10+11+12 - Trương Xuân Nam
Thông tin tài liệu:
Nội dung trích xuất từ tài liệu:
Bài giảng Lập trình nâng cao: Bài 10+11+12 - Trương Xuân Nam LẬP TRÌNH NÂNG CAOBài 10+11+12: Kiểu cấu trúc (struct) và kiểu hợp nhất (union) TRƯƠNG XUÂN NAM 1Nội dung chính1. Các kiểu dữ liệu tự tạo2. Cấu trúc (struct) 1. Khai báo 2. Phép toán 3. Trường bit 4. Kích cỡ của struct3. Bài tập struct4. Hợp nhất (union)5. Liệt kê (enum)6. Cấu trúc tự trỏ và danh sách7. Bài tập Trương Xuân Nam - Khoa CNTT 2Phần 1Các kiểu dữ liệu tự tạo Trương Xuân Nam - Khoa CNTT 3Các kiểu dữ liệu tự tạo▪ Kiểu dữ liệu: quy định về loại dữ liệu được ghi trong biến ▪ Có tính quy ước, vì dữ liệu luôn được ghi ở dạng byte / bit ▪ Xác định cách thức xử lý giá trị khi tham gia tính toán▪ Các ngôn ngữ lập trình cung cấp một số kiểu dữ liệu cơ bản (số nguyên, số thực, logic,…) ▪ Cũng là các kiểu dữ liệu thường dùng trong cuộc sống▪ Cuộc sống có nhiều kiểu dữ liệu phức tạp hơn: ▪ Phân số: tử số (số thực) + mẫu số (số thực) ▪ Số phức: phần thực (số thực) + phần ảo (số thực x i) ▪ Ngày: ngày (số nguyên) + tháng (số nguyên) + năm (số nguyên) ▪ Giờ: giờ (số nguyên) + phút (số nguyên) + giây (số nguyên) +… ▪ Thời gian: Ngày + Giờ Trương Xuân Nam - Khoa CNTT 4Tự tạo kiểu dữ liệu mới▪ Các kiểu dữ liệu phức tạp thường là tổ hợp từ các loại cơ bản và đôi khi từ những loại tổ hợp đơn giản hơn▪ Không ngôn ngữ lập trình nào cung cấp được mọi loại dữ liệu cần thiết cho mọi nhu cầu thực tiễn▪ C/C++ cung cấp các cơ chế cho phép lập trình viên tự tạo các kiểu dữ liệu mới ▪ Cấu trúc (struct) ▪ Hợp nhất (union) ▪ Liệt kê (enum) ▪ Lớp (class)▪ Chúng ta thực tế đã sử dụng rất nhiều các kiểu dữ liệu tự tạo (string, vector,…) Trương Xuân Nam - Khoa CNTT 5Phần 2Cấu trúc (struct) Trương Xuân Nam - Khoa CNTT 6Đặt vấn đề: xét một bài toán cụ thể▪ Quản lý dữ liệu thời gian (ngày tháng năm)▪ Cách làm thông thường: bộ 3 biến lưu ngày, tháng, năm ▪ Mỗi khi có dữ liệu ngày tháng thì cần khai báo thêm cả 3▪ Truyền thông tin vào hàm? Dùng 3 tham số▪ Trả về kết quả từ hàm? Không làm được▪ Nhận xét ▪ Đặt tên biến nhập nhằng, khó quản lý, phải có quy tắc riêng ▪ Truyền tham số cho hàm dài dòng ▪ Tìm kiếm, sắp xếp, sao chép,… khó khăn▪ Giải pháp của C/C++: Gom những thông tin này tạo thành một kiểu dữ liệu mới Dữ liệu kiểu cấu trúcKhai báo struct▪ Cú pháp sử dụng struct: struct { };▪ Sau khi khao báo struct, ta có một kiểu dữ liệu mới, trùng tên với struct▪ Ví dụ: struct ThoiGian { // kiểu dữ liệu ThoiGian int ngay, thang, nam; // các thành phần con }; ThoiGian homnay; // biến kiểu ThoiGian homnay.ngay = 3; // thành phần ngày = 3 homnay.thang = 4; // thành phần tháng = 4 homnay.nam = 2021; // thành phần năm = 2021 TRƯƠNG XUÂN NAM 8Khai báo struct// khai báo kiểu ĐIỂM và 2 biếnstruct DIEM { int x; int y;} diem1, diem2;// khai báo biến riêng rẽstruct DIEM diem3, diem4;// khai báo biến trong C++ được bỏ structDIEM diem5, diem6; TRƯƠNG XUÂN NAM 9Khai báo struct// khai báo kiểu gián tiếp bằng typedeftypedef struct { int x; int y;} POINT;// khai báo biến với định kiểu typedefstruct POINT p1, p2;// khai báo và khởi trịstruct POINT { int x; int y;} p3 = { 123, 456 }, p4; TRƯƠNG XUÂN NAM 10Phép toán với struct▪ Một kiểu struct được xem là một kiểu dữ liệu mới▪ Phép gán hai biến struct cho nhau: sao chép nguyên văn dữ liệu từ nguồn tới đích▪ Phép truy cập thành phần: ▪ Mỗi thành phần của struct là một biến độc lập ▪ Truy cập vào từng thành phần thông qua toán tử thành phần (.) struct Top10 { double top[10]; int len; }; Top10 abc; // biến kiểu Top10 abc.top[0] = 9.9; // gán thành phần abc.len = 1; // gán thành phần Top10 xyz = abc; // gán 2 struct TRƯƠNG XUÂN NAM 11Phép toán với struct▪ Truy cập struct lồng nhau struct A { int x, y; }; struct B { A p, q; }; B b; b.p.x = 1, b.p.y = 2;▪ Toán tử thành phần sử dụng với con trỏ: struct Top10 { double top[10]; int len; int *end; }; Top10 * t1 = new Top10; t1->top[0] = 9.5; (*t1).len = 1; t1->end = nullptr; TRƯƠNG XUÂN NAM 12Trường bit▪ C/C++ cho phép chỉ định kích cỡ của một thành phần tới số bit struct bit_fields { unsigned int b0 : 1; unsigned int b1 : 4; unsigned int b2 : 1; unsigned int b3 : 10; };▪ Trong ví dụ trên thì b0 chỉ d ...
Tìm kiếm theo từ khóa liên quan:
Bài giảng Lập trình nâng cao Lập trình nâng cao Kiểu cấu trúc Kiểu hợp nhất Cấu trúc tự trỏ Kiểu dữ liệu tự tạoTài liệu có liên quan:
-
114 trang 262 2 0
-
142 trang 134 0 0
-
Giáo trình Lập trình nâng cao (Nghề Lập trình máy tính): Phần 2 - Tổng cục dạy nghề
169 trang 95 0 0 -
Đề thi kết thúc học phần Lập trình nâng cao - Học viện Nông nghiệp Việt Nam
1 trang 86 0 0 -
Giáo trình Lập trình nâng cao: Phần 2 - Nguyễn Văn Vinh
153 trang 49 0 0 -
Lập trình tự động hóa PLC S7-300 với TIA Portal: Phần 2
233 trang 41 0 0 -
Bài giảng Lập trình nâng cao (Advanced Programming) - Chương 7: Con trỏ
56 trang 39 0 0 -
Giáo trình Lập trình C căn bản (Nghề Tin học ứng dụng - Trình độ Trung cấp) - CĐ GTVT Trung ương I
73 trang 38 0 0 -
Giáo trình Lập trình C căn bản (Nghề Tin học ứng dụng - Trình độ Cao đẳng) - CĐ GTVT Trung ương I
76 trang 36 0 0 -
Giáo trình Lập trình nâng cao: Phần 1 - Nguyễn Văn Vinh
126 trang 36 0 0 -
Bài giảng Ngôn ngữ lập trình C - Võ Đức Hoàng
192 trang 34 0 0 -
Ngôn ngữ Pascal - Lập trình nâng cao: Phần 1
109 trang 32 0 0 -
64 trang 31 0 0
-
Bài giảng Lập trình nâng cao (Advanced Programming) - Chương 9: Kiểu dữ liệu tệp
18 trang 30 0 0 -
196 trang 30 0 0
-
Bài giảng Lập trình nâng cao (Advanced Programming) - Chương 3: Các khai báo, biểu thức, khối lệnh
14 trang 29 0 0 -
Bài giảng Tin học đại cương: Bài 9 - Bùi Trọng Tùng
15 trang 29 0 0 -
Bài giảng Cơ sở lập trình: Struct (Kiểu cấu trúc) - Trịnh Tấn Đạt
35 trang 28 0 0 -
Lập trình tự động hóa PLC S7-1200 với TIA Portal: Phần 2
291 trang 28 0 0 -
Bài giảng Lập trình nâng cao: Bài 8 - Lý Anh Tuấn
40 trang 27 0 0