- Wiki
- Módulo
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
 
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;
}
 Ejemplo
 Ejemplo
if (edad > 18) { printf("ADULTO"); precioEntrada = 20; }
Estructura de control if-else
 
Se evalúa la expresión lógica contenida entre paréntesis.
- Si es verdadera se ejecuta el bloque de código asociado aif.
- Si es falsa se ejecuta el bloque de código asociado aelse.
Sintaxis
if (expresión_lógica) {
    bloque_instrucciones_1;
} else {
    bloque_instrucciones_2;
}
 Ejemplo
 Ejemplo
if (a > b) { printf("A es mayor que B"); } else { printf("A es menor o igual a B"); }
Estructura de control if anidada
 
- 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;
}
 Ejemplo 1 de código. Programa de condiciones anidadas.
 Ejemplo 1 de código. Programa de condiciones anidadas.
- ejemplo_nido1.c
- #include <stdio.h> int main(void) { int nota; //Variable para almacenar la nota printf("Introduzca una nota numerica para el alumno: (0-10) \n"); scanf("%i", ¬a); if ((nota >= 0) && (nota < 5)) { // Alternativa 1 printf("El alumno ha suspendido \n"); } else if (nota <= 10) { // Alternativa 2 printf("El alumno ha aprobado \n"); } else { // Alternativa por defecto printf("La nota introducida es incorrecta. \n"); printf("Rango valido 0 - 10 \n"); } return 0; } 
 Ejemplo 2 de código. Programa de condiciones anidadas y no anidadas.
 Ejemplo 2 de código. Programa de condiciones anidadas y no anidadas.
- ejemplo_nido2.c
- /* En este ejemplo: * El Bloque 1 y el Bloque 2 son excluyentes: Si se ejecuta uno el otro no. * Los Bloques 3 y 4 son no excluyentes, ejecutándose siempre. */ #include <stdio.h> int main(void) { int num1, num2; printf("Introduzca el valor de los números: num1 y num2 \n"); scanf("%d", &num1); scanf("%d", &num2); if (num1 > num2) { printf("Bloque 1: num1 es mayor que num2 \n"); num2 = num2+10; printf("Bloque 1: Ahora num1 vale %d y num2 vale %d \n", num1, num2); } else if (num2 > num1) { printf("Bloque 2: num2 es mayor que num1 \n"); num1 = num1+10; printf("Bloque 2: Ahora num1 vale %d y num2 vale %d \n", num1, num2); } if (num1 > num2) { printf("Bloque 3: num1 es mayor que num2 \n"); num2 = num2+10; printf("Bloque 3: Ahora num1 vale %d y num2 vale %d \n", num1, num2); } if (num2 > num1) { printf("Bloque 4: num2 es mayor que num1 \n"); num1 = num1+10; printf("Bloque 4: Ahora num1 vale %d y num2 vale %d \n", num1, num2); } return 0; } 
 Ejercicio propuesto
 Ejercicio propuesto
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 num1 y para num2.
 Respuesta
 Respuesta
- En el caso (a),num1debe ser mayor quenum2al menos en 20 unidades. Ejemplo:num1=21ynum2=1.
- En el caso (b),num1debe ser mayor quenum2como mucho en 9 unidades. Ejemplo:num1=21ynum2=20.
Estructura de control switch
 
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 break.
- El efecto de la instrucción es dar por terminada la ejecución de la instrucciónswitch.
- Si se omite la instrucciónbreak, se ejecutarán todas las instrucciones delswitcha partir de ese punto, hasta encontrar una nueva instrucciónbreak.
Bloque default: Si el valor de la variable selectora no coincide con el valor de algún bloque, se ejecuta el bloque por defecto o default si existiese.
 Programa que muestra el nombre de un polígono en función del número de lados, utilizando
   Programa que muestra el nombre de un polígono en función del número de lados, utilizando switch.
- ejemplo_switch1.c
- #include <stdio.h> int main(void) { int numeroLados; //Variable para almacenar el valor scanf("%i", &numeroLados); //Se lee el número de lados switch (numeroLados) { //La variable es el selector case 0: case 1: case 2: //Varios posibles valores agrupados printf("no es un poligono"); break; case 3: printf("triangulo"); break; case 4: printf("rectangulo"); break; case 5: printf("pentagono"); } return 0; } 
 Programa para mostrar si una letra introducida por teclado es una vocal, utilizando
   Programa para mostrar si una letra introducida por teclado es una vocal, utilizando switch.
- ejemplo_switch2.c
- #include <stdio.h> int main(void) { char c; //Se define la variable scanf("%c",&c); // Se lee la variable switch (c) { case 'A': printf("vocal A"); break; case 'E': printf("vocal E"); break; case 'I': printf("vocal I"); break; case 'O': printf("vocal O"); break; case 'U': printf("vocal U"); break; default: //Bloque que se ejecuta si no coincide ningún valor printf("consonante"); } return 0; } 
 Ejercicio propuesto
 Ejercicio propuesto
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.
b) Una posible solución sería:
- ejemplo_switch2b.c
- #include <stdio.h> int main(void) { char c; //Se define la variable scanf("%c",&c); // Se lee la variable switch (c) { case 'a': case 'A': printf ("vocal A"); break; case 'e': case 'E': printf ("vocal E"); break; case 'i': case 'I': printf ("vocal I"); break; case 'o': case 'O': printf ("vocal O"); break; case 'u': case 'U': printf ("vocal U"); break; default: //Bloque que se ejecuta si no coincide ningún valor printf ("consonante"); } return 0; }