|
|
| 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:
- 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.
- 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:
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",
¬a );
/*
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",
¬a );
}
/*
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;
}
|
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.
|
|
|
| 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
) |
|
|
|
|