do…while trong C và vòng lặp có ít nhất 1 lần chạy

Hướng dẫn cách sử dụng do…while trong C. Do…while là vòng lặp có ít nhất 1 lần chạy trong C, và bạn sẽ học được nó hoàn hảo trong bài học này.

do…while trong C là gì

do…while trong C là vòng lặp mà xử lý trong nó được thực thi ít nhất một lần. Giống như vòng lặp While thì vòng lặp do…while cũng sẽ thực thi các lệnh trong nó khi biểu thức điều kiện của nó là True. Tuy nhiên khác với vòng lặp while sẽ tiến hành đánh giá biểu thức điều kiện xem là True hay không rồi chạy các lệnh trong vòng lặp, thì vòng lặp do…while sẽ chạy các lệnh trong nó trước, sau đó mới tiến hành đánh giá biểu thức điều kiện để quyết định có lặp các lần lặp tiếp theo hay không.

Do đặc tính này mà vòng lặp do…while thường được sử dụng trong các chương trình mà vòng lặp trong đó cần ít nhất 1 lần thực hiện, và chúng ta sử dụng do…while với cú pháp sau đây:

do{
    Câu lệnh 1 trong khối do…while ;
    Câu lệnh 2 trong khối do…while;
    …
}while(biểu thức điều kiện);

Nếu chỉ có 1 câu lệnh duy nhất trong khối do…while thì chúng ta có thể lược bỏ đi cặp dấu ngoặc nhọn {} và sử dụng cú pháp sau:

do{
    Câu lệnh;
}while(biểu thức điều kiện);

Để hiểu rõ hơn, chúng ta cùng xem ví dụ sau đây. Giả sử chúng ta có một vòng lặp như sau:


int

main

(

void

){

int

num =

1

;


do

{

printf

(

"%d\n"

,num);

num = num *

2

;

}

while

(num <

4

);


printf

(

"end"

);


}


Do trong vòng lặp do…while không tồn tại các biểu thức khởi tạo biến, nên chúng ta cần phải khởi tạo biến đếm ở bên ngoài vòng lặp như sau:

int

num =

1

;

Vòng lặp do…while sẽ thực thi các lệnh trong khối do, sau đó mới tiến hành kiểm tra biểu thức điều kiện trong khối while. Lại nữa do không tồn tại biểu thức để thay đổi biến đếm sử dụng trong nó, nên chúng ta cũng cần viết biểu thức thay đổi biến đếm như dưới đây. Nhờ vậy mà cứ sau mỗi lần lặp thì giá trị của biến num sẽ được tăng lên 2 lần như sau:

num = num *

2

;

Nếu không có biểu thức thay đổi biến đếm như trên thì bạn sẽ vô tình biến do…while thành một vòng lặp vô hạn trong C.

Và vòng lặp do…while trong C ở trên sẽ chạy như sau:

  1. Thực thi lệnh printf("%d\n",num); để in num ra màn hình. Sau đó chạy num = num * 2; để thay đổi giá trị của num
  2. Đánh giá biểu thức điều kiện num < 4. Nếu biểu thức điều kiện là True thì lặp lại vòng lặp
  3. Lặp lại vòng lặp cho tới khi biểu thức điều kiện num < 4 trở nên False thì kết thúc vòng lặp
  4. Sau khi kết thúc vòng lặp thì thực thi câu lệnh tiếp theo của chương trình.

Kết quả chương trình:

1


2


end


Sử dụng do…while trong C

Giống như vòng lặp while thì do…while cũng sẽ lặp lại liên tục chừng nào biểu thức điều kiện trong nó còn True (đúng), nên nó phù hợp với các xử lý không cố định số lần lặp.

Như ví dụ dưới đây, chúng ta sử dụng do…while để viết một chương trình in ra các số bất kỳ từ 0 đến 4, và nếu kết quả là số 4 thì sẽ dừng lại chương trình. Do là số bất kỳ, nên chúng ta không thể biết khi nào thì số 4 sẽ được ra, và do đó cũng không thể biết được chính xác số vòng lặp là bao nhiêu. Và, kết quả của mỗi lần lặp cũng sẽ hoàn toàn khác nhau.



int

main

(

void

){

int

random_num;


do

{

random_num = rand() % (

4

+

1

-

0

) +

0

;

printf

(

"%d\n"

,random_num);

}

while

(random_num !=

4

);


printf

(

"end"

);


}


Lưu ý là để tìm số random từ 0 đến 4, chúng ta sử dụng hàm rand() bằng cách thêm header file stdlib.h và viết hàm với cú pháp sau:

rand() % (max_number +

1

- minimum_number) + minimum_number
  • Nguồn tham khảo: stackoverflow

Và kết quả chương trình có thể như sau:

3


1


2


0


3


0


1


2


4


end


Cũng có thể là:

2


4


end


Và trong chương trình này, chúng ta không thể biết số lần lặp cụ thể sẽ là bao nhiêu trong chương trình, nên vòng lặp do…while sẽ là một lựa chọn vô cùng hợp lý ở đây.

Sự khác biệt giữa vòng lặp while và do…while

Mặc dù đều là vòng lặp không giới hạn số lần tron C nhưng giữa while và do…while lại có sự khác biệt rất lớn như sau:

  • Thứ tự thực hiện xử lý là khác nhau. Trong vòng lặp while thì biểu thức điều kiện được đánh giá trước, và chỉ khi True thì các lệnh trong vòng lặp mới được thực thi. Trong vòng lặp do…while thì ngược lại, biểu thức điều kiện sẽ được đánh giá sau khi các lệnh trong vòng lặp đã được thực hiện.
  • Vòng lặp while KHÔNG thực thi lệnh trong vòng lặp khi biểu thức điều kiện là False. Nói cách khác thì khi sử dụng vòng lặp while thì có khả năng các lệnh trong nó sẽ không được thực thi. Tuy nhiên trong vòng lặp do…while thì kể cả biểu thức điều kiện có sai chăng nữa thì các lệnh trong nó cũng ít nhất được thực thi một lần, trước khi biểu thức điều kiện được kiểm tra và kết thúc vòng lặp. Do đó vòng lặp do…while sẽ có lợi thế hơn khi chúng ta cần xử lý vòng lặp yêu cầu chạy vòng lặp ít nhất 1 lần.

Tổng kết

Trên đây Kiyoshi đã hướng dẫn bạn về do…while trong C và vòng lặp có ít nhất 1 lần chạy rồi. Để nắm rõ nội dung bài học hơn, bạn hãy thực hành viết lại các ví dụ của ngày hôm nay nhé.

Và hãy cùng tìm hiểu những kiến thức sâu hơn về C trong các bài học tiếp theo.