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
24 trang | 
Chia sẻ: lylyngoc | Lượt xem: 1841 | 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();
}