Bucles for

Los bucles for son directos. Brindan la posibilidad de crear un bucle (un bloque de código que se ejecuta varias veces). Para los bucles for se requiere un iterador, usualmente denotado como i .

Los bucles for proveen la siguiente funcionalidad:

  • Inicializa la variable del iterador usando un valor inicial
  • Comprueba si el iterador ha alcanzado su valor final
  • Incrementa el iterador

Por ejemplo, si deseamos iterar en un bloque de código 10 veces, escribiremos:

int i;
for (i = 0; i < 10; i++) {
    printf("%d\n", i);
}

Este bloque imprimirá los números del 0 al 9 (10 números en total).

Los bucles for permiten iterar en los valores de un array. Por ejemplo, si quisiéramos sumar todos los valores de un array, usaríamos el iterador i como un índice del array:

int array[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int sum = 0;
int i;

for (i = 0; i < 10; i++) {
    sum += array[i];
}

/* sum ahora contiene a[0] + a[1] + ... + a[9] */
printf("La suma del array es %d\n", sum);

Ejemplo

Calcular el factorial (multiplicación de todos los elementos desde array[0] hasta array[9], ambos incluídos), de la variable array.

Bucles while

Los bucles while son similares a los bucles for, pero tienen menos funcionalidad. Un bucle while continúa ejecutando el bloque while mientras se mantenga la condición en el tiempo. Por ejemplo, el siguiente código se ejecutará exactamente diez veces:

int n = 0;
while (n < 10) {
    n++;
}
/* sum ahora contiene a[0] + a[1] + ... + a[9] */
printf("La suma del array es %d\n", sum);

Los bucles while también se pueden ejecutar infinitamente si se da una condición que siempre se evalúa como verdadera (distinta de cero):

while (1) {
   /* hacer algo */
}

Directivas en bucles

Hay dos directivas de bucle importantes que se utilizan junto con todos los tipos de bucle en C: las directivas break y continue.

En el siguiente ejemplo, la directiva break detiene un bucle tras diez iteraciones, a pesar de que el bucle while nunca termina:

int n = 0;
while (1) {
    n++;
    if (n == 10) {
        break;
    }
}

En el siguiente código, la directiva continue hace que se omita el comando printf, de modo que solo se impriman números pares:

int n = 0;
while (n < 10) {
    n++;

    /* comprobar que n es impar */
    if (n % 2 == 1) {
        /* volver al comienzo del bloque while */
        continue;
    }

    /* llegamos a este código solo si n es par */
    printf("El número %d es par.\n", n);
}

Ejemplo

La variable array consta de una secuencia de diez números. Dentro del ciclo while, existen dos condiciones if , que cambian el flujo del ciclo de la siguiente manera (sin cambiar el comando printf ): Si el número actual que está a punto de imprimirse es menor que 5, no lo imprime. Si el número actual que está a punto de imprimirse es mayor que 10, no lo imprime y detiene el ciclo. Se debe tener en cuenta que si la variable del iterador i no avanza y se utiliza utiliza la directiva continue , se quedará atascado en un bucle infinito.