Sei sulla pagina 1di 21
Semana 2 Lenguaje de Programación Unidad 3 Control del Flujo del Programa en C Material
Semana 2 Lenguaje de Programación Unidad 3 Control del Flujo del Programa en C Material
Semana 2 Lenguaje de Programación Unidad 3 Control del Flujo del Programa en C Material

Semana 2 Lenguaje de Programación

Unidad 3 Control del Flujo del Programa en C

Material compilado con fines académicos, se prohíbe su reproducción total o parcial sin la autorización de cada autor.

3. CONTROL DEL FLUJO DEL PROGRAMA EN C En esta sección presentaremos las instrucciones del

3. CONTROL DEL FLUJO DEL PROGRAMA EN C

En esta sección presentaremos las instrucciones del lenguaje C que nos permiten tomar decisiones con base en el valor lógico de una condición (falso o verdadero), de tal forma que se ejecute una parte de código u otra dependiendo de ese valor.

También se presentarán las instrucciones que nos permiten repetir una porción de código hasta que cierta condición se cumple.

Al incluir las expresiones de decisión y las de repetición (ciclos), ya es posible elaborar programas bastante completos orientados a soluciones de problemas comunes.

3.1. Expresión condicional if-else

En la vida cotidiana, todos los días debemos tomar decisiones basadas en alguna con- dición de la vida real. Por ejemplo, si vamos caminando y la luz del semáforo para los peatones está en rojo, tomamos la decisión de detenernos para no ser atropellados. Esta situación se puede representar de la siguiente forma:

Si (La Luz es igual a ROJO) Nos detenemos; Ponemos atención al cambio de luz;

Si No

Aceleramos el paso; Cruzamos la calle;

Este tipo de decisiones ya fueron analizadas exhaustivamente en la materia Análisis de Algoritmos, de la cual retomaremos algunos segmentos.

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

Estructura selectiva simple Esta estructura ejecuta un conjunto de acciones cuando el resultado de la evaluación de la condición es verdadero (Zapata Ospina, 2006). La representación en pseudocódigo y

2

resultado de la evaluación de la condición es verdadero (Zapata Ospina, 2006). La representación en pseudocódigo
resultado de la evaluación de la condición es verdadero (Zapata Ospina, 2006). La representación en pseudocódigo
resultado de la evaluación de la condición es verdadero (Zapata Ospina, 2006). La representación en pseudocódigo
resultado de la evaluación de la condición es verdadero (Zapata Ospina, 2006). La representación en pseudocódigo
resultado de la evaluación de la condición es verdadero (Zapata Ospina, 2006). La representación en pseudocódigo
resultado de la evaluación de la condición es verdadero (Zapata Ospina, 2006). La representación en pseudocódigo
diagrama de flujo de esta estructura se presentan en la figura 1. En esta figura

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) Si (condición) entonces falso condición Accion_SI1 verdadero Accion _SI2 Acción_ SI1 Accion _SIn
(a)
(b)
Si (condición) entonces
falso
condición
Accion_SI1
verdadero
Accion _SI2
Acción_ SI1
Accion _SIn
Fin_si
Acción SI2
Acción_SIn

Figura 1. (a) Pseudocódigo y (b) diagrama de flujo de la selec- tiva simple. Fuente: Joyanes Aguilar (2007).

En la figura 2 se presenta un ejemplo de un algoritmo que utiliza una estructura selectiva simple para escribir un mensaje cuando un número dado es positivo.

3

de un algoritmo que utiliza una estructura selectiva simple para escribir un mensaje cuando un número
de un algoritmo que utiliza una estructura selectiva simple para escribir un mensaje cuando un número
de un algoritmo que utiliza una estructura selectiva simple para escribir un mensaje cuando un número
de un algoritmo que utiliza una estructura selectiva simple para escribir un mensaje cuando un número
de un algoritmo que utiliza una estructura selectiva simple para escribir un mensaje cuando un número
de un algoritmo que utiliza una estructura selectiva simple para escribir un mensaje cuando un número
4
4

4

4
4
4
4
4
4
Figura 2. Algoritmo que utiliza una estructura selectiva simple para escribir un men- saje cuando
Figura 2. Algoritmo que utiliza una estructura selectiva simple para escribir un men- saje cuando

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.

Ahora nos corresponde “traducir” el algoritmo anterior a código de lenguaje C. En el lenguaje C, la instrucción para evaluar una condición es la instrucción if y su sintaxis es la siguiente:

if (expresión) instrucción;

Si es un bloque de varias sentencias o instrucciones que se deben de ejecutar cuándo la expresión es verdadera, todas las instrucciones deben estar encerradas entre llaves:

if (expresión)

{

instrucción1 ;

Instrucción2;

InstrucciónN;

}

El código del algoritmo de la figura 2 quedaría de la siguiente forma en lenguaje C.

#include <stdio.h> #include <stdlib.h> #include <locale.h>

int main(int argc, char *argv[])

{

setlocale(LC_ALL, "spanish");

float numero;

printf("¿Cuál es el número a comparar?\n"); scanf("%f",&numero);

5

float numero; printf("¿Cuál es el número a comparar?\n"); scanf("%f",&numero); 5
float numero; printf("¿Cuál es el número a comparar?\n"); scanf("%f",&numero); 5
float numero; printf("¿Cuál es el número a comparar?\n"); scanf("%f",&numero); 5
float numero; printf("¿Cuál es el número a comparar?\n"); scanf("%f",&numero); 5
float numero; printf("¿Cuál es el número a comparar?\n"); scanf("%f",&numero); 5
float numero; printf("¿Cuál es el número a comparar?\n"); scanf("%f",&numero); 5
if (numero > 0) printf("El número es positivo"); return 0; } Al compilar y ejecutar

if (numero > 0) printf("El número es positivo");

return 0;

}

Al compilar y ejecutar el código anterior con el programa DevC++ podemos comprobar que cuando ingresamos un número mayor a cero obtenemos como resultado la pantalla

de la figura 3, y cuando proporcionamos un número negativo obtenemos la pantalla de

la figura 4.

un número negativo obtenemos la pantalla de la figura 4. Figura 3. Pantalla de salida cuando

Figura 3. Pantalla de salida cuando se proporciona un número positivo. Elaboración propia.

se proporciona un número positivo. Elaboración propia. Figura 4. Pantalla de salida cuando se proporciona un

Figura 4. Pantalla de salida cuando se proporciona un número negativo. Elaboración propia.

A continuación, explicaremos cada una de las partes del código.

Al inicio del programa tenemos tres directivas:

6

A continuación, explicaremos cada una de las partes del código. Al inicio del programa tenemos tres
A continuación, explicaremos cada una de las partes del código. Al inicio del programa tenemos tres
A continuación, explicaremos cada una de las partes del código. Al inicio del programa tenemos tres
A continuación, explicaremos cada una de las partes del código. Al inicio del programa tenemos tres
A continuación, explicaremos cada una de las partes del código. Al inicio del programa tenemos tres
A continuación, explicaremos cada una de las partes del código. Al inicio del programa tenemos tres

#include <stdio.h> #include <stdlib.h> #include <locale.h>

#include <stdlib.h> #include <locale.h> Cada una de ellas incluye un programa prefabricado

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;

La siguiente instrucción es:

printf("¿Cuál es el número a comparar?\n");

Simplemente imprime en la pantalla el mensaje “¿Cuál es el número a comparar?”. Este mensaje se le da al usuario para que sepa que vamos a esperar un dato que él debe proporcionar, sin embargo, printf no lee aún ningún dato, sólo imprime el mensaje.

Es importante notar que el símbolo \n se utiliza para bajar una línea en la pantalla (equi- valente a presionar la tecla Enter en un texto).

La sentencia siguiente es:

scanf("%d",&numero);

7

(equi- valente a presionar la tecla Enter en un texto). La sentencia siguiente es: scanf("%d",&numero); 7
(equi- valente a presionar la tecla Enter en un texto). La sentencia siguiente es: scanf("%d",&numero); 7
(equi- valente a presionar la tecla Enter en un texto). La sentencia siguiente es: scanf("%d",&numero); 7
(equi- valente a presionar la tecla Enter en un texto). La sentencia siguiente es: scanf("%d",&numero); 7
(equi- valente a presionar la tecla Enter en un texto). La sentencia siguiente es: scanf("%d",&numero); 7
(equi- valente a presionar la tecla Enter en un texto). La sentencia siguiente es: scanf("%d",&numero); 7
Esta instrucción sirve para leer datos del teclado, es decir, el usuario podrá ingresar datos;

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).

Finalmente, terminamos con la estructura selectiva simple:

if (numero > 0) printf("El número es positivo");

La instrucción if evalúa toda la expresión que se encuentra entre paréntesis. Si la expre- sión es verdadera, ejecuta la instrucción printf("El número es positivo"); si la expresión es falsa, no ejecuta nada y se salta a la siguiente instrucción, la cual es:

return 0;

Esta instrucción indica que la función principal main debe retornar con el valor cero, con esto culmina la ejecución del programa. Nótese que al final se cierra la llave que empezó en la función main:

}

Selectiva doble Esta estructura permite seleccionar entre dos opciones o alternativas posibles, en fun- ción del cumplimiento o no de una determinada condición (Joyanes Aguilar, 2007). La representación en pseudocódigo y diagrama de flujo de esta estructura se presenta en 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)

Si (condición) entonces Acciones_SI

Sino

Acciones_SINO

Fin_si

(b)

verdadero falso condición Acciones_ SI Acciones_ SINO
verdadero
falso
condición
Acciones_ SI
Acciones_ SINO

Figura 5. Pseudocódigo y diagrama de flujo de la selectiva doble. Fuente: Joyanes Aguilar (2007).

8

SI Acciones_ SINO Figura 5. Pseudocódigo y diagrama de flujo de la selectiva doble. Fuente: Joyanes
SI Acciones_ SINO Figura 5. Pseudocódigo y diagrama de flujo de la selectiva doble. Fuente: Joyanes
SI Acciones_ SINO Figura 5. Pseudocódigo y diagrama de flujo de la selectiva doble. Fuente: Joyanes
SI Acciones_ SINO Figura 5. Pseudocódigo y diagrama de flujo de la selectiva doble. Fuente: Joyanes
SI Acciones_ SINO Figura 5. Pseudocódigo y diagrama de flujo de la selectiva doble. Fuente: Joyanes
SI Acciones_ SINO Figura 5. Pseudocódigo y diagrama de flujo de la selectiva doble. Fuente: Joyanes

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.

a 6, y otro mensaje cuando la calificación es menor que 6. Figura 6. Algoritmo que
a 6, y otro mensaje cuando la calificación es menor que 6. Figura 6. Algoritmo que

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.

El código correspondiente al algoritmo de la figura 6 en lenguaje C es el siguiente.

#include <stdio.h> #include <stdlib.h> #include <locale.h>

int main(int argc, char *argv[])

{

9

#include <stdio.h> #include <stdlib.h> #include <locale.h> int main(int argc, char *argv[]) { 9
#include <stdio.h> #include <stdlib.h> #include <locale.h> int main(int argc, char *argv[]) { 9
#include <stdio.h> #include <stdlib.h> #include <locale.h> int main(int argc, char *argv[]) { 9
#include <stdio.h> #include <stdlib.h> #include <locale.h> int main(int argc, char *argv[]) { 9
#include <stdio.h> #include <stdlib.h> #include <locale.h> int main(int argc, char *argv[]) { 9
#include <stdio.h> #include <stdlib.h> #include <locale.h> int main(int argc, char *argv[]) { 9
setlocale(LC_ALL, "spanish"); float calif; printf("¿Cuál es la calificación del alumno?\n");

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;

}

Compila y ejecuta el código anterior utilizando DevC++ y revisa los resultados. A continuación veremos otro programa en lenguaje C, donde, dados dos números enteros que entran como datos, indica si uno es divisor del otro:

#include <stdio.h> #include <conio.h> #include <locale.h>

int main(int argc, char *argv[])

{

setlocale(LC_ALL, "spanish"); int Numero1=0, Numero2=0; //Variables printf(“Introduzca el primer número: ”); scanf(“%d”, &Numero1);

printf(“Introduzca el segundo número: ”); scanf(“%d”, &Numero2); if (Numero1 > Numero2)

{

if (Numero1%Numero2 == 0)

{

 

printf(“%d Sí Es divisor de %d”,

Numero2,Numero1);

}

else

printf(“%d no es divisor de %d ”,

Numero2,Numero1);

10

Sí Es divisor de %d”, Numero2,Numero1); } else printf(“%d no es divisor de %d ”, Numero2,Numero1);
Sí Es divisor de %d”, Numero2,Numero1); } else printf(“%d no es divisor de %d ”, Numero2,Numero1);
Sí Es divisor de %d”, Numero2,Numero1); } else printf(“%d no es divisor de %d ”, Numero2,Numero1);
Sí Es divisor de %d”, Numero2,Numero1); } else printf(“%d no es divisor de %d ”, Numero2,Numero1);
Sí Es divisor de %d”, Numero2,Numero1); } else printf(“%d no es divisor de %d ”, Numero2,Numero1);
Sí Es divisor de %d”, Numero2,Numero1); } else printf(“%d no es divisor de %d ”, Numero2,Numero1);

}

else

printf(“No es divisor porque es mayor %d”,Numero2);

return 0;

}

es divisor porque es mayor %d”,Numero2); return 0; } En el programa anterior estamos utilizando el

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.

Analiza el programa, compílalo y ejecútalo con DevC++.

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.

La representación en pseudocódigo y diagrama de flujo de esta estructura se presentan en la figura 7. En esta figura se puede observar que el comportamiento de esta estructura es el siguiente:

Si al evaluar la expresión el resultado es el valor1, se ejecutarán las acciones Ac- ciones1. En caso contrario, si el resultado de evaluar la expresión es el valor2, se ejecutarán las acciones Acciones2. Y así sucesivamente, para el resto de los casos. Es decir, dependiendo del resultado de la evaluación de la expresión, se ejecutará alguna acción en particular”.

11

Es decir, dependiendo del resultado de la evaluación de la expresión, se ejecutará alguna acción en
Es decir, dependiendo del resultado de la evaluación de la expresión, se ejecutará alguna acción en
Es decir, dependiendo del resultado de la evaluación de la expresión, se ejecutará alguna acción en
Es decir, dependiendo del resultado de la evaluación de la expresión, se ejecutará alguna acción en
Es decir, dependiendo del resultado de la evaluación de la expresión, se ejecutará alguna acción en
Es decir, dependiendo del resultado de la evaluación de la expresión, se ejecutará alguna acción en
Figura 7. Pseudocódigo y diagrama de flujo de la selectiva múltiple. En la figura 8
Figura 7. Pseudocódigo y diagrama de flujo de la selectiva múltiple. En la figura 8

Figura 7. Pseudocódigo y diagrama de flujo de la selectiva múltiple.

En la figura 8 se presenta un ejemplo de un algoritmo que utiliza una estructura selectiva múltiple para escribir un mensaje con el día de la semana según un número proporcio- nado por el usuario.

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

FIN

semana’) otro: escribir (‘Día no válido’) fin_segun FIN Acción que se ejecutará sino es un día

Acción que se ejecutará sino es un día entre 1 y 5

12

semana’) otro: escribir (‘Día no válido’) fin_segun FIN Acción que se ejecutará sino es un día
semana’) otro: escribir (‘Día no válido’) fin_segun FIN Acción que se ejecutará sino es un día
semana’) otro: escribir (‘Día no válido’) fin_segun FIN Acción que se ejecutará sino es un día
semana’) otro: escribir (‘Día no válido’) fin_segun FIN Acción que se ejecutará sino es un día
semana’) otro: escribir (‘Día no válido’) fin_segun FIN Acción que se ejecutará sino es un día
semana’) otro: escribir (‘Día no válido’) fin_segun FIN Acción que se ejecutará sino es un día

INICIO

INICIO escribir (‘¿Cuál es el día de la semana ?’) leer (dia) expresión 5 6 o

escribir (‘¿Cuál es el día de la semana?’)

INICIO escribir (‘¿Cuál es el día de la semana ?’) leer (dia) expresión 5 6 o

leer (dia)

expresión 5 6 o 7 1 2 3 4 escribir(‘El dia escribir(‘El dia escribir(‘El dia
expresión
5
6 o 7
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

es jueves’) es viernes’) Semana’) FIN Figura 8. Algoritmo que utiliza una estructura selectiva

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.

En lenguaje C, la estructura selectiva múltiple se realiza con la instrucción swtich, que tiene la siguiente sintaxis:

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

se ejecutan todas las sentencias (incluidas las de los cases siguientes) hasta que se encuentra la
se ejecutan todas las sentencias (incluidas las de los cases siguientes) hasta que se encuentra la
se ejecutan todas las sentencias (incluidas las de los cases siguientes) hasta que se encuentra la
se ejecutan todas las sentencias (incluidas las de los cases siguientes) hasta que se encuentra la
se ejecutan todas las sentencias (incluidas las de los cases siguientes) hasta que se encuentra la
se ejecutan todas las sentencias (incluidas las de los cases siguientes) hasta que se encuentra la
Esto permite agrupar varios valores constantes que compartan una misma acción. Si no queremos que

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.

El algoritmo de la figura 8 se traduciría a lenguaje C con el siguiente código; nótese que se le hicieron un par de modificaciones sencillas:

#include <stdio.h> #include <stdlib.h> #include <locale.h>

int main(int argc, char *argv[])

{

setlocale(LC_ALL, "spanish");

int dia;

printf("Escribe un número del 1 al 7:\n"); scanf("%d",&dia);

switch (dia)

{

case 1:

printf("Lunes"); break; case 2:

printf("Martes "); break; case 3:

printf("Miercoles"); break; case 4:

printf("Jueves"); break; case 5:

printf("Viernes"); break; case 6: case 7:

printf("Fin de Semana"); break; default:

printf("Día no váido");

14

break; case 6: case 7: printf("Fin de Semana"); break; default: printf("Día no váido"); 14
break; case 6: case 7: printf("Fin de Semana"); break; default: printf("Día no váido"); 14
break; case 6: case 7: printf("Fin de Semana"); break; default: printf("Día no váido"); 14
break; case 6: case 7: printf("Fin de Semana"); break; default: printf("Día no váido"); 14
break; case 6: case 7: printf("Fin de Semana"); break; default: printf("Día no váido"); 14
break; case 6: case 7: printf("Fin de Semana"); break; default: printf("Día no váido"); 14

}

}

break;

return 0;

} } break; return 0; Compila y ejecuta el código anterior utilizando DevC++ y revisa los

Compila y ejecuta el código anterior utilizando DevC++ y revisa los resultados.

3.3. Expresión for

Estructuras de control iterativas

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.

Para profundizar más en la lógica de las estructuras de control iterativas se recomienda revisar la sección correspondiente en el bloque III de la materia “Análisis de Algoritmos”.

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:

for (sentencia_inicial ; condición ; incremento/decremento) sentencia;

En el caso de que se desee repetir todo un bloque de sentencias, se deberán agregar las llaves. La sintaxis es:

for (sentencia_inicial ; condición ; incremento/decremento)

{

 

Sentencia1;

Sentencia1;

Sentencia1;

}

Como se puede observar entre el paréntesis lleva “;”.

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

una variable de control y sólo se ejecuta una vez antes de evaluar la condición y
una variable de control y sólo se ejecuta una vez antes de evaluar la condición y
una variable de control y sólo se ejecuta una vez antes de evaluar la condición y
una variable de control y sólo se ejecuta una vez antes de evaluar la condición y
una variable de control y sólo se ejecuta una vez antes de evaluar la condición y
una variable de control y sólo se ejecuta una vez antes de evaluar la condición y
condición es la condición lógica que debe cumplirse para que se ejecuten las sentencias del

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.

Incremento/decremento es la actualización de la variable de control y se ejecuta al final de cada ciclo (antes de volver a evaluar expr1).

En el ejemplo siguiente se imprimirá en la pantalla el mensaje “Hola Mundo” 5 veces:

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>

int main(int argc, char *argv[])

{

setlocale(LC_ALL, "spanish");

int i;

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

{

}

printf("%d\n",i);

}

return 0;

En el siguiente ejercicio escribiremos un programa que calcula el valor de eX, en donde:

16

} return 0; En el siguiente ejercicio escribiremos un programa que calcula el valor de e
} return 0; En el siguiente ejercicio escribiremos un programa que calcula el valor de e
} return 0; En el siguiente ejercicio escribiremos un programa que calcula el valor de e
} return 0; En el siguiente ejercicio escribiremos un programa que calcula el valor de e
} return 0; En el siguiente ejercicio escribiremos un programa que calcula el valor de e
} return 0; En el siguiente ejercicio escribiremos un programa que calcula el valor de e
En donde el símbolo ¡ representa el factorial de un número. El factorial de cualquier
En donde el símbolo ¡ representa el factorial de un número. El factorial de cualquier

En donde el símbolo ¡ representa el factorial de un número. El factorial de cualquier nú- mero se calcula con la fórmula:

n! = n * (n-1) * (n-2) * (n-3) …. * 1

El programa solicita al usuario el valor de x (como dato de entrada), y después de realizar el cálculo reporta el resultado. Se utiliza la función pow (x,i), es decir, el número x elevado a la potencia i, por lo que se incluye al inicio de tu programa la directiva #include <math.h>

El código del programa es el siguiente:

#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

for (j=i;j>0;j--) factorial=factorial*j; //Acumula el valor de e e=e+(potencia/(float)factorial); } 17
for (j=i;j>0;j--) factorial=factorial*j; //Acumula el valor de e e=e+(potencia/(float)factorial); } 17
for (j=i;j>0;j--) factorial=factorial*j; //Acumula el valor de e e=e+(potencia/(float)factorial); } 17
for (j=i;j>0;j--) factorial=factorial*j; //Acumula el valor de e e=e+(potencia/(float)factorial); } 17
for (j=i;j>0;j--) factorial=factorial*j; //Acumula el valor de e e=e+(potencia/(float)factorial); } 17
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; Analiza el código,

}

printf("El valor de e elevado a x: %f", e); return 0;

Analiza el código, y posteriormente escríbelo, compílalo y ejecútalo utilizando DevC++. Para comprobar tus resultados utiliza los siguientes valores:

Para x=1 , eX = 2.718282 Para x=2 , eX = 7.388995 Para x=3 , eX = 20.079666

3.4. Expresión while

La sintaxis del bucle while es en el lenguaje C:

while (condición) sentencia;

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:

0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144…

El programa que calcula la serie de Fibonacci para todos sus elementos menores a 100 sería el siguiente:

18

89, 144… El programa que calcula la serie de Fibonacci para todos sus elementos menores a
89, 144… El programa que calcula la serie de Fibonacci para todos sus elementos menores a
89, 144… El programa que calcula la serie de Fibonacci para todos sus elementos menores a
89, 144… El programa que calcula la serie de Fibonacci para todos sus elementos menores a
89, 144… El programa que calcula la serie de Fibonacci para todos sus elementos menores a
89, 144… El programa que calcula la serie de Fibonacci para todos sus elementos menores a

#include <stdio.h> #include <stdlib.h> #include <locale.h>

int main(int argc, char *argv[])

#include <locale.h> int main(int argc, char *argv[]) {   setlocale(LC_ALL, "spanish"); int

{

 

setlocale(LC_ALL, "spanish");

int numero = 1; int actual=1, anterior=1;

printf ("Los números menores a 100 de la serie de Fibonacci son los siguientes: \n");

while (numero<=100)

{

printf ("%d\n",numero); numero = anterior + actual; anterior= actual; actual= numero;

}

printf ("FIN");

return 0;

}

Después de analizar el código anterior, cópialo, compílalo y ejecútalo con DevC++.

3.5. Expresión do-while

Al contrario que los bucles for y while que comprueban la condición al principio del bucle y antes de ejecutar cualquier sentencia del bucle, el bucle do/while comprueba la con- dición al final del mismo, lo que provoca que el bucle se ejecute como mínimo una vez (independientemente del valor de la condición). La sintaxis del bucle do/while es:

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

do/while se ejecuta mientras la condición sea verdad. Pero como ya dijimos, la sentencia se ejecuta
do/while se ejecuta mientras la condición sea verdad. Pero como ya dijimos, la sentencia se ejecuta
do/while se ejecuta mientras la condición sea verdad. Pero como ya dijimos, la sentencia se ejecuta
do/while se ejecuta mientras la condición sea verdad. Pero como ya dijimos, la sentencia se ejecuta
do/while se ejecuta mientras la condición sea verdad. Pero como ya dijimos, la sentencia se ejecuta
do/while se ejecuta mientras la condición sea verdad. Pero como ya dijimos, la sentencia se ejecuta
Veamos el siguiente ejemplo: int i,j; do { scanf(“%d”,&i); scanf(“%d”,&j); } while (i<j); El ciclo

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.

3.6. Interrupción break

Las sentencias de control break y continue permiten modificar y controlar la ejecución de los bucles (for, while y do-while).

La sentencia break provoca la interrupción y finalización del bucle en el cual se encuen- tra, y automáticamente el programa continúa con 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 condi- ció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.

Algunos ejemplos de uso de break y de continue:

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

break; printf(“Salí del bucle infinito, el valor de x es: %d\n”,x); } Ejemplo 2: int x;
break; printf(“Salí del bucle infinito, el valor de x es: %d\n”,x); } Ejemplo 2: int x;
break; printf(“Salí del bucle infinito, el valor de x es: %d\n”,x); } Ejemplo 2: int x;
break; printf(“Salí del bucle infinito, el valor de x es: %d\n”,x); } Ejemplo 2: int x;
break; printf(“Salí del bucle infinito, el valor de x es: %d\n”,x); } Ejemplo 2: int x;
break; printf(“Salí del bucle infinito, el valor de x es: %d\n”,x); } Ejemplo 2: int x;

for(x=1;x<=100;x++) /* Esta rutina imprime en pantalla los números pares */

{

 

if (x%2 > 0) continue;

printf(“%d\n”,x);

}

if (x%2 > 0) continue; printf(“%d\n”,x); } En el código del ejemplo 2, la sentencia continue

En el código del ejemplo 2, la sentencia continue hace que cuando el número x no sea par, la ejecución no llegue a la sentencia printf, ya que se regresa al principio del bucle for y ejecuta el incremento x++.

21

no llegue a la sentencia printf, ya que se regresa al principio del bucle for y
no llegue a la sentencia printf, ya que se regresa al principio del bucle for y
no llegue a la sentencia printf, ya que se regresa al principio del bucle for y
no llegue a la sentencia printf, ya que se regresa al principio del bucle for y
no llegue a la sentencia printf, ya que se regresa al principio del bucle for y
no llegue a la sentencia printf, ya que se regresa al principio del bucle for y