Bài giảng Giới thiệu lập trình - Cấu trúc struct - Lê Nguyên Khôi

Tóm tắt Bài giảng Giới thiệu lập trình - Cấu trúc struct - Lê Nguyên Khôi: ...Khởi Tạo 7 struct sinhvien { string MSSV; string HoTen; string NgaySinh; bool GioiTinh; } ; int main() { struct sinhvien sv1; struct sinhvien sv2 = { "12345678" , "Trach Van Doanh" , "01/01/1999" , true } ; } Giới Thiệu Lập Trình Truy Cập Thành Phần struct 8  Sử dụng toán tử chấm ...Trúc struct – Phép Gán 11  Với cấu trúc struct ngaythangnam  Khai báo 2 biến cấu trúc struct ngaythangnam homQua, homNay;  Cả 2 biến đều kiểu struct ngaythangnam  Thực hiện phép gán đơn giản hợp lệ homQua = homNay; Sao chép giá trị biến thành phần homNay của cho các biến thành phần củ...4 struct toado { int x , y ; } ; typedef struct toado ToaDo; void _nhapToaDo ( ToaDo & td ) ; void _inToaDo ( const ToaDo & td ) ; int main ( ) { ToaDo td1; _nhapToaDo ( td1 ) ; _inToaDo ( td1 ) ; ToaDo td2; _nhapToaDo ( td2 ) ; _inToaDo ( td2 ) ; } Giới Thiệu Lập Trình Truyền Biến Cấu...

pdf24 trang | Chia sẻ: havih72 | Lượt xem: 232 | Lượt tải: 0download
Nội dung tài liệu Bài giảng Giới thiệu lập trình - Cấu trúc struct - Lê Nguyên Khôi, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
Giới Thiệu Lập Trình
Cấu Trúc struct
TS. Lê Nguyên Khôi
Trường Đại học Công nghệ, ĐHQGHN
Nội Dung
1
 Cấu trúc struct
 Kiểu dữ liệu nhóm
 Định nghĩa
 Khai báo / Khởi tạo
 Sử dụng
 Truyền biến cho hàm
Giới Thiệu Lập Trình
Kiểu Dữ Liệu Nhóm
2
 Kiểu Mảng:
 Tập hợp dữ liệu cùng kiểu
 Khai báo sau đó sử dụng như biến đơn lẻ
 Truyền cho hàm: truyền địa chỉ
 Kiểu cấu trúc struct:
 Tập hợp dữ liệu có thể khác kiểu
 Phải định nghĩa trước khi sử dụng
 Khai báo sau đó sử dụng như biến đơn lẻ
 Truyền cho hàm: giống biến đơn lẻ
Giới Thiệu Lập Trình
Kiểu DL Cấu Trúc struct
3
 Tập hợp dữ liệu, có thể khác kiểu, được nhóm
 Mỗi dữ liệu được lưu trong một biến (trường)
 Mỗi dữ liệu có kiểu dữ liệu cụ thể
 Hỗ trợ tổ chức dữ liệu phức tạp vào cùng một 
đối tượng
 Hỗ trợ làm việc giữa các dữ liệu trên đối tượng
Giới Thiệu Lập Trình
Kiểu DL Cấu Trúc struct – Ví Dụ
4
Tên Trường Kiểu Dữ Liệu Dữ Liệu
MSSV string 12345678
HoTen string Trach Van Doanh
NgaySinh string 01/01/1999
GioiTinh bool true
Giới Thiệu Lập Trình
Kiểu DL Cấu Trúc struct – Định Nghĩa
5
 Định nghĩa bởi từ khóa struct
 Định nghĩa toàn cục
 Ngoài và trước int main()
 Tất cả các hàm đều hiểu
 Không được cấp phát bộ nhớ
 Chỉ có mục đích miêu tả cấu trúc
 Chỉ cấp phát bộ nhớ
 Khi khai báo biến kiểu cấu trúc
 Miêu tả:
 Các thành phần (trường) và kiểu của chúng
Giới Thiệu Lập Trình
struct sinhvien – Định Nghĩa
6
struct sinhvien {
string MSSV;
string HoTen;
string NgaySinh;
bool GioiTinh;
} ;
Giới Thiệu Lập Trình
Tên Trường Kiểu Dữ Liệu Dữ Liệu
MSSV string 12345678
HoTen string Trach Van Doanh
NgaySinh string 01/01/1999
GioiTinh bool true
struct sinhvien – Khai Báo/Khởi Tạo
7
struct sinhvien {
string MSSV;
string HoTen;
string NgaySinh;
bool GioiTinh;
} ;
int main() {
struct sinhvien sv1;
struct sinhvien sv2 = { "12345678" ,
"Trach Van Doanh" ,
"01/01/1999" ,
true } ;
}
Giới Thiệu Lập Trình
Truy Cập Thành Phần struct
8
 Sử dụng toán tử chấm (.)
sv1 . MSSV
sv1 . HoTen
sv1 . NgaySinh
sv1 . GioiTinh
 Gọi tên là “biến thành phần”
 Các thành phần của biến kiểu cấu trúc
 Kiểu cấu trúc struct khác nhau có thể có cùng tên 
biến thành phần
Biến thành phần là biến cục bộ
Giới Thiệu Lập Trình
Truy Cập Thành Phần struct – Ví Dụ
9
struct sinhvien {
string MSSV;
string HoTen;
string NgaySinh;
bool GioiTinh;
} ;
int main() {
struct sinhvien sv1;
sv1.MSSV = "12345678";
sv1.HoTen = "Trach Van Doanh";
sv1.NgaySinh = "01/01/1999";
sv1.GioiTinh = true;
}
Giới Thiệu Lập Trình
struct ngaythangnam
10
struct ngaythangnam {
int ngay;
int thang;
int nam;
} ;
int main() {
struct ngaythangnam homNay = {1, 4, 2000};
struct ngaythangnam ngayMai;
ngayMai.ngay = homNay.ngay + 1;
ngayMai.thang = homNay.thang;
ngayMai.nam = homNay.nam;
}
Giới Thiệu Lập Trình
Cấu Trúc struct – Phép Gán
11
 Với cấu trúc struct ngaythangnam
 Khai báo 2 biến cấu trúc
struct ngaythangnam homQua, homNay;
 Cả 2 biến đều kiểu struct ngaythangnam
 Thực hiện phép gán đơn giản hợp lệ
homQua = homNay;
Sao chép giá trị biến thành phần homNay của cho 
các biến thành phần của homQua, tương đương
homQua.ngay = homNay.ngay;
homQua.thang = homNay.thang;
homQua.nam = homNay.nam;
Giới Thiệu Lập Trình
Cấu Trúc struct – Phép Toán Khác
12
 Các phép toán khác không được định nghĩa 
cho kiểu cấu trúc struct
 So sánh bằng/khác (==, !=) 
(homQua == homNay biểu thức không hợp lệ)
 So sánh thứ tự (, ...) 
(homQua < homNay biểu thức không hợp lệ) 
 Các phép toán 
(homQua + homNay biểu thức không hợp lệ) 
 Nhập & in
(cin & cout không hợp lệ)
Giới Thiệu Lập Trình
Truyền Biến Cấu Trúc struct Cho Hàm
13
struct toado {
int x, y;
} ;
typedef struct toado ToaDo;
void _nhapToaDo(ToaDo & td) {
cin >> td.x >> td.y;
}
void _inToaDo(const ToaDo & td) {
cout << "(" << td.x << "," << td.y << ")";
}
Giới Thiệu Lập Trình
Truyền Biến Cấu Trúc struct Cho Hàm
14
struct toado { int x , y ; } ;
typedef struct toado ToaDo;
void _nhapToaDo ( ToaDo & td ) ;
void _inToaDo ( const ToaDo & td ) ;
int main ( ) {
ToaDo td1;
_nhapToaDo ( td1 ) ;
_inToaDo ( td1 ) ;
ToaDo td2;
_nhapToaDo ( td2 ) ;
_inToaDo ( td2 ) ;
}
Giới Thiệu Lập Trình
Truyền Biến Cấu Trúc struct Cho Hàm
15
void _trungDiem ( const ToaDo & td1 ,
const ToaDo & td2 ,
ToaDo & trungDiem ) {
trungDiem.x = ( td1.x + td2.x ) / 2;
trungDiem.y = ( td1.y + td2.y ) / 2;
}
ToaDo * _trungDiem ( const ToaDo & td1 ,
const ToaDo & td2 ) {
ToaDo * trungDiem = new ToaDo;
(*trungDiem).x = ( td1.x + td2.x ) / 2;
(*trungDiem).y = ( td1.y + td2.y ) / 2;
return trungDiem;
}
Giới Thiệu Lập Trình
Truyền Biến Cấu Trúc struct Cho Hàm
16
int main ( ) {
ToaDo td1 ;
_nhapToaDo ( td1 ) ;
ToaDo td2 ;
_nhapToaDo ( td2 ) ;
ToaDo tdTrgD1 ;
_trungDiem ( td1 , td2 , tdTrgD1 ) ;
ToaDo * tdTrgD2 = new ToaDo;
tdTrgD2 = _trungDiem ( td1 , td2 ) ;
_inToaDo ( tdTrgD1 ) ;
_inToaDo ( *tdTrgD2 ) ;
}
Giới Thiệu Lập Trình
Cấu Trúc struct & Con Trỏ
17
 Giống các kiểu dữ liệu khác:
 struct toado * là con trỏ tới struct toado
 Toán tử & trả về địa chỉ của biến cấu trúc
 Theo thứ tự ưu tiên: “.” được ưu tiên trước “*”
 Nếu td là con trỏ tới cấu trúc struct toado:
 *p.x tương đương *(p.x) không hợp lệ
 Phải sử dụng (*p).x
 Để thuận tiện, có thể dùng toán tử ->:
kết hợp con trỏ (*) với truy cập trường (.)
p->a tương đương (*p).a
Giới Thiệu Lập Trình
struct thoigian
18Giới Thiệu Lập Trình
struct thoigian
19Giới Thiệu Lập Trình
struct sohuuti
20Giới Thiệu Lập Trình
struct sohuuti
21Giới Thiệu Lập Trình
struct dathuc
22Giới Thiệu Lập Trình
struct dathuc
23Giới Thiệu Lập Trình

File đính kèm:

  • pdfbai_giang_gioi_thieu_lap_trinh_cau_truc_struct_le_nguyen_kho.pdf