180 likes | 361 Views
CHƯƠNG VIII:CẤU TRÚC. KIỂU CẤU TRÚC (STRUCTURE). Khái niệm Kiểu cấu trúc (còn gọi kiểu cấu trúc là kiểu record) là kiểu dữ liệu bao gồm nhiều thành phần có kiểu khác nhau, mỗi thành phần được gọi là một trường (field)
E N D
KIỂU CẤU TRÚC (STRUCTURE) Khái niệm • Kiểu cấu trúc (còn gọi kiểu cấu trúc là kiểu record) là kiểu dữ liệu bao gồm nhiều thành phần có kiểu khác nhau, mỗi thành phần được gọi là một trường (field) • Sự khác biệt giữa kiểu cấu trúc và kiểu mảng là: các phần tử của mảng có cùng kiểu,phần tử của kiểu cấu trúc có thể có kiểu khác nhau
Định nghĩa kiểu cấu trúc struct <Tên cấu trúc> { <Kiểu> <Trường 1> ; <Kiểu> <Trường 2> ; …….. <Kiểu> <Trường n> ; };
Ví dụ struct products { char name [30]; float price; } ;
Khai báo biến cấu trúc • struct <Tên cấu trúc> • { • <Kiểu> <Trường 1> ; • <Kiểu> <Trường 2> ; • …….. • <Kiểu> <Trường n> ; • }danh sách tên biến cấu trúc;
Ví dụ: Để khai báo các đối tượng apple, orange và melon trong ví dụ trên, ta cũng có thể làm theo cách sau: struct products { char name [30]; float price; } apple, orange, melon;
Truy xuất đến từng trường của biến cấu trúc • Cú pháp: <Biến cấu trúc>.<Tên trường>
Ví dụ:Viết chương trình cho phép đọc dữ liệu từ bàn phím cho biến mẩu tin SinhVien và in biến mẩu tin đó lên màn hình: #include<iostream.h> #include<conio.h> #include<string.h> struct SinhVien { char MSSV[10]; char HoTen[40]; unsigned int NamSinh ; char DiaChi[40]; };
Ví dụ (tt) void InSV(SinhVien sv) { cout<<"MSSV: “<<sv.MSSV<<endl; cout<<”Ho va ten: “<<sv.HoTen<<endl; cout<<“ Nam Sinh:”<<sv.NamSinh <<endl; cout<<”Dia Chi: “<<sv.DiaChi; }
Ví dụ (tt) void main() { SinhVien SV, s; cout<<"Nhap MSSV: "; cin>>SV.MSSV; cout<<"Nhap Ho va ten: "; cin>>SV.HoTen; cout<<"Nam sinh: "; cin>>SV.NamSinh; cout<<"Dia chi: "; cout>>SV.DiaChi; InSV(SV); getch(); }
Khởi tạo giá trị cho biến cấu trúc • Việc khởi tạo giá trị cho biến cấu trúc được thực hiện trong lúc khai báo biến cấu trúc. • Các trường của cấu trúc được khởi tạo đặt giữa 2 dấu { }, chúng được phân cách nhau 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 NgaySinh: NgayThang NgaySinh ={29, 8, 1986};
Mảng cấu trúc • Khi cần lưu trữ thông tin của nhiều đối tượng, thì biến cấu trúc là một công cụ rất thuận lợi. • Ví dụ: Cần lưu trữ thông tin họ tên, điểm môn toán, điểm môn hóa, điểm môn lý của các thí sinh trong một kỳ thi. • Để làm công việc trên, thay vì phải sử dụng 3 mảng một chiều để lưu trữ ta có thể dùng một mảng một chiều kiểu cấu trúc để lưu trữ các thông tin này • Khi đó mỗi phần tử của mảng là một biến kiểu cấu trúc. Ta có thể khai báo một mảng cấu trúc như sau:
Ví dụ struct danhsach { int sbd; char hoten[25]; float toan,ly,hoa; } danhsach bangdiem[50];
Viết chương trình cho phép nhập và in bảng điểm của thí sinh lên màn hình const int MAXNAME=25,NUMREC=3; struct danhsach { int sbd; char hoten[MAXNAME]; float toan,ly,hoa; };
void main() { danhsach bangdiem[NUMREC]; int i; clrscr(); cout <<"NHAP BANG DIEM CUA SINH VIEN\n"; for (i=0;i<NUMREC;i++) { cout <<"So bao danh: "; cin>> bangdiem[i].sbd; cin.ignore(100,'\n'); cout <<"Ho va ten: "; cin.getline(bangdiem[i].hoten,MAXNAME); if(strlen(bangdiem[i].hoten)>=MAXNAME-1) cin.ignore(100,'\n'); cout <<"Diem toan: "; cin >> bangdiem[i].toan; cout <<"Diem ly: "; cin >> bangdiem[i].ly; cout <<"Diem hoa "; cin >> bangdiem[i].hoa; }
clrscr(); cout <<" ------BANG DIEM CUA SINH VIEN-----\n"; cout <<"So bao danh Ho ten Diem toan Diem ly Diem hoa\n"; for (i=0;i<NUMREC;i++) { cout <<setw(5)<<bangdiem[i].sbd<<setw(20) <<bangdiem[i].hoten<<setw(10) <<bangdiem[i].toan<<setw(12) <<bangdiem[i].ly<<setw(14) << bangdiem[i].hoa<<endl; } getch(); }