martes, 5 de julio de 2011

Extra: Sentencias


La sentencia For

La sentencia for tiene el siguiente formato: 

for ( expresion1; expresion2; expresion3)sentencia; 

bloque de sentencias }
En donde expresion1 se usa para realizar la inicialización de variables, usando una o varias sentencias, si se usan varias sentencias deberá usarse el operador , para separarlas. Por lo general, establece el valor de la variable de control del ciclo. expresion2 se usa para la condición de terminación del ciclo y expresion3 es el modificador a la variable de control del ciclo cada vez que la computadora lo repite, pero también puede ser más que un incremento.
Por ejemplo:

int X;
main()

{
for( X=3; X>0; X--) {
printf("X=%d\n",X); 
}
}

Lo cual genera la siguiente salida a pantalla ...    X=3 X=2 X=1

La Sentencia While

La sentencia while es otro ciclo o bucle disponible en C. Su formato es: 
while ( expresion) sentencia; 
donde sentencia puede ser una sentencia vacía, una sentencia única o un bloque de sentencias que se repetirán. Cuando el flujo del programa llega a esta instrucción, primero se revisa si la condición es verdad para ejecutar la(s) sentencia(s), y después el ciclo while se repetirá mientras la condición sea verdadera. Cuando llega a ser falsa, el control del programa pasa a la línea que sigue al ciclo.

En el siguiente ejemplo se muetra una rutina de entrada desde el teclado, la cual se cicla mientras no se pulse A:

main()
{
char carac;
     carac = '\0';    while( carac != 'A') carac = getchar();
}


Antes de entrar al ciclo se inicializa la variable carac a nulo. Después pasa a la sentencia whiledonde se comprueba si carac no es igual a 'A', como sea verdad entonces se ejecuta la sentencia del bucle (carac = getchar();). La función getchar() lee el siguiente carácter del flujo estándar (teclado) y lo devuelve, que en nuestro ejemplo es el caracter que haya sido tecleado. Una vez que se ha pulsado una tecla, se asigna a carac y se comprueba la condición nuevamente. Después de pulsar A, la condición llega a ser falsa porque carac es igual a A, con lo que el ciclo termina.
De lo anterior, se tiene que tanto el ciclo for, como el ciclo while comprueban la condición en lo alto del ciclo, por lo que el código dentro del ciclo no se ejecuta siempre.

Como se observa, dentro del ciclo tenemos más de una sentencia, por lo que se requiere usar la llave abierta y la llave cerrada { ... } para que el grupo de sentencias sean tratadas como una unidad.
Como el ciclo while pueda aceptar también expresiones, y no solamente condiciones lo siguiente es válido:
while ( x-- );
while ( x = x + 1 );

Al contrario de los ciclos for y while que comprueban la condición en lo alto del bucle, el bucledo ... while la examina en la parte baja del mismo. Esta característica provoca que un ciclo do ... while siempre se ejecute al menos una vez. La forma general del ciclo es: 


do {
sentencia;
} while (condición);

Aunque no son necesarias las llaves cuando sólo está presente una sentencia, se usan normalmente por legibilidad y para evitar confusión (respecto al lector, y no del compilador) con la sentencia while.
En el siguiente programa se usa un ciclo do ... while para leer números desde el teclado hasta que uno de ellos es menor que o igual a 100:


main()
{
int num;
do 
{
scanf("%d", &num); } while ( num>100 );
}
Otro uso común de la estructura do ... while es una rutina de selección en un menú, ya que siempre se requiere que se ejecute al menos una vez.

main()
{
int opc;
printf("1. Derivadas\n");
do {  
printf("3. Integrales\n);
printf("2. Limites\n");

printf("Teclear una opcion:");
switch(opc)  
scanf("%d", &opc);
case 1:
printf("\tOpcion 1 seleccionada\n\n");  
break;
case 2:
printf("\tOpcion 2 seleccionada\n\n");  
break;  
case 3:
printf("\tOpcion 3 seleccionada\n\n");
break;
default:                
printf("\tOpcion 3 seleccionada\n\n");
break;

}
    } while( opc !=1 &&  opc != 2  &&  opc != 3);
}
Se muestra un ejemplo donde se reescribe usando do ... while uno de los ejemplos ya mostrados.


main()
{
int x=3;
do { 
printf("x = %d\n", x--);
} while( x>0 ) ;}


Uso de Break y Continue


Como se comento uno de los usos de la sentencia break es terminar un case en la sentenciaswitch. Otro uso es forzar la terminación inmediate de un ciclo, saltando la prueba condicional del ciclo.
Cuando se encuentra la sentencia break en un bucle, la computadora termina inmediatamente el ciclo y el control del programa pasa a la siguiente sentecia del ciclo. Por ejemplo:

main()
{
int t;
for(t=0; t<100; t++)
{
printf("%d ", t); if (t==10) break;
}
}
sentencia if-else
La forma general de esta sentencia es:
if (expresion)
        sentencia 1
else
        sentencia 2
\includegraphics[width=8cm]{im/sintaxis/if-else.eps}
  • Si expresion es verdadera (valor distinto de 0), entonces se ejecuta sentencia 1; en caso contrario, se ejecuta sentencia 2.
  • Si las sentencias son compuestas se cierran entre { }.
  • Las sentencias pueden ser a su vez sentencias if-else.
             if (expresion 1)
                  if (expresion 2)
                       S1 
                  else
                      S2
         else
           S3


Un ejemplo de uso de esta sentencia es el siguiente fragmento de programa, que elige el menor de tres números:


float a, b, c, menor;
a=2; b=4; c=1;

if (a < c) if (a < b) {
  
menor = a;
  
else
if (b < c) menor = c;
} else {

= b; else
     menor
        menor = c;
}

No hay comentarios:

Publicar un comentario