Bỏ qua

Banner Vòng lặp for C++

Buổi 13: Vòng Lặp for Cơ Bản

I. Lý Thuyết

1. Tại Sao Cần Vòng Lặp?

Giả sử bạn cần in ra màn hình câu "Xin chao C++" 10 lần. Không có vòng lặp, bạn phải copy-paste dòng cout 10 lần. Nếu cần in 1000 lần thì sao? Code sẽ cực kỳ dài và khó sửa. Vòng lặp giúp thực hiện lặp đi lặp lại một đoạn code nào đó với cú pháp ngắn gọn.


2. Cú Pháp Vòng Lặp for

for là vòng lặp phổ biến nhất, thường dùng khi đã biết trước số lần lặp.

for (Khởi_tạo; Điều_kiện_lặp; Bước_nhảy) {
    // Khối lệnh sẽ được lặp lại
}

Ví dụ:

for (int i = 1; i <= 5; i++) {
    cout << "Xin chao!" << endl;
}

3. Nguyên Lý Hoạt Động Của for

Hãy xem vòng lặp for (int i = 1; i <= 3; i++):

  • Bước 1 (Khởi tạo): int i = 1. (Chỉ chạy 1 lần duy nhất lúc bắt đầu).
  • Bước 2 (Kiểm tra điều kiện): i <= 3?
  • Nếu ĐÚNG \(\to\) chạy code bên trong.
  • Nếu SAI \(\to\) kết thúc vòng lặp.
  • Bước 3 (Thực thi khối lệnh): Chạy lệnh cout.
  • Bước 4 (Bước nhảy): i++ (tăng i lên 1).
  • Quay lại Bước 2.

Quá trình thực tế:

  • i = 1, 1 <= 3 (Đúng) \(\to\) in "Xin chao!" \(\to\) i tăng thành 2.
  • i = 2, 2 <= 3 (Đúng) \(\to\) in "Xin chao!" \(\to\) i tăng thành 3.
  • i = 3, 3 <= 3 (Đúng) \(\to\) in "Xin chao!" \(\to\) i tăng thành 4.
  • i = 4, 4 <= 3 (Sai) \(\to\) DỪNG vòng lặp.

4. Các Biến Thể Của for

Lặp lùi (giảm dần):

for (int i = 10; i >= 1; i--) {
    cout << i << " ";  // In 10 9 8... 1
}

Bước nhảy lớn hơn 1:

for (int i = 0; i <= 10; i += 2) {
    cout << i << " ";  // In 0 2 4 6 8 10
}

II. Ví Dụ Minh Họa

Ví dụ 1: In dãy số từ 1 đến N

#include <iostream>
using namespace std;

int main() {
    int n;
    cout << "Nhap N: "; cin >> n;

    cout << "Day so: ";
    for (int i = 1; i <= n; i++) {
        cout << i << " ";
    }
    cout << endl;

    return 0;
}
✅ Kết quả (nhập: 5)
Nhap N: 5
Day so: 1 2 3 4 5

Ví dụ 2: Tính tổng \(S = 1 + 2 + 3 + ... + N\)

Đây là bài toán kinh điển (bài toán gom bi/cộng dồn).

#include <iostream>
using namespace std;

int main() {
    int n;
    cout << "Nhap N: "; cin >> n;

    int sum = 0; // Biến lưu kết quả, phải khởi tạo = 0

    for (int i = 1; i <= n; i++) {
        sum = sum + i; // Cộng dồn i vào sum
    }

    cout << "Tong 1 den " << n << " la: " << sum << endl;
    return 0;
}
✅ Kết quả (nhập: 4)

Nhap N: 4
Tong 1 den 4 la: 10
(1 + 2 + 3 + 4 = 10)


Ví dụ 3: In các kí tự chữ cái

Biến chạy i có thể là kiểu char.

#include <iostream>
using namespace std;

int main() {
    cout << "Bang chu cai: ";
    for (char c = 'A'; c <= 'Z'; c++) {
        cout << c << " ";
    }
    cout << endl;
    return 0;
}

III. Bài Tập Thực Hành Tại Lớp

Bài 1: In số chẵn từ 1 đến N

Đề bài: Nhập số nguyên N. In ra tất cả các số chẵn trong đoạn từ 1 đến N.

Phân tích đề

Cách 1: for (int i = 1; i <= n; i++) { if (i % 2 == 0) ... } Cách 2: for (int i = 2; i <= n; i += 2) (Tối ưu hơn)

Gợi ý code
#include <iostream>
using namespace std;

int main() {
    int n;
    cout << "Nhap N: "; cin >> n;

    cout << "Cac so chan: ";
    for (int i = 2; i <= n; i += 2) {
        cout << i << " ";
    }
    cout << endl;
    return 0;
}

Bài 2: Đếm số lượng ước của N

Đề bài: Nhập số nguyên dương N. In ra số lượng ước số của N. (Ước số là số mà N chia hết).

Phân tích đề
  • Dùng vòng lặp for i từ 1 đến N.
  • Dùng biến dem = 0.
  • Cứ mỗi lần N % i == 0, tăng dem++.
Gợi ý code
#include <iostream>
using namespace std;

int main() {
    int n;
    cout << "Nhap N: "; cin >> n;

    int dem = 0;
    for (int i = 1; i <= n; i++) {
        if (n % i == 0) {
            dem++;
        }
    }

    cout << "So luong uoc cua " << n << " la: " << dem << endl;
    return 0;
}

IV. Bài Tập Về Nhà

Bài 1: Tính tổng các số lẻ từ 1 đến N

Đề bài: Nhập số nguyên dương N. Tính và in ra tổng các số lẻ \(\le N\). Ví dụ N=5, Tổng = 1 + 3 + 5 = 9.


Bài 2: Tính Giai Thừa \(N!\)

Đề bài: Tính \(N! = 1 \times 2 \times 3 \times ... \times N\). Lưu ý: Nếu dùng int thì chỉ tính được với \(N\) nhỏ. Nên dùng long long cho kết quả. (Và biến khởi tạo phải là 1, không phải 0).

Output mẫu
Nhap N: 5
5! = 120

Bài 3: In các số chia hết cho 3 HOẶC 5

Đề bài: Nhập số \(N\). In ra tất cả các số từ 1 đến \(N\) chia hết cho 3 hoặc chia hết cho 5. (Dùng phép toán logic ||).

Output mẫu
Nhap N: 15
Cac so thoa man: 3 5 6 9 10 12 15

Bài 4: Bảng Cửu Chương

Đề bài: Nhập một số nguyên dương \(N\) (từ 2 đến 9). In ra bảng cửu chương của số \(N\).

Output mẫu
Nhap N: 5
5 x 1 = 5
5 x 2 = 10
...
5 x 10 = 50

V. Ghi Chú Quan Trọng

Lỗi Hay Gặp

Lỗi Mô tả Cách sửa
Lặp vô hạn (Infinite loop) Điều kiện lặp luôn luôn đúng, chương trình không dừng được. Vd: for (int i=1; i>0; i++) Kiểm tra lại cẩn thận Điều_kiện_lặp và Bước_nhảy
Tính tổng bị sai Khởi tạo biến lưu tổng bằng giá trị không kiểm soát (hoặc rác bộ nhớ) LUÔN khai báo int sum = 0; trước khi for
Tính tích bị sai Khởi tạo tích bằng 0 \(\to\) kết quả luôn bằng 0 Khởi tạo long long tich = 1;
Sai scope biến i Lấy giá trị của i bên ngoài vòng lặp for (biến cục bộ) Khai báo int i; bên ngoài for nếu muốn dùng tiếp.

Tóm Tắt Cú Pháp

// Vòng lặp cơ bản 1..N
for (int i = 1; i <= n; i++) { ... }

// Kỹ thuật cộng dồn
long long sum = 0;
for (int i = 1; i <= n; i++) {
    sum += i;  // tương đương sum = sum + i;
}

VI. Ôn Tập Trắc Nghiệm

Hãy làm bài trắc nghiệm để củng cố lý thuyết vòng lặp for:

Làm bài trắc nghiệm Buổi 13