You are on page 1of 6

ESCUELA POLITCNICA SUPERIOR

INFORMTICA Curso 2014-15

PRCTICA 4: ESTRUCTURAS ITERATIVAS

OBJETIVOS
En esta prctica aprenderemos el uso de las estructuras iterativas while y for que sirven para repetir
una o varias acciones mientras se cumpla una condicin, y reforzaremos los conocimientos
adquiridos en las prcticas anteriores.
Mezclando lo nuevo con lo visto en las prcticas anteriores veremos cmo se puede dar solucin a
casi cualquier algoritmo, usando lo visto hasta ahora exclusivamente.

HASTA AHORA...
En prcticas anteriores se ha aprendido:
La estructura principal de un programa en C: la funcin main y las libreras.
Variables y Constantes: con sus respectivos tipos, usos y funcionamiento.
Funciones printf/scanf: muestra y obtencin de informacin por pantalla/teclado.
Programacin estructurada en funciones.
Condicionales if/else: ejecucin de un programa en rbol.

PRERREQUISITOS
Para el correcto desarrollo de esta prctica, el alumno ANTES DE LA SESIN DE PRCTICA EN EL
LABORATORIO, debe leer con atencin y comprender el contenido de la parte terica de dicha prctica, el
apartado ESTRUCTURAS ITERATIVAS de este documento. Adems el alumno habr trabajado
previamente los cuatro primeros ejercicios descritos en el apartado EJERCICIOS de este documento, as
como, los ejercicios de la prctica anterior.

Se aconseja el uso del material de apoyo de la asignatura. As, para esta prctica el alumno puede
consultar la siguiente bibliografa:
Rodrguez Jdar, M.A. y otros, Fundamentos de informtica para ingeniera industrial:
o Del Captulo 4, Fundamentos de programacin: leer los apartados siguientes:
Apartado 4.4, Estructuras iterativas
Apartado 4.4.1, El bucle while
Apartado 4.4.3, El bucle for
Apartado 4.4.4, Anidamiento de bucles
Apartado 4.4.5, Una aclaracin la sentencia break en bucles
Garca de Jaln de la Fuente, J. y otros, Aprenda lenguaje ANSI C como si estuviera en
primero:
o Del Captulo 5 Control del Flujo de Ejecucin: leer el apartado 5.2 Bucles.

ESTRUCTURAS ITERATIVAS
1. WHILE
Hasta ahora hemos aprendido a realizar operaciones aritmticas, asignar resultados de esas
operaciones a variables, mostrar datos en pantalla y pedirlos por teclado, y ejecutar partes de cdigo
de forma condicional, estudiando para ello las expresiones lgicas. Uno de los usos para los que se
crearon los ordenadores fue la realizacin de tareas repetitivas. Con lo visto hasta ahora la nica
forma que tenemos de ejecutar varias veces un cdigo es copiarlo tantas veces como queramos que
se repita:

Sin embargo, existe una forma mejor, que consiste en utilizar una estructura que nos proporciona en
lenguaje C para repetir la ejecucin de una porcin de cdigo: la estructura while. La sintaxis es la
siguiente:

while (condicin) {
// Instrucciones que se van a repetir
sentencia1;
sentencia2;
...
}
Las sentencias incluidas entre las llaves se ejecutarn mientras se cumpla la condicin, que ser
una expresin lgica como las que vimos en la estructura if-else. El mismo cdigo de antes escrito
mediante la estructura while quedara:

Las estructuras iterativas tambin se llaman bucles, y a cada ejecucin completa de las sentencias
contenidas en el bucle se le denomina iteracin.
IMPORTANTE: En cada iteracin del bucle debe haber alguna sentencia que posibilite que la
evaluacin de la condicin cambie, y podamos salir del bucle. De lo contrario tendramos un bucle
infinito, y el programa no terminara su ejecucin nunca.

2. FOR
La sentencia for es otra forma de repetir cdigo un nmero determinado de veces. Su sintaxis es
ms compacta que la de la sentencia while, y nos permite en una sola lnea escribir la condicin de
comprobacin del bucle, la sentencia que nos actualiza el contador, as como la inicializacin de
dicho contador. Veamos su sintaxis, y un ejemplo que compara su funcionamiento con un ejemplo
equivalente hecho con while:

for (inicializacion;condicin;actualizacin) {
// Instrucciones que se van a repetir
sentencia1;
sentencia2;
...
}
Las sentencias incluidas entre las llaves se ejecutarn mientras se cumpla la condicin. Adems, en
cada iteracin del bucle, tras las sentencias incluidas entre las llaves, se ejecutar la sentencia de
actualizacin. Un cdigo que se puede escribir con while para mostrar por pantalla los 20 primeros
nmeros naturales es:
#include <stdio.h>
void main() {
int i;
i = 0;
while(i<20) {
printf("%d, ", i);
i++;
}
printf("\n");
}
El cdigo equivalente escrito con la sentencia for sera el siguiente:
#include <stdio.h>
void main() {
int i;
for(i=0; i<10; i++) {
printf("%d, ", i);
}
printf("\n");
}
Sabiendo todo esto, podemos pasar a realizar los ejercicios.

EJERCICIOS
Ejercicio 1: Escribir una funcin que muestre los primeros n nmeros naturales PARES:
void numerosPares(int n);
Ejercicio 2: Escribir una funcin
void mostrarTablaMultiplicar(int n);
que reciba por parmetro un entero n. El programa mostrar por pantalla la tabla de multiplicar de
dicho nmero n. Por ejemplo: mostrarTablaMultiplicar(2).
Ejercicio 3: Basndose en el ejercicio anterior, implementar la funcin:
void mostrarTablasMultiplicar(int m);
que recibe un parmetro entero m. La funcin debe mostrar las tablas de multiplicar del 1 al m.
Nota: Ha de hacerlo con uno dos bucles for o while. La funcin no devuelve nada.
Ejercicio 4: Escribir un programa que lea del teclado un nmero entero y que compruebe si es
menor que 5. Si no lo es, debe volver a leer un nmero, repitiendo la operacin hasta que el usuario
escriba un valor correcto. Finalmente debe escribir por pantalla el valor ledo.
Ejercicio 5: Escribir una funcin:
float potencia (float base, int exponente);
Dicha funcin devolver la potencia de base elevado a exponente. Para el clculo de la
potencia, se realizar con multiplicaciones sucesivas (no se puede utilizar la librera matemtica).
Ejercicio 6: Escriba un programa que vaya leyendo del teclado un nmero entero de forma iterativa
hasta que el usuario introduzca un nmero positivo. Finalmente deber imprimir un mensaje
mostrando el nmero positivo introducido por teclado. Por ejemplo, si el usuario introduce:
-12, -4, -8 y 10
El programa debe mostrar el siguiente mensaje:
El nmero positivo introducido ha sido 10
Ejercicio 7: Complete el cdigo anterior para que el programa adems cuente cuntos nmeros
negativos ha introducido el usuario hasta que tecle un nmero positivo. Finalmente imprimir el
mensaje con el valor de dicho contador. Por ejemplo, si el usuario introduce: -10 -5 -7 9, entonces
el programa debe mostrar el siguiente mensaje:
El usuario introdujo 3 nmeros negativos antes de introducir el primer nmero positivo cuyo valor
ha sido 9
Ejercicio 8: Compltelo an ms. Para ello, implementar una funcin estaEnIntervalo que
recibe tres parmetros enteros n, a y b. La funcin devolver 1 si n est en el intervalo marcado por
a y b, y 0 en el caso contrario. Utilizar esta funcin en un programa que solicite un entero que se
encuentre entre dos umbrales dados por el usuario y no pare de pedirnos dicho nmero hasta que el
que introduzcamos se encuentre, efectivamente, entre esos dos nmeros

Ejercicio 9: Escriba una funcin:


void fibonacci(int n);
que imprima los n primeros trminos de la sucesin de Fibonacci por pantalla. Los dos primeros
trminos de dicha sucesin son 1 y 2 y los siguientes trminos se van calculando a partir de la suma
de los dos anteriores, es decir, el trmino n de la sucesin (para n>=3) viene dado por la suma de los
dos trminos inmediatamente anteriores a l:
x 1 = 1 x 2= 1
x n =x n 1+x n 2 para n>= 3

Ejercicio 10: Modifique el ejercicio de la calculadora de la prctica 2. En este caso, implemente


algn mecanismo para que, cada vez que hagamos alguna operacin, podamos seguir realizando
tantas operaciones como queramos, hasta que indiquemos la opcin -1 en el men principal.
Ejercicio 11: Realice una funcin factorial que devuelva el factorial de un nmero entero
positivo. Como sabr, el factorial de un nmero se define de la siguiente forma:

Ejercicio 12: Escriba una funcin muestraBisiestos que, dados dos aos como parmetro,
muestre todos los aos bisiestos comprendidos entre ambos.
Ejercicio 13: Escriba una funcin divisionEntera que calcule el resto de la divisin entera
entre dos nmeros a y b, enteros positivos pasados como parmetros, sin usar los operadores / ni %.
Ejercicio 14: Realice una funcin esPrimo que indique si un nmero impar es primo (devolver
1 si es primo y 0 si no lo es), comprobando si es divisible por los impares inferiores a l.
Ejercicio 15: Realice una funcin descFactorial que imprima por pantalla la descomposicin
factorial de un nmero pasado como parmetro. (Nota: compruebe primero si el nmero es divisible
por 2; si lo es, imprimir un 2 y seguir iterando para buscar factores pero con el numero=numero/2.
Cuando se hayan sacado todas las veces que es divisible por 2, repetir todo el proceso para los
nmeros impares).
Ejercicio 16: Escriba un programa que calcule el sumatorio de los nmeros que el usuario va
introduciendo por teclado. El programa le pedir un nmero al usuario, una vez introducido, el
programa mostrar la suma acumulada hasta el momento. Si el nmero que ha introducido el
usuario es distinto de cero, el programa volver a preguntar por otro nmero, dando de nuevo la
suma acumulada. El programa terminar cuando el nmero introducido por el usuario sea cero.
Ejercicio 17: Basndose en el programa anterior, escriba un programa calculadora, en el que
adems del nmero, se introduzca la operacin a realizar entre el total acumulado hasta el momento
y el nuevo nmero. El programa terminar cuando el nmero introducido sea cero.
Ejercicio 18: Escriba un programa que lea una serie de nmeros (leer hasta que llegue el cero, por
ejemplo) y que calcule su media aritmtica.

You might also like