L1. Các Kiểu Dữ Liệu Cơ Bản trong C++
1. Cấu Trúc Chương Trình C++
Một chương trình C++ cơ bản có cấu trúc như sau:
#include <iostream>
int main()
{
std::cout << "Xin chao";
return 0;
}2. Bộ Từ Vựng trong C++
2.1. Ký Tự
C++ sử dụng các loại ký tự sau:
| Loại ký tự | Mô tả | Ví dụ |
|---|---|---|
| Chữ cái Latin | 26 ký tự Latinh | A-Z, a-z |
| Chữ số thập phân | Các chữ số | 0-9 |
| Ký hiệu toán học | Các phép toán | + - * / = < > ( ) |
| Ký tự đặc biệt | Ký tự điều khiển | . , : ; [ ] % \ # $ ' |
| Ký tự khác | Gạch nối và khoảng trắng | _ và ’ ' |
2.2. Từ Khóa (Keywords)
Từ khóa là các từ dành riêng trong ngôn ngữ C++, không thể sử dụng để đặt tên biến, hàm hay chương trình con.
// Các từ khóa thông dụng
const, enum, signed, struct, typedef, unsigned
char, double, float, int, long, short, void
case, default, else, if, switch
do, for, while
break, continue, goto, return2.3. Tên/Định Danh (Identifier)
Định danh là dãy ký tự dùng để đặt tên cho hằng, biến, kiểu dữ liệu, hàm.
Quy tắc đặt tên:
- Không trùng với từ khóa
- Ký tự đầu tiên phải là chữ cái hoặc dấu gạch dưới
_ - Độ dài tối đa: 255 ký tự
- Không chứa khoảng trắng
- Phân biệt chữ hoa/thường
// Tên hợp lệ
GiaiPhuongTrinh
Bai_Tap1
so_nguyen
_temp
// Tên KHÔNG hợp lệ
1A // Bắt đầu bằng số
Giai Phuong Trinh // Có khoảng trắng
@mail // Ký tự đặc biệt không hợp lệ
default // Trùng từ khóa
2.4. Hằng Ký Tự và Hằng Chuỗi
// Hằng ký tự - sử dụng dấu nháy đơn
char ch = 'A';
char c = 'a';
// Hằng chuỗi - sử dụng dấu nháy kép
std::string str = "Hello World!";
std::string name = "Nguyen Van A";2.5. Dấu Chấm Phẩy
Dấu chấm phẩy ; dùng để phân cách các câu lệnh:
// Các câu lệnh trên cùng một dòng
std::cout << "Xin chao"; return 0;
// Hoặc tách riêng (khuyến nghị)
std::cout << "Xin chao";
return 0;2.6. Câu Chú Thích (Comments)
Chú thích giúp mô tả và ghi chú trong source code, làm code dễ đọc hơn.
Cách 1: Chú thích nhiều dòng
/* Đây là câu chú thích 1
Đây là câu chú thích 2
Có thể viết nhiều dòng */Cách 2: Chú thích một dòng (Khuyến nghị)
// Đây là câu chú thích 1
// Đây là câu chú thích 2
3. Các Kiểu Dữ Liệu Cơ Sở
3.1. Kiểu Số Nguyên
| Kiểu dữ liệu | Kích thước | Phạm vi |
|---|---|---|
short | 2 bytes | -32,768 đến 32,767 |
unsigned short | 2 bytes | 0 đến 65,535 |
int | 4 bytes | -2,147,483,648 đến 2,147,483,647 |
unsigned int | 4 bytes | 0 đến 4,294,967,295 |
long | 4 bytes | -2,147,483,648 đến 2,147,483,647 |
unsigned long | 4 bytes | 0 đến 4,294,967,295 |
long long | 8 bytes | -9,223,372,036,854,775,807 đến 9,223,372,036,854,775,807 |
unsigned long long | 8 bytes | 0 đến 18,446,744,073,709,551,615 |
3.2. Kiểu Số Thực
Các cách biểu diễn số thực:
// Dạng thập phân
float a = 45.0;
double b = -256.45;
float c = +122.8;
// Dạng khoa học
float d = 1.257E+01; // 1.257 × 10¹ = 12.57
double e = 1257.0E-02; // 1257 × 10⁻² = 12.57
| Kiểu dữ liệu | Kích thước | Phạm vi | Độ chính xác |
|---|---|---|---|
float | 4 bytes | 3.4E-38 đến 3.4E+38 | ~7 chữ số |
double | 8 bytes | 1.7E-308 đến 1.7E+308 | ~15 chữ số |
long double | 8-16 bytes | 1.7E-308 đến 1.7E+308 | ~15-19 chữ số |
3.3. Kiểu Luận Lý/Logic (Boolean)
| Kiểu dữ liệu | Kích thước | Giá trị |
|---|---|---|
bool | 1 byte | false (0) hoặc true (khác 0) |
// Các cách khởi tạo giá trị boolean
bool isTrue1 = 1; // true
bool isFalse1 = 0; // false
bool isTrue2 = true; // true
bool isFalse2 = false; // false
bool isTrue3 = 100; // true (khác 0)
3.4. Kiểu Void
Kiểu void là kiểu dữ liệu rỗng, không chứa giá trị.
Cách sử dụng:
1. Hàm không trả về giá trị:
void swap(int &a, int &b) {
int c = b;
b = a;
a = c;
}2. Con trỏ void (con trỏ chung):
int a = 10;
float b = 5.0;
void *c; // Con trỏ void
c = &a; // Trỏ đến int
c = &b; // Trỏ đến float
3.5. Kiểu Ký Tự
Kiểu ký tự được biểu diễn thông qua bảng mã ASCII.
| Kiểu dữ liệu | Kích thước | Giá trị |
|---|---|---|
char | 1 byte | -128 đến 127 hoặc 0 đến 255 |
unsigned char | 1 byte | 0 đến 255 |
Bảng mã ASCII thông dụng:
| Ký tự | Mã ASCII |
|---|---|
| 0-9 | 48-57 |
| A-Z | 65-90 |
| a-z | 97-122 |
| Enter | 13 |
| ESC | 27 |
| Space | 32 |
| " | 34 |
| + | 43 |
| - | 45 |
| * | 42 |
| / | 47 |
Phân loại 256 ký tự ASCII:
So sánh ký tự:
#include <iostream>
int main() {
char a = 'a';
char b = 'b';
std::cout << (a < b); // Kết quả: 1 (true)
// Vì mã ASCII của 'a' (97) < mã ASCII của 'b' (98)
return 0;
}3.6. Typedef
typedef dùng để đặt tên mới cho kiểu dữ liệu có sẵn.
Cú pháp:
typedef kiểu_có_sẵn tên_mới;Ví dụ:
typedef int songuyen;
typedef float sothuc;
int a; // Cách thông thường
songuyen b; // Sử dụng typedef
float x;
sothuc y;3.7. Enum (Enumeration)
enum là kiểu dữ liệu liệt kê, giúp định nghĩa tập hợp các hằng số có tên.
Cú pháp:
enum tên_danh_sách {
danh_sách_các_tên
};Ví dụ:
#include <iostream>
enum gioi_tinh {
nam = 1,
nu = 2,
khac = 3
};
int main() {
gioi_tinh sv_gt = nam;
std::cout << sv_gt; // Kết quả: 1
return 0;
}4. Biến (Variables)
4.1. Giới Thiệu Chung
Biến là một ô nhớ hoặc vùng nhớ dùng để chứa dữ liệu trong quá trình thực hiện chương trình.
Đặc điểm:
- Mỗi biến có một kiểu dữ liệu cụ thể
- Kích thước phụ thuộc vào kiểu dữ liệu
- Giá trị có thể thay đổi trong quá trình chạy chương trình
Quy tắc đặt tên biến:
- Không trùng với từ khóa hoặc tên hàm
- Ký tự đầu tiên là chữ cái hoặc
_ - Không chứa khoảng trắng
- Nên sử dụng chữ thường với
_giữa các từ
// Đặt tên biến theo chuẩn Google C++ Style Guide
int so_nguyen;
float so_thuc;
double gia_tri_trung_binh;4.2. Cú Pháp Khai Báo Biến
Cách 1: Khai báo nhiều biến cùng kiểu trên một dòng
kiểu_dữ_liệu tên_biến_1, tên_biến_2, tên_biến_3;
// Ví dụ
int i, j, k;
char c, ch;
float f, salary;
double d;Cách 2: Khai báo từng biến riêng biệt
kiểu_dữ_liệu tên_biến_1;
kiểu_dữ_liệu tên_biến_2;
// Ví dụ
int i;
int j;
int k;Khai báo và khởi tạo giá trị:
kiểu_dữ_liệu tên_biến = giá_trị;
// Ví dụ
int d = 3;
char x = 'x';
float f = 2.1;4.3. Địa Chỉ Của Biến
RAM được tạo từ nhiều ô nhớ, mỗi ô nhớ:
- Có kích thước 1 byte
- Có địa chỉ duy nhất, đánh số từ 0
Mỗi biến khi được khai báo sẽ được cấp phát một vùng nhớ với địa chỉ duy nhất.
Truy cập địa chỉ biến: Sử dụng toán tử &
#include <iostream>
int main() {
int a = 5;
std::cout << "Gia tri cua a: " << a << '\n';
std::cout << "Dia chi cua a: " << &a << '\n';
return 0;
}Kết quả:
Gia tri cua a: 5
Dia chi cua a: 008FF82C4.4. Biến Cục Bộ (Local Variable)
Định nghĩa: Biến được khai báo bên trong một hàm hoặc block.
Đặc điểm:
- Chỉ sử dụng được trong hàm/block khai báo
- Các hàm khác không thể truy cập
- Được tạo khi vào hàm/block, hủy khi ra khỏi hàm/block
#include <iostream>
int main() {
int a = 2, b = 3; // Biến cục bộ
int c; // Biến cục bộ
c = a + b;
std::cout << c;
return 0;
}
// Biến a, b, c chỉ tồn tại trong hàm main
4.5. Biến Toàn Cục (Global Variable)
Định nghĩa: Biến được khai báo bên ngoài tất cả các hàm.
Đặc điểm:
- Thường được định nghĩa ở đầu file source code
- Giữ giá trị xuyên suốt chương trình
- Tất cả các hàm đều có thể truy cập
#include <iostream>
int g; // Biến toàn cục
int main() {
int a = 2, b = 3; // Biến cục bộ
g = a + b; // Truy cập biến toàn cục
std::cout << g;
return 0;
}4.6. Khởi Tạo Biến Cục Bộ và Toàn Cục
Biến cục bộ:
- Không được tự động khởi tạo giá trị
- Phải gán giá trị trước khi sử dụng
- Giá trị ngẫu nhiên nếu không khởi tạo
Biến toàn cục:
- Được tự động khởi tạo giá trị mặc định
| Kiểu dữ liệu | Giá trị khởi tạo mặc định |
|---|---|
int | 0 |
char | ‘\0’ |
float | 0.0 |
double | 0.0 |
pointer | NULL |
#include <iostream>
int g; // Tự động = 0
int main() {
int a; // Giá trị ngẫu nhiên (rác)
int b = 10; // Khởi tạo = 10
std::cout << g; // OK: 0
std::cout << b; // OK: 10
std::cout << a; // Nguy hiểm: giá trị rác
return 0;
}5. Hằng (Constants)
5.1. Khái Niệm
Hằng là giá trị không đổi trong suốt quá trình thực thi chương trình.
Đặc điểm:
- Không thể gán lại giá trị
- Giúp code an toàn và dễ bảo trì hơn
5.2. Các Loại Hằng
1. Hằng số nguyên:
int dec = 212; // Hệ thập phân (cơ số 10)
int oct = 0213; // Hệ bát phân (cơ số 8) - bắt đầu bằng 0
int hex = 0x4b; // Hệ thập lục phân (cơ số 16) - bắt đầu bằng 0x
2. Hằng số thực:
float a = 102.0;
double b = -223.1;
float c = 1234.56e-3; // 1234.56 × 10⁻³ = 1.23456
3. Hằng luận lý:
bool isValid = true;
bool isError = false;4. Hằng ký tự/chuỗi:
char ch = 'A';
std::string path = "C:\\user\\username\\local";
std::string name = "Nguyen Van A";5.3. Định Nghĩa Hằng
Cách 1: Sử dụng #define
#define tên_hằng giá_trị#include <iostream>
#define PI 3.14
int main() {
int r = 2;
std::cout << 2 * r * PI; // Kết quả: 6.28
return 0;
}Cách 2: Sử dụng const (Khuyến nghị)
const kiểu_giá_trị tên_hằng = giá_trị_hằng;#include <iostream>
int main() {
const float PI = 3.14;
int r = 2;
std::cout << r * PI; // Kết quả: 6.28
return 0;
}5.4. So Sánh #define và const
| Tiêu chí | #define | const |
|---|---|---|
| Xử lý | Preprocessor (trước biên dịch) | Compiler (khi biên dịch) |
| Kiểm tra kiểu | Không | Có |
| Phạm vi | Toàn file | Theo scope |
| Debug | Khó | Dễ |
| Bộ nhớ | Không chiếm | Chiếm |
6. Bài Tập Minh Họa
Bài 1: Tính Tuổi
Cho biết năm sinh của một người và tính tuổi của người đó.
#include <iostream>
int main() {
int nam_sinh = 1998;
int nam_hien_tai = 2024;
int tuoi = 0;
tuoi = nam_hien_tai - nam_sinh;
std::cout << "Tuoi: " << tuoi;
return 0;
}Bài 2: Các Phép Toán Cơ Bản
Cho 2 số a, b. Tính tổng, hiệu, tích và thương của hai số đó.
#include <iostream>
int main() {
int a = 10;
int b = 3;
int tong = a + b;
int hieu = a - b;
int tich = a * b;
float thuong = (float)a / b;
std::cout << "Tong: " << tong << '\n';
std::cout << "Hieu: " << hieu << '\n';
std::cout << "Tich: " << tich << '\n';
std::cout << "Thuong: " << thuong << '\n';
return 0;
}Bài 3: Tính Tiền và Thuế VAT
Cho biết tên sản phẩm, số lượng và đơn giá. Tính tiền và thuế VAT phải trả.
#include <iostream>
int main() {
int so_luong = 10;
int don_gia = 500;
int tien = 0;
float vat = 0;
tien = so_luong * don_gia;
vat = tien * 0.1; // VAT 10%
std::cout << "Tien: " << tien << '\n';
std::cout << "VAT: " << vat << '\n';
std::cout << "Tong cong: " << tien + vat << '\n';
return 0;
}Bài 4: Tính Điểm Trung Bình
Cho điểm thi và hệ số 3 môn Toán, Lý, Hóa. Tính điểm trung bình.
#include <iostream>
int main() {
float toan = 6.5;
float hs_toan = 2.0;
float ly = 7.0;
float hs_ly = 1.0;
float hoa = 7.5;
float hs_hoa = 1.0;
float dtb = (toan * hs_toan + ly * hs_ly + hoa * hs_hoa)
/ (hs_toan + hs_ly + hs_hoa);
std::cout << "Diem trung binh: " << dtb;
return 0;
}Bài 5: Tính Chu Vi và Diện Tích Hình Tròn
Cho bán kính đường tròn, tính chu vi và diện tích.
#include <iostream>
#define PI 3.14
int main() {
float r = 6.5;
float chu_vi = 0;
float dien_tich = 0;
chu_vi = 2 * PI * r;
dien_tich = PI * r * r;
std::cout << "Chu vi: " << chu_vi << '\n';
std::cout << "Dien tich: " << dien_tich << '\n';
return 0;
}