Skip to content

📦 Biến và Hằng số trong C++

📖 Giới thiệu

Biến và hằng số là những khái niệm cơ bản nhất trong lập trình. Chúng giống như những chiếc hộp để chứa dữ liệu mà chương trình cần sử dụng. Biến có thể thay đổi giá trị trong quá trình chạy chương trình, còn hằng số thì không.

Trong bài này, chúng ta sẽ học cách khai báo, khởi tạo và sử dụng biến và hằng số. Đây là nền tảng để bạn có thể lưu trữ và xử lý dữ liệu trong các chương trình C++.

Việc hiểu rõ về biến và hằng số sẽ giúp bạn quản lý dữ liệu hiệu quả và viết code dễ hiểu, dễ bảo trì.

🔧 Cú pháp

Ví dụ đơn giản để bắt đầu

Trước khi tìm hiểu chi tiết, hãy xem một ví dụ đơn giản về cách sử dụng biến:

cpp
#include <iostream>
using namespace std;

int main() {
    // Tạo biến đơn giản
    int so = 5;
    string ten = "An";
    
    // Sử dụng biến
    cout << "Tên: " << ten << endl;
    cout << "Số: " << so << endl;
    
    // Thay đổi giá trị
    so = 10;
    cout << "Số mới: " << so << endl;
    
    return 0;
}

Kết quả:

Tên: An
Số: 5
Số mới: 10

Cú pháp chi tiết

Khai báo biến

cpp
// Cú pháp cơ bản
kiểu_dữ_liệu tên_biến;           // Khai báo
kiểu_dữ_liệu tên_biến = giá_trị; // Khai báo và khởi tạo

// Ví dụ cụ thể
int age;                         // Khai báo biến age kiểu int
int height = 175;                // Khai báo và khởi tạo ngay

Khởi tạo biến

cpp
// Các cách khởi tạo
int a = 10;                      // Copy initialization
int b(20);                       // Direct initialization  
int c{30};                       // Uniform initialization (C++11)
int d = {40};                    // Uniform initialization với =

Khai báo hằng số

cpp
const kiểu_dữ_liệu TÊN_HẰNG = giá_trị;

// Ví dụ
const double PI = 3.14159;       // Hằng số PI
const int MAX_STUDENTS = 50;     // Số học sinh tối đa
const string SCHOOL_NAME = "THPT ABC"; // Tên trường

Quy tắc đặt tên

cpp
// Hợp lệ
int age;                         // Tên ngắn gọn, có nghĩa
int student_count;               // Snake case
int studentCount;                // Camel case
int _privateVar;                 // Bắt đầu bằng underscore
int value123;                    // Có chứa số

// Không hợp lệ  
int 123value;                    // Bắt đầu bằng số
int my-var;                      // Chứa dấu gạch ngang
int class;                       // Từ khóa của C++
int my var;                      // Chứa khoảng trắng

🔬 Phân tích & Giải thích chi tiết

Tại sao cần biến?

Biến giống như những chiếc nhãn dán trên các hộp chứa dữ liệu trong bộ nhớ máy tính. Khi bạn muốn lưu trữ một thông tin nào đó (như tuổi của một người), bạn cần một "chiếc hộp" để chứa nó.

cpp
// Thay vì viết số trực tiếp
cout << "Tuổi của bạn là: " << 25 << endl;

// Ta có thể dùng biến để code linh hoạt hơn
int age = 25;
cout << "Tuổi của bạn là: " << age << endl;

Phân biệt biến và hằng số

Khía cạnhBiếnHằng số
Thay đổi giá trịCó thể thay đổiKhông thể thay đổi
Cú phápint x = 10;const int X = 10;
Quy tắc đặt têncamelCase, snake_caseUPPER_CASE
Sử dụngDữ liệu tạm thờiGiá trị cố định

Khởi tạo vs Gán giá trị

cpp
// Khởi tạo - cho giá trị lúc khai báo
int x = 10;              // Khởi tạo x với giá trị 10

// Gán giá trị - thay đổi giá trị sau khi đã khai báo
int y;                   // Khai báo y (chưa có giá trị xác định)
y = 20;                  // Gán giá trị 20 cho y

Scope (Phạm vi) của biến

cpp
int global_var = 100;    // Biến toàn cục - truy cập được ở mọi nơi

int main() {
    int local_var = 200; // Biến cục bộ - chỉ trong hàm main
    
    {
        int block_var = 300; // Biến trong block - chỉ trong { }
        cout << global_var;  // OK
        cout << local_var;   // OK  
        cout << block_var;   // OK
    }
    
    // cout << block_var;   // Lỗi! block_var không tồn tại
    return 0;
}

Tại sao nên dùng hằng số?

  1. An toàn: Không thể vô tình thay đổi giá trị
  2. Dễ đọc: Tên hằng có ý nghĩa thay vì số "ma thuật"
  3. Dễ bảo trì: Chỉ cần sửa ở một chỗ
  4. Tối ưu hóa: Compiler có thể tối ưu tốt hơn

💻 Ví dụ minh họa

Chương trình đơn giản với biến và hằng số

cpp
#include <iostream>
#include <string>
using namespace std;

int main() {
    // Khai báo và khởi tạo biến
    string name = "Nguyễn Văn An";
    int age = 20;
    double height = 1.75;
    bool isStudent = true;
    
    // Khai báo hằng số
    const string SCHOOL = "Đại học Bách Khoa";
    const int BIRTH_YEAR = 2004;
    
    cout << "=== THÔNG TIN CÁ NHÂN ===" << endl;
    cout << "Tên: " << name << endl;
    cout << "Tuổi: " << age << " tuổi" << endl;
    cout << "Chiều cao: " << height << " m" << endl;
    cout << "Năm sinh: " << BIRTH_YEAR << endl;
    cout << "Trường: " << SCHOOL << endl;
    
    if (isStudent) {
        cout << "Tình trạng: Đang là sinh viên" << endl;
    } else {
        cout << "Tình trạng: Đã tốt nghiệp" << endl;
    }
    
    // Thay đổi giá trị biến
    age = 21;
    height = 1.76;
    cout << "\n=== CẬP NHẬT THÔNG TIN ===" << endl;
    cout << "Tuổi mới: " << age << " tuổi" << endl;
    cout << "Chiều cao mới: " << height << " m" << endl;
    
    // Tính toán với biến
    int currentYear = 2024;
    int realAge = currentYear - BIRTH_YEAR;
    cout << "Tuổi thực tế (tính từ năm sinh): " << realAge << " tuổi" << endl;
    
    return 0;
}

Kết quả chạy:

=== THÔNG TIN CÁ NHÂN ===
Tên: Nguyễn Văn An
Tuổi: 20 tuổi
Chiều cao: 1.75 m
Năm sinh: 2004
Trường: Đại học Bách Khoa
Tình trạng: Đang là sinh viên

=== CẬP NHẬT THÔNG TIN ===
Tuổi mới: 21 tuổi
Chiều cao mới: 1.76 m
Tuổi thực tế (tính từ năm sinh): 20 tuổi

Chương trình quản lý thông tin cá nhân

cpp
#include <iostream>
#include <string>
using namespace std;

int main() {
    // Khai báo hằng số
    const string PROGRAM_NAME = "QUẢN LÝ THÔNG TIN CÁ NHÂN";
    const int CURRENT_YEAR = 2024;
    
    // Khai báo biến
    string fullName;
    int birthYear;
    double height;
    double weight;
    
    // Nhập thông tin
    cout << "=== " << PROGRAM_NAME << " ===" << endl;
    cout << "Nhập họ tên: ";
    getline(cin, fullName);
    
    cout << "Nhập năm sinh: ";
    cin >> birthYear;
    
    cout << "Nhập chiều cao (cm): ";
    cin >> height;
    
    cout << "Nhập cân nặng (kg): ";
    cin >> weight;
    
    // Tính toán
    int age = CURRENT_YEAR - birthYear;
    double bmi = weight / ((height/100) * (height/100));
    
    // Hiển thị kết quả
    cout << "\n=== THÔNG TIN CỦA BẠN ===" << endl;
    cout << "Họ tên: " << fullName << endl;
    cout << "Tuổi: " << age << " tuổi" << endl;
    cout << "Chiều cao: " << height << " cm" << endl;
    cout << "Cân nặng: " << weight << " kg" << endl;
    cout << "BMI: " << bmi << endl;
    
    return 0;
}

Kết quả chạy:

=== QUẢN LÝ THÔNG TIN CÁ NHÂN ===
Nhập họ tên: Nguyễn Văn A
Nhập năm sinh: 2000
Nhập chiều cao (cm): 170
Nhập cân nặng (kg): 65

=== THÔNG TIN CỦA BẠN ===
Họ tên: Nguyễn Văn A
Tuổi: 24 tuổi
Chiều cao: 170 cm
Cân nặng: 65 kg
BMI: 22.491

Chương trình tính diện tích hình học

cpp
#include <iostream>
using namespace std;

int main() {
    // Hằng số toán học
    const double PI = 3.14159;
    const string SEPARATOR = "========================";
    
    // Biến cho hình chữ nhật
    double length, width;
    
    // Biến cho hình tròn
    double radius;
    
    cout << SEPARATOR << endl;
    cout << "CHƯƠNG TRÌNH TÍNH DIỆN TÍCH" << endl;
    cout << SEPARATOR << endl;
    
    // Tính diện tích hình chữ nhật
    cout << "\n1. HÌNH CHỮ NHẬT" << endl;
    cout << "Nhập chiều dài: ";
    cin >> length;
    cout << "Nhập chiều rộng: ";
    cin >> width;
    
    double rectangleArea = length * width;
    cout << "Diện tích hình chữ nhật: " << rectangleArea << " cm²" << endl;
    
    // Tính diện tích hình tròn
    cout << "\n2. HÌNH TRÒN" << endl;
    cout << "Nhập bán kính: ";
    cin >> radius;
    
    double circleArea = PI * radius * radius;
    cout << "Diện tích hình tròn: " << circleArea << " cm²" << endl;
    
    // So sánh diện tích
    cout << "\n3. SO SÁNH" << endl;
    if (rectangleArea > circleArea) {
        cout << "Hình chữ nhật có diện tích lớn hơn" << endl;
    } else if (circleArea > rectangleArea) {
        cout << "Hình tròn có diện tích lớn hơn" << endl;
    } else {
        cout << "Hai hình có diện tích bằng nhau" << endl;
    }
    
    return 0;
}

Chương trình demo scope biến

cpp
#include <iostream>
using namespace std;

// Biến toàn cục
int globalCounter = 0;
const string GLOBAL_MESSAGE = "Đây là thông báo toàn cục";

int main() {
    cout << "=== DEMO SCOPE BIẾN ===" << endl;
    
    // Biến cục bộ trong main
    int localVar = 100;
    cout << "Biến cục bộ trong main: " << localVar << endl;
    cout << "Biến toàn cục: " << globalCounter << endl;
    cout << "Hằng toàn cục: " << GLOBAL_MESSAGE << endl;
    
    // Block 1
    {
        int blockVar1 = 200;
        globalCounter++;  // Có thể sửa biến toàn cục
        
        cout << "\nTrong Block 1:" << endl;
        cout << "Block var 1: " << blockVar1 << endl;
        cout << "Local var từ main: " << localVar << endl;
        cout << "Global counter: " << globalCounter << endl;
        
        // Block lồng nhau
        {
            int blockVar2 = 300;
            cout << "\nTrong Block lồng nhau:" << endl;
            cout << "Block var 2: " << blockVar2 << endl;
            cout << "Block var 1: " << blockVar1 << endl;
            cout << "Local var từ main: " << localVar << endl;
        }
        
        // cout << blockVar2;  // Lỗi! Không truy cập được
    }
    
    // cout << blockVar1;      // Lỗi! Không truy cập được
    
    cout << "\nQuay lại main:" << endl;
    cout << "Local var: " << localVar << endl;
    cout << "Global counter: " << globalCounter << endl;
    
    return 0;
}

🏋️ Thực hành

Bài tập 1: Khai báo biến và hằng

Khai báo biến và hằng phù hợp cho chương trình quản lý sinh viên:

  • Tên sinh viên (có thể thay đổi)
  • Tuổi sinh viên (có thể thay đổi)
  • Số lượng sinh viên tối đa trong lớp (không đổi)
  • Tên trường (không đổi)

Bài tập 2: Tính toán với biến

Viết chương trình:

  1. Nhập bán kính hình tròn
  2. Tính chu vi và diện tích
  3. Sử dụng hằng số PI = 3.14159

Bài tập 3: Swap hai biến

Viết chương trình hoán đổi giá trị của hai biến:

cpp
int a = 10;
int b = 20;
// Sau khi swap: a = 20, b = 10

Bài tập 4: Scope và lifetime

Phân tích đoạn code sau và cho biết biến nào có thể truy cập được ở từng vị trí:

cpp
int x = 1;
int main() {
    int y = 2;
    {
        int z = 3;
        // Vị trí A: có thể truy cập biến nào?
    }
    // Vị trí B: có thể truy cập biến nào?
    return 0;
}
// Vị trí C: có thể truy cập biến nào?

Lời giải chi tiết

Bài tập 1:

cpp
#include <iostream>
#include <string>
using namespace std;

int main() {
    // Hằng số (không thay đổi)
    const int MAX_STUDENTS = 40;
    const string SCHOOL_NAME = "THPT Lê Quý Đôn";
    
    // Biến (có thể thay đổi)
    string studentName;
    int studentAge;
    int currentStudentCount;
    
    cout << "Trường: " << SCHOOL_NAME << endl;
    cout << "Sĩ số tối đa: " << MAX_STUDENTS << " học sinh" << endl;
    
    return 0;
}

Bài tập 2:

cpp
#include <iostream>
using namespace std;

int main() {
    const double PI = 3.14159;
    
    double radius;
    cout << "Nhập bán kính hình tròn: ";
    cin >> radius;
    
    double circumference = 2 * PI * radius;
    double area = PI * radius * radius;
    
    cout << "Chu vi: " << circumference << endl;
    cout << "Diện tích: " << area << endl;
    
    return 0;
}

Bài tập 3:

cpp
#include <iostream>
using namespace std;

int main() {
    int a = 10;
    int b = 20;
    
    cout << "Trước swap: a=" << a << ", b=" << b << endl;
    
    // Phương pháp dùng biến tạm
    int temp = a;
    a = b;
    b = temp;
    
    cout << "Sau swap: a=" << a << ", b=" << b << endl;
    
    return 0;
}

Bài tập 4:

  • Vị trí A: Có thể truy cập x, y, z
  • Vị trí B: Có thể truy cập x, y (z đã bị hủy)
  • Vị trí C: Chỉ có thể truy cập x (y đã bị hủy)

📋 Tóm tắt

🎯 Những gì đã học

  • Biến: Khai báo int x;, khởi tạo int x = 10;, có thể thay đổi giá trị
  • Hằng số: Khai báo const int X = 10;, không thể thay đổi giá trị
  • Scope: Phạm vi tồn tại của biến (global, local, block)
  • Quy tắc đặt tên: Bắt đầu bằng chữ cái hoặc _, không dùng keyword

🔧 Best Practices

  • Đặt tên biến có ý nghĩa: studentAge thay vì x
  • Sử dụng hằng số cho giá trị không đổi: const double PI = 3.14159;
  • Khởi tạo biến ngay khi khai báo: int count = 0;
  • Dùng UPPER_CASE cho hằng số: const int MAX_SIZE = 100;

🚀 Chuẩn bị cho bước tiếp theo

Bài học tiếp theo sẽ tìm hiểu về các kiểu dữ liệu cơ bản trong C++. Đảm bảo bạn đã:

  • [x] Hiểu cách khai báo và khởi tạo biến
  • [x] Phân biệt được biến và hằng số
  • [x] Nắm được khái niệm scope của biến
  • [x] Áp dụng được quy tắc đặt tên

💡 Lời khuyên

"Biến và hằng số giống như từ vựng trong ngôn ngữ. Hãy đặt tên chúng rõ ràng để 'câu chuyện' code của bạn dễ hiểu!"


Chuyển sang: Kiểu dữ liệu để học về int, float, char, bool và cách sử dụng chúng!

Khóa học C++ miễn phí