• No se han encontrado resultados

1. Escriba el Ejemplo 3.1 utilizando los delimitadores de bloque para cada una de las estructuras de selecci´on if.

2. Siguiendo la idea expresada en el texto de la Secci´on 3.1.1, escriba en nuestro lenguaje la descripci´on de las sentencias de las l´ıneas 23, 26 y 29 del Ejemplo 3.1.

3. Reescriba el Ejemplo 3.6 usando la simplificaci´on de l´ıneas descrita en la Secci´on 3.1.3 y compruebe su equivalencia, ¿cu´al es mejor y por qu´e?, ¿en qu´e casos convendr´ıa utilizar una u otra?.

4. Reescriba el Ejemplo 3.6 usando una estructura de selecci´on if-else.

5. Escriba un programa que utilice el operador ternario para determinar el menor de dos n´umeros enteros. Este programa es similar al del Ejemplo 3.6.

6. Escriba un programa que determine si un n´umero entero positivo es par o impar. Un n´umero par es aquel que es divisible por dos.

7. Escriba un programa que utilice una estructura de selecci´on if-else y los operadores relacionales, para determinar el menor de tres n´umeros enteros (asuma que los n´umeros son distintos).

8. Escriba un programa que utilice una estructura de selecci´on if-else y los operadores relacionales, para determinar el mayor de tres n´umeros enteros (asuma que los n´umeros son distintos).

9. Escriba un programa que utilice una estructura de selecci´on if-else y los operadores relacionales, para determinar el n´umero central (en base a su ordinalidad) de tres n´umeros enteros (asuma que los n´umeros son distintos).

10. Extienda el Ejemplo 3.7 para que el rango de conversi´on de n´umeros a palabras sea m´as amplio: agregue las sentencias necesarias de tal forma que el programa considere al menos n´umeros del uno al diez, ¿qu´e sucede si en lugar de un n´umero escribe una letra?.

11. Convierta el Ejemplo 3.7 y el ejercicio anterior, a su correspondiente representaci´on con una estructura de selecci´on if-else anidada.

3.5. EJERCICIOS 61

12. Reescriba los Ejemplos 3.8 y 3.9 utilizando el operador de incremento como prefijo.

13. Reescriba los Ejemplos 3.8 y 3.9 utilizando el operador de incremento como postfijo.

14. Escriba un programa que imprima en la salida est´andar los n´umeros del uno al diez, uno por rengl´on pero en orden inverso, es decir: 10, 9, 8, 7, . . . , 1. No utilice el operador de decremento.

15. Escriba un programa que imprima los n´umeros del uno al diez, uno por rengl´on pero en orden inverso, es decir: 10, 9, 8, 7, ..., 1. Utilice el operador de decremento.

16. Reescriba el Ejemplo 3.9 usando la estructura de repetici´on do-while.

17. Reescriba todos los ejemplos y ejercicios que utilizan la estructura de repetici´on while, utilizando ahora la estructura de repetici´on for.

18. Considere el Ejemplo 3.13, y coloque al final de la l´ınea 12 un “;”, compile el programa y ejec´utelo. Lo ´unico que ver´a en la salida est´andar es: “i = 11”. ¿Por qu´e?

19. Considere el programa del Ejemplo 3.22 y determine su salida sin eje- cutarlo en la computadora; despu´es corrobore su respuesta con la salida real. 1 /∗ Que h a c e e s t e programa ? 2 @autor R i c a r d o Ruiz R o d r i g u e z 3 ∗/ 4 #include < s t d i o . h> 5 6 #d e f i n e M 10 7 8 i n t main ( ) { 9 i n t i ; 10 11 f o r ( i = 1 ; i <= M; i ++) 12 p r i n t f ( ” % c ” , ( i % 2 ) ? ’@ ’ : ’# ’ ) ; 13 p r i n t f ( ” \n” ) ; 14 15 return 0 ; 16 } Ejemplo 3.22: Misterioso 1

62 CAP´ITULO 3. ESTRUCTURAS DE CONTROL

20. Considere el programa del Ejemplo 3.23 y determine su salida sin eje- cutarlo en la computadora; despu´es corrobore su respuesta con la salida real. 1 /∗ Que h a c e e s t e programa ? 2 @autor R i c a r d o Ruiz R o d r i g u e z 3 ∗/ 4 #include < s t d i o . h> 5 6 #d e f i n e M 10 7 8 i n t main ( ) { 9 i n t i , j ; 10 11 f o r ( i = 1 ; i <= M; i ++) 12 f o r ( j = 1 ; j <= M; j ++) 13 p r i n t f ( ” % c ” , ( i % 2 ) ? ’@ ’ : ’# ’ ) ; 14 p r i n t f ( ” \n” ) ; 15 16 return 0 ; 17 } Ejemplo 3.23: Misterioso 2

21. Considere el programa del Ejemplo 3.24 y determine su salida sin eje- cutarlo en la computadora; despu´es corrobore su respuesta con la salida real. 1 /∗ Que h a c e e s t e programa ? 2 @autor R i c a r d o Ruiz R o d r i g u e z 3 ∗/ 4 #include < s t d i o . h> 5 #include < s t d l i b . h> 6 #include <t i m e . h> 7 8 #d e f i n e M 50 9 10 i n t main ( ) { 11 i n t i ; 12 13 s r a n d ( t i m e (NULL) ) ; 14 f o r ( i = 1 ; i <= M; i ++) 15 p r i n t f ( ” % c ” , ( rand ( ) % 2 ) ? ’@ ’ : ’# ’ ) ; 16 p r i n t f ( ” \n” ) ; 17 18 return 0 ; 19 } Ejemplo 3.24: Misterioso 3

22. Para el programa del Ejemplo 3.23, agregue una llave izquierda ({) al final de la l´ınea 11, y una llave derecha(}) en la l´ınea 15, de tal

3.5. EJERCICIOS 63

forma que se delimite el bloque del ciclo for m´as externo para que las sentencias de las l´ıneas 12-14 pertenezcan a ´el. ¿Cambia en algo la salida del programa?. Determine su respuesta sin ejecutarlo en la computadora, despu´es ejec´utelo, y analice lo que sucede.

23. Para el programa modificado en base a lo expuesto en el ejercicio ante- rior, cambie la i por j de la l´ınea 13, y determine su salida sin ejecutarlo en la computadora; despu´es corrobore su respuesta con la salida real.

24. Pruebe con m´as datos el Ejemplo 3.17, proporcionados tanto del teclado como de un archivo, siguiendo los mecanismos de redireccionamiento descritos en el Ap´endice B.

25. Para el Ejemplo 3.17, describa c´omo podr´ıan interpretarse en nuestro lenguaje las sentencias de las l´ıneas 18-29.

26. Escriba un programa que, siguiendo la idea del Ejemplo 3.17 y consi- derando un esquema de calificaciones basado en letras (A, B, C, D y F), procese un conjunto de dichas calificaciones de la entrada est´andar, y determine cuantas calificaciones hay de cada una. Si se procesa una calificaci´on no considerada, se deber´a indicar dicha irregularidad (no existe la calificaci´on E por ejemplo).

27. Escriba un programa que determine si un n´umero entero positivo es o no un n´umero primo. Un n´umero primo es aquel que s´olo es divisible por s´ı mismo y la unidad.

28. Reescriba el Ejemplo 3.18 con una estructura de repetici´on do-while y aseg´urese de que sea l´ogica y funcionalmente equivalente.

29. Reescriba el Ejemplo 3.18 con una estructura de repetici´on for y aseg´ure- se de que sea l´ogica y funcionalmente equivalente.

30. Modifique el Ejemplo 3.18 para que lea el n´umero de calificaciones a procesar. Tanto el n´umero de calificaciones (mayor que cero), como las calificaciones (entre 1 y 10) deber´an ser validados. Utilice la estructura de repetici´on while para la repetici´on controlada por contador.

31. Modifique el Ejemplo 3.18 para que lea el n´umero de calificaciones a procesar. Tanto el n´umero de calificaciones (mayor que cero), como las

64 CAP´ITULO 3. ESTRUCTURAS DE CONTROL

calificaciones (entre 1 y 10) deber´an ser validados. Utilice la estructura de repetici´on do-while para la repetici´on controlada por contador.

32. Modifique el Ejemplo 3.18 para que lea el n´umero de calificaciones a procesar. Tanto el n´umero de calificaciones (mayor que cero), como las calificaciones (entre 1 y 10) deber´an ser validados. Utilice la estructura de repetici´on for para la repetici´on controlada por contador.

33. Reescriba el Ejemplo 3.19 con una estructura de repetici´on do-while, y aseg´urese de que sea l´ogica y funcionalmente equivalente.

34. Reescriba el Ejemplo 3.19 con una estructura de repetici´on for y aseg´ure- se de que sea l´ogica y funcionalmente equivalente.

35. Modifique el Ejemplo 3.19 para que las calificaciones sean validadas (que est´en entre cero y diez). Utilice la estructura de repetici´on while para la repetici´on controlada por centinela.

36. Repita el ejercicio anterior pero utilice la estructura de repetici´on do- while para la repetici´on controlada por centinela.

37. Repita el ejercicio anterior pero utilice la estructura de repetici´on for para la repetici´on controlada por centinela.

38. Escriba un programa que realice la suma de los n´umeros del uno al diez:

a) Utilice la estructura de repetici´on while.

b) Utilice la estructura de repetici´on do-while.

39. Escriba una programa que realice la suma de n´umeros enteros proce- sados desde la entrada est´andar. La suma se detiene cuando el n´umero le´ıdo sea igual a cero.

a) Utilice la estructura de repetici´on while.

b) Utilice la estructura de repetici´on do-while.

40. Escriba un programa que permita determinar el mayor de n n´umeros proporcionados desde el teclado, donde n > 1.

3.5. EJERCICIOS 65

41. Escriba un programa que permita determinar la suma de los primeros n n´umeros enteros positivos proporcionados desde el teclado, donde n > 1.

42. Escriba un programa que permita determinar la suma de los primeros n n´umeros pares (n > 1).

43. Escriba un programa que permita determinar la suma de n´umeros pares contenidos entre 1 y n, donde n > 1.

44. Escriba un programa que permita identificar los n´umeros primos entre 1 y n, donde n > 1.

45. Dada una lista de n´umeros enteros positivos proporcionados desde la entrada est´andar, determine el mayor y el menor de ellos. La lista ter- mina al proporcionar cualquier n´umero negativo o cero.

46. ¿Qu´e conclusiones puede determinar de la realizaci´on de los seis ejerci- cios anteriores?, ¿qu´e tipo de estructura de repetici´on es m´as natural, desde su perspectiva, para una repetici´on controlada por contador y por qu´e?, ¿qu´e tipo de estructura de repetici´on es m´as natural, desde su perspectiva, para una repetici´on controlada por centinela y por qu´e?

47. Reescriba el programa del Ejemplo 3.20 utilizando una estructura de repetici´on while y determine lo que pasa. ¿Funciona de la misma ma- nera?, ¿se genera alg´un tipo de problema?, ¿se mantiene la equivalencia l´ogica y funcional?.

48. Reescriba el programa del Ejemplo 3.20 utilizando una estructura de repetici´on do-while y determine lo que pasa. ¿Funciona de la misma manera?, ¿se genera alg´un tipo de problema?, ¿se mantiene la equiva- lencia l´ogica y funcional?.

49. Reescriba el programa del Ejemplo 3.21 utilizando una estructura de repetici´on while y determine lo que sucede. ¿Funciona de la misma ma- nera?, ¿se genera alg´un tipo de problema?, ¿se mantiene la equivalencia l´ogica y funcional?.

50. Reescriba el programa del Ejemplo 3.21 utilizando una estructura de repetici´on do-while y determine lo que sucede. ¿Funciona de la misma

66 CAP´ITULO 3. ESTRUCTURAS DE CONTROL

manera?, ¿se genera alg´un tipo de problema?, ¿se mantiene la equiva- lencia l´ogica y funcional?.

Cap´ıtulo 4

M´odulos de programa:

Funciones

Desde el primer ejemplo de este libro se ha estado haciendo uso de funcio- nes: main es una funci´on, printf, scanf, getchar, rand y srand tambi´en son funciones, y al uso de una funci´on se le denomina invocaci´on o llamado de funci´on.

Este cap´ıtulo describe los aspectos relacionados con funciones, tanto las de las bibliotecas del lenguaje C como las funciones definidas por el progra- mador, es decir, se presentan los elementos b´asicos para construir bibliotecas de funciones personalizadas.

4.1.

Funciones de biblioteca

Considere el problema de calcular las ra´ıces de una ecuaci´on de segundo grado utilizando la f´ormula general mostrada en la Ecuaci´on 4.1.

x1,2 =

−b ±√b2− 4ac

2a (4.1)

Una posible soluci´on a dicho problema es el programa que se muestra en el Ejemplo 4.1, el cual es el ejemplo m´as elaborado hasta ahora en cuanto a los elementos que contiene se refiere, y con excepci´on de las l´ıneas 6, 26 y 27, deber´ıa ser completamente comprendido. La l´ınea 6 le indica al compilador que incluya la biblioteca de funciones matem´aticas (math.h), ya que en las l´ıneas 26 y 27 se har´a uso de la funci´on sqrt (square root ), la cual calcula la ra´ız cuadrada de su argumento.

68 CAP´ITULO 4. M ´ODULOS DE PROGRAMA: FUNCIONES