Contenido
- Uso básico
Formatos del bucle for
- Funcionamiento de break y continue en bucles for
Diagrama de flujo de ejecución
- Recomendaciones
- No modificar la variable de control dentro del bucle for
- Utilizar el rango "cerrado-abierto" para las variables de control
- Los bucles for pueden anidarse
- Errores comunes
- Ejercicios prácticos
Ejercicio 1: Determinar la salida
Ejercicio 2 (común): ¿Cuántas iteraciones realiza el bucle?
- Nota adicional: Ámbito de las variables de control
- Implementación de bucles infinitos con for
- Uso básico
Comparación con while
En un bucle while, existen tres componentes esenciales: 1. Inicialización 2. Condición 3. Actualización
int contador = 0; // Inicialización
while (contador < 10) // Condición
{
……
contador++; // Actualización
}
Estos tres elementos están dispersos, mientras que el bucle for los agrupa en una sola estructura, proporcionando mayor concisión.
Formato: for (expresión1; expresión2; expresión3)
Expresión1 (se ejecuta solo una vez): inicialización Expresión2 (se ejecuta en cada iteración): condición Expresión3 (se ejecuta en cada iteración): actualización
Es posible omitir cualquiera de estas expresiones, pero si se omite la condición, se crea un bucle infinito.
Por ejemplo, for (;;) es sintácticamente válido.
Dos formatos del bucle for
for (indice=0;indice<10;indice++)
……(instrucción simple);
o
for (indice=0;indice<10;indice++)
{
……(múltiples instrucciones);
}
- Funcionamiento de break y continue en bucles for
Comparación con while
Cuando es necesario, se puede incluir break; dentro del bloque de código para salir prematuramente del bucle (terminación permanente).
Mientras que continue; permite saltar la iteración actual y volver a la condición del bucle para determinar si se continúa con la siguiente iteración.
Diagrama de flujo de ejecución
for(expresión1; expresión2; expresión3)
- Recomendaciones
01. No modificar la variable de control dentro del bucle for, ya que esto causará pérdida de control
#include <stdio.h>
int main()
{
int valor = 0;
for (valor = 0; valor < 10; valor++)
{
printf("%d", valor);
valor = 4; // Esto modifica la variable de control
}
return 0;
}
Esto crea un bucle infinito
02. Se recomienda utilizar el rango "cerrado-abierto" para las variables de control del bucle for
for (indice=0;indice<10;indice++) donde indice=0 es el límite cerrado y indice<10 es el límite abierto
#include <stdio.h>
int main()
{
int datos[10]={0};
int posicion=0;
for (posicion=0;posicion<10;posicion++)
printf("%d",datos[posicion]);
return 0;
}
El resultado será 10 ceros impresos, donde el valor 10 en indice<10 tiene un significado claro.
- Los bucles for pueden anidarse
#include <stdio.h>
int main()
{
int fila = 0;
int columna = 0;
for (fila = 0; fila < 10; fila++)
{
for (columna = 0;columna<fila; columna++)
{
printf("*");
}
printf("\n");
}
return 0;
}
Resultado:
- Errores comunes
Ejemplo: imprimir un array
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int indice = 0;
int lista[] = {1,4,5,7,9,10,20,45,90};
int tamano = sizeof(lista) / sizeof(lista[0]);
for (int i = 0; i <= tamano; i++); // Error: punto y coma después del for
printf("%d ", lista[indice]);
return 0;
}
El problema está en que no debe añadirse un punto y coma después del for()
- Ejercicios prácticos
Ejercicio 1: Determinar la salida
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
int iterador = 0;
int paso = 0;
for (; iterador < 3; iterador++)
{
for (; paso < 3; paso++)
{
printf("A\n");
}
}
return 0;
}
No imprimirá 9 A's, solo 3 A's
En el bucle for, ni iterador ni paso están inicializados, lo que causa que cuando paso=3, se salga directamente del bucle interno.
Ejercicio 2 (común): ¿Cuántas iteraciones realiza el bucle?
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
int contador = 0;
int bandera = 0;
for (contador = 0, bandera = 0; bandera = 0; contador++, bandera++)
bandera++;
return 0;
}
En la condición del for, no se está evaluando si bandera es igual a 0, sino que se le está asignando el valor 0
Al asignar 0 a bandera, el resultado es falso, por lo que no se ejecuta el bucle.
Se ejecuta 0 veces.
- Nota adicional: Ámbito de las variables de control
int main()
{
for (int i = 0; i <= 10; i++)
{
//......;
}
i=1; // Error: i no está definido fuera del bucle
return 0;
}
Después del bucle, i no puede ser utilizada. Compiladores como Dev C++ mostrarán un error, ya que el ámbito de i está limitado al bucle for.
int main()
{
int i=0;
for (i = 0; i <= 10; i++)
{
//......;
}
i=1; // Correcto: i está definida en toda la función main
return 0;
}
Después del bucle, i puede ser utilizada, ya que su ámbito es toda la función main.
- Implementación de bucles infinitos con for
for (;;)
{
//......
}