DÁNH SÁCH BÀI VIẾT Lập trình là gì? Một số khái niệm trong lập trình Cài đặt IDE Dev C++ – Môi trường lập trình C/C++ Làm quen với ngôn ngữ C – Chương trình Hello World Những cú pháp cơ bản Các kiểu dữ liệu Biến và Toán tử Vòng lặp for, while và do…while Câu lệnh điều kiện if else Cấu Trúc Rẽ Nhánh Switch … Case Từ khóa break và continue Mảng Hàm Tham biến và Tham trị Chuỗi ký tự Một số hàm xử lý chuỗi Con trỏ Đọc ghi file Struct – Dữ liệu kiểu cấc trúc
trong bài viết này chúng ta sẽ cùng đi tìm hiểu về kiểu struct trong C (kiểu cấu trúc). Bạn sẽ học cách định nghĩa và sử dụng kiểu cấu trúc với sự đi kèm của các ví dụ. Nếu dịch từ tiếng anh ra thì nghĩa của nó là kiểu cấu trúc, tuy nhiên chúng ta vẫn thường hay gọi nó là kiểu struct. Nhưng mục tiêu sau cùng của chúng ta là hiểu và biết cách sử dụng struct trong C, cùng bắt đầu nào…
Kiểu cấu trúc là gì?
Trong ngôn ngữ lập trình C, các lớp và cấu trúc (struct) là các bản thiết kế được sử dụng để tạo ra thể hiện của một lớp. Struct trong C được sử dụng cho các đối tượng nhẹ như Hinhtron, Color, Point v.v.
Không giống như lớp, struct trong C kiểu giá trị hơn là kiểu tham chiếu. Nó rất hữu ích nếu bạn có dữ liệu không có ý định sửa đổi sau khi tạo struct.
Struct trong C là một tập hợp các loại dữ liệu khác nhau. Nó tương tự như lớp chứa các loại dữ liệu khác nhau.
Cú pháp
struct structureName
{
dataType member1;
dataType member2;
...
};
Dưới đây là 1 ví dụ:
struct SinhVien {
int maSV;
char hoTen[50];
bool gioiTinh;
char queQuan[100];
};
Trong trường hợp trên, SinhVien là một cấu trúc chứa bốn biến maSV, hoTen, gioiTinh và queQuan. Như vậy, kiểu dữ liệu SinhVien
đã được định nghĩa từ đây chúng ta có thể khai báo các biến với kiểu dữ liệu này.
Ví dụ khai báo kiểu SinhVien chúng ta vừa định nghĩa làm như sau:
// Khai báo biến sv1 có kiểu SinhVien
SinhVien sv1;
hoặc cũng có thể khai báo theo mảng
// Khai báo mảng sv có kiểu SinhVien gồm 100 phần tử
SinhVien sv[100];
Truy xuất các thuộc tính của struct
Biến của struct có thể được truy cập bằng cách sử dụng thể hiện của struct theo sau bởi toán tử (.) Và sau đó là trường của struct. Ví dụ:
sv1.id = 22;
Cấu trúc struct lồng nhau
Giả sử bạn muốn xây dựng kiểu dữ liệu để lưu trữ đối tượng Con rắn, khi đó chúng ta có thể xây dựng struct mô tả tọa độ của 1 đốt thân rắn, khi đó đối tượng Con rắn sẽ là n đối tượng điểm.
struct Point{
int x; // hoành độ
int y; // tung độ
};
struct Snake{
int n; //độ dài con rắn
Point dot[100]; //Khai báo con rắn tối đa sẽ có 100 đốt
}
int main(){
Triangle sn;
// truy xuất hoành độ và tung độ của đốt thứ nhất
tg.sn[0].x = 5;
tg.sn[0].y = 5;
}
Code minh họa
Xây dựng cấu trúc Sinh viên gồm mã sinh viên, họ tên, giới tính, quê quán.
Nhập và xuất ra thông tin gồm tối đa 100 Sinh viên.
#include <stdio.h>
struct SinhVien {
int maSV;
char hoTen[50];
bool gioiTinh;
char queQuan[100];
};
void nhap(SinhVien sv[], int n)
{
printf("\n----Nhap danh sach sinh vien----\n");
for(int i = 0;i<n;i++)
{
printf("Ma sv: "); scanf("%d", &sv[i].maSV);
printf("Ho ten: "); fflush(stdin); gets(sv[i].hoTen);
printf("Gioi tinh: "); scanf("%d", &sv[i].gioiTinh);
printf("Que quan: "); fflush(stdin); gets(sv[i].queQuan);
printf("\n\n");
}
}
void xuat(SinhVien sv[], int n)
{
printf("\n----XUAT danh sach sinh vien----\n");
for(int i = 0;i<n;i++)
{
printf("%d %s %d %s\n",sv[i].maSV,sv[i].hoTen, sv[i].gioiTinh, sv[i].queQuan );
}
}
int main()
{
int n;
SinhVien sv[100]; // Khai bao cau truc SinhVien gom toi da 100 phan tu
do{
printf("Nhap so sinh vien: ");
scanf("%d", &n);
}while(n < 0 || n> 100);
nhap(sv, n);
xuat(sv,n);
}