Trong việc xây dựng chương trình,
nhiều khi chỉ với các kiểu dữ liệu đơn
giản ta chưa thể quản lý hết các dữ liệu
Vậy cần có kiểu dữ liệu phức tạp hơn
để quản lý dữ liệu; một trong các kiểu
dữ liệu này gọi là dữ liệu kiểu cấu trúc
24 trang |
Chia sẻ: lylyngoc | Lượt xem: 1666 | Lượt tải: 1
Bạn đang xem trước 20 trang tài liệu Chương 10: Kiểu Cấu trúc, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
C10: Kiểu Cấu trúc
1. Khái niệm
2. Khai báo
3. Khởi tạo và gán giá trị
4. Truy xuất
5. Cấu trúc của cấu trúc
6. Cấu trúc – mảng
7. Tham số kiểu cấu trúc
8. union
1. Khái niệm
Trong việc xây dựng chương trình,
nhiều khi chỉ với các kiểu dữ liệu đơn
giản ta chưa thể quản lý hết các dữ liệu
Vậy cần có kiểu dữ liệu phức tạp hơn
để quản lý dữ liệu; một trong các kiểu
dữ liệu này gọi là dữ liệu kiểu cấu trúc
1. Khái niệm
Cấu trúc là tập hợp của nhiều kiểu dữ
liệu khác nhau
Mỗi kiểu dữ liệu tạo nên cấu trúc gọi là
một trường (field)
Tổng hợp các field gọi là bản ghi
Ví dụ 1:
Giả sử việc quản lý Sinh viên cần:
Dữ liệu Kiểu dữ liệu
tên sinh viên chuỗi
điểm số thực
nam Đ/S – T-F
Ví dụ 2:
Quản lý hồ sơ Công chức cần:
tên công chức
hệ số lương
ngày vào cơ quan
khen thưởng
…..
Kiểu dữ liệu?
2. Khai báo
struct
{
[ ,];
.
.
.
} [] ;
Ví dụ 1:
struct sinhvien
{
char ten[30], nam[1];
floaft diem;
} sinhvien1, sinhvien2;
Ví dụ 2:
struct congchuc
{
char ten[30], khen[50], ngay[8];
floaft hsl;
} cc1, cc2, cc3;
Ví dụ 3:
struct ngay
{
int d;
int m;
int y;
} ngay1, ngay2;
3. Khởi tạo giá trị
Việc khởi tạo giá trị cho biến cấu trúc được thực hiện
khi khai báo biến cấu trúc
Các trường của cấu trúc được khởi tạo phải đặt giữa
2 dấu { }, chúng phân cách bởi dấu phảy (,)
Ví dụ:
struct NgayThang
{
unsigned char Ngay;
unsigned char Thang;
unsigned int Nam;
};
Khởi tạo biến cấu trúc NgS:
NgayThang NgS ={29, 8, 1986};
4. Truy xuất
Cú pháp:
.
Ví dụ:
struct sinhvien
{
char ten[30], nam[1];
floaft diem;
} sinhvien1, sinhvien2;
sinhvien1.ten
sinhvien1.diem
sinhvien1.nam
Ví dụ:
#include
#include
#include
struct SinhVien
{
char MSSV[10];
char HoTen[40];
unsigned int NamSinh ;
char DiaChi[40];
};
void main()
{
SinhVien SV, s;
cout>SV.MSSV;
cout>SV.HoTen;
cout>SV.NamSinh;
cout>SV.DiaChi;
getch();
}
5. Cấu trúc của cấu trúc
Xét việc quản lý sinh viên, cần:
tên
điểm
ngày sinh (ngày-tháng-năm)
Vậy: Cấu trúc sinh viên gồm các trường: Tên,
điểm, ngày sinh. Trong đó ngày sinh là dữ liệu
kiểu cấu trúc với 3 trường là ngày, tháng, năm
5. Cấu trúc của cấu trúc
struct ngaysinh
{
int ngay, thang, nam;
};
struct sinhvien
{
char ten[30];
floaft diem;
ngs ngaysinh;
} sv1, sv2;
Nguyễn Văn Công
8.7
26
11
2008
6. Cấu trúc - mảng
Khi quản lý thông tin về 1 đối tượng thì
kiểu cấu trúc là rất thuận lợi
Khi quản lý nhiều thông tin giống nhau
về kiểu dữ liệu thì kiểu mảng là phù
hợp
Quản lý nhiều đối tượng (mỗi đối tượng
có nhiều thông tin khác nhau) thì?
Xét mảng 1 chiều A gồm 5
phần tử
Khai báo
struct
{
[ ,];
.
.
.
};
[spt] ;
Ví dụ:
struct danhsach
{
int sbd;
char hoten[25];
float toan,ly,hoa;
};
danhsach bangdiem[50];
Ví dụ:
#include
#include
#define N_MOVIES 5
struct movies
{
char title [50];
int year;
} films[N_MOVIES];
void main ()
{
int i;
for (i=0; i<N_MOVIES; i++)
{
cout >films[i].title;
cout >films[i].year;
}
getch();
}
7. Tham số kiểu cấu trúc
Việc truyền – nhận tham số kiểu cấu
trúc cũng giống như các tham số kiểu
vô hướng khác
Có hình thức:
Tham trị
Tham biến
Tham trỏ
8. Union
Là kiểu dữ liệu sử dụng cùng 1 vùng
nhớ cho nhiều biến
Các biến có thể có kiểu dữ liệu khác
nhau
Tại mỗi thời điểm chỉ sử dụng được 1
trong những biến dùng chung vùng nhớ
này
Khai báo
union
{
;
;
…..
} ;
union
{
char a;
int b;
floaft n;
} cam, buoi;
Ví dụ: Chương trình tính diện tích
hình chữ nhật, hình tròn, hình thang
#include
#include
#include
union dagiac
{
char loai;
struct { float dai,rong;} cn;
struct {float bankinh; } tr;
struct {float daylon,daynho,cao;} th;
};
void main()
{
dagiac dg;
clrscr();
cout >dg.loai;
switch (toupper(dg.loai))
{
case 'C':
cout >dg.cn.dai;
cout >dg.cn.rong;
cout <<"Dien tich la: "<<(dg.cn.dai*dg.cn.rong);
break;
case 'T':
cout >dg.th.daylon;
cout >dg.th.daynho;
cout >dg.th.cao;
cout <<"Dien tich la: "<<((dg.th.daylon+dg.th.daynho)*dg.th.cao/2);
break;
case 'R':
cout >dg.tr.bankinh;
cout <<"Dien tich la: "<<(dg.tr.bankinh*dg.tr.bankinh*3.14);
break;
default:
cout <<"Du lieu khong chinh xac";
}
getch();
}