martes, 30 de septiembre de 2014

sentecias for, swit case y if

SENTENCIAS CONDICIONALES
C posee dos sentencias condicionales: if y switch.
Además, el operador ? es una posible alternativa para
if en ciertas situaciones.
Sentencia if

SINTAXIS
if (expresión)
sentencia
o
if (expresión)
sentencia_1
else
sentencia_2

DESCRIPCION
Si expresión es cierta se ejecuta la sentencia
correspondiente al if. Si expresión es falsa se
ejecuta la sentencia correspondiente al else si
lo hay.

En la segunda sintaxis se ejecuta sentencia_1 o
sentencia_2, pero nuna ambas.

EJEMPLOS
if (contador < 50) if (x < y) if (ch == '\n')
contador++; z = x; {
else numero_de_lineas++;
z = y; numero_de_caracteres++;
}

OBSERVACIONES
1) Lo siguiente es incorrecto:
if (expresión)
{
sentecias
};
else
sentencia
puesto que entre el if y el else sólo puede haber
una sentencia y aquí hay dos: { } y ;.
borrar_ventana

2) Al ser la sentencia if una sentencia simple,
la sentencias if se pueden anidar:
/*
a la variable numero_menor se le asigna la
variable con menor valor entre x, y, z
*/
if (x <= y)
if (x <= z)
numero_menor = x;
else
numero_menor = z;
else
if (y <= z)
numero_menor = y;
else
numero_menor = z;
borrar_ventana

3) El else siempre está asociado al if más cercano.
Los dos siguientes ejemplos son distintos:
/* Ejemplo 1: */
if (n > 0)
if (a > b)
z = a;
else
z = b;
/* Ejemplo 2: */
if (n > 0)
{

if (a > b)
z = a;
}
else
z = b;
borrar_ventana

4) Un constructor común en programación es la
escala if-else-if. Tiene la forma siguiente:
if (expresión_1) /* Ejemplo: numero_menor
sentencia_1 toma el valor de la variable
else if (expresión_2) menor entre x, y, z */
sentencia_2 if (x <= y && x <= z)
. numero_menor = x;
. else if (y <= z && y <= z)
. numero_menor = y;
else else
sentencia_n numero_menor = z;
Las condiciones se evalúan de arriba hacia abajo.
Sólo se ejecuta la sentencia correspondiente a la
primera expresión que sea cierta, si la hay. Si
ninguna expresión es cierta, se ejecuta el else final
si existe, sino no se ejecuta ninguna sentencia.
borrar_ventana
5) El operador ? se puede utilizar para reemplazar
las sentencias if-else. Este operador ternario se
ha visto en la lección 2.
/* Ejemplo 1 con if-else */ /* Ejemplo 1 con ?: */
if (x <= y) z = x <= y ? x : y;
z = x;
else
z = y;
/* Ejemplo 2 con if-else */ /* Ejemplo 2 con ?: */
if (n == 1) n == 1 ?
printf ("Mensaje 1"); printf ("Mensaje 1"):
else printf ("Mensaje 2");
printf ("Mensaje 2");
Sentencia switch

FORMA GENERAL
switch (expresión)
{
case expresión_constante_1:
sentencias_1
break;
case expresión_constante_2:
sentencias_2
break;
case expresión_constante_3:
sentencias_3
break;
.
.
.
default:
sentencias_n

DESCRIPCION
En muchas ocasiones es más elegante utilizar
la sentencia switch que la escala
if-else-if.
Una expresión constante es una expresión
en la que todos los operandos son constantes.
El switch evalúa expresión. A continuación
evalúa cada una de las expresiones
constantes hasta que encuentra una que
coincida con expresión. Cuando la encuentra
ejecuta las sentencias correspondientes
a ese case. Si no hay ninguna expresión
case que coincida con expresión, se
ejecuta las sentencias correspondientes
al default.

EJEMPLO
switch (operando)
{
case 1:
x *= y;
break;
case 2:
x /= y;
break;
case 3:
x += y;
break;
case 4:
x -= y;
break;
default:
printf ("ERROR!");
}


OBSERVACIONES
1) La sentencia default es opcional. Si
fallan todas las comprobaciones de los
case y no hay default, no se ejecuta
ninguna acción en el switch. Incluso el
default puede ir en cualquier posición
y no obligatoriamente al final.

2) La sentencia switch se diferencia de
la escala if-else-if en dos cosas:

1§) En la sentencia switch sólo se
puede comprobar la igualdad entre las
expresiones constantes y expresión.



2§) Las expresiones de los case han
de ser constantes.
borrar_ventana

3) Las sentencias break en el switch son
opcionales. El break hace que se produzca
una salida inmediata de la instrucción
switch. Si no hay una sentencia break en
un case, al ejecutarse las sentencias que
corresponden a ese case, también se ejecutarían
las sentencias correspondientes
al siguiente case y así sucesivamente
hasta encontrar un break o llegar al final
del switch. La sentencia break puede
ir en cualquier sitio, no forzosamente
al final de las sentencias de los case.
case 1: /* Ejemplo de case sin break */
x++; /* Después de ejecutarse x++, */
case 2: /* se ejecuta siempre y++ */
y++;
break;
borrar_ventana

4) Asociado a cada case puede haber
ninguna, una o varias sentencias.
case 1: /* case sin sentencias directas*/
case 2: /* case con dos sentencias */
++x;
break;
case 3:
x++;
break;
y++;/*esta sentencia nunca se ejecuta*/
case 4: /* case con tres sentencias */
x++;
y++;
break;

SENTENCIAS ITERATIVAS
Los bucles o sentencias iterativas
permiten que un conjunto de instrucciones
sea ejecutado hasta que
se alcance una cierta condición.
Las sentencias iterativas son:
while, for y do.
Sentencia while
SINTAXIS
while (expresión)
sentencia


DESCRIPCION
Se evalúa expresión. Si es cierta, se ejecuta
sentencia y se vuelve a evaluar expresión. El
ciclo continúa hasta que expresión es falsa,
momento en que la ejecución continúa con lo
que está después de sentencia.
EJEMPLOS
/* /* /*
el bucle termina imprime los cinco pri- al ; del while no
cuando encuentra meros números naturales se llega nunca ya
un carácter dis- */ que el bucle no
to de blanco en i = 1; nace ninguna iteravector
s while (i <= 5) ción.
*/ { */
i = 0; printf ("\ni = %d", i); int condicion = 0;
while (s[i] == ' ') i++; while (condicion)
i++; } ;
Sentencia for

FORMA GENERAL
for (expresión_1; expresión_2; expresión_3)
sentencia

DESCRIPCION
En la sentencia for, a expresión_1 se le llama inicialización, a expresión_2
se le llama condición, y a expresión_3 se le llama incremento.
La forma general descrita de la sentencia for es equivalente a:
expresión_1
while (expresión_2)
{ La forma de actuar del bucle for se observa
sentencia claramente en su equivalente del while.
expresión_3;
}
Las tres expresiones de la sentencia for son opcionales, aunque los puntos y
coma siempre deben aparecer. Si no aparece expresión_2 se asume que es 1.
EJEMPLOS
#include <stdio.h> #include <stdio.h>
void main (void) void main (void)
{ {
printf ("Lista de los 100 primeros" int i, s;

"números naturales:\n); for (s = 0, i = 1; i < 100; i++)
int x; s += i;
for (x = 1; x <= 100; x++) printf ("La suma de los primeros "
printf ("%d ", x); "100 números naturales es %d.",s);
} }
Nota: (s = 0, i = 1) es una expresión, más concretamente, es una expresión
formada por el operador coma, cuyo operandos son expresiones de asignación.

OBSERVACION
La instrucción
for (;;)
sentencia
es un bucle infinito.
Sin embargo, aunque en este bucle no nos podamos
salir por la condición del for, nos podemos salir
por otros medio (por ejemplo, mediante la sentencia
break, que estudiaremos un poco más adelante en
esta misma lección).

No hay comentarios:

Publicar un comentario