Thứ Tư, 27 Tháng Mười Một 2024
Trang chủLập trìnhLập trình C/C++Dữ liệu kiểu cấu trúc trong ngôn ngữ lập trình C

Dữ liệu kiểu cấu trúc trong ngôn ngữ lập trình C

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);
}
0 0 Phiếu bình chọn
Xếp hạng bài viết
BÀI VIẾT LIÊN QUAN
Đăng ký nhận thông báo
Thông báo email khi
guest
0 Bình luận
Không thể gửi email
Phản hồi nội tuyến

NÊN ĐỌC THÊM

Bạn muốn tìm kiếm gì?

Dịch vụ code thuê

TUICOCACH.COM NHẬN ĐẶT TEXTLINK, BANNER, GP
0
Giáo sư! có thể ném gạch bên dưới nhé!x