[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:

Categories

AI (13) AI programming (1) ASP (1) Android (31) App Honeygain (4) Assembly (17) Biểu diễn thuật toán (1) Bubble-Sort (1) Bài giảng (2) Bài giảng lập trình C và Cpp (21) Bài viết hay (104) Bản đồ tư duy (1) C Plus Plus (103) C/C++ (16) CDSL phân tán (1) CSS (2) Cơ sở dữ liệu (11) Danh ngôn lập trình (1) Datamining (4) Genetic Algorithm (1) Giáo trình (2) Giải thuật tiến hóa - thuật toán di truyền (2) Google App Engine (2) Góc học tập (34) HTML (1) Hướng dẫn kiếm tiền online tại nhà (6) Hướng dẫn sử dụng Emu8086 (1) Học lập trình (131) Học lập trình C và CPP qua ví dụ (17) Java (54) Java Căn bản (6) JavaScript (5) Kỹ năng đọc hiệu quả (1) Kỹ thuật lập trình (16) Kỹ thuật đồ họa máy tính (10) Lý thuyết Cơ sở dữ liệu (2) Lý thuyết đồ thị (11) Lập trình Cơ sở dữ liệu (2) Lập trình Python (2) Lập trình căn bản (8) Lập trình hướng đối tượng với Java (7) Lập trình mobile (7) Lập trình mạng (6) Lập trình nhúng (1) Lập trình trí tuệ nhân tạo (2) ML (1) MMO (6) MS Access (1) Machine learning (2) Mạng máy tính (1) Mẹo tìm kiếm trên Google (1) Nghiên cứu khoa học (2) Ngôn ngữ lập trình (2) Những cuốn sách hay mà bạn nên đọc khi còn trẻ (1) Pascal (3) Phương pháp tính toán tối ưu (2) Phương pháp tối ưu (2) Quản lý dự án CNTT (1) SEO (1) SQL (5) Swift (9) Sách hay (4) Thiết kế Web (2) Thuật toán (51) Thuật toán Sắp Xếp -Sort (9) Thuật toán Tìm kiếm - Search (5) Thuật toán di truyền (4) Thực hành Android (2) Tin học văn phòng (5) Tiện ích máy tính (3) Toán rời rạc (13) Treo máy kiếm tiền (3) Trí tuệ nhân tạo (18) Tài liệu tham khảo (4) Tìm hiểu Blockchain (2) Tự học Android (3) Tự học Android qua ví dụ (1) Tự học JavaScript (1) Tự học lập trình (7) Tự học lập trình Android (17) Tự học lập trình C và CPP (14) Tự học lập trình java qua các ví dụ (8) XML (1) blockchain (2) bài giảng quản lý dự án CNTT (1) bài tập java (3) bài tập lập trình (4) cấu trúc dữ liệu giải thuật (15) hướng dẫn viết báo (1) học lập trình Java (11) học máy (5) hợp ngữ (8) lập trình viên (3) phưng pháp đơn hình (2) thuật toán AI (2) tài liệu CNTT miễn phí (3) tính toán tối ưu (1) tự học lập trình iOS (8) tự học lập trình python (1) ví dụ Assembly (1) Đại số gia tử và ứng dụng (1) Đồ họa (4)