📘 CHUYÊN ĐỀ 4: VÒNG LẶP (FOR, WHILE) & ĐIỀU KHIỂN LUỒNG

1. Tại sao cần Vòng lặp?

Nếu yêu cầu in ra các số từ 1 đến 10, bạn có thể viết 10 lệnh cout. Nhưng nếu yêu cầu in từ 1 đến 1.000.000, việc viết tay là không thể. Vòng lặp ra đời để giải quyết các tập lệnh có tính chất tương tự nhau.

2. Vòng lặp FOR (Lặp với số lần biết trước)

Dùng khi bạn xác định được điểm bắt đầu, điểm kết thúc và quy luật tăng/giảm.

Cú pháp:

C++
for (khởi_tạo; điều_kiện; bước_nhảy) {
    // Tập lệnh thực hiện lặp lại
}

Ví dụ: In dãy số chẵn từ 2 đến 100

  • Khởi tạo: i = 2
  • Điều kiện: i <= 100 (Còn đúng thì còn chạy)
  • Bước nhảy: i = i + 2 (Mỗi bước tăng 2 đơn vị)
    C++
    for (int i = 2; i <= 100; i += 2) {
        cout << i << " ";
    }
    

3. Vòng lặp WHILE (Lặp theo điều kiện)

Dùng khi bạn không biết chính xác cần lặp bao nhiêu lần, chỉ biết là "còn đúng thì còn chạy".

Cú pháp:

C++
while (điều kiện) {
    // Tập lệnh
}

So sánh FOR và WHILE:
| Đặc điểm | Vòng lặp FOR | Vòng lặp WHILE |
| :--- | :--- | :--- |
| Sử dụng | Biết rõ số lần lặp. | Khi số lần lặp phụ thuộc điều kiện. |
| Biến đếm | Khai báo ngay trong for. | Phải khai báo bên ngoài trước đó. |
| Ví dụ | Duyệt từ 1 đến n. | Đọc dữ liệu cho đến khi hết file. |


4. Vòng lặp lồng nhau (Nested Loops)

Là việc đặt một vòng lặp bên trong một vòng lặp khác. Thường dùng để xử lý các cấu trúc 2 chiều (hàng và cột).

Ví dụ: Vẽ hình vuông sao kích thước \(n \times n\) (\(n = 3\))

C++
for (int i = 1; i <= n; i++) {       // Vòng lặp hàng (Outer loop)
    for (int j = 1; j <= n; j++) {   // Vòng lặp cột (Inner loop)
        cout << "*";
    }
    cout << endl; // Xong một hàng thì xuống dòng
}

Kết quả:
***
***
***


5. Lệnh điều khiển: BREAK, CONTINUE, RETURN

  • break: Lập tức "thoát xác", dừng vòng lặp ngay tại chỗ bất chấp điều kiện.
  • continue: Bỏ qua các lệnh phía dưới nó trong lượt lặp hiện tại để "nhảy" thẳng sang lượt lặp kế tiếp.
  • return 0;: Kết thúc luôn chương trình (thường dùng trong hàm main).

6. Ứng dụng: Tìm ước số của \(n\)

Ước số là các số mà \(n\) chia hết.

  • Tư duy: Các ước của \(n\) luôn nằm trong đoạn từ 1 đến \(n\).
  • Cách làm: Duyệt vòng lặp từ 1 đến \(n\), nếu \(n \pmod i == 0\) thì \(i\) là ước.
C++
int n; cin >> n;
for (int i = 1; i <= n; i++) {
    if (n % i == 0) cout << i << " ";
}

7. Kỹ thuật Nhập xuất nhanh (Fast I/O)

Trong lập trình thi đấu, khi dữ liệu đầu vào (Input) lên đến hàng triệu dòng, lệnh cin/cout mặc định của C++ sẽ bị chậm. Ta thêm 2 dòng này vào đầu hàm main để tăng tốc:

C++
int main() {
    ios_base::sync_with_stdio(0); // Tách biệt luồng C và C++
    cin.tie(0);                   // Giải phóng cin khỏi cout

    // Code của bạn ở đây
    return 0;
}

Bình luận

Mới nhất
Tải bình luận...

Không có bình luận nào.