Cách viết hàm struct trong c

     

Trong bài bác hướng dẫn này, các bạn sẽ cùng Lập trình ko khó tìm hiểu về kiểu struct vào C (kiểu cấu trúc). Bạn sẽ học phương pháp định nghĩa và áp dụng kiểu cấu trúc với sự đi kèm theo của các ví dụ. Giả dụ dịch từ giờ đồng hồ anh ra thì nghĩa của nó là đẳng cấp cấu trúc, tuy nhiên họ vẫn hay hay call nó là kiểu struct. Cơ mà mục tiêu sau cuối của bọn họ là hiểu và biết phương pháp sử dụng struct trong C, cùng bắt đầu nào…


Cách tư tưởng struct vào C

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

Bạn đang xem: Cách viết hàm struct trong c

Khi nào bọn họ cần nên tự định nghĩa 1 đẳng cấp cấu trúc? khi chúng ta cần lưu trữ một đối tượng có rất nhiều thuộc tính. Ví dụ, đối tượng người dùng SinhVien có những thuộc tính (Mã sinh viên, họ, tên, giới tính, quê quán,…) hay đối tượng LopHoc có những thuộc tính (Mã lớp, tên lớp, giáo viên chủ nhiệm, sĩ số,…). Khi đó họ nên dùng struct để quản lý 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 dữ liệu SinhVien đã có định nghĩa. Trường đoản cú đây bạn cũng có thể khai báo những biến với kiểu dữ liệu này.

Cách khai báo phát triển thành kiểu struct trong C

Việc khai báo biến đổi với struct tương tự như cách khai báo biến thông thường, trong những số ấy kiểu dữ liệu là kiểu struct vào C mà chúng ta vừa định nghĩa. Coi 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 trở nên sv1 và sv2 bao gồm kiểu SinhVien
SinhVien sv1, sv2;
// Ta phải thêm tự khóa struct ở đầu,
// để phân minh được trở nên này là phát triển thành của kiểu tài 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 có 2 toán tử dùng làm truy xuất tới các biến thành viên của kiểu dáng struct trong C.

Sử dụng . => Toán tử truy tìm xuất tới thành viên khi khai báo trở nên bình thương.Sử dụng -> => Toán tử truy hỏi xuất tới thành viên khi trở thành là bé trỏ.

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


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

Từ khóa typedef

Bạn có thể sử dụng tự khóa typedef để tạo nên một tên sửa chữa thay thế cho kiểu dữ liệu đã có. Nó thường được sử dụng kiểu struct để đơn giản hóa cú pháp khai báo biến. Nhưng mà nó cũng rất có thể sử dụng với các 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 đương 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 chúng ta có thể dùng với phong cách nguyên thủy như sau:


0
1
2
3
4
5
typedef int U_INT8;
// Khai báo trở thành kiểu int
U_INT8 value;

Tuy nhiên, nếu như không có nhu cầu thực tế thì ta cũng tránh việc bày vẽ làm gì. Trong một trong những code tính chất ta mong mỏi có quy chuẩn chỉnh riêng thì cần dùng.

Cấu trúc struct lồng nhau

Giả sử bạn có nhu cầu xây dựng kiểu dữ liệu để lưu trữ đối tượng người dùng Tam giác, khi đó chúng ta có thể xây dựng struct biểu lộ tọa độ của 1 điểm, khi đó đối tượng người tiêu dùng tam giác đã là 3 đối tượng điểm. Thay 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 máy 1
Point b; // đỉnh đồ vật 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 thiết bị nhất
tg.a.x = 5;

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

Xem thêm: 10 Biểu Hiện Kín Đáo Chứng Tỏ Đàn Ông Có Bồ, 32 Dấu Hiệu Đàn Ông Ngoại Tình Dễ Nhận Biết

Chương trình cộng trừ nhân chia phân số vào C

Code này mình mang sử các bạn nhập mẫu mã số cho phân số không giống 0 nhé. Bạn cũng có thể kiểm tra bổ sung thêm những tùy chọn/ công dụng để code tối ưu hơn.

Phần thuật toán tìm mong chung to nhất, bạn có thể xem tại bài tìm ước chung lớn 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 nhì phan so = ");
c = cong(a, b);
print(c);
printf(" Hieu cua hai phan so = ");
c = tru(a, b);
print(c);
printf(" Tich cua nhì 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 nhì phan so = 9/8

Struct và nhỏ trỏ

Tương trường đoản cú như khai báo nhỏ trỏ với những kiểu dữ liệu có sẵn trong C. Họ cũng có thể khai báo biến nhỏ trỏ, cấp phép động mang đến biến bé trỏ vẻ bên ngoài struct.

Sau đó là cách họ khai báo biến con trỏ hình dá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ỏ giao diện name, còn Harry là vươn lên là kiểu name.

Để truy vấn vào các biến thành viên thực hiện biến nhỏ 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, showroom của đổi mới person1 được lưu giữ bởi nhỏ trỏ personPtr. Và bạn có thể thao tác cùng với biến con trỏ kiểu như như họ đã học tập ở bài xích Con trỏ vào C.

Ta có:

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

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

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

Đôi khi, số lượng biến struct trong C mà họ cần có thể lớn. Khi đó có thể các bạn sẽ cần tới cấp phát động trong quá trình chương trình thực thi. Dưới đây là phương pháp để cấp phát bộ nhớ động với vẻ bên ngoài 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 and age respectively: ");
// lớn access members of 1st struct person,
// ptr->name và ptr->age is used
// to lớn 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 and age respectively:Harry 24
Enter first name & age respectively:Gary 32
Displaying Information:
Name: Harry Age: 24
Name: GaryAge: 32

Trong lấy một ví dụ trên, sau khi người tiêu dùng nhập số lượng n thì ta mới tiến hành cấp vạc đúng n ô nhớ sử dụng 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 cập 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 bên dưới đây, ta triển khai nhập, xuất và bố trí danh sách sinh viên theo điểm sử dụng cấp phát động cho nhỏ trỏ vào C++ (new và 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() n > 10);
p = new SV;
cout "Nhap vao thong tin " n " sv: " endl;
Nhapds(p, n);
cout "Hien thi thong tin vua nhap: " endl;
Hienthids(p, n);
cout " Danh sach sau khi sap xep la: " endl;
Sapxep(p, n);
Hienthids(p, n);
delete p;
return 0;

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 khoản thời gian 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 cụ thể và nâng cấp hơn: bài xích tập thống trị sinh viên thực hiện struct vào C. Các bạn tiếp tục tham khảo 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++ tất cả lời giải


*

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


*

<Đồ án> gợi ý code trò chơi rắn săn mồi vào C


*

Bài 70. Đọc ghi file trong C


Bài 69. Chương trình làm chủ sinh viên sử dụng struct


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


quan sát và theo dõi
Kết nối với
Thông báo của
bình luận quan sát và theo dõi mới
Label
Name*
Email*
Website
Kết nối với
Label
Name*
Email*
Website
5 comment
bình luận nội tuyến
Xem tất cả bình luận
Tải thêm comment
Khóa học miễn phí

Blog chia sẻ 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. Mang lại đi kiến thức và kỹ năng mình gồm là biện pháp học tập tác dụng nhất


Báo lỗi / tương tác / hợp tác và ký kết / Quảng cáo
Blogger
Facebook
Linkedin
Discord
Youtube

BÀI VIẾT HAY


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


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


Kiểm tra số nguyên tố áp dụng C/C++ và Java


CHUYÊN MỤC HAY


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

---

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


5
0
Rất thích để ý đến của bạn, hãy bình luận.x
()
x
| Reply
Insert
NHIỀU BÀI VIẾT HƠN

Bài 16. Vòng lặp for vào C


Bài 8 – 10. Toán tử trong C