3.1. INTRODUCCIÓN - Hasta aquí: ejecución secuencial de los programas. - Aquí vamos a ver: Lección 3 Sentencias condicionales: if-else y switch-case Sentencias de control Sirven para tomar decisiones sobre qué parte del código se va a ejecutar. Sentencias de control Bucles: while, do-while y for Sirven para repetir la ejecución de partes del código. 3-1 3-2 3.2 SENTENCIAS CONDICIONALES 3.2.1 SENTENCIA if else if (expresión) sentencia 1; - Permite tomar una decisión basándose en el resultado booleano de una expresión. else - Sintaxis: sentencia 2; if (expresión) sentencia 1; Proceso de ejecución: else 1. Se evalúa la expresión. sentencia 2; 2. Si es verdadera (distinta de cero) se ejecuta la sentencia 1. 3. Si es falsa (igual a cero), hay dos posibilidades: expresión Expresión numérica, relacional o lógica. - Si existe la cláusula else: se ejecuta la sentencia 2. sentencias 1 y 2 Sentencias simples o compuestas. - Si no existe else: el programa continua después de la sentencia 1. - La cláusula else es opcional. 3-3 3-4 ANIDAMIENTO DE SENTENCIAS if else if (expresión 1) { if (expresión 2) sentencia 1; else sentencia 2; } else sentencia 3; - Sintaxis: if (expresión 1) { if (expresión 2) sentencia 1; else sentencia 2; } else sentencia 3; expresiones 1 y 2 Expresiones numéricas, relacionales o lógicas. sentencias 1, 2 y 3 Sentencias simples o compuestas. Proceso de ejecución: 1. Se evalúa la expresión 1. 2. Si es verdadera se ejecuta el bloque if-else anidado como antes. 3. Si es falsa, se ejecuta la sentencia 3. - Conviene escribir las sentencias anidadas entre llaves para evitar ambigüedad. - La sentencia anidada también puede ir después de la cláusula else. 3-5 3-6 if (expresión 1) sentencia 1; else if (expresión 2) sentencia 2; else if (expresión 3) sentencia 3; ··· else sentencia n; CONSTRUCCIÓN else if - Sintaxis: if (expresión 1) sentencia 1; else if (expresión 2) sentencia 2; else if (expresión 3) sentencia 3; ··· else sentencia n; Proceso de ejecución: 1. Se evalúa la expresión 1. Si es verdadera se ejecuta la sentencia 1, si es falsa se evalúa la expresión 2. 2. Si la expresión 2 es verdadera, se ejecuta la sentencia 2. Si no lo es, se evalúa la sentencia 3 y así sucesivamente. 3. Si ninguna expresión es verdadera y existe la cláusula else al final, se ejecuta la sentencia n. expresiones 1, 2, .., n-1 Expresiones numéricas, relacionales o lógicas. sentencias 1, 2, …, n 4. Cuando una expresión es verdadera se ejecuta la sentencia asociada y se termina el bloque completo. Sentencias simples o compuestas. 3-7 3-8 switch (expresión) { case expresión-constante 1: sentencia 1; case expresión-constante 2: sentencia 2; ··· default: sentencia n; } 3.2.2 SENTENCIA switch case - Permite tomar una decisión múltiple dependiendo del valor entero de una expresión. - Sintaxis: switch (expresión) { case expresión-constante 1: sentencia 1; case expresión-constante 2: sentencia 2; ··· default: sentencia n; } expresión Expresión entera. expresión-constante 1, 2, .., n-1 Constante o expresión enteras. sentencias 1, 2, .., n Sentencias simples o compuestas. Proceso de ejecución: 1. Se evalúa la expresión. 2. Se compara su valor con las expresiones-constantes. 3. Cuando una expresión-constante coincide con el valor de expresión, se ejecutan todas las sentencias desde ese punto hasta el final del bloque. 4. Si no hay ninguna coincidencia y existe la cláusula default, se ejecuta la sentencia n. - La cláusula default es opcional. 3-9 SENTENCIA break 3-10 3.3 BUCLES - Si durante la ejecución aparece la sentencia break, se termina el bloque switch-case completo. 3.3.1 BUCLE while - Aplicación típica: - Ejecuta una sentencia, simple o compuesta, cero o más veces, dependiendo del resultado booleano de una expresión. - Sintaxis: switch (expresión) { case expresión-constante 1: sentencia 1; break; case expresión-constante 2: sentencia 2; break; ··· default: sentencia n; } while (expresión) sentencia; 3-11 expresión Expresión numérica, relacional o lógica. sentencia Sentencia simple o compuesta. 3-12 3.3.2 BUCLE do while - Ejecuta una sentencia, simple o compuesta, una o más veces, dependiendo del resultado booleano de una expresión. while (expresión) sentencia; - Sintaxis: do sentencia; while (expresión); Proceso de ejecución: 1. Se evalúa la expresión. 2. Si es verdadera (distinta de cero) se ejecuta la sentencia y se vuelve al punto 1. 3. Si es falsa (igual a cero), el programa continua su ejecución después de sentencia. sentencia Sentencia simple o compuesta. expresión Expresión numérica, relacional o lógica. 4. Si la primera vez que se evalúa la expresión es falsa, la sentencia no se ejecuta ni una sola vez. 3-13 3-14 3.3.3 BUCLE for do sentencia; while (expresión); - Ejecuta una sentencia, simple o compuesta, un número determinado de veces (hasta que el resultado booleano de una expresión sea falso). - Sintaxis: for ( expresión 1 ; expresión 2 ; expresión 3 ) sentencia; Proceso de ejecución: 1. Se ejecuta la sentencia y se evalúa la expresión. 2. Si la expresión es verdadera (distinta de cero) se vuelve al punto 1. 3. Si es falsa (igual a cero), el programa continua su ejecución después de expresión. 4. Si la primera vez que se evalúa la expresión es falsa, la sentencia se habrá ejecutado una vez. 3-15 expresión 1 Expresión de inicialización. Inicia las variables de control del bucle. expresión 2 Expresión numérica, relacional o lógica. Si es falsa se acaba el bucle (si se omite, se considera siempre verdadera Æ bucle infinito). expresión 3 Expresión de progresión del bucle. Expresiones separadas por comas que evolucionan en el sentido de que la expresión 2 se convierta en falsa. sentencia Sentencia simple o compuesta. 3-16 3.3.4 BUCLES ANIDADOS for ( expresión 1 ; expresión 2 ; expresión 3 ) sentencia; - Se construyen con un bucle dentro de otro. - Ejemplo: Proceso de ejecución: 1. Se ejecuta la expresión 1. #include <stdio.h> 2. Se evalúa la expresión 2. void main () { int i,j; 3. Si la expresión 2 es verdadera se ejecuta la sentencia, luego la expresión 3, y se vuelve al punto 2. 4. Si la expresión 2 es falsa se interrumpe el bucle. for(i=0;i<=1;i++) for(j=0;j<=1;j++) printf("%d%d\n", i, j); expresión 1; while (expresión 2) { sentencia; expresión3; } } 3-17 3.3.5 SENTENCIA break 3-18 - Con for, el control pasa primero a la expresión 3 y luego a la expresión 2 (booleana). - Cuando se utiliza dentro de un bucle finaliza la ejecución del mismo (si el bucle está anidado sólo finaliza él, pero no los bucles más externos). - Sintaxis: for ( expresión 1 ; expresión 2 ; expresión 3 ) sentencia; break; 3.3.6 SENTENCIA continue - Obliga a ejecutar la siguiente iteración del bucle. - Por tanto, cuando se usa continue, las siguientes construcciones no son equivalentes : expresión 1; while (expresión 2) for ( expresión 1 ; expresión 2 ; expresión 3 ) { sentencia; sentencia; expresión3; } - Sintaxis: continue; - Con while y do, la expresión (booleana) es ejecutada inmediatamente. while (expresión) sentencia; do sentencia; while (expresión); 3-19 3-20