Đến với Bài giảng Tin học đại cương Phần 2: Bài 7 - Cấu trúc do Nguyễn Thành Kiên biên soạn các bạn sẽ được tìm hiểu về 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. Hy vọng tài liệu là nguồn thông tin hữu ích cho quá trình học tập và nghiên cứu của các bạn.
TIN HỌC ĐẠI CƯƠNG Bài 7. CẤU TRÚC Nguyễn Thành Kiên Bộ mơn Kỹ thuật máy tính Khoa Cơng nghệ thơng tin – ĐHBK HN Bài 7. CẤU TRÚC 7.1. Khái niệm cấu trúc 7.2. Khai báo và sử dụng cấu trúc 7.3. Xử lí dữ liệu cấu trúc 7.4. Mảng cấu trúc Bài 7. CẤU TRÚC 7.1. Khái niệm cấu trúc 7.2. Khai báo và sử dụng cấu trúc 7.3. Xử lí dữ liệu cấu trúc 7.4. Mảng cấu trúc 7.1. Khái niệm cấu trúc Khi cần lưu danh sách sinh viên với các thơng tin liên quan đến điểm các mơn học, dùng mảng được khơng? Kiểu cấu trúc (Structure) là kiểu dữ liệu bao gồm nhiều thành phần, mỗi thành phần có thể có kiểu khác nhau, mỗi thành phần được gọi là một trường (field) 7.2. Khai báo và sử dụng cấu trúc Khai báo kiểu dữ liệu cấu trúc Cú pháp: struct tên_cấu_trúc { ; }; struct point_3D struct sinh_vien { char ma_so_sv[10]; char ho_va_ten[30]; float diem_TinDC; } { float x; float y; float z; } 7.2. Khai báo và sử dụng cấu trúc Khai báo biến cấu trúc C1: struct tên_cấu_trúc tên_biến; struct sinh_vien a, b, c; C2: kết hợp đồng thời vừa khai báo kiểu dữ liệu cấu trúc vừa khai báo biến: struct [tên_cấu_trúc] { ; } tên_biến_cấu_trúc; Ví dụ khai báo biến cấu trúc struct diem_thi { float diem_Toan; float diem_Ly; float diem_Hoa; các cấu trúc có thể lồng nhau } mức độ lồng là khơng hạn chế struct thi_sinh { char SBD[10]; char ho_va_ten[30]; struct diem_thi ket_qua; } thi_sinh_1, thi_sinh_2; 7.2. Khai báo và sử dụng cấu trúc Ngơn ngữ C cịn cho phép khai báo trực tiếp trường dữ liệu là cấu trúc bên trong cấu trúc chứa nó struct thi_sinh { char SBD[10]; char ho_va_ten[30]; struct diem_thi { float diem_Toan; float diem_Ly; float diem_Hoa; }ket_qua; } thi_sinh_1, thi_sinh_2; 7.2. Khai báo và sử dụng cấu trúc Định nghĩa kiểu DL cấu trúc với typedef Khai báo biến cấu trúc phải bắt đầu bằng từ khóa struct, sau đó đến tên cấu trúc rồi mới đến tên biến => quên từ khóa struct => đặt tên mới cho kiểu dữ liệu cấu trúc bằng câu lệnh typedef typedef struct tên_cũ tên_mới; typedef struct [tên_cũ] { ; }danh_sách_các_tên_mới; Lưu ý: Được phép đặt tên_mới trùng với tên_cũ. 7.2. Khai báo và sử dụng cấu trúc Ví dụ: struct point_3D { float x, y, z; } P; struct point_3D M; typedef struct point_3D point_3D; point_3D N; typedef struct point_2D { float x, y; }point_2D, diem_2_chieu, ten_bat_ki; point_2D X; diem_2_chieu Y; ten_bat_ki Z; 10 Bài 7. CẤU TRÚC 7.1. Khái niệm cấu trúc 7.2. Khai báo và sử dụng cấu trúc 7.3. Xử lí dữ liệu cấu trúc 7.4. Mảng cấu trúc 11 7.3. Xử lí dữ liệu cấu trúc Truy nhập các trường DL của cấu trúc tên_biến_cấu_trúc.tên_trường ta có thể “đối xử” với tên_biến_cấu_trúc.tên_trường giống như một biến thơng thường có kiểu dữ liệu là kiểu dữ liệu của tên_trường 12 Ví dụ cách sử dụng biến cấu trúc #include #include void main() { struct point_2D { char ten_diem; struct { float x, y; } toa_do; } p; float temp_float; char temp_char; printf(“\n Hay nhap thong tin ve mot diem”); printf(“\n Ten cua diem: “); fflush(stdin); scanf(“%c”,&temp_char); p.ten_diem = temp_char; printf(“\n nhap vao hoanh cua diem: “); scanf(“%f”,&temp_float); p.toa_do.x = temp_float; // giả sử điểm xét nằm đường thẳng y = 3x + 2; p.toa_do.y = 3*p.toa_do.x + 2; printf(“\n %c = (%5.2f,%5.2f)”,p.ten_diem, p.toa_do.x, p.toa_do.y); getch(); } 13 7.3. Xử lí dữ liệu cấu trúc Phép gán giữa các biến cấu trúc Có thể thực hiện phép gán biến cấu trúc struct s { char ho_ten[20]; float diem; }a, b, c; float temp_f; printf("\na.ho_ten: ");fflush(stdin); gets(a.ho_ten); printf("\na.diem = ");scanf("%f",&temp_f); a.diem = temp_f; strcpy(c.ho_ten, a.ho_ten); c.diem = a.diem; b = a; 14 7.3. Xử lí dữ liệu cấu trúc Con trỏ cấu trúc Con trỏ cấu trúc chứa địa chỉ của một cấu trúc Cú pháp khai báo struct * ; Truy nhập vào trường DL của cấu trúc từ biến con trỏ cấu trúc: (*). > 15 Bài 7. CẤU TRÚC 7.1. Khái niệm cấu trúc 7.2. Khai báo và sử dụng cấu trúc 7.3. Xử lí dữ liệu cấu trúc 7.4. Mảng cấu trúc 16 7.4. Mảng cấu trúc Cú pháp khai báo: struct [số phần tử]; Ví dụ: struct sinh_vien { char ho_ten[20]; float diem_thi; }; struct sinh_vien lop_CNTT[50]; 17 #include #include #include void main() { struct sinh_vien { char ma_sv[10]; char ho_ten[20]; float diem_thi; }; struct sinh_vien sv[3]; int i; clrscr(); for(i=0;i