[Tự học lập trình C/C++] Bài 10: Dữ liệu kiểu cấu trúc (struct)

---------------------------------
* TÓM TẮT LÝ THUYẾ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.
 - Khí sử dụng các trường ta dung toán tử "."

   Ví dụ:
   // sử dụng biến điểm của sinh viên a
   a.diem;

---------------------------------
** VÍ DỤ
---------------------------------

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 ở mục 11) */

#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ế 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;
}

Một số tài liệu và khoá học bổ ích dành cho bạn: 

# Giáo Trình: Kỹ Thuật Lập Trình C/C++ Căn Bản Và Nâng Cao [Click để xem]

# Khoá học online: Học lập trình C/C++ TỪ A - Z [Click để xem]


------------------------
Xem bài khác:

Tìm kiếm nội dung khác: