2 Sentencias de selección
§1 Sinopsis
• if...else .
• else if .
• switch .
Recuerde que de no ser por estas sentencias, el flujo de ejecución del programa estaría
siempre constreñido a la ejecución de sus sentencias en el orden en que están colocadas
en el fuente.
§2 if … else
En su forma abreviada, cuando no existe la cláusula else, esta sentencia permite escoger
entre ejecutar o no una sentencia, en función del resultado de una expresión lógica. En
su forma ampliada, cuando la cláusula else está presente, permite escoger entre dos
opciones alternativas.
§2.1 Sintaxis
if ( <condición> ) <sentencia1>;
[ else <sentencia2>; ]
§2.2 Descripción
<condición> debe ser una expresión relacional ( 4.9.12) que devuelve un valor
lógico, es decir, un bool ( 3.2.1b), y estar obligatoriamente entre paréntesis. Pueden
declararse variables dentro de la <condición>. Por ejemplo, la siguiente es una
sintaxis válida:
val = z ;
else val = y;
if ( expresion ) <sentencia> ;
if (<condicion>) {
<sentencia1>;
else {
<sentencia2>;
§2.3 Ejemplos
Uno sencillo:
Otro ejemplo:
if (a > b)
z = a;
else
z = b;
if (a > b) z = a;
else z = b;
También:
a>b?z=a:z=b;
o mejor aún:
z = (a > b ? a : b);
Otro ejemplo:
Puesto que la cláusula else es opcional, en los if... else anidados podría haber
ambigüedad sobre a qué if corresponde un else; esto se evita asociando el else al if más
interno sin else. Por ejemplo, en los dos trozos de código siguientes, el primero tiene
una indentación que no se corresponde con la realidad lógica del programa.
if ( n > 0 )
if ( a > b )
z = a;
else
z = b;
if ( n > 0 )
if ( a > b )
z = a;
else
z = b;
§3 else if
Estas sentencias no representan en realidad nada nuevo, solo una sucesión de if else
anidados, aunque de uso muy frecuente, por lo que haremos una consideración especial
de este caso.
if ( <expresion1> )
<sentencia1> ;
else if ( <expresion2> )
<sentencia2> ;
else if ( <expresion3> )
<sentencia3> ;
else
<sentencia4> ;
if ( <expresion1> )
<sentencia1> ;
else
if ( <expresion2> )
<sentencia2> ;
else
if ( <expresion3> )
<sentencia3> ;
else
<sentencia4> ;
§4 switch
switch ( <expresion> ) {
[default : <sentenciaD>; ]
§4.2 Descripción
Los valores case y default pueden aparecer en cualquier orden, aunque lo usual es
colocar default al final. Los dos puntos : después de <constX> son imprescindibles.
switch (c - 48) {
case 0: case 1: case 2: case 3: case 4:
case 49: case 53: case 57: case 63: case 69:
cout << "Vocal" << endl;
break;
default:
cout << "Otro carácter" << endl;
}
switch (n) {
case 1: case 10:
int y; // L-3: Ok. no incluye inicialización
cout << "Caso-1" << endl;
break;
case 2:
{
int z = 0; // L-8: Ok. dentro de un bloque
cout << "Caso-2" << endl;
break;
}
case 3:
int x = 3; // L-13: Error-1
cout << "Caso-3" << endl;
break;
case 4: // L-16:
for (int i = 0; i<4; i++) // L-17: Error-2
cout << "Caso-4" << endl;
break;
default: // L-20:
cout << "Resto de casos" << endl;
}