Bài tập hướng dẫn sử dụng struct c++ năm 2024

Struct hay cấu trúc là một kiểu dữ liệu mà người dùng tự định nghĩa ra để giải quyết các bài toán thực tế

NỘI DUNG :

  • Struct
  • Struct lồng nhau
  • Struct làm tham số cho hàm
  • Video tutorial

main

1. Struct

Struct là giải pháp khi bạn cần giải quyết các bài toán thực tế khi mà đối tượng bạn cần lưu lại trong chương trình cần rất nhiều thông tin.

Ví dụ khi bạn muốn lưu thông tin của một sinh viên thì không có kiểu dữ liệu nào trong C phù hợp cả, mà bạn cần tập hợp nhiều kiểu dữ liệu vào làm một.

Struct hay cấu trúc là một kiểu dữ liệu mà tự bạn định nghĩa ra bằng cách gộp nhiều kiểu dữ liệu có sẵn lại nhằm mục đích có thể mô tả nhiều trường thông tin của đối tượng bạn cần lưu

Cú pháp khai báo :

struct ten_struct{

 data_type1 data_field1;  
 data_type2 data_field2;  
 ....  
 data_typen data_fieldn;  
};

Trong struct bạn sẽ liệt kê các trường thông tin mà bạn cần lưu cho cấu trúc bạn đang xây dựng kèm theo kiểu dữ liệu của trường thông tin đó

Ví dụ bạn muốn xây dựng một cấu trúc lưu sinh viên gồm :

  • Họ tên - Chuỗi ký tự không quá 50
  • Email - Chuỗi ký tự không quá 50
  • Tên lớp - Chuỗi ký tự không quá 30
  • Điểm gpa - Số thực

Ta sẽ xây dựng cấu trúc sinh viên như sau :

struct SinhVien{

char hoten[50];  
char email[50];  
char lop[30];  
double gpa;  
};

Sau khi xây dựng xong cấu trúc thì bạn có thể dùng nó như kiểu dữ liệu thông thường và khai báo các biến thuộc kiểu cấu trúc này.

Lưu ý là struct trong C khi khai báo bạn cần thêm từ khóa struct ở trước, nếu bạn không muốn khai báo từ khóa struct mỗi khi dùng cấu trúc thì có thể typedef để định nghĩa lại kiểu cho cấu trúc.

Để truy cập vào các trường dữ liệu của cấu trúc bạn dùng toán tử '.' (dot operator)

Ví dụ 1 :

include "stdio.h"

include "string.h"

struct SinhVien{

char hoten[50];  
char email[50];  
char lop[30];  
double gpa;  
}; typedef struct SinhVien SinhVien; int main(){
SinhVien s;   
strcpy(s.hoten, "Nguyen Van 28Tech");  
strcpy(s.email, "[email protected]");  
strcpy(s.lop, "CNTT");  
s.gpa = 2.1;  
printf("Thong tin sinh vien : \n");  
printf("Ho ten : %s\n", s.hoten);  
printf("Email : %s\n", s.email);  
printf("Lop : %s\n", s.lop);  
printf("Diem gpa : %.2lf\n", s.gpa);  
return 0;  
}

Output :

Thong tin sinh vien : Ho ten : Nguyen Van 28Tech Email : [email protected] Lop : CNTT Diem gpa : 2.10

Bạn có thể gán 2 cấu trúc cho nhau, khi đó các trường thông tin của 2 biến struct là giống nhau

Ví dụ 2 : Nhập thông tin struct từ bàn phím

include "stdio.h"

include "string.h"

struct SinhVien{

char hoten[50];  
char email[50];  
char lop[30];  
double gpa;  
}; typedef struct SinhVien SinhVien; int main(){
SinhVien s;   
printf("Nhap ten : ");   
gets(s.hoten);  
printf("Nhap email : ");  
gets(s.email);  
printf("Nhap lop : ");  
gets(s.lop);  
printf("Nhap gpa : ");  
scanf("%lf", &s.gpa);  
printf("Thong tin sinh vien : \n");  
printf("Ho ten : %s\n", s.hoten);  
printf("Email : %s\n", s.email);  
printf("Lop : %s\n", s.lop);  
printf("Diem gpa : %.2lf\n", s.gpa);  
return 0;  
}


2. Struct lồng nhau

Struct có thể làm kiểu dữ liệu cho một trường thông tin trong một struct khác, khi đó ta có struct trong struct

Ví dụ bạn cần quản lý thông tin của 1 cuốn sách, cuốn sách này có tác giả cần lưu thông tin về tên và quốc tịch của tác giả đó

Khi đó bạn hãy xây dựng trước cấu trúc lưu tác giả, sau đó xây dựng struct sách. Trong struct sách sẽ có 1 biến thuộc kiểu tác giả để lưu thông tin

Code :

include "stdio.h"

include "string.h"

struct TacGia{

char hoten[100];  
char quoctich[100];  
}; typedef struct TacGia TacGia; struct Sach{
TacGia tg;  
char tensach[100];  
int giaban;  
}; typedef struct Sach Sach; int main(){
Sach s;  
strcpy(s.tensach, "Hanh trinh vo dich WC 2022");  
s.giaban = 500000;  
strcpy(s.tg.hoten, "Lionel Messi");  
strcpy(s.tg.quoctich, "Argentina");  
printf("Thong tin sach : \n");  
printf("Tieu de : %s\n", s.tensach);  
printf("Ten tac gia : %s\n", s.tg.hoten);  
printf("Quoc tich tac gia : %s\n", s.tg.quoctich);  
printf("Gia ban : %dVND\n", s.giaban);  
return 0;  
}

Output :

Thong tin sach : Tieu de : Hanh trinh vo dich WC 2022 Ten tac gia : Lionel Messi Quoc tich tac gia : Argentina Gia ban : 500000VND


3. Struct làm tham số cho hàm

Sau khi xây dựng xong struct thì nó cũng là một kiểu dữ liệu vì thế mà bạn có thể viết hàm có tham số là struct hoặc trả về struct.

Trong ví dụ dưới đây mình sẽ viết hàm trả về 1 struct được nhập từ bàn phím và 1 hàm in ra thông tin của 1 struct ra màn hình.