2. Evaluación
Escribir un programa que desglose cierta cantidad de
segundos introducida por el teclado en su equivalente
en semanas, días, 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 días de
un mes dados los valores numéricos del mes y año
mes,
3. Contenido
1. La sentencia While
2. Repetición: el bucle For
3. Precauciones en el uso del bucle For
4. Repetición: el bucle Do-While
5. Comparación de bucles While, For y do-While
6. Diseño de bucles
7. Bucles anidados
8. Ejercicios
4. La sentencia While
Un bucle while tiene una condición del bucle (una
expresión lógica) que controla la secuencia de
repetición.
repetición La posición de esta condición 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 evalúa la condición
antes de que se ejecute el cuerpo del bucle
5. Sintaxis
Las sentencias del cuerpo del
bucle se repiten mientras que
la expresión lógica (condición
del bucle) sea verdadera.
)
Cuando se evalúa la
expresión lógica y resulta
falsa, se termina y se sale del
bucle y se ejecuta la siguiente
sentencia de programa
después de la sentencia while
6. Ejemplo
/*bucle de muestra con while*/
#include <stdio.h>
#include <stdlib.h>
int main ()
{
int contador=0;
while(contador<5)
{
contador++;
printf("contador: %dn",contador);
}
printf("Fin");
system("PAUSE");
return 0;
}
7. Operadores de incremento y decremento
C ofrece los operadores de incremento (++) y
decremento (--) que soporta una sintaxis abreviada
para añadir (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 /
8. Bucles controlados por centinelas
Un método para terminar
p
un bucle es introducir un
único dato definido y
especificado denominado
valor centinela como ultimo
dato. La condición del bucle
comprueba cada dato y
termina cuando se lee el
valor centinela
9. 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
10. Las sentencia break en los bucles
La sentencia break se utiliza, a veces, para realizar una
terminación anormal del bucle. Dicho de otro modo, una
terminación antes de lo previsto
11. Bucles While (true)
La condición que se
comprueba en un b l while
b bucle hil
puede ser cualquier expresión
valida C. Mientras que la
condición permanezca
verdadera (distinto de 0), el
bucle while continuara
ejecutándose.
ejecutándose Se puede crear
un bucle que nunca termine
utilizando el valor 1 para la
condición que se comprueba
q p
12. Ejemplo
/*calculo de la media de 6 numeros*/ while (contadornum<totalnum)
#include <stdio.h>
#incl de <stdio h> {
#include <stdlib.h> float numero;
#include <string.h> scanf ("%f",&numero);
int main () sumanum+=numero; ;
{ ++contadornum;
const int totalnum=6; }
int contadornum=0; media=sumanum/contadornum;
float sumanum=0; printf("media:%.2fn",media);
float media; system("PAUSE");
printf ("introduzca %d numeros:n", return 0;
totalnum); }
13. Repetición el bucle For
La sentencia for (bucle for) es un método 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 sitúan en un solo
sitio: la cabecera de la sentencia
Sintaxis
Si i
For( inicialización; condición iteración; incremento)
Sentencias
S t i
14. Ejemplo
#include <stdio.h> #include <stdio.h>
#include <stdlib.h>
#include <stdlib.h>
#i l d < dlib h> int main ()
int main () {
int i;
{ /*imprimir hola 10 veces*/
int i;
i i for(i=0; i<10; i++)
{
/*imprimir hola 10 veces*/
printf("hola!, ");
for(i=0; i<10; i++) printf("el valor de i es: %dn",i);
printf("hola!n");
i tf("h l ! ") }
system("PAUSE");
system("PAUSE"); return 0;
return 0; }
}
15. Cont…
Cont
Existen dos formas de implementar la sentencia for que se utilizan
normalmente para i l
l implementar b lbucles 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.
16. Ejemplos
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <math.h>
int main()
{
#define M 15
int n, suma = 0;
#define f(x) exp(2*x)-x
int main () for (n=1; n<=10; n++)
{ suma += 2*n;
int i; printf("La suma de los 10 primeros numeros pares: %dn",suma);
double x; system("PAUSE");
for(i=0; i<=M; i++)
return 0;
{
}
printf("valor de x: ");
scanf("%lf",&x);
printf("f(%.1lf)=%.4gn",x,f(x)); /*El bucle lo podríamos haber diseñado con un incremento de 2:
} for (n = 2; n <= 20; n+=2)
system("PAUSE"); suma += n; */
/
return 0;
}
17. 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 combinación if-break o
if-return)
18. Sentencia nulas en bucles for
/* bucles for con sentencias nulas */
Cualquiera o todas las #include <stdio.h>
#include <stdlib.h>
sentencias del bucle for int main()
{
pueden ser nulas Para
nulas. int contador = 0;
for (;contador < 5;)
ejecutar esta acción se
{
contador++;
printf (";Bucle!n");
utiliza el (;) para marcar }
printf("n Contador: %d n", contador);
la sentencia vacía system ("PAUSE");
return 0;
}
19. Sentencias break y continue
La sentencia break Las sentencia continue
termina la ejecución hace que la ejecución
de un bucle de una
bucle, de un bucle vuelva a
sentencia switch, y en la cabecera del bucle
general de cualquier
sentencia
20. Ejemplos
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> /*Ejemplo de utilización de break*/ #include <stdlib.h>
int main ()
int main()
{
{
int contador = 0; /* inicialización */
int clave,i;
int max;
printf ("Cuantos holas? " ) ; puts ("Introduce -9 para acabar. " ) ;
scanf ("%d",&max) ; clave = 1;
for (;;) /* bucle for que no termina nunca */ for (i = 0; i < 8; i++) {
{ if (clave ==-9) continue;
if(contador < max) /* test */
scanf ("%d",&clave);
{
printf ("clave %dn",clave) ;
( clave %dn clave)
puts("Hola!");
}
contador++;
} printf("VAL0RES FINALES i = %d clave = %d",i,clave);
else system("PAUSE");
break; return 0;
} }
system("PAUSE");
return 0;
}
21. Repetición: el bucle do while
do…while
La sentencia do-while se utiliza para especificar un
p p
bucle condicional que se ejecuta al menos una vez
Sintaxis
do sentencia while (expresión)
do
sentencia
while (expresión)
( p )
22. 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
23. Ejemplos
#include <stdio.h> #include <stdio.h>
#include <stdlib.h>
#include <stdlib.h>
#incl de <stdlib h>
/*imprime las letras minusculas del alfabeto*/
/*cuenta de 0 a 10*/ int main ()
int main () {
char car='a';
{
do
int x=0; {
do printf ("%cn",car);
car++;
printf ("x: %dn",x++);
}
while (x<10); while (car<='z');
system("PAUSE"); system("PAUSE");
return 0;
return 0;
}
}
24. Comparación de bucles
While; el uso mas frecuente es cuando la repetición no esta
controlada por contador; el test d condición precede a cada
l d d l de di ió d d
repetición del bucle; el cuerpo del bucle puede no ser ejecutado. Se
debe utilizar cuando se desea saltar el bucle si la condición es falsa
For; bucle de conteo, cuando el numero de repeticiones se conoce
por anticipado y puede ser controlado por un contador; también es
adecuado para bucles que implican control no contable del bucle
con simples etapas d i i i li ió y d actualización; el t t d l
i l t de inicialización de t li ió l test de la
condición precede a la ejecución del cuerpo del bucle
Do while; es adecuada para asegurar que al menos se ejecuta el
bucle
b l una vez
25. Diseño de bucles
El diseño de un bucle necesita tres puntos a
considerar
El cuerpo del bucle
Las sentencias de inicialización
Las
L condiciones para l terminación del bucle
di i la i ió d l b l
26. Ejemplos
#include <stdio.h> scanf ("%ld",&n);
#include <stdlib.h>
}
/*vizualize el factorial de un
entero*/ while ((n<2)||(n>20));
int i
i main () for (m=n fact=1; n>1; fact
(m=n,
{
*=n--);
long int n,m,fact; printf ("%ld! = %ldn",m,fact);
do system("PAUSE");
("PAUSE")
{ return 0;
p
printf ("nFactorial de numero n:
( }
");
27. 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
28. Ejemplos
#include <stdio.h> scanf ( "%d",&columnas) ;
#include <stdlib.h> printf ("Q e caracter? " ) ;
( Que caracter?:
scanf ("n%c",&elCar) ;
int main ()
for (i = 0; i < filas; i++)
{ {
int filas, columnas; for (j = 0; j < columnas; j++ )
int i, j; putchar(elCar) ;
char elCar; ; putchar('n');
}
printf ("Cuantas filas?: " ) ;
system("PAUSE");
scanf ("%d",&filas) ; return 0;
printf ("Cuantas columnas?: " ) ;
( Cuantas }
29. 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 términos de la serie 2
+ + +
2 2 3
2 2n
Escribir un programa que calcule la suma de los 50 primeros números
enteros
Calcular la media de las notas introducidas por teclado con un dialogo
interactivo semejante al siguiente:
Cuantas notas?: 3
Nota 1: 12
Nota 2: 16
…
Media : 14
30. Patrón de prueba de pantalla panorámica (16:9)
Prueba de la
relación de
aspecto
(Debe parecer circular)
4x3
16x9