CONTROL DEL FLUJO DE PROGRAMAS


Bloques

Los bloques o proposiciones compuestas son un conjunto de instrucciones o proposiciones sintácticamente equivalentes a una proposición sencilla. Toda instrucción que tenga influencia sobre otra lo hará en la misma forma si la instrucción influenciada fuese un bloque.

Como se planteó en capítulos anteriores, los bloques se definen mediante un juego de llaves ({ y }).

Estructuras de decisión:

Instrucción if ... else

Sintaxis:

if (expresión) sentencia;

if (expresión) sentencia 1; else sentencia 2;

Donde "expresión" es cualquier expresión aritmética o lógica.

Si la expresión da un valor diferente de cero (verdadero) se ejecuta la sentencia inmediata a ésta, de lo contrario, si es cero (falso) se ejecuta, si existe, la sentencia que sigue a la cláusula else.

Ejemplo:

if (a>b) printf ("a es mayor\n");
if (a>b)
{    printf ("a es mayot\n");
     _________
     _________
     _________
}

También se puede:

if (a - b) printf(...;

Con else:

if (a>b && c!=0)
     printf("Resultado 1\n");
else
     printf("Resultado 2\n");


Ciclo Iterativo while

Sintaxis:

while (expresión) sentencia;
while (expresión)
  {   __________
      __________
      __________
      __________
  }

Ejemplo:

Grabar este ejemplo

/*Lectura e impresión de caracteres*/
#include <stdio.h>
void main (void)
{    int c; 	/*Notar que no se define como char
		para no confundir el código ASCII 255 (1111  1111)
		con el valor EOF (1111  1111  1111  1111).*/
     c = getchar ();
     while (c!=EOF)
     {    putchar (c);
          c=getchar ( );
     }
}

La ejecución de este programa se realiza de la siguiente manera:

 

Forma compacta del programa anterior:

Grabar este ejemplo


/*lectura e impresión de caracteres Nº 2*/

#include <stdio.h>
void main (void)
{    int c;
     while ( (c=getchar( ))!= EOF)
         putchar (c);
}

Nota:

La precedencia entre = y != hace necesaria la inclusión de paréntesis en la expresión del while.

Conteo de Caracteres

Grabar este ejemplo

/*cuenta caracteres*/

#include <stdio.h>

void main (void)
{    int NumCar=0;
     while (getchar() != EOF)    ++NumCar;
     printf("Número de caracteres leidos= %d\n" , NumCar);
}

Conteo de Líneas

Grabar este ejemplo

/*cuenta líneas*/

#include <stdio.h>

void main (void)
{    int c, NumLin=0;
     while ((c=getchar()) != EOF)
           if (c =='\n')    ++NumLin;
     printf("Número de Líneas= %d\n", NumLin);
}

Conteo de Palabras

Grabar este ejemplo

/*cuenta palabras*/

#include <stdio.h>

const char BLANCO = 32;
const char TAB    = '\t';
const char EOLN   = '\n';

void  main (void)
 {   int ant= BLANCO, c, NumPal = 0;
     while ( ( c=getchar ( ) )!= EOF)
       {  if ( (ant==BLANCO  || ant==TAB  || ant==EOLN)
               && c!=BLANCO  &&   c!=TAB  &&  c!= EOLN)  ++ NumPal;
         ant = c;
       }
     printf("Número de palabras= %d\n", NumPal);
 }

/*reemplaza los caracteres TAB, ENTER, BLANCOS por un solo BLANCO*/

#include <stdio.h>

const char BLANCO = 32;
const char TAB = '\t';
const char EOLN = '\n';

void main (void)
{   int ant=0 , c;
    while ( (c=getchar ( )) ! = EOF)
    {   if (c!= BLANCO  && c!= TAB  && c!= EOLN)
        {   if (ant==BLANCO || ant==TAB || ant==EOLN) putchar(BLANCO);
            putchar (c);
        }
        ant=c;
    }
}

/*lee Números y los suma - sólo con getchar*/

#include <stdio.h>

const char EOLN='\n';

void main (void)
{    int numero=0, total=0, c;
     while ((c=getchar())!=EOF)
     if (c!=EOLN)
      {  numero *= 10;
         numero += c-'0';
      }
     else
      {  total  += numero;
         numero= 0;
      }
     total += numero;
     printf("_________\n %d \n", total);
}

/*imprime el resultado con putchar*/

{
     ...
     int ...   factor = 1;
     ...
     while ((factor *= 10) <= total);
     while (factor/=10)
     {    putchar (total/factor + '0');
          total %= factor;
     }
     putchar (EOLN);
}

/*lee números y los suma, lo realiza en diferentes bases-sólo
con putchar y getchar*/

#include <stdio.h>
const char EOLN = '\n';

void main (void)
{    int numero = 0,
         total = 0,
         c, bases, factor = 1;
     printf("Ingrese base (dos dígitos p.e. 02  binario):");
     base  = (getchar ( ) -'0')*10;
     base += getchar ( )- '0';
     while ( (c=getchar( ))!=EOF)
     {    if (c!=EOLN)
          {    numero *= base;
               if  (c>='A' && c<= 'Z')
                   numero += c - 'A' + 10;
               else
                   if (c>='a'  && c<='z')
                       numero += c - 'a' + 10;
                   else
                       numero += c - '0';
          }
          else
          {    total += numero;
               numero = 0;
          }
     }
     total += numero;
     while ((factor *= base) <=total);

     while (factor/= base)
     {    c= total/factor;
          putchar (c<10? c+'0': c-10+'A');
          total %= factor;
     }
     putchar (EOLN);
}


Instrucción break

La instrucción break se utiliza sólo en bloques de instrucciones iterativas como en el while, también con las instrucciones for, do y switch que se verán más adelante.

Esta instrucción da por terminada las iteraciones de dicho bloque.

Sintaxis:

break;

Ejemplo:

Grabar este ejemplo

/*promedio de números*/

i=0;
while (i<MAXDAT)
{    scanf("%d", &a);
     if (a == -1) break;
     i++;
     s+=a;
}
prom= s/i;


Instrucción continue

Se usa sólo en bloques interativos. Esta instrucción da por terminado un ciclo de interación.

Sintaxis:

continue;

Ejemplo:

Grabar este ejemplo

/*promedio de los positivos*/

i=0;
while (i<MAXDAT)
{    scanf("%d", &a);
     if (a == -1) break;
     if (a<0) continue;
     i++;
     s+=a;
}

prom= s/i;


Instrucción switch

Es una estructura de selección múltiple, equivalente a la instrucción "CASE" del Pascal.

Sintaxis:

switch (expresión)
  {   case constante : instrucciones;
      case constante : instrucciones;
      ...
      [default : instrucciones;]
  }

Si el valor de la expresión coincide con una de las constantes, entonces se transfiere la ejecución del programa al lugar de la constante, esto es, se continúa el procesamiento a partir de allí. Las constantes sirven como "etiquetas" de salto.

La cláusula "default" es opcional, se utiliza para tratar situaciones en las que el valor de la expresión no coincide con las constantes.

No se pueden repetir las constantes.

Si no se utiliza la cláusula "default" y el valor de la expresión no coincide con las constantes, se continúa con el resto del programa.

Ejemplo:

Grabar este ejemplo

int a;
printf("ingrese un valor :");
scanf("%d", &a);
switch (a)
{    case 1 : printf("uno\n");
     case 2 : printf("dos\n");
     case 3 :
     case 4 :
     case 5 : printf("tres, cuatro, cinco\n");
     case 6 : printf("seis\n");
              break;
     case 7 : printf("siete\n");
     default: printf("otro número\n");
}
...

Si a = 1  se imprime : uno
	               dos
	               tres, cuatro, cinco
	               seis.


Instrucción for

Sintaxis:

for (expr1 ; expr2 ; expr3) instrucción;

Ejemplo:

for (i=0 ; i<n ; i++)
{    printf( ...;
     ...
     ...
}

Inicialmente "i" toma el valor de 0, luego mientras "i" sea menor de "n" se ejecutan las instrucciones printf (...); ..., luego se incrementa i (i++) y se continúa hasta que i=n.

Expr1 y Expr3 pueden ser varias instrucciones separadas por comas.

Ejemplo:

for (i=0, j=n-1; i<j&&!fin; i++, j--)
{    ...
}

Instrucción do

Sintaxis:

  do
      instrucción;
  while (expresión);

Ejemplo:

do
{    printf("Ingrese un valor entre 10 y 50\n");
     scanf( "%d",&a);
} while (a<10 || a>50);



Volver a contenidos AtrásSiguiente
 * Nota:
    - Recuerde que el tamaño del archivo no debe ser mayor a 10 MBytes.
    - Para publicar el sílabo del curso, guárdelo en Word con el nombre silabo.doc (sin tilde) y súbalo a la carpeta ftp.