Bài Tập Kiểu Cấu Trúc Trong C

Trong bài bác giải đáp này, bạn sẽ thuộc Lập trình không cạnh tranh tìm hiểu về loại struct trong C (hình dáng cấu trúc). quý khách vẫn học giải pháp có mang với thực hiện thứ hạng kết cấu với việc kèm theo của các ví dụ. Nếu dịch từ bỏ tiếng anh ra thì nghĩa của chính nó là loại cấu tạo, mặc dù bọn họ vẫn hay tốt Hotline nó là loại struct. Nhưng mục tiêu ở đầu cuối của chúng ta là đọc và biết cách sử dụng struct vào C, thuộc ban đầu nào…


Cách khái niệm struct trong C

Trước lúc chúng ta cũng có thể khai báo đổi mới với struct, bạn cần định nghĩa nó – Đó cũng chính là nguyên do tại sao struct được call là giao diện dữ liệu người tiêu dùng tư tưởng.

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

khi nào chúng ta rất cần phải từ bỏ định nghĩa 1 dạng hình cấu trúc? lúc bạn cần tàng trữ một đối tượng có tương đối nhiều trực thuộc tính. ví dụ như, đối tượng người sử dụng SinhVien gồm những thuộc tính (Mã sinh viên, chúng ta, thương hiệu, giới tính, quê quán,…) giỏi đối tượng LopHoc bao gồm những thuộc tính (Mã lớp, tên lớp, giáo viên chủ nhiệm, sĩ số,…). Lúc kia bọn họ đề xuất sử dụng struct để làm chủ chương trình.

Cú pháp quan niệm 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>;
;

bởi vậy, kiểu dáng dữ liệu SinhVien đã được có mang. Từ đây bạn có thể knhì báo những biến đổi với hình dáng dữ liệu này.

Cách knhị báo đổi mới vẻ bên ngoài struct trong C

Việc knhì báo đổi mới cùng với struct cũng như cách knhì báo trở thành thường thì, trong đó dạng hình tài liệu là hình dạng struct vào C nhưng mà chúng ta vừa định nghĩa. Xem ví dụ bên 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()
// Knhì báo 2 vươn lên là sv1 với sv2 gồm loại SinhVien
SinhVien sv1, sv2;
// Ta cần thêm từ khóa struct sống đầu,
// để tách biệt được biến chuyển này là đổi mới của vẻ bên ngoài tài liệu tự định nghĩa
struct SinhVien sv3, sv4;
// Knhị báo mảng
struct SinhVien sv<100>;

Truy xuất các nằm trong tính của struct

Chúng ta gồm 2 tân oán tử dùng làm truy tìm xuất tới những biến thành viên của hình trạng struct vào C.

Sử dụng . => Toán tử truy hỏi xuất cho tới member Khi khai báo biến chuyển bình thương.Sử dụng -> => Tân oán tử truy vấn xuất tới member khi phát triển thành là nhỏ trỏ.

Giả sử trong ví dụ trên, bạn có nhu cầu truy hỏi xuất gioiTinc của đối tượng người tiêu dùng sinch viên, bạn làm cho như sau:


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

Từ khóa typedef

Quý khách hàng hoàn toàn có thể áp dụng từ bỏ khóa typedef nhằm tạo thành một tên sửa chữa đến hình dạng dữ liệu đã tất cả. Nó thường được thực hiện vẻ bên ngoài struct để đơn giản hóa cú pháp knhị báo biến chuyển. Nhưng nó cũng có thể áp dụng với các vẻ bên ngoài tài liệu nguim 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 bên 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ũng có thể sử dụng với phong cách nguyên thủgiống hệt như sau:


0
1
2
3
4
5
typedef int U_INT8;
// Knhì báo biến đổi hình dạng int
U_INT8 value;

Tuy nhiên, nếu không mong muốn thực tiễn thì ta cũng tránh việc bày vẽ làm cái gi. Trong một số trong những code đặc điểm ta mong muốn gồm quy chuẩn chỉnh riêng rẽ thì nên cần dùng.

Cấu trúc struct lồng nhau

Giả sử bạn muốn xây cất phong cách tài liệu nhằm lưu trữ đối tượng người tiêu dùng Tam giác, lúc ấy bạn có thể tạo ra struct biểu hiện tọa độ của 1 điểm, lúc ấy đối tượng người dùng tam giác đang là 3 đối tượng người tiêu dùng điểm. Cụ 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 trang bị 1
Point b; // đỉnh sản phẩm công nghệ 2
Point c; // đỉnh máy 3

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

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

Xem thêm: Mẹ Hoắc Kiến Hoa Thích Lâm Tâm Như, Ghét Bỏ Trần Kiều Ân, Vì Sao Lại Thế?

Cmùi hương trình cộng trừ nhân phân chia phân số trong C

Code này mình trả sử các bạn nhập mẫu mã số đến phân số không giống 0 nhé. Quý khách hàng rất có thể soát sổ bổ sung cập nhật thêm các tùy chọn/ tính năng để code tối ưu rộng.

Phần thuật toán thù tra cứu ước thông thường lớn số 1, chúng ta có thể coi tại bài xích search ước thông thường lớn số 1.


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 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 trái 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à con trỏ

Tương trường đoản cú nlỗi khai báo lót trỏ cùng với những đẳng cấp dữ liệu gồm sẵn trong C. Chúng ta cũng rất có thể knhị báo trở thành con trỏ, cấp phép cồn mang lại biến đổi nhỏ trỏ mẫu mã struct.

Sau đây là bí quyết họ knhì báo biến con trỏ giao diện 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;

Lúc đó ptr là nhỏ trỏ phong cách name, còn Harry là vươn lên là giao diện name.

Để truy vấn vào các trở thành viên áp dụng biến hóa bé trỏ của struct vào C, chúng ta sử 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ụ này, xúc tiến của biến person1 được giữ gìn vì chưng con trỏ personPtr. Và bạn cũng có thể thao tác cùng với biến chuyển nhỏ trỏ hệt như chúng ta đã học tập sống bài xích Con trỏ trong C.

Ta có:

personPtr->age mang lại tác dụng tương tự cùng với (*personPtr).agepersonPtr->weight mang đến kết quả giống cùng với (*personPtr).weight

Cấp phân phát bộ nhớ động

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

Đôi khi, con số biến hóa struct trong C nhưng mà bọn họ cần có thể béo. lúc đó hoàn toàn có thể bạn sẽ bắt buộc tới cấp phát động vào quy trình lịch trình thực thi. Dưới đấy là phương pháp để cấp phép bộ nhớ lưu trữ hễ cùng với dạng hình 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 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 trái Lúc chạy cmùi hương trình:


0
1
2
3
4
5
6
7
Enter the number of persons:2
Enter first name & age respectively:Harry 24
Enter first name và 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 số lượng n thì ta mới triển khai cấp phép đú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à tiếp đến, ta sử dụng con trỏ ptr để truy cập vào những thành viên của person.

Hoặc bài bác tập cấp phát cồn cho phong cách cấu trúc sinh viên dưới đây, ta thực hiện nhập, xuất cùng thu xếp danh sách sinch viên theo điểm áp dụng cấp phát hễ mang đến bé 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->ngsinc.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->ngsinc.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 khoản thời gian sap xep la: " endl;
Sapxep(p, n);
Hienthids(p, n);
delete p;
return 0;

Kết trái 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 khi 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 đều có một bài xích chỉ dẫn chi tiết và cải thiện hơn: các bài luyện tập quản lý sinch viên sử dụng struct vào C. Các bạn liên tục tham khảo bài viết này nhé!

Tài liệu tsay mê khảo

Các bài viết vào khóa họcBài trước: Bài 67. Cấp phát rượu cồn mảng 2 chiều vào CBài sau: Bài 69. Cmùi hương trình thống trị sinh viên thực hiện struct
TAGS
Facebook
Twitter
Pinterest
WhatsApp
*
*

Giáo trình Kỹ thuật xây dựng C – Phạm Vnạp năng lượng Ất


*

<Đồ án> Hướng dẫn 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 thơm trình cai quản sinc viên áp dụng struct


Bài 67. Cấp vạc hễ mảng 2 chiều trong C


Bài 66. Cấp phân phát bộ nhớ cồn vào C


Subscribe
Connect with
Notify of
new follow-up comments
Label
Name*
Email*
Website
Connect with
Label
Name*
Email*
Website
5 Bình luận
Inline Feedbacks
View all comments
Load More Comments
Khóa học miễn phí

Blog chia sẻ kiến thức thiết kế của Hiếu, phát hành xã hội những người học tập thiết kế. Cho đi kỹ năng bản thân tất cả là bí quyết học tập hiệu quả nhất


Báo lỗi / Liên hệ / Hợp tác / Quảng cáo
Blogger
Facebook
Linkedin
Discord
Youtube

BÀI VIẾT HAY


Bài 1. Giới thiệu khóa huấn luyện “Học C Bá Đạo”


1000 bài bác tập lập trình sẵn C/C++ bao gồm giải mã của thầy Khang


Kiểm tra số nguim tố thực hiện C/C++ với Java


CHUYÊN MỤC HAY


- BẠN BÈ và ĐỐI TÁC -

---

© 2018-2020. Bản quyền ở trong Lập Trình Không Khó. Privacy & Terms


5
0
Would love sầu your thoughts, please bình luận.x
()
x
| Reply
Insert
NHIỀU BÀI VIẾT HƠN

Bài 47. Thuật tân oán thu xếp nổi bọt


Bài 41. Mảng 1 chiều vào C