Giải sử, cần viết chương trình xuất các số từ 1 đến 10. Đơn giản là sử dụng 10 câu lệnh cout<<. Nhưng cần viết chương trình xuất các số từ 1 đến 1000. Sử dụng 1000 câu lệnh cout<< thì sẽ là một pha xử lý thật “cồng kềnh”.
Giải pháp là sử dụng cấu trúc lặp để thực hiện các công việc mang tính lặp lại khi thỏa mãn điều kiện nào đó. Có 3 lệnh lặp trong C++ là for, while, do…while. Bài này sẽ giới thiệu cách sử dụng vòng lặp for.
1. Cú pháp vòng lặp for
Cho phép thực hiện công việc lặp đi lặp lại nhiều lần với số lần lặp có thể xác định trước.
for (<khởi đầu>; <điều kiện lặp>; <bước nhảy>) {
//code block
}
Nguyên lý hoạt động của vòng lặp for như sau:
<khởi đầu> khởi tạo giá trị của biến và chỉ thực thi một lần duy nhất. Sau đó, nếu <điều kiện lặp> đúng (true) thì thực thi các dòng lệnh trong vòng lặp for. Nếu <điều kiện lặp> sai (false) thì kết thúc vòng lặp.
<bước nhảy> sẽ thay đổi giá trị của biến lúc <khởi đầu>. Giá trị của biến này sẽ được kiểm tra lại (kiểm tra <điều kiện lặp>) sau mỗi lần lặp.
Chương trình C++ in ra số từ 1 đến 5 sử dụng vòng lặp for
#include <iostream>
using namespace std;
int main()
{
for (int i = 1; i <= 5; ++i) {
cout << i << " ";
}
return 0;
}
Kết quả
1 2 3 4 5
Chương trình trên thực hiện các lần lặp trong for như sau:
Lần lặp | Biến i | Điều kiện lặp i<=5 | Thực thi |
1 | i=1 | true | In ra 1 và tăng i lên 2 |
2 | i=2 | true | In ra 2 và tăng i lên 3 |
3 | i=3 | true | In ra 3 và tăng i lên 4 |
4 | i=4 | true | In ra 4 và tăng i lên 5 |
5 | i=5 | true | In ra 5 và tăng i lên 6 |
6 | i=6 | false | Vòng lặp chấm dứt |
2. Một số lưu ý khi sử dụng for
Câu lệnh for có thể lồng nhau
if (n < 10 && m < 20)
{
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
cout<<i + j<<endl;
}
}
}
Trong câu lệnh for, có thể sẽ không có phần <khởi đầu>
int i;
for (i = 0; i < 10; i++){//có khởi tạo biến i=0
cout<<i<<endl;
}
int i = 0;
for (; i < 10; i++){//không cần khởi tạo biến i
cout<<i<<endl;
}
Trong câu lệnh for, có thể sẽ không có phần <bước nhảy>
int i;
for (i = 0; i < 10; i++){//có bước nhảy
cout<<i<<endl;
}
for (i = 0; i < 10; )//không có bước nhảy
{
cout<<i<<endl;
i++;
}
Trong câu lệnh for, có thể sẽ không có phần <điều kiện lặp>
int i;
for (i = 0; i < 10; i++){//có điều kiện lặp
cout<<i<<endl;
}
for (i = 0; ; i++){//không có điều kiện lặp, bị lặp vô hạn
cout<<i<<endl;
}
for (i = 0; ; i++){//không có điều kiện lặp
if (i >= 10)
break;//thoát vòng lặp for
cout<<i<<endl;
}
Không được thêm ; ngay sau lệnh for
for (i = 0; i < 10; i++);//không được có ; ở đây
{
cout<<i<<endl;
}
for (i = 0; i < 10; i++)
{
};//không được có ; ở đây
{
cout<<i<<endl;
}
Các thành phần chính gồm <khởi đầu>, <điều kiện lặp>, <bước nhảy> cách nhau bằng dấu ; Nếu có nhiều thành phần con trong mỗi thành phần chính thì được cách nhau bằng dấu ,
for (int i = 1, j = 2; i + j < 10; i++, j += 2){
cout<<i + j<<endl;
}
Lưu ý: <điều kiện lặp> trong for nên giới hạn rõ ràng để tránh trường hợp lặp vô hạn.