La sentencia de control b�sica es if (<e>) then <s> else <t>. En ella se eval�a una expresi�n condicional y si se cumple, se ejecuta la sentencia s; si no, se ejecuta la sentencia t. La segunda parte de la condici�n, else <t>, es opcional.
int cero ( double a )
{
if ( a == 0.0 )
return (TRUE);
else
return (FALSE);
}
En el caso que <e> no sea una expresi�n condicional y sea aritm�tica, se considera falso si vale 0; y si no, verdadero. Hay casos en los que se deben evaluar m�ltiples condiciones y �nicamente se debe evaluar una de ellas.
�Sentencia switch
Se puede programar con un grupo de sentencias if then else anidadas, aunque ello puede ser farragoso y de complicada lectura. Para evitarlo nos puede ayudar la sentencia switch.
Su utilizaci�n es:
switch (valor) {
case valor1: <sentencias>
case valor2: <sentencias>
...
default: <sentencias>
}
Cuando se encuentra una sentencia case que concuerda con el valor del switch se ejecutan las sentencias que le siguen y todas las dem�s a partir de ah�, a no ser que se introduzca una sentencia break para salir de la sentencia switch. Por ejemplo:
ver_opcion ( char c )
{
switch(c){
case 'a': printf("Op A\n");
break;
case 'b': printf("Op B\n");
break;
case 'c':
case 'd': printf("Op C o D\n");
break;
default: printf("Op ?\n");
}
}
�Sentencia while
Otras sentencias de control de flujo son las que nos permiten realizar iteraciones sobre un conjunto de sentencias. En C tenemos tres formas principales de realizar iteraciones. La sentencia while (<e>) <s> es seguramente la m�s utilizada. La sentencia, o grupo de sentencias <s> se ejecuta mientras la evaluaci�n de la expresi�n <e> sea verdadera.
long raiz ( long valor )
{
long r = 1;
while ( r * r <= valor )
r++;
return r;
}
Una variaci�n de la sentencia while es: do <s> while ( <e> ); En ella la sentencia se ejecuta al menos una vez, antes de que se eval�e la expresi�n condicional.
�Sentencia for
Otra sentencia iterativa, que permite inicializar los controles del bucle es la sentencia for ( <i>; <e>; <p> ) <s>. La sentencia for se puede escribir tambi�n como:
<i>;
while ( <e> ) {
<s>;
<p>;
}
El ejemplo anterior se podr�a escribir como:
long raiz ( long valor )
{
long r;
for ( r = 1; r * r <= valor; r++ );
return r;
}
�break y continue
Otras sentencias interesantes, aunque menos utilizadas son break y continue. break provoca que se termine la ejecuci�n de una iteraci�n o para salir de la sentencia switch, como ya hemos visto. En cambio, continue provoca que se comience una nueva iteraci�n, evalu�ndose la expresi�n de control. Veamos dos ejemplos:
void final_countdown (void)
{
int count = 10;
while ( count--> 1 )
{
if ( count == 4 )
start_engines();
if ( status() == WARNING )
break;
printf("%d ", count );
}
if ( count == 0 ){
launch();
printf("Shuttle launched\n");
}
else
{
printf("WARNING condition received.\n");
printf("Count held at T - %d\n", count );
}
}
d2 ()
{
int f;
for ( f = 1; f <= 50; f++ ) {
if ( f % 2 == 0 )
continue;
printf("%d",f );
}
}