sábado, 4 de febrero de 2017

Sentencias de control y bucles

Sentencia de control IF



Antes de empezar a explicar las sentencias de control del lenguaje C, conviene explicar los conceptos de verdadero/falso y de sentencia que posee el lenguaje C.
El lenguaje C posee un concepto muy amplio de lo que es verdadero. Para C, cualquier valor que sea distinto de cero es verdadero, siendo por tanto falso solo si el valor cero. Es por ello que una expresión del tipo if(x) será verdad siempre que el valor de la variable x sea distinto de cero, sea cual sea el tipo de la variable x.
El concepto de sentencia en C es igual que el de otros muchos lenguajes. Por sentencia se entiende en C cualquier instrucción simple o bien, cualquier conjunto de instrucciones simples que se encuentren encerradas entre los caracteres { y }, que marcan respectivamente el comienzo y el final de una sentencia.
La forma general de la sentencia if es:


if (condición)  

       sentencia; 
else   
        sentencia;

Siendo el else opcional. Si la condición es verdadera se ejecuta la sentencia asociada al if, en caso de que sea falsa la condición se ejecuta la sentencia asociada al else (si existe el else). Veamos algunos ejemplos de sentencias if:


int a,b;
if (a>b) 

{   
b--;   
a=a+5; 

else 
{   
a++;  
 b=b-5; 

if (b-a!=7)   
b=5;
 

Las sentencias de control if pueden ir anidadas. Un if anidado es una sentencia if que es el objeto de otro if o else. Esta anidación de if/else puede presentar la problemática de decidir que else va asociado a cada if. Considerese el siguiente ejemplo:

if (x)   

    if (y) printf(“1”);
   else printf(“2”);

 
¿A que if se refiere el else?. C soluciona este problema asociando cada else al if más cercano posible y que todavía no tiene ningún else asociado. Es por ello que en este caso el if asociado al else es el if(y). Si queremos que el else este asociado al if(x), deberíamos escribirlo de la siguiente forma:


if (x) 

{   
if (y)      
printf(“1”); 

else   
printf(“2”);

Sentencia de control SWITCH


La forma general de la sentencia switch es:

switch(variable) 

{   
case const1:      
           sentencia;      
break;   
case const2:      
           sentencia;      
break;  
...   
default:      
       sentencia; 
}
Donde variable debe ser de tipo char o int, y donde const1, const2, ..., indican constantes de C del tipo de datos de la variable. Dichas constantes no pueden repetirse dentro del switch. 

El default es opcional y puede no aparecer, así como los break de los case. 
La sentencia switch se ejecuta comparando el valor de la variable con el valor de cada una de las constantes, realizando la comparación desde arriba hacia abajo. 
En caso de que se encuentre una constante cuyo valor coincida con el valor de la variable, se empieza a ejecutar las sentencias hasta encontrar una sentencia break. 
En caso de que no se encuentre ningún valor que coincida, se ejecuta el default (si existe). Veamos algunos ejemplos:

int valor; 

switch(valor) 
{   
case 0: cont++;           
break;   
case 5: cont--;           
break;   
default: 
cont=-10; /* Se ejecuta si valor no es 0 o 5 */ }
char d;




int cont=0; 

switch(d) 
{   
case ‘\r’: cont++; /* Si d es un retorno de carro, se */                      /* ejecuta este cont++ y el siguiente*/                     
 /* al no aparecer un break */  
 case ‘\x1B’: cont++;                
break;   
default: cont=-1; 
}
Las sentencias switch pueden aparecer unas dentro de otras, igual que sucedía con las sentencias if. Veámoslo con un ejemplo:


char d,e; 

switch(d) 
{   
case ‘a’:   
case ‘A’: 
switch(e)             
{                
case ‘1’: d=‘z’;                         
 e=‘+’;                          
break;                
case ‘2’: 
d=‘Z’;                         
e=‘-’;             
}             
break;  
 case ‘b’:   
case ‘B’: 
switch(e)            
 {               
 case ‘0’: d=‘2’;                
default: e=‘+’;            
 } }


Blucle For


La sintaxis del bucle for es:

for(inicialización,condición,incremento) sentencia;



En primer lugar, conviene destacar el hecho de la gran flexibilidad del bucle for de C. En C, el bucle for puede no contener inicialización, condición o incremento, o incluso pueden no existir dos e incluso las tres expresiones del bucle. El bucle for se ejecuta siempre que la condición sea verdadera, es por ello que puede llegar a no ejecutarse.


Veamos algunos ejemplos de bucles for:


int i,suma=0; 
for(i=1;i<=100;i++)   
suma=suma+i;
int i,j;

for(i=0,j=100;j>i;i++,j--) 
{   
printf(“%d\n”,j-i);   
printf(“%d\n”,i-j); 
}
float a=3e10; 

for(;a>2;
a=sqrt(a)) /* sqrt() calcula la raíz cuadrada */   
printf(“%f”,a);
char d; 

for(;getc(stdin)!=’\x1B’; 
/* Bucle que espera hasta que se */                            
/* pulsa la tecla Esc */
char d; 

for(;;) 
{   
d=getc(stdin);   
printf(“%c”,d);   
if (d==‘\x1B’)      
break; }


Como se observa en este último ejemplo, el bucle for no posee ninguna expresión. Para salir de el se usa la sentencia break, dicha sentencia (ya vista junto con la sentencia de control switch) se explicara mas detalladamente con posterioridad.


Bucle While

La sintaxis del bucle while es:

while (condición) sentencia;


Donde la sentencia puede no existir (sentencia vacía), pero siempre debe existir la condición. El bucle while se ejecuta mientras la condición sea verdad. 

Veamos algunos ejemplos de bucles while:
 



 

No hay comentarios.:

Publicar un comentario

Comenta no te cuesta nada