Khái niệm cấu trúc, khai báo và sử dụng cấu trúc, xử lý dữ liệu cấu trúc, mảng cấu trúc là những nội dung chính trong bài 9 Kiểu cấu trúc thuộc bài giảng Tin học đại cương. Mời các bạn cùng tham khảo nội dung bài giảng để nắm bắt nội dung chi tiết.
TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG TIN HỌC ĐẠI CƯƠNG Bài Kiểu cấu trúc Nội dung 9.1 Khái niệm cấu trúc 9.2 Khai báo sử dụng cấu trúc 9.3 Xử lý liệu cấu trúc 9.4 Mảng cấu trúc Nội dung 9.1 Khái niệm cấu trúc 9.2 Khai báo sử dụng cấu trúc 9.3 Xử lý liệu cấu trúc 9.4 Mảng cấu trúc 9.1 Khái niệm cấu trúc • Kiểu liệu cấu trúc (struct) – Là kiểu liệu phức hợp, bao gồm nhiều thành phần thuộc kiểu liệu khác – Các thành phần: gọi trường liệu (field) • Ví dụ – Thơng tin kết học tập môn Tin đại cương sinh viên: TenSV, MaSV, Diem – Thông tin cầu thủ: Ten, Tuoi, CLB, SoAo, Vitri,… 9.2 Khai báo sử dụng cấu trúc 9.2.1 Khai báo kiểu liệu cấu trúc 9.2.2 Khai báo biến cấu trúc 9.2.3 Định nghĩa kiểu liệu với typedef 9.2.1 Khai báo kiểu liệu cấu trúc • Khai báo cấu trúc • Ví dụ struct tên_cấu_trúc{ struct SinhVien{ char MSSV[10]; } char hoVaTen[30]; float diemTinDC; } struct Point3D{ float x; float y; float z; } 9.2.2 Khai báo biến cấu trúc • Cú pháp: struct tên_cấu_trúc tên_biến_cấu_trúc; • Ví dụ: – struct SinhVien a, b, c; • Kết hợp khai báo struct tên_cấu_trúc { ; } tên_biến_cấu_trúc; 9.2.2 Khai báo biến cấu trúc • Các cấu trúc khai báo lồng struct DiemThi { float dToan, dLy, dHoa; } struct ThiSinh{ char SBD[10]; char hoTen[30]; struct DiemThi ketQua; } thiSinh1, thiSinh2; • Có thể khai báo trực tiếp trường liệu cấu trúc bên cấu trúc khác 9.2.2 Khai báo biến cấu trúc • Có thể khai báo trực tiếp trường liệu cấu trúc bên cấu trúc khác struct ThiSinh{ char SBD[10]; char hoTen[30]; struct [DiemThi]{ float dToan, dLy, dHoa; } ketQua; } thiSinh1, thiSinh2; 9.2.3 Định nghĩa kiểu liệu với typedef • Mục đích – Đặt tên cho kiểu liệu cấu trúc – Giúp khai báo biến “quen thuộc” sai • Cú pháp typedef struct ; typedef struct tên_cũ { ; } danh_sách_các_tên_mới; • Chú ý: cho phép đặt tên_mới trùng tên_cũ 10 9.2.3 Định nghĩa kiểu liệu với typedef • Ví dụ: struct Point3D{ float x, y, z; } struct Point3D M; typedef struct Point3D Point3D; Point3D N; typedef struct { float x, y, z; }Point3D; Point3D M; Point3D N; 11 9.2.3 Định nghĩa kiểu liệu với typedef • Ví dụ typedef struct Point2D { float x, y; }Point2D, Diem2Chieu, TenBatKi; Point2D X; Diem2Chieu Y; TenBatKi Z; => Point2D, Diem2Chieu, TenBatKi tên cấu trúc, tên biến 12 9.3 Xử lý liệu cấu trúc • 9.3.1 Truy cập trường liệu • 9.3.2 Phép gán biến cấu trúc 13 9.3.1 Truy cập trường liệu • Cú pháp tên_biến_cấu_trúc.tên_trường • Lưu ý – Dấu “.” toán tử truy cập vào trường liệu cấu trúc – Nếu trường liệu cấu trúc => sử dụng tiếp dấu “.” để truy cập vào thành phần mức sâu 14 9.3.1 Truy cập trường liệu Ví dụ: • Xây dựng cấu trúc biểu diễn điểm không gian chiều Nhập giá trị cho biến kiểu cấu trúc này, sau hiển thị giá trị trường liệu biến hình – Cấu trúc: tên điểm, tọa độ x, tọa độ y – Nhập, hiển thị trường biến cấu trúc biến liệu khác 15 9.3.1 Truy cập trường liệu #include #include typedef struct{ char ten[5]; int x,y; }ToaDo; void main(){ ToaDo t; printf("Nhap thong tin toa do\n"); 16 9.3.1 Truy cập trường liệu printf("Ten diem: ");gets(t.ten); printf("Toa x: ");scanf("%d",&t.x); printf("Toa y: ");scanf("%d",&t.y); printf("Gia tri cac truong\n"); printf("%-5s%3d%3d\n",t.ten,t.x,t.y); getch(); } 17 9.3.2 Phép gán biến cấu trúc • Muốn chép liệu từ biến cấu trúc sang biến cấu trúc khác kiểu – gán trường hai biến cấu trúc => “thủ công” – C cung cấp phép gán hai biến cấu trúc kiểu: biến_cấu_trúc_1 = biến_cấu_trúc_2; 18 9.3.2 Phép gán biến cấu trúc • Ví dụ – Xây dựng cấu trúc gồm họ tên điểm TĐC sinh viên – a, b, c biến cấu trúc – Nhập giá trị cho biến a – Gán b=a, gán trường a cho c b?c 19 9.3.2 Phép gán biến cấu trúc #include #include typedef struct{ char hoTen[20]; int diem; }SinhVien; void main(){ SinhVien a,b,c; printf("Nhap thong tin sinh vien\n"); printf("Ho ten: ");gets(a.hoten); printf("Diem:");scanf("%d",&a.diem); 20 10 9.3.2 Phép gán biến cấu trúc b=a; strcpy(c.hoten,a.hoten); c.diem=a.diem; printf(“Bien a: "); printf("%-20s%3d\n",a.hoten,a.diem); printf(“Bien b: "); printf("%-20s%3d\n",b.hoten,b.diem); printf(“Bien c: "); printf("%-20s%3d\n",c.hoten,c.diem); getch(); } 21 9.4 Mảng cấu trúc • Là tập hợp phần tử có kiểu liệu kiểu cấu trúc • Mục đích: – Lưu trữ tập hợp phần tử có kiểu – Mỗi phần tử tập hợp thành phần khác nhau: thơng tin sinh viên lớp, đội bóng… • Khai báo: struct [số phần tử]; 22 11 9.4 Mảng cấu trúc • Ví dụ Khai báo cấu trúc gồm tên điểm thi Tin đại cương Khai báo mảng tên sv thuộc kiểu Nhập từ bàn phím số n số sinh viên lớp Nhập thông tin n sinh viên lưu vào mảng sv Sắp mảng mảng theo thứ tự tăng dần điểm/tên Hiển thị hình danh sách sinh viên có điểm >=8 23 Chương trình quản lý thơng tin thí sinh Viết chương trình quản lý thơng tin thí sinh có chức sau: - Các thơng tin cần quản lí: • • • • • Họ Tên SBD Điểm môn Điểm tổng - Số lượng tối đa danh sách : 100 24 12 Chương trình quản lý thơng tin thí sinh • Nhập thơng tin thí sinh từ bàn phím • Sắp xếp danh sách theo thứ tự ABC tên thí sinh • Hiển thị danh sách thí sinh theo định dạng sau STT Họ tên SBD Mơn Tốn Mơn Lý Mơn Hóa Tổng • Tìm thơng tin thí sinh theo tên • Tìm thơng tin thí sinh theo danh sách • Sửa thơng tin thí sinh 25 Thảo luận 26 13 ...Nội dung 9. 1 Khái niệm cấu trúc 9. 2 Khai báo sử dụng cấu trúc 9. 3 Xử lý liệu cấu trúc 9. 4 Mảng cấu trúc 9. 1 Khái niệm cấu trúc • Kiểu liệu cấu trúc (struct) – Là kiểu liệu phức hợp,... dụng cấu trúc 9. 2.1 Khai báo kiểu liệu cấu trúc 9. 2.2 Khai báo biến cấu trúc 9. 2.3 Định nghĩa kiểu liệu với typedef 9. 2.1 Khai báo kiểu liệu cấu trúc • Khai báo cấu trúc • Ví dụ struct tên _cấu_ trúc{ ... phép gán hai biến cấu trúc kiểu: biến _cấu_ trúc_ 1 = biến _cấu_ trúc_ 2; 18 9. 3.2 Phép gán biến cấu trúc • Ví dụ – Xây dựng cấu trúc gồm họ tên điểm TĐC sinh viên – a, b, c biến cấu trúc – Nhập giá