[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;
}


Khoa học lập trình C/C++
------------------------
Xem bài khác:

Quảng cáo

Загрузка...

Categories

8051 (1) AI (1) AI programming (1) amazon (1) Android (27) ASP (1) Assembly (17) Bài giảng (2) Bài giảng lập trình C và Cpp (16) bài giảng quản lý dự án CNTT (1) bài tập java (1) bài tập lập trình (1) Bài viết hay (62) Bản đồ tư duy (1) Bidvertiser (1) Biểu diễn thuật toán (1) bitcoin (1) blockchain (1) Blockchain là gì (1) Bubble-Sort (1) C (77) C Plus Plus (103) C sharp (11) C++ (3) cấu trúc dữ liệu giải thuật (1) Cây (tree) (2) Cây quyết định (3) CDSL phân tán (1) Chữa bài tập Java (1) code assembly (1) Công nghệ điện toán đám mây (1) Công nghệ lập trình (1) Cơ sở dữ liệu (10) CSS (2) Cuộc cách mạng công nghiệp 4.0 (1) Danh ngôn lập trình (1) Danh sách liên kết (list) (1) Datamining (4) Đại số gia tử và ứng dụng (1) đăng ký Amazon (1) Đăng ký hosting (2) đặt hàng trên Amazon (1) Đệ quy (2) Đồ họa (4) Độ phức tạp của thuật toán (1) ebook-csdl (1) ebook-giaithuat (1) ebook-laptrinh (1) ebook-phancung-mang (1) ebook-tinhocungdung (1) ebook-web (1) Exceptions (1) Genetic Algorithm (1) Giải hệ phương trình tuyến tính (5) giải thuật (3) giải thuật Đệ quy (1) Giáo trình (2) Góc học tập (34) Góc suy ngẫm (1) Google App Engine (2) Heap-Sort (1) Hệ quản trị CSDL (1) Học lập trình (125) Học lập trình C và CPP qua ví dụ (15) học lập trình Java (7) HostGator (1) hợp ngữ (1) HPH (25) HTML (1) Hướng Dẫn Đăng Ký Tên Miền và Host Trên Hostgator (1) hướng dẫn mua host (1) hướng dẫn nhận tiền (1) hướng dẫn payoneer (1) Hướng dẫn sử dụng Emu8086 (1) hướng dẫn viết báo (1) hướng đăng ký tên miền (1) Insert-sort (2) iOS (1) Java (50) Java Căn bản (5) java core (3) Java GUI (1) JavaScript (3) Kiếm tiền online (10) Kỹ thuật đồ họa máy tính (9) Kỹ thuật lập trình (16) kỹ thuật SEO (1) Lập trình 8051 với C/C++ (1) Lập trình căn bản (7) Lập trình Cơ sở dữ liệu (2) Lập trình điều khiển thiết bị (1) Lập trình hợp ngữ (1) Lập trình hướng đối tượng (38) Lập trình hướng đối tượng với Java (6) Lập trình mạng (6) Lập trình mobile (3) Lập trình nhúng (1) Lập trình trí tuệ nhân tạo (1) lập trình vi xử lý (1) lập trình viên (1) Lập trình viên độc lập (1) Luyện thi IC3 (4) Lý thuyết Cơ sở dữ liệu (2) Lý thuyết đồ thị (11) Mạng máy tính (1) Mẹo tìm kiếm trên Google (1) Merge-Sort (1) MS Access (1) Mua hàng trên Amazon (1) Nghiên cứu khoa học (1) ngon-ngu-khac (1) Ngôn ngữ lập trình (1) Nhúng code Assembly trong C\C++ (2) Những lỗi thường gặp khi lập trình (1) Oracle (1) Pascal (3) payoneer (1) people-group (1) phần cứng máy tính (1) PHP (1) Quản lý dự án CNTT (1) Queue (hàng đợi) (1) Quick-Sort (1) Seclection-sort (2) SEO (1) SQL (5) Stack (ngăn xếp) (1) Swift (8) tài liệu CNTT miễn phí (2) Tài liệu tham khảo (2) thanh toán quốc tế (1) Thiết kế Web (2) Thủ thuật máy tính (5) thuattoan-khac (1) Thuật toán (41) Thuật toán di truyền (2) Thuật toán Đệ quy (4) Thuật toán K-Mean (1) Thuật toán khác (9) Thuật toán leo đồi (1) Thuật toán ma trận (7) Thuật toán Sắp Xếp -Sort (9) Thuật toán Tìm kiếm - Search (5) Thương mại điện tử (4) Tiện ích máy tính (3) Tìm hiểu Blockchain (1) Tìm kiếm nhị phân (2) Tìm kiếm tuần tự (Line search) (2) Tin học văn phòng (5) Tin tức công nghệ (7) Tính định thức của ma trận (1) Toán rời rạc (12) Trí tuệ nhân tạo (8) Tự học lập trình Android (14) Tự học lập trình C và CPP (14) tự học lập trình iOS (8) Tự học lập trình java qua các ví dụ (7) Ứng dụng cơ sở dữ liệu (1) VB (2) vẽ ngôi nhà (1) ví dụ Assembly (1) xcode (8) XML (1) Xử lý ma trận (mảng 2 chiều) (7) Xử lý mảng 1 chiều (1) Xử lý ngoại lệ (1)