Beruflich Dokumente
Kultur Dokumente
Lenguaje de Programación
Unidad 3
Control del Flujo del
Programa en C
También se presentarán las instrucciones que nos permiten repetir una porción de código
hasta que cierta condición se cumple.
Las estructuras selectivas permiten tomar decisiones que son especificadas por medio de
expresiones lógicas. Estas expresiones lógicas utilizadas en las estructuras selectivas se
conocen como condiciones, y dependiendo del resultado de su evaluación se ejecutan
un conjunto con instrucciones (Martín Quetglás, Toledo Lobo & Cerverón Lleó, 1995).
Los tipos de estructuras selectivas son:
• Selectiva simple
• Selectiva doble
• Selectiva múltiple
2
diagrama de flujo de esta estructura se presentan en la figura 1. En esta figura se puede
observar que el comportamiento de esta estructura es el siguiente: “Sólo si la condición
es verdadera, se ejecutarán las acciones Acción_SI1, Acción_SI2…, Acción_SIn. Si la con-
dición es falsa, continuará el algoritmo ejecutando la instrucción a la que apunte la flecha
de falso, o las instrucciones que se encuentren después del fin de la estructura”.
(a) (b)
Fin_si Acción_SI2
Acción_SIn
(a) (b)
Figura 1. (a) Pseudocódigo y (b) diagrama de flujo de la selec-
tiva simple. Fuente: Joyanes Aguilar (2007).
En la figura 2 se (condición)
Si presenta entoncesde un algoritmo que
un ejemplo utiliza una estructura
verdadero
condición
selectiva
falso
simple para escribir Acciones_SI
un mensaje cuando un número dado es positivo.
Sino
Acciones_SINO Acciones_ SI Acciones_ SINO
Fin_si
3
4
Figura 2. Algoritmo que utiliza una estructura selectiva simple para escribir un men-
saje cuando un número dado es positivo. Fuente: Zapata Ospina, 2006.
if (expresión) instrucción;
if (expresión)
{
instrucción1 ;
Instrucción2;
…
InstrucciónN;
}
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
5
if (numero > 0)
printf("El número es positivo");
return 0;
}
6
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
Cada una de ellas incluye un programa prefabricado (librería) del lenguaje C, las primeras
dos incluyen las librerías stdio.h y stdlib.h, que son librerías estándar que casi siempre se
utilizan y aparecen por defecto al iniciar un nuevo proyecto en DevC++.
La directiva a tomar en cuenta es locale.h, una librería que permite utilizar características
del idioma español como acentos y la letra ñ.
La siguiente parte del código contiene la función main, que es la función principal del
programa:
int main(int argc, char *argv[]) {
Todo el código restante se encuentra dentro de las llaves que se abren con esta función
y se cierran al final del código.
La primera instrucción que encontramos dentro de la función main es:
setlocale(LC_ALL, "spanish");
Esta instrucción está incluida en la librería locale.h, y con esto todos los mensajes podrán
utilizar palabras con acento.
El código siguiente declara la variable número, de tipo float, es decir, un número que
acepta puntos decimales:
float numero;
7
Esta instrucción sirve para leer datos del teclado, es decir, el usuario podrá ingresar datos;
en este caso, un número hasta que presione la tecla entrar (Enter).
Esta instrucción indica que la función principal main debe retornar con el valor cero, con
Si (condición) entonces
esto culmina la ejecución del programa. Nótese que al final falsose cierra la llave que empezó
condición
en la función main:
Accion_SI1
} verdadero
Accion _SI2
Acción_ SI1
SelectivaAccion
doble_SIn
Esta estructura permite seleccionar entre dos opciones o alternativas posibles, en fun-
Fin_si
ción del cumplimiento o no de una determinada
Acción_SI2
condición (Joyanes Aguilar, 2007). La
representación en pseudocódigo y diagrama de flujo de esta estructura se presenta en
Acción_SIn
la figura 5. En esta figura se puede observar que el comportamiento de esta estructura
es el siguiente: “Si la condición es verdadera, se ejecutarán las acciones Acciones_SI.
En caso contrario, es decir, cuando la condición es falsa, se ejecutarán las acciones
Acciones_SINO. Después de esta estructura, el algoritmo continuará ejecutando las ins-
trucciones que se encuentren después del fin de la estructura”.
(a) (b)
Acciones_SI
Sino
Acciones_SINO Acciones_ SI Acciones_ SINO
Fin_si
Figura 5. Pseudocódigo y diagrama de flujo de la selectiva doble. Fuente: Joyanes Aguilar (2007).
8
A continuación se presenta un ejemplo de un algoritmo que utiliza una estructura selectiva
doble para mandar un mensaje cuando la calificación es mayor o igual a 6, y otro mensaje
cuando la calificación es menor que 6.
Figura 6. Algoritmo que utiliza una estructura selectiva doble para mandar un mensaje cuan-
do la calificación es mayor o igual a 6, y otro mensaje cuando la calificación es menor que 6.
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
9
setlocale(LC_ALL, "spanish");
float calif;
printf("¿Cuál es la calificación del alumno?\n");
scanf("%f",&calif);
if (calif >= 6)
printf("el alumno aprobó su curso");
else
printf("el alumno reprobó su curso");
return 0;
}
#include <stdio.h>
#include <conio.h>
#include <locale.h>
10
}
else
printf(“No es divisor porque es mayor %d”,Numero2);
return 0;
}
En el programa anterior estamos utilizando el operador módulo: %, el cual divide dos nú-
meros y como resultado regresa el residuo; si el primer número es mayor que el segundo
y el segundo es divisor del primero, el residuo será cero.
3.2. Switch
Selectiva múltiple
Esta estructura se utiliza cuando se necesita decidir entre más de dos opciones. La es-
tructura de decisión múltiple evaluará una expresión que podrá tomar n valores distintos,
1, 2, 3, 4..., n. Según se elija uno de estos valores en la condición, se realizará una de las
n acciones (Joyanes Aguilar, 2007). Es importante mencionar que la expresión a utilizar
en esta estructura puede ser aritmética y regresa un valor entero, o bien, de tipo carácter.
11
Figura 7. Pseudocódigo y diagrama de flujo de la selectiva múltiple.
Ejemplo:
Escribir un algoritmo que despliegue en pantalla el nombre del día laborable correspondiente, dado
un número entre 1 y 5.
Algoritmo DiaSemana
var
entero: dia
INICIO
escribir(‘¿Cuál es el día de la semana?’)
leer(dia)
según_sea (dia) hacer
1: escribir(‘El dia es lunes’)
2: escribir(‘El dia es martes’)
3: escribir(‘El dia es miercoles’)
4: escribir(‘El dia es jueves’)
5: escribir(‘El dia es viernes’)
6 ó 7: escribir(‘Fin de semana’)
otro: escribir(‘Día no válido’)
fin_segun Acción que se ejecutará sino
FIN es un día entre 1 y 5
verd
ader
o
INICIO
12
leer (dia)
Acción que se ejecutará sino
FIN es un día entre 1 y 5
verd
ader
o
INICIO
leer (dia)
expresión
5 6o7
1 2 3 4
escribir(‘El dia escribir(‘El dia escribir(‘El dia escribir(‘El dia escribir(‘El dia escribir(‘Fin de
es lunes’) es martes’) es miercoles’) es jueves’) es viernes’) Semana’)
FIN
Figura 8. Algoritmo que utiliza una estructura selectiva múltiple para escribir un men-
saje con el día de la semana según un número proporcionado por el usuario.
switch (expresión)
{
case constante1: sentencias1;
case constante2: sentencias2;
case constante3: sentencias3;
…
default: sentencias;
}
Permite tomar una decisión múltiple basada en una expresión que puede tomar un núme-
ro de valores constantes enteros o char (los char son un tipo de entero). El valor de expre-
sión se va comparando con las constantes en orden secuencial y una vez que coincide
con una de ellas se ejecutan todas las sentencias (incluidas las de los cases siguientes)
hasta que se encuentra la sentencia break.
13
Esto permite agrupar varios valores constantes que compartan una misma acción. Si no
queremos que pase de un case al siguiente, debemos terminarlo con la sentencia break.
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
14
break;
}
return 0;
}
También conocidas como estructuras de repetición (bucles o ciclos), se utilizan para rea-
lizar varias veces el mismo conjunto de operaciones. Entre ellas se encuentran aquellas
donde la cantidad de repeticiones se conoce a priori y aquellas en las que las repeticiones
se realizan hasta que se cumple una condición lógica dada. En este bloque se verán las
estructuras iterativas: for, while y do-while.
Empezaremos con la estructura for, que permite definir un bucle controlado por un con-
tador, denominado variable de control o de inducción. La sintaxis es:
sentencia_inicial es una expresión que inicializa una variable de control y sólo se ejecuta
una vez antes de evaluar la condición y antes de ejecutar las sentencias.
15
condición es la condición lógica que debe cumplirse para que se ejecuten las sentencias
del bloque. Es decir, la sentencia o sentencias se ejecutan repetidamente mientras expr2
sea verdadera.
int i;
for (i=1; i<=5; i++)
{
printf(“Hola Mundo\n”;
}
En el lenguaje C, las expresiones del for, a diferencia de otros lenguajes, no tienen por
qué ser referidas a enteros, pueden ser expresiones de cualquier tipo.
En el siguiente programa se escribirán a la pantalla los diez dígitos uno en cada línea.
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
return 0;
}
16
En donde el símbolo ¡ representa el factorial de un número. El factorial de cualquier nú-
mero se calcula con la fórmula:
#include <stdio.h>
#include <math.h>
int main()
{
int i,j,factorial,potencia;
float x;
float e;
printf("Introduce el valor de x: ");
scanf("%f",&x);
// Calcula los primero 10 valores para e elevado a x.
e=1.0;
for (i=1;i<=10;i++)
{
//Calcula x elevada a una potencia i
potencia= pow(x,i);
// Calcula el Factorial de i
factorial=1;
for (j=i;j>0;j--)
factorial=factorial*j;
//Acumula el valor de e
e=e+(potencia/(float)factorial);
}
17
printf("El valor de e elevado a x: %f", e);
return 0;
}
Donde la sentencia puede o no existir (sentencia vacía), pero siempre debe existir la con-
dición. El bucle while se ejecuta mientras la condición sea verdad.
En el siguiente ejemplo las dos sentencias dentro de las llaves se ejecutan mientras que
la condición (i<=100) sea verdadera. En este caso, en cada ejecución del bucle la suma
se va acumulando con el resultado anterior, es decir, se suman los primeros 100 números.
int i=1,suma=0;
while (i<=100)
{
suma=suma+i;
i++;
}
Ahora veamos un programa completo que va calculando los números de la serie de Fi-
bonacci y los va imprimiendo a la pantalla. La serie de Fibonacci es la sucesión infinita de
números naturales que comienza con el 0 y el 1; a partir de estos primeros dos elementos,
cada número siguiente se calcula sumando los dos anteriores, dando como resultado la
sucesión infinita:
El programa que calcula la serie de Fibonacci para todos sus elementos menores a 100
sería el siguiente:
18
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
do
sentencia;
while (condición);
El bucle do/while se ejecuta mientras la condición sea verdad. Pero como ya dijimos, la
sentencia se ejecuta al menos una vez.
19
Veamos el siguiente ejemplo:
int i,j;
do
{
scanf(“%d”,&i);
scanf(“%d”,&j);
}
while (i<j);
El ciclo anterior sólo se romperá hasta que el usuario ingrese el primer valor i y éste sea
mayor al segundo valor j.
Ejemplo 1:
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);
}
Ejemplo 2:
int x;
20
for(x=1;x<=100;x++) /* Esta rutina imprime en pantalla los números pares */
{
if (x%2 > 0)
continue;
printf(“%d\n”,x);
}
21