1. Khái niệm về dữ liệu cấu trúc (struct)
Một cấu trúc dữ liệu là một tập hợp của những kiểu dữ liệu khác nhau được gộp lại với một cái tên duy nhất.
Ví dụ: Nếu coi sinh viên là một biến thì biến sinh viên chứa nhiều kiểu dữ liệu khác nhau như:
– Họ tên: char
– Tuổi: int
– Địa chỉ: char
– Điểm thi: float,…
Như vậy, sinh viên có thể coi như một biến cấu trúc.
2. Khai báo struct
// Định nghĩa cấu trúc
|
1
2
3
4
|
struct <Tên cấu trúc> { Các trường (các biến thành phần); ... }; |
// Khai báo biến cấu trúc
|
1
|
<Tên cấu trúc> <các biến cấu trúc>,...; |
Ví dụ:
|
1
2
3
4
5
6
7
8
9
10
11
|
// Định nghĩa cấu trúc SV struct SV{ char hoTen[30]; char diaChi[50]; int tuoi; float diem; }; // Khai báo các biến VS SV a,b; //a,b là biến cấu trúc SV SV dhTin[4]; //dhTin là biến mảng cấu trúc SV |
3. Sử dụng struct
– Mỗi trường trong cấu trúc như một biến thông thường.
– Khi sử dụng các trường ta dùng toán tử “.“
Ví dụ:
// sử dụng biến điểm của sinh viên a
a.diem;
Ví dụ 1:
+ Yêu cầu: Viết chương trình thực hiện
– Nhập vào tạo độ 3 điểm A,B,C trong không gian.
– Tính độ dài 3 đoạn thẳng AB,AC,BC.
– Kiểm tra xem A,B,C có thẳng hàng không?
+ Code:
|
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
|
#include <iostream>#include <conio.h>#include <math.h>using namespace std;int main() { // truc TaoDo struct ToaDo{ float x, y, z; }; // khai bao bien ToaDo ToaDo A, B, C; // Nhap toa do 3 diem cout<<"\n Nhap toa do 3 diem: "; cout<<"\n A: "; cin>>A.x>>A.y>>A.z; cout<<"\n B: "; cin>>B.x>>B.y>>B.z; cout<<"\n C: "; cin>>C.x>>C.y>>C.z; // Tinh do dai doan thang float d1; // AB float d2; // AC float d3; // BC d1=sqrt((A.x-B.x)*(A.x-B.x)+(A.y-B.y)*(A.y-B.y)+(A.z-B.z)*(A.z-B.z)); d2=sqrt((A.x-C.x)*(A.x-C.x)+(A.y-C.y)*(A.y-C.y)+(A.z-C.z)*(A.z-C.z)); d3=sqrt((C.x-B.x)*(C.x-B.x)+(C.y-B.y)*(C.y-B.y)+(C.z-B.z)*(C.z-B.z)); // In do dai 3 doan thang cout<<"\n Do dai 3 doan thang: \n"; cout<<"\n AB : "<<d1; cout<<"\n AC : "<<d2; cout<<"\n BC : "<<d3; // Kiem tra tinh thang hang if(d1+d2==d3||d1+d3==d2||d2+d3==d1) cout<<"\n 3 diem A,B,C thang hang"; else cout<<"\n 3 diem A,B,C khong thang hang"; return 0;} |
Ví dụ 2:
+ Yêu cầu: Viết các hàm thực hiện
– Nhập thông tin SV gồm: họ tên, địa chỉ, tuổi, điểm toán, lý, hóa.
– Tính điểm tổng kết.
– In thông tin sinh viên.
+ Code:
/* Chương trình này sử dụng hàm (phần hàm sẽ được trình bày ở bài sau) */
|
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
|
#include<iostream>#include<stdio.h>#include<conio.h>#include<string.h>using namespace std;// Dinh nghia cau truc SVstruct SV{char ht[30],dc[50];int tuoi;float dT,dL, dH;};// Khai bao bien cau trucSV a;// Ham nhap thong tinvoid NhapTT(){ // xu ly bo dem cho viec nhap mot xau fflush(stdin); cout<<"\n Nhap Sinh vien: "; cout<<"\n - Ho ten: "; gets(a.ht); // nhap mot xau cout<<"\n - Dia chi: "; gets(a.dc); cout<<"\n - Tuoi: "; cin>>a.tuoi; cout<<"\n - Diem toan: "; cin>>a.dT; cout<<"\n - Diem ly: "; cin>>a.dL; cout<<"\n - Diem hoa: "; cin>>a.dH;}// Ham Tinh diemfloat TinhDiem(){return (a.dT+a.dL+a.dH)/3;}// Ham In thong tinvoid InTT(){// tim xep loaichar xepLoai[10];float dtk=TinhDiem();// Xep loai sinh vienif (dtk<5) strcpy(xepLoai,"Truot"); // copy xauelse if (dtk<6) strcpy(xepLoai,"TB"); else if (dtk<7) strcpy(xepLoai,"TBK"); else if (dtk<8) strcpy(xepLoai,"Kha"); else if (dtk<9) strcpy(xepLoai,"Gioi"); else if (dtk<=10) strcpy(xepLoai,"XS"); else strcpy(xepLoai,"");// in thong tin sinh viencout<<"\n In sinh vien: ";cout<<"\n - Ho ten: "<<a.ht;cout<<"\n - Dia chi: "<<a.dc;cout<<"\n - Tuoi: "<<a.tuoi;cout<<"\n - Diem tong ket: "<<dtk;cout<<"\n - Xep loai: "<<xepLoai;}// Ham mainint main(){ NhapTT(); InTT(); getch() ;return 0;} |
Ví dụ 3:
+ Yêu cầu: Viết chương trình thực hiện
1. Nhập vào thông tin của một nhân viên IT:
– Ho ten
– Tuoi
– Vi tri lam viec
– He so luong
– So nam cong tac
2. In thông tin của nhân viên vừa nhập.
3. Tính lương cho nhân viên:
luong = he so luong * luong co ban + phu cap.
Trong đó:
– Phụ cấp = 1.2 lương cơ bản nếu số năm công tác > 3,
– Ngược lại phụ cấp băng 1 lương cơ bản.
4. Tính thuế thu nhập mà nhân viên phải trả.
Nếu lương > 5.000.000 thì thuế = 10% lương, ngược lại thuế = 0.
+ Code:
/* Lưu ý:
Chương trình được viết bằng ngôn ngữ C
Các bạn hoàn toàn có thể chuyển đổi sang C++
Đổi printf -> cout; scanf -> cin.
*/
|
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
|
#include<stdio.h>#include<conio.h>#include<string.h>// khai bao hang LCB#define LCB 1050000using namespace std;// Dinh nghia struc NVstruct NV{ char hoTen[30], viTriLV[30]; int tuoi, soNamCT; float heSoLuong;};// khai bao bienNV t;// Nhap thong tin nhan vienvoid NhapTT(){printf("\n Nhap nhan vien: \n");printf("\n Ho ten: ");fflush(stdin);gets(t.hoTen);printf("\n Vi tri lam viec: ");fflush(stdin);gets(t.viTriLV);do{ printf("\n Tuoi nhan vien: "); scanf("%d",&t.tuoi); if (t.tuoi<18||t.tuoi>65) printf("\n Tuoi khong hop le, nhap lai tuoi"); } while(t.tuoi<18||t.tuoi>65);do{ printf("\n So nam cong tac: "); scanf("%d",&t.soNamCT); if (t.soNamCT<0|| t.soNamCT>t.tuoi-18) printf("\n So nam cong tac khong hop le, nhap lai nam cong tac"); } while (t.soNamCT<0|| t.soNamCT>t.tuoi-18);do{ printf("\n He so luong: "); scanf("%f",&t.heSoLuong); if (t.heSoLuong<=0||t.heSoLuong>15) printf("\n He so luong khong hop le, nhap lai he so luong."); } while (t.heSoLuong<=0||t.heSoLuong>15);}// In thong tin nhan vienvoid InTT(){ printf("\n IN THONG TIN NHAN VIEN: \n"); printf("\n - Ho ten: %s",t.hoTen); printf("\n - Vi tri lam viec: %s",t.viTriLV); printf("\n - Tuoi: %d",t.tuoi); printf("\n - So nam cong tac: %d",t.soNamCT); printf("\n - He so luong: %f",t.heSoLuong);}// Tinh luongfloat TinhLuong(){ float phuCap; if(t.soNamCT>=3) phuCap=1.2*LCB; else phuCap=LCB; return (t.heSoLuong*LCB+phuCap);}// Tinh thue thu nhapfloat ThueTN(){ float thue=0; if (TinhLuong()>=5000000) thue=0.1*TinhLuong(); return thue;}// ham mainint main(){ NhapTT(); InTT(); printf("\n Luong nhan vien: %f",TinhLuong() ); printf("\n Thue thu nhap: %f",ThueTN() ); getch();return 0;} |
