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 ); } }