Hệ thống thông tin - Chương 7: Cấu trúc (struct)

Nội dung

 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.5. Bài tập

pdf 28 trang dienloan 16520
Bạn đang xem 20 trang mẫu của tài liệu "Hệ thống thông tin - Chương 7: Cấu trúc (struct)", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

Tóm tắt nội dung tài liệu: Hệ thống thông tin - Chương 7: Cấu trúc (struct)

Hệ thống thông tin - Chương 7: Cấu trúc (struct)
1Chương 7
Cấu trúc (struct)
Ngo Van Linh
Bộ môn Hệ thống thông tin
Viện Công nghệ thông tin và Truyền thông
Đại học Bách Khoa Hà Nội
2Nội dung
 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.5. Bài tập 
37.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).
47.1. Khái niệm cấu trúc (tiếp)
 Ví dụ: Cấu trúc mô tả sinh viên:
 Cần lưu giữ các thông tin liên quan đến sinh
viên như họ tên, tuổi, kết quả học tập
 Mỗi thông tin thành phần lại có kiểu dữ liệu
khác nhau như họ tên có kiểu dữ liệu là xâu kí
tự, tuổi có kiểu dữ liệu là số nguyên, kết quả
học tập có kiểu dữ liệu là số thực.
5Nội dung
 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.5. Bài tập 
67.2. Khai báo kiểu dữ liệu cấu trúc
 Cú pháp:
struct ten_cau_truc
{
;
};
 Ví dụ:
struct sinh_vien
{
char ma_so_sinh_vien[10];
char ho_va_ten[30]; 
float diem_TinDC; 
};
77.2.2. Khai báo biến cấu trúc
 Cú pháp:
struct ten_cau_truc ten_bien_cau_truc;
 Ví dụ:
struct sinh_vien a, b, c;
87.2.3. Khai báo kết hợp
 Có thể kết hợp vừa khai báo kiểu dữ liệu cấu trúc 
vừa khai báo biến cấu trúc:
struct [ten_cau_truc]
{
//khai_bao_cac_truong;
} ten_bien_cau_truc;
 Ví dụ:
struct thi_sinh
{
char SBD[10]; // so bao danh
char ho_va_ten[30];
struct diem_thi ket_qua;
} thi_sinh_1, thi_sinh_2;
97.2.4. Định nghĩa kiểu dữ liệu cấu trúc với typedef
 Đặt tên mới cho kiểu dữ liệu cấu trúc cú
pháp:
typedef struct tên_cũ ten_moi;
 Hoặc ta có thể đặt lại tên cho cấu trúc ngay 
khi khai báo bằng cú pháp
typedef struct [tên_cũ]
{
//khai_bao_cac_truong;
}danh_sach_cac_tên_mới;
10
7.2.4. Định nghĩa kiểu dữ liệu cấu trúc với 
typedef (tiếp)
 Lưu ý: Được phép đặt tên_mới trùng với 
tên_cũ.
 Ví dụ:
struct point_3D
{
float x, y, z;
} P;
struct point_3D M;
typedef struct point_3D p_3D;
p_3D N;
11
Nội dung
 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.5. Bài tập 
12
7.3. Xử lý dữ liệu cấu trúc
 Truy nhập các trường dữ liệu của cấu trúc
 Phép gán giữa các biến cấu trúc
 Con trỏ cấu trúc
13
7.3.1. Truy nhập các trường dữ liệu 
của cấu trúc
 Cú pháp:
ten_bien_cau_truc.ten_truong
 Ví dụ:
struct point_2D
{
char ten_diem;
float x, y;
} p;
Truy cập tên của 1 điểm: p.ten_diem
14
7.3.2. Phép gán giữa các biến cấu trúc
 Giả sử ta có 2 biến cấu trúc là a và b có 
cùng kiểu dữ liệu là một cấu trúc 
nào đó.
 Phép gán cấu trúc có cú pháp tương tự như 
phép gán thông thường:
bien_cau_truc_1 = bien_cau_truc_2;
15
7.3.3. Con trỏ cấu trúc
 Cú pháp:
struct ten_cau_truc *ten_bien_con_tro_ctruc;
 Có 2 cách truy nhập vào trường dữ liệu của 
cấu trúc từ biến con trỏ cấu trúc là
(*ten_bien_con_tro_ctruc).ten_truong_du_lieu
Hoặc:
ten_bien_con_tro_ctruc->ten_truong_du_lieu
16
Nội dung
 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.5. Bài tập 
17
7.4. Mảng cấu trúc
 Cú pháp:
struct ten_cau_truc ten_mang_ctruc[so_ptu];
 Ví dụ:
struct sinh_vien
{
char ho_ten[20];
float diem_thi;
};
struct sinh_vien lop_Tin5[80];
18
Ví dụ
#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();
19
Ví dụ (tiếp)
for(i=0;i<3;i++)
{
char str[20];
float diem;
printf(“\nNhap thong tin cho sinh vien %d”,i+1);
printf(“\nMa so sinh vien:”);
fflush(stdin); gets(str);
strcpy(sv[i].ma_sv,str);
printf(“\n Ho va ten: “);
fflush(stdin); gets(str);
strcpy(sv[i].ho_ten,str);
printf(“\n Diem thi: “);
scanf(“%f”,&diem);
sv[i].diem_thi = diem;
}
20
Ví dụ (tiếp)
printf(“\n Thong tin ve cac sinh 
vien”);
for(i=0;i<3;i++)
{
printf(“\n Sinh vien thu %d ”,i+1);
printf(“%-10s %-20s %-3.1f”, 
sv[i].ma_sv, sv[i].ho_ten, 
sv[i].diem_thi);
}
getch();
} 
21
Ví dụ - Kết quả
Nhap thong tin cho sinh vien thu 1
Ma so sinh vien: SV0032
Ho va ten: Nguyen Thanh Binh
Diem thi: 8.5
Nhap thong tin cho sinh vien thu 2
Ma so sinh vien: SV0002
Ho va ten: Pham Hong Phuc
Diem thi: 9
Nhap thong tin cho sinh vien thu 3
Ma so sinh vien: SV0046
Ho va ten: Le Minh Hoa
Diem thi: 10
Thong tin ve cac sinh vien
Sinh vien thu 1: SV0032 Nguyen Thanh Binh 8.5
Sinh vien thu 2: SV0002 Pham Hong Phuc 9.0
Sinh vien thu 3: SV0046 Le Minh Hoa 10.0
22
Bài tập
 Viết 1 chương trình thực hiện những công việc sau:
 Yêu cầu người dùng nhập vào một số nguyên dương n
với 5 n 20 (có kiểm tra tính hợp lệ của giá trị được
nhập vào, nếu giá trị n nhập vào không thỏa mãn điều
kiện thì yêu cầu nhập lại)
 Yêu cầu người dùng nhập vào thông tin của n sinh viên
gồm những mục sau
 Họ và tên: có kiểu dữ liệu là xâu kí tự gồm không quá 30 kí tự
 Lớp: xâu kí tự có độ dài không quá 5 kí tự
 Điểm thi Tin đại cương: là một số nguyên có giá trị từ 0 đến 10
 Đưa ra màn hình danh sách các sinh viên cùng thông
tin của họ mà người dùng vừa nhập vào.
23
Bài tập
 Yêu cầu người dùng nhập vào từ bàn phím một
số thực. Đưa ra màn hình danh sách các sinh
viên có điểm thi Tin đại cương nhỏ hơn giá trị số
thực vừa nhập vào.
 Đưa ra màn hình danh sách sinh viên được sắp
xếp theo chiều giảm dần của điểm thi Tin đại
cương.
 Đưa ra màn hình danh sách sinh viên với họ và
tên được sắp xếp theo chiều của bảng chữ cái.
Bài tập có lời giải
Thông tin về một học sinh lưu trong một cấu trúc gồm các
trường: Mã số (8 ký tự), Họ tên (không quá 30 ký tự),
Điểm toán (số thực). Hãy viết một chương trình hoàn
chỉnh thực hiện các công việc sau:
a) Nhập vào danh sách học sinh của một lớp (biết rằng lớp
này có không quá 30 học sinh). Quá trình nhập kết thúc
khi đã nhập đủ 30 học sinh hoặc khi nhập Mã số là xâu
"$$$".
b) Sắp xếp danh sách học sinh theo thứ tự giảm dần của
Điểm toán và hiển thị danh sách này ra màn hình.
24
Lời giải
25
#include 
#include 
#include 
typedef struct{
char maso[8];
char hoten[30];
float diemtoan;
}HOCSINH;
HOCSINH ds[30], tg;
int main(int argc, char *argv[])
{
int i,j,n = 0;
float diemtoan;
char maso[8];
char hoten[30];
26
for(i=0;i<30;i++){
printf("\nNhap ma so SV thu %d: ",i+1);fflush(stdin);scanf("%s",maso);
/*Neu nhap ma so la xau "$$$" thi dung viec nhap*/
if(strcmp(maso,"$$$")==0)break; 
n++;
strcpy(ds[i].maso,maso);
printf("\nNhap ho ten: ");fflush(stdin);gets(hoten);
strcpy(ds[i].hoten,hoten);
printf("\nNhap diem toan: ");scanf("%f",&diemtoan);
ds[i].diemtoan = diemtoan;
}
/*Sap xep danh sach hoc sinh theo thu tu khong tang cua diem toan*/
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
if(ds[i].diemtoan < ds[j].diemtoan){
tg = ds[i];
ds[i] = ds[j];
ds[j] = tg; 
}
27
/*Hien thi danh sach ra man hinh*/ 
printf("\n DANH SACH HOC SINH SAU KHI SAP XEP THEO DIEM TOAN");
printf("\n+--------+------------------------------+---------+");
printf("\n| Ma so | Ho ten |Diem toan|");
printf("\n+--------+------------------------------+---------+");
for(i=0;i<n;i++) 
printf("\n|%8s|%30s|%9.1f|",ds[i].maso,ds[i].hoten,ds[i].diemtoan);
printf("\n+--------+------------------------------+---------+\n");
system("PAUSE");
return 0;
}
28
Hỏi - đáp

File đính kèm:

  • pdfhe_thong_thong_tin_chuong_7_cau_truc_struct.pdf