Bài giảng về kiểu dữ liệu có cấu trúc (c)

Chia sẻ bởi Trần Văn Chung | Ngày 29/04/2019 | 65

Chia sẻ tài liệu: Bài giảng về kiểu dữ liệu có cấu trúc (c) thuộc Bài giảng khác

Nội dung tài liệu:

KIỂU DỮ LIỆU CÓ CẤU TRÚC
CÁC KIỂU DỮ LIỆU ĐÃ HỌC
Kiểu chuỗi
Kiểu mảng
Giải
quyết
Kiểu phần tử chỉ có
một thành phần
Kiểu phần tử có
nhiều thành phần
?
Kiểu dữ liệu có cấu trúc
Để gải quyết dạng bài toán về dữ liệu có nhiều thành phần ta cần có một loại cấu trúc lưu trữ khác đó là kiểu dữ liệu có cấu trúc:
Ví dụ: Giải quyết bài toán về nhân sự, điểm thi tuyển sinh, tính lương…..
Kiểu cấu trúc (Structure) 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)
I.KIỂU CẤU TRÚC TRONG C
1. Khái niệm
Cách 1:
struct
{
;
;
……..
;
}; [ds các biến cấu trúc];
struct: là từ khoá



Là các kiểu dữ liệu
thành phần của cấu trúc.


…………

Là tên các thành phần
của cấu trúc
I.2 Định nghĩa kiểu cấu trúc
Cách 2: Sử dụng từ khóa typedef để định nghĩa kiểu:
typedef struct
{
;
;
……..
;
} ;
Ví dụ 1: Để quản lý ngày, tháng, năm của một ngày trong năm ta có thể khai báo kiểu cấu trúc gồm 3 thông tin: ngày, tháng, năm.
Cách 1:
struct NgayThang
{
unsigned char Ngay;
unsigned char Thang;
unsigned int Nam;
};
Cách 2:
typedef struct
{
unsigned char Ngay;
unsigned char Thang;
unsigned int Nam;
} NgayThang;
Ví dụ 2: Mỗi sinh viên cần được quản lý bởi các thông tin: mã số sinh viên, họ tên, ngày tháng năm sinh, giới tính, địa chỉ thường trú. Lúc này ta có thể khai báo một struct gồm các thông tin trên.
Cách 1:
struct SinhVien
{
char MSSV[10];
char HoTen[40];
struct NgayThang NgaySinh;
int Phai;
char DiaChi[40];
};
Cách 2
typedef struct
{
char MSSV[10];
char HoTen[40];
NgayThang NgaySinh;
int Phai;
char DiaChi[40];
} SinhVien;
a. Đối với cấu trúc được định nghĩa theo cách 1:
struct […];
Ví dụ: Khai báo biến NgaySinh có kiểu cấu trúc NgayThang; biến SV có kiểu cấu trúc SinhVien.
struct NgayThang NgaySinh;
struct SinhVien SV;
I. 3. KHAI BÁO BIẾN CÓ CẤU TRÚC
b. Đối với các cấu trúc được định nghĩa theo cách 2:
,[…];
Ví dụ: Khai báo biến NgaySinh có kiểu cấu trúc NgayThang; biến SV có kiểu cấu trúc SinhVien
NgayThang NgaySinh;
SinhVien SV;
II.1 Truy xuất đến từng trường của biến cấu trúc.
Cú pháp: .
Vi dụ: Lấy họ tên, địa chỉ của sinh viên trong cấu trúc SV:
SV.hoten; /* lấy họ tên sinh vien*/
SV.DiaChi; /* lấy địa chỉ sinh viên*/
Lấy ngày sinh của sinh viên làm thế nào???
II. CÁC THAO TÁC TRÊN BIẾN KIỂU CẤU TRÚC
. .< Tên trườngcon>
Lấy ngày, tháng, năm sinh của sinh viên làm như sau:
SV.NgaySinh.ngay; /*Lấy ngày sinh*/
SV.NgaySinh.Thang; /*Lấy tháng sinh*/
SV.NgaySinh.Nam; /*Lấy Năm sinh*/
II. 2 Truy xuất đến từng trường của biến
cấu trúc có một cấu trúc lồng nhau.
struct * ;
Chú ý: Tên cấu trúc đã được khai báo trước đó theo một trongb 2 cách.
Ví dụ: Ta có thể khai báo một con trỏ cấu trúc kiểu NgayThang như sau:
struct NgayThang *p;
III. CON TRỎ CẤU TRÚC
III.1 Khai báo
Ví dụ: Sau khi khởi tạo giá trị của cấu trúc:
struct NgayThang Ngay = {20,04,2008};
p = &Ngay; /*gán p cho địa chỉ biến ngày*/
Lúc này biến con trỏ p đã chứa địa chỉ của Ngay
III.2 Sử dụng các con trỏ kiểu cấu trúc
Truy cập đến từng trường của cấu trúc thông qua con trỏ của nó.
Cú pháp:
-> ;
III.3 Truy cập các thành phần của cấu trúc
đang được quản lý bởi con trỏ.
Ví dụ:
typedef struct
{
unsigned char Ngay;
unsigned char Thang;
unsigned int Nam;
} NgayThang;
……………
NgayThang *p; /* khai báo con trỏ p*/
P->ngay; /* lấy ngày*/
P->thang; /* lấy tháng*/
P->nam; /* lấy năm*/
Nếu theo cách truy cập theo vùng nhớ con trỏ:
(*contrỏ).trường cần truy cập;
Truy cập qua vùng nhớ con trỏ thì ta làm như sau:
typedef struct
{
unsigned char Ngay;
unsigned char Thang;
unsigned int Nam;
} NgayThang;
NgayThang *p; /* khai báo con trỏ p có kiểu ngày tháng*/
(*p).ngay; /* lấy ngày*/
(*p).thang; /* lấy tháng*/
(*p).nam ; /*lấy năm*/
* Một số tài liệu cũ có thể bị lỗi font khi hiển thị do dùng bộ mã không phải Unikey ...

Người chia sẻ: Trần Văn Chung
Dung lượng: | Lượt tài: 1
Loại file:
Nguồn : Chưa rõ
(Tài liệu chưa được thẩm định)