Está en la página 1de 22

Captulo 4.

Estructuras Iterativas
Universidad del Pas Vasco / Euskal Herriko Unibertsitatea 95 Estructuras Iterativas

n dice del captulo

1. Introduccin .......................................................................................... 97

2. Objetivos .................................................................................................... 98

3. La estructura de control for ..................................................................... 99

4. La estructura de control while ............................................................103

5. La estructura de control do while ...................................................... 105

6. Estructuras de control iterativas anidadas ........................................ 107

7. Otras estructuras de control: break y continue ............................... 109


7.1. break ........................................................................................ 109
7.2. continue .................................................................................. 110

8. Bibliografa ................................................................................................... 111

9. Ejercicios propuestos .......................................................................... 112


Universidad del Pas Vasco / Euskal Herriko Unibertsitatea 97 Estructuras Iterativas

1. In troduccin

Despus de ver en la seccin anterior las estructuras condicionales if y switch, a continuacin examina -
remos otros tipos de estructuras. Median te las estructu ras con dicionales som os capaces de elegir las
expr esion es. Pero esto no suele ser suficien te. En ocasion es se debe repetir la ejecucin de algunas expre- sion
es mien tras un a de las condicion es siga sien do verdadera. En esta seccin apr en der emos cm o se
lleva a cabo la ejecucin iterativa de las expresiones en funcin del valor de las condiciones de control.

El lenguaje C ofrece fundam entalmente las siguientes estructuras de control iterativas: las senten cias for,
while y do while.
Universidad del Pas Vasco / Euskal Herriko Unibertsitatea 98 Estructuras Iterativas

2. Objetivos

El objetivo de este captulo es estudiar el uso de las sentencias de control iterativas. Como consecuencia deber em
os ser capaces de escribir n uestros prim eros programas utilizan do 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
Universidad del Pas Vasco / Euskal Herriko Unibertsitatea 99 Estructuras Iterativas

3. La estructura de con trol for

A menudo conocemos de anteman o cuntas veces se deben repetir durante la ejecucin de un pr ograma
algunas expresion es, o si deben repetirse mientras el valor de una expresin cum pla una det er m in ada
con dicin . En est e caso se utiliza la estructura de control for . En esta co m pleja estru ctura 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 im prescindibles. De todas formas se
recomienda utilizarlas siem pre 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 pr ogram a
(salir del bucle).

3. Si la expresin condicional es verdadera se llevan a cabo las expresiones del cuerpo de la expr e-
sin.

4. Evaluar la expresin bucle (actualizar) y volver al punto 2.

En la figura 1 se presenta un diagram a don de se m uestra de forma grfica el fun cion amiento de esta estructura
de control.
Universidad del Pas Vasco / Euskal Herriko Unibertsitatea 100 Estructuras Iterativas

Valorar expresin
inicial

NO
Expr. cond.?
Expresin bucle
actualizar

SI
Expresiones

Figura 1: Funcionamiento de la estructura de control for.

1. Ejem plo

En este ejem plo se m uestra el fun cionam ien to de un bucle for sim ple. El objetivo de esta estructura de
control es visualizar 10 veces un mensaje.

Expresin Expresin Expresin


inicial condicional bucle

for (cont = 1; cont <= 10; cont++)


{
printf ( %d Buena suerte con la estructura for! \ n, cont);
}

En este bucle for se utiliza la variable cont para contar cuntas veces hemos visualizado el mensaje. Toma
el valor inicial 1 y despus de confirmar la condicin increm enta su valor. Mientras la condicin sea ver-
dadera se visualizar el m en saje que la fun cin printf define. Por lo t an to en la pan talla veram os lo
siguiente:

1 Buena suerte con la estructura for!


2 Buena suerte con la estructura for!
3 Buena suerte con la estructura for!
4 Buena suerte con la estructura for!
5 Buena suerte con la estructura for!
6 Buena suerte con la estructura for!
7 Buena suerte con la estructura for!
8 Buena suerte con la estructura for!
9 Buena suerte con la estructura for!
10 Buena suerte con la estructura for!
Universidad del Pas Vasco / Euskal Herriko Unibertsitatea 101 Estructuras Iterativas

2. Ejem plo

Escribir un programa que im prime un nmero y el cuadrado que le cor responde para todos los nmeros
com prendidos entre uno y un lmite predefinido.

#include <stdio>
#define LIMITE 10

main ()
{
int n = 0;

printf ( Num Num elevado a 2 \ n);

for (n = 1; n <= LIMITE; n++)


{
printf (%5d %5d\ n, n, n * n);
}
}

El resultado que ofrece este programa es el siguiente:

Num Num elevado a 2


1 1
2 4
3 9
4 16
5 25
6 36
7 49
8 64
9 81
10 100

En los ejem plos que vien en a continuacin se m uestran diferen tes usos de la estructura de control for.

a) Estructura de control for utilizando el operador decrementar 10 segundos


9 segundos
8 segundos
for (num = 10; num > 0; num) 7 segundos
6 segundos
{ 5 segundos
4 segundos
printf (%2d segundos\ n, num); 3 segundos
2 segundos
} 1 segundos
Universidad del Pas Vasco / Euskal Herriko Unibertsitatea 102 Estructuras Iterativas

b) Utilizando la estructura de control for para contar del modo que deseemos:
10
for (num = 10; num < 60; num += 10) 20
{ 30
printf (%d \ n, num); 40
50
}

c) Utilizando la estructura de control for para contar caracteres:

for (carac = a; carac <= z; carac++)


{
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

d) Para evaluar la expresin bucle podemos utilizar la expresin que deseemos:

for (x = 1; x <= 85; x = (5 + x) * 2)


{
printf (%d \ n, x);
}

e) Utilizando ms de una expresin inicial y de control del bucle

Dentr o de la estructura de control for nos es posible utilizar ms de una expresin inicial y tam-
bin m s de u n a expresin bucle. En este ejem plo se m uestra m ed ian te un a tabla el valo r cor
respondien te al peso de cada producto. El peso inicial son 5 gram os y el valor 20. Luego a causa del
aumento de 5 gramos el precio aumenta en 12.

#include <stdio.h>
Gramos Valor
#define UNO 20 5 20
#define OTRO 12 10 32
15 44
main () 20 56
{ 25 68
30 80
int gramos, valor; 35 92
40 104
45 116
printf ( Gramos Valor \ n); 50 128
for (gramos = 5, valor = UNO; 55 140
60 152
gramos <= 60;
gramos += 5, valor += OTRO)
{
printf (%5d %7d \ n, gramos, valor);
}
}
Universidad del Pas Vasco / Euskal Herriko Unibertsitatea 103 Estructuras Iterativas

4. Estructura de con trol w h ile

Podemos decir que se t rata de un a de las estructuras iterativas ms gen erales. Mien tras la con dicin escrita
den tro de la estructura de co nt rol sea cierta se ejecutan las expresion es defin idas dent ro 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

Figura 2: Funcionamiento de la estructura de control while.

Esta estructura de control funciona de la siguiente manera:

1. Se evala la expresin con dicional. De ser cierta se ejecutan las expresiones de la estructura y
nuevamente pasamos a evaluar la expresin condicional.
Universidad del Pas Vasco / Euskal Herriko Unibertsitatea 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.

Ejem plo:

suerte con el bucle while


num = 1; suerte con el bucle while
suerte con el bucle while
while (num <= 10)
suerte con el bucle while
{ suerte con el bucle while
suerte con el bucle while
printf (suerte con el bucle while \ n); suerte con el bucle while
suerte con el bucle while
num++; suerte con el bucle while
suerte con el bucle while
}

Com parndola con la estructura de control for para salir del bucle while la expresin con dicion al se debe
cam b iar d en tro del bu cle. De o tro m o do entraram os en un b ucle infin it o com o podem o s ver en el
siguiente ejem plo:

num = 1;
while (num <= 100)
{
printf (suerte con el bucle while \ n);
}
Universidad del Pas Vasco / Euskal Herriko Unibertsitatea 105 Estructuras Iterativas

5. La estructura de con trol do w h ile

Tal y como hemos podido ver en la estructura while las expresiones del cuerpo tan solo se ejecutan si la
expr esin 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; Cond
}
while (expresin condicional); Esta
SI
estructura de control funciona as:

Expresiones

NO
icin?

Figura 3: Funcionamiento de la estructura de control do while.

Las expresiones del cuerpo se ejecutan al menos una vez.

A continuacin se evala la expresin condicional y de ser cierta se vuelven a ejecutar las expr e-
siones. De ser falsa se pasa a la siguiente sentencia del programa.
Universidad del Pas Vasco / Euskal Herriko Unibertsitatea 106 Estructuras Iterativas

Ejem plo:

num = 1;
do
{
printf (buena suerte con el bucle do while \ n);
num++;
} buena suerte con el bucle while
buena suerte con el bucle while
while (num <= 10); buena suerte con el bucle while
buena suerte con el bucle while
buena suerte con el bucle while
buena suerte con el bucle while
buena suerte con el bucle while
buena suerte con el bucle while
buena suerte con el bucle while
buena suerte con el bucle while
Universidad del Pas Vasco / Euskal Herriko Unibertsitatea 107 Estructuras Iterativas

6. Estructuras de con trol iterativas an idadas

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 ejem plo 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 ejem plo se m uestran dos estructuras de control iterativas an idadas. Imaginemos que que- remos
dibujar el tringulo que viene a continuacin mediante el carcter *.

**

***

****

*****

******

*******

********
Universidad del Pas Vasco / Euskal Herriko Unibertsitatea 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++;
}
}
Universidad del Pas Vasco / Euskal Herriko Unibertsitatea 109 Estructuras Iterativas

7. Otras estructuras de con trol: brea k y cont inue

Hem os visto en an teriores secciones las estructuras de control m s 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 examin arem os las dos primeras. El
uso de la tercera est absolutamente prohibido puesto que va en contra de la buen a prctica de pr ogra -
macin. Estas estructuras de control no son m uy adecuadas desde el punto de vista de la programacin
estructurada y si es posible no deben ser utilizadas.

7.1. brea k

En ocasiones es conveniente salir del bucle sin ten er en cuenta la expresin que lo controla (la expr esin
condicional) si es que ha ocurrido una excepcin. Para ello se utiliza principalmente la sentencia break .
Por otra parte, ya hemos visto la im portancia que tiene en la estructura de control switch . Por ejem plo:

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);
}
Universidad del Pas Vasco / Euskal Herriko Unibertsitatea 110 Estructuras Iterativas

7.2. cont inue

En algunos casos, cuando el cuerpo de las estructuras iterativas resulta com plejo, 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 ejem plo:

while ((ch = getchar ()) ! A)


{
if (ch = = .)
{
continue;
}
printf(has introducido %c \ n, ch);
}

En este caso lo que h ace continue es no tomar en cuen ta los puntos. Tam bin aqu se puede escribir
fcilmente el mismo programa sin utilizar continue .

while ((ch = getchar ()) ! A)


{
if (ch ! = .)
{
printf(has introducido %c \ n, ch);
}
}
Universidad del Pas Vasco / Euskal Herriko Unibertsitatea 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., P RATA, S., M ARTIN, D. Program acin en C. Introduccin y Conceptos Avanzados. Ed. An aya
Multimedia.

AUTONAKOS, K.C., M ANSFIELD, K.C. Programacin Estructurada en C. Ed. Prentice Hall.


Universidad del Pas Vasco / Euskal Herriko Unibertsitatea 112 Estructuras Iterativas

9. Ejercicios propuestos

1. Calcular el factorial de un nmero entero y positivo.

2. Se quiere programar el juego del cdigo. Para ello se definir un a constante de dos dgitos en el pr
ogram a y el jugador (el usuario del program a) ten dr que adivinarlo. Ten dr com o m xim o 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 invita -
cin a jugar de nuevo.

3. Mediante un programa calcular la raz de N mediante la frm ula de Newton.

N / E i + Ei
Ei+1 =
2

Continuar con el proceso hasta que se cum pla la siguiente condicin:

| Ei - Ei+1 | =< epsilon

a) Datos de entrada: Nmero N, epsilon (precisin) y E 0 (aproximacin a la raz cor respondiente al


nmero N).

b) Calcular Ei+1 y controlar que se cum pla la condicin final.

c) Si la condicin no se cum ple repetir el paso b).

d) Si la condicin se cum ple visualizar la raz.

4. Este program a leer una cadena de caracteres in troducida median te 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.
Universidad del Pas Vasco / Euskal Herriko Unibertsitatea 113 Estructuras Iterativas

5. Escribir un programa que lograr la siguiente suma:

N
Sii
i=1

Donde N es un n mero introducido mediante el teclado. Utilizar las instrucciones FOR, DO-WHILE y
WHILE.

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 cor res-
pondiente (en total 28 lneas).

columnas 7 10 17 20 27 30
lnea 1 33 ! 34 35 #
lnea 2 41 ) 42 * 43 +

NOTA: El programa slo visualiza los caracteres escritos en negrita.

También podría gustarte