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:
/*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:
/*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
/*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
/*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
/*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. 02binario):"); 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:
/*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:
/*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:
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);
![]() |
![]() ![]() |
* 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. |