Trong bài hướng dẫn này, các bạn sẽ cùng Lập trình không khó tìm hiểu về kiểu struct vào C (kiểu cấu trúc). Các bạn sẽ học phương pháp định nghĩa và thực hiện kiểu cấu trúc với sự đi kèm của những ví dụ. Nếu dịch từ tiếng anh ra thì nghĩa của chính nó là hình trạng cấu trúc, tuy nhiên họ vẫn hay hay call nó là kiểu struct. Mà lại mục tiêu sau cùng của chúng ta là phát âm và biết cách sử dụng struct trong C, cùng ban đầu nào…


Cách định nghĩa struct vào C

Trước khi bạn cũng có thể khai báo biến hóa với struct, bạn cần định nghĩa nó – Đó cũng là tại sao tại sao struct được gọi là hình trạng dữ liệu người tiêu dùng định nghĩa.

Bạn đang xem: Cách dùng struct trong c

Khi nào họ cần đề xuất tự có mang 1 loại cấu trúc? khi bạn cần tàng trữ một đối tượng có nhiều thuộc tính. Ví dụ, đối tượng SinhVien có các thuộc tính (Mã sinh viên, họ, tên, giới tính, quê quán,…) hay đối tượng LopHoc có các thuộc tính (Mã lớp, tên lớp, giáo viên chủ nhiệm, sĩ số,…). Khi đó họ nên cần sử dụng struct để thống trị chương trình.

Cú pháp tư tưởng struct trong C


0
1
2
3
4
5
6
7
struct structureName

dataType member1;
dataType member2;
...
;

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


0
1
2
3
4
5
6
7
8
struct SinhVien
int maSV;
char ho<20>;
char ten<20>;
bool gioiTinh;
char queQuan<100>;
;

Như vậy, kiểu tài liệu SinhVien đã làm được định nghĩa. Tự đây chúng ta có thể khai báo những biến với kiểu tài liệu này.

Cách khai báo biến đổi kiểu struct trong C

Việc khai báo biến hóa với struct cũng tương tự cách khai báo biến hóa thông thường, trong những số ấy kiểu dữ liệu là hình trạng struct trong C mà các bạn vừa định nghĩa. Xem ví dụ dưới đây:


0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
struct SinhVien

int maSV;
char ho<20>;
char ten<20>;
bool gioiTinh;
char queQuan<100>;
;
int main()
// Khai báo 2 vươn lên là sv1 với sv2 tất cả kiểu SinhVien
SinhVien sv1, sv2;
// Ta nên thêm từ khóa struct ở đầu,
// để phân biệt được trở thành này là thay đổi của kiểu dữ liệu tự định nghĩa
struct SinhVien sv3, sv4;
// Khai báo mảng
struct SinhVien sv<100>;

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

Chúng ta bao gồm 2 toán tử dùng làm truy xuất tới các biến thành viên của mẫu mã struct vào C.

Sử dụng . => Toán tử truy tìm xuất cho tới thành viên lúc khai báo biến chuyển bình thương.Sử dụng -> => Toán tử truy hỏi xuất tới thành viên khi đổi thay là nhỏ trỏ.

Giả sử trong ví dụ như trên, bạn muốn truy xuất gioiTinh của đối tượng người dùng sinh viên, chúng ta làm như sau:


0
1
2
3
4
SinhVien sv;
// to lớn do
printf("Gioi tinh: %s", sv.gioiTinh);

Từ khóa typedef

Bạn rất có thể sử dụng tự khóa typedef để tạo thành một tên thay thế sửa chữa cho kiểu tài liệu đã có. Nó thường được sử dụng kiểu struct để dễ dàng hóa cú pháp khai báo biến. Tuy vậy nó cũng rất có thể sử dụng với những kiểu dữ liệu nguyên thủy nhé.


0
1
2
3
4
5
6
7
8
9
struct Distance
int feet;
float inch;
;
int main()
structure Distance d1, d2;

Code trên tương tự với:


0
1
2
3
4
5
6
7
8
9
typedef struct SinhVien
int feet;
float inch;
distances;
int main()
distances d1, d2;

Hoặc:


0
1
2
3
4
5
6
7
struct PhanSo
int tu;
int mau;
;
typedef struct PhanSo PS;

Hoặc bạn cũng có thể dùng với hình dáng nguyên thủy như sau:


0
1
2
3
4
5
typedef int U_INT8;
// Khai báo biến hóa kiểu int
U_INT8 value;

Tuy nhiên, nếu không có nhu cầu thực tế thì ta cũng không nên bày vẽ làm gì. Trong một trong những code đặc thù ta ước ao có quy chuẩn chỉnh riêng thì nên dùng.

Cấu trúc struct lồng nhau

Giả sử bạn muốn xây dựng kiểu tài liệu để lưu trữ đối tượng người tiêu dùng Tam giác, khi đó chúng ta cũng có thể xây dựng struct biểu hiện tọa độ của một điểm, khi đó đối tượng người dùng tam giác đã là 3 đối tượng người sử dụng điểm. Chũm thể:


0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
struct Point
int x; // hoành độ
int y; // tung độ
;
struct Triangle
Point a; // đỉnh thứ 1
Point b; // đỉnh máy 2
Point c; // đỉnh sản phẩm công nghệ 3

int main()
Triangle tg;
// truy nã xuất hoành độ của điểm thứ nhất
tg.a.x = 5;

Sau đấy là các ví dụ áp dụng kiểu cấu trúc struct vào C vào những bài tập thực tế. Chúng ta tham khảo với chạy thử cũng giống như thử sửa đổi những code mẫu này nhằm hiểu rộng về struct nhé.

Chương trình cộng trừ nhân phân tách phân số trong C

Code này mình giả sử chúng ta nhập chủng loại số cho phân số không giống 0 nhé. Bạn có thể kiểm tra bổ sung cập nhật thêm các tùy chọn/ chức năng để code buổi tối ưu hơn.

Xem thêm: Tập Thể Dục Thể Hình - Thể Dục Thể Hình Là Gì

Phần thuật toán tìm ước chung phệ nhất, chúng ta có thể xem tại bài tìm ước chung to nhất.


0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
#include
#include
#include
int UCLN(int a, int b)

a = abs(a);
b = abs(b);
while (a * b != 0)

if (a > b)
a %= b;
else
b %= a;

return a + b;

int BSCNN(int a, int b)

return a * b / UCLN(a, b);

typedef struct PhanSo

int tuso, mauso;
PS;
PS rutGon(PS a)

PS c;
c.tuso = a.tuso / UCLN(a.tuso, a.mauso);
c.mauso = a.mauso / UCLN(a.tuso, a.mauso);
return c;

PS cong(PS a, PS b)

PS c;
c.tuso = a.tuso * b.mauso + a.mauso * b.tuso;
c.mauso = a.mauso * b.mauso;
c = rutGon(c);
return c;

PS tru(PS a, PS b)

PS c;
c.tuso = a.tuso * b.mauso - a.mauso * b.tuso;
c.mauso = a.mauso * b.mauso;
c = rutGon(c);
return c;

PS nhan(PS a, PS b)

PS c;
c.tuso = a.tuso * b.tuso;
c.mauso = a.mauso * b.mauso;
c = rutGon(c);
return c;

PS chia(PS a, PS b)

PS c;
c.tuso = a.tuso * b.mauso;
c.mauso = a.mauso * b.tuso;
c = rutGon(c);
return c;

void print(PS a)

printf("%d/%d", a.tuso, a.mauso);

int main()

PS a, b, c;
printf(" Nhap phan so a : ");
scanf("%d%d", &a.tuso, &a.mauso);
printf(" Nhap phan so b : ");
scanf("%d%d", &b.tuso, &b.mauso);
printf(" Toi gian a ta duoc : ");
a = rutGon(a);
print(a);
printf(" Toi gian b ta duoc : ");
b = rutGon(b);
print(b);
printf(" Tong cua hai phan so = ");
c = cong(a, b);
print(c);
printf(" Hieu cua nhì phan so = ");
c = tru(a, b);
print(c);
printf(" Tich cua hai phan so = ");
c = nhan(a, b);
print(c);
printf(" Thuong cua nhị phan so = ");
c = chia(a, b);
print(c);

Kết quả chạy:


0
1
2
3
4
5
6
7
8
9
10
11
12
13
Nhap phan so a : 3
4
Nhap phan so b : 2
3
Toi gian a ta duoc : 3/4
Toi gian b ta duoc : 2/3
Tong cua nhì phan so = 17/12
Hieu cua nhì phan so = 1/12
Tich cua nhị phan so = 1/2
Thuong cua hai phan so = 9/8

Struct và bé trỏ

Tương từ như khai báo con trỏ với các kiểu tài liệu có sẵn vào C. Họ cũng có thể khai báo biến bé trỏ, cấp phát động mang đến biến nhỏ trỏ kiểu dáng struct.

Sau đây là cách họ khai báo biến con trỏ hình trạng struct trong C:


0
1
2
3
4
5
6
7
8
9
10
11
struct name
member1;
member2;
.
.
;
int main()

struct name *ptr, Harry;

Khi đó ptr là bé trỏ hình dạng name, còn Harry là vươn lên là kiểu name.

Để truy cập vào các biến thành viên áp dụng biến con trỏ của struct trong C, các bạn dùng ->, ví dụ:


0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include
struct person

int age;
float weight;
;
int main()

struct person *personPtr, person1;
personPtr = &person1;
printf("Enter age: ");
scanf("%d", &personPtr->age);
printf("Enter weight: ");
scanf("%f", &personPtr->weight);
printf("Displaying: ");
printf("Age: %d ", personPtr->age);
printf("weight: %f", personPtr->weight);
return 0;

Trong ví dụ như này, add của biến hóa person1 được gìn giữ bởi con trỏ personPtr. Và bạn có thể thao tác với biến con trỏ tương tự như chúng ta đã học tập ở bài Con trỏ trong C.

Ta có:

personPtr->age cho tác dụng giống với (*personPtr).agepersonPtr->weight cho công dụng giống cùng với (*personPtr).weight

Cấp phát bộ lưu trữ động

Trước khi chúng ta đọc phần này, mình mong muốn các bạn đã sở hữu kiến thức về cấp phép động vào C.

Đôi khi, con số biến struct vào C mà chúng ta cần có thể lớn. Lúc đó có thể bạn sẽ cần tới cấp phép động trong quy trình chương trình thực thi. Sau đây là phương pháp để cấp phát bộ lưu trữ động với phong cách cấu trúc:


0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#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 n; ++i)

printf("Enter first name & age respectively: ");
// to lớn access members of 1st struct person,
// ptr->name and ptr->age is used
// to 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 n; ++i)
printf("Name: %s Age: %d ", (ptr+i)->name, (ptr+i)->age);
return 0;

Kết quả khi chạy chương trình:


0
1
2
3
4
5
6
7
Enter the number of persons:2
Enter first name và age respectively:Harry 24
Enter first name & age respectively:Gary 32
Displaying Information:
Name: Harry Age: 24
Name: GaryAge: 32

Trong ví dụ trên, sau khi người tiêu dùng nhập con số n thì ta mới tiến hành cấp phân phát đúng n ô nhớ thực hiện dòng lệnh này:


0
1
2
ptr = (struct person*) malloc(n * sizeof(struct person));

Và sau đó, ta dùng nhỏ trỏ ptr để truy vấn vào những thành viên của person.

Hoặc bài xích tập cấp phép động mang lại kiểu kết cấu sinh viên dưới đây, ta tiến hành nhập, xuất và thu xếp danh sách sv theo điểm sử dụng cấp phép động cho bé trỏ trong C++ (new cùng delete):


0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
#include
#include
#include
#include
using namespace std;
struct NGAYTHANG
int ngay;
int thang;
int nam;
;
struct SV
char masv<12>;
char hodem<30>;
char ten<10>;
NGAYTHANG ngsinh;
char gioitinh<4>;
char hokhau<20>;
float diem;
;
void Nhapsv(SV * sv)
cout " Ma sv: ";
cin >> sv->masv;
cout " Ho dem: ";
cin.ignore();
fgets(sv->hodem, sizeof(sv->hodem), stdin);
sv->hodemhodem) - 1> = "";
cout " Ten: ";
cin.ignore();
fgets(sv->ten, sizeof(sv->ten), stdin);
cout " Ngay sinh: ";
cin >> sv->ngsinh.ngay;
cout " Thang sinh: ";
cin >> sv->ngsinh.thang;
cout " Nam sinh: ";
cin >> sv->ngsinh.nam;
cout " Gioi tinh: ";
cin.ignore();
fgets(sv->gioitinh, sizeof(sv->gioitinh), stdin);
sv->gioitinhgioitinh) - 1> = "";
cout " Ho khau: ";
cin.ignore();
fgets(sv->hokhau, sizeof(sv->hokhau), stdin);
sv->hokhauhokhau) - 1> = "";
cout " Diem: ";
cin >> sv->diem;

void Hienthisv(SV * sv)
cout sv->masv;
cout " " sv->hodem;
cout " " sv->ten;
cout " " sv->ngsinh.ngay;
cout "-" sv->ngsinh.thang;
cout "-" sv->ngsinh.nam;
cout " " sv->gioitinh;
cout " " sv->hokhau;
cout " " sv->diem;

void Nhapds(SV *p, int n)
for (int i = 0; i n; i++)
cout "Nhap thong tin cua sv thu " i + 1 " :" endl;
Nhapsv(p + i);


void Hienthids(SV *p, int n)
for (int i = 0; i n; i++)
Hienthisv(p + i);
cout " ";


void Sapxep(SV *p, int n)
for (int i = 0; i n; i++)
for (int j = i + 1; j n; j++)
if ((p + i)->diem > (p + j)->diem)
SV tmp = * (p + j);
*(p + j) = * (p + i);
*(p + i) = tmp;



int main()

Kết quả chạy:


0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
Nhap vao so sv: 3
Nhap vao thong tin 3 sv:
Nhap thong tin cua sv thu 1 :
Ma sv: 5
Ho dem: 5
Ten: 5
Ngay sinh: 5
Thang sinh: 5
Nam sinh: 5
Gioi tinh: 5
Ho khau: 5
Diem: 5
Nhap thong tin cua sv thu 2 :
Ma sv: 3
Ho dem: 3
Ten: 3
Ngay sinh: 3
Thang sinh: 3
Nam sinh: 3
Gioi tinh: 3
Ho khau: 3
Diem: 3
Nhap thong tin cua sv thu 3 :
Ma sv: 9
Ho dem: 9
Ten: 9
Ngay sinh: 9
Thang sinh: 9
Nam sinh: 9
Gioi tinh: 9
Ho khau: 9
Diem: 9
Hien thi thong tin vua nhap:
5 5
5-5-5 5 5
3 3
3-3-3 3 3
9 9
9-9-9 9 9
Danh sach sau thời điểm sap xep la:
3 3
3-3-3 3 3
5 5
5-5-5 5 5
9 9
9-9-9 9 9

Ngoài ra, mình cũng có thể có một bài xích hướng dẫn chi tiết và cải thiện hơn: bài xích tập thống trị sinh viên sử dụng struct vào C. Các bạn tiếp tục tham khảo nội dung bài viết này nhé!

Tài liệu tham khảo


TAGS
Facebook
Twitter
Pinterest
WhatsApp
*
*

Bài tập struct trong C/C++ gồm lời giải


*

Giáo trình kỹ thuật lập trình C – Phạm Văn Ất


*

<Đồ án> giải đáp code game rắn săn mồi trong C


*

Bài 70. Đọc ghi tệp tin trong C


Bài 69. Chương trình thống trị sinh viên thực hiện struct


Bài 67. Cấp phát động mảng 2d trong C


Subscribe
Connect with
Notify of
new follow-up comments
Label
Name*
Email*
Website
Connect with
Label
Name*
Email*
Website
7 bình luận
Inline Feedbacks
View all comments
Load More Comments
Khóa học tập miễn phí
Ưu đãi new nhất

Mã giảm ngay & khuyến mại khóa học lập...


Khóa học tập lập trình Java cơ phiên bản miễn phí


Học xây dựng online với mức giá thành ưu đãi


Lập trình WinForm cùng với C# qua 10 ứng dụng


Học HTML5, CSS3, Bootstrap 4 và giảm Web từ tệp tin PSD


Học Python tự Zero – Hero


Khóa học lập trình apk toàn tập


Học xây dựng C/C++ TỪ A – Z


photoworld.com.vn share kiến thức lập trình sẵn của Hiếu, xây dựng cộng đồng những fan học lập trình. Cho đi kỹ năng và kiến thức mình bao gồm là cách học tập tác dụng nhất


Báo lỗi / liên hệ / hợp tác và ký kết / Quảng cáo
photoworld.com.vnger
Discord
Facebook
Linkedin
Youtube

BÀI VIẾT HAY


1000 bài bác tập lập trình sẵn C/C++ có giải thuật của thầy Khang


Bài 1. Reviews khóa học tập “Học C Bá Đạo”


Kiểm tra số nguyên tố thực hiện C/C++ cùng Java


CHUYÊN MỤC HAY


- BẠN BÈ & ĐỐI TÁC -

---

© 2018-2020. Bạn dạng quyền ở trong Lập Trình không Khó. Privacy và Terms


7
0
Would love your thoughts, please comment.x
()
x
| Reply
Insert
NHIỀU BÀI VIẾT HƠN

Bài 11. In mã ASCII của cam kết tự nhập từ bỏ bàn...


Bài 45. Bố trí dãy số giảm dần, tăng dần