Thông tin tài liệu:
Mục đích của chương học "Dữ liệu kiểu cấu trúc" này nhằm giúp sinh viên có thể biết cách khai báo các kiểu dữ liệu phức tạp: cấu trúc; biết cách biểu diễn các kiểu danh sách liên kết nhờ cấu trúc tự trỏ; biết được các thao tác trên danh sách liên kết.
Nội dung trích xuất từ tài liệu:
Bài giảng Ngôn ngữ lập trình C: Dữ liệu kiểu cấu trúc - Ninh Thị Thanh Tâm NGÔN NGỮ LẬP TRÌNH CDữ liệu kiểu cấu trúc Ninh Thị Thanh Tâm Khoa CNTT – HV Quản lý Giáo dụcMục đích Biết cách khai báo các kiểu dữ liệu phức tạp: cấu trúc Cách biểu diễn các kiểu danh sách liên kết nhờ cấu trúc tự trỏ Các thao tác trên danh sách liên kếtNội dung Cấu trúc Khái niệm, định nghĩa Khai báo cấu trúc Đặt tên kiểu dữ liệu Thao tác trên biến cấu trúc Truyền biến cấu trúc cho hàm Các cấu trúc tự trỏ Ngăn xếp - LIFO Hàng đợi - FIFO Cây nhị phân – BINARY TREECấu trúc Khái niệm, định nghĩa Khai báo cấu trúc Đặt tên kiểu dữ liệu Thao tác trên biến cấu trúc Truyền biến cấu trúc cho hàmKhái niệm, định nghĩa Cấu trúc: Một kiểu dữ liệu bao gồm nhiều thành phần có thể thuộc nhiều kiểu dữ liệu khác nhauKhai báo cấu trúc Khai báo kiểu dữ liệu cấu trúc: struct { }; struct là từ khóa đứng trước một khai báo cấu trúc là tên hợp lệ, dùng làm tên cấu trúc tương tự khai báo biếnVí dụstruct sinhvien { char ho_ten[30]; float diemtb;};struct diem { float x,y;};Khai báo cấu trúc (2) Khai báo biến cấu trúc: struct ;Ví dụ: struct sinhvien sv, dssv[100]; struct diem p, q, dsdiem[50];Khai báo cấu trúc (3) Khai báo đồng thời cấu trúc và biến cấu trúc: struct [] { } ;Ví dụ struct dagiac { int n; struct diem dsdinh[20]; } dg1, dg2; Có thể khai báo trực tiếp kiểu của các thành phần là biến cấu trúc bên trong một cấu trúc lớn hơn struct dagiac { int n; struct { float x, y; } dsdinh[20]; } dg1, dg2;Đặt tên kiểu dữ liệu Từ khóa typedef Cho phép thêm tên mới cho một kiểu dữ liệu Cú pháp typedef ; là kiểu dữ liệu muốn thêm tên là tên mới muốn đặt Dùng để định nghĩa các kiểu dữ liệu phức hợp thành một tên duy nhất để dễ dàng khi viếtVí dụ typedef unsigned char byte; byte được xem như kiểu dữ liệu tương đương với unsigned char Có thể sử dụng trong khai báo các biến như kiểu dữ liệu khácVí dụ/*struct1.c*/#include #include typedef unsigned char byte;void main(){ byte ch = 12, ch1; int i; clrscr(); ch1 = ch; for (i=0; iSử dụng typedef với cấu trúc Cho phép đơn giản hóa cách viết khai báo Ví dụ: struct sinhvien { char hoten[30]; float diemtb; }; typedef struct sinhvien sv; typedef struct sinhvien *ptr_sv; Cấu trúc struct sinhvien sẽ là sv Định nghĩa một kiểu con trỏ cấu trúc có tên là ptr_sv Khi đó: sv sv1, sv2, dssv[100]; ~ struct sinhvien sv1, sv2, dssv[100]; ptr_sv ptrsv; ~ struct sinhvien *ptrsv;Thao tác trên biến cấu trúc Truy cập thành phần trong cấu trúc Truy cập tới thành phần cấu trúc từ con trỏ cấu trúc Nhập dữ liệu cho biến cấu trúcTruy cập thành phần trong cấu trúc Cần đến tên thành phần và biến tương ứng Cú pháp: . Dấu chấm (.) là toán tử truy cập thành phần cấu trúc Nếu có nhiều cấu trúc lồng nhau thì sử dụng nhiều dấu (.) tương ứng Ví dụ: p.x= 0; p.y = 5; dg1.dsdinh[10].x = 0; dg1.n = 10;Truy cập thành phần cấu trúc từcon trỏ cấu trúc Nếu ptr là con trỏ cấu trúc, có 2 cách để truy cập tới thành phần của nó Cách 1: (*ptr). Cách 2: ptr->Nhập dữ liệu cho biến cấu trúc Nên sử dụng biến trung gian Nhập dữ liệu qua biến trung gian Gán các giá trị nhập được cho các thành phần cần nhập Ví dụ float temp; printf(Toa do x=); scanf(%f, &temp); p.x = temp; printf(Toa do y=); scanf(%f, &temp); p.y = temp;Ví dụ/*struct2.c*/#include #include struct sinhvien { char hoten[30]; float diemtb;};void main(){ int n; int k; int i; struct sinhvien dssv[100]; char name[30]; float temp; clrscr();n = 0; do { printf(Nhap thong tin sinh vien thu %d
,n+1); printf(Ho ten:); fflush(stdin); gets(name); if (strcmp(name,)!=0) { strcpy(dssv[n].hoten,name); printf(Diem:); scanf(%f,&temp); dssv[n++].diemtb = temp; } } while (strcmp(name,)!=0); ...