También llamadas de selección o condicionales. Alteran la secuencia de ejecución según el resultado de evaluar una expresión.
Se evalúa la expresión lógica contenida entre paréntesis.
Sintaxis
if (expresión_lógica) { bloque_de_instrucciones; }
Ejemplo
if (edad > 18) { printf("ADULTO"); precioEntrada = 20; }
Se evalúa la expresión lógica contenida entre paréntesis.
if
.else
.Sintaxis
if (expresión_lógica) { bloque_instrucciones_1; } else { bloque_instrucciones_2; }
Ejemplo
if (a > b) { printf("A es mayor que B"); } else { printf("A es menor o igual a B"); }
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.
#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.
/* 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; }
Analiza el funcionamiento del programa del ejemplo 2 anterior e indica las condiciones que se tienen que dar para que:
Pon en cada caso un ejemplo de valor para num1
y para num2
.
Respuesta
num1
debe ser mayor que num2
al menos en 20 unidades. Ejemplo: num1=21
y num2=1
.num1
debe ser mayor que num2
como mucho en 9 unidades. Ejemplo: num1=21
y num2=20
.
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
.
switch
.break
, se ejecutarán todas las instrucciones del switch
a partir de ese punto, hasta encontrar una nueva instrucción break
.
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.
switch
.
#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; }
switch
.
#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; }
Analiza el funcionamiento del programa del ejemplo 2 anterior y contesta:
b) Una posible solución sería:
#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; }