LẬP TRÌNH CĂN BẢN

Phần 2 - Chương 9 KIỂU CẤU TRÚC N.C. Danh

1

ươ

N i dung ch

ng này

ể ấ

ể ấ

 Ki u c u trúc trong C ế  Các thao tác trên bi n ki u c u trúc  Con tr  và c u trúc

2

ể ấ

Ki u c u trúc trong C

 Khái niệm  Định nghĩa kiểu cấu trúc  Khai báo biến cấu trúc

3

Khái niệm

 Ki u c u trúc (struct) là ki u d  li u bao  , m i thành ph n đ

ể ữ ệ ỗ ộ ề ồ g m nhi u thành  ầ ượ ọ c g i là m t

ể ấ ầ ườ ể ph n có ki u khác nhau tr ng (field)

ầ ử ể ớ ơ ể có cùng ki u)

ả  Nó khác v i ki u m ng (n i mà các ph n t  Ví d :ụ

1 struct:

4

1 mảng:

Định nghĩa kiểu cấu trúc + Khai báo biến cấu trúc (1)

 Cách 1:

struct SinhVien{

struct  

{ ườ ườ

ng 1>; ng 2>;

NgayThang

char MSSV[10]; char HoTen[40]; struct

NgaySinh;

ng n>;

int Phai; char DiaChi[40];

ườ ế

ể  ể  ể  

}; (cid:0) Khaibáo biến: struct NgayThang NgaySinh; struct SinhVien SV;

ế

struct      tên_bi n;

5

Ví dụ: struct NgayThang{ unsigned char Ngay; unsigned char Thang; unsigned int Nam; };

Định nghĩa kiểu cấu trúc + Khai báo biến cấu trúc (2)

 Chú ý:

 struct không tên:

A và B là các struct có 2 thành phần x và y.

struct này không có tên, nên ngoài A và B, ta không thể định nghĩa thêm các biến khác được.

 Tuy nhiên

A và B là các biến có kiểu struct point.

6

Sau này ta có thể khai báo thêm các biến khác có kiểu struct point này.

Định nghĩa kiểu cấu trúc + Khai báo biến cấu trúc (3)

 Cách 2:

typedef struct{

ườ ườ

ng 1> ng 2>

; ;

char MSSV[10]; char HoTen[40]; NgayThang NgaySinh; int Phai; char DiaChi[40];

ng n>

;

} SinhVien;

typedef struct {        ể  ể  ể  ;

(cid:0) Khai báo biến:

NgayThang NgaySinh; SinhVien SV;

ế

    tên_bi n;

7

Ví dụ: typedef struct{ unsigned char Ngay; unsigned char Thang; unsigned int Nam; } NgayThang;

ể ấ

ế

Các thao tác trên bi n ki u c u  trúc

ườ

ế ấ

ng c a bi n c u trúc

ấ ế ừ  Truy xu t đ n t ng tr ở ạ ấ  Kh i t o c u trúc

8

ấ ế ừ

ườ

ng (field)

ế ấ

Truy xu t đ n t ng tr ủ c a bi n c u trúc (1)

 Cú pháp:     .

ế ấ ườ ng>

 Ví d  1: ụ Ch

ươ ọ ữ ệ ừ bàn phím cho

9

ế ẩ ng trình cho phép đ c d  li u t ế ẩ bi n m u tin SinhVien và in bi n m u tin đó lên màn hình:

ấ ế ừ

ườ

ng (field)

ế ấ

Truy xu t đ n t ng tr ủ c a bi n c u trúc (2)

10

ấ ế ừ

ườ

ng (field)

ế ấ

Truy xu t đ n t ng tr ủ c a bi n c u trúc (3)

 Kết quả của 1 lần nhập:

11

ấ ế ừ

ườ

ng (field)

ế ấ

Truy xu t đ n t ng tr ủ c a bi n c u trúc (4)

 L u ýư :

 Các bi n c u trúc có th  gán cho nhau

 Ví d : ụ

ế ấ ể

ộ ấ ể ấ ị s=SV; // gán đ  l y giá tr  toàn b  c u trúc

 Ta không th  th c hi n đ

ế ấ

ố ọ

ể ự ệ ượ c các thao tác sau đây cho

12

ế ấ bi n c u trúc: ậ ấ ử ụ  S  d ng các hàm xu t nh p trên bi n c u trúc ệ  Các phép toán quan h , các phép toán s  h c và logic

ở ạ ấ

Kh i t o c u trúc

 Biến cấu trúc có thể được khởi tạo giá trị ban

đầu lúc khai báo

 Ví dụ:

13

struct NgayThang NgaySinh ={29, 8, 1986};

Con tr  và c u trúc

ỏ ể ấ

ầ ủ ấ

ượ

 Khai báo ử ụ  S  d ng các con tr  ki u c u trúc   Truy c p các thành ph n c a c u trúc đang đ

c

qu n lý b i con tr

14

Khai báo (1)

 Cú pháp:

 Ví d  1: ụ

ế ấ ỏ struct  * ;

struct NgayThang *p;

ho cặ

15

ế NgayThang *p; // N u có dùng typedef

Khai báo (2)

 Ví dụ 2:

 Truy cập đến các trường:

 Nếu dùng con trỏ thì:

16

ỏ ể ấ

ử ụ

S  d ng các con tr  ki u c u trúc

 Có 2 cách:

 Phải cấp phát bộ nhớ cho nó  Cho nó chỉ vào (chứa địa chỉ) biến đang tồn tại

 Ví dụ:

struct NgayThang *p;  … p=(struct NgayThang *)malloc(sizeof(struct NgayThang)); p->Ngay=29; p->Thang=8; p->Nam=1986; Hoặc struct NgayThang Ngay = {29,8,1986}; p = &Ngay;

17

ầ ủ ấ

ậ ượ

Truy c p các thành ph n c a c u trúc  đang đ

ở c qu n lý b i con tr  (1)

 V i khai báo sau:

struct NgayThang *p;

 Ta có th  truy c p đ n các tr

p­>Ngay     p­>Thang

ho cặ

(*p).Ngay    (*p).Thang

18

ể ế ậ ườ ủ ư ng c a nó nh  sau:

ầ ủ ấ

ậ ượ

Truy c p các thành ph n c a c u trúc  đang đ

ở c qu n lý b i con tr  (3)

 Ví dụ

19

Hết chương

20