Danh mục 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

Số trang: 44      Loại file: pdf      Dung lượng: 1.09 MB      Lượt xem: 41      Lượt tải: 0    
Xem trước 5 trang đầu tiên của tài liệu này:

Thông tin tài liệu:

Bài giảng Lập trình nâng cao: Bài 10+11+12 Kiểu cấu trúc (struct) và kiểu hợp nhất (union) cung cấp cho người học những kiến thức như: Các kiểu dữ liệu tự tạo; Cấu trúc (struct); Khai báo; Phép toán; Trường bit; Kích cỡ của struct; Bài tập struct; Hợp nhất (union); Liệt kê (enum); Cấu trúc tự trỏ và danh sách
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ài liệu được xem nhiều:

Tài liệu có liên quan: