DÁNH SÁCH BÀI VIẾTLập trình là gì? một số khái niệm vào lập trình
Cài để IDE Dev C++ – môi trường lập trình C/C++Làm quen với ngôn ngữ C – lịch trình Hello World
Những cú pháp cơ bản
Các loại dữ liệu
Biến và Toán tử
Vòng lặp for, while cùng do…while
Câu lệnh đk if else
Cấu Trúc Rẽ Nhánh Switch … Case
Từ khóa break với continue
Mảng
Hàm
Tham đổi thay và Tham trị
Chuỗi ký kết tự
Một số hàm giải pháp xử lý chuỗi
Con trỏ
Đọc ghi file
Struct – tài liệu kiểu cấc trúctrong bài viết này bọn họ sẽ cùng đi tìm kiếm hiểu vềkiểu struct trong C (kiểu cấu trúc). Bạn sẽ học biện pháp định nghĩa và sử dụng kiểu kết cấu với sự đi kèm của các ví dụ. Giả dụ dịch từ tiếng anh ra thì nghĩa của chính nó là hình trạng cấu trúc, mặc dù nhiên họ vẫn hay hay call nó làkiểu struct. Cơ mà mục tiêu ở đầu cuối của họ là hiểu và biết phương pháp sử dụng struct trong C, cùng ban đầu nào…

Kiểu kết cấu là gì?

Trong ngữ điệu lập trình C, các lớp và cấu tạo (struct) là các phiên bản thiết kế được áp dụng để tạo nên thể hiện tại của một lớp.

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

Struct trong Cđược áp dụng cho các đối tượng nhẹ như Hinhtron, Color, Point v.v.

Không y hệt như lớp, struct trong C kiểu quý giá hơn là phong cách tham chiếu. Nó khôn xiết hữu ích nếu khách hàng có dữ liệu không có ý định sửa đổi sau khoản thời gian tạo struct.

Struct trong C là một trong những tập hợp những loại dữ liệu khác nhau. Nó tương tự như như lớp chứa các loại tài liệu khác nhau.


Trong trường đúng theo trên, Sinh
Vien là một cấu tạo chứa bốn biến hóa ma
SV, ho
Ten, gioi
Tinh và que
Quan. Như vậy, kiểu tài liệu Sinh
Vien
đã được quan niệm từ đây bạn có thể khai báo các biến cùng với kiểu dữ liệu này.

Ví dụ khai báo hình dáng Sinh
Vien họ vừa định nghĩa làm như sau:


// Khai báo đổi thay sv1 tất cả kiểu Sinh
Vien
Sinh
Vien sv1;
hoặc cũng hoàn toàn có thể khai báo theo mảng


// Khai báo mảng sv tất cả kiểu Sinh
Vien gồm 100 phần tử
Sinh
Vien sv<100>;

Truy xuất những thuộc tính của struct

Biến của struct có thể được truy vấn cập bằng phương pháp sử dụng biểu lộ của struct theo sau vị toán tử (.) Và sau đó là trường của struct. Ví dụ:


Cấu trúc struct lồng nhau

Giả sử bạn muốn xây dựng kiểu dữ liệu để lưu lại trữ đối tượng người dùng Con rắn, khi đó chúng ta cũng có thể xây dựng struct biểu thị tọa độ của 1 đốt thân rắn, khi đó đối tượng Con rắn sẽ là n đối tượng người sử dụng điểm.


struct Point int x; // hoành độ int y; // tung độ; struct Snake int n; //độ dài nhỏ rắn Point dot<100>; //Khai báo con rắn buổi tối đa sẽ có được 100 đốt int main() Triangle sn; // tróc nã xuất hoành độ với tung độ của đốt thứ nhất tg.sn<0>.x = 5; tg.sn<0>.y = 5;

Code minh họa

Xây dựng cấu trúc Sinh viên gồm mã sinh viên, họ tên, giới tính, quê quán.

Nhập cùng xuất ra thông tin gồm buổi tối đa 100 Sinh viên.


#include struct Sinh
Vien int ma
SV; char ho
Ten<50>; bool gioi
Tinh; char que
Quan<100>;;void nhap(Sinh
Vien sv<>, int n)printf(" ----Nhap danh sach sinh vien---- ");for(int i = 0;i 100);nhap(sv, n);xuat(sv,n);

1. Struct vào C

Trong phần này, bạn sẽ được mày mò các kiểu struct vào C. Lân cận đó, bạn cũng rất được học phương pháp định nghĩa cùng sử dụng những cấu trúc (ngôn ngữ lập trình C) trải qua các ví dụ.

Struct là gì? hình trạng struct trong C (hay cấu tạo trong C) chính là một tập hợp những biến (có thể có nhiều kiểu khác nhau) trong cùng một tên duy nhất.

*
*
1.1 Làm vậy nào nhằm xác định cấu tạo trong C?

Trước khi tạo thành các biến cấu tạo trong C, bạn phải xác định kiểu dữ liệu của nó. Để định nghĩa cấu tạo trong C, bạn cầu sử dụng từ khóa struct.

Cú pháp của kết cấu trong C (ngôn ngữ lập trình)

struct structure
Name

data
Type member1;

data
Type member2;

;

Dưới đấy là ví dụ:

struct Person

char name<50>;

int cit
No;

float salary;

;

Kiểu dẫn xuất struct Person được định nghĩa. Lúc này, chúng ta cũng có thể tạo ra các biến thuộc vẻ bên ngoài này.

1.2 Tạo các biến cấu trúc trong C

Khi một vẻ bên ngoài struct C được khai báo, bọn chúng không được cung cấp phát bộ nhớ lưu trữ hoặc cỗ lưu trữ. Để cấp cho phát bộ lưu trữ cho kiểu kết cấu này và thao tác với nó, bạn phải tạo thêm những biến.

Dưới đây là cách tôi tạo nên các phát triển thành struct vào C:

struct Person

char name<50>;

int cit
No;

float salary;

;

int main()

struct Person person1, person2, p<20>;

return 0;

Có thể tạo thành biến cấu tạo trong C theo cách khác ví như sau:

struct Person

char name<50>;

int cit
No;

float salary;

person1, person2, p<20>;

Trong cả 2 trường hợp trên, 2 vươn lên là person1, person2, và thay đổi mảng phường có 20 phần tử thuộc hình dáng struct Person được sản xuất ra.

1.3 truy vấn vào các thành viên của một cấu trúc

Sử dụng 2 dạng hình toán tử tiếp sau đây để truy cập vào những thành viên của struct C.

. – Toán tử member dot-> –Toán tử member arrow (sẽ được reviews trong số đông phần tiếp theo)

Giả sử bạn muốn truy cập vào salary của person2, các bạn cần tiến hành như sau:

person2.salary

Ví dụ: Thêm hai khoảng cách

// Program to add two distances (feet-inch)

#include

struct Distance

int feet;

float inch;

dist1, dist2, sum;

int main()

printf(“1st distance ”);

printf(“Enter feet: “);

scanf(“%d”, &dist1.feet);

printf(“Enter inch: “);

scanf(“%f”, &dist1.inch);

printf(“2nd distance ”);

printf(“Enter feet: “);

scanf(“%d”, &dist2.feet);

printf(“Enter inch: “);

scanf(“%f”, &dist2.inch);

// adding feet

sum.feet = dist1.feet + dist2.feet;

// adding inches

sum.inch = dist1.inch + dist2.inch;

// changing to feet if inch is greater than 12

while (sum.inch >= 12)

++sum.feet;

sum.inch = sum.inch – 12;

printf(“Sum of distances = %d’-%.1f””, sum.feet, sum.inch);

return 0;

Đầu ra

1st distance

Enter feet: 12

Enter inch: 7.9

2nd distance

Enter feet: 2

Enter inch: 9.8

Sum of distances = 15′-5.7″

1.4 trường đoản cú khóa typedef trong C

Tôi sử dụng từ khóa typedef vào C để tạo thành tên túng thiếu danh cho các kiểu dữ liệu. Nó thường xuyên được thực hiện với các kiểu cấu tạo trong C để làm dễ dàng và đơn giản hóa cú pháp khai báo biến.

Mã dưới đây

struct Distance

int feet;

float inch;

;

int main()

struct Distance d1, d2;

Tương đương với

typedef struct Distance

int feet;

float inch;

distances;

int main()

distances d1, d2;

1.5 kết cấu Struct lồng nhau

Bạn rất có thể tạo một kết cấu lồng trong một cấu tạo khác trong xây dựng C. Ví dụ,

struct complex

int imag;

float real;

;

struct number

struct complex comp;

int integers;

num1, num2;

Giả sử bạn có nhu cầu cài đặt imag của phát triển thành num2 là 11. Sau đây là phương thức thực hiện:

num2.comp.imag = 11;

1.6 lý do lại cần kết cấu trong C?

Giả sử nếu bạn có nhu cầu lưu trữ tin tức về một người: tên, số CMND, nút lương. Chúng ta cũng có thể tạo ra các biến name, Id
No và salary khác biệt để lưu trữ những tin tức này.

Vậy nếu bạn có nhu cầu lưu trữ thông tin của không ít người thì sao? trong trường hợp này, bạn phải tạo nhiều biến chuyển cho từng tin tức của từng người: name1, Id
No1, salary1, name2, Id
No2, salary2,…

Tìm gọi thêm về kiểu cấu trúc trong C:

Cấu trúc và vươn lên là pointer vào CTruyền kết cấu vào hàm

2. Cấu trúc và đổi mới pointer trong C

Trong phần này, các bạn sẽ được khám phá cách sử dụng biến nhỏ trỏ để truy vấn vào những thành viên của struct vào C. ở kề bên đó, bạn cũng sẽ biết được cách cấp phát bộ lưu trữ một cách tự động hóa của các kiểu kết cấu trong C.

Nhưng trước đó, bạn cần xem qua hầu hết phần sau đây để khám phá biến pointer được sử dụng như thế nào với cấu trúc:

Biến pointer trong CCấu trúc trong C

2.1 Tạo trở thành pointer trỏ đến kết cấu trong C

Dưới đây là cách mà bạn cũng có thể tạo đổi mới pointer trỏ đến struct vào C

struct name

member1;

member2;

.

.

;

int main()

struct name *ptr, Harry;

Trong trường vừa lòng này, ptr là 1 trong những biến pointer trỏ mang đến struct.

Ví dụ: truy cập vào các thành viên bằng biến pointer

Để truy vấn vào các thành viên của một cấu trúc bằng cách sử dụng thay đổi pointer, bạn cần sử dụng toán tử ->.

#include

struct person

int age;

float weight;

;

int main()

struct person *person
Ptr, person1;

person
Ptr = &person1;

printf(“Enter age: “);

scanf(“%d”, &person
Ptr->age);

printf(“Enter weight: “);

scanf(“%f”, &person
Ptr->weight);

printf(“Displaying: ”);

printf(“Age: %d ”, person
Ptr->age);

printf(“weight: %f”, person
Ptr->weight);

return 0;

Trong lấy ví dụ này, add của person1 được lưu trữ trong thay đổi pointer person
Ptr bằng cách sử dụng person
Ptr = &person1;.

Bây giờ, chúng ta có thể truy cập vào các thành viên của person1 bằng phương pháp sử dụng đổi mới pointer person
Ptr.

Bên cạnh đó,

person
Ptr->age tương đương với (*person
Ptr).ageperson
Ptr->weight tương đương với (*person
Ptr).weight

2.2 cung cấp phát bộ nhớ động của cấu trúc

Trước khi mày mò phần này, tôi khuyên bạn nên xem lại phần cấp cho phát bộ lưu trữ động.

Đôi khi, con số biến cấu trúc mà các bạn đã khai báo có thể không đủ. Bạn phải cấp phát bộ lưu trữ trong quá trình lập trình chạy. Dưới đây là phương pháp để thực hiện điều này trong xây dựng C.

Ví dụ: cấp cho phát bộ nhớ lưu trữ động của cấu trúc

#include

#include

struct person

int age;

float weight;

char name<30>;

;

int main()

struct person *ptr;

int i, n;

printf(“Enter the number of persons: “);

scanf(“%d”, &n);

// allocating memory for n numbers of struct person

ptr = (struct person*) malloc(n * sizeof(struct person));

for(i = 0; i name và ptr->age is used

// khổng lồ access members of 2nd struct person,

// (ptr+1)->name & (ptr+1)->age is used

scanf(“%s %d”, (ptr+i)->name, &(ptr+i)->age);

printf(“Displaying Information: ”);

for(i = 0; i name, (ptr+i)->age);

return 0;

}

Khi chúng ta chạy lập trình, công dụng đầu ra vẫn là:

Enter the number of persons: 2

Enter first name & age respectively: Harry 24

Enter first name & age respectively: Gary 32

Displaying Information:

Name: Harry Age: 24

Name: Gary Age: 32

Trong lấy một ví dụ này, n biến cấu tạo được tạo ra. Lưu giữ ý, n là do người tiêu dùng nhập vào.

Để cấp phát bộ nhớ lưu trữ cho n vươn lên là struct person, tôi vẫn sử dụng,

ptr = (struct person*) malloc(n * sizeof(struct person));

Sau đó, tôi thực hiện biến pointer ptr để truy vấn vào các bộ phận của person.

3. Kết cấu và hàm trong lập trình sẵn C

Trong phần này, bạn sẽ được mày mò về bí quyết truyền biến cấu tạo dưới dạng đối số vào hàm. Bên cạnh đó, bạn cũng biến thành biết được phương pháp lấy lại kết cấu từ hàm thông qua các ví dụ.

Tương tự như những biến thuộc kiểu desgin sẵn, chúng ta cũng có thể truyền những biến struct trong C vào hàm.

3.1 Truyền cấu tạo vào hàm

Trước tiên, bạn cần xem lại các phần tiếp sau đây trước khi khám phá cách truyền cấu tạo vào hàm

Cấu trúc trong CHàm trong thiết kế CCHàm do người dùng định nghĩa

Dưới đó là cách mà chúng ta có thể truyền các cấu trúc vào một hàm

#include

struct student

char name<50>;

int age;

;

// function prototype

void display(struct student s);

int main()

struct student s1;

printf(“Enter name: “);

// read string đầu vào from the user until is entered

// is discarded

scanf(“%<^ >%*c”, s1.name);

printf(“Enter age: “);

scanf(“%d”, &s1.age);

display(s1); // passing struct as an argument

return 0;

void display(struct student s)

printf(“
Displaying information ”);

printf(“Name: %s”, s.name);

printf(“
Age: %d”, s.age);

Đầu ra

Enter name: Bond

Enter age: 13

Displaying information

Name: Bond

Age: 13

Biến cấu trúc s1 của hình dạng struct student được tạo ra. Trở nên này sẽ được truyền vào hàm display() bằng cách sử dụng câu lệnh display(s1);

3.2 đem lại cấu trúc từ một hàm

Dưới đây là cách chúng ta cũng có thể lấy lại cấu tạo từ một hàm:

#include

struct student

char name<50>;

int age;

;

// function prototype

struct student get
Information();

int main()

struct student s;

s = get
Information();

printf(“
Displaying information ”);

printf(“Name: %s”, s.name);

printf(“
Roll: %d”, s.age);

return 0;

struct student get
Information()

struct student s1;

printf(“Enter name: “);

scanf (“%<^ >%*c”, s1.name);

printf(“Enter age: “);

scanf(“%d”, &s1.age);

return s1;

Hàm get
Information() được gọi bằng cách sử dụng câu lệnh s = get
Information();. Hàm này trả về một cấu trúc của loại struct student. Cấu trúc trả về sẽ tiến hành hiển thị từ bỏ hàm main().

Lưu ý, kiểu trả về của hàm get
Information() cũng là struct student.

3.3 Truyền cấu trúc bằng phương pháp tham chiếu

Bạn cũng có thể truyền cấu trúc bằng phương pháp tham chiếu (tương từ bỏ như cách mà chúng ta truyền trở nên thuộc kiểu kiến tạo sẵn bằng phương pháp tham chiếu). Tôi khuyên chúng ta nên xem lại phần truyền bằng phương pháp tham chiếu trước lúc xem những thông tin tiếp theo.

Trong quy trình truyền bằng phương pháp tham chiếu, địa chỉ cửa hàng bộ nhớ của những biến struct vào C được truyền vào hàm.

#include

typedef struct Complex

float real;

float imag;

complex;

void add
Numbers(complex c1, complex c2, complex *result);

int main()

complex c1, c2, result;

printf(“For first number, ”);

printf(“Enter real part: “);

scanf(“%f”, &c1.real);

printf(“Enter imaginary part: “);

scanf(“%f”, &c1.imag);

printf(“For second number, ”);

printf(“Enter real part: “);

scanf(“%f”, &c2.real);

printf(“Enter imaginary part: “);

scanf(“%f”, &c2.imag);

add
Numbers(c1, c2, &result);

printf(“ result.real = %.1f ”, result.real);

printf(“result.imag = %.1f”, result.imag);

return 0;

void add
Numbers(complex c1, complex c2, complex *result)

result->real = c1.real + c2.real;

result->imag = c1.imag + c2.imag;

Đầu ra

For first number,

Enter real part: 1.1

Enter imaginary part: -2.4

For second number,

Enter real part: 3.4

Enter imaginary part: -3.2

result.real = 4.5

result.imag = -5.6

Trong lập trình sẵn trên, cha biến cấu tạo c1, c2 và địa chỉ cửa hàng của result được truyền vào hàm add
Numbers(). Tại đây, result được truyền bằng phương pháp tham chiếu.

Khi vươn lên là result trong hàm add
Numbers() bị biến đổi thì vươn lên là result trong hàm main() cũng đổi khác theo.

4. Kết đoàn trong C

Trong phần này, các bạn sẽ được tò mò về những liên minh trong lập trình C. Rõ ràng là: Làm vậy nào để tạo nên các liên minh, truy cập vào các thành viên của chính nó và sự khác biệt giữa liên minh cùng cấu trúc.

Liên minh (union) là một trong những kiểu do người dùng định nghĩa, giống như như cấu trúc trong C, nhưng cũng có một vài ba điểm khác biệt. Kết cấu cấp phát đủ không gian để lưu giữ trữ tất cả các member của nó, vào khi, liên kết chỉ cung cấp phát không gian để lưu trữ những thành viên bự nhất.

4.1 Làm nỗ lực nào để khái niệm liên minh?

Tôi thực hiện từ khóa union để tư tưởng liên minh. Ví dụ,

union car

char name<50>;

int price;

;

Đoạn mã trên đây định nghĩa kiểu dẫn xuất union car.

4.2 Tạo những biến liên minh

Khi một hòa hợp được định nghĩa, nó sẽ tạo ra một kiểu dáng do người dùng định nghĩa. Gắng nhưng, này lại không được cấp phát bộ nhớ. Để cung cấp phát bộ nhớ lưu trữ cho một phong cách liên minh nhất quyết và thao tác làm việc với nó, tôi sẽ khởi tạo các biến:

Dưới đây là cách để tạo những biến liên minh.

union car

char name<50>;

int price;

;

int main()

union oto car1, car2, *car3;

return 0;

Một bí quyết khác để tạo những biến kết liên là:

union car

char name<50>;

int price;

car1, car2, *car3

Trong 2 trường hợp trên, biến liên minh car1, car2 và thay đổi pointer car3 của dạng hình union oto được sản xuất ra.

4.3 truy vấn vào các thành viên của một liên minh

Tôi áp dụng toán tử . để truy vấn vào những thành viên của một liên minh. Để truy cập các thay đổi pointer, tôi sẽ thực hiện toán tử->.

Trong lấy một ví dụ trên,

Để truy cập price của car1, tôi áp dụng car1.price
Để truy cập price của car3, tôi thực hiện (*car3).price hoặc car3->price

4.4 Sự khác hoàn toàn giữa liên minh và cấu trúc

Hãy xem ví dụ dưới đây để nắm rõ sự khác hoàn toàn giữa liên minh cùng cấu trúc:

#include

union union
Job

//defining a union

char name<32>;

float salary;

int worker
No;

u
Job;

struct struct
Job

char name<32>;

float salary;

int worker
No;

s
Job;

int main()

printf(“size of union = %d bytes”, sizeof(u
Job));

printf(“ size of structure = %d bytes”, sizeof(s
Job));

return 0;

Đầu ra

size of union = 32

size of structure = 40

4.5 nguyên nhân lại gồm sự biệt lập về kích thước của thay đổi liên minh và biến chuyển cấu trúc?

Kích thước của s
Job là 40 byte vì

kích thước của name<32> là 32 bytekích thước của salary là 4 bytekích thước của worker
No là 4 byte

Tuy nhiên, kích thước của u
Job là 32 byte. Bởi vì kích thước của thay đổi liên minh thường đang là form size của bộ phận lớn tuyệt nhất của nó. Trong lấy ví dụ như trên, size của bộ phận lớn nhất, (name<32>), là 32 byte.

Xem thêm: Đại tiểu thư đi học - quyết định số 24/2022/qđ

Tất cả những thành viên trong cùng một liên minh cùng phổ biến một bộ lưu trữ giống nhau.