LATEST

Vòng lặp while trong C / C++

Trong bài viết này, codehow sẽ giới thiệu đến các bạn vòng lặp while trong C / C++. Đây cũng là một trong các loại vòng lặp được sử dụng nhiều trong lập trình.

Tương tự như vòng lặp for mà bài trước mình đã giới thiệu, các bạn có thể xem lại nhé. Vòng lặp while được sử dụng khi chúng ta muốn lặp một hành động nào đó mà chưa biết số lần lặp cụ thể.

Cấu trúc vòng lặp while trong C / C++

Vòng lặp while được sử dụng khi chúng ta muốn lặp một hành động nào đó và nó thực hiện khi điều kiện lặp đúng (tương tự như vòng lặp for).

Nếu chúng ta không xét điều kiện thật kỹ, thì rất dễ bị lặp vô hạn.

Cú pháp vòng lặp while:

while(condition) {
   statement(s);
}

Trong đó:

  • condition: Là điều kiện để vòng lặp được thực hiện, nếu điều kiện đúng thì tiếp tục lặp, nếu điều kiện sai thì thoát khỏi vòng lặp.
  • statement: Đây là các câu lệnh bên trong vòng lặp, nếu điều kiện đúng thì các câu lệnh này sẽ được thực hiện.

Vòng lặp while tương tự như vòng lặp for bị khuyết thành phần thứ nhất và thành phần thứ ba, như ví dụ dưới đây.

while(condition) {
   statement(s);
}
//hoặc
for(;condition;) {
      statement(s);
}

Lưu đồ hoạt động của vòng lặp while.

bai12 01 png

Vòng lặp for và vòng lặp while trong C / C++ có gì giống và khác nhau

Trong phần này mình sẽ đưa ra các điểm giống nhau và khác nhau giữa vòng lặp for và vòng lặp while để các bạn có thể so sánh. Điều này giúp các bạn lựa chọn tốt hơn khi xử lý các chương trình, nên chọn vòng lặp nào để sử dụng.

Giống nhau

Về cơ bản thì cả hai vòng lặp được sử dụng để lặp lại một đoạn code, một hành động nào đó khi điều kiện thực hiện của nó đúng. Nếu điều kiện sai thì thoát khỏi vòng lặp.

Khác nhau

Sự khác nhau giữa vòng lặp for và vòng lặp while được thể hiện qua bảng so sánh dưới đây, các bạn có thể xem qua nhé:

Điểm khác nhau For While
Cú pháp for ( init; condition; increment ) {
statement(s);
}
while(condition) {
statement(s);
}
Hoàn cảnh sử dụng Nên sử dụng trong trường hợp biết trước số lần lặp. Nên sử dụng trong trường hợp chúng ta chưa xác định được số lần lặp cụ thể.
Điều kiện Khi không có điều kiện thì vòng lặp for sẽ lặp vô hạn. Khi không có điều kiện trong vòng lặp while sẽ bị lỗi biên dịch.
init Được khỏi tạo một lần duy nhất trong vòng lặp. Khởi tạo khi bắt đầu mỗi vòng lặp mới.
increment Câu lệnh lặp được viết ở trên cùng. Câu lệnh lặp được viết bất kỳ ở đâu trong vòng lặp.

Vòng lặp while lồng nhau trong C / C++

Tương tự như vòng lặp for, trong vòng lặp while có chứa một hoặc nhiều vòng lặp while khác thì được gọi là lồng nhau. Tuy nhiên mình không khuyến khích các bạn sử dụng vòng lặp while lồng nhau vì nó làm chậm chương trình.

Hãy cùng nhìn ví dụ dưới đây để hiểu rõ hơn nhé.

#include <iostream>  
using namespace std; 
  
int main() { 
  int i=1;    
  while(i<=3) {  
        int j = 1; 
        cout << endl;
        while (j <= 3)  
        {  
            cout << "i = " << i << ", j = " << j   << endl;  
            j++;  
        }  
        i++;  
  }    
  cout<<"\n--------------------------\n";
  cout<<"Chuong trinh nay duoc dang tai codehow.net";
  return 0;
}

Kết quả:

bai12 02 png

Vòng lặp while trong C / C++ bị lặp vô hạng

Trong vòng lặp while, khi điều kiện lặp của nó luôn đúng sẽ dẫn đến bị lặp vô hạn (không có điểm dừng). Điều này rất nguy hiểm bởi có thể làm treo máy.

Vì vậy khi sử dụng vòng lặp while, các bạn nên đặt điều kiện thật chắc chắn rằng nó có điểm dừng, tránh việc bị lặp vô hạn nhé.

Cùng mình xem ví dụ dưới đây để hiểu rõ hơn nhé.

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

  cout<<"\n--------------------------\n";
  cout<<"Chuong trinh nay duoc dang tai codehow.net";
  return 0;
}

Như các bạn thấy thì mình có biến i = 1 và điệu kiện của vòng lặp while là i = 1, nghĩa là điều kiện đúng. Chương trình sẽ thực hiện bên trong vòng lặp. Lý do bị lặp vô hạn là vì bên trong chương trình không thay đổi giá trị i, nên khi nào i cũng bằng 1 (luôn đúng).

Kết quả:

bai12 03 png

Ví dụ sử dụng vòng lặp while trong C / C++

Trong phần này mình sẽ thực hiện hai ví dụ sử dụng vòng lặp while bằng hai ngôn ngữ khác nhau là C và C++, các bạn hãy tham khảo nhé.

Ví dụ 1: In bảng cửu chương sử dụng vòng lặp while trong ngôn ngữ C.

#include <stdio.h>

int main () {
  int a, i = 1;
  printf("Nhap vao ban cuu chuong ban muon hien thi: ");
  scanf("%d", &a);

  printf("Ban cuu chuong %d\n", a);
  while(i <= 9){
    printf("%d x %d = %d\n",a,i,a * i);
    i++;
  }
  printf("\n------------------------------\n");
	printf("Chuong trinh nay duoc dang tai Codehow.net");
   return 0;
}

Kết quả:

bai12 04 png

Ví dụ 2: Hiển thị các phần tử trong mảng sử dụng vòng lặp while trong ngôn ngữ C++

#include <iostream>  
using namespace std; 
  
int main() { 
  int numbers[6] = {1, 2, 5, -3, 9, 55};
  int i = 0;
  cout<<"Cac phan tu trong mang la: ";
  while (i < 6){
    cout << numbers[i] << " "; 
    i++;
  }

  cout<<"\n--------------------------\n";
  cout<<"Chuong trinh nay duoc dang tai codehow.net";
  return 0;
}

Kết quả:

bai12 05 png

Lời kết

Như vậy là chúng ta đã cùng nhau tìm hiểu về vòng lặp while trong C / C++. Ở bài tiếp theo mình sẽ giới thiệu đến các bạn vòng lặp do...while trong C / C++, các bạn chú ý theo dõi nhé.

Cùng chuyên mục:

Xóa node khỏi cây nhị phân tìm kiếm

Xóa node khỏi cây nhị phân tìm kiếm

Tìm node Max và Min trong cây nhị phân tìm kiếm

Tìm node Max và Min trong cây nhị phân tìm kiếm

Xuất node con và node lá trong cây nhị phân tìm kiếm

Xuất node con và node lá trong cây nhị phân tìm kiếm

Tìm kiếm trên cây nhị phân tìm kiếm

Tìm kiếm trên cây nhị phân tìm kiếm

Duyệt cây nhị phân tìm kiếm

Duyệt cây nhị phân tìm kiếm

Thêm node vào cây nhị phân tìm kiếm

Thêm node vào cây nhị phân tìm kiếm

Cây nhị phân (Binary tree) là gì? Cơ chế hoạt động của nó

Cây nhị phân (Binary tree) là gì? Cơ chế hoạt động của nó

Cách gộp hai danh sách liên kết đôi

Cách gộp hai danh sách liên kết đôi

Tìm kiếm phần tử trong DSLK đôi

Tìm kiếm phần tử trong DSLK đôi

Xóa node trong DSLK đôi

Xóa node trong DSLK đôi

Chèn node (Insert node) vào DSLK đôi

Chèn node (Insert node) vào DSLK đôi

Duyệt danh sách liên kết đôi

Duyệt danh sách liên kết đôi

Tạo node mới trong DSLK đôi

Tạo node mới trong DSLK đôi

DSLK đôi là gì? Cấu trúc dữ liệu của DSLK đôi

DSLK đôi là gì? Cấu trúc dữ liệu của DSLK đôi

Quản lý sinh viên bằng DSLK đơn

Quản lý sinh viên bằng DSLK đơn

Tìm kiếm và sắp xếp trong DSLK đơn

Tìm kiếm và sắp xếp trong DSLK đơn

Xóa node (Delete node) trong DSLK đơn

Xóa node (Delete node) trong DSLK đơn

Chèn node (Insert node) vào DSLK đơn

Chèn node (Insert node) vào DSLK đơn

Tạo node mới trong DSLK đơn

Tạo node mới trong DSLK đơn

Cấu trúc dữ liệu của DSLK đơn

Cấu trúc dữ liệu của DSLK đơn