Mảng Struct Và Ví Dụ ứng Dụng
Có thể bạn quan tâm
Trong thực tế, các bài toán liên quan đến mảng struct khá nhiều khi các kiểu dữ liệu của ngôn ngữ bạn đang sử dụng không đáp ứng được nhu cầu hay đáp ứng được lại quá phức tạp và tốn nhiều dữ liệu khi sử dụng.
Nên để giải quyết các bài toán như thế chúng ta đã có cách đó là sử dụng dữ liệu kiểu cấu trúc STRUCT (Nếu bạn nào chưa biết STRUCT là gì các bạn có thể xem tại đây), nhưng để làm sao để sử dụng một cách có hiệu quả và không làm phức tạp hóa vấn đề thì hôm nay chúng ta sẽ tìm hiểu về MẢNG CẤU TRÚC. Cũng giống như số nguyên thì cấu trúc cũng là một kiểu dữ liệu nên chúng ta vẫn có thể sử dụng mảng. Chúng ta bắt đầu tiềm hiểu với một số ví dụ nhé.
Bài toán đặt ra: Một sinh viên có các thông tin bao gồm: Tên sinh viên, mã số sinh viên, năm sinh, điểm trung bình và số ngày nghỉ. Nhà trường cần nhập thông tin của tất cả các sinh viên đang theo học tại trường và lập ra danh sách các học sinh có thành tích tốt trong học tập ( điểm trung bình lớn hơn 7.0) để khen thưởng và danh sách các học sinh có số ngày nghỉ lớn hơn 3 để ra nhắc nhở sinh viên đó.
Giải quyết bài toán: Do trong ngôn ngữ C/C++ không có kiểu dữ liệu SinhVien nên chúng ta cần tạo ra một Struct chứa tất cả các kiểu dữ liệu thõa mãn đề bài. Ngoài ra để xử lí được yêu cầu của bài toán chúng ta cần phải tại thêm một mảng 1 chiều cho kiểu dữ liệu SinhVien.
Trình tự thực hiện
Khai báo Struct SinhVien cho chương trình và xuất ra tất cả các sinh viên.
Code C/C++
struct SinhVien { char ten[20]; char ma[10]; int namsinh; float dtb; int songaynghi; };Viết các khái báo nguyên mẫu hàm cho chương trình cần sử dụng
void NhapMang(SinhVien a[], int &n); void XuatMang(SinhVien a[], int n); void XuatSV(SinhVien a[], int n);Các hàm định nghĩa:
+ Hàm nhập mảng:
void NhapMang(SinhVien a[], int &n) { do{ printf("Cho biet so Sinh vien: "); scanf("%d", &n); } while (n <= 0); for (int i = 1; i <= n; i++) { printf("Thong tin Sinh vien thu %d la: \n", i); printf("Ten: \n"); fflush(stdin); gets(a[i].ten); printf("Ma so: \n"); fflush(stdin); gets(a[i].ma); printf("Nam sinh :\n"); scanf("%d", &a[i].namsinh); printf("Diem Trung Binh: \n"); scanf("%f", &a[i].dtb); printf("So ngay nghi: \n"); scanf("%d", &a[i].songaynghi); } }+ Hàm xuất mảng:
void XuatMang(SinhVien a[], int n) { printf("Ten\t\t Ma\t\t NamSinh\t DTB\t \tSoNgayNghi"); for (int i = 1; i <= n; i++) { printf("\n%s %s \t %d \t\t %f \t%d\n", a[i].ten,a[i].ma,a[i].namsinh, a[i].dtb, a[i].songaynghi); } }+ Hàm main
void main() { SinhVien A[100]; int N; NhapMang(A, N); XuatMang(A, N); getch(); }Kết quả
Cho biet so Sinh vien: 2
Thong tin Sinh vien thu 1 la:
Ten:
Nguyen Thanh Tuan
Ma so:
2001140442
Nam sinh :
1996
Diem Trung Binh:
7.2
So ngay nghi:
1
Thong tin Sinh vien thu 2 la:
Ten:
Le Thi Thanh Huyen
Ma so:
2001140443
Nam sinh :
1997
Diem Trung Binh:
6.3
So ngay nghi:
0
Ten Ma NamSinh DTB SoNgayNghi
Nguyen Thanh Tuan 2001140442 1996 7.200000 1
Le Thi Thanh Huyen 2001140443 1997 6.300000 0
Ngoài ra bài toán còn yêu cầu xuất ra danh sách các sinh viên có thanh tích tốt để khen thưởng. Để thực hiện yêu cầu trên chúng ta cần viết một hàm gọi là hàm xuất các sinh viên có thành tích tốt với điều kiện như yêu cầu là điểm trung bình lớn hơn 7.0.
Code C/C++
void SVTot(SinhVien a[], int n) { printf("Danh sach cac sinh vien dat thanh tich TOT\n"); printf("Ten\t\t Ma\t\t NamSinh\t DTB\t \tSoNgayNghi"); for (int i = 1; i <= n; i++) { if (a[i].dtb >= 7.0) printf("\n%s %s \t %d \t\t %f \t%d\n", a[i].ten, a[i].ma, a[i].namsinh, a[i].dtb, a[i].songaynghi); } }Kết quả:
Cho biet so Sinh vien: 2
Thong tin Sinh vien thu 1 la:
Ten:
Nguyen Thanh Tuan
Ma so:
2001140442
Nam sinh :
1996
Diem Trung Binh:
7.2
So ngay nghi:
1
Thong tin Sinh vien thu 2 la:
Ten:
Le Thi Thanh Huyen
Ma so:
2001140443
Nam sinh :
1997
Diem Trung Binh:
6.3
So ngay nghi:
0
Ten Ma NamSinh DTB SoNgayNghi
Nguyen Thanh Tuan 2001140442 1996 7.200000 1
Le Thi Thanh Huyen 2001140443 1997 6.300000 0
Danh sach cac sinh vien co thanh tich TOT
Ten Ma NamSinh DTB SoNgayNghi
Nguyen Thanh Tuan 2001140442 1996 7.200000 1
Tương tự như trên ta cũng có hàm điều kiện của các sinh viên có số ngày nghỉ lớn hơn 3 như sau:
Code C/C++
void SVNhacNho(SinhVien a[], int n) { printf("Danh sach cac sinh vien bi NHAC NHO\n"); printf("Ten\t\t Ma\t\t NamSinh\t DTB\t \tSoNgayNghi"); for (int i = 1; i <= n; i++) { if (a[i].songaynghi >= 3) printf("\n%s %s \t %d \t\t %f \t%d\n", a[i].ten, a[i].ma, a[i].namsinh, a[i].dtb, a[i].songaynghi); } }Kết quả:
Cho biet so Sinh vien: 2
Thong tin Sinh vien thu 1 la:
Ten:
Nguyen Van A
Ma so:
11111
Nam sinh :
1996
Diem Trung Binh:
7.0
So ngay nghi:
4
Thong tin Sinh vien thu 2 la:
Ten:
Tran Van B
Ma so:
22222
Nam sinh :
1998
Diem Trung Binh:
8.4
So ngay nghi:
2
Ten Ma NamSinh DTB SoNgayNghi
Nguyen Van A 11111 1996 7.000000 4
Tran Van B 22222 1998 8.400000 2
Danh sach cac sinh vien dat thanh tich TOT
Ten Ma NamSinh DTB SoNgayNghi
Nguyen Van A 11111 1996 7.000000 4
Tran Van B 22222 1998 8.400000 2
Danh sach cac sinh vien bi NHAC NHO
Ten Ma NamSinh DTB SoNgayNghi
Nguyen Van A 11111 1996 7.000000 4
Trên đây là một bài toán cơ bản về mảng Struct. Các bạn có thể tham khảo và phát triển thêm các ví dụ khác tương tự bài toán trên. Chúc các bạn thành công.
Từ khóa » Code Mảng Cấu Trúc
-
Struct Trong C - Kiểu Cấu Trúc (structure) Trong C - Lập Trình Không Khó
-
Mảng Cấu Trúc Trong C
-
Kiểu Cấu Trúc Trong C Là Gì? Cách Khai Báo, Khởi Tạo Và Truy Cập Giá ...
-
Lập Trình C: Cấu Trúc (Struct) | V1Study
-
Cấu Trúc Dữ Liệu Mảng - Mảng Là Gì - Minh Họa C++ - Code Từ Tâm
-
Bài 8.2. Mảng Cấu Trúc (struct Array) Trong Lập Trình C - YouTube
-
Code Mảng Cấu Trúc Sinh Viên Bị Lỗi - Programming - Dạy Nhau Học
-
Cấu Trúc (Struct) Trong C - Hoclaptrinh
-
Cấu Trúc Dữ Liệu Mảng - VietTuts
-
Struct Trong C - Học Lập Trình C Online - Viettuts
-
Lập Trình C: Bài 13 - Kiểu Cấu Trúc - Struct - Nguyễn Văn Quân
-
Cấu Trúc Dữ Liệu Trong C/C++
-
[Basic-DSAA] Cấu Trúc Dữ Liệu Mảng - Array. - CodeLearn
-
C++ STRUCTURES - CẤU TRÚC C++ > Iron Hack Việt Nam