Bài giảng Tin học đại cương - Phần 3: Lập trình C - Chương 6: Cấu trúc
Phần 3: Lập trì nh C
Nội dung chí nh
• Chương 1: Tổng quan về ngôn ngữ C
• Chương 2: Kiểu dữ liệu và biểu thức trong C
• Chương 3: Vào ra dữ liệu
• Chương 4: Cấu trúc điều khiển
• Chương 5: Mảng, con trỏ và xâu ký tự
• Chương 6: Cấu trúc
• Chương 7: Hàm
• Chương 8: Tệp dữ liệu
01-Jan-16
346
Chương 6: Cấu trúc
Nội dung chí nh
1. Khá i niệm cấu trúc
• Khá i niệm
2. Khai bá o cấu trúc
• Khá i bá o kiểu cấu trúc
• Khai báo biến cấu trúc
• Định nghĩa kiểu dữ liệu với typedef
3. Xử lý dữ liệu cấu trúc
• Truy nhập các trường dữ liệu
• Phé p gá n giữa cá c biến cấu trúc
4. Một số ví dụ
01-Jan-16
347
Chương 6: Cấu trúc
6.1 Khái niệm cấu trúc
Ví dụ → Bài toá n quản lý thí sinh thi đại học
Để quản lý cần lưu trữ các thô ng tin
• Số báo danh: Số nguyên khô ng dấu
• Họ tên sinh viên: Chuỗi ký tự không quá 30
• Khối thi: Ký tự (A,B,C..)
• Tổng điểm 3 môn thi: kiểu thực
Do vậy với mỗi sinh viên cần các biến
unsigned SBD;
char
char
float
Ten[30];
KhoiThi;
KetQua;
01-Jan-16
348
Chương 6: Cấu trúc
6.1 Khái niệm cấu trúc
Ví dụ → Bài toá n quản lý thí sinh thi đại học (tiếp)
Để quản lý danh sá ch (dưới 1000) thí sinh dự
thi, cần nhiều mảng rời rạc
#define MAX 1000
unsigned DS_SBD[MAX];
char
char
float
DS_Ten[MAX][30];
DS_KhoiThi[MAX];
DS_KetQua[MAX];
01-Jan-16
349
Chương 6: Cấu trúc
6.1 Khái niệm cấu trúc
Ví dụ → Bài toá n quản lý thí sinh thi đại học (tiếp)
DS_SBD
456
789
123
Mảng ký tự
DS_Ten
Nguyễn
Hoàng
Nguyễn
VănAn
TrầnAn
Nghĩa
DS_KhoiThi
DS_KetQua
A D A
28.5
22.0
24.5
Biến điều khiển
dùng duyệt mảng
TS: TiS: iT+S1:i+2
01-Jan-16
350
Chương 6: Cấu trúc
6.1 Khái niệm cấu trúc
Ví dụ → Vấn đề & giải phá p
Dùng nhiều mảng
- Khó quản lý, dễ nhầm lẫn
- Không thể hiện cấu trúc thô ng tin dành cho từng
thí sinh
Mảng các cấu
trúc thô ng tin
dành cho thí sinh
Cấu trúc thô ng tin
dành cho một thí sinh
THÔ NG TIN THÍ SINH
THÔ NG TIN THÍ SINH
………
bá o danh:
THÔ NG TIN THÍ SINH
THÔ NG TIN THÍ SINH
.
………
…
Số bá o danh:…………………
……….
…
Họ và Tên:……………………
……….
.
.
Khối thi:……………………….
Mỗi phần tử của mảng
là một cấu trúc thô ng tin
Kết quả:……………………….
01-Jan-16
Chương 6: Cấu trúc
6.1 Khái niệm cấu trúc
Khá i niệm
• Cấu trúc là kiểu dữ liệu phức hợp, do người
dụng tự định nghĩa
– Kiểu cấu trúc bao gồm nhiều thành phần có thể
thuộc các kiểu dữ liệu khác nhau
– Các thành phần: gọi là trường dữ liệu (field)
– Cá c thành phần, không được truy nhập theo chỉ
số (như mảng) mà theo tên của trường.
Có thể coi một biến cấu trúc là một tập hợp của một
hay nhiều biến rời rạc, thường có kiểu khá c nhau
thành một biến có một tên duy nhất để dễ dàng
quản lý và sử dụng
01-Jan-16
352
Chương 6: Cấu trúc
6.1 Khái niệm cấu trúc
Khái niệm → Ví dụ
• Kết quả học tập của sinh viên
– TenSV: Chuỗi ký tự
– MaSV: Chuỗi số/ số nguyên
– Điem: Số thực
• Điểm trong mặt phẳng
– Tên điểm: Ký tự (A, B, C..)
– Hoành độ: Số thực
– Tung độ: Số thực
01-Jan-16
353
Chương 6: Cấu trúc
Nội dung chí nh
1. Khá i niệm cấu trúc
• Khá i niệm
2. Khai bá o cấu trúc
• Khá i bá o kiểu cấu trúc
• Khai báo biến cấu trúc
• Định nghĩa kiểu dữ liệu với typedef
3. Xử lý dữ liệu cấu trúc
• Truy nhập các trường dữ liệu
• Phé p gá n giữa cá c biến cấu trúc
4. Một số ví dụ
01-Jan-16
354
Chương 6: Cấu trúc
6.2 Khai báo cấu trúc
Khai bá o kiểu cấu trúc
struct Tên_kiểu_cấu_ trúc {
<Khai bá o cá c trường dữ liệu>
};
• struct: từ khóa, cho phép người dùng khai báo
kiểu dữ liệu mới: kiểu cấu trúc
• Tên_kiểu_cấu_truc: Tên của kiểu cấu trúc do
người dùng tự định nghĩa
– Tuâ n theo nguyên tắc đặt tên đối tượng trong C
• Khai báo các trường dữ liệu: Danh sá ch cá c
khai bá o thành phần (trường:field) của cấu trúc
– Giống khai bá o biến
– Cá c trường có thể có kiểu bất kỳ
01-Jan-16
355
Chương 6: Cấu trúc
6.2 Khai báo cấu trúc
Khai bá o kiểu cấu trúc → Ví dụ
Thẻ sinh viên
struct SinhVien{
char SHSV[10];
char Ten[30];
int NS;
int Khoa;
char Lop [10];
};
Số hiệu:…(Chuỗi ký tự)..
Tên sinh viên: (Chuỗi ký tự)
Năm sinh:…(Số nguyên)…
Khóa:……(Số nguyên)…….
Lớp:…… :.(Chuỗi ký tự). …
Point2D
struct Point{
float x, y;
};
Hoành độ (x)…(Số thực)..
Tung độ (y)…..(Số thực)..
01-Jan-16
356
Chương 6: Cấu trúc
6.2 Khai báo cấu trúc
Khai bá o biến cấu trúc
• Khai bá o kiểu cấu trúc nhằm tạo định nghĩa
toàn thể cho các cấu trúc sẽ được dùng
sau này
– Không cung cấp không gian nhớ cho kiểu
• Khai bá o biến cấu trúc nhằm yêu cầu
chương trình tạo vùng nhớ để lưu trữ cá c
dữ liệu cho biến cấu trúc
– Chứa dữ liệu của các trường của cấu trúc
01-Jan-16
357
Chương 6: Cấu trúc
6.2 Khai báo cấu trúc
Khai bá o biến cấu trúc → Cú phá p
Tồn tại định nghĩa kiểu cấu trúc
struct Kiểu_cấu_ trúc Tên_biến;
Khai báo trực tiếp
struct {
<Khai bá o cá c trường dữ liệu>
}Tên_biến;
Kết hợp với khai báo kiểu
struct Kiểu_cấu_ trúc {
<Khai bá o cá c trường dữ liệu>
}Tên_biến;
01-Jan-16
358
Chương 6: Cấu trúc
6.2 Khai báo cấu trúc
Khai bá o biến cấu trúc → Ví dụ
Tồn tại định nghĩa kiểu cấu trúc
struct SinhVien SV1, SV2, Thu khoa;
Khai báo trực tiếp
struct {
float x, y; //Tọa độ trên mặt phẳng
}A, B; //Khai bá o 2 điểm A, B
Kết hợp với khai báo kiểu
struct Point_3D{
float x, y, z;// Tọa độ khô ng gian
}A, B;
01-Jan-16
359
Chương 6: Cấu trúc
6.2 Khai báo cấu trúc
Khai bá o biến cấu trúc →Chú ý
Cá c cấu trúc có thể được khai báo lồng nhau
struct diem_thi {
float dToan, dLy, dHoa;
}
struct thi_sinh{
char SBD[10];
char ho_va_ten[30];
struct diem_thi ket_qua;
} thi_sinh_1, thi_sinh_2;
01-Jan-16
360
Chương 6: Cấu trúc
6.2 Khai báo cấu trúc
Khai bá o biến cấu trúc →Chú ý
Có thể khai báo trực tiếp các trường dữ liệu
của một cấu trúc bên trong cấu trúc khá c
struct thi_sinh{
char SBD[10];
char ho_va_ten[30];
struct{
float dToan, dLy, dHoa;
} ket_qua;
} thi_sinh_1, thi_sinh_2;
01-Jan-16
361
Chương 6: Cấu trúc
6.2 Khai báo cấu trúc
Khai bá o biến cấu trúc →Chú ý
Có thể gán giá trị khởi đầu cho một biến cấu
trúc, theo nguyên tắc như kiểu mảng
struct SinhVien{
char Ten[20];
struct Date{
Ví dụ:
struct Date{
int day;
int month;
int year;
int day;
int month;
int year;
};
} NS;
struct SinhVien{
char Ten[30];
} SV = {“Tran Anh", 20,12,1990 };
struct Date NS;
} SV = {“Tran Anh", 20, 12, 1990 };
01-Jan-16
362
Chương 6: Cấu trúc
6.2 Khai báo cấu trúc
Định nghĩa kiểu dữ liệu với typedef
typedef <tên_cũ> <tên_mới>;
Mục đích
• Đặt tên mới đồng nghĩa với tên của một kiểu
dữ liệu đã được định nghĩa
– Thường được sử dụng cho kiểu cấu trúc
• Giúp cho khai bá o trở nên quen thuộc và ít bị sai hơn
Ví dụ
typedef char Str80[80] ;
typedef long mask;
Str80 str="Bonjour tout le monde !";
mask a, b;
01-Jan-16
363
Chương 6: Cấu trúc
6.2 Khai báo cấu trúc
Định nghĩa kiểu dữ liệu với typedef
Thường được kết hợp với kiểu cấu trúc để
khai bá o một bí danh cho một cấu trúc
– Giúp khai bá o trở nên quen thuộc và ít bị sai hơn
typedef struct { //Định nghĩa một cấu trúc
char SHSV[10];
char Ten[30];
int NS;
int Khoa;
char Lop [10];
} SinhVien;
//Đặt tên cho cấu trúc là SinhVien
//Tạo một biến cấu trúc
SinhVien SV;
01-Jan-16
364
Chương 6: Cấu trúc
6.2 Khai báo cấu trúc
Định nghĩa kiểu dữ liệu với typedef →Chú ý
Cho phép đặt tên mới trùng với tên cũ
typedef struct {
float x, y, z;
}point_3D;
point_3D M;
point_3D N;
Ví dụ
struct point_3D{
float x, y, z;
}
struct point_3D M;
typedef struct point_3D point_3D;
point_3D N;
01-Jan-16
365
Tải về để xem bản đầy đủ
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Tin học đại cương - Phần 3: Lập trình C - Chương 6: Cấu trúc", để tải tài liệu gốc về máy hãy click vào nút Download ở trên
File đính kèm:
bai_giang_tin_hoc_dai_cuong_phan_3_lap_trinh_c_chuong_6_cau.pptx

