Estructuras de Bucle en C: El Bucle For

Contenido

  1. Uso básico

Formatos del bucle for

  1. Funcionamiento de break y continue en bucles for

Diagrama de flujo de ejecución

  1. Recomendaciones
  2. No modificar la variable de control dentro del bucle for
  3. Utilizar el rango "cerrado-abierto" para las variables de control
  4. Los bucles for pueden anidarse
  5. Errores comunes
  6. Ejercicios prácticos

Ejercicio 1: Determinar la salida

Ejercicio 2 (común): ¿Cuántas iteraciones realiza el bucle?

  1. Nota adicional: Ámbito de las variables de control
  2. Implementación de bucles infinitos con for
  3. 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);

}

  1. 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)

  1. 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.

  1. 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:

  1. 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()

  1. 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.

  1. 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.

  1. Implementación de bucles infinitos con for

for (;;)
{
    //......
}

Etiquetas: C programación bucles estructura de control

Publicado el 6-24 00:20