Tìm kiếm Bài giảng
Bài giảng cấu trúc dữ liệu và giải thuật (2/5)

- 0 / 0
(Tài liệu chưa được thẩm định)
Nguồn:
Người gửi: Nguyễn Tứ Hải
Ngày gửi: 11h:29' 11-01-2026
Dung lượng: 368.0 KB
Số lượt tải: 1
Nguồn:
Người gửi: Nguyễn Tứ Hải
Ngày gửi: 11h:29' 11-01-2026
Dung lượng: 368.0 KB
Số lượt tải: 1
Số lượt thích:
0 người
Chương 2:
CÁC KIỂU DỮ LIỆU CƠ SỞ
1. Các kiểu dữ liệu cơ bản
- Kiểu nguyên
- Kiểu thực
- Kiểu kí tự
1.1. Kiểu số nguyên
Tên kiểu
Kích thước
Miền giá trị
short int
2 bytes
-32.768 đến 32.767
int
2 bytes
-32.768 đến 32.767
long
4 bytes
- 2 tỷ đến 2 tỷ
unsigned int
2 bytes
0 đến 65.535
unsigned long
4 bytes
0 đến 4 tỷ
1.2. Kiểu số thực
•
Tên kiểu
Kích thước
Miền giá trị
float
4 bytes
3.4*10-38 đến 3.4*1038
double
8 bytes
1.7*10-308 đến 1.7*10308
long double
10 bytes
3.4*10-4932 đến 3.4*104932
1.3. Kiểu kí tự
•
Tên kiểu
char
Kích thước
Miền giá trị
1 bytes
256 kí tự trong bảng mã
ASCII
Ví dụ:
- Khai báo các biến thuộc kiểu dữ liệu cơ bản
int tuoi;
float dai,rong;
char ten;
- Khai báo hằng số thuộc kiểu dữ liệu cơ bản
const float PI = 3.14;
(hoặc viết #define PI 3.14)
2. Kiểu dữ liệu có cấu trúc
Trong lập trình, việc lưu trữ các giá trị gồm nhiều thành
phần dữ liệu giống nhau ta có kiểu mảng. Thực tế rất
nhiều dữ liệu là tập các kiểu dữ liệu khác nhau tập hợp lại,
để quản lý dữ liệu kiểu này ngôn ngữ C đưa ra kiểu dữ liệu
cấu trúc
Struct (tạm dịch là cấu trúc) là một kiểu dữ liệu
phức hợp được tạo từ các kiểu dữ liệu khác, các kiểu dữ
liệu này được sử dụng khai báo cho các biến thành phần
của biến kiểu struct.
Tại sao lại cần cấu trúc trong C?
•Giả sử nếu ta muốn lưu trữ thông tin về một nhân viên
gồm: tên, số CCCD, mức lương. Ta có thể tạo ra các biến
ten, cccd và luong khác nhau để lưu trữ những thông tin
này.
•Vậy nếu muốn lưu trữ thông tin của nhiều nhân viên thì
sao? Trong trường hợp này, ta cần tạo nhiều biến cho từng
thông tin của từng nhân viên: ten1, cccd1, luong1, ten2,
cccd2, luong2,…
• Một cách tiếp cận tốt hơn chính là nên tạo ra một bộ sưu
tập chứa các thông tin liên quan trong một cấu trúc đơn lẻ
nhanvien và sử dụng nó cho tất cả nhân viên.
* Định nghĩa kiểu:
struct
{
;
;
…
};
Ví dụ: struct NHANVIEN
{
int maso;
char ten[30];
float luong;
};
struct NHANVIEN
{
int maso;
char ten[30];
float luong;
};
Để có được một biến cấu trúc ta phải khai báo biến với kiểu
là cấu trúc đó.
Cú pháp : struct ;
Ví dụ:
struct NHANVIEN nv; //Khai báo biến nv thuộc kiểu NHANVIEN
struct NHANVIEN nv[100]; //khai báo mảng 1 chiều nv chứa 100
nhân viên.
Ta cũng có thể khai báo biến cấu trúc tại thời điểm định
nghĩa cấu trúc
struct NHANVIEN
{
int maso;
char ten[30];
float luong;
} nv1,nv2;
* Truy xuất các thành phần của một biến cấu trúc:
Truy xuất thành phần cấu trúc bằng dấu chấm “.”
.
Ví dụ: trong khai báo sau
struct NHANVIEN
{
int maso;
char ten[30];
float luong;
};
struct NHANVIEN nv;
Muốn truy cập vào thành phần luong, ta viết: nv.luong;
Muốn gán giá trị 123 cho maso, ta viết: nv.maso=123;
Ví dụ 1: Nhập thông tin của 1 nhân viên, lưu tất cả thông
tin vào biến cấu trúc nv
Kết quả:
Ví dụ 2: Nhập thông tin của 10 nhân viên
Kết quả:
Khi nhập mã số cho nhân viên xong, ta nhấn Enter. Trình
biên dịch Compiler sẽ nhận đây là một xâu và truyền nó
vào biến ten. Kết quả là ta không nhập thông tin cho biến
ten được.
Vì vậy, tại dòng 16, có sử dụng hàm fflush(stdin); với mục
đích xóa đi bộ nhớ tạm thời của chương trình để không tồn
tại những giá trị rác như bên trên.
• Sử dụng typedef struct trong C
typedef trong C là một câu lệnh có tác dụng định nghĩa
lại kiểu struct bằng một tên khác.
Cú pháp:
typedef struct {
;
;
…
} Kiểu_cấu_trúc;
Sau khi định nghĩa, Kiểu_cấu_trúc sẽ được coi là 1 kiểu
dữ liệu (không phải là biến)
Ví dụ:
typedef struct {
char Ten[30];
int Namsinh;
float DiemTB;
} HocVien; //HocVien sẽ là một kiểu dữ liệu mới
HocVien HV1, HV2; //khai báo hai biến HV1 và HV2 có
kiểu dữ liệu HocVien
HocVien DSHV[50]; //khai báo một mảng có tên DSHV
gồm 50 phần tử có kiểu HocVien
CÁC KIỂU DỮ LIỆU CƠ SỞ
1. Các kiểu dữ liệu cơ bản
- Kiểu nguyên
- Kiểu thực
- Kiểu kí tự
1.1. Kiểu số nguyên
Tên kiểu
Kích thước
Miền giá trị
short int
2 bytes
-32.768 đến 32.767
int
2 bytes
-32.768 đến 32.767
long
4 bytes
- 2 tỷ đến 2 tỷ
unsigned int
2 bytes
0 đến 65.535
unsigned long
4 bytes
0 đến 4 tỷ
1.2. Kiểu số thực
•
Tên kiểu
Kích thước
Miền giá trị
float
4 bytes
3.4*10-38 đến 3.4*1038
double
8 bytes
1.7*10-308 đến 1.7*10308
long double
10 bytes
3.4*10-4932 đến 3.4*104932
1.3. Kiểu kí tự
•
Tên kiểu
char
Kích thước
Miền giá trị
1 bytes
256 kí tự trong bảng mã
ASCII
Ví dụ:
- Khai báo các biến thuộc kiểu dữ liệu cơ bản
int tuoi;
float dai,rong;
char ten;
- Khai báo hằng số thuộc kiểu dữ liệu cơ bản
const float PI = 3.14;
(hoặc viết #define PI 3.14)
2. Kiểu dữ liệu có cấu trúc
Trong lập trình, việc lưu trữ các giá trị gồm nhiều thành
phần dữ liệu giống nhau ta có kiểu mảng. Thực tế rất
nhiều dữ liệu là tập các kiểu dữ liệu khác nhau tập hợp lại,
để quản lý dữ liệu kiểu này ngôn ngữ C đưa ra kiểu dữ liệu
cấu trúc
Struct (tạm dịch là cấu trúc) là một kiểu dữ liệu
phức hợp được tạo từ các kiểu dữ liệu khác, các kiểu dữ
liệu này được sử dụng khai báo cho các biến thành phần
của biến kiểu struct.
Tại sao lại cần cấu trúc trong C?
•Giả sử nếu ta muốn lưu trữ thông tin về một nhân viên
gồm: tên, số CCCD, mức lương. Ta có thể tạo ra các biến
ten, cccd và luong khác nhau để lưu trữ những thông tin
này.
•Vậy nếu muốn lưu trữ thông tin của nhiều nhân viên thì
sao? Trong trường hợp này, ta cần tạo nhiều biến cho từng
thông tin của từng nhân viên: ten1, cccd1, luong1, ten2,
cccd2, luong2,…
• Một cách tiếp cận tốt hơn chính là nên tạo ra một bộ sưu
tập chứa các thông tin liên quan trong một cấu trúc đơn lẻ
nhanvien và sử dụng nó cho tất cả nhân viên.
* Định nghĩa kiểu:
struct
{
…
};
Ví dụ: struct NHANVIEN
{
int maso;
char ten[30];
float luong;
};
struct NHANVIEN
{
int maso;
char ten[30];
float luong;
};
Để có được một biến cấu trúc ta phải khai báo biến với kiểu
là cấu trúc đó.
Cú pháp : struct
Ví dụ:
struct NHANVIEN nv; //Khai báo biến nv thuộc kiểu NHANVIEN
struct NHANVIEN nv[100]; //khai báo mảng 1 chiều nv chứa 100
nhân viên.
Ta cũng có thể khai báo biến cấu trúc tại thời điểm định
nghĩa cấu trúc
struct NHANVIEN
{
int maso;
char ten[30];
float luong;
} nv1,nv2;
* Truy xuất các thành phần của một biến cấu trúc:
Truy xuất thành phần cấu trúc bằng dấu chấm “.”
Ví dụ: trong khai báo sau
struct NHANVIEN
{
int maso;
char ten[30];
float luong;
};
struct NHANVIEN nv;
Muốn truy cập vào thành phần luong, ta viết: nv.luong;
Muốn gán giá trị 123 cho maso, ta viết: nv.maso=123;
Ví dụ 1: Nhập thông tin của 1 nhân viên, lưu tất cả thông
tin vào biến cấu trúc nv
Kết quả:
Ví dụ 2: Nhập thông tin của 10 nhân viên
Kết quả:
Khi nhập mã số cho nhân viên xong, ta nhấn Enter. Trình
biên dịch Compiler sẽ nhận đây là một xâu và truyền nó
vào biến ten. Kết quả là ta không nhập thông tin cho biến
ten được.
Vì vậy, tại dòng 16, có sử dụng hàm fflush(stdin); với mục
đích xóa đi bộ nhớ tạm thời của chương trình để không tồn
tại những giá trị rác như bên trên.
• Sử dụng typedef struct trong C
typedef trong C là một câu lệnh có tác dụng định nghĩa
lại kiểu struct bằng một tên khác.
Cú pháp:
typedef struct {
…
} Kiểu_cấu_trúc;
Sau khi định nghĩa, Kiểu_cấu_trúc sẽ được coi là 1 kiểu
dữ liệu (không phải là biến)
Ví dụ:
typedef struct {
char Ten[30];
int Namsinh;
float DiemTB;
} HocVien; //HocVien sẽ là một kiểu dữ liệu mới
HocVien HV1, HV2; //khai báo hai biến HV1 và HV2 có
kiểu dữ liệu HocVien
HocVien DSHV[50]; //khai báo một mảng có tên DSHV
gồm 50 phần tử có kiểu HocVien
 








Các ý kiến mới nhất