Está en la página 1de 9

Instituto Tecnológico de Toluca

Ingeniería Industrial
Algoritmos y Lenguajes de Programación

4.3 Estructuras selectivas Anidadas

Es aquella estructura que dentro del alcance de una condición tiene otra condición,
en otras palabras, en un if – else se encuentra otro if –else. Cada condición será
evaluada en el orden en el que va apareciendo: si la condición 1 es verdadera se
ejecuta la primera instrucción y ya no se revisan las demás condiciones, de lo
contrario se evalúa la siguiente condición – la 2 – y si ésta es verdadera realizará
su instrucción y así sucesivamente. El else final que contiene la última instrucción
será ejecutado si ninguna de las condiciones anteriores fue verdadera. Esta
estructura es más útil cuando se tienen tres o más opciones.

Es posible utilizar tantos anidamientos como se requiera. Su sintaxis es la siguiente:

if (condición)
instrucción 1;
else
if (condición 2)
instrucción 2;
else
instrucción 3;

Dentro de los bloques del if o del else en una sentencia selectiva simple pueden
utilizarse a su vez sentencias selectivas simples, dando lugar a sentencias
selectivas simples anidadas. En este caso, hay que tener en cuenta que la sentencia
else se asocia siempre al if más cercano.

Por ejemplo, en el siguiente fragmento de código:

if (n > 0)
if (a > b)
z = a;
else
z = b;

el else se asocia a if (a > b). Si quisiéramos que se aplicara al primer if, bastaría
con encerrar entre llaves el segundo if:

1
LSCA. Andrea O. Nájera Avila
Instituto Tecnológico de Toluca
Ingeniería Industrial
Algoritmos y Lenguajes de Programación

if (n > 0)
{
if (a > b)
z = a;
}
else
z = b;

De hecho es muy conveniente, en el caso de sentencias de selección simples


anidadas, encerrar siempre entre llaves los bloques correspondientes a cada una
de las estructuras if y else que aparezcan, para dejar claro el ámbito de cada una
de ellas.

En el caso de utilizar varias estructuras selectivas anidadas anidadas su escritura


puede quedar más clara si se hace de esta forma:

if(expresión1)
sentencia1
else if(expresión2)
sentencia2
else if(expresión3)
sentencia3
else if(expresiónn)
sentenciaN
else
sentenciaN+1

if(precio >= 1000)


descuento = 0.05;
else if(precio < 2000)
descuento = 0.08;
else if(precio < 5000)
descuento = 0.1;
else
descuento = 0.12;

2
LSCA. Andrea O. Nájera Avila
Instituto Tecnológico de Toluca
Ingeniería Industrial
Algoritmos y Lenguajes de Programación

Obsérvese que la estructura no cambia respecto a la sentencia if-else anidada que


aparece más arriba.

Ejemplo 1: Solicita un número entero y determina si el número es positivo, negativo


o igual a cero.

#include <stdio.h>

main()
{
int valor;
printf("Enter a value:");
scanf("%d", &valor);
if (valor < 0)
printf("\nEl valor es negativo\n");
else
if (valor == 0)
printf("\nEl valor es cero\n");
else
printf("\nEl valor es positivo\n");
return 0;
}

En este ejemplo, la estructura condicional después de la primera aparición


de else: if (valor == 0) evalúa por un valor de cero y si es cierto C imprimirá el
mensaje "El valor es cero", el segundo else corresponde a la ocurrencia de un valor
positivo, en este caso no se evalúan más condiciones debido a que luego de haber
evaluado las dos expresiones booleanas, solo queda la opción de que el valor sea
positivo y por lo tanto no es necesario evaluar algo como if (valor>0).

Ejemplo 2: Al recibir el valor ASCII de un carácter, determinar si es un carácter


mayúscula o minúscula o no es un carácter alfabético.

# include <stdio.h>
void main( )
{
char c;
3
LSCA. Andrea O. Nájera Avila
Instituto Tecnológico de Toluca
Ingeniería Industrial
Algoritmos y Lenguajes de Programación

c=getchar( );
if ( ( c>=65 ) && ( c<=90 ) )
printf("Es letra mayuscula\n");
else
{
if ( (c>=97) && (c<=122) )
printf("Es letra minuscula\n");
else
printf("No es un caracter alfabetico\n");
}
}

Ejemplo 3: Resolución de una ecuación de primer grado ax+b = 0

#include <stdio.h>
void main()
{
float a,b;
printf(“Coeficientes de la ecuación ax+b=0:”);
scanf (“%f %f”,&a,&b);
if (a!=0)
{
printf(“La solución es %f”, -b/a);
}
else
{
if (b!=0)
{
printf(“La ecuación no tiene solución.”);
}
else
{
printf(“Solución indeterminada.”);
}
}
}

4
LSCA. Andrea O. Nájera Avila
Instituto Tecnológico de Toluca
Ingeniería Industrial
Algoritmos y Lenguajes de Programación

El if anidado anterior equivale a …

if (a!=0)
{
printf(“La solución es %f”, -b/a);
}
if ((a==0) && (b!=0))
{
printf(“La ecuación no tiene solución.”);
}
if ((a==0) && (b==0))
{
printf(“Solución indeterminada.”);
}

En este caso, se realizarían 5 comparaciones en vez de 2.

El operador condicional ?:
C proporciona una forma de abreviar una sentencia if
Permite incluir una condición dentro de una expresión.

Sintaxis

condición? expresión1: expresión2

“equivale” a

if (condición)
expresión1
else
expresión2

Sólo se evalúa una de las sentencias, por lo que deberemos ser cuidadosos con los
efectos colaterales.

5
LSCA. Andrea O. Nájera Avila
Instituto Tecnológico de Toluca
Ingeniería Industrial
Algoritmos y Lenguajes de Programación

Ejemplos

max = (x>y)? x : y;

min = (x<y)? x : y;

med = (x<y)? ((y<z)? y: ((z<x)? x: z)):


((x<z)? x: ((z<y)? y: z));

4.4 Estructura selectivas Múltiple

Es aquella estructura que permite elegir entre dos o más opciones, switch evalúa
la expresión que se encuentra dentro de los paréntesis y el resultado se compara
con valores alternativos. El switch en la expresión lleva implícito el operador igual
(==), por lo que compara si la expresión es igual a alguna de las opciones. Por lo
tanto no se puede comparar utilizando otro operador relacional.

El tipo de dato de la expresión sólo puede ser entero o carácter, por lo tanto, las
opciones deberán coincidir con el tipo de dato de la expresión. Switch compara el
valor de la expresión con cada una de las opciones en el orden en que se
encuentran. Cada opción se representa con la palabra reservada case, por lo tanto
habrá tantos case como opciones.

Una vez que encuentra la igualdad de la expresión con una opción se realizarán las
instrucciones que están a continuación del case hasta encontrar un break, si no
encuentra ningún valor igual a la expresión, realizará la instrucción asignada al
default, si éste existe.

Se deberá utilizar la palabra reservada break al término de cada case para


interrumpir la estructura y no revisar las siguientes opciones. Como se mencionó
anteriormente, el default se ejecutará cuando la expresión no coincida con ninguna
opción. Sin embargo, será decisión del programador incluirla o no en su programa,
ya que éste es opcional.

La sintaxis es:
6
LSCA. Andrea O. Nájera Avila
Instituto Tecnológico de Toluca
Ingeniería Industrial
Algoritmos y Lenguajes de Programación

switch (expresión)
{
case 1: instrucción 1;
break;
case 2: instrucción 2;
break
.
.
case n: instrucción n;
break;
default: break instrucción n+1;
}

 Se selecciona a partir de la evaluación de una única expresión.


 La expresión del switch ha de ser de tipo entero.
 Los valores de cada caso del switch han de ser constantes.
 La etiqueta default marca el bloque de código que se ejecuta por defecto
(cuando al evaluar la expresión se obtiene un valor no especificado por los
casos del switch).
 En C, se ejecutan todas las sentencias incluidas a partir del caso
correspondiente, salvo que explícitamente usemos break:

Ejemplo 4: Dada una calificación de tipo entera desplegar en pantalla si en base a


la nota el alumno esta Suspenso, Aprobado, Notable, Sobresaliente, o Matrícula.

#include <stdio.h>
void main()
{
int nota;
printf(“Calificación: ”);
scanf(“%d”, &nota);
switch (nota) {
case 0:
case 1:
case 2:
case 3:
case 4: printf(“Suspenso”);
break;

7
LSCA. Andrea O. Nájera Avila
Instituto Tecnológico de Toluca
Ingeniería Industrial
Algoritmos y Lenguajes de Programación

case 5:
case 6: printf(“Aprobado”);
break;
case 7:
case 8: printf(“Notable”);
break;
case 9: printf(“Sobresaliente”);
break;
case 10:printf(“Matrícula”);
break;
default: printf(“Error”);
}
}

Nota: Si trabajamos con datos de tipo real, tendremos que usar sentencias if encadenadas.

Ejemplo 5: Covertir de Kg a otra unidad de medida de masa, mostrar en pantalla un


menú con las opciones posibles.

#include <stdio.h>
#include <stdlib.h>

main()
{
int peso;
printf("Introduzca peso en kilogramos:");
scanf("%d",&peso);
printf("Seleccione opción:\n");
printf("1 - Hectogramos\n");
printf("2 - Decagramos\n");
printf("3 - Gramos\n");
printf("4 - Decigramos\n");
printf("5 - Centigramos\n");
printf("6 - Miligramos\n");
scanf("%d",&opcion);

switch (opcion)
{
case 1: printf("El peso es:%d\n",peso/10);
break;
case 2: printf("El peso es:%d\n",peso/100);

8
LSCA. Andrea O. Nájera Avila
Instituto Tecnológico de Toluca
Ingeniería Industrial
Algoritmos y Lenguajes de Programación

break;
case 3: printf("El peso es:%d\n",peso/1000);
break;
case 4: printf("El peso es:%d\n",peso/10000);
break;
case 5: printf("El peso es:%d\n",peso/100000);
break;
case 6: printf("El peso es:%d\n",peso/1000000);
break;
default: printf("Opción no válida.");
break;
}
system("PAUSE");
}

Referencias

Deitel, Harvey. Cómo programar en C/C++. Pearson Educación. México. 2003.


Joyanes Aguilar, Luis. Fundamentos de programación: algoritmos, estructuras de
datos y objetos. McGraw Hill
María Adriana Corona Nakamura, María de los Angeles Ancona Valdez. Diseño de
Algoritmos y su Codificación en Lenguaje C. 1ra edición Mc Graw Hill, México 2013.
M. Morris Mano, Arquitectura de computadoras, Ed. Prentice Hall
Osvaldo Cairó. Fundamentos de programación Piensa en C. 1ra edición Pearson
Prentice Hall, México 2006.

9
LSCA. Andrea O. Nájera Avila

También podría gustarte