Diferencias
Muestra las diferencias entre dos versiones de la página.
| doc:demo:ud:prg_ejm:inicio [2026/01/16 12:31] – ↷ Página movida de demo:ud:prg_ejm:inicio a doc:demo:ud:prg_ejm:inicio fepg | doc:demo:ud:prg_ejm:inicio [Fecha desconocida] (actual) – editor externo (Fecha desconocida) 127.0.0.1 | ||
|---|---|---|---|
| Línea 1: | Línea 1: | ||
| + | ====== Estructuras de control alternativas ====== | ||
| + | |||
| + | También llamadas de **selección** o **condicionales**. Alteran la secuencia de ejecución según el resultado de evaluar una expresión. | ||
| + | |||
| + | |||
| + | ===== Estructura de control if ===== | ||
| + | |||
| + | < | ||
| + | <col xs=" | ||
| + | **Diagrama de flujo** | ||
| + | |||
| + | {{ doc: | ||
| + | </ | ||
| + | <col xs=" | ||
| + | **Comportamiento** | ||
| + | |||
| + | Se evalúa la expresión lógica contenida entre paréntesis. | ||
| + | * Si es verdadera se ejecutan las sentencias. | ||
| + | * Si es falsa se continua con la siguiente instrucción. | ||
| + | |||
| + | **Sintaxis** | ||
| + | < | ||
| + | if (expresión_lógica) { | ||
| + | bloque_de_instrucciones; | ||
| + | } | ||
| + | </ | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | {{: | ||
| + | |||
| + | <file c> | ||
| + | if (edad > 18) { | ||
| + | | ||
| + | | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | |||
| + | ==== Estructura de control if-else ==== | ||
| + | |||
| + | < | ||
| + | <col xs=" | ||
| + | **Diagrama de flujo** | ||
| + | |||
| + | {{ doc: | ||
| + | </ | ||
| + | <col xs=" | ||
| + | **Comportamiento** | ||
| + | |||
| + | Se evalúa la expresión lógica contenida entre paréntesis. | ||
| + | * Si es verdadera se ejecuta el bloque de código asociado a '' | ||
| + | * Si es falsa se ejecuta el bloque de código asociado a '' | ||
| + | |||
| + | **Sintaxis** | ||
| + | < | ||
| + | if (expresión_lógica) { | ||
| + | bloque_instrucciones_1; | ||
| + | } else { | ||
| + | bloque_instrucciones_2; | ||
| + | } | ||
| + | </ | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | {{: | ||
| + | |||
| + | <file c> | ||
| + | if (a > b) { | ||
| + | | ||
| + | } else { | ||
| + | | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | |||
| + | ==== Estructura de control if anidada ==== | ||
| + | |||
| + | < | ||
| + | <col xs=" | ||
| + | **Diagrama de flujo** | ||
| + | |||
| + | {{ doc: | ||
| + | </ | ||
| + | <col xs=" | ||
| + | **Comportamiento** | ||
| + | * Representan diferentes ejecuciones alternativas y mutuamente exclusivas. | ||
| + | * En caso de que todas las expresiones lógicas sean falsas se ejecutará el último bloque. | ||
| + | |||
| + | **Sintaxis** | ||
| + | < | ||
| + | if (expresión_lógica_1) { | ||
| + | bloque_instrucciones_1; | ||
| + | } else if(expresión_lógica_2){ | ||
| + | bloque_instrucciones_2; | ||
| + | } else { | ||
| + | bloque_instrucciones_3; | ||
| + | } | ||
| + | </ | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | {{: | ||
| + | <file c ejemplo_nido1.c> | ||
| + | #include < | ||
| + | |||
| + | int main(void) { | ||
| + | int nota; //Variable para almacenar la nota | ||
| + | |||
| + | | ||
| + | | ||
| + | |||
| + | if ((nota >= 0) && (nota < 5)) { // Alternativa 1 | ||
| + | printf(" | ||
| + | } else if (nota <= 10) { // Alternativa 2 | ||
| + | printf(" | ||
| + | } else { // Alternativa por defecto | ||
| + | printf(" | ||
| + | printf(" | ||
| + | } | ||
| + | | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | {{: | ||
| + | <file c ejemplo_nido2.c> | ||
| + | /* | ||
| + | En este ejemplo: | ||
| + | * El Bloque 1 y el Bloque 2 son excluyentes: | ||
| + | * Los Bloques 3 y 4 son no excluyentes, | ||
| + | */ | ||
| + | #include < | ||
| + | |||
| + | int main(void) { | ||
| + | int num1, num2; | ||
| + | |||
| + | | ||
| + | | ||
| + | | ||
| + | |||
| + | if (num1 > num2) { | ||
| + | printf(" | ||
| + | num2 = num2+10; | ||
| + | printf(" | ||
| + | } else if (num2 > num1) { | ||
| + | printf(" | ||
| + | num1 = num1+10; | ||
| + | printf(" | ||
| + | } | ||
| + | |||
| + | if (num1 > num2) { | ||
| + | printf(" | ||
| + | num2 = num2+10; | ||
| + | printf(" | ||
| + | } | ||
| + | |||
| + | if (num2 > num1) { | ||
| + | printf(" | ||
| + | num1 = num1+10; | ||
| + | printf(" | ||
| + | } | ||
| + | |||
| + | | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | {{: | ||
| + | |||
| + | Analiza el funcionamiento del programa del ejemplo 2 anterior e indica las condiciones que se tienen que dar para que: | ||
| + | * a) Solo se ejecuten el Bloque1 y el Bloque3. | ||
| + | * b) Solo se ejecuten el Bloque1 y el Bloque4. | ||
| + | Pon en cada caso un ejemplo de valor para '' | ||
| + | |||
| + | {{: | ||
| + | * En el caso (a), '' | ||
| + | * En el caso (b), '' | ||
| + | </ | ||
| + | |||
| + | ===== Estructura de control switch ===== | ||
| + | |||
| + | < | ||
| + | <col xs=" | ||
| + | **Diagrama de flujo** | ||
| + | |||
| + | {{ doc: | ||
| + | </ | ||
| + | <col xs=" | ||
| + | **Comportamiento** | ||
| + | |||
| + | Estructura de selección múltiple a partir de una variable selectora. | ||
| + | |||
| + | **Sintaxis** | ||
| + | < | ||
| + | switch (selector) { | ||
| + | case valor_1: | ||
| + | bloque_instrucciones_1; | ||
| + | break; | ||
| + | case valor_2: | ||
| + | bloque_instrucciones_2; | ||
| + | break; | ||
| + | ... | ||
| + | case valor_n: | ||
| + | bloque_instrucciones_n; | ||
| + | break; | ||
| + | default: | ||
| + | bloque_instrucciones_defecto; | ||
| + | } | ||
| + | </ | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | El **selector** debe ser una variable o expresión de tipo entera, lógica o carácter. No puede ser una expresión real. | ||
| + | |||
| + | Al finalizar cada bloque se debe incluir la instrucción '' | ||
| + | * El efecto de la instrucción es dar por terminada la ejecución de la instrucción '' | ||
| + | * Si se omite la instrucción '' | ||
| + | |||
| + | Bloque '' | ||
| + | |||
| + | {{: | ||
| + | |||
| + | < | ||
| + | <file c ejemplo_switch1.c> | ||
| + | #include < | ||
| + | |||
| + | int main(void) { | ||
| + | int numeroLados; | ||
| + | |||
| + | | ||
| + | |||
| + | | ||
| + | case 0: case 1: case 2: //Varios posibles valores agrupados | ||
| + | | ||
| + | | ||
| + | case 3: | ||
| + | | ||
| + | | ||
| + | case 4: | ||
| + | | ||
| + | | ||
| + | case 5: | ||
| + | | ||
| + | } | ||
| + | |||
| + | | ||
| + | } | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | {{: | ||
| + | |||
| + | < | ||
| + | <file c ejemplo_switch2.c> | ||
| + | #include < | ||
| + | |||
| + | int main(void) { | ||
| + | char c; //Se define la variable | ||
| + | |||
| + | | ||
| + | |||
| + | | ||
| + | case ' | ||
| + | | ||
| + | | ||
| + | case ' | ||
| + | | ||
| + | | ||
| + | case ' | ||
| + | | ||
| + | | ||
| + | case ' | ||
| + | | ||
| + | | ||
| + | case ' | ||
| + | | ||
| + | | ||
| + | default: //Bloque que se ejecuta si no coincide ningún valor | ||
| + | | ||
| + | } | ||
| + | |||
| + | | ||
| + | } | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | {{: | ||
| + | |||
| + | Analiza el funcionamiento del programa del ejemplo 2 anterior y contesta: | ||
| + | * a) Comprueba si funciona para las vocales minúsculas. ¿Porqué?. | ||
| + | * b) Modifica el programa para que funcione tanto para minúsculas como para mayúsculas. | ||
| + | |||
| + | <button collapse=" | ||
| + | |||
| + | < | ||
| + | |||
| + | a) No funciona, pues ' | ||
| + | |||
| + | b) Una posible solución sería: | ||
| + | |||
| + | <file c ejemplo_switch2b.c> | ||
| + | #include < | ||
| + | |||
| + | int main(void) { | ||
| + | char c; //Se define la variable | ||
| + | |||
| + | | ||
| + | |||
| + | | ||
| + | case ' | ||
| + | | ||
| + | | ||
| + | case ' | ||
| + | | ||
| + | | ||
| + | case ' | ||
| + | | ||
| + | | ||
| + | case ' | ||
| + | | ||
| + | | ||
| + | case ' | ||
| + | | ||
| + | | ||
| + | default: //Bloque que se ejecuta si no coincide ningún valor | ||
| + | | ||
| + | } | ||
| + | |||
| + | | ||
| + | } | ||
| + | </ | ||
| + | </ | ||
| + | </ | ||
| + | |||