Vòng lặp while cũng được sử dụng để lặp lại một khối câu lệnh. Nó sẽ kiểm tra điều kiện trước khi bắt đầu vòng lặp để quyết định xem có thực hiện vòng lặp hay không. Khối câu lệnh bên trong vòng lặp sẽ được thực hiện 1 hoặc nhiều lần cho đến khi kiểm tra điều kiện trả về bằng false thì sẽ kết thúc vòng lặp.
Nên sử dụng vòng lặp while khi bạn không biết rõ số lượng vòng lặp - chỉ biết điều kiện dừng.
Cấu trúc của vòng lặp while
cpp
while (testExpression) {
// statements inside the body of the loop
}
Ví dụ:
cpp
int i = 0;
while (i < 10) {
// statements inside the body of the loop
// need to update the value of i
}
Vòng lặp while hoạt động như thế nào?
- Đầu tiên vòng lặp
whileđánh giá biểu thức kiểm tra điều kiện bên trong ngoặc đơn(). - Nếu biểu thức kiểm tra là
true, các câu lệnh bên trong thân vòng lặpwhileđược thực thi. Các câu lệnh thực thi bên trong thân vòng lặp cần phải cập nhật lại biểu thức kiểm tra điều kiện. - Sau đó, biểu thức kiểm tra điều kiện được đánh giá lại.
- Quá trình diễn ra cho đến khi biểu thức kiểm tra được đánh giá là
false. - Nếu biểu thức kiểm tra là
false, vòng lặp chấm dứt (kết thúc).
Luồng hoạt động của vòng lặp while

Ví dụ vòng lặp while trong c
Ví dụ 1:
In ra các số từ
1đến5.
cpp
#include <stdio.h>
int main() {
int i = 1;
while (i <= 5) {
printf("%d\n", i);
++i;
}
}
Kết quả
1
2
3
4
5
Giải thích:
- Vì
isẽ được dùng để kiểm tra điều kiện nên chúng ta cần phải khởi tạo và gán giá trị choitrước. - Khi
i = 1, biểu thức kiểm trai <= 5trả vềtrue. Do đó, phần thân của vòng lặpwhileđược thực hiện.- In
1trên màn hình. - Tăng giá trị của
ilên1→i = 2.
- In
- Tiếp theo ta có
i = 2, biểu thức kiểm trai <= 5lại trả vềtrue. Phần thân của vòng lặpwhileđược thực hiện lại.- In
2trên màn hình. - Tiếp tục tăng giá trị của
ilên1→i = 3.
- In
- Quá trình này diễn ra cho đến khi
i = 6. Lúc này biểu thức kiểm trai <= 5trả vềfalse→ vòng lặp chấm dứt.
Ví dụ 2:
Nhập một số
ntừ bàn phím. Tính tổng các số củan. Ví dụ:n = 2456→sum = 2 + 4 + 5 + 6 = 17.
Phân tích bài toán:
- Để cộng tổng các số của
n, chúng ta cần tách được riêng từng số củanra bằng cách lấynchia lấy dư cho10. Chúng ta sẽ lấy được số hàng đơn vị là số4, cộng4vào biếnsum. - Sau đó chúng ta cần bỏ đi hàng đơn vị để được số
69bằng cách lấyn = 694chia cho10(n = 694 / 10 = 69). - Chúng ta lại lấy
n = 69chia lấy dư cho10để lấy được số hàng đơn vị là số9, cộng9vào biếnsum. - Sau đó lại tiếp tục lấy
n = 69chia cho10để cònn = 6. - ...
- Các bạn có thể thấy chúng ta sẽ lặp đi lặp lại 2 việc chính đối với
nđó là:- Chia lấy dư cho
10 - Chia hết cho
10
- Chia lấy dư cho
- Vì vậy chúng ta cần dùng vòng lặp để làm bài này, vậy nên chọn vòng lặp nào?
- Bạn không thể biết người dùng sẽ nhập số nào? (số dài hay ngắn) nên rõ ràng chúng ta không thể biết cần lặp bao nhiêu lần?
- Vì vậy chúng ra sẽ dùng vòng lặp
whilethay vìfor.
- Vì vậy chúng ra sẽ dùng vòng lặp
- Vậy điều kiện dừng là gì? Đề bài không thấy nói đến?
- Bạn có nhận thấy mỗi lần chia hết cho
10thìnsẽ giảm dần giá trị, và cuối cùng khin < 10hay lànchỉ còn 1 chữ số thìn / 10 = 0. Vì vậy chúng ta sẽ có điều kiện dừng ở đây làn > 0.
- Bạn có nhận thấy mỗi lần chia hết cho
Coding solution:
cpp
#include <stdio.h>
int main() {
int n;
int sum = 0;
printf("Enter n: ");
scanf("%d", &n);
while (n > 0) {
sum += n % 10;
n /= 10;
}
printf("sum = %d", sum);
}
Kết quả
Enter n: 694
sum = 19