Permite la ejecución iterativa de un conjunto de sentencias mientras se cumpla una determinada condición. La condición es cualquier expresión lógica. Su sintaxis es:
while (condición) {
   Bloque Sentencias
   }
Similar al bucle while pero el conjunto de sentencias se ejecuta al menos una vez. Su sintaxis es:
do {
  Bloque Sentencias
 } while (condición);
Permite la ejecución iterativa de un conjunto de sentencias. Su sintaxis es:
for (inic; Â perman; Â actualiz) {
   Bloque Sentencias
   }
Donde:
· inic es una expresión que sólo se ejecuta una vez al principio del bucle. El bucle for suele utilizarse en combinación con un contador. Un contador es una variable que lleva la cuenta de las veces que se han ejecutado las instrucciones sobre las que actúa el comando for. Por tanto inic suele contener una expresión que nos permite inicializar ese contador.
· perman es la expresión que nos indica cuando debe finalizar el bucle, por tanto se tratará de una expresión condicional. Su interpretación  serÃa  algo  como:  repite  la sentencia (o sentencias) mientras se cumpla perman. Esta expresión se evaluará en cada ciclo del bucle para determinar si se debe realizar una nueva iteración.  Es MUY IMPORTANTE tener en cuenta que perman  se evalúa al principio del bucle, y no al final. Por tanto es posible no ejecutar el bucle ninguna vez.
· actualiz es una expresión que se ejecuta al final de cada iteración, justo antes de consultar la condición de finalización indicada en perman. Puesto que como ya se ha indicado el bucle for se utiliza junto a un contador, actualiz, en general, contiene una instrucción que actualiza la variable contador.
Ejemplo_CtrlFlujo_3. El siguiente programa cuenta hasta 10, empezando por 0:
#include <stdio.h>
int main( void )
{
int cont;
for (cont=0; cont <=10; cont++)
  printf("Valor del contador: %d\n", cont);
}
Ejemplo_CtrlFlujo_4. Ejemplo anterior realizado con un bucle while:
#include <stdio.h>
int main( void )
{
int cont;
cont = 0;
while (cont <=10)
  {
  printf("Valor del contador: %d\n", cont);
  cont ++;
  }
return 0;
}
Las siguientes sentencias permiten la realización de saltos incondicionales en un programa C dentro de la ejecución de un bucle: break y continue.
La ejecución del primero de ellos, continue, implica que se reevalúe la condición de salida del bucle, es decir, después de ejecutar continue la siguiente instrucción que se ejecutará será el for o el while.
Ejemplo_CtrlFlujo_5. Ejemplo de uso de la función continue. Este programa lee desde teclado 10 números cuyo valor tiene que estar entre 1 y 100, si no es asà se le vuelve a pedir al usuario que introduzca un valor, descartando el introducido no válido.
 #include <stdio.h>
 int main( void )
{
int n;
int cont=0;
do
 {
 printf ("\nIntroduce un número entre 1 y 100:");
 scanf ("%d",&n);
 if ((n<1) || (n>100))
   continue;
 cont++;
 } while (cont<10);
return 0;
}
break hace que la ejecución del programa continúa en la lÃnea siguiente al bucle, es decir, tras su ejecución se abandona el bucle y se continúa la ejecución en la lÃnea inmediatamente siguiente a éste.
Ejemplo_CtrlFlujo_6. Ejemplo de uso de la función break. Este programa lee desde teclado valores numéricos y los muestra por pantalla, salvo que el número introducido sea el 2.
 #include <stdio.h>
 int main( void )
{
int n;
do
 {
 printf ("\nIntroduce un número entero:");
 scanf ("%d",&n);
 if (n == 2)
   break;
 printf ("El número introducido es: %d\n", n);
 } while (1);
return 0;
}