Cấu trúc while
Vòng lặp while trong ngôn ngữ lập trình C++ có cấu trúc như sau:
while (điều kiện) {
// Mã lệnh được thực hiện khi điều kiện là đúng
}
Các biểu thức "Initialization statement" (khởi tạo giá trị) và "Update statement" (cập nhật giá trị) không xuất hiện trong cấu trúc while. Vì vậy, bạn cần phải hiện thực chúng trước và trong vòng lặp để tránh việc lặp vô hạn.
Đoạn mã trong phần thân của vòng lặp (body of loop) có thể chứa các biểu thức tính toán logic, các cấu trúc điều kiện (if … else, switch … case) hoặc cả các cấu trúc lặp khác. Điều này cho phép bạn xây dựng các vòng lặp lồng nhau để thao tác với mảng nhiều chiều và nhiều tác vụ khác.
Nguyên tắc hoạt động
Giống như cấu trúc for, quá trình lặp trong vòng while sẽ tiếp tục diễn ra cho đến khi biểu thức điều kiện trả về giá trị false.
Một điều cần lưu ý là biểu thức điều kiện phải tồn tại trước khi quá trình lặp bắt đầu. Vì vậy, vòng lặp có thể không bao giờ được thực hiện nếu giá trị của các biến liên quan không được khởi tạo đúng.
Dưới đây là sơ đồ hoạt động của cấu trúc while:
Vòng lặp while thường được sử dụng trong các trường hợp không biết trước số lần lặp. Ví dụ:
#include
using namespace std;
int main() {
int s = 0;
int i = 0;
while (s < 100) {
i++;
s += i;
}
s = 0;
i = 0;
while (i++, s < 100)
s += i;
s = 0;
i = 0;
while (1) {
i++;
s += i;
if (s >= 100) break;
}
return 0;
}
Các đoạn mã trên thực hiện cùng một công việc (tính tổng từ 1 đến 100), chỉ khác nhau ở cách triển khai. Bạn có thể lồng ghép nhiều biểu thức vào điều kiện, phân cách chúng bằng dấu "," như trong đoạn mã thứ hai. Biểu thức cuối cùng sau dấu "," chính là điều kiện chính để dừng vòng lặp.
Cấu trúc do...while
Vòng lặp do...while trong ngôn ngữ lập trình C++ có cấu trúc như sau:
do {
// Mã lệnh được thực hiện ít nhất một lần
} while (điều kiện);
Cấu trúc do...while có đầy đủ các tính chất mà một vòng lặp cần phải có. Tuy nhiên, khác với cấu trúc while, biểu thức điều kiện của do...while được đặt phía sau đoạn mã, vòng lặp sẽ được thực hiện ít nhất một lần, bất kể giá trị của biểu thức điều kiện.
Nguyên tắc hoạt động
Sơ đồ hoạt động của cấu trúc do...while như sau:
Cấu trúc do...while thường được sử dụng để kiểm tra các giá trị đầu vào (thường là các giá trị được nhập từ bàn phím).
Dưới đây là một ví dụ đơn giản: chương trình kiểm tra xem giá trị nhập vào có phải là một tháng trong năm hay không.
#include
using namespace std;
int main() {
int month;
do {
cin >> month;
} while (month < 1 || month > 12);
return 0;
}
Bạn cũng có thể tận dụng cấu trúc do...while để thực hiện một số công việc "thú vị". Ví dụ:
#include
using namespace std;
int main() {
int n;
do {
cin >> n;
} while (n <= 0);
int i;
int s = 0;
do {
cin >> i;
} while (s += i, -n);
return 0;
}
Chương trình trên tính tổng n số nguyên nhập vào từ bàn phím mà không cần tạo mảng để lưu trữ các số, mà thực hiện cộng trực tiếp sau mỗi lần nhập.
Một số lưu ý
Tương tự như trong cấu trúc for, bạn cũng có thể sử dụng các từ khóa "break" và "continue" trong hai cấu trúc lặp này. Từ khóa "break" sẽ thoát khỏi vòng lặp ở mức thấp nhất (tức là vòng lặp hiện tại nếu có nhiều vòng lặp lồng nhau).
Tương tự như trong cấu trúc for, sau dòng lệnh while không có dấu ";".