Está en la página 1de 22

Captulo 4.

Estructuras Iterativas

Universidad del Pas Vasco / Euskal Herriko Unibertsitatea

95

Estructuras Iterativas

ndice 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. 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.

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
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

Universidad del Pas Vasco / Euskal Herriko Unibertsitatea

99

Estructuras Iterativas

3. La estructura de control for

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

Universidad del Pas Vasco / Euskal Herriko Unibertsitatea

Estructuras Iterativas

Valorar expresin
inicial

NO

Expr. cond.?

Expresin bucle
actualizar

SI
Expresiones

Figura 1: Funcionamiento de la estructura de control for.

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

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 incrementa su valor. Mientras la condicin sea verdadera se visualizar el mensaje que la funcin printf define. Por lo tanto en la pantalla veramos 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!

101

Universidad del Pas Vasco / Euskal Herriko Unibertsitatea

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 \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

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.

a) Estructura de control for utilizando el operador decrementar


for (num = 10; num > 0; num)
{
printf (%2d segundos\n, num);
}

10 segundos
9 segundos
8 segundos
7 segundos
6 segundos
5 segundos
4 segundos
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
20
30
40
50

for (num = 10; num < 60; num += 10)


{
printf (%d \n, num);
}
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
Dentro de la estructura de control for nos es posible utilizar ms de una expresin inicial y tambin ms de una expresin bucle. En este ejemplo se muestra mediante una tabla el valor
correspondiente al peso de cada producto. El peso inicial son 5 gramos y el valor 20. Luego a
causa del aumento de 5 gramos el precio aumenta en 12.
#include <stdio.h>
#define UNO 20
#define OTRO 12
main ()
{
int gramos, valor;
printf ( Gramos Valor \n);
for (gramos = 5, valor = UNO;
gramos <= 60;
gramos += 5, valor += OTRO)
{
printf (%5d %7d \n, gramos, valor);
}
}

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

Universidad del Pas Vasco / Euskal Herriko Unibertsitatea

Estructuras Iterativas

4. Estructura de control while

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

Figura 2: Funcionamiento de la estructura de control while.

Esta estructura de control funciona de la siguiente manera:


1. Se evala la expresin condicional. 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.
Ejemplo:
num = 1;
while (num <= 10)
{
printf (suerte con el bucle while \n);
num++;

suerte con el bucle while


suerte con el bucle while
suerte con el bucle while
suerte con el bucle while
suerte con el bucle while
suerte con el bucle while
suerte con el bucle while
suerte con el bucle while
suerte con el bucle while
suerte con el bucle while

}
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

Universidad del Pas Vasco / Euskal Herriko Unibertsitatea

Estructuras Iterativas

5. La estructura de control do while

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

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 expresiones. De ser falsa se pasa a la siguiente sentencia del programa.

Universidad del Pas Vasco / Euskal Herriko Unibertsitatea

106

Estructuras Iterativas

Ejemplo:
num = 1;
do
{
printf (buena suerte con el bucle do while \n);
num++;
}
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
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 control iterativas anidadas

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 *.
*
**
***
****
*****
******
*******
********

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 control: break y continue

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);
}

Universidad del Pas Vasco / Euskal Herriko Unibertsitatea

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:

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


{
if (ch = = .)
{
continue;
}
printf(has introducido %c \n, ch);
}
En este caso lo que hace continue es no tomar en cuenta los puntos. Tambin 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., 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

Universidad del Pas Vasco / Euskal Herriko Unibertsitatea

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 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.

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


N / E i + Ei
Ei+1 =
2
Continuar con el proceso hasta que se cumpla la siguiente condicin:
| Ei - Ei+1 | =< epsilon
a) Datos de entrada: Nmero N, epsilon (precisin) y E0 (aproximacin a la raz correspondiente al
nmero N).
b) Calcular Ei+1 y controlar que se cumpla la condicin final.
c) Si la condicin no se cumple repetir el paso b).
d) Si la condicin se cumple visualizar la raz.

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

Universidad del Pas Vasco / Euskal Herriko Unibertsitatea

Estructuras Iterativas

5. Escribir un programa que lograr la siguiente suma:


N
Sii
i=1
Donde N es un nmero 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 correspondiente (en total 28 lneas).
columnas

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