Các mệnh đề tái lặp (hay vòng lặp)

sửa

C có 3 dạng câu lệnh vòng lặp:

Vòng lặp do

sửa
  do
     <mệnh đề>
  while (<biểu thức>);

Trong mệnh đề này thì mệnh đề được thực thi lặp lại cho tới khi nào <biểu thức> được đánh giá (hay có giá trị) là true. Một khi <biểu thức> không còn có giá trị true nữa thì vòng lặp sẽ bị kết thúc.

Vòng lặp while

sửa
  while (<biểu thức>)
     <mệnh đề>

<mệnh đề> chỉ được thực thi hay thực thi lặp lại khi <biểu thức> có giá trị là true. Nếu <biểu thức> có giá trị false thì câu lệnh sẽ bị kết thúc ngay lập tức.

Vòng lặp for

sửa

Dạng C89 của vòng lặp for là:

  for (<biểu thức 1> ; <biểu thức 2> ; <biểu thức 3>)
     <câu lệnh>

Nó đã được tổng quát hóa trong C99 thành:

  for (<khai báo> <biểu thức 1> ; <biểu thức 2>)
     <câu lệnh>

Khi cả ba biểu thức đều hiện diện trong một câu lệnh for, thì mệnh đề:

  for (e1; e2; e3)
     s;

sẽ tương đương với

  e1;
  while (e2) {
     s;
     e3;
  }

Bất kì biểu thức nào trong vòng lặp for có thể được loại bỏ. Một biểu thức bị mất (e2 chẳng hạn) có thể làm cho vòng lặp biến thành vòng lặp vô hạn.

Thí dụ: vòng lặp for sau đây 3 biểu thức ở dạng phức hợp và ngăn cách nhau bởi dấu chấm phẩy ;:
 for (x=10,y=1;((x>4) && (y<8)); x--,y+=2)
    printf("x = %d, y = %d \n", x,y);

Kết quả thực thi màn hình sẽ hiển thị như sau:

  x = 10, y = 1
  x = 9, y = 3
  x = 8, y = 5
  x = 7, y = 7

Vòng lặp kết thúc vì điều kiện trong biểu thức thứ nhì ((x>4) && (y<8)) không còn đúng nữa.