Bài 10. Dữ Liệu Có Cấu Trúc (STRUCT) - Tin Học Cho Người Việt

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 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 <Tên cấu trúc> <các biến cấu trúc>,...;

Ví dụ:

// Đị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:

#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) */ #include<iostream> #include<stdio.h> #include<conio.h> #include<string.h> using namespace std; // Dinh nghia cau truc SV struct SV{ char ht[30],dc[50]; int tuoi; float dT,dL, dH; }; // Khai bao bien cau truc SV a; // Ham nhap thong tin void 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 diem float TinhDiem(){ return (a.dT+a.dL+a.dH)/3; } // Ham In thong tin void InTT(){ // tim xep loai char xepLoai[10]; float dtk=TinhDiem(); // Xep loai sinh vien if (dtk<5) strcpy(xepLoai,"Truot"); // copy xau else 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 vien cout<<"\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 main int 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. */ #include<stdio.h> #include<conio.h> #include<string.h> // khai bao hang LCB #define LCB 1050000 using namespace std; // Dinh nghia struc NV struct NV{ char hoTen[30], viTriLV[30]; int tuoi, soNamCT; float heSoLuong; }; // khai bao bien NV t; // Nhap thong tin nhan vien void 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 vien void 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 luong float TinhLuong(){ float phuCap; if(t.soNamCT>=3) phuCap=1.2*LCB; else phuCap=LCB; return (t.heSoLuong*LCB+phuCap); } // Tinh thue thu nhap float ThueTN(){ float thue=0; if (TinhLuong()>=5000000) thue=0.1*TinhLuong(); return thue; } // ham main int main(){ NhapTT(); InTT(); printf("\n Luong nhan vien: %f",TinhLuong() ); printf("\n Thue thu nhap: %f",ThueTN() ); getch(); return 0; }

Từ khóa » Khai Báo Cấu Trúc