Tema 6 Control de Flujo Contenidos 1. Secuencia de Instrucciones. 2. Sentencias Condicionales. if switch 3. Estructuras de Repetición. while for do while ( break / continue ) 2 1. Secuencia de Instrucciones Secuencia o Bloque de instrucciones Conjunto de instrucciones encerrado entre llaves. { instrucción1; instrucción2; ... instrucciónN; } Las instrucciones se ejecutan en orden secuencial. 3 2. Sentencias Condicionales Instrucciones de control, selección o alternativas Instrucciones que evalúan una expresión y en función del resultado de la misma se ejecuta un bloque de instrucciones u otro. if Para ejecutar unas instrucciones sólo si se da una determinada condición. Opcionalmente se pueden ejecutar otras instrucciones en caso de que la condición no se cumpla. switch Para ejecutar grupos de instrucciones diferentes en función del resultado de una expresión. 4 if if (condición) instrucción; En su versión más simple, la sentencia if ejecutará la instrucción sólo cuando condición sea verdadera. if (condición) instrucción; else instrucción2; También se puede incluir (con el else) una instrucción2 que se ejecutará cuando condición sea falsa. if (condición1) instrucción1; else if (condición2) instrucción2; else if (condición3) instrucción3; else instrucción4; Pueden encadenarse tantos if como hagan falta. 5 if (II) if (condición1) { instrucciones1; } else if (condición2) { instrucciones2; } else if (condición3) { instrucciones3; } else { instrucciones4; } Donde se indica una instrucción, puede ponerse un bloque de instrucciones (entre llaves). Es conveniente usar las llaves para evitar ambigüedades: if (c1) if (c2) i1; else i2; es diferente de if (c1) {if (c2) i1;} else i2; Sin llaves, cada else pertenece al if anterior más cercano. 6 if (III) if (condición1) { if (condición2) { instrucciones_1_2; } else { instrucciones_1_no2; } } else { if (condición2) { instrucciones_no1_2; } else { instrucciones_no1_no2; } } Se pueden anidar (poner if dentro de if). Ejercicio: Código en C para guardar en la variable m el máximo de a y b. 7 switch switch (expresión) { case constante1: instrucciones1; break; case constante2: instrucciones2; break; default: instrucciones3; } En función del valor de expresión (que debe ser entero o carácter) se ejecutará el case correspondiente y seguirá hasta encontrar un break. Las constantes también deben ser de tipo entero (o carácter). Si el valor de expresión no coincide con la constante de ningún case, se entrará en la opción default (si aparece, ya que no es obligatoria). 8 switch (II) Ejercicio: Mostrar la salida del siguiente código en función de si la variable a vale 1, 2, 3 ó 4. Nótese la importancia del break comentado. switch (a) { case 1: printf("a vale uno\n"); /* break; */ case 2: case 3: printf("a vale dos o tres\n"); break; default: printf("Ninguna de las anteriores\n"); } Ejercicio: Desarrollar código en C que muestre por pantalla el mensaje HOMBRE o MUJER en función del valor de la variable c (h, H, m o M). 9 3. Estructuras de Repetición Instrucciones de repetición (bucles) Repiten un conjunto de instrucciones múltiples veces. En C se repetirán las instrucciones mientras se cumpla una determinada condición. Se distinguen dos tipos: Las que comprueban la condición antes de ejecutar el cuerpo del bucle: while y for Si la condición no se cumple la primera vez, las instrucciones del bucle no se ejecutan ni siquiera una vez. Las que comprueban la condición después de ejecutar el cuerpo del bucle: do while Las instrucciones dentro del bucle se ejecutan siempre por lo menos una vez, ya que la condición se comprueba después. 10 while while (condición) instrucción; o while (condición) { instrucciones; } “Mientras se cumpla la condición, ejecutar la instrucción o instrucciones”. Luego, se continúa con el programa. Si la condición es falsa la primera vez, las instrucciones del bucle no llegan a ejecutarse. Es importante que dentro del bucle se haga falsa la condición en algún momento (tras unas cuantas iteraciones). Si no, se producirá un “bucle infinito”. (Ídem para for y do while) En un bucle infinito el ordenador se queda “colgado” ya que nunca sale del bucle. Ejercicio: Código en C para escribir los números del 1 al 10. 11 for for (expresión1;condición;expresión2) { instrucciones; /* No hacen falta llaves si sólo hay una instrucción */ } “Ejecutar expresión1 y luego: Mientras se cumpla la condición, ejecutar las instrucciones seguidas de expresión2”. Si la condición es falsa la primera vez, las instrucciones del bucle no llegan a ejecutarse. Normalmente: expresión1: Inicialización de la “variable de control del bucle”. condición: Expresión que utiliza la “variable de control del bucle”. expresión2: Modificación de la “variable de control del bucle” (típicamente incremento o decremento). Ejercicio: Código en C para escribir los números del 1 al 10. 12 do while do { instrucciones; /* No hacen falta llaves si sólo hay una instrucción */ } while (condición); “Ejecutar instrucciones y volver a ejecutarlas una y otra vez mientras se cumpla la condición”. La primera vez las instrucciones del bucle siempre se ejecutan, independientemente del valor de la condición. Ejercicio: Código en C para leer de teclado un número entero del 1 al 10 verificando que la entrada es correcta. 13 while / for / do while while(cond) inst; for(e1;cond;e2) inst; do inst; while(cond); e1 cond V inst F cond V inst inst F V cond F e2 14 break / continue break; En la sentencia switch, el break cortaba la ejecución de los siguientes case. Dentro de un bucle, la sentencia break hace que se salga inmediatamente del bucle, sin ejecutar más instrucciones del bucle. continue; Esta sentencia hace que se pase directamente a evaluar la condición del bucle, saltándose las instrucciones intermedias. Luego se seguirá o no dentro del bucle en función de si se sigue cumpliendo la condición o no. 15