Está en la página 1de 30

ESTRUCTURAS DE CONTROL CONTROL: BUCLES

Evaluacin
Escribir un programa que desglose cierta cantidad de segundos introducida por el teclado en su equivalente en semanas, das, horas, minutos, segundos , , , , g Escribir un programa lea la longitud de los lados y calcule la hipotenusa Escribir un programa que calcule el numero de das de un mes dados los valores numricos del mes y ao mes,

Contenido
1. 2. 3. 4. 5. 6. 7. 8.

La sentencia While Repeticin: el bucle For Precauciones en el uso del bucle For Repeticin: el bucle Do-While Comparacin de bucles While, For y do-While Diseo de bucles Bucles anidados Ejercicios

La sentencia While
Un bucle while tiene una condicin del bucle (una expresin lgica) que controla la secuencia de repeticin. repeticin La posicin de esta condicin del bucle es delante del cuerpo del bucle y significa que un bucle while es un bucle pretest de modo que cuando se ejecuta el mismo, se evala la condicin antes de que se ejecute el cuerpo del bucle

Sintaxis
Las sentencias del cuerpo del bucle se repiten mientras que la expresin lgica (condicin del bucle) sea verdadera. ) Cuando se evala la expresin lgica y resulta falsa, se termina y se sale del bucle y se ejecuta la siguiente sentencia de programa despus de la sentencia while

Ejemplo
/*bucle de muestra con while*/ #include <stdio.h> #include <stdlib.h> int main () { int contador=0; while(contador<5) { contador++; printf("contador: %d\n",contador); } printf("Fin"); system("PAUSE"); return 0; }

Operadores de incremento y decremento


C ofrece los operadores de incremento (++) y decremento (--) que soporta una sintaxis abreviada para aadir (incrementar) o restar (decrementar) 1 al valor de una variable K=i++; /*asigna el valor de 3 a k y 4 a i*/ K ++i; / asigna K=++i; /*asigna el valor de 5 a K y 5 a i*/ i / K=i--; /*asigna el valor de 5 a k y 4 a i*/ K i; / asigna K=--i; /*asigna el valor de 3 a k y 3 a i*/ i /

Bucles controlados por centinelas


Un mtodo para terminar p un bucle es introducir un nico dato definido y especificado denominado valor centinela como ultimo dato. La condicin del bucle comprueba cada dato y termina cuando se lee el valor centinela

Bucles controlados por indicadores


Un bucle controlado por bandera-indicador se ejecuta p j hasta que se produce un suceso anticipado y se cambia el valor del indicador

Las sentencia break en los bucles


La sentencia break se utiliza, a veces, para realizar una terminacin anormal del bucle. Dicho de otro modo, una terminacin antes de lo previsto

Bucles While (true)


La condicin que se comprueba en un b l while b bucle hil puede ser cualquier expresin valida C. Mientras que la condicin permanezca verdadera (distinto de 0), el bucle while continuara ejecutndose. ejecutndose Se puede crear un bucle que nunca termine utilizando el valor 1 para la condicin que se comprueba q p

Ejemplo
/*calculo de la media de 6 numeros*/ #include <stdio.h> #incl de <stdio h> #include <stdlib.h> #include <string.h> int main () { const int totalnum=6; int contadornum=0; float sumanum=0; float media; printf ("introduzca %d numeros:\n", totalnum); while (contadornum<totalnum) { float numero; scanf ("%f",&numero); sumanum+=numero; ; ++contadornum; } media=sumanum/contadornum; printf("media:%.2f\n",media); system("PAUSE"); return 0; }

Repeticin el bucle For


La sentencia for (bucle for) es un mtodo ara ejecutar ( ) j un bloque de sentencias un numero fijo de veces. El bucle for se diferencia del bucle while en que las operaciones de control del bucle se sitan en un solo sitio: la cabecera de la sentencia Sintaxis Si i
For( inicializacin; condicin iteracin; incremento) Sentencias S t i

Ejemplo
#include <stdio.h> #include <stdlib.h> #i l d < dlib h> int main () { int i; i i /*imprimir hola 10 veces*/ for(i=0; i<10; i++) printf("hola!\n"); i tf("h l !\ ") system("PAUSE"); return 0; }
#include <stdio.h> #include <stdlib.h> int main () { int i; /*imprimir hola 10 veces*/ for(i=0; i<10; i++) { printf("hola!, "); printf("el valor de i es: %d\n",i); } system("PAUSE"); return 0; }

Cont Cont
Existen dos formas de implementar la sentencia for que se utilizan normalmente para i l l implementar b l bucles d conteo: f de formato ascendente, en el que la variable de control se incrementa y formato descendente, en el que la variable de control decrementa.

Ejemplos
#include <stdio.h> #include <stdlib.h> #include <math.h>

#include <stdio.h> #include <stdlib.h> int main() { int n, suma = 0; for (n=1; n<=10; n++) suma += 2*n; printf("La suma de los 10 primeros numeros pares: %d\n",suma); system("PAUSE"); return 0; } /*El bucle lo podramos haber diseado con un incremento de 2: for (n = 2; n <= 20; n+=2) suma += n; */ /

#define M 15 #define f(x) exp(2*x)-x int main () { int i; double x; for(i=0; i<=M; i++) { printf("valor de x: "); scanf("%lf",&x); printf("f(%.1lf)=%.4g\n",x,f(x)); } system("PAUSE"); return 0; }

Bucles infinitos
C no soporta una sentencia que realice esa tarea, pero existe una variante d l sintaxis f que permite i l i de la i i fro i implementar b l i fi i bucles infinitos que son aquellos bucles que, en principio, no tienen fin. Sintaxis
For(;;)
Sentencia;

La sentencia se ejecuta indefinidamente a menos que se utilice una sentencia return o break (normalmente una combinacin if-break o if-return)

Sentencia nulas en bucles for


Cualquiera o todas las sentencias del bucle for pueden ser nulas Para nulas. ejecutar esta accin se utiliza el (;) para marcar la sentencia vaca
/* bucles for con sentencias nulas */ #include <stdio.h> #include <stdlib.h> int main() { int contador = 0; for (;contador < 5;) { contador++; printf (";Bucle!\n"); } printf("\n Contador: %d \n", contador); system ("PAUSE"); return 0; }

Sentencias break y continue


La sentencia break termina la ejecucin de un bucle de una bucle, sentencia switch, y en general de cualquier sentencia Las sentencia continue hace que la ejecucin de un bucle vuelva a la cabecera del bucle

Ejemplos
#include <stdio.h> #include <stdlib.h> /*Ejemplo de utilizacin de break*/ int main () { int contador = 0; /* inicializacin */ int max; printf ("Cuantos holas? " ) ; scanf ("%d",&max) ; for (;;) /* bucle for que no termina nunca */ { if(contador < max) /* test */ { puts("Hola!"); contador++; } else break; } system("PAUSE"); return 0; }

#include <stdio.h> #include <stdlib.h> int main() { int clave,i; puts ("Introduce -9 para acabar. " ) ; clave = 1; for (i = 0; i < 8; i++) { if (clave ==-9) continue; scanf ("%d",&clave); printf ("clave %d\n",clave) ; ( clave %d\n clave) } printf("VAL0RES FINALES i = %d clave = %d",i,clave); system("PAUSE"); return 0; }

Repeticin: el bucle do while dowhile


La sentencia do-while se utiliza para especificar un p p bucle condicional que se ejecuta al menos una vez Sintaxis
do sentencia while (expresin) do
sentencia

while (expresin) ( p )

Diferencias entre while y do while


Una sentencia do-while es similar a una sentencia while excepto que el cuerpo del bucle se ejecuta siempre al menos una vez l d lb l j i l

Ejemplos
#include <stdio.h> #include <stdlib.h> #incl de <stdlib h> /*cuenta de 0 a 10*/ int main () { int x=0; do printf ("x: %d\n",x++); while (x<10); system("PAUSE"); return 0; }
#include <stdio.h> #include <stdlib.h> /*imprime las letras minusculas del alfabeto*/ int main () { char car='a'; do { printf ("%c\n",car); car++; } while (car<='z'); system("PAUSE"); return 0; }

Comparacin de bucles
While; el uso mas frecuente es cuando la repeticin no esta controlada por contador; el test d condicin precede a cada l d d l de di i d d repeticin del bucle; el cuerpo del bucle puede no ser ejecutado. Se debe utilizar cuando se desea saltar el bucle si la condicin es falsa For; bucle de conteo, cuando el numero de repeticiones se conoce por anticipado y puede ser controlado por un contador; tambin es adecuado para bucles que implican control no contable del bucle con simples etapas d i i i li i y d actualizacin; el t t d l i l t de inicializacin de t li i l test de la condicin precede a la ejecucin del cuerpo del bucle Do while; es adecuada para asegurar que al menos se ejecuta el bucle b l una vez

Diseo de bucles
El diseo de un bucle necesita tres puntos a considerar
El cuerpo del bucle Las sentencias de inicializacin Las L condiciones para l terminacin del bucle di i la i i d l b l

Ejemplos
#include <stdio.h> #include <stdlib.h> /*vizualize el factorial de un entero*/ int i i main () { long int n,m,fact; do { p printf ("\nFactorial de numero n: (\ ");

scanf ("%ld",&n); } while ((n<2)||(n>20)); for (m=n fact=1; n>1; fact (m=n, *=n--); printf ("%ld! = %ld\n",m,fact); system("PAUSE"); ("PAUSE") return 0; }

Bucles anidados
Es posible anidar bucles. Los bucles anidados constan de un bucle externo con uno o mas b l i t bucles internos. C d vez que se repite el b l externo, l Cada it l bucle t los bucles internos se repiten, se vuelve a evaluar los componentes de control y se ejecutan todas las iteraciones requeridas

Ejemplos
#include <stdio.h> #include <stdlib.h> int main () { int filas, columnas; int i, j; char elCar; ; printf ("Cuantas filas?: " ) ; scanf ("%d",&filas) ; printf ("Cuantas columnas?: " ) ; ( Cuantas
scanf ( "%d",&columnas) ; printf ("Q e caracter? " ) ; ( Que caracter?: scanf ("\n%c",&elCar) ; for (i = 0; i < filas; i++) { for (j = 0; j < columnas; j++ ) putchar(elCar) ; putchar('\n'); } system("PAUSE"); return 0; }

Ejercicios
Escribir un programa que encuentre el primer numero primo introducido por el t l d l teclado 1 2 3 n + + + Calcular la suma de los trminos de la serie 2 2 2 2 Escribir un programa que calcule la suma de los 50 primeros nmeros enteros Calcular la media de las notas introducidas por teclado con un dialogo interactivo semejante al siguiente:
2 3 n

Cuantas notas?: 3 Nota 1: 12 Nota 2: 16 Media : 14

Patrn de prueba de pantalla panormica (16:9)

Prueba de la relacin de aspecto


(Debe parecer circular)

4x3 16x9

También podría gustarte