C++ cap 5

Tema 5 - Sentencias de control y bucles.
5.1 - 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”);El lenguaje de programación C
   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”);
5.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;El lenguaje de programación C
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=‘+’;
             }
}
5.3 - Bucle 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;El lenguaje de programación C
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.
5.4 - 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:
int i=1,suma=0;
while (i<=100)
{
   suma=suma+i;
i++;
}
while (getc(stdin)!=‘\x1B’); /* Bucle que espera hasta que se */
                             /* pulse la tecla Esc */
while (1) /* Recordar que en C lo que no es cero es verdad */
{
d=getc(stdin);
printf(“%c”,d);
if (d==‘\x1B’)
      break;
}El lenguaje de programación C
5.5 - Bucle do/while.
Al contrario que los bucles for y while que comprueban la condición en lo alto
de la misma, el bucle do/while comprueba la condición en la parte baja del mismo, lo
cual  provoca  que el  bucle se  ejecute como mínimo una vez.  La sintaxis  del  bucle
do/while es:
do
   sentencia;
while (condición);
El bucle do/while se ejecuta mientras la condición sea verdad. Veamos algunos
ejemplos de bucle do/while:
int num;
do
   scanf(“%d”,&num);
while (num>100);
int i,j;
do
{
scanf(“%d”,&i);
scanf(“%d”,&j);
}
while (i<j);
5.6 - Sentencias de control break y continue  .
Las sentencias de control  break y  continue permiten modificar  y controlar  la
ejecución de los bucles anteriormente descritos.
La sentencia  break provoca  la  salida  del  bucle en el  cual  se encuentra  y la
ejecución de la sentencia que se encuentra a continuación del bucle.
La sentencia continue provoca que el programa vaya directamente a comprobar
la condición del bucle en los bucles while y do/while, o bien, que ejecute el incremento
y después compruebe la condición en el caso del bucle for.
Veamos algunos ejemplos de uso de break y de continue:
int x;
for(x=0;x<10;x++)
{
   for(;;)
      if (getc(stdin)==‘\x1B’)
         break;
   printf(“Salí del bucle infinito, el valor de x es: %d\n”,x);
}
int x;
for(x=1;x<=100;x++) /* Esta rutina imprime en pantalla los */
{                   /*números pares */El lenguaje de programación C
   if (x%2)
      continue;
printf(“%d\n”,x);
}

No hay comentarios.:

Publicar un comentario

!!Clikeaka al espacio cideral!!

THEMRFRIKI S.A. Con tecnología de Blogger.

About