Bài tập kiểu cấu trúc trong c

*
It-Pro Training
*

Dữliệu dạng hình cấu tạo - Lập trình C : Bài 15

1.Giới thiệu

Trong quá trình tạo vận dụng, không tính những mẫu mã dữliệu vì chưng ngôn ngữ lập trình C cung cấp, thì C còn được cho phép các lập trình sẵn viên cóthể tự khái niệm những giao diện tài liệu riêng rẽ của mình. Các dạng hình tài liệu này được gọilà hình trạng tài liệu bởi người dùng quan niệm “Kiểu tài liệu người dùng” xuất xắc hình trạng dữliệu phía người tiêu dùng.

Bạn đang xem: Bài tập kiểu cấu trúc trong c

Về thực chất mẫu mã tài liệu vì người tiêu dùng khái niệm làđược thiết kế tốt dẫn xuất từ bỏ các mẫu mã tài liệu ngulặng tdiệt của ngôn từ C. Ví dụnhư dữ liệu mảng (array) là mẫu mã tài liệu dẫn xuất từ những mẫu mã tài liệu gồm sẵnnhỏng integer, char ... array có thể chấp nhận được tàng trữ tài liệu bên dưới dạng một hàng liên tiếpdữ liệu vào bộ lưu trữ, áp dụng tên mảng nhằm đại diện thay mặt đến mảng, các thành phần trongmảng bắt buộc phải gồm cùng vẻ bên ngoài tài liệu.

Tuy nhiên trên thực tế điều gì xẩy ra nếu lúc xây dựnglịch trình yêu cầu định nghĩ về một kiểu tài liệu, nó tập dữ liệu mà lại mỗi thành phầncó loại dữ liệu khác nhau ví dụ như SinhVien là 1 trong tập dữ liệu bao gồm : Tên,ngày sinh, giới tính với số điện thoại cảm ứng thông minh. Lúc đó những xây dựng viên cần yếu áp dụng mảng đểxử lý vấn đề này được.

Để giải quyết và xử lý sự việc này một cách phù hợp, C cung cấptài năng để đóng gói cụm tài liệu ko vào trong một đội, dữ liệu này sẽ đượcđịnh danh trải qua tên cùng sinh sản thành vẻ bên ngoài dữ liệu phối kết hợp và dữ liệu kia Điện thoại tư vấn là kiểudữ liệu cấu trúc(structure).

2. Knhị báo cấu trúc với Biến kết cấu.

Một cấu trúc được knhì báo thông qua từ khóa struct đikèm với nó là tên cấu tạo (struct tag) cùng nội dung kết cấu. Trong nội dungstruct sẽ có đựng những thành phần của chính nó.

Cũng giống như các kiểu dáng dữ liệu không giống struct là mẫu mã dữliệu do thế bạn có thể knhị báo các loài kiến gồm hình dạng kết cấu cùng những biến hóa đóđược call là đổi mới kết cấu.

Cúpháp:

struct

;

;

. .

,,...;

Trong đó :

structure_tag_name: Têncấu trúc

data_typemember_name_i : cùng với data_type là phong cách tài liệu của các thành phầntrực ở trong structure. member_name_i là tên thành phần lắp thêm i của struct.

structure_variable:Tên đổi thay cấu trúc

Vậy y hệt như các giao diện dữ liệu không giống, một struct bởi vì ngườidùng khái niệm sẽ bao gồm những nguyên tố sau :

+ Tên struct

+ Các yếu tố trực ở trong struct

+ đổi thay struct.

Vídụ :

structtoado

int x;

int y

a, b;

Vậy trong đoạn code ví dụ ta thấy :

+ Tên struct là toado

+ Các thành phần struct là x, y

+ Các biến đổi struct là a, b;

Các thức tiến hành trong ví dụ trên người ta Call làphương thức gộp Có nghĩa là khái niệm cấu trúc và các vươn lên là kết cấu vào trongmột quãng code. Các xây dựng viên hoàn toàn rất có thể quan niệm struct trước vàkhai báo trở thành cấu tạo sau.

Cúpháp knhì báo đổi thay kết cấu :

structtag_name variable1, variable2, …;

­trongkia :

tag_name: Tên cấu tạo.

variable1,variable2: Biến cấu trúc

Vídụ:

structtoavì chưng a, b;

Các phxay toán có thể được thực hiện cùng với struct bao gồm:

+ Phép gán, gán một biến struct cho một vươn lên là structkhông giống thuộc vẻ bên ngoài.

+ Phnghiền tsi chiếu để mang địa chỉ của một biến struct.

+ Truy vấn tới những thành phần của struct tự biếnstruct.

+ Sử dụng toán tử sizeof để lấy kích cỡ của biếnstruct.

Các vươn lên là struct không áp dụng những phnghiền toán == cùng != bởivị những yếu tố trực ở trong struct ko nhất thiết bắt buộc được lưu trữ trongnhững byte bộ lưu trữ thường xuyên.

3.Truy vấn mang lại các thành phần của struct.

Các yếu tố của struct rất có thể được truy vấn thôngqua 3 biện pháp. Một trong 3 từ thời điểm cách đó là thực hiện vệt ‘.’

Cúpháp:

. ;

Trong đó :

structure_variable: Tênvươn lên là struct

member_name:Tên yếu tắc trực trực thuộc struct.

Vídụ:

structmyStruct

inta;

intb;

intc;

s1, s2;

Để truy nã vấn bọn chúng là áp dụng : s1.a; s1.b

Xét theo kía cạnh tàng trữ bên trên ba nhớ (Giả sử int lưutrữ 2 bytes “thực tiễn có thể 4 bytes” với a, b, c được lưu trữ tại các ô nhớ liêntiếp “a, b, c ko độc nhất vô nhị thiết đề nghị tàng trữ tại những ô lưu giữ liên tiếp” khi đóhình hình họa mô tả nhỏng sau:

*

Hìnhtiên phong hàng đầu : Truy vấn cho tới những thành phần struct

Có thể tùy chỉnh thiết lập các quý giá cho các yếu tố củastruct.

s1.b= 12;

Để in cực hiếm các yếu tố thì tùy nằm trong vào kiểu dáng dữliệu của những thành ví dụ họ ước ao in báo cáo của nhân tố b thì chúngta thực hiện câu lệnh :

printf(“%d”,s1.b);

Các nhân tố có kiểu dáng string, vẻ bên ngoài mảng thì chúng tagiải pháp xử lý tương tự như nhỏng bọn họ sẽ có tác dụng.

4. Khởi sản xuất quý giá của struct

Struct có thể được khởi chế tạo qua rất nhiều cách thức khác biệt,vấn đề này bao gồm cả bài toán như gán các hằng số quý giá cho những nhân tố. Ngoàira còn nếu không khởi chế tác giá trị thì những thay đổi tất cả kiểu dáng struct cũng biến thành khởi sản xuất theodạng hình không tường minh. lấy một ví dụ với những nguyên tố có kiểu dáng integer cùng float vẫn tựtùy chỉnh thiết lập cực hiếm là 0, cùng với char và string vẫn là ‘’.

Cúpháp khởi tạo nên giá trị struct:

struct

;

;

= constant1,constant2, . .;

Hoặc

struct

= constant1,constant2,..;

Vídụ minch họa

struct Ngaythang

int ng ;

int th ;

int nam giới ;

holiday = 1, 5,2000 ;

một trở thành holiday cũng rất được knhì báo kèm thuộc hình trạng này và được khởitạo vày cỗ hàng đầu. 5. 2000. Các cực hiếm khởi sinh sản này lần lượt gán cho các thànhphần theo đúng thứ từ vào knhị báo, tức ng = 1, th = 5 với nam = 2000.

Code minch họa một ví dụ khác:

*

Hình số 2 : Code minch họa knhì báo và khởi chế tạo quý hiếm struct

Lưuý : Với struct thì những thành viên ko được khởi tạo thành giá trịtrực tiếp. lấy ví dụ như :

structgames_ticket

intvalue = 500; /* Lỗi vì khởi sinh sản quý giá thẳng cho thành viên */

intseat_num = 52; /* Lỗi do khởi chế tạo quý giá thẳng cho thành viên */

intdate, month, year;

fan1;

Ngoài phương thức khởi chế tạo ra trên, thì vào quá trình khởitạo thành giá trị thì hoàn toàn có thể truy hỏi vấn trực tiếp tới từng nguyên tố của struct.

Vídụ :

struct

float p, q,

int r;

k = .p =3.0, .q = 7.9, .r = 5;

Biến struct k có thể được khởi sản xuất bằng phương pháp tróc nã vấnthẳng thông quan các nhân tố của struct nlỗi p, q, r;

Lưuý: vào ví dụ trên, knhì báo struct không phải sử dụngtên vẫn được, thời điểm kia biến hóa sẽ được knhì báo thẳng.

Hoặc

structemployee

int emp_num;

char designation<40>;

char kind_of_leave_applied<30>;

int number_of _days;

int begin_date;

;

structemployee mangal_singh = .kind_of_leave_applied = “Medical leave”, .begin_date= 230910, .emp_num = 0691;

Vậy có rất nhiều cách để khởi tạo cực hiếm cho những biếnstruct.

Codeminc họa

*

Hình số 3 : khởi tạo thành giá trị struct thông qua các thành phần

5. Copy cùng so sánh Struct

Một đổi thay được knhì báo có hình dạng struct hoàn toàn có thể gán cho mộtthay đổi khác tất cả thuộc thứ hạng struct.

Vídụ:

struct employee

char grade;

int basic;

float allowance;

;

struct employee nam=‘b’, 6500, 812.5;

struct employee hung;

hung = nam; // Thực hiện tại phnghiền gán phát triển thành hung = nam

Thực chất khi triển khai phép gán hung = nam kia chínhlà quy trình coppy tài liệu những yếu tố tương ứng của phái mạnh đến hung.

Codeminch họa:

*

Hình số 4 : Gán cực hiếm của trở thành struct

Trong C không hỗ trợ so sánh 2 đổi mới gồm kiểu struct.

6. typedef có mang loại dữ liệu mới

Từ khóa typedef chất nhận được xây dựng viên có mang kiểudữ liệu bắt đầu từ bỏ đẳng cấp tài liệu vẫn gồm vào công tác.

Xem thêm: Taichuc - Đh Kinh Tế Tp

Cúpháp

typedef ;

Trongđó

existingdata type : Kiểu tài liệu sẽ trường tồn vào chương trình

newdata type : Kiểu dữ liệu mới

Vídụ:

typedef int id_number;

typedef float weight;

typedef char lower_case;

Trong ví dụ trên id_number là hình dạng dữ liệu new, nó sẽđược thực hiện nlỗi int.

lấy ví dụ như vận dụng với từ bỏ khóa typedef với dữ liệu có kiểustruct;

typedefstruct point

intx;

inty;

Dot;

Dotleft,right;

Khi đó left với right là trở nên kết cấu với giao diện dữ liệubắt đầu là point.

Codeminc họa

*

Hình số 5 : Knhì báo kiểu dáng dữ liệu mới với typedef

7. Struct lồng nhau

Một struct rất có thể đựng mộtstruct không giống. Trong trường thích hợp này Tức là struct tất cả chứa một hoặc nhiềumember tất cả giao diện struct khác, kết cấu điều đó fan ta Hotline là struct lồngnhau.

Trong những ngôi trường hòa hợp nhưvậy, toán thù tử dấu chấm kết hợp với đổi mới kết cấu được sử dụng nhằm truy vấn cácmember của vào cùng cấu trúc tương tự như các kết cấu phía bên phía ngoài.

Vídụ:

*

Hình số 6 : struct lồng nhau

Trong ví dụ trên bọn chúng tacó : struct outer đựng struct inner; tức là struct outer gồm trở thành phầninvar có kiểu inner.

Để truy nã vấn mang lại các thànhphần trực nằm trong những nhân tố của struct, bọn họ sử dụng toán thù tử ‘.’ để truycập.

8. Mảng struct

8.1 Khai báo mảng struct

Giống nlỗi những thứ hạng dữ liệu khác, struct trọn vẹn cóthể áp dụng array để lưu trữ. Để knhì báo mảng struct, bọn họ thực hiện cú phápknhì báo sau :

Cú pháp:

struct

;

;

.

.

;

Hoặc

struct ;

trong những số đó :

structure_tag_name: Tên struct

data_typemember_name: Các nhân tố trực nằm trong mảng

structure_variable:Tên biến đổi mảng struct

index:số lượng những nhân tố mảng

lấy một ví dụ

structtest1

chara;

inti;

floatu;

m<3>;Khiđó mảng m<3> đang tàng trữ 3 bộ phận gồm hình dáng kết cấu test1.

Tấm hình miêu tả mảng cấu trúc:

*

Hình số 7 : Hình ảnh mảng cất struct

8.2 Khởi chế tạo mảng struct

Quá trình khởi sinh sản quý giá thuở đầu mang lại mảng struct đượctriển khai hệt như Việc tùy chỉnh quý hiếm mở đầu của mảng tất cả cất những dữ liệucơ bản khác.

Cúpháp:

struct

/*structure declaration */

;

;

.

.

;

;

/* Knhị báo mảng struct và tùy chỉnh thiết lập giá bán trị*/

struct =

constant01,constant02,……………………….constant0n,

constant11,constant12,……………………….constant1n,

.

.

constantN1,constantN2,…constantNn

;

Vídụ minh họa

struct boat /** Knhị báo mảng **/

charname<20>;

int seatnum;

float fare;

Knhị báo vươn lên là mảng struct và khởi tạo thành cực hiếm.

struct boat ticket<4>= “Vikram”, 1,15.50, “Krishna”,2,15.50, “Ramu”, 3,25.50,

“Gouri”, 4,25.50;

Codeminch họa:

*

Hình số 8 : Mảng struct

9. Mảng vào struct

Trong struct rất có thể tất cả một hoặc nhiều nhân tố tất cả dữliệu đẳng cấp mảng ví dụ:

struct Lop

char tenlop<10>,

int soluong;

;

struct Lop daihoc= "K41C", 54 ;

Trong cấu tạo Lớp tất cả chứa tên lớp gồm hình dạng string (haymảng char). Lúc kia khai báo trở nên daihoc và khởi chế tạo quý hiếm mang đến trở nên daihoc nhưcâu lệnh ở trên.

10. Cấu trúc với con trỏ

Một bé trỏ trỏ mang đến cấu trúc xuất xắc thay đổi bé trỏ tất cả kiểukết cấu (struct) chỉ đối chọi thuần là con trỏ đó trỏ cho liên hệ của cấu trúc kia.Lưu ý con trỏ tất cả giao diện struct bắt buộc trường đoản cú chuyển đổi trở nên con trỏ kia thành structđược.

Cú pháp:

struct /* Knhị báocấu tạo */

;

;

.

.

;

*ptr;

Hoặc

struct /* Khai báokết cấu */

;

;

.

.

;

;

struct *ptr;

Con trỏ ptr có thể được gán cho 1 nhỏ trỏ khác cócùng loại struct.

Để truy nã vấn cho những thành phần của kết cấu. Chúng tathực hiện cú pháp sau :

Cúpháp

(*ptr).member_name;

Hoặc

ptr->member_name;

Để thiết lập cho những nhân tố của struct thông quavươn lên là bé trỏ, chúng ta thực hiện cú pháp sau :

Cúpháp

(*ptr).member_name_x= constant;

Hoặc

ptr->member_name_x = constant;

Ví dụ minc họa

structtest1 /** Khai báo struct “test” */

char a;

int i;

float f;

;

structtest1 pt; /* Knhị báo vươn lên là bé trỏ bao gồm kiểu dáng cấu truct “test”*/

pt->a=‘K’; /* Thiết lập quý hiếm cho char a */

pt->i=15; /* Thiếtlập quý hiếm cho int i */

pt->f=27.89; /* Thiết lập quý hiếm mang đến float f */

11. Cấu trúc và hàm

Struct có thể có tác dụng tham đối nhằm truyền cho hàm, giốngnhư những tmê say đối bao gồm phong cách dữ liệu của hàm. Lúc một struct đóng vai trò là tham mê đốitruyền vào của hàm thì từng nguyên tố trực nằm trong struct sẽ được coppy thôngtin. Thực tế từng nguyên tố của struct được truyền quý giá vào đến hàm bởi cơchế truyền tyêu thích đối trải qua cực hiếm. Lúc yếu tắc của struct là array thì sẽthực hiện bởi phép tắc copy mảng nhằm truyền quý giá.

Với những struct bao gồm form size mập thì vấn đề áp dụng truyềntyêu thích đối của hàm thông qua nhỏ trỏ vẫn trầm trồ công dụng rộng.

Cú pháp knhì báo tham mê đối của hàm với struct nlỗi sau :

structstructure_tag function_name(struct structure_tag structure_variable);

Trong đó

structure_tag: Tênstruct

function_name:Tên hàm

structure_variable:Tên tmê man đối truyền vào mang lại hàm (Tên tmê mệt số hình thức).

Xem thêm: Tổng Hợp Đơn Giá, Thông Báo Giá Mới Nhất Của Hà Nội Quý Iv/2020

Vídụ:

struct A // Khai báo kết cấu A

char ch;

int in;

float f;

;

void show(struct A b); // Knhì báo hàm show thực hiệnmục đích hiển thị báo cáo của struct A với b tham mê số hiệ tượng truyền vào củaA;

Codeminch họa

*

Hìnhsố 9: Hàm có tham mê đối gồm dạng hình struct

Trong ví dụ bên trên, hàm show(struct A b) là hàm gồm sử dụngb làm cho tđê mê đối truyền vào.

Với tham đối là bé trỏ, cầm cố vì họ thực hiện hàm:

scanf("%c %d %f",&a.ch,&a.in,&a.f);

Để nhập quý hiếm mang đến đổi thay struct A a; thì họ viếthàm cùng với tsay đắm đối có hình dáng con trỏ nhỏng sau :

voidread(struct A *p)

printf(“ Enter ch, in and f:”); /* Nhập thông tincác thành phần struct */

fflush(stdin); /* Xóa các dòng dữ liệu lúc nhập ban bố */

scanf(“%c%d %f”,&p->ch,&p->in,&p->f); /* Nhập cực hiếm */

Hàm read có tmê say số p truyền vào tất cả dạng hình bé trỏ. Việcsử dụng bé trỏ đang làm tăng tính hiệu quả Lúc lập trình.


Chuyên mục: Tin Tức