Está en la página 1de 18

UNIVERSIDAD NACIONAL EXPERIMENTAL DEL TACHIRA

DEPARTAMENTO DE INGENIERIA INFORMATICA


COMPUTACION I (415102)

2. Instrucciones de control alternativas

2.1. Alternativa doble ( la instrucción if )


En lenguaje C, para escribir una instrucción alternativa doble se utiliza la sintaxis:

if ( <expresión_lógica> )
{
<bloque_de_instrucciones_1>
}
else
{
<bloque_de_instrucciones_2>
}

A la <expresión_lógica> de una instrucción alternativa doble también se le denomina condición.


Para que se ejecute el <bloque_de_instrucciones_1>, la condición tiene que ser verdadera. Por el contrario, si la condición es
falsa, se ejecutará el <bloque_de_instrucciones_2>.
En resumen, una instrucción alternativa doble (o simplemente alternativa doble) permite seleccionar, por medio de una
condición, el siguiente bloque de instrucciones a ejecutar, de entre dos posibles.
Ejemplo: Se quiere escribir un programa que:
1º) Pida por teclado la nota (dato real) de una asignatura.
2º) Muestre por pantalla:

* "APROBADO", en el caso de que la nota sea mayor o igual que 5.


* "SUSPENDIDO", en el caso de que la nota sea menor que 5.

De modo que, por pantalla se verá, por ejemplo:

Introduzca nota (real): 7.5

APROBADO

Otra posibilidad es:

Introduzca nota (real): 3.5

SUSPENDIDO

Cuando un bloque de instrucciones sólo contiene una instrucción, los caracteres abrir llave ({) y cerrar llave (}) son opcionales.
Por tanto, en lenguaje C, para resolver el problema del ejemplo se puede escribir:

#include <stdio.h>

int main()
{
float nota;

printf( "\n Introduzca nota (real): " );


scanf( "%f", &nota );

Recopilación: Ing. Saúl Quintero Resumen Unidad III Página 37


UNIVERSIDAD NACIONAL EXPERIMENTAL DEL TACHIRA
DEPARTAMENTO DE INGENIERIA INFORMATICA
COMPUTACION I (415102)

if ( nota >= 5 )
printf( "\n APROBADO" );
else
printf( "\n SUSPENDIDO" );

return 0;
}

Cuando en el código fuente de un programa existe una condición de la cual depende que a continuación se ejecuten unas
instrucciones u otras, se dice que existe una bifurcación.

2.2. Alternativa múltiple ( la instrucción switch )


Una instrucción alternativa múltiple (o simplemente alternativa múltiple) permite seleccionar, por medio de una expresión, el
siguiente bloque de instrucciones a ejecutar de entre varios posibles. En lenguaje C, para escribir una alternativa múltiple se utiliza la
sintaxis:

switch ( <expresión> )
{
case <expresión_1> : [ <bloque_de_instrucciones_1> ]
[ break; ]
case <expresión_2> : [ <bloque_de_instrucciones_2> ]
[ break; ]
...
case <expresión_n> : [ <bloque_de_instrucciones_n> ]
[ break; ]
[ default : <bloque_de_instrucciones_n+1> ]
}

El resultado de evaluar la <expresión> debe ser un valor perteneciente a un tipo de dato finito y ordenado, es decir, entero,
lógico, carácter, enumerado o subrango.
Dependiendo del valor obtenido al evaluar la <expresión>, se ejecutará un bloque de instrucciones u otro.
Opcionalmente, se puede escribir un <bloque_de_instrucciones_n+1> después de default :. Este bloque de instrucciones se
ejecutará en el caso de que el valor obtenido al evaluar la <expresión>, no se encuentre en ninguna de las expresiones después de cada
case.
Ejemplo 1: Se quiere escribir un programa que:
1º) Pida por teclado el número (dato entero) de un día de la semana.
2º) Muestre por pantalla el nombre (dato cadena) correspondiente a dicho día.

Nota: Si el número de día introducido es menor que 1 ó mayor que 7, se mostrará el mensaje:
"ERROR: Día incorrecto.".

En pantalla:

Introduzca dia de la semana: 2

Martes

Introduzca dia de la semana: 9

ERROR: Dia incorrecto.

Solución propuesta:

Recopilación: Ing. Saúl Quintero Resumen Unidad III Página 38


UNIVERSIDAD NACIONAL EXPERIMENTAL DEL TACHIRA
DEPARTAMENTO DE INGENIERIA INFORMATICA
COMPUTACION I (415102)

#include <stdio.h>

int main()
{
int dia;

printf( "\n Introduzca dia de la semana: " );


scanf( "%d", &dia );

switch ( dia )
{
case 1 : printf( "\n Lunes" );
break;
case 2 : printf( "\n Martes" );
break;
case 3 : printf( "\n Miercoles" );
break;
case 4 : printf( "\n Jueves" );
break;
case 5 : printf( "\n Viernes" );
break;
case 6 : printf( "\n Sabado" );
break;
case 7 : printf( "\n Domingo" );
break;
default : printf( "\n ERROR: Dia incorrecto." );
}

return 0;
}

En la sintaxis de una instrucción alternativa múltiple, obsérvese que, después de cada bloque de instrucciones se puede escribir,
opcionalmente, la instrucción break. Dicha instrucción no se va a estudiar con detenimiento en este apartado, ya que, de momento, basta
con saber que en una instrucción switch, la escribiremos, casi siempre, después de cada bloque de instrucciones, a excepción del último.
Para comprender su funcionamiento, pruebe a ver que ocurre si omite algún break en el código del programa del ejemplo 1.

Estúdiese también el siguiente ejemplo.

Ejemplo 2: En la siguiente tabla se muestran las categorías a las que pertenecen los signos del zodíaco:
Signo Elemento Signo Elemento
1. Aries Fuego 7. Libra Aire
2. Tauro Tierra 8. Escorpio Agua
3. Géminis Aire 9. Sagitario Fuego
4. Cáncer Agua 10. Capricornio Tierra
5. Leo Fuego 11. Acuario Aire
6. Virgo Tierra 12. Piscis Agua

Se quiere escribir un programa que:

1º) Muestre el listado de los signos del zodíaco, con sus números asociados.
2º) Pida por teclado un número (dato entero) asociado a un signo del zodíaco.
3º) Muestre la categoría a la que pertenece el signo del zodíaco seleccionado.

Nota: Si el número introducido por el usuario, no está asociado a ningún signo del zodíaco, se
mostrará el mensaje: "ERROR: <número> no está asociado a ningún signo.".

Recopilación: Ing. Saúl Quintero Resumen Unidad III Página 39


UNIVERSIDAD NACIONAL EXPERIMENTAL DEL TACHIRA
DEPARTAMENTO DE INGENIERIA INFORMATICA
COMPUTACION I (415102)

En pantalla:

Listado de signos del zodiaco:

1. Aries
2. Tauro
3. Geminis
4. Cancer
5. Leo
6. Virgo
7. Libra
8. Escorpio
9. Sagitario
10. Capricornio
11. Acuario
12. Piscis

Introduzca numero de signo: 7

Es un signo de Aire.

Listado de signos del zodiaco:

1. Aries
2. Tauro
3. Geminis
4. Cancer
5. Leo
6. Virgo
7. Libra
8. Escorpio
9. Sagitario
10. Capricornio
12. Acuario
13. Piscis

Introduzca numero de signo: 15

ERROR: 15 no esta asociado a ningun signo.

Una posible solución es:


#include <stdio.h>

int main()
{
int numero;

printf( "\n Listado de signos del zodiaco:" );


printf( "\n\n 1. Aries" );
printf( "\n 2. Tauro" );
printf( "\n 3. Geminis" );
printf( "\n 4. Cancer" );
printf( "\n 5. Leo" );
printf( "\n 6. Virgo" );
printf( "\n 7. Libra" );
printf( "\n 8. Escorpio" );
printf( "\n 9. Sagitario" );
printf( "\n 10. Capricornio" );
printf( "\n 11. Acuario" );
printf( "\n 12. Piscis" );
printf( "\n\n Introduzca numero de signo: " );

scanf( "%d", &numero );

Recopilación: Ing. Saúl Quintero Resumen Unidad III Página 40


UNIVERSIDAD NACIONAL EXPERIMENTAL DEL TACHIRA
DEPARTAMENTO DE INGENIERIA INFORMATICA
COMPUTACION I (415102)

switch ( numero )
{
case 1 :
case 5 :
case 9 : printf( "\n Es un signo de Fuego." );
break;
case 2 :
case 6 :
case 10 : printf( "\n Es un signo de Tierra." );
break;
case 3 :
case 7 :
case 11 : printf( "\n Es un signo de Aire." );
break;
case 4 :
case 8 :
case 12 : printf( "\n Es un signo de Agua." );
break;
default : printf( "\n ERROR: %d no esta asociado a ningun signo.", numero );
}
return 0;
}

Otra solución es:

#include <stdio.h>
#include <string.h>

int main()
{
int numero;
char categoria[7];

printf( "\n Listado de signos del zodiaco:" );


printf( "\n\n 1. Aries" );
printf( "\n 2. Tauro" );
printf( "\n 3. Geminis" );
printf( "\n 4. Cancer" );
printf( "\n 5. Leo" );
printf( "\n 6. Virgo" );
printf( "\n 7. Libra" );
printf( "\n 8. Escorpio" );
printf( "\n 9. Sagitario" );
printf( "\n 10. Capricornio" );
printf( "\n 11. Acuario" );
printf( "\n 12. Piscis" );
printf( "\n\n Introduzca numero de signo: " );

scanf( "%d", &numero );

switch ( numero % 4 )
{
case 1 : strcpy( categoria, "Fuego" );
break;
case 2 : strcpy( categoria, "Tierra" );
break;
case 3 : strcpy( categoria, "Aire" );
break;
case 0 : strcpy( categoria, "Agua" );
}
if ( numero >= 1 && numero <= 12 )
printf( "\n Es un signo de %s.", categoria );
else
printf( "\n ERROR: %d no esta asociado a ningun signo.",
numero );
return 0;
}

Recopilación: Ing. Saúl Quintero Resumen Unidad III Página 41


UNIVERSIDAD NACIONAL EXPERIMENTAL DEL TACHIRA
DEPARTAMENTO DE INGENIERIA INFORMATICA
COMPUTACION I (415102)

En esta segunda solución existen las siguientes diferencias importantes con respecto a la solución anterior:

● En el código se utiliza una alternativa doble (if), además de una alternativa múltiple (switch).
● En la alternativa múltiple no se escribe el <bloque_de_instrucciones_n+1>.
● La <expresión> de la alternativa múltiple es diferente.
● La expresión "\n Es un signo de " sólo se escribe una vez.
● Se ha utilizado una variable más (un array de caracteres): categoria
● Se ha empleado la función strcpy, que, como ya vimos en el apartado 1.8 Operadores y expresiones, está disponible en la
biblioteca estándar de C.

2.3. Anidamiento
Las instrucciones alternativas y repetitivas pueden escribirse una dentro de otra. A este hecho se le conoce como anidamiento.
Las instrucciones alternativas permiten realizar las siguientes combinaciones de anidamiento:

● Doble en doble.
● Doble en simple.
● Doble en múltiple.
● Simple en simple.
● Simple en doble.
● Simple en múltiple.
● Múltiple en múltiple.
● Múltiple en doble.
● Múltiple en simple.

De ellas, vamos a estudiar, como ejemplo, las siguientes combinaciones:

● Doble en doble.
● Múltiple en doble.

a) Alternativa doble en doble

En lenguaje C, para anidar una alternativa doble en otra, se utiliza la sintaxis:

if ( <expresión_lógica_1> )
{

/* Inicio del anidamiento */


if ( <expresión_lógica_2> )
{
<bloque_de_instrucciones_1>
}
else
{
<bloque_de_instrucciones_2>

Recopilación: Ing. Saúl Quintero Resumen Unidad III Página 42


UNIVERSIDAD NACIONAL EXPERIMENTAL DEL TACHIRA
DEPARTAMENTO DE INGENIERIA INFORMATICA
COMPUTACION I (415102)

}
/* Fin del anidamiento */

}
else
{
<bloque_de_instrucciones_3>
}

O también:

if ( <expresión_lógica_1> )
{
<bloque_de_instrucciones_1>
{
else
{

/* Inicio del anidamiento */


if ( <expresión_lógica_2> )
{
<bloque_de_instrucciones_2>
}
else
{
<bloque_de_instrucciones_3>
}
/* Fin del anidamiento */

Ejemplo: Se quiere escribir un programa que:

1º) Pida por teclado la nota (real) de una asignatura.


2º) Muestre por pantalla:
* "APTO", en el caso de que la nota sea mayor o igual que 5 y menor o igual que 10.
* "NO APTO", en el caso de que la nota sea mayor o igual que 0 y menor que 5.
* "ERROR: Nota incorrecta.", en el caso de que la nota sea menor que 0 o mayor que 10.
En pantalla:

Introduzca nota (real): 7.5

APTO

Introduzca nota (real): 12.2

ERROR: Nota incorrecta.

Recopilación: Ing. Saúl Quintero Resumen Unidad III Página 43


UNIVERSIDAD NACIONAL EXPERIMENTAL DEL TACHIRA
DEPARTAMENTO DE INGENIERIA INFORMATICA
COMPUTACION I (415102)

Una solución al problema es:


#include <stdio.h>

int main()
{
float nota;

printf( "\n Introduzca nota (real): " );


scanf( "%f", &nota );

if ( nota >= 5 && nota <= 10 )


printf( "\n APTO" );
else

/* Inicio del anidamiento */


if ( nota >= 0 && nota < 5 )
printf( "\n NO APTO" );
else
printf( "\n ERROR: Nota incorrecta." );
/* Fin del anidamiento */

return 0;
}

Fíjese que, en este caso, se puede prescindir de los caracteres abrir llave ({) y cerrar llave (}) de la sintaxis, ya que, los bloques
de instrucciones sólo contienen una instrucción.
Como se puede observar, el anidamiento de instrucciones alternativas permite ir descartando valores hasta llegar al bloque de
instrucciones que se debe ejecutar.

b) Alternativa múltiple en doble


En lenguaje C, para anidar una alternativa múltiple en una alternativa doble, se utiliza la sintaxis:

if ( <expresión_lógica> )
{

/* Inicio del anidamiento */


switch ( <expresión> )
{
case <expresión_1> : [ <bloque_de_instrucciones_1> ]
[ break; ]
case <expresión_2> : [ <bloque_de_instrucciones_2> ]
[ break; ]
...
case <expresión_n> : [ <bloque_de_instrucciones_n> ]
[ break; ]
[ default : <bloque_de_instrucciones_n+1> ]
}

/* Fin del anidamiento */

}
else
{
<bloque_de_instrucciones_n+2>
}

Ejemplo: Así por ejemplo, el primer ejemplo del apartado 2.3 Alternativa múltiple, también se puede resolver anidando una
alternativa múltiple en una alternativa doble.

Recopilación: Ing. Saúl Quintero Resumen Unidad III Página 44


UNIVERSIDAD NACIONAL EXPERIMENTAL DEL TACHIRA
DEPARTAMENTO DE INGENIERIA INFORMATICA
COMPUTACION I (415102)

#include <stdio.h>

int main()
{
int dia;

printf( "\n Introduzca dia de la semana: " );


scanf( "%d", &dia );

if ( dia >= 1 && dia <= 7 )

/* Sólo si el día es válido, se ejecuta la


instrucción alternativa múltiple */

/* Inicio del anidamiento */


switch ( dia )
{
case 1 : printf( "\n Lunes" );
break;
case 2 : printf( "\n Martes" );
break;
case 3 : printf( "\n Miercoles" );
break;
case 4 : printf( "\n Jueves" );
break;
case 5 : printf( "\n Viernes" );
break;
case 6 : printf( "\n Sabado" );
break;
case 7 : printf( "\n Domingo" );
}
/* Fin del anidamiento */

else
printf( "\n ERROR: Dia incorrecto." );

return 0;
}

Recopilación: Ing. Saúl Quintero Resumen Unidad III Página 45


UNIVERSIDAD NACIONAL EXPERIMENTAL DEL TACHIRA
DEPARTAMENTO DE INGENIERIA INFORMATICA
COMPUTACION I (415102)

3. Instrucciones repetitivas

3.1. Repetitiva mientras ( la instrucción while )


En lenguaje C, para escribir una instrucción repetitiva mientras se utiliza la sintaxis:
while ( <expresión_lógica> )
{
<bloque_de_instrucciones>
}

Cuando el <bloque_de_instrucciones> sólo contiene una instrucción, los caracteres abrir llave ({) y cerrar llave (}) son
opcionales.
Por otra parte, al igual que en las instrucciones alternativas doble y simple, a la <expresión_lógica> de una instrucción
repetitiva while, también se le llama condición.
Para que se ejecute el <bloque_de_instrucciones>, la condición tiene que ser verdadera. Por el contrario, si la condición es falsa,
el <bloque_de_instrucciones> no se ejecuta.
Por tanto, cuando el flujo de un programa llega a un bucle while, existen dos posibilidades:
1. Si la condición se evalúa a falsa, el bloque de instrucciones no se ejecuta, y el bucle while finaliza sin realizar ninguna
iteración.
2. Si la condición se evalúa a verdadera, el bloque de instrucciones sí que se ejecuta y, después, se vuelve a evaluar la
condición, para decidir, de nuevo, si el bloque de instrucciones se vuelve a ejecutar o no. Y así sucesivamente, hasta que, la
condición sea falsa.

El <bloque_de_instrucciones> de un bucle while puede ejecutarse cero o más veces (iteraciones). Si el


<bloque_de_instrucciones> se ejecuta al menos una vez, seguirá ejecutándose repetidamente, mientras que, la condición sea verdadera.
Pero, hay que tener cuidado de que el bucle no sea infinito.
Cuando la condición de un bucle while se evalúa siempre a verdadera, se dice que se ha producido un bucle infinito, ya que, el
programa nunca termina. Un bucle infinito es un error lógico.
Es importante hacer hincapié en el hecho de que, en un bucle while, primero se evalúa la condición y, en el caso de que ésta sea
verdadera, entonces se ejecuta el bloque de instrucciones. Veremos que, en el bucle do...while, el procedimiento es al revés. En él,
primero se ejecuta el bloque de instrucciones y, después, se evalúa la condición.
Para que un bucle while no sea infinito, en el bloque de instrucciones debe ocurrir algo para que la condición deje de ser
verdadera. En la mayoría de los casos, la condición se hace falsa al cambiar el valor de una variable.
En resumen, una instrucción repetitiva while permite ejecutar, repetidamente, (cero o más veces) un bloque de instrucciones,
mientras que, una determinada condición sea verdadera.

Ejemplo 1: Se quiere escribir un programa que muestre por pantalla los primeros diez números naturales:

1 2 3 4 5 6 7 8 9 10

En lenguaje C, para resolver el problema de este ejemplo se puede escribir:


#include <stdio.h>

int main()
{
int contador;

printf( "\n " );

Recopilación: Ing. Saúl Quintero Resumen Unidad III Página 46


UNIVERSIDAD NACIONAL EXPERIMENTAL DEL TACHIRA
DEPARTAMENTO DE INGENIERIA INFORMATICA
COMPUTACION I (415102)

contador = 1; /* Inicialización del contador */


while ( contador <= 10 ) /* Condición */
{
printf( "%d ", contador ); /* Salida */
contador++; /* Incremento del contador */
}

return 0;
}

Ejemplo 2: Se quiere escribir un programa que:

1º) Pida por teclado la nota (dato real) de una asignatura.


2º) En el caso de que la nota sea incorrecta, muestre por pantalla el mensaje:
* "ERROR: Nota incorrecta, debe ser >= 0 y <= 10".
3º) Repita los pasos 1º y 2º, mientras que, la nota introducida sea incorrecta.
4º) Muestre por pantalla:
* "APROBADO", en el caso de que la nota sea mayor o igual que 5.
* "SUSPENDIDO", en el caso de que la nota sea menor que 5.

En pantalla:

Introduzca nota (real): 12.4

ERROR: Nota incorrecta, debe ser >= 0 y <= 10

Introduzca nota (real): -3.3

ERROR: Nota incorrecta, debe ser >= 0 y <= 10

Introduzca nota (real): 8.7

APROBADO

El código propuesto es:


#include <stdio.h>

int main()
{
float nota;

printf( "\n Introduzca nota (real): " );


scanf( "%f", &nota );

/* Si la primera nota introducida por el


usuario es correcta,
el bucle no itera ninguna vez. */

while ( nota < 0 || nota > 10 )


{
printf( "\n ERROR: Nota incorrecta, debe ser >= 0 y <= 10\n" );
printf( "\n Introduzca nota (real): " );
scanf( "%f", &nota );
}

/* Mientras que el usuario introduzca una


nota incorrecta, el bucle iterará.
Y cuando introduzca una nota correcta,
el bucle finalizará. */

if ( nota >= 5 )
printf( "\n APROBADO" );

Recopilación: Ing. Saúl Quintero Resumen Unidad III Página 47


UNIVERSIDAD NACIONAL EXPERIMENTAL DEL TACHIRA
DEPARTAMENTO DE INGENIERIA INFORMATICA
COMPUTACION I (415102)

else
printf( "\n SUSPENDIDO" );

return 0;
}

En el programa, el bucle while se ha usado para validar la nota introducida por el usuario. En programación, es muy frecuente
usar el bucle while para validar (filtrar) datos. Al bucle que se utiliza para validar uno o más datos, también se le conoce como filtro.

3.2. Repetitiva hacer...mientras ( la instrucción do...while )


En lenguaje C, para escribir una instrucción repetitiva hacer...mientras se utiliza la sintaxis:
do
{
<bloque_de_instrucciones>
} while ( <expresión_lógica> );

Cuando el <bloque_de_instrucciones> sólo contiene una instrucción, los caracteres abrir llave ({) y cerrar llave (}) son
opcionales.
Además, como se puede apreciar, la instrucción repetitiva do...while, también hace uso de una condición.
En un bucle do...while, primero se ejecuta el bloque de instrucciones y, después, se evalúa la condición. En el caso de que ésta
sea verdadera, se vuelve a ejecutar el bloque de instrucciones. Y así sucesivamente, hasta que, la condición sea falsa.
Por consiguiente, cuando el flujo de un programa llega a un bucle do...while, existen dos posibilidades:
1. Se ejecuta el bloque de instrucciones y, después, si la condición se evalúa a falsa, el bloque de instrucciones no se vuelve a
ejecutar, de manera que, el bucle do...while finaliza, habiendo realizado una sola iteración.
2. Se ejecuta el bloque de instrucciones y, a continuación, si la condición se evalúa a verdadera, el bloque de instrucciones se
vuelve a ejecutar. Y así sucesivamente, hasta que la condición sea falsa.

El <bloque_de_instrucciones> de un bucle do...while puede ejecutarse una o más veces (iteraciones). También hay que prevenir
que el bucle no sea infinito.
En resumen, una instrucción repetitiva do...while permite ejecutar repetidamente (una o más veces) un bloque de instrucciones,
mientras que, una determinada condición sea verdadera.

Ejemplo 1: De modo que, utilizando un bucle do...while, el problema del ejemplo 1 del apartado anterior, 3.1 Repetitiva
mientras, se puede resolver con el código:

#include <stdio.h>

int main()
{
int contador;

printf( "\n " );

contador = 1; /* Inicialización del contador */


do
{
printf( "%d ", contador ); /* Salida */
contador++; /* Incremento */
} while ( contador <= 10 ); /* Condición */

return 0;
}

Recopilación: Ing. Saúl Quintero Resumen Unidad III Página 48


UNIVERSIDAD NACIONAL EXPERIMENTAL DEL TACHIRA
DEPARTAMENTO DE INGENIERIA INFORMATICA
COMPUTACION I (415102)

Como ya se ha dicho, el bucle do...while puede iterar una o más veces, por tanto, cuando un bloque de instrucciones debe iterar
al menos una vez, generalmente, es mejor utilizar un bucle do...while que un bucle while, como por ejemplo, en el siguiente problema.

Ejemplo 2: Se quiere escribir un programa que:


1º) Pida por teclado un número (dato entero).
2º) Pregunte al usuario si desea introducir otro o no.
3º) Repita los pasos 1º y 2º, mientras que, el usuario no responda 'n' de (no).
4º) Muestre por pantalla la suma de los números introducidos por el usuario.

En pantalla:

Introduzca un numero entero: 7

¿Desea introducir otro (s/n)?: s

Introduzca un numero entero: 16

¿Desea introducir otro (s/n)?: s

Introduzca un numero entero: -3

¿Desea introducir otro (s/n)?: n

La suma de los numeros introducidos es: 20

El código propuesto es:

#include <stdio.h>

int main()
{
char seguir;
int acumulador, numero;

/* En acumulador se va a guardar la suma de


los números introducidos por el usuario. */

acumulador = 0;
do
{
printf( "\n Introduzca un numero entero: " );
scanf( "%d", &numero);

acumulador += numero;

printf( "\n Desea introducir otro numero (s/n)?: " );


fflush( stdin );
scanf( "%c", &seguir);
} while ( seguir != 'n' );

/* Mientras que el usuario desee introducir


más números, el bucle iterará. */

printf( "\n La suma de los numeros introducidos es: %d",


acumulador );

return 0;
}

Recopilación: Ing. Saúl Quintero Resumen Unidad III Página 49


UNIVERSIDAD NACIONAL EXPERIMENTAL DEL TACHIRA
DEPARTAMENTO DE INGENIERIA INFORMATICA
COMPUTACION I (415102)

3.3. Repetitiva para ( la instrucción for )


En lenguaje C, para escribir una instrucción repetitiva para se utiliza la sintaxis:
for ( <expresión_1> ; <expresión_2> ; <expresión_3> )
{
<bloque_de_instrucciones>
}

Cuando el <bloque_de_instrucciones> sólo contiene una instrucción, los caracteres abrir llave ({) y cerrar llave (}) son
opcionales.
Por otro lado, el bucle for es ideal usarlo cuando, de antemano, ya se sabe el número de veces (iteraciones) que tiene que
ejecutarse un determinado bloque de instrucciones.
El bucle para es una variante del bucle mientras y, al igual que éste, puede iterar cero o más veces (véase el apartado 10.1
Repetitiva mientras, del Curso de Diseño de Algoritmos). Sin embargo, el bucle for sólo se suele usar cuando se conoce el número
exacto de veces que tiene que iterar el bucle. Éste es el caso del problema planteado en el ejemplo 1 del apartado 3.1 Repetitiva mientras,
en el cual, se sabe de antemano que el bucle tiene que iterar, exactamente, diez veces.

Ejemplo: Por tanto, dicho problema, se puede resolver con una instrucción repetitiva for de la siguiente forma:

#include <stdio.h>

int main()
{
int contador;

printf( "\n " );

for ( contador=1 ; contador<=10 ; contador++ )


printf( "%d ", contador );

return 0;
}

En este caso, <expresión_1>, <expresión_2> y <expresión_3>, se corresponden, respectivamente, con:

● La inicialización de la variable contador,


● La condición de salida del bucle y
● El incremento de la variable contador

de una instrucción repetitiva mientras.

Recopilación: Ing. Saúl Quintero Resumen Unidad III Página 50


UNIVERSIDAD NACIONAL EXPERIMENTAL DEL TACHIRA
DEPARTAMENTO DE INGENIERIA INFORMATICA
COMPUTACION I (415102)

3.4. ¿Cuándo usar un bucle u otro?

En programación, a la hora de elegir un bucle u otro, debemos hacernos la siguiente pregunta:

¿Se conoce, de antemano, el número de veces (iteraciones) que tiene que ejecutarse un determinado bloque de
instrucciones?

Si la respuesta es afirmativa, habitualmente se usa un bucle for. En caso contrario, nos plantearemos la siguiente pregunta:

¿El bloque de instrucciones debe ejecutarse al menos una vez?

En este caso, si la respuesta es afirmativa, generalmente haremos uso de un bucle do...while, y si la respuesta es negativa,
usaremos un bucle while.

3.5. Anidamiento
Al igual que las instrucciones alternativas, las instrucciones repetitivas también se pueden anidar, permitiendo las siguientes
combinaciones de anidamiento:

● while en while
● while en do...while
● while en for
● do...while en do...while
● do...while en for
● do...while en while
● for en for
● for en while
● for en do...while

De ellas, vamos a estudiar, como ejemplo, la combinación:

● for en do...while

Por otro lado, las instrucciones alternativas y repetitivas también se pueden anidar entre sí, permitiendo realizar 18
combinaciones más de anidamiento:

● while en doble
● while en simple
● while en múltiple

● do...while en doble

Recopilación: Ing. Saúl Quintero Resumen Unidad III Página 51


UNIVERSIDAD NACIONAL EXPERIMENTAL DEL TACHIRA
DEPARTAMENTO DE INGENIERIA INFORMATICA
COMPUTACION I (415102)

● do...while en simple
● do...while en múltiple

● for en doble
● for en simple
● for en múltiple

● Doble en while
● Doble en do...while
● Doble en for

● Simple en while
● Simple en do...while
● Simple en for

● Múltiple en while
● Múltiple en do...while
● Múltiple en for

De ellas, vamos a estudiar, como ejemplo, la combinación:

● Simple en for.

a) Bucle for en do...while

En lenguaje C, para anidar un bucle for en un bucle do...while, se utiliza la sintaxis:

do
{

/* Inicio del anidamiento */


for ( <expresión_1> ; <expresión_2> ; <expresión_3> )
{
<bloque_de_instrucciones>
}
/* Fin del anidamiento */

} while ( <expresión_lógica> );

Ejemplo: Se quiere escribir un programa que muestre por pantalla la tabla de multiplicar de un número entero introducido por
el usuario. El proceso debe repetirse mientras que el usuario lo desee:

Recopilación: Ing. Saúl Quintero Resumen Unidad III Página 52


UNIVERSIDAD NACIONAL EXPERIMENTAL DEL TACHIRA
DEPARTAMENTO DE INGENIERIA INFORMATICA
COMPUTACION I (415102)

Introduzca un numero entero: 7

La tabla de multiplicar del 7 es:

7 * 1 = 7
7 * 2 = 14
7 * 3 = 21
7 * 4 = 28
7 * 5 = 35
7 * 6 = 42
7 * 7 = 49
7 * 8 = 56
7 * 9 = 63
7 * 10 = 70

¿Desea ver otra tabla (s/n)?: s

Introduzca un numero entero: -12

La tabla de multiplicar del -12 es:

-12 * 1 = -12
-12 * 2 = -24
-12 * 3 = -36
-12 * 4 = -48
-12 * 5 = -60
-12 * 6 = -72
-12 * 7 = -84
-12 * 8 = -96
-12 * 9 = -108
-12 * 10 = -120

¿Desea ver otra tabla (s/n)?: n

En lenguaje C, para resolver este problema se puede escribir:

#include <stdio.h>

int main()
{
char seguir;
int i, numero;

do
{
printf( "\n Introduzca un numero entero: " );
scanf( "%d", &numero );

printf( "\n La tabla de multiplicar del %d es:\n", numero );

/* Inicio del anidamiento */


for ( i = 1 ; i <= 10 ; i++ )
{
printf( "\n %d * %d = %d",
i, numero, i * numero );
}
/* Fin del anidamiento */

printf( "\n\n Desea ver otra tabla (s/n)?: " );


fflush( stdin );
scanf( "%c", &seguir );

} while ( seguir != 'n' );

return 0;
}

Recopilación: Ing. Saúl Quintero Resumen Unidad III Página 53


UNIVERSIDAD NACIONAL EXPERIMENTAL DEL TACHIRA
DEPARTAMENTO DE INGENIERIA INFORMATICA
COMPUTACION I (415102)

Referencias

Carlos Pes Curso de Lenguaje C. Pseudocodigo CEE. http://www.carlospes.com


EMPEZAR DE CERO A PROGRAMAR EN LENGUAJE C, http://www.carlospes.com/libro_edc_lenguajec/
Consulta en línea 10 de Noviembre de 2008.
Autorizado expresamente por el autor para extraer parte de su material didáctico.

Recopilación: Ing. Saúl Quintero Resumen Unidad III Página 54

También podría gustarte