Bai13 struct trong c++

22 0 0
Bai13 struct trong c++

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Bài giảng nhập môn lập trình của trường đại học công nghệ thông tin, chương 13. Bài giảng là slide powerpoint cung cấp đầy đủ kiến thức, bài tập, kỹ năng cho sinh viên về chương 13 của môn nhập môn lập trình

Kiểu cấu trúc - STRUCT Khái niệm kiểu cấu trúc (struct) Khai báo truy xuất kiểu cấu trúc Bài tập Đặt vấn đề • Thơng tin sinh viên (SV) • MSSV: kiểu chuỗi • Tên SV: kiểu chuỗi • Ngày tháng năm sinh: kiểu chuỗi • Giới tính: ký tự • Điểm tốn, lý, hóa: số thực • Yêu cầu • Lưu thông tin cho N sinh viên ? • Truyền thơng tin N sinh viên vào hàm ? Đặt vấn đề • Khai báo biến để lưu trữ SV • char mssv[7]; // “0012078” • char hoten[30]; // “Nguyen Van A” • char ntns[8]; // “29/12/82” • char phai; // ‘y’ ⬄ Nam, ‘n’ ⬄ Nữ • float toan, ly, hoa; // 8.5 9.0 10.0 • Truyền thơng tin SV cho hàm • void xuat(char mssv[], char hoten[], char ntns[], char phai, float toan, float ly, float hoa); Đặt vấn đề • Nhận xét • Đặt tên biến khó khăn khó quản lý • Truyền tham số cho hàm q nhiều • Tìm kiếm, xếp, chép,… khó khăn • Tốn nhiều nhớ •… • Ý tưởng • Gom thơng tin SV thành kiểu liệu => Kiểu struct Khai báo kiểu cấu trúc • Cú pháp struct { ; … ; }; • Ví dụ struct DIEM { int x; int y; }; Khai báo biến cấu trúc • Cú pháp khơng tường minh struct { ; … ; }; struct ; • Ví dụ struct DIEM { int x; int y; }; struct DIEM diem1, diem2;// C++ bỏ struct Sử dụng typedef • Cú pháp typedef struct { ; … ; } ; ; • Ví dụ typedef struct DIEM { int x; int y; }; struct DIEM diem1, diem2;// C++ bỏ struct Khởi tạo cho biến cấu trúc • Cú pháp tường minh struct { ; … ; } = {,…,}; • Ví dụ struct DIEM 1706}, diem2; { int x; int y; } diem1 = {2912, Truy xuất liệu kiểu cấu trúc • Đặc điểm • Khơng thể truy xuất trực tiếp • Thơng qua tốn tử thành phần cấu trúc hay cịn gọi tốn tử chấm (dot operation) • Ví dụ . struct DIEM { int x; int y; } diem1; cout temp; d1.x = temp; Mảng cấu trúc • Mảng cấu trúc • Tương tự mảng với kiểu liệu sở (char, int, float, …) struct DIEM { int x; int y; }; DIEM mang1[20]; DIEM mang2[10] = {{3, 2}, {4, 4}, {2, 7}}; Kích thước cấu trúc struct B1 aa aa Đệm byte { c c cc c ccc int a; double c; b b b b Đệm byte int b; }; Sizeof (B1) = ?? 24 struct B2 aa aabb bb { c c cc c ccc int a; int b; double c; }; Sizeof (B2) = ?? 16 Sự khác biệt đến từ thứ tự khai báo biến biên kích thước (tính theo byte) cấu trúc Biên mặc định VC++ byte Kích thước cấu trúc • Tối ưu kích thước cấu trúc dựa thứ tự biến (tối ưu cục cấu trúc) • Hoặc tối ưu biên cho cấu trúc (alignment of struct) Ví dụ thay đổi biên cấu trúc thành sizeof(B1) = 16 • Điều chỉnh biên cấu trúc: Project settings → Compile Option C/C++ → Code Generation → Structure Alignment • Dễ dàng điều chỉnh biên để tối ưu Hay biên cấu trúc nhỏ giúp giảm vùng đệm tốt ?? • Khơng Biên nhỏ giúp giảm kích thước cấu trúc làm tăng thời gian xử lý tác vụ memory allocator ← Cần điều phối thích hợp kích thước cấu trúc tốc độ xử lý • Chương trình dùng nhiều cấu trúc có thành phần khác điều chỉnh biên tốt khó khăn • Ưu tiên: tối ưu cách khai báo thứ tự thành phần cấu trúc phù hợp với biên cấu trúc Truyền cấu trúc cho hàm • Giống truyền kiểu liệu sở • Tham trị (khơng thay đổi sau kết thúc hàm) • Tham chiếu • Con trỏ • Ví dụ struct DIEM { int x, y; }; void xuat1(int x, int y) { … }; void xuat2(DIEM diem) { … }; void xuat3(DIEM &diem) { … }; void xuat4(DIEM *diem) { … }; Bài tập minh họa Xây dựng cấu trúc sinh viên: tên, mssv, lớp Nhập, xuất cho danh sách sinh viên Tìm sinh viên theo tên Bài tập minh họa Nhập danh sách sinh viên Tạo cấu trúc sinh viên void NhapSinhVien(SV dssv[], int thutu) { typedef struct SinhVien fflush(stdin); { } printf ("Nhap ten sinh vien : "); gets(dssv[thutu].ten); char ten[50]; fflush(stdin); char mssv[10]; printf ("Nhap ma so sinh vien : "); char lop[5]; gets(dssv[thutu].mssv); }SV; fflush(stdin); printf ("Nhap lop cua sinh vien : "); gets(dssv[thutu].lop);

Ngày đăng: 04/03/2024, 11:25

Tài liệu cùng người dùng

Tài liệu liên quan