CONTROL DE FLUJO Lenguajes de programación LPSI EUI UPM CONDICIONALES - IF if (cond) sent; if (cond) sent 1; else sent 2; Lenguajes de programación LPSI EUI UPM if (cond1) sent 1; else if (cond2); ………. else sent n; if (i > 0) printf (“la vble i es positiva\n”); if (i > 0) printf (“la vble i es positiva\n”); else if (i < 0) printf (“la vble i es negativa\n”); else printf (“la vble i es 0\n”); Lenguajes de programación LPSI EUI UPM ¡cuidado! int i = 5; if (i < 0) ; printf(“El valor de i es negativo.\n”); ¡¡¡FALSO!!! Lenguajes de programación LPSI EUI UPM int i = 0; if (i = 0) printf (“Resultado nulo.\n”); else printf (“Resultado no nulo.\n”); ¡¡¡ ERROR !!! Resultado no nulo. Lenguajes de programación LPSI EUI UPM • Solución: if (0 == i) printf (“Resultado nulo.\n”); else printf (“Resultado no nulo.\n”); Lenguajes de programación LPSI EUI UPM int i = 100; if (i > 0) if (i > 1000) printf (“Demasiado grande.\n”); else printf (“Razonable.\”); else printf (“Negativo.\n”); Lenguajes de programación LPSI EUI UPM int i = -46; if (i > 0) { if (i > 1000) printf (“Demasiado grande.\n”); } else printf (“Negativo.\n”); Lenguajes de programación LPSI EUI UPM CONDICIONAL - SWITCH switch (expr entera) { case valor 1 : sent 1; case valor 2 : sent 2; ……………… case valor n : sent n; [default : sent n+1;] } Lenguajes de programación LPSI EUI UPM switch (dia) { case 1: printf (“Lunes\n”); case 2: printf (“Martes\n”); case 3: printf (“Miércoles\n”); case 4: printf (“Jueves\n”); case 5: printf (“Viernes\n”); case 6: printf (“Sábado\n”); case 7: printf (“Domingo\n”); default: printf (“Día erróneo\n”); } Lenguajes de programación LPSI EUI UPM Para dia = 4 Jueves Viernes Sábado Domingo Día erróneo Solución: ruptura de flujo sentencia break switch (dia) { case 1: printf (“Lunes\n”); break; case 2: printf (“Martes\n”); break; ……………………… case 7: printf (“Domingo\n”); break; default: printf (“Día erróneo\n”); } Lenguajes de programación LPSI EUI UPM Para dia = 4 Jueves char c; ……….. switch (c) { case 0: case 1: ….. case 9: printf (“El carácter es un dígito.\n”); break; default: printf (“No es dígito.\n”); } Lenguajes de programación LPSI EUI UPM printf (“On the “); switch (i) { case 1: printf (“1st ”); break; case 2: printf (“2nd ”); break; case 3: printf (“3rd ”); break; default: printf (“%dth “); } printf (“day of Christmas my true love sent to me “); switch (i) { case 12: printf (“twelve lords a leaping, ”); case 11: printf (“eleven ladies dancing, ”); case 10: printf (“ten pipers piping, ”); case 9: printf (“nine drummers drumming, ”); case 8: printf (“eight maids a milking, ”); case 7: printf (“seven swams a swimming, ”); case 6: printf (“six geese a laying, ”); case 5: printf (“five gold rings, ”); case 4: printf (“four calling birds, ”); case 3: printf (“three French hens, ”); case 2: printf (“two turtle doves and , ”); case 1: printf (“a partridge in a pear tree.\n ”); } Lenguajes de programación LPSI EUI UPM BUCLES - WHILE while (cond) sent; int i = 5; while (i > 0) while (i) { printf (“i = %d\n”, i); printf (“i = %d\n”, i--); i--; } Lenguajes de programación LPSI EUI UPM int x = 0; while (++x < 10) printf (“%i ”, x); int x = 0; while (++x < 10); printf (“%i ”, x); int x = 0; while (++x) printf (“%i ”, x); Lenguajes de programación LPSI EUI UPM int x = 0; while () printf (“%i ”, x); while (); while (0) printf (“¿Qué pasa aquí?”); Lenguajes de programación LPSI EUI UPM BUCLES - DO WHILE • Se garantiza, al menos, un paso por el cuerpo del bucle do sent; while (cond); Lenguajes de programación LPSI EUI UPM int j = 10; do printf (“%i\n”, j--); while (j); printf (“¡¡¡Ignición!!!) x = 0; do printf (“%d “, x); while (++x <= 10); x = 0; do { printf (“%d “, x); x++; } while (x <= 10); Lenguajes de programación LPSI EUI UPM BUCLES - FOR for (inicialización; cond; actualización) sentencia; • Todas las partes son opcionales • Los ‘;’ son necesarios, aunque no estén el resto de las partes Lenguajes de programación LPSI EUI UPM int j; for (j = 5; j; j--) printf (“j = %i\n”, j); for (j = 5; j; j--) { printf (“j = %i ”, j); printf (“%s\n”, j % 2 ? “es impar” : “es par”); double angulo; for (angulo = 0.0; angulo < 3.1416 ; angulo += 0.2) printf (“seno de %f es %f\n”, angulo, sin(angulo)); Lenguajes de programación LPSI EUI UPM for ( ; ; ) ; for (; i; ); for (; i < 10; ); for (i = 0, j = 50; i < j; i++, j--) printf (“Vamos que llegas…”) Lenguajes de programación LPSI EUI UPM EJERCICIOS • Escribir un programa que lea dígitos entre el 1 y el 9 y los imprima como números romanos (0 para terminar). • Escribir un programa que lea un nº real y otro entero, entre 0 y 15, e imprima el resultado de elevar el primero al segundo. • Escribir un programa que imprima un cuadrado de lado n, siendo n un valor entre 2 y 40, dibujando sólo el contorno, es decir, la parte interior del cuadrado deberá estar vacía. Lenguajes de programación LPSI EUI UPM • Escribir un programa que imprima el mismo cuadrado del ejercicio anterior pero utilizando para dibujarlo un carácter leído por teclado. • Escribir un programa que dibuje un rectángulo de lado n x m, con las mismas consideraciones que para el cuadrado del ejercicio anterior. Lenguajes de programación LPSI EUI UPM • Escribir un programa que lea caracteres por teclado (se acaba al leer el ‘*’) e imprima por pantalla el carácter leído y si es: dígito, letra minúscula, letra maýuscula, la letras ‘ñ’ o ‘Ñ’, u otro carácter distinto. • Escribir un programa que lea un nº real e imprima sólo la parte decimal del mismo. • Escribir un programa que lea un nº entero long e imprima el nº de dígitos que contiene. Lenguajes de programación LPSI EUI UPM • Escribir un programa que lea un nº entero long y lo imprima invertido. • Escribir un programa que lea un entero long y le quite todos los dígitos pares que contenga, imprimiendo como resultado el nº resultante. • Escribir un programa que lea un carácter cualquiera y un nº entero entre 1 y 12, e imprima un triángulo, centrado en la pantalla, de altura la indicada por el nº y utilizando el carácter leído para dibujarlo. Lenguajes de programación LPSI EUI UPM