Professional Documents
Culture Documents
TRÌNH
C
CƠ BẢN
Khái niệm cấu trúc
Khai báo và sử dụng
Cấu trúc cấu trúc
(Struct) Xử lý dữ liệu cấu trúc
Mảng cấu trúc
1. Khái niệm cấu trúc
Kiểu dữ liệu cấu trúc (struct) là kiểu dữ liệu phức hợp bao gồm nhiều
thành phần, mỗi thành phần có thể thuộc những kiểu dữ liệu khác nhau.
Các thành phần dữ liệu trong cấu trúc được gọi là các trường dữ liệu
(field).
2. Khai báo và sử dụng cấu trúc
Ví dụ:
struct sinh_vien {
char ma_so_sinh_vien[10];
char ho_va_ten[30];
float diem_TinDC;
}
struct point_3D {
float x;
float y;
float z;
}
2. Khai báo và sử dụng cấu trúc
Cú pháp:
struct tên_cấu_trúc tên_biến_cấu_trúc;
Þ Kết hợp khai báo kiểu dữ liệu cấu trúc và khai báo biến cấu trúc
struct [tên_cấu_trúc] {
<khai báo các trường>;
} tên_biến_cấu_trúc;
Lưu ý:
- Phần tên cấu trúc có thể có hoặc không
- Nếu có tên_cấu_trúc thì sau này ta có thể khai báo bổ sung biến có kiểu
dữ liệu là tên_cấu_trúc đó
- nếu không có tên_cấu_trúc thì cấu trúc khai báo tương ứng không được
sử dụng về sau.
2. Khai báo và sử dụng cấu trúc
Þ Kết hợp khai báo kiểu dữ liệu cấu trúc và khai báo biến cấu trúc
Ví dụ 1: Ví dụ 2:
struct diem_thi { struct thi_sinh {
float diem_Toan; char SBD[10];
float diem_Ly; char ho_va_ten[30];
float diem_Hoa; struct diem_thi {
} float diem_Toan;
struct thi_sinh { float diem_Ly;
char SBD[10]; // số báo float diem_Hoa;
danh }ket_qua;
char ho_va_ten[30]; } thi_sinh_1, thi_sinh_2;
struct diem_thi ket_qua;
} thi_sinh_1, thi_sinh_2;
2. Khai báo và sử dụng cấu trúc
Cú pháp:
typedef struct tên_cũ tên_mới;
Hoặc
typedef struct [tên_cũ] {
<khai báo các trường>;
}danh_sách_các_tên_mới;
Lưu ý:
• Sau câu lệnh này ta có thể sử dụng tên_mới thay cho tổ hợp struct
tên_cũ khi khai báo biến.
• Được phép đặt tên_mới trùng với tên_cũ.
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;
Þ Trong ví dụ trên ta đã đặt lại tên cho cấu trúc struct point_3D thành
point_3D và dùng tên mới này làm kiểu dữ liệu cho khai báo của biến N.
Các biến P, M được khai báo theo cách chúng ta đã biết.
2. Khai báo và sử dụng cấu trúc
Ví dụ:
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;
Þ Lưu ý:
Cũng như việc nhập giá trị cho các phần tử của mảng, việc nhập giá trị cho các
trường của cấu trúc (đặc biệt là các trường có kiểu dữ liệu float) nên thực hiện qua
biến trung gian để tránh những tình huống có thể làm treo máy hoặc kết quả nhập
được không như ý.
3. Xử lý dữ liệu cấu trúc
Þ Lưu ý:
Để copy dữ liệu là xâu kí tự ta phải dùng lệnh strcpy(), không được dùng
lệnh gán thông thường để copy nội dung xâu kí tự.
3. Xử lý dữ liệu cấu trúc
Cú pháp
struct <tên cấu trúc> * <tên biến con trỏ cấu trúc> ;
Truy cập vào trường dữ liệu của cấu trúc từ biến con trỏ cấu trúc
Cú pháp
struct <tên cấu trúc> <tên mảng cấu trúc> [số phần tử];
Ví dụ:
Câu lệnh trên khai báo một biến mảng tên là lop_KHMT gồm 50 phần tử,
trong đó mỗi phần tử đều có kiểu dữ liệu là kiểu cấu trúc sinh_vien.
struct sinh_vien
{
char ho_ten[20];
float diem_thi;
};
struct sinh_vien lop_KHMT[50];
4. Mảng cấu trúc
Ví dụ
#include <stdio.h> printf(“\n Nhap thong tin cho sinh vien thu %d”,i+1);
#include <conio.h> printf(“\n Ma so sinh vien:”);
#include <string.h> fflush(stdin); gets(str);
void main() { strcpy(sv[i].ma_sv,str);
struct sinh_vien { printf(“\n Ho va ten: “);
fflush(stdin); gets(str);
char ma_sv[10];
strcp(sv[i].ho_ten,str);
char ho_ten[20]; printf(“\n Diem thi: “);
float diem_thi; scanf(“%f”,&diem);
}; sv[i].diem_thi = diem;
struct sinh_vien sv[3]; }
int i; printf(“\n Thong tin ve cac sinh vien”);
clrscr(); for(i=0;i<3;i++) {
for(i=0;i<3;i++) { printf(“\n Sinh vien thu %d ”,i+1);
char str[20]; printf(“%-10s %-20s %-3.1f”,sv[i].ma_sv, sv[i].ho_ten,sv[i].diem_thi);
float diem; }
getch();
}
4. Mảng cấu trúc
Ví dụ
Þ Kết quả:
Bài tập
Thanks!
CREDITS: This presentation template was created by Slidesgo,
including icons by Flaticon, infographics & images by Freepik and
illustrations by Stories