Documentos de Académico
Documentos de Profesional
Documentos de Cultura
2.3. - Estructuras Iterativas
2.3. - Estructuras Iterativas
Estructuras Iterativas
95
Estructuras Iterativas
1. Introduccin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
97
2. Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
98
99
97
Estructuras Iterativas
1. Introduccin
Despus de ver en la seccin anterior las estructuras condicionales if y switch, a continuacin examinaremos otros tipos de estructuras. Mediante las estructuras condicionales somos capaces de elegir las
expresiones. Pero esto no suele ser suficiente. En ocasiones se debe repetir la ejecucin de algunas expresiones mientras una de las condiciones siga siendo verdadera. En esta seccin aprenderemos cmo se
lleva a cabo la ejecucin iterativa de las expresiones en funcin del valor de las condiciones de control.
El lenguaje C ofrece fundamentalmente las siguientes estructuras de control iterativas: las sentencias for,
while y do while.
98
Estructuras Iterativas
2. Objetivos
El objetivo de este captulo es estudiar el uso de las sentencias de control iterativas. Como consecuencia
deberemos ser capaces de escribir nuestros primeros programas utilizando este tipo de sentencias. En
concreto estas son las sentencias que debemos aprender a utilizar:
Sentencia for
Sentencia while
Sentencia do while
Sentencias iterativas anidadas
99
Estructuras Iterativas
A menudo conocemos de antemano cuntas veces se deben repetir durante la ejecucin de un programa
algunas expresiones, o si deben repetirse mientras el valor de una expresin cumpla una determinada
condicin. En este caso se utiliza la estructura de control for. En esta compleja estructura iterativa se
encuentran los siguientes elementos:
Expresin inicial
Expresin condicional
Expresin bucle
Expresiones que vamos a ejecutar
y la sintaxis correspondiente a esta expresin de control for es la siguiente:
for (expresin inicial; expresin condiciona;, expresin bucle)
{
expresin(es);
}
Cuando vamos a ejecutar solamente una expresin las llaves no son imprescindibles. De todas formas se
recomienda utilizarlas siempre para evitar errores difcilmente corregibles.
El funcionamiento de esta expresin de control es la siguiente:
1. Valorar la expresin inicial (iniciacin).
2. Valorar la expresin condicional. De resultar falsa, pasar a la sentencia siguiente del programa
(salir del bucle).
3. Si la expresin condicional es verdadera se llevan a cabo las expresiones del cuerpo de la expresin.
4. Evaluar la expresin bucle (actualizar) y volver al punto 2.
En la figura 1 se presenta un diagrama donde se muestra de forma grfica el funcionamiento de esta
estructura de control.
100
Estructuras Iterativas
Valorar expresin
inicial
NO
Expr. cond.?
Expresin bucle
actualizar
SI
Expresiones
1. Ejemplo
En este ejemplo se muestra el funcionamiento de un bucle for simple. El objetivo de esta estructura de
control es visualizar 10 veces un mensaje.
Expresin
inicial
Expresin
condicional
Expresin
bucle
101
Estructuras Iterativas
2. Ejemplo
Escribir un programa que imprime un nmero y el cuadrado que le corresponde para todos los nmeros
comprendidos entre uno y un lmite predefinido.
#include <stdio>
#define LIMITE 10
main ()
{
int n = 0;
printf ( Num
Num elevado a 2
16
25
36
49
64
81
10
100
En los ejemplos que vienen a continuacin se muestran diferentes usos de la estructura de control for.
10 segundos
9 segundos
8 segundos
7 segundos
6 segundos
5 segundos
4 segundos
3 segundos
2 segundos
1 segundos
102
Estructuras Iterativas
b) Utilizando la estructura de control for para contar del modo que deseemos:
10
20
30
40
50
printf (el cdigo ASCII correspondiente al carcter %c es el: %d \n, carac, carac);
}
el cdigo ASCII correspondiente al caracter a es el: 97
el cdigo ASCII correspondiente al caracter b es el: 98
el cdigo ASCII correspondiente al caracter c es el: 99
.
.
.
.
el cdigo ASCII correspondiente al caracter z es el: 122
Gramos
5
10
15
20
25
30
35
40
45
50
55
60
Valor
20
32
44
56
68
80
92
104
116
128
140
152
103
Estructuras Iterativas
Podemos decir que se trata de una de las estructuras iterativas ms generales. Mientras la condicin
escrita dentro de la estructura de control sea cierta se ejecutan las expresiones definidas dentro del
cuerpo del bucle. Est formada por los siguientes elementos:
Expresin condicional
Expresiones
y su formato es el siguiente:
while (expresin condicional)
{
expresiones;
}
Valorar expresin
inicial
NO
Condicin?
SI
Expresiones
104
Estructuras Iterativas
2. De ser falsa la expresin condicional se termina la ejecucin del bucle y se pasa a las siguientes
instrucciones del programa.
Ejemplo:
num = 1;
while (num <= 10)
{
printf (suerte con el bucle while \n);
num++;
}
Comparndola con la estructura de control for para salir del bucle while la expresin condicional se debe
cambiar dentro del bucle. De otro modo entraramos en un bucle infinito como podemos ver en el
siguiente ejemplo:
num = 1;
while (num <= 100)
{
printf (suerte con el bucle while \n);
}
105
Estructuras Iterativas
Tal y como hemos podido ver en la estructura while las expresiones del cuerpo tan solo se ejecutan si la
expresin condicional es cierta. Como veremos ahora utilizando la estructura do while, las expresiones del
cuerpo se ejecutarn por lo menos una vez, porque la expresin condicional se haya en la salida del bucle.
Los elementos que la forman son los siguientes:
Expresiones
Expresin condicional
y su formato es el siguiente:
do
{
expresiones;
}
while (expresin condicional);
Esta estructura de control funciona as:
Expresiones
NO
Condicin?
SI
106
Estructuras Iterativas
Ejemplo:
num = 1;
do
{
printf (buena suerte con el bucle do while \n);
num++;
}
while (num <= 10);
107
Estructuras Iterativas
Tal y como hemos podido observar las estructuras de control iterativas se utilizan sobre todo para crear
bucles. En esos bucles se repiten unas cuantas veces unas expresiones, generalmente en funcin del valor
de una condicin. Dentro de un bucle pueden existir otros bucles y en estos casos se denominan bucles
anidados. En el siguiente ejemplo se puede observar un bucle anidado:
for (expresin inicial; expresin condicional; expresin bucle)
{
while (expresin condicional)
{
for(expresin inicial; expresin condicional; expresin bucle)
{
do
{
expresiones;
}
while (expresin condicional)
}
}
expresin(es);
}
En el siguiente ejemplo se muestran dos estructuras de control iterativas anidadas. Imaginemos que queremos dibujar el tringulo que viene a continuacin mediante el carcter *.
*
**
***
****
*****
******
*******
********
108
Estructuras Iterativas
El programa preguntar cuantos asteriscos hay en la base y tomando ese dato dibujar la imagen.
#include <stdio.h>
void main (void)
{
int base = 0;
int cont = 1, linea_cont = 1;
printf (Introduzca los asteriscos que quiera para la base: \n);
scanf (%d, &base);
while (cont <= base)
{
for (linea_cont = 1; linea_cont <= cont; linea_cont++)
{
printf (*);
}
printf (\n);
cont++;
}
}
109
Estructuras Iterativas
Hemos visto en anteriores secciones las estructuras de control ms usadas en el lenguaje C: if , if-else ,
switch , for , while y do while . Hay otras estructuras de control que deben utilizarse junto a estas tan
slo en excepciones: break , continue y goto . De estas tres tan slo examinaremos las dos primeras. El
uso de la tercera est absolutamente prohibido puesto que va en contra de la buena prctica de programacin. Estas estructuras de control no son muy adecuadas desde el punto de vista de la programacin
estructurada y si es posible no deben ser utilizadas.
7.1. break
En ocasiones es conveniente salir del bucle sin tener en cuenta la expresin que lo controla (la expresin
condicional) si es que ha ocurrido una excepcin. Para ello se utiliza principalmente la sentencia break .
Por otra parte, ya hemos visto la importancia que tiene en la estructura de control switch . Por ejemplo:
while ((ch = getchar ()) ! A)
{
if (ch = = .)
{
break;
}
printf(has introducido %c \n, ch);
}
Como puede fcilmente se puede observar podemos escribir esta parte del programa de otra manera y sin
utilizar la sentencia break .
while ((ch = getchar ()) ! A && (ch != .))
{
printf(has introducido %c \n, ch);
}
110
Estructuras Iterativas
7.2. continue
En algunos casos, cuando el cuerpo de las estructuras iterativas resulta complejo, puede suceder que no
sea necesario ejecutar una parte del cuerpo a pesar de querer seguir dentro del bucle. Para ello se utiliza la
sentencia continue. Por ejemplo:
111
Estructuras Iterativas
8. Bibliografa
KERNIGHAN, BW., RITCHIE D.M. The C Programming Language. Ed. Prentice Hall.
QUERO, E., LPEZ HERRANZ, J. Programacin en Lenguajes Estructurados. Ed. Paraninfo.
WAITE, M., PRATA, S., MA RT I N , D. Programacin en C. Introduccin y Conceptos Avanzados. Ed. Anaya
Multimedia.
AUTONAKOS, K.C., MANSFIELD, K.C. Programacin Estructurada en C. Ed. Prentice Hall.
112
Estructuras Iterativas
9. Ejercicios propuestos
2. Se quiere programar el juego del cdigo. Para ello se definir una constante de dos dgitos en el
programa y el jugador (el usuario del programa) tendr que adivinarlo. Tendr como mximo 10
oportunidades y el ordenador le informar en cada jugada de cuantas le quedan.
Si el jugador adivina el nmero, el ordenador felicitar al jugador antes de finalizar el programa y le
pondr una nota.
Si el jugador no adivina el cdigo en la dcima oportunidad, el programa terminar con una invitacin a jugar de nuevo.
4. Este programa leer una cadena de caracteres introducida mediante teclado (carcter a carcter), y
nos dir cuantos espacios vacos tenemos y si hemos introducido letras. El final de la cadena ser un
carcter elegido anteriormente.
113
Estructuras Iterativas
6. Escribir un programa que visualiza en pantalla la tabla de caracteres, partiendo del carcter que posee
el cdigo 33.
Lo que veremos en pantalla ser lo siguiente:
En cada lnea se visualizarn 8 caracteres y a la derecha de cada uno de ellos el cdigo ASCII correspondiente (en total 28 lneas).
columnas
10
17
20
27
30
lnea 1
33
34
35
lnea 2
41
42
43