240 likes | 454 Views
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.
E N D
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ệuKiểu dữ liệu • Tên sinh viên chuỗi • Điểm số thực • Giới tính Đ/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 <tên_cấu_trúc> { [<kiểu_dl> <tên_biến1>,<tên_biến2>]; . . . } [<tên_biến_kiểu_cấu_trúc>] ;
Ví dụ 1: struct sinhvien { char ten[30], nam[1]; float 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: <tên_biến_cấu_trúc>.<tên_trường> • Ví dụ: struct sinhvien { char ten[30], nam[1]; floaft diem; } sinhvien1, sinhvien2; sinhvien1.ten sinhvien1.diem sinhvien1.nam
Ví dụ: void main() { SinhVien SV, s; cout<<"Nhap MSSV:";cin>>SV.MSSV; cout<<"Nhap ten:";cin>>SV.HoTen; cout<<"Nam sinh:";cin>>SV.NamSinh; cout<<"Dia chi: "; cout>>SV.DiaChi; getch(); } #include<iostream.h> #include<conio.h> #include<string.h> struct SinhVien { char MSSV[10]; char HoTen[40]; unsigned int NamSinh ; char DiaChi[40]; };
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
Nguyễn Văn Công 8.7 26 11 2008 5. Cấu trúc của cấu trúc struct ngaysinh { int ngay, thang, nam; }; struct sinhvien { char ten[30]; float diem; ngs ngaysinh; } sv1, sv2;
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ì?
Khai báo struct <tên_cấu_trúc> { [<kiểu_dl> <tên_biến1>,<tên_biến2>]; . . . }; <tên_cấu_trúc> <tên_biến_mảng>[spt] ;
Ví dụ: struct danhsach { int sbd; char hoten[25]; float toan,ly,hoa; }; danhsach bangdiem[50];
#include <iostream.h> #include <conio.h> #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 << “Title: ";cin>>films[i].title; cout << “Year: ";cin>>films[i].year; } getch(); } Ví dụ:
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 duy nhất 1 trong những biến dùng chung vùng nhớ này
Khai báo union { <Kiểu_dl> <tên_trường1>; <Kiểu_dl> <tên_trường2>; ….. } <tên_biến>; 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 <iostream.h> #include <conio.h> #include <ctype.h> 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 <<"loai hinh muon tinh (c(chu nhat)/t(thang)/r(tron)";cin >>dg.loai; switch (toupper(dg.loai)) { case 'C': cout <<"Cho biet chieu dai: ";cin >>dg.cn.dai; cout <<"Cho biet chieu rong: ";cin >>dg.cn.rong; cout <<"Dien tich la: "<<(dg.cn.dai*dg.cn.rong); break; case 'T': cout <<"Cho biet day lon: "; cin >>dg.th.daylon; cout <<"Cho biet day nho: "; cin >>dg.th.daynho; cout <<"Cho biet chieu cao: ";cin >>dg.th.cao; cout <<"Dien tich la: "<<((dg.th.daylon+dg.th.daynho)*dg.th.cao/2); break; case 'R': cout <<"Cho biet ban kinh: "; cin >>dg.tr.bankinh; cout <<"Dien tich la: "<<(dg.tr.bankinh*dg.tr.bankinh*3.14); break; default: cout <<"Du lieu khong chinh xac"; } getch(); }