1. Trang chủ
  2. » Công Nghệ Thông Tin

LTC- Cấu trúc

23 381 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Cấu trúc
Tác giả TS Ngô Hữu Phúc
Trường học Học viện Kỹ thuật quân sự
Chuyên ngành Khoa học máy tính
Thể loại Bài giảng
Định dạng
Số trang 23
Dung lượng 726,5 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

LTC- Cấu trúc

Trang 1

Biên soạn: TS Ngô Hữu Phúc

Bộ môn Khoa học máy tính Học viện Kỹ thuật quân sự

Cấu trúc

Chương 9

Trang 2

Khái niệm

 Cấu trúc là tập hợp của một hoặc nhiều biến , chúng có thể có kiểu

dữ liệu khác nhau, được nhóm lại dưới một tên duy nhất để tiện xử lý

 Cấu trúc còn gọi là bản ghi trong một số ngôn ngữ lập trình khác,

chẳng hạn như PASCAL.

Một số ví dụ về khái niệm cấu trúc:

Phiếu ghi lương , gồm có: tên, địa chỉ, lương, phụ cấp, … một số trong các thuộc tính này lại có thể là một cấu trúc bởi trong nó có thể chứa

nhiều thành phần: Tên ( Họ, đệm, tên ), Địa chỉ ( Phố, số nhà ),

Danh sách sinh viên , gồm có: mã sinh viên, họ tên, ngày sinh, điểm toán, điểm lý, điểm hóa…; trong đó, ngày sinh có thể chứa nhiều thành phần ngày, tháng, năm.

 Những dạng như vậy  sử dụng cấu trúc.

Trang 3

tên_kiểu _cấu_trúc là một tên bất kỳ do người lập trình tự đặt theo qui tắc đặt.

thành phần của cấu trúc có thể là: biến, mảng, cấu trúc khác đã được định nghĩa trước đó.

Trang 4

struct ngay ngaysinh;

struct ngay ngaybatdaucongtac;

};

Trang 5

9.1 Định nghĩa cấu trúc bằng typedef (t)

 Cú pháp: typedef <type difinition> <identifier> ;

 Ví dụ: có thể dùng toán tử typedef để định nghĩa các kiểu dữ liệu mới có cấu trúc là: ngay và nhancong ở trên như sau:

struct ngay ngaysinh;

struct ngay ngaybatdaucongtac;

} nhancong;

Đặc tính typedef đặc biệt tiện lợi khi định nghĩa các cấu trúc, vì ta không cần nhắc lại từ khóa

struct mỗi khi cần khai báo một biến theo cấu trúc đó

Trang 6

9.2 Khai báo biến theo một kiểu cấu trúc

đã định nghĩa

Khai báo biến kiểu cấu trúc hoàn toàn giống như việc khai báo các biến và các

mảng kiểu thông thường khác

Giả sử ta đã khai báo các kiểu cấu trúc ngay và nhancong như trong mục trên

bằng từ khóa struct Khi đó ta có thể khai báo các biến như sau:

Ví dụ 1: struct ngay ngaydi, ngayden; /* cần nhắc lại từ khóa struct */

khi đó, sẽ cho ta hai biến với tên là ngaydi và ngayden kiểu cấu trúc ngay

Tổng quát ta có:

 Cách 1:

struct <tên_kiểu_cấu_trúc_đã_khai_báo> <danh_sách_tên_biến>;

Ví dụ: struct ngay a,b,*c; // trên C

ngay a,b,*c; // trên C++

Chú ý:

Các biến kiểu cấu trúc được khai báo theo mẫu trên sẽ được cấp phát bộ nhớ một cách đầy đủ cho tất cả các thành phần của nó.

Trang 7

9.2 Khai báo biến theo một kiểu cấu trúc

đã định nghĩa

 Việc khai báo kiểu cấu trúc cũng có

thể thực hiện đồng thời với việc khai

báo biến kiểu cấu trúc

struc ngay ngaysinh;

struc ngay ngaybatdau; } nhom1, nhom2;

 Khi vừa khai báo kiểu cấu trúc, vừa khai báo biến kiểu cấu trúc như trong

ví dụ trên, ta có thể không cần chỉ định tên kiểu cấu trúc theo cú pháp sau:

struct {

Thành phần của cấu trúc; }

danh_sách_tên_các_cấu_trúc;

Trang 8

9.3 Truy cập đến các thành phần của cấu trúc

Để truy cập đến một thành phần cơ bản (là biến hoặc mảng) của một cấu trúc ta sử dụng một trong các cách viết

sau:

tên_cấu_trúc.tên_thành_phần

tên_cấu_trúc.tên_cấu_trúc.tên_thành_phần tên_cấu_trúc tên_cấu_trúc.tên_cấu_trúc.tên_thành_phần

Trang 9

9.4 Mảng cấu trúc

 Có thể sử dụng một kiểu cấu trúc đã mô tả để khai báo các biến kiểu cấu trúc

và mảng kiểu cấu trúc.

Cách khai báo mảng cấu trúc:

struct <tên_kiểu_cấu_trúc_đã_định_nghĩa> <tên_mảng[số phần tử của mảng]>;

Trang 10

Ví dụ về cấu trúc

Đầu bài:

Xây dựng cấu trúc sinh viên gồm:

mã sinh viên : kiểu mảng char;

họ tên sinh viên : kiểu mảng char;

ngày sinh : kiểu cấu trúc ngày;

điểm toán : kiểu nguyên;

điểm lý : kiểu nguyên;

điểm hóa : kiểu nguyên;

Yêu cầu:

 Nhập vào n sinh viên, n nhập từ bàn phím;

 Đưa ra các sinh viên có điểm trung bình >= 8 và không có môn nào phải thi lại

Trang 11

Minh họa

if((sv[i].diemtoan+sv[i].diemly+

sv[i].diemhoa>=24)&& (sv[i].diemtoan>=5)

&& (sv[i].diemly>=5) &&

sv[i].diemhoa>=5)) {

printf("Ma sinh vien: %s\n",sv[i].ma);

printf("Ho ten: %s\n",sv[i].hoten);

} } getch();

}

void main() {

Trang 12

9.5 Phép gán cấu trúc

 Có thể thực hiện phép gán trên các biến và phần tử

mảng kiểu cấu trúc cùng kiểu như sau:

 Gán hai biến cùng kiểu cấu trúc cho nhau

 Gán phần tử mảng cho biến cùng kiểu cấu trúc

 Gán hai phần tử mảng cùng kiểu cấu trúc cho nhau

gán các thành phần tương ứng.

Trang 13

Ví dụ về phép gán cấu trúc:

Có n sinh viên, sắp xếp theo điểm trung bình giảm dần

//Nhap n sinh vien

printf("Nhap so sinh vien: ");

//Sap xep danh sach

//Sap xep danh sach for (i=0;i<n-1;++i) {

min=i;

for (j=i+1;j<n;++j)

if (ts[min].td>ts[j].td) min=j;

if (min!=i) {

tg=ts[i];

ts[i]=ts[min];

ts[min]=tg;

} }

//In danh sach for(i=0;i<n;i++) {

}

Trang 14

9.6 Con trỏ cấu trúc và địa chỉ cấu trúc

p, p1, p2 là con trỏ kiểu cấu trúc

nc1, nc2 là các biến kiểu cấu trúc

ds là mảng kiểu cấu trúc

Như vậy, con trỏ kiểu cấu trúc dùng để lưu trữ địa chỉ của biến kiểu cấu trúc và mảng kiểu cấu trúc.

Ví dụ:

struct ngay*p,*p1,*p2,nc1,nc2,ds[100];

p1=&nc1; /* Gán địa chỉ nc1 cho p1 */

p2=&ds[4]; /* Gán địa chỉ ds[4] cho p2 */

p=ds; /* Gán địa chỉ ds[0] cho p */

Trang 15

9.6.2 Truy nhập qua con trỏ

 Có thể truy nhập đến các thành phần của cấu trúc thông qua con trỏ theo một trong hai cách sau:

Trang 18

9.6.5 Con trỏ và mảng

các cách sau:

Trang 19

 Thường sử dụng định nghĩa trên cho danh sách liên kết, cây,…

Chú ý: Không được khai báo biến cấu trúc khi đang định nghĩa cấu

trúc.

Trang 20

Ví dụ về thành phần con trỏ cấu trúc

Đầu bài:

Trang 21

Ví dụ

về danh sách liên kết đơn

struct sinhvien *sv=NULL, *temp;

printf("Nhap danh sach sinh vien\n");

}

//giai phong o nhowhile(sv!=NULL) {temp=sv; sv=sv->lienket;

free(temp);

}getch();

Trang 22

9.8 Union (hợp)

một thời điểm chỉ lưu một thành phần dữ liệu.

Trang 23

số hoặc ở dạng đánh giá (giỏi, khá, trung bình hay yếu) Tại một thời điểm, điểm của sinh viên có thể

là số hoặc

là chuỗi ký tự

printf("Diem cua sinh vien la:

%f o nho tuong ung tai: %16lu\

n",sinhvien1.so,&sinhvien1.so);

strcpy(sinhvien1.chu,"Gioi");

printf("Diem cua sinh vien la:

%s o nho tuong ung tai: %16lu\

n",sinhvien1.chu,&sinhvien1.chu);

getch();

}

Ngày đăng: 05/11/2012, 14:53

Xem thêm

TỪ KHÓA LIÊN QUAN

w