Búsqueda personalizada
Curso de lenguaje C
 Principal
 Inicio
 Libros
 Librerías
 Mapa Web
 
 Recursos
 Artículos
 Cursos
 Ejercicios
 Guías de uso
 Mini Diccionario 
  
 Sintaxis
 ANSI C
 Ordinogramas
 Pascal
 Pseudocódigo 
  
 Acerca de
 Carlos Pes
 Mi Blog 
  
 Sitios Amigos
 Casas Rurales
 Directorio Web

 
[más enlaces] 
  
 Contenidos > 3.1 Repetitiva mientras ( la instrucción while )
En lenguaje C, para escribir una instrucción repetitiva mientras se utiliza la sintaxis:


   while ( <expresión_lógica> )
   {
     
<bloque_de_instrucciones>
   }

 

Cuando el <bloque_de_instrucciones> sólo contiene una instrucción, los caracteres abrir llave ({) y cerrar llave (}) son opcionales.

Por otra parte, al igual que en las instrucciones alternativas doble y simple, a la <expresión_lógica> de una instrucción repetitiva while, también se le llama condición.

Para que se ejecute el <bloque_de_instrucciones>, la condición tiene que ser verdadera. Por el contrario, si la condición es falsa, el <bloque_de_instrucciones> no se ejecuta.

Por tanto, cuando el flujo de un programa llega a un bucle while, existen dos posibilidades:
  1. Si la condición se evalúa a falsa, el bloque de instrucciones no se ejecuta, y el bucle while finaliza sin realizar ninguna iteración.
  2. Si la condición se evalúa a verdadera, el bloque de instrucciones sí que se ejecuta y, después, se vuelve a evaluar la condición, para decidir, de nuevo, si el bloque de instrucciones se vuelve a ejecutar o no. Y así sucesivamente, hasta que, la condición sea falsa.
El <bloque_de_instrucciones> de un bucle while puede ejecutarse cero o más veces (iteraciones). Si el <bloque_de_instrucciones> se ejecuta al menos una vez, seguirá ejecutándose repetidamente, mientras que, la condición sea verdadera. Pero, hay que tener cuidado de que el bucle no sea infinito.

Cuando la condición de un bucle while se evalúa siempre a verdadera, se dice que se ha producido un bucle infinito, ya que, el programa nunca termina. Un bucle infinito es un error lógico.

Es importante hacer hincapié en el hecho de que, en un bucle while, primero se evalúa la condición y, en el caso de que ésta sea verdadera, entonces se ejecuta el bloque de instrucciones. Veremos que, en el bucle do...while, el procedimiento es al revés. En él, primero se ejecuta el bloque de instrucciones y, después, se evalúa la condición.

Para que un bucle while no sea infinito, en el bloque de instrucciones debe ocurrir algo para que la condición deje de ser verdadera. En la mayoría de los casos, la condición se hace falsa al cambiar el valor de una variable.

En resumen, una instrucción repetitiva while permite ejecutar, repetidamente, (cero o más veces) un bloque de instrucciones, mientras que, una determinada condición sea verdadera.

Ejemplo 1: Se quiere escribir un programa que muestre por pantalla los primeros diez números naturales:


   1 2 3 4 5 6 7 8 9 10

 

En lenguaje C, para resolver el problema de este ejemplo se puede escribir:

#include <stdio.h>

int main()
{
   int contador;

   printf( "\n   " );

   contador = 1/* Inicialización del contador */
   while ( contador <= 10 )        /* Condición */
   {
      printf( "%d ", contador );   /* Salida */
      contador++;    /* Incremento del contador */
   }

   return 0;
}


Ejemplo 2: Se quiere escribir un programa que:

1º) Pida por teclado la nota (dato real) de una asignatura.
2º) En el caso de que la nota sea incorrecta, muestre por pantalla el mensaje:
  • "ERROR: Nota incorrecta, debe ser >= 0 y <= 10".
3º) Repita los pasos 1º y 2º, mientras que, la nota introducida sea incorrecta.
4º) Muestre por pantalla:
  • "APROBADO", en el caso de que la nota sea mayor o igual que 5.
  • "SUSPENDIDO", en el caso de que la nota sea menor que 5.
En pantalla:


   Introduzca nota (real): 12.4

   ERROR: Nota incorrecta, debe ser >= 0 y <= 10


   Introduzca nota (real): -3.3


   ERROR: Nota incorrecta, debe ser >= 0 y <= 10


   Introduzca nota (real): 8.7

   APROBADO

 

El código propuesto es:

#include <stdio.h>

int main()
{
   float nota;

   printf( "\n   Introduzca nota (real): " );
   scanf( "%f", &nota );

   /* Si la primera nota introducida por el
      usuario es correcta,
     
el bucle no itera ninguna vez. */

   while ( nota < 0 || nota > 10 )
   {
      printf( "\n   ERROR: Nota incorrecta, debe ser >= 0 y <= 10\n" );
      printf( "\n   Introduzca nota (real): " );
      scanf( "%f", &nota );
   }

   /* Mientras que el usuario introduzca una
      nota incorrecta,
el bucle iterará.
      Y cuando introduzca una nota correcta,
      
el bucle finalizará. */

   if ( nota >= 5 )
      printf( "\n   APROBADO" );
   else
      printf( "\n   SUSPENDIDO" );

   return 0;
}

Programa (.c): Calificación según nota

En el programa, el bucle while se ha usado para validar la nota introducida por el usuario. En programación, es muy frecuente usar el bucle while para validar (filtrar) datos. Al bucle que se utiliza para validar uno o más datos, también se le conoce como filtro.


Ejercicios Recomendados:
 Más información
Texto extraído de los apartados:

   13.2 INSTRUCCIONES REPETITIVAS

   13.2.1 Repetitiva mientras

   13.2.1.1 Variable contador

   13.2.1.2 La instrucción while

del libro 
EMPEZAR DE CERO A PROGRAMAR EN LENGUAJE C, (páginas 402-417).
 Contenidos > Apartado siguiente
3.2 Repetitiva hacer...mientras ( la instrucción do...while )
Búsqueda personalizada
Cursos de Carlos Pes: Ejercicios de Carlos Pes: Libros de Carlos Pes: Enlaces Recomendados:
Curso Diseño de Algoritmos
Curso Informática Básica
Curso Ingeniería del Software
Curso Lenguaje C
Curso Turbo Pascal
Curso Representación Datos
Ejercicios de Algoritmos
Ejercicios de Lenguaje C
Ejercicios de Ordinogramas
Ejercicios de Pascal
Empezar de cero a programar en lenguaje C
Domine la programación en lenguaje C
Empezar de cero a programar en Pascal
Tutoriales y Cursos
Gane dinero con su web
Comprar dominio
Programación Informática
100% Adsense
Inicio | Libros | Librerías | Mapa Web | Artículos | Cursos | Ejercicios | Guías | MiniDiccionario | Enlaces | Carlos Pes | Mi Blog
© Carlos Javier Pes Rivas, 2006-2008
Política de privacidad - Contactar