STARTING
CONTROL STATEMENT
FUNCTION
ARRAY & POINTER
OOP
STL
ITERATORS
OTHER FEATURES
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
MỚI CẬP NHẬT

Cách sử dụng vòng lặp while trong C++

Trong bài này mình sẽ hướng dẫn các bạn cách sử dụng vòng lặp while trong C++, sau đó sẽ đính kèm một số bài tập thực hành sau khi học xong bài vòng lặp while này.

test php

banquyen png
Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

Ở bài học trước chúng ta đã tìm hiểu một loại vòng lặp trong C++ đó là vòng lặp for. Trong bài hôm nay chúng ta sẽ tiếp tục tìm hiểu một loại vòng lặp khác nữa trong C++ đó là vòng lặp while. Đây là vòng lặp được dùng trong trường hợp không biết trước tổng số lần lặp.

1. Cú pháp vòng lặp while trong C++

Cũng giống như vòng lặp for, vòng lặp while dùng để lặp lại đoạn code nào đó khi điều kiện lặp là đúng. Đây là vòng lặp dễ dẫn tới trường hợp lặp vô hạn nhất trong tất cả các loại vòng lặp.

Cú pháp

Cú pháp của vòng lặp while trong C++ như sau:

Bài viết này được đăng tại [free tuts .net]

Cú pháp
while(condition) {
   statement(s);
}

Trong đó:

  • condition: Là điều kiện để quyết định tiếp tục vòng lặp hay không. Nếu điều kiện đúng thì tiếp tục vòng lặp, ngược lại sẽ thoát khỏi vòng lặp
  • statement(s): Các câu lệnh sẽ được thực thi khi điều kiện đúng.

Vòng lặp while là một dạng của vòng lặp for bị khuyết tham số thứ nhất và tham số thứ 3 như sau:

for(;condition;) {
      statement(s);
}

Lưu đồ hoạt động

Sau đây là lưu đồ hoạt động của vòng lặp while trong C++.

while flow JPG

Lưu ý: Một điểm các bạn cần lưu ý ở vòng lặp while cũng như vòng lặp for, đó là các câu lệnh bên trong vòng lặp có thể sẽ không bao giờ được thực hiện nếu điều kiện không bao giờ đúng. Điều này khác hoàn toàn với vòng lặp do while mà chúng ta sẽ học ở bài tiếp theo.

2. Ví dụ vòng lặp while trong C++

Giả sử chúng ta có một bài toán đơn giản đó là in ra màn hình số chẳn hoặc số lẻ từ 1 đến 10. Sử dụng vòng lặp while trong C++ để giải quyết bài toán trên như sau:

Ví dụ
#include <iostream>
using namespace std;
 
int main () {
   int i = 1;
   while(i <= 10 ) {
      if (i%2 == 0) {
          cout << i << ": la so chan" << endl;
      } else {
          cout << i << ": la so le"  << endl;
      }
      i++;
   }
   return 0;
}

Trong ví dụ trên chúng ta có sử dụng câu lệnh if else, nếu bạn nào chưa biết về lệnh if else có thể xem lại lệnh if else trong C++ nhé.

Và sau đây là kết quả sau khi thực thi đoạn code trên:

while ex JPG

Mình xin được giải thích kết quả của đoạn code trên như sau:

  • Trước tiên gán biến i = 1, bắt đầu vô vòng lặp while, kiểm tra điều kiện 1 < 10 là đúng, thực thi đoạn code bên trong vòng lặp while
  • Trong vòng lặp while có sử dụng lệnh if else để in số chẳn lẻ ra màn hình, chúng ta dùng toán tử % dùng để chia lấy phần dư, nếu là số chẳn thì chia hết cho 2 và phần dư bằng 0, ngược lại số lẻ thì không chia hết cho 2 và phần dư sẽ khác 0.
  • Tiếp đến dòng code i++ sẽ tăng biến i lên 1 (trong đó i++ tương đương với i = i + 1), sau đó quay lại kiểm tra điều kiện, lúc này biến i = 2, điều kiện 2 < 10 vẫn đúng, tiếp tục thực thi đoạn code bên trong vòng lặp while, sau đó tăng biến i lên 1, kiểm tra điều đúng và thực thi đoạn code bên trong vòng lặp... cứ thế lặp lại vòng lặp (kiểm ta điều kiện đúng, thực thi đoạn code bên trong, tăng biến i, kiểm tra điều kiện...).
  • Đến khi biến i có giá trị là 11, bây giờ điều kiện 11 <= 10 là sai, kết thúc vòng lặp while.

3. Vòng lặp while C++ lồng nhau

Cũng giống như vòng lặp for, vòng lặp while cũng có vòng lặp while lồng nhau.

Một vòng lặp while nằm trong một vòng lặp while khác ta gọi đó là vòng lặp while lồng nhau. Chúng ta cũng hạn chế sử dụng vòng lặp while lồng nhau vì nó sẽ làm cho chương trình của chúng ta chậm hơn.

Chúng ta cùng xem một ví dụ đơn giản về vòng lặp while lồng nhau như sau:

Ví dụ
#include <iostream>  
using namespace std;  
int main () { 
    int i=1;    
    while(i<=3) {  
        int j = 1; 
        cout << endl;
        while (j <= 3)  
        {  
            cout << "Gia tri i = " << i << ", j = " << j << endl;  
            j++;  
        }  
        i++;  
    }    
    return 0;
}

Và kết quả sau khi thực thi đoạn code trên:

while ex3 JPG

4. Vòng lặp while C++ bị lặp vô hạn

Khi điều kiện trong vòng lặp while luôn đúng thì vòng lặp while sẽ chạy vô tận. Vì vậy các bạn nên xem xét kỹ lưỡng điều kiện trong vòng lặp while, hãy chắc chắn rằng sau một số vòng lặp nhất định điều kiện trong vòng lặp while sẽ sai và kết thúc vòng lặp.

Các bạn nên tránh có vòng lặp while vô hạn trong chương trình của mình. Ví nó làm cho chương trình chúng ta chạy mãi mãi dẫn đến bị treo, rất là quy hiểm.

Chúng ta cùng xem một ví dụ đơn giản về vòng lặp while vô hạn trong C++ như sau:

Ví dụ
#include <iostream>  
using namespace std;  
    
int main () { 
    int i;
    while(i=1) {
       cout << "Vong lap while vo han" << endl;
    } 
    return 0;
}

Và kết quả sau khi thực thi đoạn code trên là chương trình chúng ta sẽ chạy vô hạn.

while ex2 JPG

Lý do vòng lặp while trên chạy vô hạn là vì chúng ta gán biến i = 1 và trong thân hàm không có thay đổi giá trị của biến i, nên biến i lúc nào cũng bằng 1. Trong C++, một số khác 0 là true.

Từ ví dụ trên các bạn hãy rút cho mình một bài học nhé, vì nhiều bạn thường bị lỗi này, thay vì so sánh 2 giá trị chúng ta sử dụng 2 dấu =, nhưng lại gõ thiếu 1 dấu =, chương trình chúng ta hiểu đó là phép gán giá trị cho biến, không phải là phép so sánh giữa 2 giá trị nữa.

5. So sánh vòng lặp for và vòng lặp while C++

Vòng lặp for và vòng lặp while có những điểm giống và khác nhau như sau:

Giống nhau

Cả 2 vòng lặp đều sử dụng để lặp lại môđoạn code nào đó khi điều kiện đúng. Nếu điều kiện sai sẽ không có đoạn code nào bên trong thân vòng lặp được thực hiện

Khác nhau

Một số điểm khác nhau giữa vòng lặp for và vòng lặp while trong C++ như sau:

Điểm khác nhau Vòng lặp for Vòng lặp while
Cú pháp for ( init; condition; increment ) {
statement(s);
}
while(condition) {
statement(s);
}
Nên sử dụng Vòng lặp for chỉ nên được sử dụng khi chúng ta đã biết trước số lần lặp. Vòng lặp while chỉ nên được sử dụng khi số lần lặp không được biết chính xác.
Điều kiện (condition) Nếu điều kiện không được đưa vào vòng lặp for, thì vòng lặp lặp lại vô số lần. Nếu điều kiện không được đưa vào vòng lặp while, nó sẽ cung cấp lỗi biên dịch.
init Trong vòng lặp for, bước khởi tạo (init) được thực hiện duy nhất một lần Trong vòng lặp while nếu việc khởi tạo được thực hiện trong quá trình kiểm tra điều kiện, thì việc khởi tạo được thực hiện mỗi lần lặp lại vòng lặp.
increment Câu lệnh lặp trong for được viết ở trên cùng, do đó, chỉ thực hiện sau khi tất cả các câu lệnh trong vòng lặp được thực thi. Trong vòng lặp while, câu lệnh lặp có thể được viết ở bất cứ đâu trong vòng lặp.

6. Kết luận

Như vậy là chúng ta đã tìm hiểu xong về vòng lặp while trong C++. Vòng lặp while căn bản về ý nghĩa là giống với vòng lặp for, nó chỉ khác nhau về cú pháp và trường hợp sử dụng. Tùy vào mục đích sử dụng của mình mà các bạn lựa chọn vòng lặp while hoặc vòng lặp for cho phù hợp.

Một điều cần lưu ý cho các bạn khi sử dụng vòng lặp while đó là hạn chế sử dụng vòng lặp while lồng nhau và nên tránh vòng lặp while vô hạn trong chương trình của mình.

Vậy mình sẽ kết thúc bài học này ở đây. Trong bài tiếp theo chúng ta sẽ cùng tìm hiểu về một vòng lặp khác nữa trong C++ đó là vòng lặp do while. Các bạn nhớ xem tiếp nhé.

Bài tập vòng lặp while C++

Cùng chuyên mục:

Kiểm tra chuỗi có phải là chuỗi pangram hay không trong C

Kiểm tra chuỗi có phải là chuỗi pangram hay không trong C

Loại bỏ các từ trùng lặp trong một chuỗi trong C

Loại bỏ các từ trùng lặp trong một chuỗi trong C

Chuyển đổi một số thành chuỗi số tiếng Anh trong C

Chuyển đổi một số thành chuỗi số tiếng Anh trong C

Tìm chuỗi con dài nhất không chứa ký tự trùng lặp trong C

Tìm chuỗi con dài nhất không chứa ký tự trùng lặp trong C

Chuyển đổi số nguyên sang dạng chuỗi và ngược lại trong C

Chuyển đổi số nguyên sang dạng chuỗi và ngược lại trong C

Kiểm tra số nguyên tố và số hoàn hảo trong C

Kiểm tra số nguyên tố và số hoàn hảo trong C

Tính lũy thừa của một số nguyên trong C

Tính lũy thừa của một số nguyên trong C

Tính phần dư của phép chia hai số nguyên trong C

Tính phần dư của phép chia hai số nguyên trong C

Tính tổng, hiệu, tích, thương của hai số nguyên trong C

Tính tổng, hiệu, tích, thương của hai số nguyên trong C

Sử dụng con trỏ để tính tổng các phần tử trong mảng trong C

Sử dụng con trỏ để tính tổng các phần tử trong mảng trong C

Sử dụng con trỏ để đảo ngược một chuỗi trong C

Sử dụng con trỏ để đảo ngược một chuỗi trong C

Sắp xếp một mảng số nguyên sao cho số lẻ nằm trước số chẵn trong C

Sắp xếp một mảng số nguyên sao cho số lẻ nằm trước số chẵn trong C

Sắp xếp một mảng chuỗi theo thứ tự từ điển trong C

Sắp xếp một mảng chuỗi theo thứ tự từ điển trong C

Sắp xếp một mảng số nguyên theo thứ tự tăng dần hoặc giảm dần trong C

Sắp xếp một mảng số nguyên theo thứ tự tăng dần hoặc giảm dần trong C

Tìm phần tử lớn thứ k trong mảng trong C

Tìm phần tử lớn thứ k trong mảng trong C

Xóa phần tử trùng lặp trong mảng trong C

Xóa phần tử trùng lặp trong mảng trong C

Đảo ngược mảng không sử dụng mảng phụ trong C

Đảo ngược mảng không sử dụng mảng phụ trong C

Tìm số lần xuất hiện của một phần tử trong mảng trong C

Tìm số lần xuất hiện của một phần tử trong mảng trong C

Tìm giá trị lớn nhất và nhỏ nhất trong một mảng trong C

Tìm giá trị lớn nhất và nhỏ nhất trong một mảng trong C

Tách chuỗi thành các từ riêng lẻ và in ra màn hình trong C

Tách chuỗi thành các từ riêng lẻ và in ra màn hình trong C

Top