Vòng lặp for, while và do-while trong C, C++
Trong bài học này, bạn sẽ lặp lại công việc bằng các vòng lặp for, while, do-while và điều khiển vòng lặp với break, continue.
Giới thiệu
Vòng lặp giúp chạy cùng một khối lệnh nhiều lần. Vòng lặp for phù hợp khi biết trước số lần lặp, while lặp lại chừng nào điều kiện còn đúng, còn do-while luôn chạy phần thân ít nhất một lần rồi mới kiểm tra điều kiện.
Những điểm quan trọng
- Luôn bật cảnh báo của trình biên dịch (compiler warning) và sửa hết các cảnh báo.
- Hiểu rõ kiểu dữ liệu và thời gian tồn tại (lifetime) của từng giá trị.
- Luôn kiểm tra dữ liệu đầu vào và giới hạn chỉ số của mảng.
Xem cách hoạt động
Nhấn Từng bước để chạy vòng lặp từng bước một. Quan sát điều kiện được kiểm tra, thân vòng lặp chạy và bảng theo dõi thêm từng dòng.
Code ví dụ bằng C và C++
#include <stdio.h>
int main(void) {
/* for: start; condition; step */
for (int i = 1; i <= 5; i++) {
printf("%d ", i);
}
printf("\n");
/* while: repeat as long as the condition holds */
int n = 20;
int steps = 0;
while (n > 1) {
n /= 2;
steps++;
}
printf("halved %d times\n", steps);
/* do-while: the body runs at least once */
int tries = 0;
do {
tries++;
} while (tries < 3);
printf("tries = %d\n", tries);
/* break leaves the loop, continue skips to the next round */
for (int i = 1; i <= 10; i++) {
if (i % 2 == 0) continue;
if (i > 7) break;
printf("%d ", i);
}
printf("\n");
return 0;
}
1 2 3 4 5
halved 4 times
tries = 3
1 3 5 7
#include <iostream>
#include <vector>
int main() {
// for: start; condition; step
for (int i = 1; i <= 5; i++) {
std::cout << i << ' ';
}
std::cout << '\n';
// while: repeat as long as the condition holds
int n = 20;
int steps = 0;
while (n > 1) {
n /= 2;
steps++;
}
std::cout << "halved " << steps << " times\n";
// do-while: the body runs at least once
int tries = 0;
do {
tries++;
} while (tries < 3);
std::cout << "tries = " << tries << '\n';
// range-based for visits every element of a container
std::vector<int> values{1, 3, 5, 7};
int sum = 0;
for (int value : values) {
sum += value;
}
std::cout << "sum = " << sum << '\n';
}
1 2 3 4 5
halved 4 times
tries = 3
sum = 16
So sánh C và C++
Phần đầu của vòng lặp for gồm ba thành phần: giá trị khởi đầu, điều kiện lặp và bước tăng. Câu lệnh break thoát khỏi vòng lặp ngay lập tức, còn continue bỏ qua phần còn lại của lượt hiện tại để chuyển sang lượt tiếp theo. C++ có thêm vòng lặp for theo phạm vi (range-based for), cho phép duyệt mọi phần tử của một container mà không cần dùng chỉ số.
C dùng các hàm thủ tục gọn nhẹ và thể hiện rõ cách dữ liệu được biểu diễn trong bộ nhớ.
C++ vẫn cho phép làm việc ở mức thấp nhưng bổ sung các kiểu dữ liệu thư viện và công cụ trừu tượng an toàn hơn.
Bài tập mở rộng
Hãy chạy cả hai phiên bản, sau đó thử thay đổi code để quan sát sự khác biệt về mức độ an toàn mà mỗi ngôn ngữ mang lại.
- Thử nhập dữ liệu sai và các giá trị ở biên.
- Biên dịch với các cờ -Wall -Wextra -Wpedantic để bật thêm cảnh báo.
- Tách phần khai báo dùng chung ra file header và phần cài đặt ra file riêng.
Luyện tập với thử thách
Áp dụng kiến thức của bài học này để giải một bài toán thực tế. Mỗi thử thách chạy ngay trên trình duyệt, có kiểm thử tức thì và AI nhận xét.
- Sum of Odd Numbers Add every odd number up to a limit. Dễ
- Countdown to Liftoff Count down from a number and end with Liftoff! Dễ
- Multiplication Table Row List the first multiples of a number. Dễ