Está en la página 1de 35

¿Qué tipos de instrucciones de control alternativas

existen en C?
Instrucciones de control alternativas que se pueden utilizar en lenguaje
C: doble (if else), simple (if) y múltiple (switch).

¿Para qué sirve la instrucción alternativa doble (if else) en C?


En lenguaje C, para escribir una instrucción alternativa doble (if else) se utiliza la sintaxis:

if ( <expresión_lógica> )
{
<bloque_de_instrucciones_1>
}
else
{
<bloque_de_instrucciones_2>
}

A la <expresión_lógica> de una instrucción alternativa doble (if else) también se le


denomina condición.

Para que se ejecute el <bloque_de_instrucciones_1>, la condición tiene que ser verdadera.


Por el contrario, si la condición es falsa, se ejecutará el <bloque_de_instrucciones_2>.

En resumen, en C una instrucción if else (alternativa doble) permite seleccionar, por medio
de una condición, el siguiente bloque de instrucciones a ejecutar, de entre dos posibles.

Ejemplo: Se quiere escribir un programa que:

1º) Pida por teclado la nota (dato real) de una asignatura.


2º) Muestre por pantalla:

 "APROBADO", en el caso de que la nota sea mayor o igual que 5.


 "SUSPENDIDO", en el caso de que la nota sea menor que 5.

De modo que, por pantalla se verá, por ejemplo:

Introduzca nota (real): 7.5

APROBADO
Otra posibilidad es:

Introduzca nota (real): 3.5

SUSPENDIDO

Cuando un bloque de instrucciones sólo contiene una instrucción, los caracteres abrir llave
({) y cerrar llave (}) son opcionales. Por tanto, en lenguaje C, para resolver el problema del
ejemplo se puede escribir:

#include <stdio.h>

int main()
{
float nota;

printf( "\n Introduzca nota (real): " );


scanf( "%f", &nota );

if ( nota >= 5 )
printf( "\n APROBADO" );
else
printf( "\n SUSPENDIDO" );

return 0;
}

Cuando en el código fuente de un programa existe una condición de la cual depende que a
continuación se ejecuten unas instrucciones u otras, se dice que existe una bifurcación.
Ejercicios Resueltos con la instrucción if else
Resolver con la Instrucción if else

Escribir un programa, en lenguaje C, que:

1º) Pida por teclado dos números (datos enteros).


2º) Calcule la suma de los números introducidos por el usuario.
3º) Muestre por pantalla:

"LA SUMA SÍ ES MAYOR QUE CERO.", en el caso de que sí lo sea.


"LA SUMA NO ES MAYOR QUE CERO.", en el caso de que no lo sea.

En pantalla:
Introduzca primer número (entero): 14
Introduzca segundo número (entero): -17
LA SUMA NO ES MAYOR QUE CERO.

Resuelto con la Instrucción if else

Código fuente del programa:


#include <stdio.h>

int main()
{
int a, b, suma;

printf( "Introduzca primer numero (entero): " );


scanf( "%d", &a );
printf( "Introduzca segundo numero (entero): " );
scanf( "%d", &b );

suma = a + b;

if ( suma > 0 )
printf( "LA SUMA SI ES MAYOR QUE CERO." );
else
printf( "LA SUMA NO ES MAYOR QUE CERO." );

return 0;
}
Una segunda solución es:

#include <stdio.h>

int main()
{
int a, b;

printf( "Introduzca primer numero (entero): " );


scanf( "%d", &a );
printf( "Introduzca segundo numero (entero): " );
scanf( "%d", &b );

if ( a + b > 0 )
printf( "LA SUMA SI ES MAYOR QUE CERO." );
else
printf( "LA SUMA NO ES MAYOR QUE CERO." );

return 0;
}

Ejercicio - Número Intermedio (en C)

Resolver con la Instrucción if else

Escribir un programa, en lenguaje C, que:

1º) Pida por teclado tres números (datos enteros): <numero1>, <numero2> y <numero3>.
2º) Muestre por pantalla:

 "<numero2> SÍ ES MENOR QUE <numero3> Y MAYOR QUE <numero1>", en el


caso de que sí lo sea.
 "<numero2> NO ES MENOR QUE <numero3> Y MAYOR QUE <numero1>", en
el caso de que no lo sea.

En pantalla:
Introduzca primer número (entero): 6
Introduzca segundo número (entero): 9
Introduzca tercer número (entero): 22
9 SÍ ES MENOR QUE 22 Y MAYOR QUE 6

Introduzca primer número (entero): 15


Introduzca segundo número (entero): 7
Introduzca tercer número (entero): 8
7 NO ES MENOR QUE 8 Y MAYOR QUE 15

Resuelto con la Instrucción if else

Código fuente del programa:

#include <stdio.h>

int main()
{
int n1, n2, n3;

printf( "Introduzca primer numero (entero): " );


scanf( "%d", &n1 );
printf( "Introduzca segundo numero (entero): " );
scanf( "%d", &n2 );
printf( "Introduzca tercer numero (entero): " );
scanf( "%d", &n3 );

if ( n2 < n3 && n2 > n1 )


printf( "%d SI ES MENOR QUE %d Y MAYOR QUE %d",
n2, n3, n1 );
else
printf( "%d NO ES MENOR QUE %d Y MAYOR
QUE %d", n2, n3, n1 );

return 0;
}
Otra solución es:

#include <stdio.h>

int main()
{
int n1, n2, n3;

printf( "Introduzca primer numero (entero): " );


scanf( "%d", &n1 );
printf( "Introduzca segundo numero (entero): " );
scanf( "%d", &n2 );
printf( "Introduzca tercer numero (entero): " );
scanf( "%d", &n3 );

printf( "%d", n2 );

if ( n2 < n3 && n2 > n1 )


printf( " SI " );
else
printf( " NO " );

printf( "ES MENOR QUE %d Y MAYOR QUE %d", n3, n1 );

return 0;
}
¿Para qué sirve la instrucción alternativa simple (if) en C?

Una instrucción alternativa simple (if) es una variante (más sencilla) de una instrucción
alternativa doble (if else). En lenguaje C, para escribir una instrucción if se utiliza la
sintaxis:
if ( <expresión_lógica> )
{
<bloque_de_instrucciones>
}

Ejemplo: Se quiere escribir un programa que:

1º) Pida por teclado la nota (dato real) de una asignatura.


2º) Muestre por pantalla:

 "APROBADO", en el caso de que la nota sea mayor o igual que 5.

Introduzca nota (real): 7.5

APROBADO

Obsérvese que, en este problema, no se va a mostrar por pantalla "SUSPENDIDO" en el


caso de que la nota sea menor que 5, como sí se hacía en el ejemplo del apartado anterior
(Instrucción if else).
Introduzca nota (real): 3.5

Al igual que ocurre con una instrucción alternativa doble, cuando el


<bloque_de_instrucciones> de una alternativa simple sólo contiene una instrucción, los
caracteres abrir llave ({) y cerrar llave (}) también son opcionales. De modo que, para
resolver el problema del ejemplo se puede escribir:
#include <stdio.h>

int main()
{
float nota;

printf( "\n Introduzca nota (real): " );


scanf( "%f", &nota );

if ( nota >= 5 )
printf( "\n APROBADO" );

return 0;
}
Resolver con la Instrucción if
Escribir un programa, en lenguaje C, que:

1º) Pida por teclado un número (dato real).


2º) Muestre por pantalla el número introducido, pero, cambiado de signo y, sólo en el caso
de que el número no sea mayor o igual que cero.

En pantalla:

Introduzca número (real): -9.6


9.6

Introduzca número (real): 7.11

Resuelto con la Instrucción if

Código fuente del programa:

#include <stdio.h>

int main()
{
float numero;

printf( "Introduzca numero (real): " );


scanf( "%f", &numero );

if ( numero < 0 )
printf( "%f", -numero );

return 0;
}
Resolver con la Instrucción if

Escribir un programa, en lenguaje C, que:

1º) Pida por teclado dos números (datos enteros).


2º) Muestre por pantalla la media artimética de los números introducidos, pero, sólo en el
caso de que ambos números sean mayores que cero.

En pantalla:
Introduzca primer número (entero): 7
Introduzca segundo número (entero): 10
8.5

Introduzca primer número (entero): 6


Introduzca segundo número (entero): -2

Resuelto con la Instrucción if


Código fuente del programa:

#include <stdio.h>

int main()
{
int a, b;

printf( "Introduzca primer numero (entero): " );


scanf( "%d", &a );
printf( "Introduzca segundo numero (entero): " );
scanf( "%d", &b );

if ( a > 0 && b > 0 )


printf( "%f", ( float ) ( a + b ) / 2 );

return 0;
}
¿Para qué sirve la instrucción alternativa múltiple
(switch) en C?
Una instrucción switch (alternativa múltiple) permite seleccionar, por medio de una
expresión, el siguiente bloque de instrucciones a ejecutar de entre varios posibles. En
lenguaje C, para escribir una instrucción alternativa múltiple (switch) se utiliza la sintaxis:
switch ( <expresión> )
{
case <expresión_1> : [ <bloque_de_instrucciones_1> ]
[ break; ]
case <expresión_2> : [ <bloque_de_instrucciones_2> ]
[ break; ]
...
case <expresión_n> : [ <bloque_de_instrucciones_n> ]
[ break; ]
[ default : <bloque_de_instrucciones_n+1> ]
}

El resultado de evaluar la <expresión> debe ser un valor perteneciente a un tipo de dato


finito y ordenado, es decir, entero, lógico, carácter, enumerado o subrango.

Dependiendo del valor obtenido al evaluar la <expresión>, se ejecutará un bloque de


instrucciones u otro.

Opcionalmente, se puede escribir un <bloque_de_instrucciones_n+1> después de default :.


Este bloque de instrucciones se ejecutará en el caso de que el valor obtenido al evaluar la
<expresión>, no se encuentre en ninguna de las expresiones después de cada case.

Ejemplo 1: Se quiere escribir un programa que:

1º) Pida por teclado el número (dato entero) de un día de la semana.


2º) Muestre por pantalla el nombre (dato cadena) correspondiente a dicho día.

Nota: Si el número de día introducido es menor que 1 ó mayor que 7, se mostrará el


mensaje: "ERROR: Día incorrecto.".

En pantalla se podrá ver algo parecido a:

Introduzca dia de la semana: 2

Martes
O también:

Introduzca dia de la semana: 9

ERROR: Dia incorrecto.

Solución propuesta:

#include <stdio.h>

int main()
{
int dia;

printf( "\n Introduzca dia de la semana: " );


scanf( "%d", &dia );

switch ( dia )
{
case 1 : printf( "\n Lunes" );
break;
case 2 : printf( "\n Martes" );
break;
case 3 : printf( "\n Miercoles" );
break;
case 4 : printf( "\n Jueves" );
break;
case 5 : printf( "\n Viernes" );
break;
case 6 : printf( "\n Sabado" );
break;
case 7 : printf( "\n Domingo" );
break;
default : printf( "\n ERROR: Dia incorrecto." );
}

return 0;
}
En la sintaxis de una instrucción alternativa múltiple, obsérvese que, después de cada
bloque de instrucciones se puede escribir, opcionalmente, la instrucción break.
Dicha instrucción no se va a estudiar con detenimiento en este apartado, ya que, de
momento, basta con saber que en una instrucción switch, la escribiremos, casi siempre,
después de cada bloque de instrucciones, a excepción del último.
Para comprender su funcionamiento, pruebe a ver qué ocurre si omite algún break en el
código del programa del ejemplo 1.

Estúdiese también el siguiente ejemplo.

Ejemplo 2: En la siguiente tabla se muestran las categorías a las que pertenecen los signos
del zodíaco:

Se quiere escribir un programa que:

1º) Muestre el listado de los signos del zodíaco, con sus números asociados.
2º) Pida por teclado un número (dato entero) asociado a un signo del zodíaco.
3º) Muestre la categoría a la que pertenece el signo del zodíaco seleccionado.

Nota: Si el número introducido por el usuario, no está asociado a ningún signo del zodíaco,
se mostrará el mensaje: "ERROR: <número> no está asociado a ningún signo.".

En pantalla veremos:
Listado de signos del zodiaco:

1. Aries
2. Tauro
3. Geminis
4. Cancer
5. Leo
6. Virgo
7. Libra
8. Escorpio
9. Sagitario
10. Capricornio
12. Acuario
13. Piscis

Introduzca numero de signo: 7

Es un signo de Aire.

O también:
Listado de signos del zodiaco:

1. Aries
2. Tauro
3. Geminis
4. Cancer
5. Leo
6. Virgo
7. Libra
8. Escorpio
9. Sagitario
10. Capricornio
12. Acuario
13. Piscis

Introduzca numero de signo: 15

ERROR: 15 no esta asociado a ningun signo.


Una posible solución es:

#include <stdio.h>

int main()
{
int numero;

printf( "\n Listado de signos del zodiaco:" );


printf( "\n\n 1. Aries" );
printf( "\n 2. Tauro" );
printf( "\n 3. Geminis" );
printf( "\n 4. Cancer" );
printf( "\n 5. Leo" );
printf( "\n 6. Virgo" );
printf( "\n 7. Libra" );
printf( "\n 8. Escorpio" );
printf( "\n 9. Sagitario" );
printf( "\n 10. Capricornio" );
printf( "\n 11. Acuario" );
printf( "\n 12. Piscis" );
printf( "\n\n Introduzca numero de signo: " );

scanf( "%d", &numero );

switch ( numero )
{
case 1 :
case 5 :
case 9 : printf( "\n Es un signo de Fuego." );
break;
case 2 :
case 6 :
case 10 : printf( "\n Es un signo de Tierra." );
break;
case 3 :
case 7 :
case 11 : printf( "\n Es un signo de Aire." );
break;
case 4 :
case 8 :
case 12 : printf( "\n Es un signo de Agua." );
break;
default : printf( "\n ERROR: %d no esta asociado a ningun signo.",
numero );
}

return 0;
}

Otra solución es:


#include <stdio.h>
#include <string.h>

int main()
{
int numero;
char categoria[7];

printf( "\n Listado de signos del zodiaco:" );


printf( "\n\n 1. Aries" );
printf( "\n 2. Tauro" );
printf( "\n 3. Geminis" );
printf( "\n 4. Cancer" );
printf( "\n 5. Leo" );
printf( "\n 6. Virgo" );
printf( "\n 7. Libra" );
printf( "\n 8. Escorpio" );
printf( "\n 9. Sagitario" );
printf( "\n 10. Capricornio" );
printf( "\n 11. Acuario" );
printf( "\n 12. Piscis" );
printf( "\n\n Introduzca numero de signo: " );

scanf( "%d", &numero );

switch ( numero % 4 )
{
case 1 : strcpy( categoria, "Fuego" );
break;
case 2 : strcpy( categoria, "Tierra" );
break;
case 3 : strcpy( categoria, "Aire" );
break;
case 0 : strcpy( categoria, "Agua" );
}

if ( numero >= 1 && numero <= 12 )


printf( "\n Es un signo de %s.", categoria );
else
printf( "\n ERROR: %d no esta asociado a ningun signo.",
numero );

return 0;
}

En esta segunda solución existen las siguientes diferencias importantes con respecto a la
solución anterior:

 En el código se utiliza una alternativa doble (if else), además de una alternativa
múltiple (switch).
 En la alternativa múltiple no se escribe el <bloque_de_instrucciones_n+1>.
 La <expresión> de la alternativa múltiple es diferente.
 La expresión "\n Es un signo de " sólo se escribe una vez.
 Se ha utilizado una variable más (un array de caracteres): categoria.
 Se ha empleado la función strcpy, que, como ya vimos en el apartado de Operadores
y expresiones, está disponible en la biblioteca estándar de C.

Resolver con la Instrucción switch


Escribir un programa, en lenguaje C, que:

1º) Pida por teclado el resultado (dato entero) obtenido al lanzar un dado de seis caras.
2º) Muestre por pantalla el número en letras (dato cadena) de la cara opuesta al resultado
obtenido.

Nota 1: En las caras opuestas de un dado de seis caras están los números: 1-6, 2-5 y 3-4.

Nota 2: Si el número del dado introducido es menor que 1 ó mayor que 6, se mostrará el
mensaje: "ERROR: Número incorrecto.".
En pantalla:

Introduzca número del dado: 5


En la cara opuesta está el "dos".

Introduzca número del dado: 8


ERROR: Número incorrecto.

Resuelto con la Instrucción switch


Código fuente del programa:

#include <stdio.h>

int main()
{
int numero;

printf( "Introduzca numero del dado: " );


scanf( "%d", &numero );

switch ( numero )
{
case 1 : printf( "En la cara opuesta esta el \"seis\"." );
break;
case 2 : printf( "En la cara opuesta esta el \"cinco\"." );
break;
case 3 : printf( "En la cara opuesta esta el \"cuatro\"." );
break;
case 4 : printf( "En la cara opuesta esta el \"tres\"." );
break;
case 5 : printf( "En la cara opuesta esta el \"dos\"." );
break;
case 6 : printf( "En la cara opuesta esta el \"uno\"." );
break;
default : printf( "ERROR: Numero incorrecto." );
}

return 0;
}
Una segunda solución es:

#include <stdio.h>
#include <string.h>

int main()
{
char letras[7];
int numero;

printf( "Introduzca numero del dado: " );


scanf( "%d", &numero );

switch ( numero )
{
case 1 : strcpy( letras, "seis" );
break;
case 2 : strcpy( letras, "cinco" );
break;
case 3 : strcpy( letras, "cuatro" );
break;
case 4 : strcpy( letras, "tres" );
break;
case 5 : strcpy( letras, "dos" );
break;
case 6 : strcpy( letras, "uno" );
}

if ( numero >= 1 && numero <= 6 )


printf( "En la cara opuesta esta el \"%s\".", letras );
else
printf( "ERROR: Numero incorrecto." );

return 0;
}
Ejercicio - Habitaciones de una Casa Rural (en C)

Resolver con la Instrucción switch


En la siguiente tabla se muestra el número de camas de las habitaciones de una casa rural,
además de la planta donde está ubicada cada una de ellas:

Escribir un programa, en lenguaje C, que:

1º) Muestre el listado de las habitaciones de la casa rural.


2º) Pida por teclado el número (dato entero) asociado a una habitación.
3º) Muestre por pantalla la planta y el número de camas de la habitación seleccionada.

Nota: Si el número introducido por el usuario, no está asociado a ninguna habitación, se


mostrará el mensaje: "ERROR: <número> no está asociado a ninguna habitación.".

En pantalla:
Listado de habitaciones:

1. Azul
2. Roja
3. Verde
4. Rosa
5. Gris

Introduzca número de habitación: 3


La Verde tiene 3 cama/s y está en la segunda planta.

Listado de habitaciones:

1. Azul
2. Roja
3. Verde
4. Rosa
5. Gris

Introduzca número de habitación: 7


ERROR: 7 no está asociado a ninguna habitación.

Solución del Ejercicio - Habitaciones de una Casa Rural


(en C)

Resuelto con la Instrucción switch

Código fuente del programa:

#include <stdio.h>

int main()
{
int numero;

printf( "Listado de habitaciones:" );


printf( "\n\n1. Azul" );
printf( "\n2. Roja" );
printf( "\n3. Verde" );
printf( "\n4. Rosa" );
printf( "\n5. Gris" );
printf( "\n\nIntroduzca numero de habitacion: " );

scanf( "%d", &numero );

switch ( numero )
{
case 1 : printf( "La Azul tiene 2 cama/s y esta en la primera
planta." );
break;
case 2 : printf( "La Roja tiene 1 cama/s y esta en la primera
planta." );
break;
case 3 : printf( "La Verde tiene 3 cama/s y esta en la segunda
planta." );
break;
case 4 : printf( "La Rosa tiene 2 cama/s y esta en la segunda
planta." );
break;
case 5 : printf( "La Gris tiene 1 cama/s y esta en la tercera planta." );
break;
default : printf( "ERROR: %d no esta asociado a ninguna
habitacion.", numero );
}

return 0;
}

Otra solución es:

#include <string.h>
#include <stdio.h>

int main()
{
char nombre[6], planta[8];
int numero, camas;

printf( "Listado de habitaciones:" );


printf( "\n\n1. Azul" );
printf( "\n2. Roja" );
printf( "\n3. Verde" );
printf( "\n4. Rosa" );
printf( "\n5. Gris" );
printf( "\n\nIntroduzca numero de habitacion: " );

scanf( "%d", &numero );

switch ( numero )
{
case 1 : strcpy( nombre, "Azul" );
camas = 2;
strcpy( planta, "primera" );
break;
case 2 : strcpy( nombre, "Roja" );
camas = 1;
strcpy( planta, "primera" );
break;
case 3 : strcpy( nombre, "Verde" );
camas = 3;
strcpy( planta, "segunda" );
break;
case 4 : strcpy( nombre, "Rosa" );
camas = 2;
strcpy( planta, "segunda" );
break;
case 5 : strcpy( nombre, "Gris" );
camas = 1;
strcpy( planta, "tercera" );
}

if ( numero >= 1 && numero <= 5 )


printf( "La %s tiene %d cama/s y esta en la %s planta.",
nombre, camas, planta );
else
printf( "ERROR: %d no esta asociado a ninguna habitacion.",
numero );

return 0;
}

¿Cómo anidar instrucciones alternativas en C?

En programación, las instrucciones alternativas y repetitivas pueden escribirse una dentro


de otra. A este hecho se le conoce como anidamiento.

En lenguaje C, las instrucciones alternativas permiten realizar las siguientes combinaciones


de anidamiento:

De ellas, vamos a estudiar, como ejemplo, las siguientes combinaciones:


¿Como anidar instrucción if else dentro de otro if else en C?
En lenguaje C, para anidar una instrucción if else en otra (también if else), se utiliza la
sintaxis:

if ( <expresión_lógica_1> )
{

/* Inicio del anidamiento */


if ( <expresión_lógica_2> )
{
<bloque_de_instrucciones_1>
}
else
{
<bloque_de_instrucciones_2>
}
/* Fin del anidamiento */

}
else
{
<bloque_de_instrucciones_3>
}

O también:

if ( <expresión_lógica_1> )
{
<bloque_de_instrucciones_1>
{
else
{

/* Inicio del anidamiento */


if ( <expresión_lógica_2> )
{
<bloque_de_instrucciones_2>
}
else
{
<bloque_de_instrucciones_3>
}
/* Fin del anidamiento */
}

Ejemplo: Se quiere escribir un programa que:

1º) Pida por teclado la nota (real) de una asignatura.


2º) Muestre por pantalla:

 "APTO", en el caso de que la nota sea mayor o igual que 5 y menor o igual que 10.
 "NO APTO", en el caso de que la nota sea mayor o igual que 0 y menor que 5.
 "ERROR: Nota incorrecta.", en el caso de que la nota sea menor que 0 o mayor que
10.

En pantalla se podría ver:

Introduzca nota (real): 7.5

APTO

O por ejemplo:

Introduzca nota (real): 12.2

ERROR: Nota incorrecta.

Una solución al problema es:

#include <stdio.h>

int main()
{
float nota;

printf( "\n Introduzca nota (real): " );


scanf( "%f", &nota );

if ( nota >= 5 && nota <= 10 )


printf( "\n APTO" );
else
/* Inicio del anidamiento */
if ( nota >= 0 && nota < 5 )
printf( "\n NO APTO" );
else
printf( "\n ERROR: Nota incorrecta." );
/* Fin del anidamiento */

return 0;
}

Fíjese que, en este caso, se puede prescindir de los caracteres abrir llave ({) y cerrar llave
(}) de la sintaxis, ya que, los bloques de instrucciones sólo contienen una instrucción.

Como se puede observar, el anidamiento de instrucciones alternativas permite ir


descartando valores hasta llegar al bloque de instrucciones que se debe ejecutar.

¿Cómo anidar instrucción switch dentro de if else en C?

En lenguaje C, para anidar una instrucción switch en if else, se utiliza la sintaxis:


if ( <expresión_lógica> )
{

/* Inicio del anidamiento */


switch ( <expresión> )
{
case <expresión_1> : [ <bloque_de_instrucciones_1> ]
[ break; ]
case <expresión_2> : [ <bloque_de_instrucciones_2> ]
[ break; ]
...
case <expresión_n> : [ <bloque_de_instrucciones_n> ]
[ break; ]
[ default : <bloque_de_instrucciones_n+1> ]
}
/* Fin del anidamiento */

}
else
{
<bloque_de_instrucciones_n+2>
}

Ejemplo: Así por ejemplo, el primer ejemplo del apartado Instrucción switch en C, también
se puede resolver anidando una instrucción switch (alternativa múltiple) en una instrucción
if else (alternativa doble), como se muestra a continuación:
#include <stdio.h>

int main()
{
int dia;

printf( "\n Introduzca dia de la semana: " );


scanf( "%d", &dia );

if ( dia >= 1 && dia <= 7 )

/* Sólo si el día es válido, se ejecuta la


instrucción alternativa múltiple */

/* Inicio del anidamiento */


switch ( dia )
{
case 1 : printf( "\n Lunes" );
break;
case 2 : printf( "\n Martes" );
break;
case 3 : printf( "\n Miercoles" );
break;
case 4 : printf( "\n Jueves" );
break;
case 5 : printf( "\n Viernes" );
break;
case 6 : printf( "\n Sabado" );
break;
case 7 : printf( "\n Domingo" );
}
/* Fin del anidamiento */

else
printf( "\n ERROR: Dia incorrecto." );

return 0;
}
¿Cómo anidar instrucción switch dentro de if else en C?

En lenguaje C, para anidar una instrucción switch en if else, se utiliza la sintaxis:


if ( <expresión_lógica> )
{

/* Inicio del anidamiento */


switch ( <expresión> )
{
case <expresión_1> : [ <bloque_de_instrucciones_1> ]
[ break; ]
case <expresión_2> : [ <bloque_de_instrucciones_2> ]
[ break; ]
...
case <expresión_n> : [ <bloque_de_instrucciones_n> ]
[ break; ]
[ default : <bloque_de_instrucciones_n+1> ]
}
/* Fin del anidamiento */

}
else
{
<bloque_de_instrucciones_n+2>
}

Ejemplo: Así por ejemplo, el primer ejemplo del apartado Instrucción switch en C, también
se puede resolver anidando una instrucción switch (alternativa múltiple) en una instrucción
if else (alternativa doble), como se muestra a continuación:

#include <stdio.h>

int main()
{
int dia;

printf( "\n Introduzca dia de la semana: " );


scanf( "%d", &dia );

if ( dia >= 1 && dia <= 7 )

/* Sólo si el día es válido, se ejecuta la


instrucción alternativa múltiple */

/* Inicio del anidamiento */


switch ( dia )
{
case 1 : printf( "\n Lunes" );
break;
case 2 : printf( "\n Martes" );
break;
case 3 : printf( "\n Miercoles" );
break;
case 4 : printf( "\n Jueves" );
break;
case 5 : printf( "\n Viernes" );
break;
case 6 : printf( "\n Sabado" );
break;
case 7 : printf( "\n Domingo" );
}
/* Fin del anidamiento */

else
printf( "\n ERROR: Dia incorrecto." );

return 0;
}

¿Cómo anidar instrucción switch dentro de if else en C?

En lenguaje C, para anidar una instrucción switch en if else, se utiliza la sintaxis:


if ( <expresión_lógica> )
{

/* Inicio del anidamiento */


switch ( <expresión> )
{
case <expresión_1> : [ <bloque_de_instrucciones_1> ]
[ break; ]
case <expresión_2> : [ <bloque_de_instrucciones_2> ]
[ break; ]
...
case <expresión_n> : [ <bloque_de_instrucciones_n> ]
[ break; ]
[ default : <bloque_de_instrucciones_n+1> ]
}
/* Fin del anidamiento */

}
else
{
<bloque_de_instrucciones_n+2>
}

Ejemplo: Así por ejemplo, el primer ejemplo del apartado Instrucción switch en C, también
se puede resolver anidando una instrucción switch (alternativa múltiple) en una instrucción
if else (alternativa doble), como se muestra a continuación:

#include <stdio.h>

int main()
{
int dia;

printf( "\n Introduzca dia de la semana: " );


scanf( "%d", &dia );

if ( dia >= 1 && dia <= 7 )

/* Sólo si el día es válido, se ejecuta la


instrucción alternativa múltiple */

/* Inicio del anidamiento */


switch ( dia )
{
case 1 : printf( "\n Lunes" );
break;
case 2 : printf( "\n Martes" );
break;
case 3 : printf( "\n Miercoles" );
break;
case 4 : printf( "\n Jueves" );
break;
case 5 : printf( "\n Viernes" );
break;
case 6 : printf( "\n Sabado" );
break;
case 7 : printf( "\n Domingo" );
}
/* Fin del anidamiento */

else
printf( "\n ERROR: Dia incorrecto." );

return 0;
}

Resolver con Anidamiento de Instrucciones Alternativas

Escribir un programa, en lenguaje C, que:

1º) Pida por teclado dos números (datos enteros).


2º) Calcule la suma y multiplicación de ambos números.
3º) Muestre por pantalla:

 "La suma es mayor.", en caso de que sea mayor que la multiplicación de ambos
números.
 "La multpilicación es mayor.", en caso de que sea mayor que la suma de ambos
números.
 "La suma y multiplicación son iguales.", en caso de que así sea.

En pantalla:
Introduzca primer número (entero): -2
Introduzca segundo número (entero): 3
La suma es mayor.

Introduzca primer número (entero): 2


Introduzca segundo número (entero): 2
La suma y multiplicación son iguales.
Resuelto con Anidamiento de Instrucciones Alternativas

Código fuente del programa:

#include <stdio.h>

int main()
{
int a, b, suma, multiplicacion;

printf( "Introduzca primer numero (entero): " );


scanf( "%d", &a );
printf( "Introduzca segundo numero (entero): " );
scanf( "%d", &b );

suma = a + b;
multiplicacion = a * b;

if ( suma > multiplicacion )


printf( "La suma es mayor." );
else

/* Inicio del anidamiento */


if ( multiplicacion > suma )
printf( "La multiplicacion es mayor." );
else
printf( "La suma y multiplicacion son iguales." );
/* Fin del anidamiento */

return 0;
}
Una segunda solución es:

#include <stdio.h>

int main()
{
int a, b;

printf( "Introduzca primer numero (entero): " );


scanf( "%d", &a );
printf( "Introduzca segundo numero (entero): " );
scanf( "%d", &b );

if ( a + b > a * b )
printf( "La suma es mayor." );
else

/* Inicio del anidamiento */


if ( a * b > a + b )
printf( "La multplicacion es mayor." );
else
printf( "La suma y multiplicacion son iguales." );
/* Fin del anidamiento */

return 0;
}
Ejercicio - Número del Dado (en C)

Resolver con Anidamiento de Instrucciones Alternativas

Escribir un programa, en lenguaje C, que resuelva el problema del ejercicio Número del
Dado con switch, anidando una alternativa múltiple (switch) en una alternativa doble (if).

Resuelto con Anidamiento de Instrucciones Alternativas

Código fuente del programa:

#include <stdio.h>

int main()
{
int numero;

printf( "Introduzca numero del dado: " );


scanf( "%d", &numero );

if ( numero >= 1 && numero <= 6 )

/* Sólo si el número es válido, se ejecuta la


instrucción alternativa múltiple */

/* Inicio del anidamiento */


switch ( numero )
{
case 1 : printf( "En la cara opuesta esta el \"seis\"." );
break;
case 2 : printf( "En la cara opuesta esta el \"cinco\"." );
break;
case 3 : printf( "En la cara opuesta esta el \"cuatro\"." );
break;
case 4 : printf( "En la cara opuesta esta el \"tres\"." );
break;
case 5 : printf( "En la cara opuesta esta el \"dos\"." );
break;
case 6 : printf( "En la cara opuesta esta el \"uno\"." );
}
/* Fin del anidamiento */

else
printf( "ERROR: Numero incorrecto." );

return 0;
}

Una segunda solución es:

#include <string.h>
#include <stdio.h>

int main()
{
char letras[7];
int numero;

printf( "Introduzca numero del dado: " );


scanf( "%d", &numero );

if ( numero >= 1 && numero <= 6 )


{
/* Sólo si el número es válido, se ejecuta la
instrucción alternativa múltiple */

/* Inicio del anidamiento */


switch ( numero )
{
case 1 : strcpy( letras, "seis" );
break;
case 2 : strcpy( letras, "cinco" );
break;
case 3 : strcpy( letras, "cuatro" );
break;
case 4 : strcpy( letras, "tres" );
break;
case 5 : strcpy( letras, "dos" );
break;
case 6 : strcpy( letras, "uno" );
}
/* Fin del anidamiento */

printf( "En la cara opuesta esta el \"%s\".", letras );


}
else
printf( "ERROR: Numero incorrecto." );

return 0;
}

También podría gustarte