Computación I, CI-2125

Prof. Gabriela Ochoa, Universidad Simón Bolívar

Clase 4: Estructuras repetitivas o ciclos (while, for, do .. while)


Estructuras Repetitivas (Ciclos)

En C existen 3 estructuras repetitivas: while, for y do .. while

Estructura While

Sintaxis:

while(condición)
  Acción;

En este caso, la sentencia Acción es ejecutada mientras el condicional condición se evalúa verdadera (distinta de 0)

En el caso de que el cuerpo del while (acciones a ejecutar en caso de que el condicional se verifique) posea más de una sentencia, todas ellas son encerradas entre llaves:

while(condición)
{
  Acción1;
  Acción2;
  ...
}

El condicional es una expresion relacional que puede involucrar operadores relacionales (>, <, >=, <=, ==, !=) y/o operadores logicos (&&, ||, !)

Ejemplo:

/*
Programa que imprime la tabla de conversión de
Fahrenheit a Celsius para F = 0, 20, 40,..., 300 
*/
#include <stdio.h>
 
int main()
{
  int Lower, Upper, Step;
  float Fahr, Celsius;
 
  Lower = 0;
  Upper = 300;
  Step = 20;
  Fahr = Lower;
 
  while(Fahr <= Upper)
  {
    Celsius = (5.0/9.0) * (Fahr - 32.0);
    printf("%4.0f F -> %6.1f C\n", Fahr, Celsius);
    Fahr = Fahr + Step;
  } /* fin del while */
  
  return 0;
} /* fin del main */

NOTAS:

Lazo while(...) { ... }
Lo que se encuentra entre paréntesis es una expresión a evaluar. Mientras el resultado de la misma sea distinto de cero, se ejecutan las sentencias asociadas que se encuentran encerradas entre llaves. A este tipo de sentencias se las llama sentencias compuestas. Si el cuerpo de esta sentencia consiste en una sola sentencia simple, pueden omitirse las llaves. Las sentencias compuestas no llevan el carácter ; como terminador. Para mejorar la legibilidad del programa, conviene indentar las sentencias compuestas.

Cálculo y asignación:
Celsius = (5.0/9.0) * (Fahr - 32.0)
El punto decimal en los operandos de la división es requerido para que la operación sea llevada en punto flotante; de lo contrario la misma se efectúa como cociente de números enteros, truncando por lo tanto el resultado a cifras enteras. En nuestro caso sería truncado a 0.

Estructura for

Esta estructura es una generalización de la estructura while usada en el ejercicio anterior. Su función es ejecutar iterativamente el cuerpo del bloque, que como en el caso del while puede ser simple o compuesto. La definición de esta estructura de control posee 3 partes separadas por el carácter ";".

for(a; b; c)
{
  ...
  ...
}

La parte a es la de inicialización, y puede poseer una sentencia, ninguna, o varias separadas por el carácter ",". Esta parte se ejecuta inmediatamente antes de entrar en el ciclo.

La parte b es el criterio o condición de control de la iteración. Se evalúa antes de entrar a cada ciclo, inclusive en la primer iteración. Si su resultado es distinto de cero se ejecuta el ciclo; sino se abandona el ciclo y se sigue con la sentencia posterior al cuerpo del for.

La parte c es la reinicialización, que es ejecutada al final de cada ciclo.

Podemos simular el bloque for con la siguiente lógica:

a;
while(b)
{
  ...
  ...
  c;
}

Ejemplo:

 

/* Tabla de conversión de grados F a Celsius 
   utilizando constantes simbólicas y bloque for */
#include <stdio.h>
 
#define LOWER 0
#define UPPER 300
#define STEP 20
 
main()
{
  int Fahr;
 
  for(Fahr = LOWER; Fahr <= UPPER; Fahr += STEP)
    printf("%4.0f F -> %6.1f C\n", Fahr, (5.0/9.0)*
            (Fahr - 32));
}

NOTA:

Uso de constantes simbólicas. Cuando se requieran valores numéricos constantes en un programa, deben definirse como constantes y no usar sus valores numéricos dentro del programa. C permite definir constantes simbólicas (directiva #define al preprocesador) que asocian un símbolo (LOWER, UPPER, STEP) con una expresión (0,300 y 20 respectivamente) de tal manera que el preprocesador reemplaza cualquier ocurrencia de esos símbolos por sus expresiones asociadas

Estructura Do-While

la estructura de control do-while es una variación sobre el bloque while

do
{
  Acción1;
  Acción2;
  ...
}while(condición);

La diferencia esta en que la condición se chequea al final y  las acciones son ejecutadas al menos una vez. Por ejemplo

/*
Programa que pide al usuario un número entero entre 1 y 10.
Se continúa pidiendo el valor hasta que cumpla la condición
*/
#include <stdio.h>
 
int main()
{
  int n, error;
 
  do {
      printf("Ingrese un número entero entre 1 y 10: ");
      scanf("%d", &n);
      if (error = (n < 1 || n > 10))
         printf("\nERROR: Intentelo nuevamente!!\n\n"); 
     } while(error);
 
/* ahora puedo procesar el valor ingresado sabiendo que es 
correcto. */
 
    return 0;
} /* fin del main */

 


Ir a Pagina del Curso