318 50 26MB
Spanish Pages [380] Year 2014
www.FreeLibros.me
www.FreeLibros.me
Introducción a la programación estructurada en C Primera edición
Teresa G ab riela M árquez Frausto Sonia O so rio Á ngel Elzie Noem í O lvera Pérez C entro U niversitario d e Ciencias Exactas e Ing eniería s (CUCEI) U niversidad d e Guadalajara Revisión técnica Luis Arturo Jim énez Mendoza
Escuela Superior de Ingeniería Mecánica y Eléctrica (ESIM E), Zacatenco Instituto Politécnico Nacional
Prentice Hall M éxico • A rgentina • B rasil • C olom bia • C osta R ica • C hile • E cuador E spaña • G uatem ala • Panam á • Perú • P u erto R ico • U ruguay • V enezuela
www.FreeLibros.me
D ito s d e c a ta lo g a c ió n b ib lio g ráfica
M árquez F ra u sto , Tferesa G ab riela; O sorio Angel, Sonia; O lvera P érez, E lzie Noemí Introducción a la program ación e s tru c tu ra d a e n C. Prim era edición PEA RSO N ED U C A C IÓ N , M éxico, 2011 ISBN: 978-607-32-0600-6 Á rea: C om putación Form ato: 18.5 X 23.5 cm
Páginas: 376
Edición en español Editor:
L uis M iguel C ruz Castillo luis.cruz@ pearson.com Editor de desarrollo: B em ardino G utiérrez Hernández Supervisor de producción: Enrique T rejo Hernández
PRIM ERA EDICIÓN, 2011 D.R. © 2011 por Pearson Educación de M éxico, S.A. de C.V. Atlacom ulco 500-5o. piso Industrial A toto, C.P. 53519 Naucalpan de Juárez, Estado de M éxico E-mail: editorial.universidades@ pearsoned.com C ám ara Nacional de la Industria Editorial Mexicana. Reg. Núm. 1031. Prentice Hall es una m arca registrada de Pearson Educación de M éxico, S.A. de C.V. Reservados todos los derechos. Ni la totalidad ni parte de esta publicación pueden reproducirse, registrarse o transm itirse, por un sistem a de recuperación de información, en ninguna forma ni por ningún m edio, sea electrónico, m ecánico, fotoquím ico, m agnético o electroóptico, por fotocopia, grabación o cualquier otro, sin perm iso previo por escrito del editor. El préstam o, alquiler o cualquier otra forma de cesión de uso de este ejem plar requerirá tam bién la autorización del editor o de sus representantes. ISB N 978-607-32-0600-6 ISB N e-book 978-607-32-0601-3 ISB N e-chapter 978-607-32-0602-0 Im preso en M éxico. P rínted in M éxico. 1 2 3 4 5 6 7 8 9 0 - 14 13 12 11
Prentice Hall es una marca de
PEARSON www.pearsoneducacion.net
www.FreeLibros.me
ISBN: 978 -607 -3 2 -0600-6
Dedicado a Gabriel
www.FreeLibros.me
www.FreeLibros.me
C o n t e n id o
P re s e n ta c ió n
C a p ítu lo 1
x iii
In tro d u c c ió n a l le n g u a je C 1.1 1.2 1.3 1.4 1.5
Conceptos ..................................................................................................... Lenguajes utilizados en una com putadora .......................................... Etapas de desarrollo del softw are .......................................................... El lenguaje C .............................................................................................. Elem entos de un program a en C (conceptos básicos) ...................... 1.5.1 Identificadores .................................................................................. 1.5.2 T ipos de datos .................................................................................. 1.5.3 Variables ............................................................................................. 1.5.4 C onstantes ......................................................................................... 1.5.5 Palabras reservadas ......................................................................... 1.5.6 C om entarios ....................................................................................... 1.6 Entrada y salida de datos .......................................................................... 1.6.1 Salida de datos .................................................................................. 1.6.2 Entrada de datos ................................................................................ Resum en ......................................................................................................... E valuación .................................................................................................... Ejercicios propuestos ..................................................................................
www.FreeLibros.me
1 1 2 3 4 4 5 6 6 9 11 11 11 12 15 16 16 17
vi
C o n te n id o
C a p ítu lo 2
A rit m é tic a d e C 2.1 2.2
2.3 2.4 2.5 2.6
C a p ítu lo 3
C a p ítu lo 4
21 23 24 26 26 27 28 29 30 31 32 33
P ro g ra m a c ió n e s t r u c tu r a d a
37
3.1 3.2 3.3
37 40 41 42 52 53 55
E structura de un program a en C ............................................................ D irectivas del preprocesador ................................................................... E structuras de c o n tr o l ................................................................................. 3.3.1 S e c u e n c ia c ió n .................................................................................... R esum en ......................................................................................................... Evaluación .................................................................................................... Ejercicios propuestos ..................................................................................
E s t r u c tu r a s d e c o n tro l s e le c t iv a s 4.1 4.2 4.3 4.4
C a p ítu lo 5
Inicialización y asignación de variables ............................................... O peradores aritm éticos ............................................................................ 2.2.1 Prioridad de los operadores aritm éticos ..................................... 2.2.2 O tros operadores d e a s ig n a c ió n ..................................................... O peradores de increm ento y decrem ento ............................................. O peradores relaciónales ............................................................................ O peradores lógicos ..................................................................................... O perador condicional ................................................................................. 2.6.1 Prioridad de operadores .................................................................. R esum en ......................................................................................................... Evaluación .................................................................................................... Ejercicios propuestos ..................................................................................
21
E structura selectiva sim ple ( i f ) ............................................................... Selectiva doble (¿ f - e l s e ) ................................................................... Selectiva doble anidada ............................................................................ Selectiva m últiple (sw itc h - c a se ) ...................................................... R esum en ......................................................................................................... Evaluación .................................................................................................... Ejercicios propuestos ..................................................................................
59 60 63 69 73 84 85 86
E s t r u c tu r a s d e c o n tro l r e p e t it iv a s
93
5.1 E structura repetitiva w h ile ......................................................................... 5.2 E structura repetitiva d o -w h ile ................................................................. 5.3 E structura repetitiva f o n ............................................................................ R esum en ......................................................................................................... E valuación .................................................................................................... Ejercicios propuestos ..................................................................................
94 102 109 114 115 115
www.FreeLibros.me
C o n te n id o
C a p ítu lo 6 D a to s d e t ip o e s tru c tu ra d o . A r r e g lo s 6.1 6.2 6.3 6.4
Arreglo o array ............................................................................................. Vectores o arreglos unidim ensionales ..................................................... M atrices o arreglos bidim ensionales ....................................................... Arreglo de caracteres y cadena de caracteres ....................................... Cadena de caracteres .................................................................................. Funciones para m anejo de cadenas ......................................................... Resum en ......................................................................................................... Evaluación .................................................................................................... Ejercicios propuestos ..................................................................................
C a p ítu lo 7 D a to s d e t ip o e s t ru c tu r a d o 7.1
E structura ..................................................................................................... E structuras anidadas .................................................................................... Uso de t y p e d e f (definir el nom bre de un tipo de dato) ..................... 7.2 A puntadores ................................................................................................. Resum en ......................................................................................................... Evaluación .................................................................................................... Ejercicios propuestos ..................................................................................
C a p ítu lo 8 F u n c io n e s (p r o g r a m a c ió n m o d u la r) 8.1 Funciones ..................................................................................................... 8.2 Funciones que devuelven valores .......................................................... 8.3 Funciones con paso de parám etros ........................................................ 8.3.1 Funciones con parám etros por valor ............................................ 8.3.2 Parám etros por valor y por referencia ......................................... Resum en ......................................................................................................... Evaluación .................................................................................................... Ejercicios propuestos ..................................................................................
C a p ítu lo 9 E je rc ic io s re s u e lt o s 9.1
Secuenciación ............................................................................................... 9.1.1 Calcular el área de una balastra ..................................................... 9.1.2 C alcular el pago a realizar por núm ero de apagadores y contactos .............................................................. 9.1.3 Calcular las coordenadas del vértice de una parábola ................................................................................ 9.1.4 C alcular la m edida de los ángulos com plem entario y suplem entario, dado el valor de un ángulo ............................
www.FreeLibros.me
125 125 126 141 151 153 154 162 162 163
167 167 173 176 185 191 191 192
197 199 205 210 211 215 227 229 230
231 231 231 232 233 233
C o n te n id o
9.1.5 C alcular la m agnitud de un vector dados sus com ponentes .............................................................................. 9.1.6 C alcular las ppm (partes por m illón) en una solución ............ 9.1.7 C alcular el porcentaje de masa ..................................................... 9.1.8 C alcular el núm ero de ladrillos que se necesitan ..................... 9.1.9 C alcular el núm ero de escalones de una distancia ................... 9.1.10 Separa un núm ero de cuatro dígitos e n millares, centenas, decenas y unidades ..................................................... 9.1.11 Calcular el cam po eléctrico ....................................................... 9.1.12 C alcular la r e s is te n c ia .................................................................. 9.2 Selectiva sim ple ........................................................................................... 9.2.1 C alcular el coeficiente de variación ............................................ 9.2.2 C alcular el producto punto de un v e c t o r ..................................... 9.2.3 C alcular la pendiente de una recta .............................................. 9.2.4 C alcular la fórm ula VENA ........................................................... 9.2.5 C alcular las ecuaciones básicas del gas ..................................... 9.2.6 C alcular el costo indirecto de cada departam ento de la com pañía G ood M ark ........................................................... 9.2.7 C alcular la cantidad de piedra que se necesita para un c im ie n to ................................................................................ 9.2.8 C alcular el índice de m asa m u s c u la r ............................................ 9.2.9 D eterm inar e l tipo de com puesto ................................................ 9.2.10 Sensor óptico para encender una luz ....................................... 9.2.11 Tem porizador de una represa ..................................................... 9.2.12 D escripción de un com puesto quím ico según sus com ponentes ........................................................................... 9.2.13 Calcular corriente, potencia y resistencia de un aparato eléctrico ................................................................ 9.3 Selectiva doble ............................................................................................. 9.3.1 C alcular la cantidad de concreto requerido según la h u m e d a d .............................................................................. 9.3.2 Sensor para encender una luz ....................................................... 9.3.3 C alcular resistencias en paralelo o e n serie .............................. 9.3.4 C alcular el núm ero de huevos que una viejecita lleva en su cesta ................................................................................ 9.3.5 Juego de m ultiplicaciones .............................................................. 9.3.6 C alcular el coeficiente de correlación ......................................... 9.3.7 Indicar si un com puesto es soluble o no ..................................... 9.3.8 Identificar sem irreacciones, oxidación o reducción ................. 9.3.9 Indicar el rendim iento teórico de una reacción ....................... 9.4 Selectiva doble anidada .............................................................................. 9.4.1 Juego de adivinanza de núm eros .................................................. 9.4.2 Indicar el tipo de dato que el usuario introduzca .....................
www.FreeLibros.me
234 234 235 236 236 236 237 238 238 238 239 240 241 242 244 245 246 247 247 248 248 249 251 251 251 252 253 254 256 257 257 258 259 259 261
C o n te n id o
9.5
9.6
9.7
9.8
9.4.3 El núm ero m enor de cinco núm eros ............................................ 9.4.4 Indicar e l tipo de ángulo introducido, según su m edida ................................................................................ 9.4.5 Calcular el coeficiente de variación ............................................ 9.4.6 C alcular la desviación de costos y m ateriales de la m anufacturera C hoice ............................................................ 9.4.7 Calcular las propiedades coligativas de soluciones acuosas ..................................................................... Selectiva m últiple ........................................................................................ 9.5.1 Calcular la resistencia de un cable ............................................ 9.5.2 Calcular la m agnitud de vectores ............................................... 9.5.3 Calcular las funciones básicas d e un polígono r e g u la r 9.5.4 Juego de piedra, papel o tijera ..................................................... 9.5.5 Calcular las propiedades coligativas de una solución ........... 9.5.6 Calcular la solubilidad y sus variables ...................................... 9.5.7 Calcular los costos unitarios de la empresa G e ls tr a p ................................................................................................ 9.5.8 Calcular el color de una onda de longitud ................................ E structura repetitiva w h i l e ........................................................................ 9.6.1 C alcular la producción de cualquier em presa en un día, una sem ana o un m es .................................................. 9.6.2 Sum ar los elem entos de una progresión aritm ética ............... 9.6.3 Sum ar los elem entos de una progresión geom étrica ............. 9.6.4 O btener la nóm ina de hom bres y mujeres, y su prom edio .................................................................................... 9.6.5 Calcular el precio del concreto según su resistencia ............. 9.6.6 C alcular el coeficiente de correlación entre d o s variables ........................................................................... 9.6.7 Calcular el balance de m asa ........................................................ 9.6.8 Im prim ir la fracción mol de los elem entos de un com puesto .............................................................................. 9.6.9 Calcular porcentaje en presión ................................................... 9.6.10 Calcular los átom os de un elem ento ....................................... E structura repetitiva d o - w h i l e .................................................................. 9.7.1 Calcular el determ inante, dados el cofactor y el vector ........................................................................................... 9.7.2 Calcular la frecuencia relativa de datos ................................... 9.7.3 Juego del a h o r c a d o .......................................................................... E structura repetitiva f o r .............................................................................. 9.8.1 C alcular la aceleración de un cuerpo cada segundo, los prim eros ocho s e g u n d o s ............................................................ 9.8.2 D eterm inar la cantidad de productos defectuosos y perfectos .........................................................................................
www.FreeLibros.me
ix
261 262 263 264 265 267 267 268 269 270 272 273 275 276 277 277 278 279 280 281 282 283 284 284 285 286 286 287 287 290 290 290
C o n te n id o
X
9.8.3 C alcular el salario de un trabajador, dependiendo de las piezas que elaboró ................................................................ 9.8.4 C alcular diluciones por pasos ....................................................... 9.8.5 Indicar los m oles de un elem ento ................................................ 9.8.6 Indicar la cantidad de agua que se necesita para diluir una solución ..................................................................
291 292 293 294
9.8.7 C alcular la presión parcial de un com ponente ........................ 295 9.8.8 C alcular la varianza de X ............................................................... 296 9.8.9 C alcular la derivada de X a la n ................................................... 9.9 A rreglos u n id im e n sio n a le s......................................................................... 9.9.1 C alcular la m agnitud al cuadrado de un vector ...................... 9.9.2 C alcular el producto cruz de dos v e c to r e s ................................. 9.9.3 C alcular el reactivo lim itante de una re a c c ió n ........................... 9.9.4 C alcular la proyección entre dos vectores de n elem entos .................................................................................. 9.9.5 C alcular el ángulo en grados entre d o s vectores ..................... 9.9.6 C alcular la desviación estándar y varianza m uestral de n datos ......................................................................... 9.9.7 C alcular el producto punto entre tres vectores .......................... 9.9.8 C alcular los estim adores de la recta de r e g r e s ió n ..................... 9.9.9 C alcular el coeficiente de correlación ........................................
296 297 297 298 298 299 301 302 303 304 305
9.9.10 Calcular la c o v a ria n z a ................................................................ 9.9.11 Calcular ganancias y ventas de una p a s te le r ía ..................... 9.10 A rreglos bidim ensionales ....................................................................... 9.10.1 Calcular la m atriz traspuesta ..................................................... 9.10.2 C rear una tabla con los tipos de concreto disponibles, ju n to con sus resistencias ........................................................... 9.10.3 C alcular la determ inante de un m atriz triangular .............. 9.10.4 C alcular la determ inante de una m atriz de 2 X2 ................
306 307 309 309
9.10.5 Devolver el inventario por s e m a n a ............................................ 9.10.6 C alcular en qué tu m o de la empresa se elaboran m ás piezas ................................................................ 9.10.7 Calcular la cantidad de grasa perdida según las horas de ejercicio realizadas ................................... 9.10.8 Calcular la raíz cuadrada de una m a t r iz ................................... 9.10.9 Calcular la m ultiplicación de una m atriz por un escalar ................................................................................
312
9.10.10 9.10.11 9.10.12
310 310 311
313 314 315 316
D eterm inar si una m atriz es de identidad o no ................... 317 Calcular el producto punto de dos m atrices ....................... 318 Calcular la inversa de una m atriz cuadrada de 3 X 3 ----- 319
www.FreeLibros.me
C o n te n id o
9.10.13 9.10.14
xi
C alcular la inversa de una m atriz c u a d r a d a ........................... 320 C alcular la raíz cuadrada de una m atriz ................................ 321
9.11 Funciones sin paso de p a rá m e tro s ......................................................... 322 9.11.1 Calcular el costo de los artículos m anufacturados por la em presa Kenner ................................................................ 322 9.11.2 C alcular los costos unitarios de la empresa G elstrap ........................................................................................... 323 9.11.3 C alcular la m olaridad de una s o lu c ió n .......................... 324 9.11.4 C alcular el porcentaje de m asa de una solución ........ 325 9.11.5 9.11.6 9.11.7 9.11.8
C alcular la norm alidad de una norm alidad ................. C alcular la velocidad ....................................................... C alcular el cam po eléctrico ............................................ C alcular e l núm ero de ladrillos y la cantidad de cem ento necesarios para construir una pared ................... 9.12 Funciones con prototipo sin paso de parám etros .............................. 9.12.1 Calcular la distancia entre dos puntos .......................... 9.12.2 Calcular la excentricidad de una elipse sin paso de parám etros ................................................................ 9.12.3 Calcular la derivada de X a la n ..................................... 9.13 Funciones con paso de parám etros ....................................................... 9.13.1 Calcular costos en la em presa G ood M ark C o m p a n y 9.13.2 9.13.3 9.13.4 9.13.5 9.13.6
Calcular Calcular Calcular Calcular Calcular
los costos unitarios de la em presa G elstrap ......... la excentricidad de una elipse .................................. derivadas de X a la n ................................................. velocidad, tiem po y distancia .................................. fuerza, m asa y a c e le ra c ió n ........................................
D eterm inar si un com puesto es alcano, alqueno o alquino ......................................................................... 9.13.8 C alcular resistencia, am peraje o voltaje ............................... 9.13.9 C alcular cam po eléctrico, fuerza y c a r g a ............................... 9.14 Funciones con arreglos ........................................................................... 9.14.1 M ostrar el inventario de una librería ...................................... 9.14.2 C alcular e l salario de un trabajador en consideración de las piezas elaboradas .............................. 9.14.3 Calcular los gastos perdidos por piezas defectuosas .................................................................................... 9.14.4 M ostrar el inventario de refrescos m ás vendidos de las m arcas de cola m ás conocidas ....................................... 9.14.5 Calcular la m asa m olecular de un com puesto ...................... 9.14.6 Calcular el reactivo lim itante de un elem ento ......................
326 327 328 330 331 331 332 333 334 334 335 337 338 339 341
9.13.7
www.FreeLibros.me
342 343 345 347 347 348 350 351 352 353
C o n te n id o
9.14.7 9.14.8
Calcular la Calcular el
m agnitud de un vector .................................. 354 producto cruz de un vector .......................... 355
ín d ic e d e e je rc ic io s r e s u e lt o s
357
ín d ic e d e e je m p lo s
359
ín d ic e d e t a b la s
362
www.FreeLibros.me
P r e s e n t a c ió n
E ste lib ro fu e c re a d o te n ie n d o e n m e n te a q u e llo s a lu m n o s q u e d e se a n a p re n d e r a p ro g ra m a r u tiliz a n d o el le n g u a je d e C a tra v é s d e u n s is te m a m u y p rá c tic o . R e su lta rá m u y ú til p a ra e stu d ia n te s c o n p o c a o n in g u n a e x p e rie n c ia , p e ro co n in ic iativ a p a ra re s o lv e r p ro b le m a s m e d ia n te el u so d e u n le n g u a je q u e “e n tie n d a ” la c o m p u ta d o ra . El c o n te n id o d e l lib ro e s tá c o n s id e ra d o p a ra d e s a rro lla rs e to ta lm e n te e n u n p rim e r c u rso d e p ro g ra m a c ió n ; c a d a te m a s e tra ta c o n s u fic ie n te p ro fu n d id a d y d e ta lle p a ra s e r c o m p re n d id o p o r a lg u ie n q u e s e in ic ia el c o n o c im ie n to e n e sta d isc ip lin a . El m é to d o d e e n se ñ a n z a s e b a s a e n el a n á lis is d e u n p ro b le m a y la d e sc rip c ió n d e lo s p a so s n e c e sa rio s p a ra lle g a r a la so lu c ió n . E l o b je tiv o p rin c ip a l es m o stra r c o n d e ta lle c ó m o c re a r u n p ro g ra m a y c ó m o e n te n d e rlo . T o d o e sto se c o m p le m e n ta c o n e je m p lo s y e je rc ic io s re s u e lto s , d e sg lo sa d o s e n c in c o p a rte s p a ra u n a m e jo r c o m p re n sió n . T a m b ié n s e p re s e n ta la d e sc rip c ió n d e la s o p e ra c io n e s, lo s d a to s , la c o d ific a c ió n y la e je c u c ió n d e l c ó d ig o , a d em ás d e u n a e x p lic a c ió n d e ta lla d a d e l p ro c e d im ie n to . El lib ro s e c o m p o n e d e n u e v e c a p ítu lo s. E l c a p ítu lo 1 h a b la d e lo s e le m e n to s d e un p ro g ra m a ; el c a p ítu lo 2 d e s c rib e la s o p e ra c io n e s a ritm é tic a s q u e s e p u e d e n re a liz a r y el u so d e o p e ra d o re s ló g ic o s re la c ió n a le s , y s e p re s e n ta n a lg u n o s e je m p lo s. E n el c a p ítu lo 3 s e m u e s tra n lo s p rim e ro s p ro g ra m a s c o n u n a e s tru c tu ra
www.FreeLibros.me
x iv
Presentación
de c o n tro l (se c u e n c ia c ió n ) y s e m e n c io n a n la s b ib lio te c a s d e u so c o m ú n . El c a p ítu lo 4 d e sc rib e la s e stru c tu ra s d e c o n tro l se le c tiv a s y su s d ife re n te s fo rm a s de a p lic a rla s: s im p le , d o b le , c o n a n id a m ie n to s y m ú ltip le . E l c a p ítu lo 5 c o n tie n e las e s tru c tu ra s d e c o n tro l re p e titiv a s w h iie , d o -w h íle y f o r , y s e in d ic a e n q u é c a so es p re fe rib le u s a r c a d a u n a. E l c a p ítu lo 6 p re s e n ta lo s d a to s e stru c tu ra d o s tip o a rra y y m u e s tra la d ife re n c ia e n tre a rre g lo s u n id im e n sio n a le s y b id im e n s io n a le s , y a rre g lo s d e c a ra c te re s; el c a p ítu lo 7 d e sc rib e el d a to e s tru c tu ra d o s t r u c t c o m o a q u e l q u e p u e d e c o n te n e r d ife re n te s tip o s d e d a to s , a d e m á s d e u n a in tro d u c c ió n al m a n e jo d e a p u n ta d o re s . E l c a p ítu lo 8 d e sc rib e la s fu n c io n e s, m o s tra n d o p o r se p a ra d o la s q u e d e v u e lv e n u n v a lo r d e a q u e lla s q u e al s e r in v o c a d a s re q u ie re n in fo rm a c ió n (p a rá m e tro s). E l c a p ítu lo 9 s e c o m p o n e d e u n c o n ju n to d e e je rc ic io s a g ru p a d o s e n e s tru c tu ra s d e c o n tro l, e s tru c tu ra s d e d a to s y fu n c io n e s. E stas a p lic a c io n e s e s tá n o rie n ta d a s a d ife re n te s c a rre ra s d e in g e n ie ría . F in a lm e n te , s e a n e x a u n lis ta d o d e to d o s lo s e je rc ic io s y d e lo s e je m p lo s q u e se in c lu y e n e n el lib ro .
www.FreeLibros.me
Introducción al lenguaje C
E ste libro a b o rd a el d esarro llo d e p ro g ram as e n le n g u a je de p rogram ación C . E s tá p la n e a d o p a ra u tiliz a rs e e n u n c u rs o d e u n se m e s tre d e tre s h o ra s p o r se m a n a . E n e s te c a p ítu lo re p a sa re m o s p rim e ro lo s c o n c e p to s d e la s c ie n c ia s d e la c o m p u ta c ió n , p a ra d e sc rib ir d e sp u é s lo s e le m e n to s d e u n p ro g ra m a e s c rito en le n g u a je C , lo s d a to s, a s í c o m o in stru c c io n e s d e e n tra d a y s a lid a d e lo s m ism o s.
1.1 Conceptos U n a com putadora es u n d isp o sitiv o e le c tró n ic o q u e p ro c e s a d ato s (u n p ro g ra m a re p re s e n ta d o e n c ó d ig o d e m á q u in a ). L a c o m p u ta d o ra está fo rm a d a p o r a lg ú n tip o d e d is p o s itiv o d e e n tra d a (c o m ú n m e n te
www.FreeLibros.me
Capítulo 1
In troducción al le n g u a je C
el te c la d o ) , u n o o v a rio s d e s a lid a (c o m o u n m o n ito r), la u n id a d c e n tra l de p ro c e sa m ie n to (C P U , c e n tra l p r o c e s s in g u n it) y c h ip s d e m e m o ria c o n o c id a c o m o m e m o ria in te rn a , p rin c ip a l o R A M ( ra n d o m a c c e s s m e m o r y ). Es im p o rta n te re c o rd a r q u e la c o m p u ta d o ra fu n c io n a c o n al m e n o s d o s tip o s de m e m o ria : la in te rn a , p rin c ip a l o R A M , y a lg ú n d isp o sitiv o d e m e m o ria e x te rn a (o se c u n d a ria ). L a p rim e ra es a la q u e el p ro c e s a d o r a c c e d e p a ra re a liz a r sus o p e ra c io n e s; la se g u n d a s e e m p le a p a ra a lm a c e n a r a rc h iv o s d e m a n e ra p e rm a n e n te . E n la m e m o ria in te rn a s e c a rg a n lo s d a to s y el p ro g ra m a e n le n g u a je m á q u in a q u e e je c u ta rá la C P U (a l p ro g ra m a q u e e s tá e n e s ta d o d e e je c u c ió n s e le lla m a proceso). L a m e m o ria e x te rn a o s e c u n d a ria es c u a lq u ie r d is p o s itiv o de a lm a c e n a m ie n to — d isc o s fle x ib le s, C D , D V D , c in ta s m a g n é tic a s , m e m o ria flash, B lu eR ay , e tc é te ra — e n el q u e es p o sib le a lm a c e n a r a rc h iv o s.
1.2 Lenguajes utilizados en una com putadora E n u n a c o m p u ta d o ra s e u tiliz a n d ife re n te s tip o s d e le n g u a je s , a lg u n o s e m p le a d o s d ire c ta m e n te p o r el u su a rio , y o tro s q u e s ó lo e n tie n d e la c o m p u ta d o ra . L o s p rim e ro s s e c o n o c e n c o m o le n g u a je s d e a lto n iv el, y s e u sa n p a ra re a liz a r la p ro g ra m a c ió n d e u n s is te m a o p e ra tiv o o d e u n s im p le p ro g ra m a q u e h a g a u n a cu e n ta ; lo s o tro s lo s e m p le a d ire c ta m e n te la c o m p u ta d o ra , y a q u e e s tá n e n un le n g u a je in c o m p re n s ib le p a ra lo s h u m a n o s. A c o n tin u a c ió n s e d e sc rib e n .
Los lenguajes de alto nivel g e n e ra lm e n te s e c o n o c e n c o m o le n g u a je s d e p ro g ra m a c ió n . C o n e llo s s e “ re d a c ta ” e n u n le n g u a je s im ila r al n u e stro , a u n q u e la m a y o ría s e e n c u e n tra n e n in g lé s. T ie n e n la v e n ta ja de s e r p o rta b le s , es d e cir, p u e d e n e n te n d e rs e y e je c u ta rs e e n d iv ersas c o m p u ta d o ra s; p o r o tro la d o , e sto s le n g u a je s p u e d e n s e r c o m p ila d o re s o in té rp re te s . U n in térp rete to m a u n a in s tru c c ió n d e l p ro g ra m a , la tra d u c e a le n g u a je m á q u in a y la e je c u ta . E s te p ro c e s o s e re p ite c o n c a d a u n a d e la s in s tru c c io n e s del p ro g ra m a ; el in té rp re te m á s p o p u la r es B a sic . U n com pilador to m a las in stru c c io n e s e s c rita s e n u n le n g u a je d e a lto n iv el, y las tra d u c e a le n g u a je in te rm e d io (c ó d ig o o b je to ), q u e d e sp u é s s e tr a d u c e a le n g u a je m á q u in a c re a n d o u n a rc h iv o q u e c o n tie n e el p ro g ra m a e je c u ta b le . El le n g u a je C es u n c o m p ila d o r.
www.FreeLibros.me
1.3 Etapas d e d e sa rro llo d el so ftw a re
E l lenguaje ensam blador, o sim p le m en te en sam b lad o r, es u n le n g u a je d e b a jo nivel qu e s e p ro g ram a se g ú n las in stru ccio n es q u e tiene definidas el procesador. E l lenguaje m áq u in a es u n p ro g ra m a e s c rito e n c e ro s y u n o s, m u y le ja n o a n u e stra fo rm a d e e x p re sió n , p e ro es el ú n ic o q u e e n tie n d e el p ro ce sa d o r. U n p ro g ram a es u n c o n ju n to d e in s tru c c io n e s q u e tie n e u n o b je tiv o e sp e c ífic o . L as in s tru c c io n e s e stá n e s c rita s u s u a lm e n te e n a lg ú n le n g u a je de c o m p u ta d o ra ; d e sp u é s, el p ro g ra m a s e tra d u c e a c ó d ig o o b je to y fin a lm e n te a le n g u a je m á q u in a , q u e es el ú n ic o q u e la c o m p u ta d o ra e n tie n d e ; é s te se c a rg a e n la m e m o ria p rin c ip a l d e la c o m p u ta d o ra p a ra s e r e je c u ta d o p o r la C P U ; el re s u lta d o s o n la s a c c io n e s p a ra lo q u e fu e e sc rito . H a y d o s g ra n d e s tip o s d e p ro g ra m a s: lo s d e a p lic a c ió n y lo s de siste m a s. L o s d e a p lic a c ió n s o n lo s m á s c o n o c id o s y s e u tiliz a n d ire c ta m e n te en la c o m p u ta d o ra c o m o lo s p ro c e sa d o re s d e p a la b ra s y la s h o ja s d e c á lc u lo . Los d e siste m a s s o n u n c o n ju n to d e p ro g ra m a s q u e p e rm ite n q u e e x ista u n a in terfaz d e c o m u n ic a c ió n a m ig a b le e n tre el u su a rio y la c o m p u ta d o ra , alg u n o s eje m p lo s son: lo s siste m a s o p e ra tiv o s , lo s c o m p ila d o re s, e tc é te ra .
P ro g ram a d o r es el té r m in o u tiliz a d o p a ra d e n o m in a r a la p e rs o n a d e d ic a d a a e sc rib ir p ro g ra m a s. F re c u e n te m e n te , u n a a p lic a c ió n o s is te m a s e e la b o ra p o r e q u ip o s e n te ro s d e p ro g ra m a d o re s. S e d e n o m in a softw are a lo s p ro g ra m a s u tiliz a d o s e n u n a c o m p u ta d o ra .
1.3 Etapas de desarrollo del softw are P b r lo g e n e ra l, el d e s a rro llo o c o n s tru c c ió n d e u n p ro g ra m a a b a rc a la s sig u ie n te s etapas: A n á lisis Diseño Programación Codificación Prueba Mantenim iento D ocument aci ón
El a n á lis is y d is e ñ o d e p e n d e n d e l ta m a ñ o y la fin alid a d d e l p ro g ra m a ; la p ro g r a m a c ió n es e sc rib ir la so lu c ió n p ro p u e s ta e n el id io m a n a tiv o , la co d ifica ció n consiste e n escrib ir el p ro g ram a c o n instrucciones e n u n len g u aje d e p ro g ram ació n , en
www.FreeLibros.me
Capítulo 1
In troducción al le n g u a je C
este c a s o e n C , c o n sid e ra n d o el d is e ñ o (m ó d u lo s, a lg o ritm o s , d ia g ra m a s). E n o casio n e s s e e m p le a in d is tin ta m e n te c o d ific a c ió n y p ro g r a m a c ió n p ara d e sig n a r esta fa se d e l p ro c e so . P o ste rio rm e n te s e c o m p ila y p ru e b a el c ó d ig o ; s e re su e lv e n los e rro re s d e sin tax is, e n c a so d e ex istir, y d e lo c o n tra rio s e p ro c e d e a la e je c u c ió n del p ro g ra m a p a ra p ro b a rlo y v erificar q u e s e o b te n g a lo p lan e ad o . S e d e te c ta n y c o rrig e n los p o sib le s e rro res d e ló g ic a. U n a v ez te rm in a d o el p ro g ra m a , p u e d e re q u e rir m a n te n im ie n to p a ra re a liz a r c a m b io s o a ju ste s re la tiv a m e n te p e q u eñ o s. L a c o m p ila c ió n c o n s is te e n c o n v e rtir el p ro g ra m a e s c rito e n C a le n g u a je m á q u in a (C u tiliz a u n e n la z a d o r d e b ib lio te c a s o lin k er). A l fin a liz a r s e c re a u n a rc h iv o e je cu tab le : es el q u e s e u tiliz a rá p a ra e je c u ta r ( “ c o rre r” ) el p ro g ra m a .
1.4 El lenguaje C “C es u n le n g u a je d e p ro g ra m a c ió n d e p ro p ó s ito g e n e ra l, a s o c ia d o d e m o d o u n iv ersal al s is te m a o p e ra tiv o U N IX .” [Jo y a n es]. C es u n le n g u a je d e a lto n iv el, a u n q u e ta m b ié n s e u tiliz a p a ra la p ro g ra m a c ió n de s is te m a s , y a q u e c o n tie n e in s tru c c io n e s p a ra el c o n tro l a b a jo n iv el. E s u n a e v o lu c ió n d e lo s le n g u a je s B y B C P L , lo s c u a le s c a re c ía n d e la c a p a c id a d p a ra m a n e ja r tip o s d e d a to s, u n a d e sv e n ta ja p a ra el p ro g ra m a d o r. E sto s tre s le n g u a je s fu e ro n u tiliz a d o s e n lo s la b o ra to rio s B e ll p a ra c re a r e l s is te m a o p e ra tiv o U N IX . E n 1978, c o n la p u b lic a c ió n d e l lib ro T h e C P ro g ra m m in g L a n g u a g e , e s c rito p o r B ria n K e rn ig h a n y D e n n is R itc h ie , s e in ic ió fo rm a lm e n te el u so d e l le n g u a je C. A n te el a u g e d e e s te n u e v o le n g u a je , fu e n e c e sa rio e s c rib ir u n e s tá n d a r q u e c u b rie ra la s n e c e sid a d e s d e c o m p a tib ilid a d y p o rta b ilid a d . E l e s tá n d a r fu e a p ro b a d o e n 1 9 8 9 p o r el c o m ité té c n ic o X 3 J 11, d e l A m e ric a n N a tio n a l S ta n d a rd s C o m m itte o n C o m p u te rs a n d In fo rm a tio n P ro c e ssin g . El le n g u a je C h a e v o lu c io n a d o a C + + (c re a d o p o r B ja rn e S tro u s tru p e n 1986) y a o tro s le n g u a je s q u e c o n se rv a n c a ra c te rís tic a s d e C , c o m o Ja v a .
1.5 Elem entos de un program a en C (conceptos básicos) U n p ro g ra m a c o n tie n e v a rio s e le m e n to s (a u n q u e n o es o b lig a to rio q u e to d o s e sté n p resen te s sie m p re ). A c o n tin u a c ió n s e m e n c io n a n lo s m á s u su a le s.
www.FreeLibros.me
1.5 Elem entos d e un p rogram a en C (conceptos básicos)
1.5.1 Identificadores E n u n p ro g ra m a s ie m p re o p e ra n d iv e rso s e le m e n to s c re a d o s p o r el p ro g ra m a d o r (v a ria b le s, c o n sta n te s , fu n c io n e s , e tc é te ra ) o b ie n c re a d o s e n b ib lio te c a s d e fu n c io n e s (c o m ú n m e n te lla m a d a s lib re ría s ) ju n to c o n el le n g u a je , c o m o la fu n c ió n p r i n t f . C a d a u n o d e e sto s e le m e n to s re q u ie re u n n o m b re e x c lu siv o p a ra d ife re n c ia rs e d e o tro s e le m e n to s u sa d o s e n el m is m o p ro g ra m a ; a d ic h o s n o m b re s se les lla m a id e n tific a d o re s. E n C s e s ig u e n c ie rta s reg la s p a ra fo rm a r los id e n tific a d o re s: • U n id e n tific a d o r s e fo rm a a p a rtir d e d íg ito s, le tra s y el c a rá c te r d e su b ra y a d o (g u ió n b a jo ); n o s e p u e d e u tiliz a r n in g ú n o tro c arác ter. • E l p rim e r c a rá c te r d e u n id e n tific a d o r s ie m p re d e b e s e r u n a le tra . A u n q u e ta m b ié n e s tá p e rm itid o u tiliz a r el g u ió n b a jo c o m o p rim e r c a rá c te r, n o es m u y co m ú n ; m á s bien s e e m p le a p a ra fo rm a r id en tificad o res c o n m ás d e u n a p a la b ra . N o s e p u e d e u tiliz a r u n d íg ito c o m o p rim e r c a rá c te r e n u n id en tific ad o r. • E l n ú m e ro d e c a ra c te re s p u e d e s e r ilim ita d o ; es d e cir, d e sd e u n o h a s ta los q u e el u s u a rio q u ie ra ; s in e m b a rg o a lg u n o s c o m p ila d o re s d e C re c o n o c e n ú n ic a m e n te lo s p rim e ro s 8 c a ra c te re s y e n o tro s c a so s p u e d e re c o n o c e r h a sta 3 1. U n c o n s e jo es q u e los id e n tific a d o re s s e a n lo m á s c o m p a c to s p e ro ta m b ié n se a n c la ra m e n te d e sc rip tiv o s. • E s p o s ib le u tiliz a r le tra s m a y ú s c u la s y m in ú s c u la s , p e ro s e re c o m ie n d a un e m p le o c o n s is te n te , y a q u e el le n g u a je C es s e n s ib le a m a y ú s c u la s y m in ú s c u la s , es d e cir, u n a ‘a ’ es d ife re n te d e u n a ‘A’. • N o s e p u e d e n u tiliz a r p a la b ra s re se rv a d a s d e C c o m o id e n tific a d o re s; ta m p o c o sím b o lo s o e sp a c io s e n b la n c o . A c o n tin u a c ió n s e m u e s tra n e je m p lo s d e id e n tific a d o re s v á lid o s: A
Nombre
Nombre_alumno
X1
a
_codigo
CODIGO
resultado_3
A h o ra s e m u e s tra n e je m p lo s d e id e n tific a d o re s n o v á lid o s y la ra z ó n . Identificador
Explicación
3i d
E l p r i m e r c a r á c t e r debe s e r una l e t r a
Al umno#
El
c a r á c t e r # no e s p e r m i t i d o
C od i go alumno
El
e s p a c i o en b l a n c o no es p e r m i t i d o
C o di g o -a l u mn o
El
carácter
- no e s p e r m i t i d o
"a l u m n o "
El
carácter
" no e s p e r m i t i d o
www.FreeLibros.me
Capítulo 1
In troducción al le n g u a je C
1.5.2 Tipos de datos E n u n p ro g ra m a s ie m p re s e p ro c e s a n d a to s, lo s c u a le s p u e d e n s e r d e d istin ta n a tu ra le z a . D e p e n d ie n d o d e s u tip o , s e re p re s e n ta rá y a lm a c e n a rá el d a to e n la m e m o ria d e la c o m p u ta d o ra d e u n a m a n e ra e sp e c ífic a ; es d e cir, el tip o d e d a to d e te rm in a la c a n tid a d d e m e m o ria re q u e rid a p a ra a lm a c e n a rlo . A c o n tin u a c ió n se lista n lo s tip o s d e d ato s b á sic o s d e C , a s í c o m o la c a n tid a d d e m e m o ria q u e p u e d e re q u e rir c a d a u n o . C a b e s e ñ a la r q u e estas c a n tid a d e s s o n la s m á s u s u a le s , y a q u e p u e d e n v a ria r d e u n c o m p ila d o r a o tro ; el ra n g o d e a lg u n o s d e e sto s tip o s d e d ato s b á sic o s p u e d e n v a ria r si s e u tiliz a n lo s m o d ific a d o re s d e tip o c o m o sh o rt, lo n g , sig n e d , u n sig n e d . L os tip o s d e d a to s b á s ic o s (o p rim itiv o s ) son: char in t float do u b le
E n la ta b la 1.1 s e m u e s tra n tip o s d e d a to s b á sic o s c o n m o d ific a d o re s , el ta m a ñ o en b y te s y el ra n g o d e v a lo re s q u e u su a lm e n te u tiliz a n .
1.5.3 Variables P a ra p o d e r e je c u ta r u n p ro g ra m a , es n e c e s a rio q u e lo s d a to s e s té n a lm a c e n a d o s, ju n to c o n la s in stru c c io n e s, e n la m e m o ria . M u c h a s v e c e s, d ic h o s d a to s s o n p ro p o rc io n a d o s p o r el u s u a rio d e l p ro g ra m a d u ra n te la e je c u c ió n d e l m is m o o b ie n s e rá n el re s u lta d o d e l p ro c e s a m ie n to d e o tro s d a to s. E s d e c ir, n o s ie m p re es el p ro g ra m a d o r q u ie n d e fin e lo s d a to s , y su s v a lo re s n o s ie m p re s e c o n o c e n de a n te m a n o . ¿ C ó m o e n to n c e s s e p u e d e a lm a c e n a r d a to s q u e n o s e c o n o c e n d e sd e el in ic io ? C o n el u so d e v a ria b le s. U n a v a ria b le es u n e s p a c io e n la m e m o ria q u e el p ro g ra m a d o r re s e rv a c o n el fin d e a lm a c e n a r e so s d a to s “ d e s c o n o c id o s ” c u a n d o e m p ie z a la e je c u c ió n d e un p ro g ra m a o q u e p u e d e n ir c a m b ia n d o d u ra n te e s e p ro c e so . P a ra p o d e r re s e rv a r tan to s e sp a c io s c o m o s e re q u ie ra n es n e c e s a rio d e c la ra r la s v a ria b le s. D e claració n d e variables L a d e c la ra c ió n d e v a ria b le s c o n s is te e n re s e rv a r lo s e sp a c io s d e m e m o ria q u e re q u ie re el p ro g ra m a p a ra su e je c u c ió n ; p a ra e llo es n e c e s a rio e s p e c ific a r e l tip o de d a to , a s í c o m o el id e n tific a d o r c o n q u e s e le h a rá re fe re n c ia p o ste rio rm e n te .
www.FreeLibros.me
1.5 Elem entos d e un p rogram a en C (conceptos básicos)
Ta b l a 1.1 Tipos de datos y m odificadores Cantidad de m e m o ria Tipo
Descripción
void
Define v a c í o o v a l o r NULL. Al macena un c a r á c t e r .
char
requerid a
Rango
1 byte
-128 a 127
1 byte
0 a 255
2 bytes
-32767 a 32768
2 bytes
0 a 65, 53 5
2 bytes
-32767 a 32768
Puede
a lm a c e n a r un v a l o r c on s i g n o .
unsigned
Al macena un c a r á c t e r o un v a l o r
char
s in signo. Define un v a l o r n u m é r i c o e n t e r o
in t
(sin fr a c c ió n ) .
unsigned i n t
V alor entero s i n
signo.
Entero co rto ,
puede s e r i g u a l
al i n t o a l a
mitad.
short i n t En p u n t o f l o t a n t e ( p uede s e r float
una f r a c c i ó n
4 bytes
o un e n t e r o con
3.4x10+38
exponente). En p u n t o f l o t a n t e d e l tamaño d e l double
3.4x10-38 a
d o b l e de
float (más c i f r a s
s ig n i f i c a t iv a s para l a
1. 7x10-308 a
fra cció n
8 bytes
1. 7x10 +308
o mayor p a r a e l e x p o n e n t e ) . Define un e n t e r o c on s i g n o , long
u s u a l me nt e d e l
-2,147,483,648 a
d o b l e de tamaño
4 bytes
2, 147, 4 8 3 , 64 7
al in t. Entero s in
unsigned
signo.
4 bytes
0 a 4,294,967,295
long lo n g double
Incrementa e l
tamaño d e l
10 b y t e s
doublé.
3.4x10-4932 a 1.1x10+4932
L a sin ta x is p a ra la d e c la ra c ió n d e v a ria b le s e n C .
;
E je m p lo s d e d e c la ra c ió n d e v a ria b le s: in t
a;
Se r e s e r v a un e s p a c i o en l a memori a l l a m a d o " a " , c on c a p a c i d a d p a r a un e n t e r o .
www.FreeLibros.me
Capítulo 1
float b , c , d ;
In troducción a l le n g u a je C
Se r e s e r v a n 3 e s p a c i o s
en l a
memoria p a r a g u a r d a r 3 números
r e a l e s , a l o s c u a l e s s e h a c e r e f e r e n c i a m e d i a n t e " b " , " c " y "d " respectivam ente. char j ;
Se
reserva
un
espacio
en
la
memoria
para
poder
alm acenar
c u a l q u i e r c a r á c t e r y s e puede h a c e r r e f e r e n c i a a e s t e e s p a c i o mediante e l i d e n t i f i c a d o r
"j".
C ó m o reservar m em oria R e c u e rd e q u e la m e m o ria es u n c o n ju n to d e c eld as d ire c c io n a b le s; e s decir, se p u e d e te n e r a c c e so a c a d a u n a m e d ia n te s u d irec ció n y e n ellas p u e d e a lm a c e n a r datos. C u a n d o s e d e c la ra u n a v a ria b le e n u n c o m p ila d o r c o m o C , el p ro g ra m a d o r no n e c e sita c o n o c e r la d ire c c ió n a b so lu ta d e la c e ld a o las c e ld a s e n la s q u e v a a a lm a c e n a r lo s d a to s d e s u p ro g ra m a ; s im p le m e n te d e c la ra su s v a ria b le s y el c o m p ila d o r s e e n c a rg a d e l resto . L a sig u ie n te fig u ra m u e s tra d e m a n e ra d e sc rip tiv a (n o e x a c ta ) c ó m o q u e d a ría la m e m o ria lu e g o d e h a b e r d e c la ra d o g rá fic a m e n te las v a ria b le s d e los e je m p lo s a n te rio re s. 0
2
1
3
4
a
a 14
10
11
12
13
b
b
b
b
20
21
22
23
d
d
5
6
7
8
9 j
15
16
17
18
c
c
c
c
24
25
26
27
28
d
d
19
-
S u p o n ie n d o q u e c a d a c e ld a m id ie ra u n b y te , los e sp a c io s so m b re a d o s re p re se n ta n la re se rv a c ió n d e m e m o ria q u e s e h a h e c h o d e a c u e rd o c o n la d e c la ra c ió n de v a ria b le s d e lo s e je m p lo s. E l id e n tific a d o r a o c u p a la s c e ld a s 3 y 4 (2 b y te s p o r se r e n tero ). D e ig u al fo rm a s e re se rv a ro n las c eld as 10, 11, 12 y 13 (4 b y te s p o r s e r un v a lo r rea l) p a ra el id e n tific a d o r b , a s í c o m o la s c e ld a s d e la 15 a la 18 p a ra c y d e la 2 2 a la 25 p a ra
d\
fin a lm e n te s e re s e rv ó la c e ld a 9 (1 b y te p o r s e r c a rá c te r) p a ra
j.
O b s e rv e q u e se a s ig n a ro n los e sp a c io s a rb itra ria m e n te , d a d o q u e e n la re a lid a d las v a ria b le s n o n e c e s a ria m e n te q u e d a rá n d e m a n e ra c o n se c u tiv a e n la m e m o ria ; lo q u e im p o rta es q u e e x is ta e sp a c io s u fic ie n te p a ra las v a ria b le s a d eclarar. R e su m ie n d o : u n a v a ria b le es u n e sp a c io e n la m e m o ria c u y o c o n te n id o p u e d e c a m b ia r d u ra n te la e je c u c ió n d e u n p ro g ra m a ; es d e cir, c u a n d o d e c la ra m o s u n a
www.FreeLibros.me
1.5 Elem entos d e un p rogram a en C (conceptos básicos)
v a ria b le , s e a s ig n a u n e s p a c io e n la m e m o ria p a ra a lm a c e n a r e n él a lg ú n v a lo r q u e sa b e m o s p u e d e c a m b ia r d u ra n te el p ro c e s a m ie n to d e d a to s q u e el p ro g ra m a lle v a rá a c a b o c u a n d o s e e je c u te .
1.5.4 Constantes L as c o n sta n te s s o n e le m e n to s fre c u e n te m e n te u tiliz a d o s e n lo s p ro g ra m a s ; si ya q u e d ó c la ro el c o n c e p to d e v a ria b le , s e rá m á s se n c illo e x p lic a r el d e c o n sta n te . U n a c o n s ta n te es u n e s p a c io e n m e m o ria q u e re c ib e u n v a lo r p o r p rim e ra v e z y g e n e ra lm e n te n o s e m o d ific a d u ra n te la e je c u c ió n d e u n p ro g ra m a . U n a c o n sta n te s e u tiliz a c u a n d o s e c o n o c e d e a n te m a n o el v a lo r d e a lg ú n d a to p e ro a d e m á s s e s a b e q u e e s te d a to n o d e b e c a m b ia r. P o r e je m p lo s e p u e d e p e n sa r q u e e n u n p ro g ra m a (n o im p o rta p a ra q u é sirv a é ste ) s e re q u ie re tra b a ja r c o n el v a lo r d e
tt;
sa b e m o s q u e tt g e n e ra lm e n te m a n e ja el v a lo r d e 3 .1 4 1 6 y q u e n o p u e d e te n e r o tro . S e ría iló g ic o p e n s a r e n re s e rv a r u n e s p a c io p a ra u n a v a ria b le si d ic h o v a lo r n o tie n e p o r q u é c a m b ia r e n el tra n s c u rs o d e l p ro g ra m a ; d e e s ta fo rm a , lo m á s c o n v e n ie n te s e ría d e fin ir u n a c o n sta n te p a ra a lm a c e n a r 3 .1 4 1 6 . E n C , la s c o n sta n te s s e c re a n u tiliz a n d o la d ire c tiv a d e l p re p ro c e s a d o r
ttdefine
(c o n sta n te s sim b ó lic a s d e fin id a s) o b ie n la p a la b ra re s e rv a d a c o n st (c o n s ta n te s sim b ó lic a s d e c la ra d a s). La co nstante sim b ó lica t t d e f i n e E n el le n g u a je C ,
ttdefine
s e u tiliz a p a ra d e c la ra r c o n sta n te s s im b ó lic a s y c re a r
m a c ro s. E n e s te lib ro s ó lo s e u tiliz a rá p a ra d e fin ir c o n sta n te s , m e d ia n te la sig u ie n te sin ta x is: ttdefine < i d e n t i f i c a d o r >
E je m p lo s d e c o n sta n te s sim b ó lic a s: ttdefine SALUDO "H o l a a t o d o s " ttdefine P I 3.1 41 6 ttdefine NP 1506 ttdefine CAR ' a'
Los n o m b re s sim b ó lic o s s o n lo s id e n tific a d o re s; el p re p ro c e s a d o r d e C su stitu y e lo s v a lo re s “ H o la a to d o s ” , 3 .1 4 1 6 , 1506 y ‘a ’ c a d a v e z q u e se e n c u e n tra e n u n p ro g ra m a el n o m b re d e la s c o n sta n te s s im b ó lic a s S A L U D O , PI, N P y C A R , re sp e c tiv a m e n te .
www.FreeLibros.me
Capítulo 1
In troducción a l le n g u a je C
O b s e rv e q u e a las c o n sta n te s c re a d a s c o n
»define ,
n o es n e c e s a rio e sp e c ific a rle s el
tip o d e d a to q u e d e b e rá n te n e r; estas c o n sta n te s a d q u ie re n su tip o d e p e n d ie n d o de la n a tu ra le z a d e l v a lo r a sig n a d o . A s í, las c o n sta n te s d e fin id as a n te rio rm e n te son:
NP
constante entera,
PI
constante r e a l ,
CAR
c o n s t a n t e de c a r á c t e r ,
SALUDO
constante
de
ya qu e r e p r e s e n t a l a
representa l a
c a d e na
de
c a n t i d a d de 1506.
c a n t i d a d de 3 .1 41 6.
y a que r e p r e s e n t a a l a caracteres,
le tra
representa
la
'a'. secuencia
"H o l a a t o d o s " .
C u a n d o s e u tiliz a »define p a ra c re a r c o n sta n te s, e n re a lid a d lo s v a lo re s n o o c u p a n u n e s p a c io e n la m e m o ria c o m o e n el c a s o d e la s v a ria b le s, s in o q u e el c o m p ila d o r su s titu y e c a d a o c u rre n c ia d e l n o m b re sim b ó lic o p o r s u re s p e c tiv o valor, a n tes d e a n a liz a r s in tá c tic a m e n te el p ro g ra m a fu en te . D ic h o d e o tro m o d o , c a d a v e z q u e a lg u n a in s tru c c ió n u tilic e el id e n tific a d o r N P, é ste s e rá s u s titu id o p o r el 1 5 0 6 co n q u e fu e d efinido. La co nstante num érica c o n s t P o r o tro la d o , u n a c o n s ta n te ta m b ié n se p u e d e c re a r u tiliz a n d o la p a la b ra re s e rv a d a
const;
si s e p ro c e d e d e e s ta m a n e ra , el d a to o c u p a u n e sp a c io en
m e m o ria c o m o si fu e ra u n a v a ria b le , e x c e p to p o rq u e s u c o n te n id o n o c a m b ia . L a sin ta x is p a ra d e c la ra r u n a c o n s ta n te
const
es:
< t i p o de d a t o > < i d e n t i f i c a d o r > = ;
E jem p lo s: c o n s t i n t NP=1506; c o n s t f l o a t P I =3 . 1 4 1 6 ; c o n s t c h a r CAR='a'; c o n s t c h a r SALUDO[ ]= " H o l a a t o d o s " ;
L as d e c la ra c io n e s a n te rio re s p o d ría n u tiliz a rse e n lu g a r d e l #define, la d ife re n c ia c o n siste e n q u e
const
tie n e u n e s p a c io d e m e m o ria re s e rv a d o p a ra c a d a dato;
a d e m á s d e s u sin ta x is, o b s e rv e q u e c o n s t s í e sp e c ific a el tip o d e d a to d e c ad a v a lo r; s e u tiliz a el o p e ra d o r = p a ra a s ig n a r d ic h o v a lo r y a d e m á s c a d a se n te n c ia (o in stru c c ió n ) te rm in a c o n ;.
www.FreeLibros.me
1.6 Entrada y salida d e datos
1.5.5 Palabras reservadas L as p a la b ra s re se rv a d a s d e C s o n a q u e lla s c u y o sig n ific a d o s e e n c u e n tra d e fin id o en el le n g u a je : y a tie n e n u n u so e sp e c ífic o . É sta s s e e s c rib e n e n la s in stru c c io n e s de lo s p ro g ra m a s. L as p a la b ra s re s e rv a d a s d e C son: auto
double
in t
struct
break
else
long
switch
case
enum
re g iste r
typedef
char
extern
return
unión
const
float
short
unsigned
continue
for
signed
void
de fau lt
goto
size o f
v o la tile
do
if
sta tic
w hile
O b se rv e q u e la lis ta d e p a la b ra s re se rv a d a s e s tá e s c rita e n le tra s m in ú s c u la s ; y ju s ta m e n te a s í s e d e b e n u tiliz a r p a ra q u e c u m p la n s u p ro p ó s ito d e n tro d e un p ro g ra m a . A u n q u e es p o s ib le u tiliz a r c u a lq u ie ra d e e llas e s c rita e n m a y ú sc u la s c o m o id e n tific a d o r, e s to n o s e re c o m ie n d a e n la p rá c tic a .
1.5.6 Com entarios Los c o m e n ta rio s s o n c a d e n a s d e c a ra c te re s o te x to q u e d e s c rib e n p a rte s del p ro g ra m a q u e el p ro g ra m a d o r d e s e a e x p lic a r; d ic h o te x to n o es p a rte d e l p ro g ra m a fu en te , s in o u n a d e s c rip c ió n d e l m is m o . L o s c o m e n ta rio s g e n e ra lm e n te e stá n d irig id o s a o tro s p ro g ra m a d o re s, n o a lo s u su a rio s. P úra p o d e r u s a r c o m e n ta rio s e n u n p ro g ra m a e n C y q u e el c o m p ila d o r n o los c o n sid e re c o m o in stru c c io n e s d e l p ro g ra m a fu e n te , s e u tiliz a n lo s sím b o lo s /* y * / p a ra e n c e rra r el tex to : / * . . . t e x t o . . . */.
1.6 Entrada y salida de datos U n p ro g ra m a es u n c o n ju n to d e in s tru c c io n e s q u e la c o m p u ta d o ra e je c u ta co n el fin d e o b te n e r u n re s u lta d o o b ie n la s o lu c ió n a u n p ro b le m a d e te rm in a d o . C asi sie m p re , e s te re s u lta d o s e o b tie n e a p a rtir d e l p ro c e s a m ie n to d e lo s d ato s. G e n e ra lm e n te , lo s d a to s d e p e n d e n d e l u s u a rio y é s te te n d r á q u e c o n o c e r los
www.FreeLibros.me
Capítulo 1
In troducción al le n g u a je C
re su lta d o s d e l p ro g ra m a q u e e s tá u tiliz a n d o . P a ra e llo s e re q u ie re c o n ta r co n in stru c c io n e s q u e p e rm ita n a lo s u su a rio s in tro d u c ir d a to s y o tra s q u e p e rm ita n m o stra r lo s re s u lta d o s g e n e ra d o s p o r lo s p ro g ra m a s. El le n g u a je C c u e n ta c o n la s fu n c io n e s s c a n f ( ) y p r i n t f ( ) p a ra e n tra d a y sa lid a de d a to s re s p e c tiv a m e n te , la s c u a le s s e p u e d e n u tiliz a r a g re g a n d o el a rc h iv o de c a b e c e ra M n c lu d e < std io .h > .
1.6.1 Salida de datos L a c o m p u ta d o ra d is p o n e d e d iv e rso s m e d io s p a ra p ro p o rc io n a r la s a lid a de d a to s, c o m o la im p re s o ra , a rc h iv o s o el m á s u tiliz a d o : el m o n ito r. P re c is a m e n te la fu n c ió n
p rin tf(
) s e u tiliz a p a ra m o s tra r d a to s a trav é s d e e ste d is p o s itiv o . Su
sin tax is es la sig u ie n te : p rin tf("texto ,
cadena de c o n t r o l
de t i p o ",
argumentos);
d o n d e te x to y c a d e n a d e c o n tro l d e tip o s o n o p c io n a le s, d e p e n d ie n d o d e lo q u e s e d e se e m ostrar. C a d e n a d e c o n tro l es u n a c a d e n a d e carac tere s “ % tip o ” q u e in d ic a el tip o d e d a to a d e s p le g a r (lo re q u ie re la fu n c ió n
p rin tf
( )) . P o r o tro
la d o , a rg u m e n to o a rg u m e n to s es el v a lo r o lo s v a lo re s q u e s e p re te n d e m o stra r, y p u e d e n s e r v a ria b le s, c o n s ta n te s , e x p re sio n e s a ritm é tic a s , re s u lta d o s d e fu n c io n e s o sim p le m e n te te x to q u e e l p ro g ra m a d e b e m o s tra r al u su a rio . A c o n tin u a c ió n se m u e stra u n e je m p lo d e l u so y la e x p lic a c ió n . in t
a=7;
float b = 8 . 2 ; c h a r c = ' s 1;
p r i n t f ( n96d” , a ) ;
Se v i s u a l i z a
un 7, qu e e s e l
c o n t e n i d o de l a
v a r i a b l e a. p r i n t f ( "%c/",
a+b);
Se v i s u a l i z a un 15, y a qu e e s
la
suma de a
+b
m o s t r a d a como v a l o r e n t e r o , p r i n t f ( "% f",
a+b);
Se v i s u a l i z a un 15.2,
y a que e s l a
suma de
a +
b m o s t r a d a como v a l o r r e a l , p r i n t f ( "% c",
c);
Se v i s u a l i z a l a l e t r a de l a
p r i n t f C % c %c/ % f",
c,
a,b);
printf("H O LA");
v a r i a b l e c.
Se v i s u a l i z a la s
' s ' que e s e l c o n t e n i d o
s 7 8 . 2 que son l o s
v a r i a b l e s c,
a y b respectivam ente.
Se v i s u a l i z a l a p a l a b r a HOLA.
www.FreeLibros.me
v a l o r e s de
1.6 Entrada y salida d e datos
Ta b l a 1.2 Cadenas de control de tipo para salida Cadena de tipo
D e s cr ip ci ó n El
d a t o es un e n t e r o d e c i m a l
El
d a t o es un e n t e r o .
El
d a t o es un e n t e r o o c t a l .
El
d a t o es un e n t e r o h e x a d e c i m a l .
El
d a t o es un e n t e r o s i n
%c
El
d a t o es un c a r á c t e r
%e
El
d a t o es un r e a l e x p r e s a d o en b a s e y e x p o n e n t e ( f l o a t ) .
%f
El
d a t o es un r e a l e s c r i t o
El
d a t o es un r e a l
%2
%s
(in t).
s i g n o en d e c i m a l
(unsigned i n t ) .
(char).
con p u n t o d e c i m a l con s i g n o
(float).
(float).
E l d a t o e s una cadena de c a r a c t e r e s qu e f i n a l i z a co n e l carácter nulo
%lf
El
\0 .
d a t o es r e a l
de t i p o l o n g d o u b l e .
O b s e rv e q u e c u a n d o s e im p rim e te x to n o es n e c e s a rio u tiliz a r a lg u n a c a d e n a de tipo, s ó lo el te x to ta l c o m o s e d e s e a m o stra r, e n c e rra d o e n tre c o m illa s ( “ ” ). P a ra m o stra r v a ria b le s es n e c e s a rio u s a r la c a d e n a d e tip o a d e c u a d a , ta m b ié n d e n tro de la s c o m illa s. E n la ta b la 1.2 s e p re s e n ta n las d ife re n te s c a d e n a s d e tip o q u e se u tiliz a n e n C d e p e n d ie n d o d e lo s tip o s d e d a to s q u e s e d e s e a im p rim ir e n p a n ta lla . C o m o y a s e h a m e n c io n a d o ,
p rin tf(
) p u e d e m a n e ja r m á s d e u n a rg u m e n to , p a ra
ello es n e c e s a rio u s a r la s c a d e n a s d e tip o c o rre s p o n d ie n te s p o r c a d a a rg u m e n to q u e s e re q u ie ra v isu a liz a r, c o m o e n el e je m p lo sig u ie n te : p rin tff
, a, b, c ) ;
m u e stra e n p a n ta lla 7 8 .2 s, q u e s o n lo s v a lo re s q u e tie n e n a lm a c e n a d o s las v a ria b le s q u e s e u s a ro n c o n la fu n c ió n , p e ro la fo rm a e n q u e s e p re s e n ta n no es m u y c o n v e n ie n te , p u e s s e ría m á s p rá c tic o q u e h u b ie ra u n e s p a c io e n tre c ad a v alo r y n o m o s tra rlo s c o m o si fu e ra u n o so lo . ¿ C ó m o s e p u e d e s o lu c io n a r e s te p ro b le m a ? U tiliz a n d o s e c u e n c ia s d e e s c a p e , d e ta l m o d o q u e si m o d ific a m o s la lla m a d a a n te rio r así: p r i n t f ( U96d \ t %f \ t % c", a , b , c ) ;
www.FreeLibros.me
Capítulo 1
In troducción a l le n g u a je C
al e je c u ta r s e la in s tru c c ió n , m o stra ría lo sig u ie n te : 7
8.2
s
y a q u e la s e c u e n c ia d e e s c a p e \t q u e s e a ñ a d ió e n la lla m a d a a la fu n c ió n , in se rta u n a ta b u la c ió n e n c a d a lu g a r e n q u e es c o lo c a d a . L as se c u e n c ia s d e e s c a p e s o n ta m b ié n c a d e n a s d e c a ra c te re s q u e tie n e n un sig n ific a d o e sp e c ia l d e p e n d ie n d o d e la c a d e n a q u e s e u tilic e . L a ta b la 1.3 q u e se p re s e n ta a c o n tin u a c ió n m u e s tra la s se c u e n c ia s d e e s c a p e q u e u tiliz a el le n g u a je C , a s í c o m o su a cc ió n . A n a lic e m o s el sig u ie n te e je m p lo y s u salid a. p r i n t f ( ' ,96d \n \ t
\n \ t \ t %c",
a,b,c);
7 8.2
s
Ta b l a 1.3 Secuencias de escape S e c u e n c i a d e escape
Descripción
\a
Alarm a
\b
Retroceso
\f
A v a n c e de p á g i n a
\n
R e t o r n o de c a r r o y avan ce de l í n e a
\r
R e t o r n o de c a r r o
\t
Tabulación
\v
Tabulación v e r t i c a l
\\
Diagonal i n v e r t i d a
\?
S i g n o de i n t e r r o g a c i ó n
r
C o m illa s dobles
\ 000
Octal
\ xhh
Hexadecimal
\0
Carácter nulo
www.FreeLibros.me
1.6 Entrada y salida d e datos
L a s a lid a s e m o s tra ría d e e s ta m a n e ra y a q u e d e sp u é s d e im p rim ir e l v a lo r d e c ad a v a ria b le s e im p rim e u n “ e n t e r ” se g u id o d e u n tab u lad o r. T a m b ié n es p o s ib le q u e e n a lg u n o s c a so s s e te n g a q u e m o s tra r a lg ú n v a lo r d e n tro d e u n m e n s a je , c o m o en: p r i n t f ("E l
v a l o r de l a
v a r i a b l e a e s %c/", a ) ;
y e n p a n ta lla s e v e ría d e l s ig u ie n te m odo: E l v a l o r de l a
v a r i a b l e a es 7
p e ro si m o d ific a m o s la fu n c ió n así: p rin tf("% d Es e l
v a l o r de l a
v a r i a b l e a ",
a);
el re s u lta d o e n p a n ta lla sería: 7 Es e l
v a l o r de l a
v ariab le a
O b s e rv e q u e p re c is a m e n te e n el lu g a r q u e o c u p a la c a d e n a d e tip o d e n tro del te x to , es d o n d e a p a re c e rá el v a lo r d e la v a ria b le o el e le m e n to q u e s e v a a m o strar.
1.6.2 Entrada de datos L a e n tra d a d e d a to s, u o p e ra c ió n d e e s c ritu ra , s e p u e d e h a c e r a tra v é s d e d ife re n te s d isp o sitiv o s c o m o u n te c la d o o u n a rc h iv o , p o r e je m p lo . S in e m b a rg o , si s e u s a la fu n c ió n s c a n f ( ) s e tra ta d e u n a e n tra d a d e d a to s d e sd e el te c la d o . L a s in ta x is de s ca n ff )
es la sig u ie n te : s c a n f ( " c a d e n a de c o n t r o l de t i p o " ,
& va ria b le );
Ig u al q u e la fu n c ió n p r i n t f ( ) , la fu n c ió n s c a n f f ) re q u ie re la c a d e n a d e tip o p o r c a d a v a ria b le o v a ria b le s q u e s e d e s e a leer, el s ím b o lo & es u n a p u n ta d o r q u e “a p u n ta ” a la d ire c c ió n a s ig n a d a a la v a ria b le q u e v ie n e a c o n tin u a c ió n y é s ta se rá el á re a d e m e m o ria d o n d e s e a lm a c e n a rá e s e d a to d e e n tra d a . E s in d is p e n s a b le u tiliz a r e s te s ím b o lo , d e lo c o n tra rio , el v a lo r n u n c a s e rá g u a rd a d o e n la v a ria b le . Ej e m p l o 1.1 Programa que lee dos datos y los muestra in t
edad;
f loat e s t ; p rin tf("T e cle a
tu edad");
scanf("%d",&edad); (continúa)
www.FreeLibros.me
Capítulo 1
In troducción al le n g u a je C
(continuación) p rin tf("T e cle a
t u e s t a t u r a ”) ;
s c a n f ( ”% f ” , & e s t ) ; p r i n t f ( " T i e n e s %c/ años y m ide s %f m t s ." , e d a d , e s t ) ;
E n e s te e je m p lo s e d e c la ra n la s v a ria b le s p rin tf
edad
y e s t ; p rim e ro s e u tiliz ó la fu n c ió n
() p a ra m o s tra r e n p a n ta lla u n m e n s a je q u e s o lic ita al u s u a rio su e d ad ;
el u s u a rio d e b e e s c rib ir s u e d ad , p o r e je m p lo , 20, y e ste v a lo r s e a lm a c e n a rá en la v a ria b le e d a d q u e s e e s tá u sa n d o c o m o a rg u m e n to e n la fu n c ió n
s c a n f ( );
p o ste rio rm e n te a p a re c e o tro m e n s a je s o lic ita n d o s u e s ta tu ra , su p o n g a m o s q u e el u su a rio te c le a 1 .7 5 , q u e s e a lm a c e n a e n
e s t ; fin a lm e n te
a p a re c e el m e n saje:
T i e n e s 20 años y m ide s 1 . 7 5 mts.
G e n e ra lm e n te lo s p ro g ra m a s in te ra c tú a n c o n el u s u a rio e n la le c tu ra d e d ato s.
Resum en L a c o m p u ta d o ra es u n d isp o sitiv o e le c tró n ic o q u e p ro c e s a in s tru c c io n e s y d ato s. E n e lla s e p u e d e n u tiliz a r v a rio s tip o s d e le n g u a je s c o m o lo s d e a lto n iv el, q u e so n lo s c o m p ila d o re s; el le n g u a je e n sa m b la d o r, q u e es d e b a jo n iv el, y el le n g u a je m á q u in a , e n c e ro s y u n o s, q u e es el ú n ic o q u e la c o m p u ta d o ra e n tie n d e . El le n g u a je q u e e s ta o b ra a b o rd a es el C , u n le n g u a je d e p ro g ra m a c ió n de p ro p ó sito g e n e ra l. A lg u n o s d e lo s e le m e n to s u tiliz a d o s e n u n p ro g ra m a s o n id e n tific a d o re s, v a ria b le s, c o n sta n te s y c o m e n ta rio s. L a in s tru c c ió n u sa d a c o m ú n m e n te p a ra le e r d a to s p o r la e n tra d a e s tá n d a r (te c la d o ) es s c a n f ; p a ra m o s tra r e n la s a lid a e s tá n d a r (m o n ito r) s e u tiliz a la in s tru c c ió n p rin tf.
Evaluación I. D escriba los siguientes conceptos. 1. ¿ Q u é es u n p ro g ra m a ? 2 . ¿ Q u é es la C P U ? 3 . ¿ A q u é s e le lla m a so ftw a re ? 4. ¿ Q u é es la m e m o ria p rin c ip a l? 5 . ¿ Q u é es le n g u a je d e p ro g ra m a c ió n ?
www.FreeLibros.me
17
Ejercicios p ro p u e s to s
6 . ¿ Q u é es le n g u a je C ? 7 . ¿ Q u é le n g u a je s p u e d e n u s a rs e e n u n a c o m p u ta d o ra ? 8 . ¿ C u á le s s o n la s fo rm a s p a ra d e c la ra r u n a c o n sta n te ? 9. ¿ C ó m o s e d e c la ra u n a v a ria b le ?
n . R esponda las siguientes preguntas. 1. ¿ P o r q u é n o s e d e b e u tiliz a r u n a v a ria b le a n te s d e a s ig n a rle u n v a lo r? 2 . ¿ P o r q u é n o s e d e b e a sig n a r u n v alo r re a l a u n a v aria b le d e c la ra d a c o m o e n te ro ? 3 . L o s e rro re s d e ____________ so n d e te c ta d o s p o r el c o m p ila d o r y lo s e rro re s ____________ s ó lo p u e d e n s e r d e te c ta d o s p o r el p ro g ra m a d o r. 4. ¿ C u á l es la e s tru c tu ra g e n e ra l d e u n p ro g ra m a e n C ? 5 . ¿ C u á l es la ra z ó n d e q u e lo s sig u ie n te s id e n tific a d o re s s e a n in v á lid o s? a) .u n o b ) lu n o c) U no
H I. E scrib a lo que se pide a continuación. 1. T re s id e n tific a d o re s v á lid o s. 2 . T re s id e n tific a d o re s n o v á lid o s. 3 . U n a v a ria b le d e tip o
char,
o tra tip o
in t,
o tra tip o
fioat
y o tra tip o
A s íg n e le u n v a lo r 4 a c a d a u n a d e la s v a ria b le s c o n la in s tru c c ió n m u e s tre el c o n te n id o d e c a d a v a ria b le u sa n d o la in s tru c c ió n 4. T re s c o n sta n te s u sa n d o c o n s t : c h a r , i n t y fioat. 5 . T re s c o n sta n te s u sa n d o
d o ub ie . scanf
y
p rin tf.
ttdefme.
6 . C in c o p a la b ra s re se rv a d a s. 7 . U n c o m e n ta rio q u e c o n te n g a el n o m b re c o m p le to d e u s te d y la fe c h a d e hoy.
Ejercicios propuestos I. D escriba qué im prim en los siguientes fragm entos de código. 1.
char A;
p r i n t f ( u %c \ A ) ; __________________ p rin tfr
" , A ) ; ___________________
A = ' a ' + 10; p r i n t f ( n %c U, A ) ; __________________ p r i n t f ( " %c/ \ A ) ;
__________________
www.FreeLibros.me
Capítulo 1
In troducción a l le n g u a je C
2 . i n t B; B=5; " , B ) ; __________________
p rin tff" p r i n t f ( " %c
__________________
fl=5 + '>4'; p r i n t f ( m %c/ " , B ) ; __________________ p r i n t f ( u %c " , B ) ; __________________ 3 . ttdefine num 15 p r i n t f ( " %c/ °,num); _________________ p rin tt("
%c U,num); _________________
4 . ttdefine num 15 num=5+'A'; p r i n t f ( " %c/ °,num); ___________________ p rin tt("
%c U,num); ___________________
5 . ttdefine p p r i n t f in t
a =1 ,b= 2 ;
f l o a t x =3 , y - 4 ; l o n g z=5; short i n t
f=6;
u n s i g n e d i n t i =9; u n s i g n e d l o n g g=7; d o u b l e h=8;
PC
entero
p("
r e a l %f \ n " , ( f l o a t ) (a+b) ; ___________________
pC
l a r g o % lf \ n " , z ) ; ___________________
\ n " , a + b ) ; ___________________
p ( " s h o r t 96 d \ n " , f ) ; ___________________ p ( " u n s i g n e d i n t %c/ \ n " , i ) ;
___________________
p ( " u n s i g n e d l o n g % d \ n " , g ) ; ___________________ p ( " d o b l e % lf \ n " , h ) ; ___________________
n . ¿Q ué dato se alm acenaría en las siguientes variables? 1.
in t
a;
C le e r
a=3 */
s c a n t ( "%d",&a);
___________________
scant("% f",&a);
___________________
s c a n t ("%c",&a);
___________________
www.FreeLibros.me
Ejercicios p ro p u e s to s
2 . c h a r x; l * l e e r x=3 */ scanf("%d",&x); s c a n f ( ' ' % f n, & x ) ; s c a n f f "% c", & x ) ;
3.
f l o a t w;
/ * l e e r w=2.5 */ scanff"% d",& w ); s c a n f f "% f" , &w); s c a n f f "%c",&w );
www.FreeLibros.me
www.FreeLibros.me
Aritmética de C
E n e s te c a p ítu lo s e re v is a el u so d e o p e ra d o re s , s e m e n c io n a n lo s m ás c o m u n e s, s u c la sific a c ió n y a lg u n o s e je m p lo s. U n o p e ra d o r es u n s ig n o (s ím b o lo ) q u e in d ic a al c o m p ila d o r el tip o d e o p e ra c ió n q u e s e e fe c tu a rá c o n lo s d a to s. E l le n g u a je C c u e n ta co n d ife re n te s c a te g o ría s d e o p e ra d o re s , lo s m á s e le m e n ta le s s o n a r itm é tic o s , r e la c ió n a le s y ló g ic o s, y p o d e m o s e n c o n tra rlo s p rá c tic a m e n te en c u a lq u ie r o tro le n g u a je , a u n q u e p o s ib le m e n te s e re p re s e n te n d e o tra m an era. A d e m á s d e e sto s o p e ra d o re s , e x is te n o tro s q u e s o n p ro p io s d e C , y s e e x p lic a rá n m á s a d e la n te .
2.1 Inicialización y asignación de variables In ic ia liz a r u n a v a ria b le y a d e c la ra d a c o n siste e n a s ig n a rle u n v a lo r a n tes de q u e s e u tilic e e n u n p ro g ra m a ; u n a v e z in ic ia liz a d a s, la s v a ria b le s
www.FreeLibros.me
22
Capítulo 2
A ritm ética d e C
p u e d e n m o d ific a r s u c o n te n id o c o n fo rm e s e re q u ie ra e n el p ro g ra m a m e d ia n te n u ev as a sig n a c io n e s. S in e m b a rg o , c a b e a c la ra r q u e n o s ie m p re s e rá n e c e sa rio d a rle s u n v a lo r in ic ia l (e je m p lific a re m o s e s to m á s a d e la n te ). El le n g u a je C p e rm ite in ic ia liz a r el v a lo r d e la v a ria b le , y a s e a e n el m o m e n to de la d e c la ra c ió n o p o ste rio rm e n te ; el fo rm a to es el sig u ie n te : < t i p o d a t o > < i d e n t i f i c a d o r > = ;
d o n d e v a lo r p u e d e s e r u n a c o n s ta n te , u n a v a ria b le , u n a e x p re s ió n a ritm é tic a o la lla m a d a a u n a fu n c ió n ; m á s a d e la n te s e d e ta lla s o b re lo s te m a s d e e x p re sio n e s y fu n c io n e s. P o r e je m p lo : in t
a = 3;
a = 5; f loat b = 4 . 5 6 , c = 7 . 2 , d ; d = b+c;
E n el p rim e r c a s o s e d e c la ra la v a ria b le e n te ra a y s u v a lo r in ic ia l es 3 ; e n la se g u n d a a sig n a c ió n s e a lm a c e n a u n 5 e n la v a ria b le a , lo c u a l h a c e q u e el 3 a n te rio r s e p ie rd a . L a v a ria b le c o n se rv a sie m p re el ú ltim o v a lo r a sig n a d o . E n e s te e je m p lo s e d e c la ra n
íj,
c
y d , tres v a ria b le s d e tip o re a l. A la s dos
p rim e ra s s e le s a s ig n a 4 .5 6 y 7 .2 re s p e c tiv a m e n te ;
d
n o s e in ic ia liz a , y a q u e se
le a s ig n a el re s u lta d o d e la e x p re s ió n
a + b,
e je m p lo m ás: s e d e c la ra la v a ria b le
c u y o v a lo r in ic ia l es la le tr a r.
char t
= 1 r
t
d a n d o c o m o re s u lta d o 1 1 .7 6 . U n
';
E n lo s e je m p lo s a n te rio re s s e h a u tiliz a d o el o p e ra d o r = (o p e ra d o r d e a sig n a c ió n ) q u e , e n le n g u a je C , n o sig n ific a ig u a ld a d , c o m o e n o tro s c o n te x to s m á s c o m u n e s. E l o p e ra d o r a s ig n a c ió n = s e u tiliz a p a ra a lm a c e n a r u n v a lo r e n u n a v a ria b le . S i la v a ria b le y a e s tá d e c la ra d a la s in ta x is d e a sig n a c ió n es la sig u ie n te : < v a r i a b l e > = ;
L a a s ig n a c ió n s ie m p re s e rá d e d e re c h a a iz q u ie rd a , p o r lo ta n to , d e l la d o iz q u ie rd o del o p e ra d o r a s ig n a c ió n sie m p re s e d e b e rá u tiliz a r u n a v a ria b le ; e n c u a n to al valor, c o m o y a s e m e n c io n ó , p u e d e s e r o tra v a ria b le , u n a c o n sta n te , u n a e x p re sió n a ritm é tic a o el re s u lta d o d e u n a fu n c ió n . S e m u e s tra n lo s sig u ie n te s e je m p lo s , a su m ie n d o q u e la s v a ria b le s y a e s tá n d e c la ra d a s: m-5; m =m +3;
www.FreeLibros.me
2.2 O p erado res aritm éticos
23
n-m ; z=m+5; w = s q r t(9 ); E n el p rim e r e je m p lo a m s e le a s ig n a 5; e n la se g u n d a in s tru c c ió n a la v a ria b le m se le a s ig n a lo q u e tie n e m m á s 3 (q u e d a n d o c o n 8 ); e n el te rc e r e je m p lo a n s e le a sig n a el v a lo r d e m, es d e c ir 8; e n el s ig u ie n te e je m p lo a la v a ria b le z s e le a s ig n a el re s u lta d o d e la s u m a d e m+s (1 3 ); y p o r ú ltim o , a la v a ria b le w s e le a s ig n a la ra íz c u a d ra d a d e 9, la c u a l s e c a lc u la u tiliz a n d o la fu n c ió n s q r t ( ) d e la b ib lio te c a mat h. h . El le n g u a je C ta m b ié n p e rm ite a s ig n a r v a lo re s d e la s ig u ie n te fo rm a: i n t m=n-z= 0 ; U tiliz a d a d e e s ta fo rm a es lla m a d a a s ig n a c ió n m ú ltip le , y s ig n ific a q u e s e les a sig n a el m is m o v a lo r (c e ro ) a to d a s la s v a ria b le s; la a s ig n a c ió n s ie m p re es de d e re c h a a iz q u ie rd a .
2.2 O peradores aritm éticos L o s o p e ra d o re s a ritm é tic o s s o n lo s q u e u tiliz a m o s n o rm a lm e n te p a ra re a liz a r las o p e ra c io n e s b á sic a s a ritm é tic a s: su m a , re s ta , m u ltip lic a c ió n , d iv is ió n y re s id u o o m ó d u lo . F re c u e n te m e n te e sc u c h a re m o s q u e a e sto s o p e ra d o re s s e le s c o n o c e c o m o b in a rio s, e s to sig n ific a q u e s ie m p re s e u tiliz a n d o s o p e ra n d o s (d a to s ) p a ra q u e fu n c io n e n . A c o n tin u a c ió n la ta b la 2.1 lo s m u e stra . TAb l a 2.1 O peradores aritm éticos con ejem plos Tipo d e datos Operador
Operación
de los operandos
Ejemplo
Resultado
+
Suma
Enteros y re a le s
3 + 2
5
(pueden s e r
3.3 + 5
8.3
d iferen tes).
8 . 2 + 7.1
15.3
Enteros y re a le s
3 - 2
1
(pueden s e r
3 . 3 - 5
-1.7
d iferen tes).
8.2
1.1
Enteros y re a le s
3 * 2
6
(pueden s e r
3.3 * 5
16.5
d iferen tes).
8 . 2 * 7.1
5 8 .22
-
*
Resta
M u ltip lica ció n
- 7.1
(continúa )
www.FreeLibros.me
Capítulo 2
A ritm ética d e C
(continuación) /
%
D iv isió n
Enteros y re a le s
3 / 2
1
(pueden s e r
3 . 3 / 5
0.66
d iferen tes).
8. 2 / 7. 1
1. 1549296
Residuo o
S ó lo acepta operandos
3 % 2
1
módulo
enteros.
3 .3 % 5
in v á lid o
8 . 2 % 7.1
in v á lid o
T odos lo s o p e ra d o re s a c e p ta n la c o m b in a c ió n d e tip o s d e d a to s , e x c e p to m ó d u lo %, qu e s ó lo s e u tiliz a c o n o p e ra n d o s e n te ro s o c a rá c te r. El tip o d e d a to d e l re s u lta d o d e la o p e ra c ió n d e p e n d e d e lo s tip o s d e d a to s d e los o p e ra n d o s q u e s e u tilic e n ; es d e cir, si s e u sa n s ó lo e n te ro s , el re s u lta d o s e rá un e n te ro , p e ro si s e c o m b in a n e n te ro s y re a le s , el re s u lta d o s e rá u n v a lo r real. P b r o tro la d o , o b s e rv e ta m b ié n q u e e n lo s c a so s d e la s o p e ra c io n e s 3 / 2 y 3 % 2 e l re s u lta d o es 1. E sto es p o rq u e ta n to el c o c ie n te c o m o el re s id u o e n e s ta o p e ra c ió n so n p re c is a m e n te 1. V eam os e s to e n el e je m p lo sig u ie n te : 1 *- (c o c ie n t e ) 2¡3~
1 *- (re s id u o )
Y c o m o el o p e ra d o r re s id u o m a n e ja d a to s s ó lo d e tip o e n te ro , el re s u lta d o ta m b ié n se rá d e tip o e n te ro . A s í q u e si el d iv is o r es m e n o r q u e el d iv id e n d o , n o s e d e b e e sp e ra r u n re s u lta d o c o n p u n to d e c im a l, a u n q u e s í u n re s id u o ; p o r e je m p lo , el re su lta d o d e la s ig u ie n te e x p re sió n : 1 % 4
se rá 1, y a q u e 0 4[Í4
1 *- (re s id u o )
2.2.1 Prioridad de los operadores aritméticos C u a n d o e n u n a e x p re sió n e x is te n o p e ra d o re s d ife re n te s, ¿ c u á l s e e v a lú a p rim e ro ? E sto s o p e ra d o re s s ig u e n la s reg la s m a te m á tic a s e n c u a n to a p re c e d e n c ia o je ra rq u ía d e o p e ra d o re s.
www.FreeLibros.me
2.2 O p erado res aritm éticos
L a ta b la 2 .2 m u e s tra e s a p re c e d e n c ia :
TAb l a 2.2 Precedencia de operadores aritm éticos ( ) +, -
E n p rim e r lu g a r a p a re c e el o p e ra d o r ( ), d e b id o a q u e e n la s m a te m á tic a s tra d ic io n a le s s e u tiliz a e s te s ím b o lo p a ra d e te rm in a r la p rio rid a d d e o p e ra d o re s en e x p re sio n e s g ra n d e s . E n se g u n d o lu g a r s e e v a lú a n m u ltip lic a c ió n , d iv is ió n y m ó d u lo , lo s tres c o n la m is m a p rio rid a d ; p o ste rio rm e n te s e e v a lú a n la s u m a y la resta. Ej e m p l o 2.1 Expresiones válidas y com entario a la solución
E x p re s i ó n
Regl as
a)
3 + 4 - 5
Cuando en una e x p r e s i ó n s e e n c u e n t r a n o p e r a d o r e s con
7 - 5
l a misma p r i o r i d a d ,
2
resta,
la s
como en e s t e c a s o l a
o p e r a c i o n e s se r e a l i z a n
suma y l a
de i z q u i e r d a
a
derecha. b)
8+5*9-6
Aunque l a
suma e s t á p r i m e r o ,
8 + 4 5 - 6
j e r a r q u í a e s l a m u l t i p l i c a c i ó n ; p o s t e r i o r m e n t e se
5 3 - 6
l l e v a a cabo l a
47
de i z q u i e r d a a d e r e c h a .
suma,
el
es d e c i r ,
o p e r a d o r de mayor
nuevamente s e e v a l ú a n
6/2+4*(5-2)
En e s t e e j e m p l o s e e f e c t ú a p r i m e r o l a
6/2+4*(3)
para e fe c t u a r l a
6/2+12
la
3+12
m u l t i p l i c a c i ó n . Con e s o s r e s u l t a d o s e s p o s i b l e
15
efectuar l a
d)
suma,
d iv isió n ;
es n e c e s a r i o l l e v a r
operación entre p a r é n te s is
(resta)
a cabo
y luego l a
suma.
6 +7 *( (3 -1 )%2)
Cuando en una e x p r e s i ó n e x i s t a n p a r é n t e s i s a n i d a d o s ,
6+7*(2%2)
se e v a l u a r á n de a d e n t r o h a c i a a f u e r a ,
6 + 7 * 0
evalúan l o s
6 + 0
precedencia.
l u e g o se
demás o p e r a d o r e s de a c u e r d o a su
6 Nota: Para definir prioridad de operadores, C utiliza únicamente los símbolos ( ). Las { } (llaves) y los [ ] (corchetes) en el lenguaje C no se utilizan para asociar. Su significado se explicará más adelante.
www.FreeLibros.me
Capítulo 2
A ritm ética d e C
C u a n d o s e c o m b in a n v a ria b le s, c o n sta n te s y o tro s e le m e n to s m e d ia n te los o p e ra d o re s a ritm é tic o s, s e fo rm a n e x p re sio n e s a ritm é tic a s ; el re s u lta d o d e u n a e x p re sió n a ritm é tic a p u e d e s e r c u a lq u ie r v a lo r n u m é ric o , to d o d e p e n d e d e los o p e ra n d o s y la a s o c ia tiv id a d d e lo s o p e ra d o re s.
2.2.2 Otros operadores de asignación E x is te n o tro s o p e ra d o re s d e a s ig n a c ió n m u y p a rtic u la re s d e l le n g u a je C . += *=
/= %= Los c u a le s ta m b ié n sirv e n p a ra su m a r, restar, m u ltip lic a r y d iv id ir, re sp e c tiv a m e n te , re d u c ie n d o la s in stru c c io n e s, c o m o s e m u e s tra la ta b la 2.3. S u p o n ie n d o q u e d e c la ra m o s in t
a= 1 0 ;
Ta b l a 2.3 O peradores de asignación Ex presi ón
Equivale a
Resultado
a+=2 ;
a=a+2 ;
12
a-= 2 ;
a=a- 2 ;
8
A* =2;
a=a* 2 ;
20
a l =2 ;
a=a! 2 ;
5
A%=2;
a=a%2 ;
0
2.3 O peradores de increm ento y decrem ento A n te rio rm e n te s e m e n c io n ó q u e a lo s o p e ra d o re s a ritm é tic o s b á sic o s se les s u e le c la s ific a r c o m o b in a rio s p o rq u e c a d a u n o e llo s re q u ie r e sie m p re d e d o s o p e ra n d o s. S in e m b a rg o , el le n g u a je C c u e n ta c o n u n a s e rie de o p e ra d o re s p ro p io s a lo s q u e s e le s lla m a u n a rio s . E s o s ig n ific a q u e ú n ic a m e n te re q u ie re n d e u n o p e ra n d o c u a n d o s e u tiliz a n , lo c u a l p ro p o rc io n a c ie rta s v e n ta ja s.
www.FreeLibros.me
2.4 O p erado res relaciónales
E l o p erad o r de increm ento ++ s e u tiliz a p a ra m o d ific a r e l v a lo r d e la v a ria b le su m á n d o le 1 al v a lo r q u e tie n e. a=9;
a++; su p o n ie n d o q u e la v a ria b le a s e h a d e c la ra d o p re v ia m e n te , e n la p rim e ra in stru c c ió n s e le a s ig n a el v a lo r d e 9 y e n la s ig u ie n te s e in c re m e n ta s u v a lo r e n 1, lo c u a l h a c e q u e la v a ria b le a a h o ra te n g a a lm a c e n a d o u n 10. E ste o p e ra d o r red u ce el c ó d ig o , y a q u e la ex p re sió n a+ + eq u iv ale a la ex p re sió n que d ich o e n p a la b ras sig n ifica a
la v ariab le
a=a+i,
a se le a sig n a lo q u e ten g a m ás 1.
P o r o tro la d o ta m b ié n s e c u e n ta c o n el o p e ra d o r d e c re m e n to
E s te o p e ra d o r
es lo c o n tra rio al a n te rio r, es d e cir, d is m in u y e e n 1 el v a lo r q u e te n g a la v a ria b le , c o m o e n el s ig u ie n te caso: a =9; a--;
de ig u a l m a n e ra s e le a s ig n a u n 9 a la v a ria b le a y p o ste rio rm e n te s e re d u c e su v a lo r q u e d a n d o c o n v a lo r d e 8. L o s o p e ra d o re s ++ y - - s e p u e d e n u s a r c o m o p refijo s o su fijo s: s e p u e d e n u sa r an tes o d e sp u é s d e la v a ria b le y a u n q u e e n a m b o s c a so s é s ta s e in c re m e n ta o re d u c e e n 1, e x is te c ie rta d ife re n c ia e n la fo rm a d e u tiliz a rlo s . V eam os lo s sig u ie n te s e je m p lo s: 1)
a =W;
2)
X=++a;
a =10 x=a++;
E n el e je m p lo 1 la v a ria b le x re c ib e u n 11, p o rq u e a p rim e ro s e in c re m e n ta y lu e g o se a sig n a . E n el e je m p lo 2 x re c ib e u n 10, y a q u e p rim e ro s e a s ig n a el v a lo r d e a y p o ste rio rm e n te s e in c re m e n ta .
2.4 O peradores relaciónales E sto s o p e ra d o re s s e u tiliz a n p a ra e x p re s a r c o n d ic io n e s e n lo s p ro g ra m a s y a sí d e te rm in a r el o rd e n e n q u e s e e je c u ta rá n las in s tru c c io n e s ; u n a c o n d ic ió n e n C es u n a e x p re s ió n b o o le a n a c u y o re s u lta d o p u e d e s e r ú n ic a m e n te v e rd a d e ro o fa ls o . L a ta b la 2 .4 m u e s tra lo s o p e ra d o re s re la c ió n a le s.
www.FreeLibros.me
Capítulo 2
A ritm ética d e C
Ta b l a 2.4 Operadores relaciónales Operador
D e s cr ip ci ó n
=
mayor o i g u a l que
==
i g u a l que
!=
no i g u a l
que ( d i f e r e n t e
de)
E sto s o p e ra d o re s a c tú a n c o n d o s o p e ra n d o s q u e p u e d e n s e r v a ria b le s , c o n sta n te s , e x p re sio n e s a ritm é tic a s o fu n c io n e s, y el re s u lta d o o b te n id o es u n v a lo r e n te ro , ya q u e v e rd a d e ro s e re p re s e n ta c o n u n 1 y fa ls o c o n el v a lo r 0. C u a n d o u n a e x p re sió n p u e d e d a r c o m o re s u lta d o s ó lo v e rd a d e ro o falso , s e le lla m a e x p r e s ió n ló g ic a o b o o le a n a . A c o n tin u a c ió n s e m u e s tra u n e je m p lo : si
a.=10) y b=5
Operación
Descripción
Resultado
a = b
a mayor o i g u a l qu e b
V e r d a d e r o (1)
a == b
a i g u a l qu e b
Falso
a != b
a diferen te
V e r d a d e r o (1)
de b
(0)
2.5 O peradores lógicos L o s o p e ra d o re s ló g ic o s && y 11 a c tú a n c o n d o s o p e ra n d o s; el o p e ra d o r / , c o n un o p e ra n d o . S e re q u ie re q u e s e a n e x p re sio n e s ló g ic a s , g e n e ra lm e n te fo rm a d a s co n los o p e ra d o re s re la c ió n a le s. L o s o p e ra d o re s ló g ic o s s irv e n p a ra u n ir m á s d e u n a c o n d ic ió n e n u n p ro g ra m a y p o d e r a s í fo rm a r c o n d ic io n e s m á s c o m p le ja s , c u y o re s u lta d o ta m b ié n p u e d e se r ú n ic a m e n te c ie rto o falso , la ta b la 2.5 m u e s tra lo s o p e ra d o re s ló g ic o s.
www.FreeLibros.me
2.6 O p e ra d o r co n d icio n a l
I à b l a 2.5 O peradores lógicos Operador
D e s cr ip ci ó n Y (and) E l
&&
r e s u l t a d o de una o p e r a c i ó n y l ó g i c a s e r á
v e r d a d e r o s i ambos o p e r a n d o s son v e r d a d e r o s , de l o con tra rio, 0 (or) E l
II
será fa lsa . r e s u l t a d o de una o p e r a c i ó n o l ó g i c a
v e r d a d e r o s i a l g u n o de l o s son v e r d a d e r o s ; s i No ( n o t ) E l
l
t o d o s so n f a l s o s ,
dos
será fa ls a .
r e s u l t a d o de una o p e r a c i ó n no l ó g i c a
será verdadero s i con tra rio,
operandos o l o s
será
será
el
o p e ra nd o es f a l s o ,
sólo
de l o
verdadero.
E je m p lo d e l re s u lta d o d e l u so d e o p e ra d o re s ló g ic o s. si
a=1@, b=5,
c=10 y d=3
Operación
D e s cr ip ci ó n
Resultado
(ab)&&(a>=d)
(a==c) || ( c 1 = d)
(d>c) || (b>a)
(c>=d) || (c>a)
(Q>)
a si
es i g u a l
a si
es mayor qu e b
V e r d a d e r o (1)
a si
es mayor o i g u a l qu e d
la s
a si
es i g u a l
V e r d a d e r o (1)
c si
es d i f e r e n t e de d
que c
que c
l a p r i m e r a no s e cumpl e
la s
d o s s e cumplen
d o s s e cumplen
d no es mayor c
Falso
b no es mayor qu e a
n i n g u n a s e cumple
c si
Verdadero ( 1 )
es mayor o i g u a l qu e d
c no es mayor qu e a
((d)
l a primera s í
s e cumple
2.6 O perador condicional E ste o p e ra d o r s e u tiliz a p a ra e x p re s a r c o n d ic io n e s e n u n p ro g ra m a y p u e d e su stitu ir a la e s tru c tu ra d e c o n tro l
if-e is e
q u e s e e x p lic a m á s a d e la n te . El
o p e ra d o r re q u ie re u n a e x p re sió n ló g ic a , la c u a l s e e v a lú a y d e p e n d ie n d o si es v e rd a d e ra o fa ls a s e e je c u ta n in stru c c io n e s d is tin ta s , el fo rm a to es el sig u ie n te : < e x p r e s i ó n 1> ? < e x p r e s i ó n 2> : < e x p r e s i ó n 3>
www.FreeLibros.me
30
Capítulo 2
A ritm ética d e C
donde < expresión
1 > es
la c o n d ic ió n q u e s e e v a lú a (d e b e s e r u n a e x p re s ió n b o o le a n a ), si
es v e rd a d e ra , s e e je c u ta rá lo in d ic a d o e n < expresión
2 >;
p e ro si < expresión
1 > es
falsa, e n to n c e s s e e je c u ta rá < expresión 3>. S i a es u n a v a ria b le d e tip o e n te ro . ¿ C u á l s e rá el re s u lta d o d e la sig u ie n te e x p re sió n c o n d ic io n a l? (a> 10 ) ?
1
: 0;
d e p e n d ie n d o d e l v a lo r q u e s e le h a y a a s ig n a d o a la v a ria b le a , s e rá el v a lo r de to d a la e x p re s ió n c o n d ic io n a l. P o r e je m p lo si a tie n e u n v a lo r d e 11 o m ay o r, el re su lta d o s e rá 1; si la v a ria b le tie n e a lm a c e n a d o u n 10 o m e n o s, el re s u lta d o se rá u n 0. S e m u e s tra el sig u ie n te e je m p lo : a =3; b -4 ; c = (a>b) ? a+b : a*b; A q u í el re s u lta d o d e la e x p re s ió n c o n d ic io n a l s e a s ig n a a la v a ria b le c. P rim e ro se ev alú a si a es m a y o r q u e b; c o m o e n e s te c a s o el re s u lta d o es fa ls o , s e e je c u ta la e x p re sió n q u e e s tá d e sp u é s d e : (d o s p u n to s ), es d e cir, la m u ltip lic a c ió n d e a p o r b , c u y o re s u lta d o es 12, el c u a l es a lm a c e n a d o e n la v a ria b le c. Si c a m b iá ra m o s lo s v a lo re s d e a y b p o r 8 y 6 re sp e c tiv a m e n te , el re s u lta d o d e la a sig n a c ió n a c s e ría 14. S e e v a lú a si a es m a y o r q u e b , y c o m o es v e rd a d e ro , se e je c u ta la e x p re s ió n q u e e s tá d e sp u é s d e l s ig n o ?; la s u m a d e a y b.
2.6.1 Prioridad de operadores A c o n tin u a c ió n s e m u e s tra la ta b la 2 .6 c o n la lis ta d e o p e ra d o re s q u e s e h an e x p lic a d o e n o rd e n d e p rio rid a d .
Ta b l a 2.6 O peradores y su prioridad O p e ra d o r < ) &&
l ++,
--
n
*, / , %
?:
mai n( )
{ i n t j =4, k = 3 , i = 2 ;
www.FreeLibros.me
33
Ejercicios p ro p u e s to s
float x=1. 5 ,
z = 2 . 4,
t;
t=( ( f l o a t ) ( j * k ) / 2 ) ; t++; x*=++z; t - = (x+=++i) ; p r i n t f ( u\n e l
v a l o r de t
e s 96 f \ n u, t ) ;
getch(); return
0;
}
Ejercicios propuestos I. ¿Q ué resultado se im prim e en los siguientes program as? 1. H i n d ú de < s t d i o . h >
mai n( )
{ in t
a,b,c=3,d=2;
a= 8 - 5 * 3
+ 2;
b= 7%3 + 4 * 2; p rin tf("
v a l o r de a % d \ t v a l o r de b %d\n" , a , b ) ;
b%=a; p r i n t f f " v a l o r de b %c/\t \ n n, b ) ;
____
b=( - 4 ) 963; p r i n t f f " v a l o r de b % d \ t \ n * , b ) ;
}
2. H i n d ú de < s t d i o . h >
mainf)
{ in t
c=3, d=2;
c -= d++ * 3;
www.FreeLibros.me
____
34
Capítulo 2
p rin tf("
A ritm ética d e C
v a l o r de c 96 d \ t v a l o r de d 9&d\n" , c , d ) ;
____________
s y s t e m ( " p a u s e ") ;
}
3. üinclude
mai n( )
{ i n t c= 3,l; c = (c
* 2 - (1 = 4,
- 1));
v a l o r de c %d\t v a l o r de 1 %d\n” , c , l ) ; ______________
p rin tf(" g e t c h f ); return
0;
}
4. ttinclude
üinclude
mai n( )
{ in t
a=7, b - 3 ,
c=2,
resultado;
resultado
= ( ( b 96C) ¡ 2 ) +1 ;
resultado
-= a;
r e s u l t a d o %= ++a; p rin tf("\n
el
v a l o r de r e s u l t a d o
= %c/\t a= %c/ ", r e s u l t a d o , a ) ;
getch(); return
0;
}
www.FreeLibros.me
Ejercicios p ro p u e s to s
E scriba el resu ltado de la siguiente expresión, considerando los valores. P a ra a = 2 , 6 = 3, c = 4 ,
d =
1.
a+b*c/d
2.
a % 5 % 2 + c
3.
(a+b) *c % d
4.
( d=d) && ( 2 - 1 4==c+1)
8.
a % d %
9.
3+5*d % 10
5
c
2
10.
a/b %
11.
-a*7
12.
(a>d) && (bb)
14.
|| (a>=b))
15.
( (a>=b) || (a=d) && (c>d))
17.
I (a5)
|| ( ad)
www.FreeLibros.me
www.FreeLibros.me
Programación estructurada
E n e s te c a p ítu lo s e d e sc rib e n la s p a rte s d e u n p ro g ra m a y la e s tru c tu ra de co n tro l b á s ic a se c u e n c ia l c o m o in ic io p a ra la c re a c ió n d e p ro g ra m a s. L a p ro g ra m a c ió n e s tru c tu ra d a es u n a té c n ic a p a ra c re a r p ro g ra m a s sig u ie n d o c ie rta s reg la s q u e p e rm ite n m o d ific a rlo , le e rlo y m a n te n e rlo fá c ilm e n te . E n tre la s c a ra c te rístic a s p rin c ip a le s d e e s ta m e to d o lo g ía se in clu y e el e m p le o d e e s tru c tu ra s d e c o n tro l q u e r e a liz a n a c c io n e s so b re las e s tru c tu ra s d e d a to s, la s c u a le s s e e x p lic a n m á s a d e la n te . E l p ro g ra m a d e b e te n e r u n a s o la e n tra d a y u n a s o la sa lid a .
3.1 Estructura de un program a en C El p ro g ra m a c o n s ta g e n e ra lm e n te d e v a ria s fu n c io n e s. U n a fu n c ió n es u n s u b p ro g ra m a c o n u n a ta re a e sp e c ífic a . E s to s su b p ro g ra m a s
www.FreeLibros.me
Capítulo 3
Prog ram ació n estructurada
(g e n e ra lm e n te p e q u e ñ o s) s e d is e ñ a n c o n el fin d e u tiliz a rs e n o s ó lo u n a v e z n i e n un s o lo p ro g ra m a , s in o la s v e c e s q u e s e re q u ie ra n y e n c u a lq u ie r p ro g ra m a . El le n g u a je C p ro p o rc io n a fu n d a m e n ta lm e n te d o s fo rm a s d e m a n e jo d e fu n cio n e s: las in te rn a s y la s e x te rn a s. L as fu n c io n e s in te rn a s s o n la s y a im p le m e n ta d a s e in c o rp o ra d a s e n el le n g u a je de p ro g ra m a c ió n . P a ra p o d e r h a c e r u so d e e lla s , es n e c e s a rio in c lu ir el a rc h iv o d e c a b e c e ra e s tá n d a r c o rre s p o n d ie n te (ta m b ié n lla m a d a b ib lio te c a ) al q u e c o rre s p o n d a c a d a fu n c ió n . L a fo rm a d e h a c e r e s to es e s c rib ie n d o la d ire c tiv a Uinciude
g e n e ra lm e n te al p rin c ip io d e u n p ro g ra m a . L a ta b la 3.1 m u e s tra los
a rc h iv o s d e c a b e c e ra q u e u tiliz a re m o s e n e s te lib ro : Ta b l a 3.1 Bibliotecas de C A r c h i v o d e cabecera
Descripción
stdio .h
C o n t i e n e f u n c i o n e s de e n t r a d a y s a l i d a
conio.h
C o n t i e n e f u n c i o n e s de c o n s o l a qu e s i r v e n p a r a
de d a t o s .
i n t e r a c t u a r c on d i s p o s i t i v o s como l a p a n t a l l a y l o el
teclado.
m at h. h
C on tien e f u n c i o n e s matemáticas y t r i g o n o m é t r i c a s .
strin g .h
C o n t i e n e f u n c i o n e s p a r a e l manejo de c adenas de t e x t o .
N o s e e x p lic a rá n to d a s la s fu n c io n e s d e c a d a u n o d e e sto s a rc h iv o s d e b id o a q u e c a d a u n o in c o rp o ra u n a g ra n c a n tid a d d e e lla s y el te m a e s tá fu e ra d e l a lc a n c e de este lib ro , p e ro s e e s tu d ia rá n las m á s u sa d a s y s e irá n e x p lic a n d o c o n e je m p lo s c o n fo rm e a v a n c e m o s e n lo s te m a s; a d e m á s e x is te n o tra s b ib lio te c a s c o n fu n c io n e s qu e n o s e tra ta rá n e n el tex to . L as b ib lio te c a s d e l e s tá n d a r son: l ó c a l e . h , m ath.h, s e t jm p .h , s t d l i b . h , s t r i n g . h , tim e.h.
assert.h,
sig n a l.h ,
ctype.h,
stdarg.h,
e r r n o . h , float.h, l i m i t s . h , stddef.h,
std io .h ,
E n la d ire c c ió n e le c tró n ic a , w w w .a c m .u iu c .e d u , es
p o sib le re v is a r la s fu n c io n e s q u e s e e n c u e n tra n e n c a d a b ib lio te c a , a s í c o m o su sin tax is y fu n c io n a m ie n to . P e ro ta m b ié n e x is te n la s fu n c io n e s e x te rn a s o d e fin id as p o r el u su a rio , q u e p u e d e n se r d ise ñ a d a s p o r c a d a p ro g ra m a d o r d e a c u e rd o c o n su s p ro p io s re q u e rim ie n to s . El te m a d e las fu n c io n e s e x te rn a s s e tra ta c o n m á s d e ta lle e n el c a p ítu lo 8, d e d ic a d o a la s m ism a s. Es p o s ib le u tiliz a r e n u n p ro g ra m a m ú ltip le s fu n c io n e s, p e ro s ie m p re d e b e h a b e r u n a fu n c ió n p rin c ip a l, d e la c u a l d e p e n d e el c o n tro l d e l p ro g ra m a c o m p le to .
www.FreeLibros.me
3.1 Estructura de un programa en C
E n el c a s o d e C s e u tiliz a u n a fu n c ió n lla m a d a
main( ) .
É s ta c o n s titu y e el
p ro g ra m a p rin c ip a l y d e sd e a h í s e p u e d e h a c e r u so ta n to d e la s fu n c io n e s in te rn a s c o m o d e la s e x te rn a s. L a e s tru c tu ra o s in ta x is d e u n p ro g ra m a c re a d o e n C s e m u e s tra a c o n tin u a c ió n en un p rim e r p ro g ra m a e le m e n ta l. E je m p lo 3.1 Estructura mínima de un programa en lenguaje C, versión 1 / * e s t r u c t u r a de un p r o gr am a en C. */ # i n c l u d e < s t d i o . h> void main( )
{ p r i n t f ( " M i p r i m e r program a");
}
L a p rim e ra lín e a es u n c o m e n ta rio o p c io n a l (p u e d e in c lu irs e o n o ), y a q u e se e n c u e n tra e n tre lo s c a ra c te re s /* y * /. R e c u e rd e q u e lo s c o m e n ta rio s s o n u n a e x p lic a c ió n d e l p ro g ra m a y s o n ig n o ra d o s p o r el c o m p ila d o r; e n e s te c a s o s e tra ta d e u n a n o ta a c e rc a d e la e s tru c tu ra d e l p ro g ra m a . L a d ire c tiv a tt inciude de la se g u n d a lín e a es n e c e s a ria p a ra q u e el p ro g ra m a te n g a a c c e so a la s fu n c io n e s d e l a rc h iv o s t d i o . h e n el q u e s e p ro p o rc io n a la in fo rm a c ió n rela tiv a a la fu n c ió n p r i n t f ( ) q u e s e u tiliz a e n la q u in ta lín e a . O b s e rv e q u e los sím b o lo s < y > n o s o n p a rte d e l n o m b re d e l a rc h iv o ; s e u tiliz a n s ó lo p a ra in d ic a r q u e el a rc h iv o s e e n c u e n tra e n la b ib lio te c a e s tá n d a r s t d i o . h . L a te rc e ra lín e a c o n tie n e la c a b e c e ra d e la fu n c ió n p rin c ip a l main( ; , é s ta in d ic a al c o m p ila d o r el c o m ie n z o d e l p ro g ra m a y re q u ie re lo s p a ré n te s is ( ) a c o n tin u a c ió n d e main. P e ro ta m b ié n e s tá a n te c e d id a p o r la p a la b ra re s e rv a d a v o i d , q u e es un e sp e c ific a d o r d e tip o q u e in d ic a q u e u n a fu n c ió n n o d e v u e lv e v a lo r. E s to se e n te n d e rá m e jo r c u a n d o s e h a y a e s tu d ia d o el c a p ítu lo d e la s fu n c io n e s d e fin id as p o r el u su a rio ; p o r lo p ro n to s e re c o m ie n d a u tiliz a r la p a la b ra v o i d a n te s d e main , a u n q u e c a b e s e ñ a la r q u e n o es o b lig a to ria , s in e m b a rg o , si s e o m ite o s e tra b a ja en un c o m p ila d o r q u e n o a d m ita e sta p a la b ra re s e rv a d a , e n to n c e s s e d e b e rá u tiliz a r la p a la b ra r e t u r n q u e s e e x p lic a e n la se g u n d a v e rsió n . L a c u a rta y se x ta lín e a s c o n tie n e n lo s sím b o lo s { y } q u e e n c ie rra n el c u e rp o d e la fu n c ió n main( ) y a g ru p a n las in s tru c c io n e s a e je c u ta r; s o n n e c e sa rio s e n to d o s lo s p ro g ra m a s p a ra in d ic a r el in ic io y fin re s p e c tiv a m e n te . E n e s te e je m p lo
www.FreeLibros.me
Capítulo 3
se e n c u e n tra la in s tru c c ió n
Prog ram ació n estructurada
p rin tf(
),
d a n d o s a lid a a la c a d e n a
“M i p rim e r p ro g ra m a ” . O tra fo rm a d e s in ta x is d e u n p ro g ra m a p o d ría ser: Ej e m p l o 3.2 Estructura mínima de un programa en lenguaje C, versión 2 l * e s t r u c t u r a de un programa en C . * / # i n c l u d e < s t d i o . h> mai n( )
{ p r i n t f ( " M i p r i m e r program a"); return 0 ;
}
A u n q u e fin a lm e n te e s te p ro g ra m a b rin d a el m is m o re s u lta d o , h a y a lg u n a s d ife re n c ia s q u e ta l v e z a p rim e ra v is ta p a re z c a n im p e rc e p tib le s , p e ro q u e v a le la p e n a o b serv ar. L a d ife re n c ia e m p ie z a e n la te r c e r a lín e a , y a q u e e n e lla s e o m itió la p a la b ra m o tiv o p o r el c u a l e n la s e x ta lín e a s e tu v o q u e h a c e r u so d e la in s tru c c ió n 0.
vo id ,
return
E s ta in s tru c c ió n in d ic a q u e te rm in a la e je c u c ió n d e l p ro g ra m a y d e v u e lv e el
c o n tro l al s is te m a o p e ra tiv o d e la c o m p u ta d o ra , el 0 s e u tiliz a p a ra s e ñ a la r q u e el p ro g ra m a h a te rm in a d o . S i s e o m ite e s ta in s tru c c ió n , lu e g o d e la c o m p ila c ió n , C m o s tra rá u n a a d v e rte n c ia ( w a r n i n g ) in d ic a n d o q u e la fu n c ió n d e b e ría re g re sa r un valor. L o a n te rio r s e d e b e a q u e si s e o m ite el in d ic a d o r d e t ip o d e u n a fu n c ió n , é sta to m a el v a lo r d e e n te ro p o r d e fe c to , es d e cir, s e e s p e ra q u e re g re s e u n e n te ro , p e ro c o m o e n e s te c a s o n o h a y n a d a q u e re g re sa r, s e u s a
return 0.
O b se rv e ta m b ié n q u e c a d a in s tru c c ió n fin a liz a c o n p u n to y c o m a ( ; ) , y a q u e e ste sím b o lo in d ic a el final d e la s se n te n c ia s.
3.2 Directivas del preprocesador El p re p ro c e s a d o r fo rm a p a ite d e l le n g u a je C y s e e n c a rg a d e lle v a r a c ab o u n a e ta p a q u e a n te c e d e a la fa s e d e c o m p ila c ió n . P re v ia m e n te a la tra d u c c ió n del p ro g ra m a p rin c ip a l, s e in stru y e al c o m p ila d o r p a ra q u e e je c u te e le m e n to s d e n o m in a d o s d ire c tiv a s o d ire c tric e s d e p ro c e s a m ie n to . L as d o s d ire c tiv a s m ás u su a le s s o n ttdefine e H i n c l u d e .
www.FreeLibros.me
3.3 Estructuras d e co n tro l
Ya s e h a n m e n c io n a d o la s d o s d ire c tiv a s a n te rio rm e n te : la p rim e ra v e z c u a n d o se h a b ló d e la s c o n sta n te s , y a q u e ttdefine p e rm ite s u s titu ir u n s ím b o lo p o r u n a s e c u e n c ia c u a lq u ie ra d e c a ra c te re s ; y a s e e x p lic ó q u e el p re p ro c e s a d o r a n tes d e la c o m p ila c ió n s u s titu y e d ic h a c a d e n a d e c a ra c te re s p o r el v a lo r q u e le fu e d efinido. L a d ire c tiv a tt inciude p e rm ite al c o m p ila d o r te n e r a c c e s o al a rc h iv o fu e n te q u e v ie n e a c o n tin u a c ió n ; re c o rd e m o s q u e e sto s a rc h iv o s s e d e n o m in a n a rc h iv o s d e c a b e c e ra o d e in c lu sió n . L o s a rc h iv o s d e c a b e c e ra g e n e ra lm e n te tie n e n la e x te n s ió n .h y c o n tie n e n c ó d ig o fu e n te e n C . E sto s a rc h iv o s s e e n c u e n tra n u s u a lm e n te e n el c o m p ila d o r. E n re a lid a d , la d ire c tiv a d e l p re p ro c e s a d o r m e z c la u n a rc h iv o fu e n te e n s u p ro g ra m a fu en te . R e g u la rm e n te , lo s p ro g ra m a d o re s d e C sitú a n la s d ire c tiv a s d e l p re p ro c e s a d o r al p rin c ip io d e l p ro g ra m a , a u n q u e e s ta p o s ic ió n n o es o b lig a to ria . A d e m á s, el o rd e n d e lo s a rc h iv o s d e c a b e c e ra n o im p o rta c o n ta l q u e s e in c lu y a n a n te s de q u e s e u tilic e n la s fu n c io n e s c o rre sp o n d ie n te s. L a m a y o ría d e lo s p ro g ra m a s C in c lu y e n to d o s lo s a rc h iv o s d e c a b e c e ra n e c e sa rio s a n tes d e la p rim e ra fu n c ió n del arch iv o . L a d ire c tiv a tt inciude p u e d e a d o p ta r u n o d e los s ig u ie n te s fo rm a to s: t tinciude ttinciude
"pru eba s. h"
L a p rim e ra fo rm a , es d e c ir el n o m b re d e l a rc h iv o e n tre < > in d ic a q u e lo s arch iv o s s e e n c u e n tra n e n el d ire c to rio p re d e te rm in a d o i n c i u d e . E l se g u n d o e je m p lo m u e s tra q u e el a rc h iv o e s tá e n el d ire c to rio a c tu a l, d o n d e s e e n c u e n tra el p ro g ra m a fu e n te . E sto s m é to d o s n o s e e x c lu y e n , y p u e d e n e x is tir e n el m is m o p ro g ra m a a rc h iv o s d e c a b e c e ra e s tá n d a r u tiliz a n d o c o rc h e te s a n g u la re s () y o tro s a rc h iv o s d e c a b e c e ra u tiliz a n d o c o m illa s .
3.3 Estructuras de control U n p ro g ra m a e s tá c o m p u e s to p o r e s tru c tu ra s d e c o n tro l y p o r e s tru c tu ra s d e d ato s. El p ro g ra m a in ic ia c o n la s p rim e ra s , la s e stru c tu ra s d e c o n tro l, q u e g u ía n el o rd e n d e e je c u c ió n . S o n tre s las e s tru c tu ra s d e c o n tro l b á sic a s: s e c u e n c ia c ió n , se le c c ió n e ite ra c ió n .
www.FreeLibros.me
Capítulo 3
Prog ram ació n estructurada
3.3.1 Secuenciación Es u n a e s tru c tu ra d e c o n tro l e n la q u e las in s tru c c io n e s s e e je c u ta n u n a d e sp u és de o tra e n el o rd e n e n el q u e s e e n c u e n tra n e s c rita s e n u n p ro g ra m a . E l fo rm a to d e u n a s e c u e n c ia c ió n es: in stru cció n
1;
in stru cció n
2;
i n s t r u c c i ó n n;
d o n d e n es in fin ito ; la s in stru c c io n e s s e v a n e je c u ta n d o d e sd e la p rim e ra h a sta la e n é sim a in s tru c c ió n , u n a a una. U n p ro g ra m a q u e s e d is e ñ a ú n ic a m e n te m e d ia n te e s ta e s tru c tu ra d e c o n tro l, g e n e ra lm e n te te n d rá c o m o in s tru c c io n e s e n tra d a s d e d a to s, a sig n a c io n e s de c á lc u lo s re a liz a d o s c o n lo s d a to s d e e n tra d a y s a lid a s d e n u e v o s d ato s. A c o n tin u a c ió n s e p re s e n ta n a lg u n o s e je rc ic io s re su e lto s.
Ejercicios resu eltos
Eje r c ic io 3.1 Calcule el prom edio de edad de tres personas
Descripción S o lic ita r la s tre s e d ad e s. A p lic a r la o p e ra c ió n d e p ro m e d io . M o stra r el re su lta d o .
Vari abl es Nombre
Tipo
Uso
E1
Entero
P r i m e r a edad.
E2
Entero
Segunda edad.
E3
Entero
T e r c e r a edad.
Prom
Entero
Resultado.
www.FreeLibros.me
3.3 Estructuras d e co n tro l
Codificación / *P r om ed i o de 3 e d ad es * / t t i n c l u d e < s t d i o . h> tíinclude< conio.h>
mai n( )
{ in t
e1,e2,e3;
float prom; p rin tf("T e cle a la
e d ad de l a p r i m e r a p e r s o n a
");
e d ad de l a
");
s c a n f ( " % d " , & e 1) ; p rin tf("T e cle a la
s egu nda p e r s o n a
scanf("% d",&e2 );
p r i n t f ( " T e c l e a l a e d a d de l a t e r c e r a p e r s o n a " ) ; s c a n f ( " 96 d " , & e 3 ) ; prom=(e1+e2+e3)/3;
l * t e n e r siempre p r e s e n te l a p re c e d e n c ia
de o p e r a d o r e s */ p r i n t f ( " E l p r o m e d i o de e d ad de l a s
3 p e r s o n a s e s %f ",
prom);
}
Explicación L a p rim e ra lín e a , e n c e rra d a e n tre /* y * /, es u n c o m e n ta rio , n o es u n a in stru c c ió n . L a p rim e ra p a rte d e e ste p ro g ra m a es la in c lu s ió n d e l a rc h iv o de c a b e c e ra s t d i o . h p a ra p o d e r u s a r la s fu n c io n e s p r i n t f y s c a n f ; ta m b ié n se in clu y e la b ib lio te c a
conio.h
y a u n q u e e n e s te e je m p lo n o s e u tiliz a n in g u n a
fu n c ió n d e é s ta n o a fe c ta s u e je c u c ió n . Es m u y fác il id e n tific a r c u á l s e rá el o rd e n e n q u e s e e je c u ta rá n e sta s in stru c c io n e s: se p id e la p rim e ra e d ad , s e a lm a c e n a e n e í ; s e s o lic ita la se g u n d a e d a d y s e g u a rd a en
e2\
p o ste rio rm e n te s e p id e la te r c e r a e d a d y s e a lm a c e n a e n
el c á lc u lo y s e a s ig n a a
prom
e3;
d e s p u é s s e h a ce
(e n e s ta m is m a lín e a h a y u n c o m e n ta rio , re c u e rd e q u e
éste es tra n s p a re n te p a ra el c o m p ila d o r) y p o r ú ltim o s e im p rim e el p ro m e d io de las e d ad e s. L a se c u e n c ia c ió n p a re c e se n c illa y e n re a lid a d lo es, sin e m b a rg o , s e tra ta d e u n a e stru c tu ra d e c o n tro l ta n im p o rta n te q u e p re v a le c e e n to d o s lo s p ro g ra m a s, p o r m u y gran d es o p e q u e ñ o s q u e se a n . Y a q u í lo re a lm e n te im p o rta n te c o n siste e n e n c o n tra r la s e c u e n c ia e x a c ta p a ra q u e lo s p ro g ra m a s fu n c io n e n d e m a n e ra e ficien te. (continúa)
www.FreeLibros.me
Capítulo 3
Prog ram ació n estructurada
(continuación )
Ejecución Teclea l a
edad de
l a prim erapersona
Teclea l a
edad de
l a s egu nda p e r s o n a 15
Teclea l a
edad de
l a t e r c e r a p e r s o n a 10
E l p r o m e d i o de
e d ad de l a s
5
3p e r s o n a s e s 10.00
Eje r c ic io 3.2 Encuentre el área de un trapecio
Descripción S o lic ita r b a s e m en o r, b a s e m a y o r y a ltu ra d e l tra p e c io . A p lic a r la fó rm u la d e l tra p e c io . M o stra r el re su lta d o . Variabl es Nombre
Tipo
Uso
B
Real
Base menor.
B
Real
Base mayor.
H
Real
A ltura.
R
Real
R esu ltado.
Codificación l * A r e a de un t r a p e c i o * / f t i n c l u d e < s t d i o . h> # i n c l u d e < c o n i o . h>
mai n( )
{ float b , B , h , r ; c l r s c r ( ); p r i n t f f “I n s e r t e l a m edi da de l a
base menor\n");
scan fC % f',& b ); p r i n t f f "I n s e r t e l a m edi da de l a
base m ayor\n");
s c a n f f "%f", &B) ; p r i n t f f "I n s e r t e l a
a ltu ra
de su t r a p e c i o “) ;
s c a n f ( “*6fu, & h ) ;
www.FreeLibros.me
3.3 Estructuras d e co n tro l
r=(b+B) *h/2; p rin tf("E l
a r e a de s u t r a p e c i o e s
%.2 f " , r ) ;
getch(); return 0 ;
}
Explicación A q u í, a d e m á s d e
std io .h
s e ría o b lig a to rio in c lu ir el a rc h iv o d e c a b e c e ra
y a q u e e n él s e e n c u e n tra n im p le m e n ta d a s la s fu n c io n e s
c irscrf)
y
con io.h,
getchf).
D espués d e la d e c la ra c ió n d e v ariab les s e lim p ia la p an talla, y a q u e a c o n tin u a c ió n está la fu n c ió n c i r s c r f ) . L u e g o s e so licitan b a se m ayor, b a se m e n o r y altu ra, q u e se a lm ac en a n e n su s resp ec tiv a s variab les: b , b , /?. S e asig n a el re su lta d o d e la fó rm u la en la v a ria b le r y fin alm e n te se m u e stra el re su lta d o c o n d o s d e c im a le s , y a q u e la c a d e n a d e tip o %. 2 f in d ic a q u e e l d a to a im p rim ir es c o n d o s d e c im a le s. E n la ú ltim a lín e a s e e n c u e n tra la fu n c ió n g e t c h f ) la c u a l e sp e ra q u e se p re s io n e u n a tecla; esto h a c e q u e el p ro g ra m a n o term in e a b ru p ta m e n te, sin o q u e c u a n d o e je c u ta el ú ltim o p r i n t f f ) s e q u e d a rá e n p a u sa o e n e sp e ra h a sta q u e s e p re s io n e a lg u n a tecla.
Ejecución I n s e r t e l a m edi da de l a
b a s e menor
3.2 I n s e r t e l a m edi da de l a
b a s e mayor
5 Inserte l a
a ltu ra
de s u t r a p e c i o
7
El á re a d e l tra p e c io es 28.7.
Eje r c ic io 3.3 Calcule el salario de un trabajador con el total de percepciones y deducciones
Descripción S o lic ita r c a n tid a d d e h o ra s tra b a ja d a s. S o lic ita r el s u e ld o q u e s e p a g a p o r c a d a h o ra tra b a ja d a .
www.FreeLibros.me
(c o n tin ú a )
Capítulo 3
Prog ram ació n estructurada
(continuación) C a lc u la r e l s u e ld o b ru to . C a lc u la r el m o n to p o r c o n c e p to d e d e d u c c io n e s. C a lc u la r el m o n to p o r c o n c e p to d e p e rc e p c io n e s. C a lc u la r e l s u e ld o neto . M o stra r lo s re su lta d o s.
Vari abl es Nombre
Tipo
Uso
H
Entero
C a n t i d a d de h o r a s t r a b a j a d a s .
Sh
Real
Sueld o p o r h o ra t r a b a j a d a .
Sb
Real
Sueld o b r u t o .
D
Real
T o t a l de d e d u c c i o n e s .
P
Real
T o t a l de p e r c e p c i o n e s .
Sn
Real
Sueld o neto.
Codificación /*S a l a r i o
de un t r a b a j a d o r * ¡
H include
Uinclude
mai n( )
{ float s n , s b , s h , d , p ; i n t h;
e lr s e r (); p rin tf("E scrib a la
c a n t i d a d de h o r a s t r a b a j a d a s : \ n " ) ;
s c a n f ( " * 6d " , & h ) ; p r i n t f ( " E s c r i b a l a pa g a x h o r a : \ n " ) ; scanf("% f",&sh); sb=h*sh; d=sb*.1 2 ; p = s b * . 15; sn=sb+p-d ;
www.FreeLibros.me
3.3 Estructuras d e co n tro l
prin tf("T u
s u e l d o b r u t o e s % . 2 f , \ n t u s d e d u c c i o n e s so n %. 2f ,
\n t u s p e r c e p c i o n e s s on %. 2 f
\n e l n e t o e s 96. 2 f ' ' , s b , d , p , s n ) ;
getch(); return 0 ;
}
Explicación Se s o lic ita la c a n tid a d d e h o ra s tra b a ja d a s a d e m á s d e lo q u e s e p a g a p o r c ad a h ora, y s e a lm a c e n a n e n /? y s /? re s p e c tiv a m e n te . S e c a lc u la el s u e ld o b ru to y se a sig n a a s b ; p o ste rio rm e n te s e a s ig n a n a la v a ria b le d la s d e d u c c io n e s, la s c u ales so n el 12% d e l s u e ld o b ru to ; d e ig u a l fo rm a e n p s e g u a rd a n la s p e rc e p c io n e s q u e co rre sp o n d e n al 15% d e l m ism o sa la rio b ru to . S e c a lc u la el su e ld o n e to q u e c o n siste en el s u e ld o b ru to m e n o s la s d e d u c c io n e s m á s las p e rc e p c io n e s y fin a lm e n te se m u e stra n la s v a ria b le s c o n lo s re s u lta d o s d e l s u e ld o n e to d e sg lo s a n d o lo s d e m á s c o n c e p to s.
Ejecución Escriba l a
c a n t i d a d de h o r a s t r a b a j a d a s :
20 E s c r i b a l a pa g a x h o r a : 40 Tu s u e l d o b r u t o e s 800. 00 t u s d e d u c c i o n e s s on 9 6 .00 t u s p e r c e p c i o n e s s on
120.00
e l n e t o e s 824. 00
Eje r c ic io 3.4 Encuentre el prom edio de cuatro núm eros
Descripción S o lic ita r lo s 4 n ú m e ro s a p ro m e d ia r. A p lic a r la o p e ra c ió n p a ra c a lc u la r el p ro m e d io . M o stra r el re su lta d o . (continúa)
www.FreeLibros.me
Capítulo 3
Prog ram ació n estructurada
(continuación) Variabl es Nombre
Tipo
Uso
A
Entero o re a l
Primero a p ro m e d ia r.
B
Entero o re a l
Segundo a p r o m e d i a r .
C
Entero o re a l
Tercero a p ro m e d ia r.
D
Entero o re a l
Cuarto a p r o m e d ia r .
tot
Real
R esu ltado.
Codificación l * P r o gr a ma p a r a p r o m e d i a r 4 números*/ #include # i n c l u d e < c o n i o . h>
main ()
{ float a , b , c , d , t o t ; c lrs c rO ; p r i n t f ( " Inserte
el
1er
numero a p r o m e d i a r
el
2 do numero
a promediar
\n\n\a")
el
3 e r numero a p r o m e d i a r
\n\n\a")
el
4tO numero a p r o m e d i a r
\n\n\a")
\n\n\a")
s c a n f ( U96 f u, & a ) ; p r i n t f f ” Inserte s c a n f ( H96 f " , & b ) ; prin tf("
Inserte
s c a n f ( u% f " , & c ) ; p r i n t f f " Inserte s c a n f ( u% f " , & d ) ; tot=(a+b+c+d) /4; p r i n t f f ' E l promedio es % . 2 f * , t o t ) ; getchf); return
0;
}
Explicación E ste p ro g ra m a fu n c io n a e s e n c ia lm e n te c o m o el p ro m e d io d e la s tre s e d ad es e x p lic a d o a n te rio rm e n te ; es d e cir, s e s o lic ita n lo s n ú m e ro s y s e a lm a c e n a n e n a ,
www.FreeLibros.me
3.3 Estructuras d e co n tro l
b, c
y d re s p e c tiv a m e n te ; s e c a lc u la el p ro m e d io y s e a s ig n a a t o t , p o ste rio rm e n te
se m u e s tra la v a ria b le t o t c o n d o s d e c im a le s . L a d ife re n c ia s e v e ría e n la p re s e n ta c ió n d e l p ro g ra m a , y a q u e c a d a v e z q u e se s o lic ita u n n ú m e ro a p ro m e d ia r, a v a n z a ría d o s sa lto s d e lín e a y a d e m á s se e sc u c h a ría u n “b¿p” .
Ejecución Inserte e l
1 e r numero a p r o m e d i a r
3 I n s e r t e e l 2do numero a p r o m e d i a r 5 I n s e r t e e l 3 e r numero a p r o m e d i a r 8
I n s e r t e e l 4 t o numero a p r o m e d i a r 6
E l promedio es 5.50
Eje r c ic io 3.5 Calcule el m onto de las ventas del día de una pastelería
Descripción D efin ir el p re c io d e c a d a p ro d u c to o ta m a ñ o d e p a ste l. S o lic ita r la c a n tid a d d e p a s te le s g ra n d e s, m e d ia n o s y c h ic o s q u e s e v e n d ie ro n . S o lic ita r ta m b ié n la c a n tid a d d e p a n e s v e n d id o s. C a lc u la r la v e n ta d e l d ía m u ltip lic a n d o la c a n tid a d d e c a d a p ro d u c to p o r s u p rec io . M o stra r el re su lta d o . Vari abl es Nombre
Tipo
Uso
G
Constante r e a l
P r e c i o p o r p a s t e l grande.
M
Constante r e a l
P r e c i o p o r p a s t e l medi ano.
CH
Constante r e a l
P recio por p a ste l
P
Constante r e a l
P r e c i o p o r p i e z a de pan.
G
Entero
Número de p a s t e l e s g r a n d e s v e n d i d o s .
chico.
(c o n tin ú a )
www.FreeLibros.me
50
Capítulo 3
Prog ram ació n estructurada
(continuación) Vari abl es Nombre
Tipo
Uso
M
Entero
Número de p a s t e l e s m edi a nos v e n d i d o s .
Ch
Entero
Número de p a s t e l e s c h i c o s v e n d i d o s .
P
Entero
Número de p i e z a s de pan v e n d i d o s .
Tot
Real
T o t a l de v e n t a .
Codificación /*VENTA DE PASTELES */ tt i n c l u d e < c o n i o . h> tt i n c l u d e < s t d i o . h >
ttdefine G 150.00 ttdefine M 100.00 Udefine CH 5 0 .00 ttdefine P 2 . 2 0
mai n( )
{ í n t g,m ,ch,p; ftoat t o t ; clrs c rf); p r i n t f ( " I n t r o d u z c a e l numero de p a s t e l e s GRANDES v e n d i d o s \ n " ) ; s c a n f ( "%¿" , & g ) ; p r i n t f ( uI n t r o d u z c a e l numero de p a s t e l e s MEDIANOS v e n d i d o s \ n " ) ; s c a n f ( " M ", &m) ; p r i n t f ( " I n t r o d u z c a e l numero de p a s t e l e s CHICOS v e n d i d o s \ n " ) ; s c a n f ( "%¿" , & c h ) ; p r i n t f ( " I n t r o d u z c a e l numero de PANES v e n d i d o s \ n u) ; s c a n f ( " % i u,&p) ; tot=(G*g)+(M*m)+(CH*ch)+(P*p); p r i n t f ( uSu v e n t a t o t a l
e s de %. 2 f ” , t o t ) ;
getch(); return 0;
>
www.FreeLibros.me
3.3 Estructuras d e co n tro l
Explicación D e sp u é s d e lo s a rc h iv o s d e c a b e c e ra s e d e fin e n la s c o n sta n te s
g,
co n
m, c h , p
sus re sp e c tiv o s v a lo re s, e n lo s c u ales s e a lm a c e n a el p re c io d e lo s d ife re n te s ta m a ñ o s d e p a ste le s. S e s o lic ita la c a n tid a d d e p a s te le s v e n d id o s g ra n d e s , m e d ia n o s , c h ic o s y p a n e c illo s; re s p e c tiv a m e n te s e g u a rd a n e n
g , m, c h y p .
P o s te rio rm e n te s e a s ig n a el re s u lta d o d e l c á lc u lo d e l to ta l d e v e n ta s a
tot,
el cu al
c o n siste e n la s u m a d e lo s p ro d u c to s d e l p re c io d e c a d a p a ste l p o r el d e p a ste le s v e n d id o s. A l final s e m u e s tra el re s u lta d o .
Ejecución I n t r o d u z c a e l numero de p a s t e l e s GRANDES v e n d i d o s 9 I n t r o d u z c a e l numero de p a s t e l e s MEDIANOS v e n d i d o s 7 I n t r o d u z c a e l numero de p a s t e l e s CHICOS v e n d i d o s 4 I n t r o d u z c a e l numero de PANES v e n d i d o s 50 Su v e n t a t o t a l
e s de 2 360.00
Eje r c ic io 3.6 Realice las cuatro operaciones básicas con dos núm eros
Descripción P é d ir d o s v a lo re s c o n lo s q u e s e lle v a rá n a c a b o la s c u a tro o p e ra c io n e s. S u m a rlo s, re s ta rlo s, m u ltip lic a rlo s y d iv id irlo s, m o s tra n d o c a d a re su lta d o .
Vari abl es Nombre
Tipo
Uso
a
Entero o re a l
P r i m e r o p e r an d o.
b
Entero o re a l
Segundo o p e r an d o.
Codificación / *MINICALCULADORA */ # i n c l u d e < s t d i o . h> t t i n c l u d e < c o n i o . h>
(c o n tin ú a )
www.FreeLibros.me
Capítulo 3
Prog ram ació n estructurada
(continuación)
main ()
{ float
a,b;
c lrs c rO ;
p r i n t f f " \ n T e c l e a t u p r i m e r numero " ) ; s c a n t ( u% f " , & a ) ; p r i n t f ( " \ n T e c l e a t u s egu ndo numero
");
s c a n f ( u% f \ & b ) ; p r i n t f ( " \nLos r e s u l t a d o s s on : % . 2 f % . 2 f % . 2 f 2f ",a+ b,a-b,a*b,a/b);
getchf); return 0 ;
Explicación E ste e je m p lo in ic ia s o lic ita n d o d o s v a lo re s q u e s o n g u a rd a d o s e n a y ó, p o ste rio rm e n te m u e s tra lo s re s u lta d o s, p e ro e n e s ta o c a s ió n n o s e u tiliz a un a v a ria b le c o n el fin d e a lm a c e n a r e s o s re s u lta d o s , s in o q u e s e im p rim e n d ire c ta m e n te (c o n d o s d e c im a le s ), u sa n d o e n la fu n c ió n
p rin tf
la s e x p re sio n e s
a ritm é tic a s d e la su m a , resta, m u ltip lic a c ió n y d iv is ió n d e lo s d o s n ú m e ro s q u e in tro d u z c a el u su a rio . O b s e rv e q u e p a ra q u e a p a re z c a el re s u lta d o d e u n a e x p re sió n a ritm é tic a , é sta tie n e q u e e s ta r fu e ra d e la s c o m illa s y d e b e e sta r a c o m p a ñ a d a o p re c e d id a d e s u re s p e c tiv a c a d e n a d e tip o d e d ato .
Ejecución T e c l e a t u p r i m e r numero 32 T e c l e a t u segundo numero 54 L os r e s u l t a d o s s on :
86.00
-22.00 1 728.00 0 . 5 9
Resum en E n e s te c a p ítu lo s e e s tu d ia ro n la s p a rte s m ín im a s q u e u n p ro g ra m a e n C d e b e te n e r d e a c u e rd o c o n la m e to d o lo g ía d e la p ro g ra m a c ió n e stru c tu ra d a .
www.FreeLibros.me
Evaluación
L a p ro g ra m a c ió n e s tru c tu ra d a es u n a té c n ic a p a ra c re a r p ro g ra m a s m e d ia n te c ie rta s reg la s q u e p e rm ite n q u e u n p ro g ra m a s e p u e d a m o d ifica r, le e r y m a n te n e r fá c ilm e n te . S u c a ra c te rís tic a p rin c ip a l es el u so d e e s tru c tu ra s d e c o n tro l. L a s e c u e n c ia c ió n es la e s tru c tu ra d e c o n tro l q u e s e e x p lic a e n e s te c a p ítu lo y es a q u e lla e n la q u e las in s tru c c io n e s s e e je c u ta n u n a d e sp u é s d e o tra e n el o rd e n en q u e e s tá n e sc rita s . U n p ro g ra m a d e b e te n e r u n a s o la e n tra d a y u n a s o la sa lid a , y p o r lo g e n e ra l c o n s ta d e v a ria s fu n c io n e s o su b p ro g ra m a s. E x is te n fu n c io n e s in te rn a s, la s c u a le s y a v ie n e n im p le m e n ta d a s e n el le n g u a je , a d em ás fu n c io n e s e x te rn a s , q u e s o n d ise ñ a d a s p o r el p ro g ra m a d o r. P a ra u tiliz a r la s fu n c io n e s q u e o fre c e el le n g u a je es n e c e sa rio in c lu ir el a rc h iv o d e c a b e c e ra o b ib lio te c a (lib re ría ) c o rre s p o n d ie n te c o n la d ire c tiv a ttinciude. U n a b ib lio te c a es u n a rc h iv o q u e c o n tie n e a e so s su b p ro g ra m a s lla m a d o s fu n c io n e s. C a d a b ib lio te c a es u n a c o le c c ió n d e fu n c io n e s; u n a d e la s m á s u tiliz a d a s es std io.h,
q u e p ro v e e la s fu n c io n e s d e e n tra d a s y s a lid a s están d a r.
A u n q u e u n p ro g ra m a p u e d e te n e r m ú ltip le s fu n c io n e s, d e b e e x is tir la fu n c ió n p rin c ip a l - m a i n - ; d e sd e é s ta s e u tiliz a n las fu n c io n e s in te rn a s y e x te rn a s.
Evaluación I. C onteste las siguientes preguntas. 1. L a ___________________ es u n a té c n ic a q u e b a jo c ie rta s reg la s p e rm ite crear, m o d ificar, le e r y m a n te n e r p ro g ra m a s fá c ilm e n te . 2 . U n a ___________________ es u n s u b p ro g ra m a c o n u n a ta re a p re d e te rm in a d a . 3 . ¿ Q u é tip o d e fu n c io n e s s e p u e d e n e n c o n tra r e n el le n g u a je C ? E x p liq u e la d ife re n c ia e n tre a m b a s. 4. A l c o n ju n to d e a rc h iv o s d o n d e s e e n c u e n tra n im p le m e n ta d a s la s fu n c io n e s se le d e n o m in a ___________________ . 5 . ¿ C u á l d e lo s s ig u ie n te s es e je m p lo d e u n a rc h iv o d e c a b e c e ra ? a) p r i n t f b) i n c l u d e c) c o n i o . h d ) define 6 . S i d e s e a re a liz a r o p e ra c io n e s m a te m á tic a s c o m o ra íz c u a d ra d a o p o te n c ia , p o r e je m p lo , s e d e b e in c lu ir la b ib lio te c a l l a m a d a ____________________
www.FreeLibros.me
53
Capítulo 3
Prog ram ació n estructurada
7 . L a b ib lio te c a q u e s e re q u ie re p a ra u tiliz a r la fu n c ió n
.
8
prin t f
es
¿ C u á l es el n o m b re d e la fu n c ió n , a p a rtir d e la c u a l in ic ia la e je c u c ió n ? a) v o i d b) s c a n t C) s t r i n g . h d ) main
9 . ¿E s in d is p e n s a b le p a ra s u e je c u c ió n q u e u n p ro g ra m a te n g a c o m e n ta rio s ? a) c ie rto b) falso E x p liq u e p o r q u é ____________________________________________________________ 10. ¿ P a ra q u é s irv e la in s tru c c ió n
return 0?
11. L as in s tru c c io n e s m ás u tiliz a d a s lla m a d a s d ire c tiv a s d e p re p ro c e s a m ie n to , las c u ales s e e je c u ta n a n te s d e l p ro c e s o d e tra d u c c ió n s o n ___________________ e in ic ia n c o n el s í m b o l o ____________________ 12. L as ___________________ sirv e n p a ra g u ia r el o rd e n e n q u e s e e je c u ta n las in stru c c io n e s e n u n p ro g ra m a .
n . Resuelva el siguiente ejercicio, escriba lo que im prim e el siguiente program a. /* I m p r e s i ó n de un c he que */ # in clu d e
# in clu d e
m a i n ()
g o t o x y f19,5); p r i n t f ( "
\n");
g o t o x y f19,6); p r i n t f f ' ^ g o t o x y f 19, 7) ; p r i n t f f ” ^
CAPTURA DE DATOS
3");
g o t o x y ( 19,8); p r i n t f f " *
g o t o x y ( 1 9 , 9 ) ; p r i n t f ( " ..................... g o t o x y f 1 9 , 1 0 ) ; p r i n t f f "* g o t o x y f 1 9 , 1 1 ) ; p r i n t f f "* NOMBRE:
www.FreeLibros.me
\ n u) ;
Ejercicios propuestos
g o t o x y f 19,12);
p rin tff"^
55
a ”) ;
g o t o x y f 1 9 , 1 3 ) ; p r i n t f f ” 3 HORAS TRABAJADAS:
g o t o x y f19,14);
p r i n t f f ”a
g o t o x y f 19,15) ;
p r i n t f f ” a CUOTA POR HORA:
g o t o x y f 19,16);
p r i n t f f "3
3-;;
3 ”) ; 3"; ;
3 ”) ;
g o t o x y f 19,17) ; p r i n t f f " ...............................................................\ n " ) ; g o t o x y f 29,11); getsfNombreEmp); g o t o x y f 39,13);
s c a n f f "%c/", & H o r a s T r a b ) ;
g o t o x y f 37,15);
s c a n f f ”% f ” , & C u o t a H o r a ) ;
Sueldo
= C uo ta H or a* H o r a s T r a b ;
p r i n t f f ” ............................................................................................ \ n " ) ; p r i n t f f "3
BANCOMER S . A .
p r i n t f f ”3
DE C . V .
3 \n ") ;
3\n");
p r i n t f f "3 GUADALAJARA, J A L , A p r i n t f f ”3
14 DE FEBRERO DE 2008.
3\n");
3 \ n ”) ;
p r i n t f f "3 PAGUESE A LA ORDEN DE: %-30s z \ n ” ,NombreEmp); p r i n t f f ”3 p r i n t f f ”3 M
3 \ n ”) ; CANTIDAD DE: $ % - 1 5 . 2 f
p r i n t f f ”3
3\n”,S ueld o);
3\n";;
p r i n t f f " 3 C7>\. A/Í7W. 723456
FIfíWA:
3\r?" ; ;
p r i n t f f ” .............................................................................................\ n " ; ; p r i n t f ( " P R E S I O N E PARA C O N T I N U A R . . . ”) ; getchf); return 0 ;
Ejercicios propuestos I. Codifique p ro g ram as que hagan lo siguiente. 1. C a lc u la r el á re a y el v o lu m e n d e u n c ilin d ro . 2 . R e c ib ir u n a c a n tid a d d e se g u n d o s y m o s tra r s u e q u iv a le n te e n el fo rm a to hrs.: m in: seg. 3 . C a lcu lar el n ú m e ro co n 10 o p e ra cio n e s d e e sta s e rie 4 / 1 - 4 / 3 + 4 / 5 - 4 / 7 + 4 / 9 ...
4 . O b te n er, p id ie n d o las c a n tid a d e s in v e rtid a s, lo s p o rc e n ta je s c o rre s p o n d ie n te s a c a d a u n a d e tre s p e rs o n a s q u e d e c id ie ro n in v e rtir c o n ju n ta m e n te , c o n re s p e c to al to ta l.
www.FreeLibros.me
56
Capítulo 3
Prog ram ació n estructurada
5 . D ib u ja r u n c u a d ro d e a ste risc o s d e 4 x 4. 6 . L e e r u n n o m b re d e l te c la d o y e s c rib irlo e n A S C II.
n . E scriba el contenido de cada variable al ejecutarse el program a. 1. ü in clu d e
< std io .h >
tíin clu d e
main()
{ in t
a= 5 , b = 3 , c = 1 0 , d= 5 5 ;
c=a+b*b-6 ; d = c - 10 %4 * 3 / 6 ; b=b*d+c; b - 15; p rin tf
( " 96d \ n 96d \ n 96d \ n 96d \ n " , a , b , c , d ) ;
getch(); return
0;
} a ________________________ b
________________________
c ________________________ d ________________________
2
. ttin clu d e
< std io .h >
ftin clu d e
ttdefi ne M 3
main()
{ in t
a= 5 , b = 8 , c ;
c=4 *a 96b ; c=c-M;
www.FreeLibros.me
Ejercicios propuestos
b=a + c -M ; a=b*M; p r i n t f ( " % d \ n * d \ n 96 d \n " , a , b , c ) ; getch(); r e t u r n 0;
} a ___________________ b ___________________
3. Hiñel u d e
üinclude
m a in ( )
{ in t
a=5,b=3,c=10,d=55;
c = a + b * b -6 ; d=c-10*4*316;
b=b*d+c; b=15; p rin tf
( "96d\n%d\n96d\n%d\n", a , b , c, d ) ;
getch(); return 0 ;
} a ___________________ b ___________________
c _____________________ d ___________________
www.FreeLibros.me
57
58
Capítulo 3
Prog ram ació n estructurada
4. H iñ e l u d e
< s td io .h >
U in c lu d e
< co n io .h >
ttdefine M 3
m a in ( )
{ in t
a= 5 , b= 8 , c ;
c=4 *a%b; c= c-M ; b=a+c -M; a=b*M; p r in tf
( " 96d\n% d\n 96d \ n " , a , b , c ) ;
getch(); retu rn
0;
}
a b c
www.FreeLibros.me
Estructuras de control selectivas
A q u í s e m e n c io n a n la s d ife re n te s fo rm a s d e m a n e ja r u n a s e le c c ió n , c la sific a n d o la e s tru c tu ra p o r s u u so c o m ú n . L as e s tru c tu ra s d e c o n tro l se le c tiv a s s o n a q u e lla s q u e e v a lú a n u n a e x p re sió n , u s u a lm e n te u n a c o n d ic ió n b o o le a n a , y a p a rtir del re su lta d o p e rm ite n to m a r d e c isio n e s e n tre u n a , d o s o m á s o p c io n e s; a e s to s e le c o n o c e c o m o s e le c c ió n c o n d ic io n a l. E x is te n tre s tip o s d e e stru c tu ra s se lec tiv a s: selección simple, selección doble y selección
m últiple. U n a c o n d ic ió n b o o le a n a es u n a e x p re s ió n q u e p u e d e te n e r c o m o re su lta d o s ó lo el v a lo r d e v e rd a d e ro o d e falso . L a c o n d ic ió n p u e d e u tiliz a r d a to s d e tip o e n te ro , re a l o c a rá c te r y se fo rm a n g e n e ra lm e n te u tiliz a n d o lo s o p e ra d o re s re la c ió n a le s , p o r e je m p lo a > b , 5 = = b.
www.FreeLibros.me
Capítulo 4
Estructuras d e co n tro l selectivas
4.1 Estructura selectiva sim ple ( i f ) E s a q u e lla q u e d e sp u é s d e e v a lu a r u n a c o n d ic ió n d e te rm in a s u v a lo r, q u e es v e rd a d e ro o fa ls o , y só lo si el re s u lta d o d e la c o n d ic ió n es v e rd a d e ro s e re a liz a rá la in s tru c c ió n o in stru c c io n e s d e fin id a s p a ra la c o n d ic ió n , s u sin ta x is es la sig u ien te: 1. if
(condición
in stru cció n
1 ) 1;
2. if
(condición
1 )
{ in stru cció n
1;
in stru cció n
2;
in stru cció n
3;
} El a lc a n c e s in tá c tic o p re d e te rm in a d o p a ra u n a e s tru c tu ra d e c o n tro l es d e u n a in stru c c ió n , c o m o s e a p re c ia e n la p rim e ra fo rm a ; c u a n d o s e re q u ie re q u e se e je c u te m á s d e u n a , las in s tru c c io n e s d e b e rá n a g ru p a rs e m e d ia n te lla v e s , ta l c o m o s e p u e d e v e r e n la se g u n d a fo rm a .
Ej e m p l o 4.1 Determ inar si un alum no aprobó un curso a partir del prom edio que obtuvo de sus tres calificaciones de los parciales que se hicieron durante el semestre ttinclude
ttinclude
mainf)
{ float c a l i ,
cal2,
p r i n t f (" Dame l a
cal3,
prom;
c a l i f i c a c i ó n d e l p r i m e r examen p a r c i a l " ) ;
s c a n f f "%f" , A c a l 1);
p r i n t f ( " Dame l a
calificación del
segundo examen p a r c i a l " ) ;
s c a n f ( " 96 f " , & c a l 2 ) ; p r i n t f ( " Dame l a
calificación del
t e r c e r examen p a r c i a l " ) ;
s c a n f f "%f" , & c a l 3 ) ;
www.FreeLibros.me
4.1 Estructura selectiva simple ( i f )
prom = ( c a l l i f
+ cal2
+ cal3)
/ 3;
(prom >= 6 0 )
p rin tf
("Aprobo");
g e t c h f ); return 0 ;
} S e p u e d e o b s e rv a r q u e la c o n d ic ió n s e e s ta b le c e u tiliz a n d o la v a ria b le
prom
que
a lm a c e n a el p ro m e d io d e l a lu m n o , d e ta l m o d o q u e si el p ro m e d io c a lc u la d o es m a y o r o ig u a l q u e 6 0 la c o n d ic ió n es v e rd a d e ra y s ó lo e n to n c e s s e re a liz a rá la in stru c c ió n a s ig n a d a q u e es im p rim ir q u e el a lu m n o a p ro b ó ; d e lo c o n tra rio , el p ro g ra m a n o re a liz a rá n a d a y sim p le m e n te te rm in a rá .
Ej e m p l o 4.2 Im prim ir si un núm ero es positivo, negativo o cero !*Positivo,
negativo o cero*!
# i n c l u d e < s t d i o . h> # i n c l u d e < c o n i o . h>
mai n( )
{ i n t num; p r i n t f ( " I n d i c a s i e l numero e s p o s i t i v o , n e g a t i v o o c e r o \ n v) ; p r i n t f ( " Dame e l
\ n ");
scanf("% i",&num ); if(num==0 ) p r i n t f ( " Es c e r o \ n n) ; if(num >0 ) p r i n t f ( " Es p o s i t i v o \ n " ) ; if(num tíinclude tídefine D 600 tídefine G 450 Hdefine S 300 ttdefine EV 150 ttdefine SEC 80 m ain(){ flo at s d e s ,
sal;
i n t h; c h a r op ; clrscr(); p rin tf(
"NOMINA\n\nu ) ;
p rin tff
"H or as t r a b a j a d a s e n l a s em a na :
scanf(
" );
&h ) ;
p rin tff
"I n d i c a e l p u e s t o q u e d e s e m p e ñ a s : " ) ;
p r i n t f ( "D = D i r e c t o r \ n G = G e r e n t e \ n S = S u p e r v i s o r \ n E E j e c u t i v o de v e n t a s \ n T = S e c r e t a r i a
\n");
s c a n f f "%c” , &op ) ; sw itch(op)
{ case
' D ' : s a l = D * h,
break; case
' G ': s a l = G * h
break; case
'S ': s a l
=S *
break; case
: sal
= EV * h;
break; case
17 ' ; s a l
= SEC * h;
break;
} if
( sal > 8000 )
{ sd es = s a l * .8;
www.FreeLibros.me
4.4 Selectiva m ú ltip le ( s w it c h - c a s e )
p r i n t f ( " T u s a l a r i o c o n e l 20 p o r c i e n t o d e d e s c u e n t o e s : $ %.2 f
", s d e s ) ;
} else p r i n t f ( " T u s a l a r i o e s : $ 96 . 2 f " , s a l ) ; g etch (); return 0 ;
}
Explicación E n e s te p ro g ra m a s e s o lic ita n d o s d a to s al u su a rio : la c a n tid a d d e h o ras tra b a ja d a s y el p u e sto . A c o n tin u a c ió n s e c a lc u la el s a la rio b ru to ; y si é s te es m a y o r q u e $ 8 ,0 0 0 s e h a rá u n d e s c u e n to d e l 2 0 % . F in a lm e n te s e m u e s tra el s a la rio neto .
Ejecución 1.
NOMINA Horas t r a b a j a d a s e n l a s e m a n a : 2 I n d ic a e l p u e s t o que de se m p eñ a s: D = D irector G = G erente S = Supervisor E = E j e c u t i v o de v e n t a s T = Secretaria D Tu s a l a r i o e s : $ 1 2 0 0 . 0 0 2.
NOMINA Horas t r a b a j a d a s e n l a s e m a n a : 30 I n d ic a e l p u e s t o que de se m p eñ a s: D = D irector G = G erente S = Supervisor E = E j e c u t i v o de v e n t a s T = Secretaria S Tu s a l a r i o c o n e l 20 p o r c i e n t o d e d e s c u e n t o e s : $ 7 2 0 0 . 0 0
www.FreeLibros.me
Capítulo 4
Estructuras de control selectivas
E je rc ic io 4 .7 Indicar el signo zodiacal a partir de una fecha Descripción In tro d u c ir d ía y m e s d e n a c im ie n to . M o stra r el s ig n o z o d ia c a l q u e le c o rre sp o n d a .
Variables Nombre
Tipo
Uso
dia
Entero
Dia de n a c i m i e n t o .
mes
Entero
Mes de n a c i m i e n t o .
Codificación /*ANIO BI SIESTO Y SIGNO ZODIACAL*/ U i n c l u d e < s t d i o .h> # i n c l u d e < c o n i o . h> m ain() { i n t d í a , mes; c l r s c r ( ); p rin tff
"Se m o s t r a r a t u s i g n o z o d i a c a l \ n \ n "
p rin tff
"Cuando n a c i s t e ? (dd/mm) "%c//%cT, & d i a ,
scanf( p rin tf(
);
" );
&mes ) ;
"\nTu s i g n o z o d i a c a l e s :
" );
s w i t c h ( mes ) { case 1 : i f (
d ía m a in ()
{ flo at p _ i n t , c a p , t o t _ i , c a p f ; c h a r op ; p r i n t f ("BANCO N ACI ON AL\ nIn gre sa t u c a p i t a l
www.FreeLibros.me
");
Capítulo 4
Estructuras d e c o n tro l selectivas
s c a n f ("% f",& cap); p r i n t f ( " I n g r e s a l a t a s a de i n t e r e s e s
");
s c a n f ("% f",& p_int); to t_i= cap*p_int; if
(tot_i> 7000)
{ p r i n t f ( " D e s e a s r e i n v e r t i r t u cap i t a l ? \ n S = S i \ n N = N o " ) ; s c a n f ("% s",& op); s w i t c h (op)
{ case
'S ' :capf= cap+ tot_i;
p r i n t f ("TU INVERSION SERA DE $%f\nGRACIAS POR TU PR EF ER E NC IA ",c apf); break; c a s e ' N ' : p r i n t f ("TU CAPITAL ESTA SEGURO\nGRACIAS POR TU PREFERENCIA") ;
} } e l s e p r i n t f ("TU CAPITAL ESTA SEGURO\nGRACIAS POR TU PREFERENCIA") g etch(); return 0 ;
H I. C om plete los siguientes program as. 1. /*H o s p i t a l * / ü in c lu d e < stdio.h> ü i n c l u d e < c o n io . h> #de fine e1 25 Udefine e 2 16 #de fine e 3 20 #de fine e 4 32 main()
{ i n t ti p o e n f , edad, d i a s ,c o s t o t ; p r i n t f ( " HOSPITAL CERCA DEL C I E L O \ n I n d i c a t u
www.FreeLibros.me
Ejercicios propuestos
enferm edad\n1= Intoxicacion\n2= G ripa\n3= A lergia\n4= D iabetes ' ) ; s c a n f ( ' ___ " , & t i p o e n f ) ; p r i n t f (" In d ic a cuantos d ia s e s t u v i s t e h o s p ita liz a d o
");
s c a n f ("% d",& dias); p r i n t f ( " I n d ic a t u edad "); s c a n f ("*6d" , & e d a d ) ;
) case 1 :co sto t= d ia s* e1; break; c a s e 2 : c o s t o t = d i a s * ___ break; case 3:costot= dias*e3;
p r i n t f ( " E l c o s t o d e t u t r a t a m i e n t o y e s t a n c i a e s d e $ %c/" , c o s t o t ) g etch(); return 0 ;
}
/ * L l a n t a s m a rc a X * / H include < stdio.h> U in c lu d e main()
{ n _ ll; flo at t o t ; p r i n t f ( " L la n ta s X\n
);
s c a n f ("% d",& n_ll); if
(n_ll= 5)& &( __________
{ tot= n_ll*250; p r i n t f ("E l p r e c i o de cada l l a n t a e s de $ 2 5 0 . 0 0 \ n T o t a l a p a g a r : \n$%f\nGRACIAS POR TU P R E F E R E N C I A " , t o t ) ;
} if
( n _ ll > 10)
{ p r i n t f ("E l p r e c i o de cada l l a n t a e s de $ 2 0 0 . 0 0 \ n T o t a l a p a g a r : \n$%f\nGRACIAS POR TU P R E F E R E N C I A " , t o t ) ;
} getchf); return 0 ;
}
I*H or as e x t r a s * / #i n c l u d e < s t d i o . h > ü i n c l u d e m ain()
{ i n t ht; fl o a t p p h , t p , h e , p e , p d , p t ; p r i n t f ("EMPRESA P A T I T 0 \ n I n g r e s a e l pa go p o r h o r a " ) ; s c a n f ( B96 f " , _____ ) ; p r i n t f ( " I n g r e s a e l n u m e ro d e h o r a s t r a b a j a d a s " ) ; s c a n f ( " W , _____ ) ; if
( ht mai n( )
{ in t
c;
c l r s c r f );
c=1; while(c # i n c l u d e < c o n i o . h> tidefine p r e c i o
5
mai n( )
{ f l o a t 1; c h a r R;
e lrse r(); do
{ p r i n t f ( u cuantos l i t r o s
s on
");
s c a n f ( "% f" , & 1 ) ; p r i n t f ( " \ n e l pa go e s de %.2 f p r i n t f ( ” \n O t r o c a l c u l o
s/n
" fl* p re c io );
");
scanf('% c",&R);
}while(R==,s ' ) ; g e t c h f ); return
0;
}
E ste p ro g ra m a c o n tro la la re p e tic ió n m e d ia n te el c e n tin e la (o b a n d e ra )
R.
R e c u e rd e q u e lo im p o rta n te c o n re s p e c to al u so d e l c e n tin e la es q u e d e b e e sta r d e fin id o d e fo rm a q u e n o s e c o n fu n d a c o n o tro s d ato s. E n u n a c o n s ta n te lla m a d a
p r e c io
s e a lm a c e n ó el v a lo r p o r litro . S e s o lic ita el
n ú m e ro d e l i t r o s y s e re a liz a el c á lc u lo d e l p a g o . D e sp u é s d e la o p e ra c ió n se p re g u n ta si s e d e s e a re a liz a r o tro c á lc u lo , a lm a c e n a n d o la re s p u e s ta e n la v a ria b le r.
C o m o s e a p re c ia , n o s e c o n o c e d e a n te m a n o c u án tas v e c e s s e re p e tirá el
p ro g ra m a , p e ro s e g a ra n tiz a q u e al m e n o s u n a v e z s e e je c u ta rá el c u e rp o d e l c ic lo .
Ej e m p l o 5.9 Imprimir en pantalla la tabla de multiplicar de un número tecleado por el usuario, utilizando la estructura de control d o - w h i l e # i n c l u d e < s t d i o . h> # i n c l u d e < c o n i o . h> mai n( )
{
www.FreeLibros.me
5.2 Estructura rep etitiva d o - w h i l e
in t i,n ;
105
c lrs c rf);
p r i n t f f "DAME EL NUMERO DE LA TABLA DE MUL TI P LI CA R:
");
s c a n f("% d ",& n );
1 =1 ; do { p r i n t f ( " \ n %c/*%c/=%d *, n , i , n * i ) ;
i ++; } w h ile (i< = 10) ; getchf); return 0 ;
}
A q u í s e m u e s tra
lame e l
numero d e
1 al 10. S e d e c la ra n d o s v a ria b le s: la
la
n
tabla
de m u l t ip l ic a r
y g e n e ra u n a del
p a ra in d ic a r el n ú m e ro d e la ta b la q u e se
va a e la b o ra r y la ¿ p a ra re a liz a r el c ic lo d e 1 a 10. C o n fo rm e a v a n z a el c ic lo se im p rim e el re s u lta d o d e m u ltip lic a r la e s tru c tu ra
w h ile
y
do-whiie
n*i.
O b s e rv e la s d ife re n c ia s e n el u so d e
p a ra e s te e je m p lo .
E je rc ic io s re s u e lto s Ej e r c i c i o 5 .2 Adivinar en un máximo de cinco oportunidades un entero com prendido entre 1 y 100. En cada ciclo la com putadora debe decir si el que se captura es mayor o m en or que el que generó autom áticam ente
Descripción G e n e ra r u n n ú m e ro a le a to rio . S o lic ita r u n n ú m e ro al u su a rio . C o m p a ra rlo s. M o stra r e l re su lta d o . Variables Nombre
Tipo
Uso
c
Entero
C o n t a d o r de i t e r a c i o n e s .
nusuario
Entero
Número g e n e r a d o p o r e l
numcom
Entero
Guarda e l número g e n e r a d o .
usuario.
(c o n tin ú a )
www.FreeLibros.me
106
Capítulo 5
Estructuras d e c o n tro l repetitivas
(continuación)
Codificación t t i n c l u d e < s t d i o . h> tíinclude< conio.h> # i n c l u d e < s t d l i b . h> mai n( )
{ in t
c= 0 , nu s u a r i o, n u m c o m ;
clrs c r();
randomize() numcom=1 +random( 1 0 0 ); do { p r i n t f ( " \ n Dame un numero e n t e r o :
");
s c a n f f "%c/", & n u s u a r i o ) ; if(nusuario>numcom) p r i n t f ( " \n t u numero e s mayor a l m í o ”) ; else p r i n t f ( " \n t u numero e s menor a l m í o ”) ; c=c+ 1 ;
} w h i l e ( nusu ari o! =numc om && c < 5 ) ; if
(nusuario==numcom)
p rin tf("\n
¡Fe licid a d e s!
L o l o g r a s t e en
in te n to s",c);
else p r i n t f (" M ejor s u e r t e p a r a l a p r ó x im a " ) ; getch(); return 0 ;
}
Explicación A q u í s e u tiliz a la b ib lio te c a s t d l i b . h , q u e p e rm ite el u so d e la s fu n c io n e s ra ndomize( ) y random(); la p rim e ra in ic ia liz a rá el g e n e ra d o r d e n ú m e ro s p se u d o a le a to rio s , c o n u n a s e m illa q u e v a e n fu n c ió n d e la h o ra a c tu a l, lo qu e p e rm ite q u e n o s e re p ita n la s m is m a s se c u e n c ia s d e n ú m e ro s a le a to rio s . L a se g u n d a fu n c ió n p ro d u c e u n p s e u d o a le a to rio e n el ra n g o d e 0 a x-1. P o r ta l ra z ó n s e e sc rib e p rim e ro la g e n e ra c ió n d e u n n ú m e ro p se u d o a le a to rio y e n s e g u id a c o n random(i 0 0 ) s e g e n e ra el n ú m e ro e n tre 0 y 99 , p o r lo q u e a g re g a m o s 1 p a ra q u e q u e d e el v a lo r d e numcom e n tre 1 y 100. U n o d e los o p e ra d o re s q u e s e u tiliz a es / = q u e sig n ific a d ife re n te y s e lee: si n u s u a r io es
www.FreeLibros.me
5.2 Estructura rep etitiva d o - w h i l e
d ife re n te d e
numcom.
O b s e rv e m o s q u e la c o n d ic ió n e s tá c o m p u e s ta p o r dos
e n u n c ia d o s , u n id o s p o r el o p e ra d o r
&& ( a n d ) ,
q u e d e b e n s e r v e rd a d e ro s p a ra q u e
se re p ita el c ic lo . Al m o m e n to d e s e r ig u a le s
n u s u a r i o y numcom s e
im p rim e la p a la b ra
el n ú m e ro d e in te n to s; e n c a s o c o n tra rio im p rim e la le y e n d a
fe licid a d e s
y
-M e j o r s u e r t e p a r a
l a próxim a".
Ejecución (E je m p lo si s e g e n e ra a le a to ria m e n te el 11). Dame un numero e n t e r o :
50
t u numero e s mayor a l mió Dame un numero e n t e r o :
5
t u numero e s menor a l mío Dame un numero e n t e r o :
21
t u numero e s mayor a l mió Dame un numero e n t e r o :
10
t u numero e s menor a l mío Dame un numero e n t e r o :
11
¡ F e l i c i d a d e s ! L o l o g r a s t e en 5 i n t e n t o s
E je rc ic io s re s u e lto s E je rc ic io 5.3 Leer números desde el teclado y sumar los primeros cinco impares
Descripción Pfedir u n n ú m ero . V erificar si es im p a r y su m a rlo . M o stra r re su lta d o .
Vari abl es Nombre
Tipo
Uso
suma
Entero o r e a l
Guarda l a
num
Entero
Es e l número l e í d o
cont
Entero
Cuenta l a
suma de l o s números i m p a r e s . del
teclado.
c a n t i d a d de números i m p a r e s .
(c o n tin ú a )
www.FreeLibros.me
108
Capítulo 5
Estructuras d e c o n tro l repetitivas
[continuación)
Codificación /* Sumar c i n c o números i m p a r e s ,
l e í d o s d e s de e l t e c l a d o .
*/
t t i n c l u d e < s t d i o . h> tíinclude< conio.h>
mai n( )
{ in t
suma=(d, num,
c o n t =0 ;
c l r s c r f ); do{ p r i n t f ( " \n Dame un numero
n) ;
s c a n f f "%cT, &num); i f (nu m% 2 ==1 )
{ suma+=num; cont++;
} }while(cont< 5); p r i n t f ( " \ n \ n \ t L a suma de 5 números i m p a r e s e s %c/ " ,s u m a ) ; getch(); return
0;
}
Explicación S e in ic ia liz a n las v a ria b le s suma y c o n t e n 0. L a e s tru c tu ra re p e titiv a p e rm itirá re p e tir la e je c u c ió n m ie n tra s c o n t s e a m e n o r q u e 5. L a re p e tic ió n c o n s is te e n p e d ir u n n ú m e ro y a lm a c e n a rlo e n
num,
do-while
s e e v a lú a si el
re s id u o d e la d iv is ió n d e l c o n te n id o d e num e n tre d o s es uno: si es v e rd a d e ro , el n ú m e ro s e a c u m u la e n la v a ria b le suma y el c o n ta d o r s e in c re m e n ta . S e e v a lú a si
cont
es m e n o r q u e 5. S e re p e tirá n la s in s tru c c io n e s h a s ta q u e
Ejecución Dame un numero 2 Dame un numero 5 Dame un numero 3 Dame un numero 1
www.FreeLibros.me
cont
lle g u e a 5.
5.3 Estructura rep etitiva f o r
109
Dame un numero 6 Dame un numero 9
i
8
un numero 4
Dame un numero
1
L a suma de 5 números i m p a r e s e s 29
5.3 Estructura repetitiva f o r L a e s tru c tu ra d e c o n tro l
for
s e u tiliz a g e n e ra lm e n te c u a n d o la re p e tic ió n e stá
d e fin id a. E sta e s tru c tu ra m a n e ja to d o s lo s d e ta lle s d e la re p e tic ió n c o n tro la d a p o r c o n tad o r. L a re p re s e n ta c ió n d e la e s tru c tu ra re p e titiv a es la sig u ie n te : for
( expresión
1; e x p r e s i ó n 2; e x p r e s i ó n 3) in s tru c c ió n
1
donde: expresión
es el n o m b re d e la v a ria b le d e c o n tro l y s u v a lo r d e in ic io .
1
es la q u e e v a lú a la c o n d ic ió n d e c o n tro l.
expresión 2 in stru cció n
1
instrucción d e increm ento o decrem ento d e la variable d e control.
expresión 3
La 2
expresión
1
y
s o n las in s tru c c io n e s q u e h a n d e re p e tirs e .
expresión 3
sie m p re s e rá n a sig n a c io n e s, m ie n tra s q u e
expresión
sie m p re te n d rá q u e s e r u n a e x p re s ió n b o o le a n a . A l ig u a l q u e e n la s a n te rio re s
e stru c tu ra s re p e titiv a s, la s p a rte s d e la e s tru c tu ra
for
so n sim ila re s.
L as e stru c tu ra s re p e titiv a s p u e d e n s e r e q u iv a le n te s e n c ie rto s c a so s. L o id e a l es u sa r
for
c u a n d o la re p e tic ió n es d e fin id a , y la s o tra s d o s c u a n d o la re p e tic ió n
es in d e fin id a ,
w hile
g e n e ra liz a la re p e tic ió n , y la s o tra s d o s e s tru c tu ra s s o n caso s
p a rtic u la re s d e l u so d e e lla, y fa c ilita n la re p e tic ió n . Ej e m p l o 5 .1 0 Imprimir en pantalla los prim eros 15 núm eros positivos enteros en orden decreciente # i n c l u d e < s t d i o . h> t t i n c l u d e < c o n i o . h> mai n( )
{ in t i; c l r s c r ( ); (continúa)
www.FreeLibros.me
110
Capítulo 5
Estructuras d e c o n tro l repetitivas
(continuación)
f o r ( i =1 5 ; i > 0 ; i - - ) p r in tf ( "W \ i ) ; g etch f); return
0;
}
L a v a ria b le d e c o n tro l es ¿ y a d e m á s s e rv irá p a ra im p rim ir lo s s. E l n ú m e ro co n q u e in ic ia , e n e s te c a so , es 15. A c o n tin u a c ió n s e e v a lú a la e x p re s ió n 2 p a ra v erificar la c o n tin u a c ió n d e l c ic lo , q u e c u m p le la c o n d ic ió n d e s e r m a y o r a 0. F in a lm e n te s e e v a lú a la e x p re s ió n 3 p a ra d e te rm in a r la fo rm a e n q u e s e d ism in u y e la v a ria b le ; e n e s te c a so , el d e c re m e n to es d e 1. S e c o n tin ú a d e e s ta m a n e ra h a sta q u e ¿ v a le 0.
Ej e m p l o 5 .1 1 Im prim ir tod as las letras del alfabeto de forma inversa # i n c l u d e < s t d i o . h> #include mai n( )
{ char l e t r a ; clrscr();
prin tf("E stas
so n l a s l e t r a s d e l
alfabeto:
");
fo r(le tra = 'Z ';le tra > = 'A ';le tra --) p r i n t f ( "%c\t " , l e t r a ) ; getchf);
return
0;
}
E ste p ro g ra m a g e n e ra las le tra s d e l a lfa b e to , in ic ia n d o c o n la ‘Z ’ y te rm in a n d o c o n la ‘A . E l le n g u a je C , re c o n o c e lo s c a ra c te re s d e l a lfa b e to p o r s u c ó d ig o A S C II. S e d e c la ra la v a ria b le l e t r a , d e tip o c a rá c te r, q u e in ic ia c o n el v a lo r d e Z. L a c o n d ic ió n in d ic a q u e s e rá v á lid a m ie n tra s l e t r a s e a u n v a lo r m a y o r o ig u al q u e A , y s e d is m in u y e d e u n o e n uno.
www.FreeLibros.me
5.3 Estructura rep etitiva f o r
Ej e m p l o 5.12 Imprimir en pantalla la tabla de m ultiplicar de un núm ero utilizando la estructura de control f o r itinel u d e < s t d io .h > t t i n e l u d e < c o n i o . h> m a i n ()
{ in t i,n ;
c lrs c rf);
p r i n t f f " D A M E EL NUMERO DE TABLA DE MULTIPLI CAR :
");
scanf("% d",&n); f o r ( i = 1 ;i < = 1 0 ; i++) p r i n t f f * \n %c/*%c/=%c/ B, n , i , n * i ) ; g e t c h f ); return
0;
}
C o m o s e o b se rv a , e n c o m p a ra c ió n c o n las o tra s e stru c tu ra s d e c o n tro l re p e titiv a s, en u n a s o la lín e a s e c o n tro la el c ic lo ; y a q u e s e in ic ia liz a la v a ria b le s e v e rific a la c o n d ic ió n y la fo rm a d e in c re m e n ta r la v a ria b le d e c o n tro l. Se p re g u n ta al in ic io el n ú m e ro d e la ta b la a m u ltip lic a r, s e e v a lú a la e s tru c tu ra y s e g e n e ra la m is m a d e l 1 al 10. S e d e c la ra n d o s v a ria b le s n p a ra in d ic a r el n ú m e ro d e la ta b la q u e s e v a a h a c e r y la ¿ p a ra re a liz a r el c ic lo d e 1 a 10 p a ra la m u ltip lic a c ió n , y d e n tro d e l c ic lo s e m u e s tra el re s u lta d o d e m u ltip lic a r n*i. Es im p o rta n te m e n c io n a r q u e si s e re q u ie re la re p e tic ió n d e m á s d e u n a lín e a es n e c e sa rio e s c rib ir e n tre lla v e s las in stru c c io n e s. E n la e s tru c tu ra d e c o n tro l f o r s e p u e d e o m itir c u a lq u ie ra d e las tre s e x p re sio n e s e in c lu so la s tre s . S i s e o m ite la e x p re s ió n 1 es p o rq u e s e in ic ia liz ó la v a ria b le de c o n tro l e n a lg u n a o tra p a rte d e l p ro g ra m a , si s e o m ite la e x p re s io n 2 , s e su p o n e q u e la c o n d ic ió n es v e rd a d e ra , c re a n d o u n c ic lo in fin ito , y si s e o m ite la e x p re sió n 3 , se rá p o rq u e el in c re m e n to s e d a d e n tro d e l b u cle. R e su m ie n d o , la d e fin ic ió n d e w h i i e , d o - w h i le y f o r p u e d e s e r e q u iv a le n te en c ie rto s c a so s. A c o n tin u a c ió n s e c o m p a ra n la s tres.
www.FreeLibros.me
112
Capítulo 5
Estructuras d e c o n tro l repetitivas
1. f o r ( e x p r e s io n 1 ; e x p r e s io n 2 ; e x p r e s io n 3 ) in s t r u c c ió n 1 ;
2
.
e x p r e s i o n l; w h ile ( e x p r e s io n 2 )
{ in s t r u c c ió n 1 ; e x p r e s io n 3 ;
} 3. e x p r e s i o n l; do { in s t r u c c ió n 1 ; e x p r e s io n 3 ; } w h ile ( e x p r e s io n 2 ) ;
E je rc ic io s re s u e lt o s Ej e r c i c i o 5 .4 Crear un marco en la pantalla utilizando asteriscos en las coordenadas (1,1), (1,80), (80,24) y (1,24)
Descripción D ib u ja r u n a lín e a h o riz o n ta l e n la p a rte su p e rio r d e la p a n ta lla . D ib u ja r u n a lín e a v e rtic a l e n el la d o d e re c h o d e la p a n ta lla . D ib u ja r u n a lín e a h o riz o n ta l e n la p a rte in fe rio r d e la p a n ta lla . D ib u ja r u n a lín e a v e rtic a l e n el la d o iz q u ie rd o d e la p a n ta lla .
V a ria b le s N o m b re
T ip o
Uso
I
E n tero
G u ard a e l c o n t a d o r .
www.FreeLibros.me
5.3 Estructura rep etitiva f o r
113
Codificación U m a r e o de l a
p a n ta lla
#i n e l u d e
itinel u d e
ttinclude
c on a s t e r i s c o s
mai n( )
{ in t i; clrscrO ;
for
( i = 1 ; i =1 ; i — )
{ gotoxy( 1 , i ) ; p r i n t f ( u* u) ; d e la y(20) ;
} g e t c h f ); return 0;
} (c o n tin ú a )
www.FreeLibros.me
114
Capítulo 5
Estructuras d e c o n tro l repetitivas
(continuación)
Explicación
E n e s te c a s o n o se le e n v a lo re s d e sd e el te c la d o y a q u e s e c o n o c e n las c o o rd e n a d a s d e l m arg e n : e l e x tre m o su p e rio r iz q u ie rd o tie n e la s c o o rd e n a d a s 1,1 y el in fe rio r d e re c h o 8 0 ,2 4 ; a d e m á s , el s ím b o lo a d ib u ja r y a s e d e fin ió y es u n a s te ris c o . L o s c ic lo s v a n d e 1 a 8 0 p a ra la p a rte su p e rio r e in fe rio r, y de 1 a 2 4 p a ra lo s lad o s.
Ejecución * * * * * * * * * * * * * * * * *
*
*
*
*
*
*
* * * * * * * * * * * * * * *
N o t a : L a im a g e n s e m o s tra rá se g ú n la d im e n s ió n y re s o lu c ió n d e l m o n ito r.
Resum en E n e s te c a p ítu lo s e re v is a ro n la s o p c io n e s d e l le n g u a je C p a ra e je c u ta r v a ria s v eces u n a in s tru c c ió n . L a ite ra c ió n c o n s is te e n re p e tir u n a o v a ria s in stru c c io n e s, y es c o n tro la d a c o n u n a e x p re s ió n q u e u s u a lm e n te es u n a c o n d ic ió n b o o le a n a . C u a n d o s e c o n o c e d e a n te m a n o c u á n ta s v e c e s s e re a liz a rá la re p e tic ió n s e le lla m a ite ra c ió n d e fin id a ; c u a n d o n o s e c o n o c e el n ú m e ro d e re p e tic io n e s se le lla m a ite ra c ió n in d e fin id a . E n le n g u a je C h a y tre s fo rm a s d e re a liz a r la s re p e tic io n e s y é sta s tie n e n tres partes: el v a lo r d e in ic io d e la v a ria b le d e c o n tro l, la q u e in d ic a c ó m o va c a m b ia n d o el v a lo r y la c o n s titu id a p o r la c o n d ic ió n o v a lo r d e v e rd a d . S e g ú n la e s tru c tu ra q u e s e u tiliz a es el o rd e n e n q u e a p a re c e n , e n a lg u n o s c a so s s e p u e d e o m itir u n a, d o s o in c lu s o la s tre s p a rte s , d e p e n d ie n d o d e lo q u e s e d e s e a rea liz a r. A la v a ria b le d e c o n tro l s e le lla m a ta m b ié n c o n ta d o r c u a n d o c u e n ta el n ú m e ro de ite ra c io n e s y s e in c re m e n ta d e u n o e n u n o ; y acumulador c u a n d o p e rm ite su m a r u n a c a n tid a d c o n s ta n te e n c a d a ite ra c ió n . C u a n d o la v a ria b le a lm a c e n a u n v a lo r b o o le a n o (fa ls o o v e rd a d e ro ) s e le lla m a bandera.
www.FreeLibros.me
Ejercicios propuestos
115
Evaluación I. D escriba los siguientes conceptos. 1 . ¿ Q u é es u n c ic lo o re p e tic ió n ? 2 . ¿ Q u é es u n c ic lo d e fin id o ? 3 . ¿ Q u é es u n c ic lo in d e fin id o ? 4. ¿ Q u é e s tru c tu ra s d e c o n tro l h a y p a ra la re p e tic ió n e n la p ro g ra m a c ió n e s tru c tu ra d a ? 5 . ¿ P a ra q u é s e u s a u n c o n ta d o r? 6 . ¿ P a ra q u é s e u s a u n a c u m u la d o r? 7 . ¿ C u á n d o s e h a c e u n c ic lo in fin ito ? 8 . ¿ E n q u é c a s o s e re c o m ie n d a u s a r w h i le y c u a n d o d o - w h i i e l 9 . ¿ Q u é su c e d e si al finalizar el e n c a b e z a d o d e l f o r se co lo c a ; (p u n to y c o m a )? 10. ¿Q u é sucede si al finalizar el en cab ezad o d e l v t n i e se c o lo c a ; (pu n to y c o m a )? 11. ¿A l fin a liz a r e l e n c a b e z a d o d e d o - w h í ie s e d e b e e s c rib ir ; (p u n to y c o m a )?
II. Resuelva el siguiente ejercicio. 1. R e a lic e c o n u n s ím b o lo u n e sp ira l, in ic ia n d o e n el c e n tro d e l m o n ito r, y h a sta q u e s e lle n e é ste ; s e d e b e c o n tro la r el a n c h o y a lto d e c a d a v u e lta , a sí c o m o el ta m a ñ o m á x im o a c u b rir e n el m o n ito r. *
*
*
*
*
*
*
*
*
*
*
*
Ejercicios propuestos I. Codifique los siguientes program as. 1. Im p rim ir lo s n ú m e ro s d e l 1 al 100.
2. Im p rim ir la se rie d e 0 1 1 2 3 5 8 . . . n (in ic ia c o n 0 1, y el sig u ien te n ú m e ro es la su m a d e los d o s a n te rio re s) h a sta u n lím ite d e fin id o p o r el u su ario .
www.FreeLibros.me
116
Capítulo 5
Estructuras d e c o n tro l repetitivas
3 . R e a liz a r u n a d iv isió n y re p e tir la o p e ra c ió n h a sta q u e u n o d e los n ú m ero s se a 0. 4. Im p rim ir lo s c o lo re s u sa n d o lo s n ú m e ro s d e l 1 al 1 0 0 c o n la fu n c ió n t e x t c o l o r f ). 5 . M o s tra r u n
re b o ta n d o p o r la p a n ta lla h a s ta p re s io n a r u n a tec la .
6 . M o s tra r la s u m a d e lo s n ú m e ro s e n tre 10 y 125. 7. E sc rib ir la s u m a d e la s e rie 1/2 + 1/3 + 1/4 + ... + 1/20. 8 . E sc rib ir u n p ro g ra m a q u e m u e s tre el m a y o r d e u n a s e rie d e n ú m e ro s in tro d u c id o s p o r el te c la d o . 9. C a lc u la r la s u m a d e u n a s e rie d e n ú m e ro s le íd o s p o r te c la d o . 10. E sc rib ir u n p ro g ra m a q u e m u e s tre el m ay o r, el m e n o r y la m e d ia d e u n a s e rie d e n ú m e ro s in tro d u c id o s p o r e l te c la d o . 11. M o s tra r el re s u lta d o d e s u m a r lo s n ú m e ro s p a re s e im p a re s q u e h a y e n tre 10 y 125. 12. M o s tra r la s u m a d e 10 n ú m e ro s e n te ro s co n sec u tiv o s. 13. Im p rim ir u n ra n g o d e n ú m e ro s e n te ro s s o lic ita n d o el in ic io y fin d e los v alo res. 14. M o s tra r el c u a d ra d o d e lo s p rim e ro s c in c o n ú m e ro s n a tu ra le s. 15. M o s tra r lo s n ú m e ro s p rim o s e n tr e el 1 y e l 125. 16. Im p rim ir to d o s lo s n ú m e ro s in fe rio re s a u n o in tro d u c id o p o r el te c la d o . 17. Im p rim ir e n p a n ta lla lo s m ú ltip lo s d e 5 q u e h a y e n tre 1 y 1000. 18. M u ltip lic a r e n tre s í lo s n ú m e ro s e n tre 1 y 10 y m o s tra r el re s u lta d o . 19. im p rim ir el fa c to ria l d e lo s n ú m e ro s c o m p re n d id o s e n tre el 2 y el 15. 20. Im p rim ir u n triá n g u lo isó sc e le s. 21. Im p rim ir los m ú ltip lo s d e u n n ú m e ro e n tre 1 y 10, m e n o re s q u e 125.
II. C om plete las líneas en blanco. 1. S u m a r lo s 100 p rim e ro s n ú m e ro s e n te ro s p o sitiv o s. # in c lu d e < s t d io .h> ttin clu d e< co n io . h>
www.FreeLibros.me
Ejercicios propuestos
m ain()
{ i n t _________ , ____ su m a= 0; c lr s c r f); f o r ( c o n t a d o r =1;
;contador++)
suma=suma+contador; p r i n t f ( " L a suma e s :
", sum a);
getch(); r e t u r n 0;
2 . E le v a r X a u n a p o te n c ia Y. # i n c l u d e < s t d i o . h> # in c lu d e < c o n io . h> m ain()
{ in t c o n t,x ,y ,re s; c lrs c rf); res=
;
p r i n t f ( " \ n E s c r i b a e l No. q u e s e e l e v a r a a u n a p o t e n c i a : s c a n f ( u*6 d " ,
);
p r i n t f ( " \ n A q u e p o t e n c i a e l e v a r a e l numero % c/:
",x);
scan f(* % d ",& y); forf
; c o n t < = y ; c o n t ++) res=res*x;
p r i n t f ( " \ n E l %c/ e l e v a d o a l a p o t e n c i a getchf) ; return 0;
}
3 . C a lc u la r e l fa c to ria l d e u n n ú m ero . # i n c l u d e < s t d i o . h> U in clu d e< co n io .h > m ainf)
{ i n t cont,
x;
www.FreeLibros.me
e s : % d " ,______
118
Capítulo 5
Estructuras d e c o n tro l repetitivas
;
lo n g c l r s e r f );
p r in t f f " fa c to ria l
d e l n um ero..?
");
s c a n f ( "_______" , & x ) ; Fact
=1;
f o r ( c o n t = 1 ; c o n t < = x ; _________) f a c t =cont*f a c t ; p r i n t f ( u \n
fa cto ria l
d e %c/ = %c/",
x,fa ct);
getch(); return
0;
}
4 . Im p rim ir lo s n ú m e ro s d e l 100 al 0. # i n c l u d e < s t d i o . h> t t i n c l u d e < c o n i o . h> m a i n ()
{ o; c lrs c rf); c=100; w h i l e (________;
{ p r i n t f f "*6d " , c ) ;
} g e tc h f); return
0;
}
5 . Im p rim ir la s u m a d e lo s 100 p rim e ro s n ú m e ro s. # i n c l u d e < s t d i o . h> tiin clu d e< con io.h > m a in f)
{ in t
c,sum a;
c—
www.FreeLibros.me
Ejercicios propuestos
119
c l r s c r ( ); while(c U i n c l u d e < c o n i o . h> mai n( )
{ c,son; c lrs c rf);
son=
;
w h i l e ( c < 1M )
{ p r i n t f ( " 96d“ , c ) ;
son=son+ 1 ;
} p r i n t f ("
\ n E l numero de i m p a r e s e s %c/ ",
son);
getch(); return
0;
}
7 . Im p rim ir lo s n ú m e ro s d e l 1 al 125. C a lc u la r la s u m a d e to d o s lo s n ú m e ro s p a re s p o r u n la d o y, p o r o tro , la d e to d o s lo s im p a re s. t t i n c l u d e < s t d i o . h> Uinclude mai n( )
www.FreeLibros.me
120
Capítulo 5
Estructuras d e c o n tro l repetitivas
{ in t i,
sumapar,
s umai mp ar;
c lrs c rf); s umapar=____ ; s umai mp ar=______;
1 =1 ; do
{ if(i*2= = 0) s umapar =sumapar+____ ; else sumaimpar=sumaimpar+i ; i=i+1; }while(i üinclude main()
{ float d,n; in t
c=0 ;
c l r s c r f ); p r i n t f ( " N u m e r o de d í g i t o s
de una c i f r a \ n \ n " ) ;
g o t o x y ( 1 0 , 2 ) ; p r i n t f ( " N ú m e r o s de d í g i t o s g o t o x y ( 1 0 , 4 ) ; p r i n t f ( " D a m e una c i f r a : s c a n f ( U96 f " , & n ) ; do
{ d=nl10; n= n/ 1 0 ;
www.FreeLibros.me
");
de una c i f r a " ) ;
Ejercicios propuestos
c++; }w hile(d>=1) ; g o t o x y ( 1 Q , 6 ) ; p r i n t f ( " E l numero de c i f r a s e s * t d " , c ) ; getch(); r e t u r n 0;
}
itinelude < s t d io .h > itinelude < co nio .h> m a in ( )
{ i n t num; clrscr() ; p r i n t f ( " m o s t r a r e l cu a d ra d o de un numero l e i d o d e l t e c l a d o . p r i n t f ( " s e d e t i e n e con - 1 \ n \ n " ) ; do
{ p r i n t f ("
\ndame un numero " ) ;
s c a n f ( U96d",&num) ; p r i n t f (" %c/ ", num*num) ; }w hile(num !=-1) ; getch(); r e t u r n 0;
}
Hiñelude < s td io .h > Hi n e l u d e < c o n i o . h > iti n e l ude < d o s . h > m a in ( )
{ i n t h,m ,s; clrscrf) ; p r i n t f (" s i m u l a r un r e l o j d i g i t a l \ n \ n " ) ; f o r (h = 0 ;h < 2 4 ;h++)
www.FreeLibros.me
122
Capítulo 5
Estructuras d e c o n tro l repetitivas
for(m=0;m H include
< stdlib.h>
H include
< string.h>
vo id im p rim e N c a ra c te re s fin t
cant,char
titu lo [J)
{ in t
i;
p r i n t f ( ” \ n " );
www.FreeLibros.me
166
Capítulo 6
Datos d e t ip o estructurado. A rre g lo s
f o r f i = 0 ;i
es u n a c a d e n a d e c a ra c te re s y e s t a t u r a es u n v a lo r d e tip o re a l. S e in ic ia liz a , se a sig n a n v a lo re s y s e m u e s tra n . Ej e m p l o 7.3 Solicitar y m ostrar el nom bre y tres calificaciones para cada alumno; pueden incluirse hasta 10 alum nos (arreglo de estructuras) tiinclude
Uinclude
üdefine MAX 10
mainf)
{ struct
{ c h a r no mb re[ 3 0 ] ; in t
c a l i f i c a c i ó n [3 ] ;
}alumno[MAX];
c l r s c r f ); in t i,j,n ;
/* i n i c i a l i z a r
*/
(c o n tin ú a )
www.FreeLibros.me
172
Capítulo 7
D atos d e t ip o estructurado
[continuación) f o r ( i =0; i nombrec. a p e p ) ; p r i n t f f " \n edad "); s c a n t ( u %d",&nn->edad); getchf); }
www.FreeLibros.me
7.1 Estructura
void im p rim irN o m b re (stru ct t_ datos
183
*nn)
{ p rin tff"
nombre: %s", nn- >nombrec. nom);
p rin tff"
ap p a t e r n o : %s", n n - > n o m b r e c . a p e p ) ;
p rin tf("
ap m a t e r n o : %s", nn- >nombrec. apem);
p r l n t f ( u edad: %c/" , n n - > e d a d ) ;
E je r c ic io 7.3 (Versión 3) A lm acenar en una estructura el nom bre y los apellidos de una persona, y crear otra estructura que contenga el nom bre, adem ás de tres calificaciones; alm acenar esto en un arreglo. Inicializar el arreglo, agregar datos y mostrarlos. (Solución usando un tipo de dato definido por el usuario) /* manej o de e s t r u c t u r a s a n i d a d o s c on a r r e g l o s
*/
H i n d ú de < s t d i o . h > H include
Hdefine MAX 10
typedef s t r u c t { c h a r nombre[ 2 0 ]; char a p e llp [ 10J ; char apellm [10] ; }nomc;
typedef s t r u c t
{ nomc nom; c h a r d i r e c c i o n [ 1 5 ] , t e l [ 1 0 ]; }persona;
typedef s t r u c t
{ persona pers; i n t n; } registrop;
(c o n tin ú a )
www.FreeLibros.me
184
Capítulo 7
D atos d e t ip o estructurado
(c o n tin u a c ió n ) mai n( )
{ r e g i s t r o p d a t o s [ M A X ]; in t i; c lrs c rf); p rin tf("\n
d a t o s de alumn os
\ n ");
p r i n t f ( m c u a n t o s alumn os s e i n g r e s a n
");
s c a n f ( " % d u, 8, d a t o s [ 0 ] . n ) ; fflush(stdin) ; for
( i = 0 ; i < d a t o s [ 0 J . n; i ++ )
{ p r i n t f ( " \n dame e l nombre
");
g e t s ( d a t o s [ i ] . p e r s . nom. nombre) ; p rin tf("\n
dame e l
a p e llid o paterno
");
g e t s ( d a t o s [ i].p e rs .nom .apellp); p rin tf("\n
dame e l
a p e l l i d o materno
");
g e t s ( d a t o s [ i ]. p e r s . n o m . a p e l l m ) ; p r i n t f ( " \n dame l a
d irección
");
g ets(d a to s[i] .p e rs.d ire cció n ); p rin tf("\n
dame e l
teléfon o
*);
g e t s ( d a t o s [ i ] . p e r s . t e l );
} /* m o s t r a r
*/
c l r s c r f ); p r i n t f ( " \ t nombre\t a p e l l i d o s for
\ t d i r e c c i o n \ t \ t t e l e f o n o \ n u) ;
(i=0 ; i < d a t o s [ 0 J.n;i++)
{ p r i n t f ( " \ t %s \ t 11, d a t o s [ i ] . p e r s . nom. n o m b r e ) ; p r i n t f ( " \ t *6S\t” , d a t o s [ i ] . p e r s .nom. a p e l l p ) ; p r i n t f ( n \ t 9¿ s \ t " , d a t o s [ i J . p e r s . nom. a p e l l m ) ; p r i n t f ( "% s\t", d a t o s [ i ] . p e r s . d i r e c c i ó n ) ; p r i n t f ( U96 S \ n \ n u , d a t o s [ i ] . p e r s . t e l ) ;
} getchf); return 0 ;
www.FreeLibros.me
7.2 Apuntadores
185
7.2 A puntadores U n a p u n ta d o r es u n a v a ria b le q u e c o n tie n e u n a d ire c c ió n d e m e m o ria c o m o v a lo r a lm a c e n a d o . E s d e cir, el a p u n ta d o r a lm a c e n a la d ire c c ió n d e u n a v a ria b le , y esa v a ria b le c o n tie n e u n valor. E l a p u n ta d o r d e b e d e c la ra rs e in d ic a n d o el tip o d e d a to al q u e a p u n ta e in ic ia liz a rs e a n te s d e s e r u tiliz a d o . L o s o p e ra d o re s d e u n a p u n ta d o r s o n & y \ E l s ím b o lo & es u n o p e ra d o r u n a rio y re g re sa la d ire c c ió n d e la v a ria b le a p u n ta d a ; el o p e ra d o r * d e in d ire c c ió n o d e re fe re n c ia d e v u e lv e el v a lo r c o n te n id o e n la v a ria b le a p u n ta d a. El le n g u a je C u s a lo s a p u n ta d o re s e n la m a n ip u la c ió n d e d a to s sim p le s, arre g lo s, e stru c tu ra s y fu n c io n e s; e n e s te p u n to s e e x p lic a n los d a to s sim p le s y la a ritm é tic a . Al m o m e n to d e s e r d e c la ra d o , al a p u n ta d o r s e le in d ic a el tip o d e l d a to al q u e a p u n ta . E l a p u n ta d o r es u n tip o d e d a to sim p le q u e s ie m p re s e a s o c ia a o tro tip o q u e p u e d e se r s im p le o e stru c tu ra d o . P o r e je m p lo , a p u n ta r a
fioat,
a p u n ta r a
e stru c tu ra , a p u n ta r u n tip o d e fin id o p o r el u su a rio , e tc é te ra . L a d e c la ra c ió n es sim ila r a la d e c u a lq u ie r v a ria b le , s ó lo q u e s e a n te p o n e un a ste risc o a n te s d e l id e n tific a d o r. * < i d e n t i f i c a d o r > ;
D o n d e T ip o d a t o , es el tip o d e d a to , q u e p u e d e s e r s im p le o e stru c tu ra d o ; * (a ste risc o ) in d ic a q u e la v a ria b le a lm a c e n a u n a d ire c c ió n d e m e m o ria ; i d en t i fi c a d o r es el n o m b re a s ig n a d o a la v a ria b le . in t
*apint;
float *apfloat;
A h o ra s e d e c la ra u n a v a ria b le d e tip o in t
fioat
y o tra tip o
in t:
d a to l;
f loat d a t o 2 ;
P ara a s ig n a r la s d ire c c io n e s d e las v a ria b le s a lo s a p u n ta d o re s: apint=&dato1 ; apf loat =&dat o 2 ;
www.FreeLibros.me
186
Capítulo 7
D atos d e t ip o estructurado
E n to n c e s a p i n t a lm a c e n a la d ire c c ió n d e d a t o i y apfioat a lm a c e n a la d ire c c ió n d o n d e s e e n c u e n tra a lm a c e n a d a la v a ria b le d a t o 2 . P a ra m o d ific a r el v a lo r d e d a to i y d a to 2 , m e d ia n te lo s a p u n ta d o re s *a p i n t =3; *apfioat = 3 . 2 ; A h o ra d a t o i a lm a c e n a el v a lo r 3, y d a t o 2 a lm a c e n a 3.2 . E s im p o rta n te a s ig n a r a los a p u n ta d o re s la d ire c c ió n d e la s v a ria b le s a n te s d e h a c e r o p e ra c io n e s. V eam os u n e je m p lo . Ej e m p l o 7.6 D efinir dos variables y dos apuntadores a esas variables; asignar valores a las variables usando los apuntadores /*
1.
manejo de a p untadores
septiembre
2010
*/
Itin e l u d e Uinclude main() { I* d e c l a r a c i ó n de v a r i a b l e s y apuntador a e s e t i p o de v a r i a b l e */ i n t datol; i n t * a p i n t; float d a t o 2 ; float *apfloat; p r i n t f ( " \ n Manejo de ap u ntadores
1 \n");
c lr s c r f); /* Asignando l a d i r e c c i ó n a l o s a p u n t a d o r e s */ a p i n t = &dato 1 ; apfioat = &dato 2 ; /* Asignando v a l o r e s a l a s v a r i a b l e s */ * a p i n t = 3; *apfioat =
3 .2;
www.FreeLibros.me
7.2 A p u n t a d o r e s
p r i n t f ( “\rt d a t o l %c/
d i r e c c i ó n d a to
%c/ c o n t e n i d o apuntador %c/
1
”, d a t o l , & d a t o 1 , a p i n t ) ; p r i n t f ( " \ n d a t o 2 %. 2 f
d i r e c c i ó n dato
%c/ c o n t e n i d o apuntador %c/
2
", d a t o 2 ,&dato 2 , apfloat); / * modificando l a s v a r i a b l e s */ * a p i n t = 45; *apfloat = 5 1 . 3 ; p r i n t f ( " \ n d a t o l %c/
d i r e c c i ó n d a to
1
%c/ c o n t e n i d o apuntador %c/
", d a t o l , & d a t o 1 , a p i n t ) ; p r i n t f ( " \ n d a t o 2 %.2 f d i r e c c i ó n dato %c/ ", d a to 2 ,&dato 2 , apfloat);
2
%c/ c o n t e n i d o apuntador
getch(); return 0 ; >
E n e ste e je m p lo s e a s ig n a n los v a lo re s y s e m u e s tra el c o n te n id o d e la s v a ria b le s y su d ire c c ió n , a d em ás d e l c o n te n id o d e los a p u n ta d o re s , d a t o i q u e d a c o n el v alo r d e 3 y dato 2 co n el v alo r de 3.2. E n la se g u n d a im p re sió n , s e o b se rv a q u e el v alo r de tos d ato s s e m o d ificó : m e d ia n te la m a n ip u la c ió n d e l a p u n ta d o r, d a t o i tie n e a h o ra un v a lo r d e 4 5 y d a t o 2 u n v a lo r d e 5 1 .3 (la d ire c c ió n d e las v a ria b le s s e m a n tie n e ). Es p o s ib le re a liz a r o p e ra c io n e s a ritm é tic a s u sa n d o a p u n ta d o re s , c o m o o b te n e r el re s id u o d e d iv id ir e n tre 2 el d a t o i , y a la v a ria b le d a to 2 s u m a rle 10. * a p t i n t = 3; *apfloat = 3 . 2 ; *a p i n t = *a p i n t % 2 ; *apfloat = *apfloat+1 0 ; C o n e sto , d a t o i a lm a c e n a u n 1 q u e es el re s id u o y d a t o 2 a lm a c e n a 13.2. E s im p o rta n te o b s e rv a r q u e u n a p u n ta d o r es u n a d ire c c ió n e n m e m o ria y es u n v a lo r e n te ro , p e ro u n a p u n ta d o r n o es u n e n te ro . P a ra o p e ra c io n e s d e in c re m e n to o d e c re m e n to s e p u e d e p ro c e d e r así: *a p i n t = ++(*apint) ; *apfloat = - - ( a p f l o a t ) ;
www.FreeLibros.me
188
Capítulo 7
D atos d e t ip o estructurado
R e s u lta n d o e n d a t o i el v a lo r 2 y e n d a to 2 el v a lo r 12.2. Ej e m p l o 7.7 Realizar operaciones aritm éticas con apuntadores y mostrar el resultado. La primera variable inicializa con el valor de 3, luego se obtiene el residuo de dividir entre 2 y finalm ente se incrementa en 1. La segunda variable, de tipo f l o a t , inicia con el valor 3 .2 , después se le suma 10 y finalm ente se reduce en uno /*
2
. a r i t m é t i c a de a pu ntadores
*/
Itin e l u d e Hiñelude main() { /* d e c l a r a c i ó n de v a r i a b l e s y apuntador a e s e t i p o de v a r i a b l e */ i n t datol; i n t * a p i n t; float d a t o 2 ; float *apfloat; p r i n t f ( " \ n A r i t m é t i c a de a p untadores 2 \ n " ) ; c lr s c r f); /* Asignando l a d i r e c c i ó n a l o s a p u n t a d o r e s */ a p i n t = &dato 1 ; apfloat = &dato 2 ; /* Asignado v a l o r e s a l a s v a r i a b l e s y a p lic a n d o r e s i d u o y suma*/ * a p i n t = 3; *apfloat = 3 . 2 ; p r i n t f ( " \n \n d atol valor i n i c i a l
%c/
p r i n t f ("\n dato2 valor i n i c i a l * a p i n t = *a p i n t % 2 ;
www.FreeLibros.me
", * a p i n t ) ; * apfloat);
7.2 Apuntadores
189
*apf loat = *apf loat + 1 0 ;
p rin tf
("\n\n datol
residuo 2
p rin tf
( * \ n d a t o 2 sumado 1 0
%c/ %. 2 f
", ",
*apint) ; * a pf l oa t );
/* o p e r a d o r de i n c r e m e n t o y d e c r e m e n t o */ *apint
= ++(*apint);
*apf loat = - - ( * a p f l o a t ) ;
p rin tf
("\n \n d a to l incrementado
p rin tf
( " \ n d a t o 2 de cr em en ta do
%c/ %. 2 f
",
*apint);
",
*apf¡oat) ;
getch(); return 0 ;
}
El re s u lta d o d e e s te e je m p lo s e v e así: datol
valor i n i c i a l
3
dat o2
valor i n i c i a l
3.2
datol
residuo 2
dat o2
sumando 10
datol
incrementado
dato2
de cr em en ta do
1
13.20
2 12.20
L o s a p u n ta d o re s a d a to s d e tip o e s tru c tu ra s e m a n ip u la n fá c ilm e n te , y a q u e se s u s titu y e el o p e ra d o r p u n to p o r el d e flech a. L a o p e ra c ió n (* a p in t)= 1 0 ; es s im ila r a a p in t-> 1 0 ;
Ej e m p l o 7.8 Leer en una estructura anidada los datos del nom bre com pleto y la edad, accediendo m ediante un apuntador a estructura /*
manej o de e s t r u c t u r a s co n a p u n t a d o r e s
tiinclude
Uinclude
*/
(c o n tin ú a )
www.FreeLibros.me
190
Capítulo 7
D atos d e t ip o estructurado
(icontinuación) tíinclude
< stdlib.h>
m a i n ()
{ s t r u c t t_nombr e{ c h a r nom[ 1 0 ]; c h a r apem[ 1 0 ] ; c h a r a p e p [ 1 0 J;
}; s t r u c t t_datos{ s t r u c t t _nombr e nombrec; in t
edad;
}; s tr u c t t_datos
*nn;
s t r u c t t _ d a t o s n;
c lrs c rf); nn=&n;
p r i n t f ( " \n\n L e e r d a t o s p rin ttf"
\n");
\n nombre " ) ;
s c a n f ( n %s", n n -> n om br ec . no m) ; p r i n t f ( n \n a p e l l mat ' ) ; s c a n t ( " %s", nn- >nombrec. apem); p rin tff"
\n ape p a t
");
s c a n t (" %s11, nn —>nombrec. apep) ; p r i n t t ( " \n e d ad ") ; s c a n t ( n %¿", & n n - > e d a d ) ; p r i n t f ( " \n\n M o s t r a r d a t o s p rin tt("
\n");
nombre: %s",n n -> n om br ec . no m) ;
p r i n t t ( u ap p a t e r n o : %s", n n - > n o m b r e c . a p e p ) ; p rin ttf"
ap m a t e r n o : %s", nn- >nombrec. apem);
p r i n t t ( " edad: %c/" , n n - > e d a d ) ; getchf); return
0;
www.FreeLibros.me
Evaluación
E n e s te e je m p lo s e d e c la ra n la s e stru c tu ra s y d o s v a ria b le s: u n a p a ra la e s tru c tu ra y u n a p a ra el a p u n ta d o r nn d e l tip o d e la e s tru c tu ra . S e a c c e d e a c a d a m ie m b ro de la e s tru c tu ra m e d ia n te el a p u n ta d o r nn.
Resum en L a e s tru c tu ra c o n s is te e n u n c o n ju n to d e v a ria b le s a g ru p a d a s c o n u n n o m b re ; las v a ria b le s p u e d e n s e r d e l m is m o o d e d ife re n te tip o d e d a to s. G e n e ra lm e n te , lo s d ato s e stá n re la c io n a d o s . P a ra d e fin ir u n a e s tru c tu ra s e in d ic a la p a la b ra re s e rv a d a s t r u c t y, e n tre lla v e s, los c am p o s c o n tip o d e d a to e id e n tific a d o r. Para te n e r a c c e s o a la e s tru c tu ra s e e s c rib e e l n o m b re d e la v a ria b le y e l o p e ra d o r p u n to (.) se g u id o d e l id e n tific a d o r d e l c a m p o a a c c e d e r p a ra la le c tu ra o e sc ritu ra . P a ra d e fin ir u n n u e v o tip o d e d a to s e p u e d e u tiliz a r t y p e d e f ; c o n e s to s e a s ig n a un n o m b re d ife re n te a u n tip o d e d a to . E s ta p rá c tic a es c o m ú n e n la s e stru c tu ra s . Es p o s ib le d e fin ir u n a e s tru c tu ra q u e c o n te n g a o tra s e stru c tu ra s ; a e s to s e le lla m a a n id a m ie n to d e e s tru c tu ra s . O tra a p lic a c ió n es la d e fin ic ió n d e u n a rre g lo q u e c o n te n g a e n c a d a p o s ic ió n u n a e stru c tu ra ; e s to s e c o n o c e c o m o a rre g lo de e stru c tu ra s. U n a p u n ta d o r es u n a v a ria b le d e tip o b á s ic o q u e a lm a c e n a la d ire c c ió n d e m e m o ria d e u n a v a ria b le ; s e u s a p a ra te n e r a c c e s o a v a ria b le s p o r s u d ire c c ió n , y se a p lic a e n la m a n ip u la c ió n d e d a to s sim p le s, a rre g lo s, e s tru c tu ra s y fu n c io n e s. T ie n e d o s o p e ra d o re s: el & (am persand) y el * (asterisc o ); el p rim e ro d e v u e lv e la d ire c c ió n d e m e m o ria d e u n a v a ria b le y el se g u n d o d e v u e lv e el c o n te n id o de la v a ria b le a p u n ta d a p o r el a p u n ta d o r.
Evaluación I. C onteste las siguientes preguntas. 1. U n a e s tru c tu ra es u n tip o d e d a t o ____________________ 2 . U na e stru c tu ra c o n siste e n u n c o n ju n to d e v ariab les c o n el m is m o tip o de datos. Sí (
)
No (
)
www.FreeLibros.me
191
192
Capítulo 7
D atos d e t ip o estructurado
3 . U n a e s tru c tu ra c o n s is te e n u n c o n ju n to d e v a ria b le s q u e p u e d e n s e r d e d ife re n te tip o d e dato . Sí (
)
No (
)
4. ¿ P u e d e u n a e s tru c tu ra c o n te n e r o tra ? Sí (
)
No (
)
5 . E l o p e ra d o r p u n to (.) s irv e p a ra te n e r a c c e s o a ___________________ de la e stru c tu ra . 6 . L a p a la b ra t y p e d e f p e rm ite d e fin ir u n n u e v o tip o d e d ato . Sí (
)
No (
)
7 . ¿ T ie n e el a p u n ta d o r u n tip o d e d a to ? Sí (
)
No (
)
8 . ¿ E s p o s ib le h a c e r o p e ra c io n e s a ritm é tic a s u sa n d o a p u n ta d o re s ? S í(
)
No (
)
9 . C u a n d o el o p e ra d o r & a n te c e d e a u n a v a ria b le , e n to n c e s d e v u e lv e la ___________________ d e la v a ria b le . 10. C u a n d o el o p e ra d o r * a n te c e d e u n a v a ria b le , e n to n c e s s e tie n e a c c e so al c o n te n id o d e ____________________ a p u n ta d a.
II. M uestre el resultado del siguiente ejercicio. D e fin ir u n a e s tru c tu ra c o n d a to s d e u n p a c ie n te : n o m b re , fe c h a in g re so , fe c h a sa lid a , y o tra e s tru c tu ra q u e c o n te n g a la e s tru c tu ra d e l p a c ie n te , a d e m á s d e s u e s ta d o d e sa lu d . P e rm itir a lm a c e n a r d a to s, b u s c a r u n p a c ie n te y o rd e n a r lo s p a c ie n te s p o r fe c h a d e in g re so .
Ejercicios propuestos I. Realice un p ro g ram a que efectúe lo siguiente. 1. D e fin a el m u n d o c o n c in c o c o n tin e n te s > c o m p u e sto s p o r p a ís e s q u e, a su v e z, c o n tie n e n c iu d a d e s; la s c iu d a d e s , fin a lm e n te , a lb e rg a n p u e b lo s.
www.FreeLibros.me
Ejercicios p ro p u e s to s
2 . H a g a la s d e fin ic io n e s n e c e sa ria s y la d e c la ra c ió n d e la v a ria b le del m u n d o . S u p o n g a q u e d e c a d a c o n tin e n te , p a ís, c iu d a d y p u e b lo s e c o n o c e el n o m b re y el n ú m e ro d e h a b ita n te s. 3 . M u e stre la s p o b la c io n e s d e u n c o n tin e n te .
4. O b te n g a el to ta l d e h a b ita n te s d e u n o d e lo s c o n tin e n te s. 5 . M u e stre el p ro m e d io d e la e d a d d e lo s h a b ita n te s p o r p o b la c ió n , p a ís y c o n tin e n te . 6 . M u e stre to d a la in fo rm a c ió n p o r c o n tin e n te , p a ís y p o b la c ió n .
D escriba qué realiza el siguiente program a. H i n d ú de < s t d i o . h > H include
< stdlib.h>
H include
H include
< s t r i n g . h>
s tru c t Pizza{ in t
tam;
float p r e c i o ; c h a r i n g [ 3 ] [15];
}; mai n( )
{ s t r u c t P i z z a p e d i d o s [10]; i n t in d ice= 0,o p c ,c o n t,i; do{ do{ c l r s c r f ); p r i n t f f "**************** PIZZAS p r i n t f ("1. hacer?:
*************\n \ n \ n \ n " ) ;
H a c e r p e d i d o \ n 2 . m o s t r a r \ n 3 . S a l i r \ n \ n Q u e desea ");
scanf("%d",&opc); } w h i l e ( o p c ! =1 && o p c ! =2&&opc!=3);
//************
escoger
TAMAÑO
i f ( o p c = = 1)
www.FreeLibros.me
194
Capítulo 7
D atos d e t ip o estructurado
{ c lrscr(); p rin tf("\n
t a m a n i o de su p i z z a ? \ n \ n \ n \ n " ) ;
p rin tf("1 .
Chica\n2.
Mediana\n3.
Grande\n\n\nOpcion: \ t
s c a n f ( "%c/\& p e d i d o s [ í n d i c e ] . t a m ) ; //*********** A P L I C A R PRECIO i f ( p e d i d o s [ í n d i c e ] . tam==1 ) p e d i d o s [ í n d i c e ] .precio= 45; i f ( p e d i d o s [ í n d i c e ] . tam==2 ) p e d i d o s [ í n d i c e ] .precio=70; e ls e p e d id o s[ín d ice ] .precio= 100; //************ e s c o g e r INGREDIENTES cont=0 ; do{ c l r s c r f ); p r i n t f ( u\n i n g r e d i e n t e s de s u p i z z a ? p r i n t f ("1.
Jamon\n2.
Tocino\n3.
(máximo 3 ) \ t " ) ;
Elote\n4.
Jalapenio\n5.
Salchich a \n6.
E x t r a q u e s o\ n 7 . ingredien te:
Listo\n\n\nAgregar
");
s c a n f f "%c/” , & i ) ; if(i= = 1)
s t r c p y ( p e d i d o s [ í n d i c e ] . i n g f c o n t J , "J amón") ;
if(i= = 2)
s t r c p y (p e d i d o s [í n d i c e ] . i n g f c o n t ] , " T o c i n o " );
if(i= = 3)
s t r c p y (p e d i d o s [í n d i c e ] . i n g [ c o n t ] , " E l o t e " );
i f ( i==4) s t r c p y ( p e d i d o s [ í n d i c e ] . i n g [ c o n t ] , " J a l a p e n o " ) ; if(i= = 5)
s t r c p y (p e d i d o s [ í n d i c e ] . i n g [ c o n t ] , " S a l c h i c h a " ) ;
if(i= = 6)
s t r c p y ( p e d i d o s [ í n d i c e ] . i n g f c o n t ] , "Queso");
p r i n t f ( " \ n l n g r e d i e n t e a g r e g a d o ") ; cont++; getch(); } w h i l e ( c o n t < 3 && o p c l = 7 ) ; c l r s c r f ); p r i n t f ( "Esta l i s t o
su p e d i d o " ) ;
í n d i c e ++;
} if(opc==2)
{ f o r ( i = 0 ; i < i n d i c e ; i++)
{
www.FreeLibros.me
");
Ejercicios p ro p u e s to s
p rin tf("
%c/
p re cio
%. 2 f ? n ” , p e d i d o s [ i ] . t a m , p e d i d o s [ i ] . p r e c i o ) ;
getch();
} y } w h i l e ( o p c ! =3);
}
n i . Codifique el siguiente p ro g ram a y cada uno de los incisos. 1. D e fin a u n a rre g lo d e re g is tro s q u e c o n te n g a : n o m b re d e l p ro fe so r, m a te ria s im p a rtid a s, c ó d ig o d e p ro fe s o r y sa la rio . 2 . l i s t e lo s p ro fe s o re s c o n to d o s su s d ato s. 3 . B u s q u e u n p ro fe s o r y m u e s tre su s d ato s. 4 . M u e stre to d o s lo s p ro fe so re s q u e im p a rte n u n a m a te ria e n p a rticu la r. 5 . M u e stre el p ro fe s o r c o n el s a la rio m á s alto .
www.FreeLibros.me
195
www.FreeLibros.me
Funciones (programación modular)
L a p ro g ra m a c ió n m o d u la r es u n a té c n ic a q u e c o n s is te e n s e p a ra r u n p ro b le m a e n las d ife re n te s ta re a s q u e s e q u ie re n re so lv e r, d a n d o o rig e n a la c re a c ió n d e m ó d u lo s (p e q u e ñ o s p ro g ra m a s a lo s q u e lla m a re m o s fu n c io n e s), d o n d e c a d a m ó d u lo o fu n c ió n s e d ise ñ a , s e c o d ific a y se p ro c e sa d e m a n e ra in d e p e n d ie n te . A m a n e ra d e e je m p lo , su p o n g a m o s q u e s e d is e ñ a u n p ro g ra m a q u e c a lc u la el s u e ld o d e l tra b a ja d o r d e u n a e m p re sa . P e n s a r e n el p ro b le m a de in ic io a fin es d e m a s ia d o c o m p le jo , y a q u e im p lic a m u c h o s c á lc u lo s. P o r lo tan to , es m e jo r d iv id irlo d e tal fo rm a q u e e n la e ta p a d e a n á lis is se id e n tifiq u e n las d istin ta s ta re a s a re s o lv e r p a ra c a lc u la r u n su eld o : p o r e je m p lo , c u á n to s e d e b e p a g a r d e IM S S , c u á n to d e IS P T , c u á n to de h o ras ex tra , si es q u e la s tu v o , e tc é te ra . S e p o d ría d is e ñ a r u n a fu n c ió n (o m ó d u lo ) in d e p e n d ie n te p a ra c a d a u n a d e e sta s ta re a s y al fin al “ a rm a r” to d as e sta s fu n c io n e s e n u n s o lo p ro g ra m a .
www.FreeLibros.me
198
Capítulo 8
Funciones (prog ram ación m odular)
E sto im p lic a p e n s a r e n lo g e n e ra l d e u n s u e ld o y d e s g lo s a r el p ro b le m a h a s ta sus o p e ra c io n e s m á s b á sic a s o p a rtic u la re s, lle v a n d o a c a b o u n d is e ñ o d e s c e n d e n te , ta m b ié n c o n o c id o c o m o to p d o w n . El u so d e la s fu n c io n e s h a c e la p ro g ra m a c ió n m á s fác il y e fic ie n te p u e s p e rm ite : • R e d u c ir la c o m p le jid a d d e l p ro g ra m a ( “ d iv id e y v e n c e rá s ” ). • E lim in a r c ó d ig o d u p lic a d o . • C o n tro la r fá c ilm e n te lo s e fe c to s d e lo s c a m b io s. • O c u lta r d e ta lle s d e im p le m e n ta c ió n . • R e u tiliz a r c ó d ig o . • F a c ilita r la le g ib ilid a d d e l c ó d ig o . U n a fu n c ió n re a liz a u n a ta re a e s p e c ífic a a g ru p a n d o u n c o n ju n to d e in s tru c c io n e s c o n u n n o m b re . P a ra q u e s e e je c u te n las in s tru c c io n e s c o n te n id a s e n la fu n c ió n é sta s e d e b e in v o c a r o lla m a r m e d ia n te s u n o m b re e n o tra fu n c ió n , la c u a l p u e d e Ser main. C a d a fu n c ió n p u e d e s e r d ise ñ a d a , v e rific a d a s in tá c tic a m e n te y d e p u ra d a de m a n e ra in d e p e n d ie n te ; e n o tra s p a la b ra s , c a d a fu n c ió n s e p u e d e p ro b a r s in te n e r qu e e s p e ra r a q u e e s té n p ro g ra m a d a s to d a s la s d e m á s fu n c io n e s q u e ta m b ié n se u s a rá n e n el p ro g ra m a . S in e m b a rg o , la s fu n c io n e s n o p u e d e n a c tu a r d e m a n e ra a u tó n o m a , es d e cir, n o p u e d e n e je c u ta rs e p o r s í m ism a s: su e je c u c ió n sie m p re d e p e n d e rá d e q u e s e a in v o c a d a e n a lg u n a o tra fu n c ió n y e s to a s u v e z d e b e e sta r re la c io n a d o s ie m p re c o n la e je c u c ió n d e u n a fu n c ió n ma in(). E n el le n g u a je C s e p u e d e n d is tin g u ir d o s tip o s d e fu n c io n e s: la s p re d e fin id a s y las d e fin id as p o r el p ro g ra m a d o r. L a s fu n c io n e s p re d e fin id a s s e e n c u e n tra n e n las b ib lio te c a s e s tá n d a r d e C , y es n e c e s a rio h a c e r u so d e la d ire c tiv a Uinciude p a ra in v o carlas. C o n re s p e c to a la s d e fin id as p o r e l p ro g ra m a d o r, é s te la s d is e ñ a se g ú n sus n e c e sid a d e s. D u ra n te el p re s e n te te x to s e h a e s ta d o in v o c a n d o v a ria s d e la s fu n c io n e s p red e fin id a s e n d istin to s e je m p lo s: p o r e je m p lo p r i n t f , s c a n f , c i r s c r , e n tre o tras. El o b je tiv o d e e s te c a p ítu lo e s tá o rie n ta d o a e x p lic a r al le c to r la fo rm a d e c re a r sus p ro p ia s fu n c io n e s.
Función main ( ) Es la fu n c ió n p rin c ip a l y p u e d e c o n te n e r d e p o c a s a m u c h a s lín e a s ; su p a p e l es c o o rd in a r a las o tra s fu n c io n e s m e d ia n te lla m a d a s o in v o c a c io n e s. E l sig u ie n te d ia g ra m a m u e s tra la je r a r q u ía q u e e x is te e n u n p ro g ra m a m o d u la r e n le n g u a je C ,
www.FreeLibros.me
8.1 F u n cio n e s
en el c u a l s e p u e d e v e r q u e s ie m p re d e b e e x is tir u n a fu n c ió n main y é s ta p u e d e h a c e r u so d e c u a lq u ie r c a n tid a d d e fu n c io n e s, y a s e a n c re a d a s p o r el u s u a rio o p re d e fin id a s e n el le n g u a je . L a s fu n c io n e s in v o c a d a s p o r main p u e d e n lla m a r a su v ez o tra s fu n c io n e s.
L as fu n c io n e s d e fin id a s p o r el u s u a rio tie n e n to d a s la s p ro p ie d a d e s y a lg u n a s c a ra c te rístic a s s im ila re s a la s d e lo s p ro g ra m a s q u e h e m o s m a n e ja d o a n te rio rm e n te , p e ro p a ra p o d e r u tiliz a r fu n c io n e s es n e c e sa rio p rim e ro d e fin irla s o c re a rla s. D e fin ir u n a fu n c ió n sig n ific a c o d ific a rla y la fo rm a d e d e fin ir fu n c io n e s p u e d e v a ria r, d e b id o a q u e tra b a ja n d e d ife re n te s m a n e ra s.
8.1 Funciones C o m o y a s e m e n c io n ó , c a d a fu n c ió n s e d is e ñ a d e m a n e ra in d e p e n d ie n te . L a a c c ió n d e d is e ñ a r o c re a r u n a fu n c ió n e n C es c o n o c id a ta m b ié n c o m o d e fin irla y, se g ú n el p ro p ó sito e sp e c ífic o , la s fu n c io n e s p u e d e n s e r d ise ñ a d a s d e la s sig u ie n te s m an eras:
1. Funciones sin paso de parám etros. S o n su b p ro g ra m a s q u e n o re q u ie re n in fo rm a c ió n a d ic io n a l d e s u e n to rn o , p u e s sim p le m e n te e je c u ta n u n a a c c ió n c a d a v e z q u e s o n in v o c a d a s.
2. Funciones con paso de parám etros. P a ra la e je c u c ió n d e e sto s su b p ro g ra m a s s e re q u ie re a d e m á s d e s u in v o c a c ió n , q u e s e le p a se in fo rm a c ió n a d ic io n a l d e s u e n to rn o .
3. Funciones que no regresan valor. S u b p ro g ra m a s q u e lu e g o d e su e je cu c ió n n o d e v u e lv e n al e n to rn o a lg ú n v alo r c o m o re su lta d o d e s u e je cu c ió n .
4. Funciones que regresan valor. F u n c io n e s q u e lu e g o d e s u e je c u c ió n g e n e ra n u n v a lo r c o m o re s u lta d o y “ e n tre g a n ” e s e v a lo r a su e n to rn o . Todas estas fu n cio n es se p u e d e n c o m b in ar, es decir, s e p u e d e d ise ñ a r u n a fu n ció n con p arám etro s q u e reg rese v a lo r o q u e n o lo h a g a, si a sí s e req u iere; o b ie n d iseñ ar una ftin ció n sin p arám etro s q u e reg rese v a lo re n u n m ism o p ro g ram a. E sto d e p e n d e rá del p rogram ador, y d e c ó m o d e c id a q u e es m ás co n v en ien te el d ise ñ o d e la función.
www.FreeLibros.me
199
200
Capítulo 8
Funciones (prog ram ación m odular)
El e n to rn o d e c u a lq u ie r fu n c ió n es la fu n c ió n p o r la q u e e s in v o ca d a. P o r e je m p lo , si
mai n
in v o c a a u n a fu n c ió n d is e ñ a d a c o n p a so d e p a rá m e tro s y q u e re g re s a un
valor, e n to n c e s
mai n
es el e n to rn o d e é sta , y s e rá
main
la q u e le p ro p o rc io n e la
in fo rm a c ió n (p a rá m e tro s) q u e d ic h a fu n c ió n re q u ie ra y la q u e re c ib a el v a lo r q u e d ic h a fu n c ió n d e v u e lv a . L a e s tr u c tu ra g e n e ra l p a ra d e fin ir u n a fu n c ió n e n C es: *Tipo_dato
id entificado r
(*l i s t a
de p a r á m e t r o s )
{ * v ariab les lo c a le s ; c u e r p o de l a
función;
* re tu rn dato;
} E l * sig n ific a q u e p u e d e n o n o a p a re c e r, d e p e n d ie n d o d e l d is e ñ o d e la fu n c ió n . E n la ta b la 8.1 s e d e s c rib e n lo s a sp e c to s m á s so b re sa lie n te s e n el d is e ñ o d e u n a ftin c ió n , se g ú n la d e fin ic ió n d e sc rita . Ta b l a 8.1 Descripción de la definición de función Concepto
Explicación
Tipo dato
Es e l si
tip o
de d a t o d e l
e s que l a
v a l o r qu e d e v u e l v e l a
función l o
debe i n i c i a r
co n l a
omite e l t i p o
hace.
función,
S i no d e v u e l v e v a l o r ,
p a la b r a rese rv a d a v o id . S i
de d a t o ,
se
de manera p r e d e t e r m i n a d a
d e v u e l v e un e n t e r o . L ista
de
parámetros
Es una l i s t a
de v a r i a b l e s c on s u s r e s p e c t i v o s t i p o s
de d a t o s qu e u t i l i z a
el
s i g u i e n t e formato: t i p o l
param etrol, tip o 2 param etro2,. . . , é s t o s son l o s c uando se l e
Cuando e x i s t e n ,
d a t o s qu e debe r e c i b i r l a
función
invoque.
Cuerpo de l a
Son l a s s e n t e n c i a s o i n s t r u c c i o n e s qu e e j e c u t a r á
función
la
V ariables lo c a le s
L a s c o n s t a n t e s y v a r i a b l e s d e c l a r a d a s d e n t r o de l a
f u n c i ó n c a d a vez qu e sea i n v o c a d a .
f u n c i ó n s on l o c a l e s
a la
misma y no e x i s t e n f u e r a de
e lla . Valor devuelto
Mediante l a
p a l a b r a r e s e r v a d a r e t u r n s e puede
por l a
devolver e l
r e s u l t a d o de l a
función
función,
función re q u ie re re g re sa rlo . Identificador
E s e l nombre a s i g n a d o a l a
www.FreeLibros.me
función.
si
e s qu e l a
8.1 Funciones
In ic ie m o s e x p lic a n d o la fo rm a m á s s e n c illa d e e m p le a r fu n c io n e s: s in p a so de p a rá m e tro s ni d e v o lu c ió n d e valor. void id e n t if ic a d o r
( )
{ v ariab les lo c a le s ; c u e r p o de l a
función;
} d onde: P a la b ra re s e rv a d a q u e e n u n a fu n c ió n in d ic a q u e é s ta só lo
vo id
e je c u ta su s in stru c c io n e s s in d e v o lv e r n a d a a s u e n to rn o . N o m b re q u e el p ro g ra m a d o r e lig e p a ra la fu n c ió n y c o n el cu al
id entificado r
la in v o c a rá p o ste rio rm e n te . ( )
L o s p a ré n te s is s o n p a rte d e la s in ta x is d e u n a fu n c ió n : si e stá n v a cío s, s ig n ific a q u e la fu n c ió n n o re c ib e p a rá m e tro s.
O b s e rv e q u e a q u í s e o m ite la in s tru c c ió n c o n la p a la b ra
retum
, p u e s to q u e s e in ic ia la fu n c ió n
void.
E je m p lo 8.1 Resolver el sim ple problem a de la suma de dos s, m ediante una función sin paso de parám etros ni devolución de valor v o i d sumal ( )
{ float a , b , c ; p rin tf("te cle a
e l primer
");
scanf("% f",&a); p rin tf("te cle a
el
s egu ndo
") ;
scanf("*f",&b); c=a+b; p r i n t f ( " E l r e s u l t a d o e s % f",
c);
} v o id main( )
{ suma 1 ( ) ;
}
www.FreeLibros.me
202
Capítulo 8
Funciones (prog ram ación m odular)
E n e s te e je m p lo s e p ro g ra m ó la fu n c ió n tres v a ria b le s lo c a le s: a ,
b y c.
y d e n tro d e la m is m a s e d e c la ra n
sumai
L as in s tru c c io n e s a sig n a d a s a la fu n c ió n
sumai
so n s o lic ita r v a lo re s al u su a rio , a lm a c e n a rlo s e n a y ó re s p e c tiv a m e n te ; c a lc u la r la s u m a d e é sto s y a lm a c e n a rla e n c; fin a lm e n te m o s tra r el v a lo r d e c. L a fu n c ió n sumai
h a c e to d o lo n e c e s a rio p a ra s u m a r d o s n ú m e ro s . P rá c tic a m e n te , la ú n ic a
ta re a d e
mai n
es in v o c a r a la fu n c ió n p a ra q u e e lla s e o c u p e d e l re s to . C o m o se
p u e d e v e r e n el e je m p lo , la lla m a d a a
sumai
e s u n a s e n te n c ia m á s d e
main.
Es im p o rta n te te n e r p re s e n te q u e la e je c u c ió n d e c u a lq u ie r p ro g ra m a c re a d o m e d ia n te fu n c io n e s, s e in ic ia rá s ie m p re e n la fu n c ió n
main.
Q u izás el e je m p lo a n te rio r es p o c o p rá c tic o , y a q u e n o h a y m u c h a d ife re n c ia e n tre so lu c io n a r e l p ro b le m a u sa n d o fu n c io n e s o s in u tiliz a rla s , y el p ro b le m a re a lm e n te es p e q u e ñ o , p e ro si e m p le a m o s v a ria s ta re a s e n u n p ro g ra m a , v a le la p e n a el u so d e fu n c io n e s. R )r otro lado, c ab e señ alar q u e
sumai
h a ce u so d e las funciones
p rin tf
y
scanf,
que
tam bién so n funciones, a u n q u e éstas están predefinidas e n e l leng u aje C . E sto nos indica q u e n o só lo
main
p u e d e invocar a las funciones, sino q u e e n tre e llas tam b ién
pueden invocarse. L a ventaja d e las fu n cio n es es q u e u n a v ez diseñ ad as p u ed en utilizarse las veces q u e se requiera, sólo b asta co n invocarlas y ejecu tarán las ins trucciones q u e tengan asignadas. L as fu n cio n es
p r i n t f o scanf
se p u e d e n em p lea r
infinidad d e veces. C ad a vez q u e se req u ie re le e r o m o strar alg ú n d ato en un p ro g ram a se invocan y listo; lo m ism o sucede co n las fu n cio n es q u e el p ro g ram a d o r diseña. C o m o s e m e n c io n ó a n te rio rm en te , u n p ro g ra m a m o d u la r o co n fu n c io n e s d e b e co n ta r in v ariab le m e n te c o n u n a fu n c ió n
mai n ,
la c u a l c o n tro la la a p a ric ió n de
c u alq u ie r otra fu n ció n . L a e je c u c ió n d e u n p ro g ra m a in ic ia c o n lo q u e c o n tie n e
mai n,
pero e n c u a n to é sta llam a a a lg u n a otra fu n ció n , s e e je c u ta n las in stru c c io n e s de esta últim a. U n a v ez c o n c lu id a la fu n c ió n q u e s e invocó, s e re g re sa el c o n tro l a la fu n ció n main y s e c o n tin ú a c o n la sig u ien te lín e a h a sta te rm in a r s u co n te n id o . E n el sig u ien te d ia g ra m a las flechas in d ic a n el o rd e n e n q u e s e lleva a c a b o la ejecu ció n . void fu n c io n X (
)
v o i d mai n ( )
{
{ in stru cció n
1;
in stru cció n
1;
in stru cció n
2;
in stru cció n
2;
f u n c i o n X ( ); in stru cció n
}
www.FreeLibros.me
4;
8.1 Funciones
E n e s te e je m p lo s e d is e ñ a la
funcionx
con
n
in s tru c io n e s y la fu n c ió n
main
co n c u a tro in stru c c io n e s d e la s q u e la te rc e ra es p re c is a m e n te la in v o c a c ió n a f u n c i o n x . L a e je c u c ió n s e in ic ia e n mai n , p o r lo q u e s e e je c u ta n la s in stru c c io n e s 1 y 2, p e ro e n c u a n to a p a re c e la lla m a d a a
funcionx
s e in ic ia la e je c u c ió n d e sus
in stru c c io n e s; al te rm in a rla s , s e re g re sa el c o n tro l al p u n to e n q u e s e in v o có la fu n c ió n re c ié n fin a liz a d a , es d e cir, a mai n p a ra p ro s e g u ir e n to n c e s c o n la
n
e je c u c ió n d e la in s tru c c ió n 4 y te rm in a r el p ro g ra m a . S in e m b a rg o , la s fu n c io n e s p u e d e n s e r in v o c a d a s n o s ó lo d e sd e m a i n , sin o q u e ta m b ié n s e p u e d e n in v o c a r d e sd e c u a lq u ie r o tra fu n c ió n y s u e je c u c ió n se lle v a a c a b o d e m a n e ra sim ila r. E s to s e p u e d e o b s e rv a r e n el d ia g ra m a sig u ien te:
in stru cció n
1;
in stru cció n
2;
f u n c io n Y ();
} E n e s te e je m p lo s e d is e ñ a ro n
funcionx, fu n cio n Y
y
main.
C o m o y a s e e x p lic ó ,
la e je c u c ió n in ic ia e n mai n , p o r lo q u e s e e je c u ta n la s in s tru c c io n e s 1 y 2, c u a n d o v ie n e la in s tru c c ió n 3 q u e es la in v o c a c ió n a f u n c i o n Y s e e je c u ta n sus in stru c c io n e s 1 y 2 y lu e g o s e e n c u e n tra c o n la lla m a d a a
funcionx
p o r lo q u e
se p a s a el c o n tro l a é s ta e je c u ta n d o su s tres in s tru c c io n e s p a ra c o n tin u a r co n funcionY
q u e fu e la q u e la lla m ó ; a h o ra s e e je c u ta n la s in s tru c c io n e s 4 y 5 d e
funcionY
c o n lo q u e fin a liz a y s e c o n tin ú a c o n
mai n
www.FreeLibros.me
h a s ta q u e fin aliza.
204
Capítulo 8
Funciones (prog ram ación m odular)
Ej e m p l o 8.2 Calcular el prom edio individual de un conjunto de alumnos v o i d prom( )
{ i n t n,
i;
float c ,
p=0 ;
p r i n t f ( " C u a n t a s m a t e r ia s se l e
van a p r o m e d i a r a l
alumno?");
s c a n t C"%¿", & n ) ; f o r ( i =1 ; i< =n ;i ++)
{ p r i n t f ("T eclea l a
c a l i f i c a c i ó n ”) ;
s c a n t ( "% f", & c ) ; p=p+c;
} p= p ln ; p r i n t f ( " E l p r o m e d i o d e l alumno e s : % f",
p);
} v o i d main( )
{ in t
resp;
do{ prom( ) ; p rin tf("S i
d e s e a s p r o m e d i a r o t r o alumno t e c l e a
1 ”) ;
scanf("% i”,& resp );
} w h i l e ( resp== 1 ) ;
}
E n e s te p ro g ra m a s e p u e d e a p re c ia r m e jo r la v e n ta ja e n el u so d e fu n c io n e s, ya que
prom
s e d is e ñ ó u n a s o la v e z y e n el
mai n
s e in v o c a rá la s v e c e s q u e el u su a rio
n e c e site o d e c id a o b te n e r el p ro m e d io in d iv id u a l d e u n c o n ju n to d e a lu m n o s sin sa lir d e l p ro g ra m a . L a e je c u c ió n u n a v e z m á s in ic ia e n y lu e g o s e in v o c a a
prom ;
mai n ,
d o n d e s e d e c la ró la v a ria b le lo c a l
resp,
a c o n tin u a c ió n s e e je c u ta n la s in s tru c c io n e s d e esa
fu n ció n . D e sp u é s s e p re g u n ta si s e d e s e a c a lc u la r o tro p ro m e d io y, d e p e n d ie n d o de la re s p u e s ta , s e re p ite o n o el c o n te n id o d e d o - w h i l e .
www.FreeLibros.me
8.2 Funciones q u e devuelven valores
N o o b sta n te , el d is e ñ o e s p e c ífic o d e estas fu n c io n e s tie n e c ie rta s d e sv e n ta ja s, ya q u e ta n to los v a lo re s d e e n tra d a c o m o lo s d e sa lid a s e a lm a c e n a n e n v a ria b le s lo c a le s y e s o p u e d e n o s e r re c o m e n d a b le e n a lg u n o s c a so s.
V ariables locales
L as v a ria b le s lo c a le s tie n e n la s sig u ie n te s c a ra c te rístic a s: 1. S ó lo p u e d e n s e r re c o n o c id a s y u tiliz a d a s p o r la fu n c ió n e n la q u e e stá n d e c la ra d a s ; n in g u n a o tra, ni s iq u ie ra main, q u e es el p ro g ra m a p rin c ip a l, tie n e a c c e so a la s v a ria b le s lo c a le s d e c la ra d a s e n o tra fu n c ió n . 2 . L o s e sp a c io s re s e rv a d o s e n m e m o ria p a ra v a ria b le s lo c a le s e s tá n d isp o n ib le s só lo e n el m o m e n to e n q u e s e e s tá e je c u ta n d o la fu n c ió n d o n d e fu e ro n d e c la ra d a s, u n a v e z q u e s e te rm in a la e je c u c ió n d e la fu n c ió n d e s a p a re c e n d e la m e m o ria , lo q u e o c a s io n a q u e, d e sp u é s d e a lm a c e n a r lo s d a to s d e e n tra d a y m o s tra r lo s re s u lta d o s e n la s fu n c io n e s sumai y prom q u e s e d is e ñ a ro n , e sto s d ato s s e p ie rd a n y n o e x is ta fo rm a d e re c u p e ra rlo s . A n a liz a n d o lo s d o s e je m p lo s q u e h e m o s re v is a d o , ¿ q u é d e b e ría h a c e rs e si el re s u lta d o d e la s u m a d e d o s n ú m e ro s s e re q u ie re p a ra a lg ú n o tro c á lc u lo fu e ra d e la fu n c ió n s u m a l? O b ie n , ¿ q u é s e d e b e rá a g re g a r al p ro g ra m a si d e sp u és d e p ro m e d ia r a c a d a a lu m n o s e n e c e s ita ra c a lc u la r el p ro m e d io g e n e ra l d e to d o s lo s a lu m n o s? C o m o e s tá n d ise ñ a d o s e sto s p ro g ra m a s s e ría im p o s ib le , d e b id o a q u e los re s u lta d o s s e e n c u e n tra n e n v a ria b le s lo c a le s, d e ta l m a n e ra q u e e n c u a n to s e te rm in a n a m b a s fu n c io n e s c a d a re s u lta d o q u e g e n e ra n d e sa p a re c e . P á ra p o d e r d is p o n e r d e lo s re s u lta d o s , in c lu s o c u a n d o s e h a te rm in a d o la fu n ció n , d e b em o s u tiliz a r o tro tip o d e fu n c io n e s.
8.2 Funciones que devuelven valores E ste se g u n d o tip o d e fu n c io n e s tr a b a ja d e m a n e ra d ife re n te a la s a n te rio re s o fre c ie n d o u n a v e n ta ja a d ic io n a l: p o d e r te n e r el re s u lta d o q u e p ro p o rc io n a la fu n c ió n d isp o n ib le a la s d e m á s fu n c io n e s p a ra o p e ra c io n e s p o s te rio re s . L as fu n c io n e s q u e a c o n tin u a c ió n d e s c rib ire m o s n o re q u ie re n p a so d e p a rá m e tro s , p e ro d e v u e lv e n u n v a lo r a s u e n to rn o (re c u e rd e q u e su e n to rn o es la fu n c ió n q u e la lla m a y q u e p u e d e s e r main o c u a lq u ie r o tra ). L a sin ta x is es la sig u ie n te :
www.FreeLibros.me
205
206
Capítulo 8
tipo_dato id e n tific a d o r
Funciones (prog ram ación m odular)
( )
{ d e c l a r a c i ó n de v a r i a b l e s l o c a l e s ; c u e r p o de l a return
función;
(v alor);
} E ste tip o d e fu n c io n e s in ic ia c o n
tipo_dato
y s e a g re g a la p a la b ra re s e rv a d a
return:
S i u n a fu n c ió n v a a d e v o lv e r u n v a lo r, e n to n c e s d e b e in ic ia r c o n el
Tipo_dato
tip o d e d a to q u e d e v o lv e rá , q u e p u e d e s e r c u a lq u ie r tip o p rim itiv o in t, flo at, ch ar, e tc é te ra . E s la p a la b ra re s e rv a d a q u e “ en v ía” el v a lo r q u e la fu n c ió n
retum
d e v u e lv e a la fu n c ió n q u e la m a n d a lla m a r; el v a lo r es u n d ato , a s í q u e p u e d e s e r u n a v a ria b le , u n a e x p re sió n a ritm é tic a , e tc é te ra , in c lu s o lo q u e o tra fu n c ió n d e v u elv a.
Ej e m p l o 8.3 Diseñar la solución para el caso de la suma de dos s m ediante una función que regresa un valor: el resultado del cálculo de la suma float suma 1 ( )
{ float a , b , c ; p rin tf("te cle a
e l prim er
*):
s c a n fC W '& a ); p rin tf("te cle a
el
segu ndo
"):
s c a n f ( "% f" , & b ) ; c=a+b; r e t u r n c;
}
v o id main( )
{ float r e s ; res=suma 1 ( ) ; p rin tf ("E l
r e s u l t a d o e s % f",
res);
}
www.FreeLibros.me
8.2 Funciones q u e devuelven valores
E n e s te e je m p lo la fu n c ió n sumai in ic ia c o n el tip o d e d a to fioat, lo cu al sig n ific a q u e re g re sa rá u n v a lo r re a l a la fu n c ió n q u e la in v o c a (e n e s te c a so main). L as a c c io n e s e n la e je c u c ió n d e sumai s o n s o lic ita r lo s v a lo re s al u su a rio , a lm a c e n a rlo s e n a y ó re sp e c tiv a m e n te , a lm a c e n a r el re s u lta d o e n c, y d e v o lv e r el v a lo r d e c a main. Es n e c e s a rio a c la ra r q u e la fu n c ió n re g re s a s ó lo el v a lo r d e la v a ria b le c, p e ro é sta ju n to c o n las v a ria b le s a y b d e s a p a re c e n u n a v e z c o n c lu id a la fu n c ió n sumai. P b r lo ta n to main s e e n c a rg a d e re c ib ir el re s u lta d o d e la o p e ra c ió n ; e n e s te c a so so la m e n te p a ra im p rim irlo . P ó r o tro la d o , ta m b ié n es im p o rta n te o b s e rv a r q u e el main d e e s ta n u e v a v e rs ió n tie n e u n a lig e ra d ife re n c ia c o n el d e la a n te rio r e n la lla m a d a a sumai, y a q u e si u n a fu n c ió n d e v u e lv e u n v a lo r es o b lig a c ió n d e l p ro g ra m a q u e la in v o c a “ c a c h a r” o re c ib ir d e a lg u n a m a n e ra el v a lo r q u e re to m a la fu n c ió n in v o ca d a, p o r e ste m o tiv o s e d e c la ra u n a v a ria b le lla m a d a r e s , e n la q u e m e d ia n te u n a a sig n a c ió n main re c ib e el v a lo r q u e le d e v u e lv e sumai lu e g o d e s u e je c u c ió n . El m is m o p ro g ra m a c o n a lg u n a s v a ria c io n e s: float sumal ( ) { float a ,b ; p r i n t f ( " t e c l e a e l p r i m e r "); s c a n f ( " 96f ”,&a); p r i n t f ( “t e c l e a e l segundo "); sc a n f( "% f" ,& b ) ; r e t u r n a+b; }
void m ain( )
{ p r i n t f ( " E l r e s u l t a d o e s %f", s u m a l ( ) ) ;
} E n la fu n c ió n suma i s e p re s c in d ió d e la v a ria b le c, y a q u e s e re g re sa d ire c ta m e n te el v a lo r d e la e x p re sió n a ritm é tic a a+b. E n el c a s o d e m a i n ta m b ié n s e o m itió la v a ria b le r e s , p u e s to q u e e n e s te e je m p lo la fu n c ió n m a i n re c ib e el v a lo r q u e le re g re sa s u m a l , u tiliz á n d o la c o m o a rg u m e n to d e p r i n t f y es el v a lo r d e a+b lo q u e a p a re c e rá e n la p a n ta lla .
www.FreeLibros.me
207
208
Capítulo 8
Funciones (prog ram ación m odular)
L a s e n te n c ia p r i n t f ( "%f •, s u m a i ( ) ) ; sig n ific a “ im p rim e lo q u e re g re s a la fu n c ió n sumal
V eam os o tro e je m p lo p a ra m o stra r la v e n ta ja d e h a b e r m o d ific a d o la fu n c ió n s uma i p a ra q u e a h o ra d e v u elv a u n valor. S e d ise ñ a rá u n p ro g ra m a q u e su m e c u a tro
valores p ro p o rc io n a d o s p o r el u su a rio . P e ro si n u e stra fu n c ió n s u m a s ó lo dos n ú m ero s, ¿ q u é s e p u e d e h a c e r e n e ste c a s o ? ¡F ácil! S e lla m a d o s v e c e s a la fu n ció n . float s u m a l ( )
{ flo at a , b ; p r i n t f ( " t e c l e a e l p rim e r "); s c a n f ( u% f n, & a ) ; p r i n t f ( " t e c l e a e l segundo " ); s c a n f ( " * 6f n,&b) ; r e t u r n a+b;
}
void main( ) { p r i n t f ( " El r e s u l t a d o e s
%f " ,
sum al( ) +suma1 ( ) ) ;
} E n e s te e je m p lo , la fu n c ió n sumai es in v o c a d a d o s v e c e s. P rim e ro s e lla m a c o m o a rg u m e n to d e la ú n ic a in s tru c c ió n d e main, q u e es p r i n t f ; la p rim e ra lla m a d a a sumai p id e d o s v a lo re s al u su a rio , h a c e la s u m a y la re g re s a a d o n d e fu e in v o ca d a. D e sp u é s h a y u n a se g u n d a lla m a d a e n la q u e s e p id e n los o tro s d o s v a lo re s y se d e v u elv e ta m b ié n el re s u lta d o a d o n d e s e in v o có . F in a lm e n te , main h a c e la su m a de lo s d o s v a lo re s y lo s im p rim e . E je m p lo 8.4 Diseñar, re to m a n d o el e jem p lo d e la fu n ció n qu e calcula el prom edio, un program a d o n d e la fu n c ió n devuelva un valor q u e se acu m u le en una variable en m a in para luego o b te n e r el p ro m e d io grupal d e
n
alum nos
float prom( ) { i n t n, i ; float c, p= 0 ;
www.FreeLibros.me
8.2 Funciones q u e devuelven valores
p r i n t f ( " C ua n t a s m a t e r i a s s e l e
van a p r o m e d i a r a l
209
alumno?") ;
scanf("% i",&n); f o r ( i =1 ;i # i n c l u d e < c o n i o . h> #de fine s a l i d a
100
void main()
{ textbackground(YELLOW); textcolor(R ED ); c l r s c r f ); float p r e c i o , c ; p r i n t f ("P recio por s a lid a printf("Dam e l a
e l e c t r i c a \ n " );
c a n t i d a d de s a l i d a s
tomando en c u e n t a que c a d a a p a g ad o r y
c o n t a c t o e s una s a l i d a \ n " ) ; scanf("% f",
& c);
precio= salida*c; p r i n t f ( " e l p r e c io por l a s
s a l i d a s es % f " ,
g e t c h f ); }
www.FreeLibros.me
p recio);
9.1 Secuenciación
233
9.1.3 Calcular las coordenadas del vértice de una parábola /*Programa p a r a o b t e n e r l a s c o o r d e n a d a s d e l
vértice
de una p a r á b o l a */
# i n c l u d e < c o n i o . h> # i n c l u d e < s t d i o . h> v o id main()
{ c l r s c r ( ); float a , b , c , x , y ; prin tf("P rogram a para c a lc u la r e l printf("Dam e e l
vértice
de una p a r a b o l a \ n " ) ;
coeficiente d e l
termino c u a d r a t ic o
coeficiente d e l
termino l i n e a l
") ;
s c a n f ( " 96 f " , & a ) ; p r i n t f ( "Dame e l
") ;
scanf("*6f",&b); p r i n t f ( "Dame e l
termino in d e p e n d ie n te
") ;
scanf("%f",&c);
x=-b/(2*a ) ; y=((4*a*c)-(b*b))/(4*a); p rin tf("E l
vértice
e s t a en l a
coordenada ( % 5 . 2 f , * 5 . 2 f ) " , x , y ) ;
getchf);
}
9.1.4 Calcular la m edida de los ángulos complementario y suplem entario, dado el valor de un ángulo /* Á n g u l o s c o m p l e m e n t a r i o s y s u p l e m e n t a r i o s
*/
# i n c l u d e < s t d i o .h> t t i n c l u d e < c o n i o .h> v o id main()
{ clrscrf);
float a ng , ang_ sup, ang_ com; p r i n t f ( "Angulos complementarios y s u p le m e n t a r i o s \ n " ); p r i n t f ( "Dame l a
medi da de l o s
á n g u l o s en g r a d o s d e c i m a l e s
scanf("% f",&ang); ang_com=90-ang; ang_sup= 1 8 0 - a n g ; p r i n t f ( "Su á n g u l o c o m p l e m e n t a r i o e s % . 2 f \ n " , a n g _ c o m ) ;
www.FreeLibros.me
") ;
234
Capítulo 9
printf("S u
Ejercicios resueltos
á n g u l o s u p l e m e n t a r i o e s 96. 2 f \ n " , a n g _ s u p ) ;
getchf);
}
9.1.5 Calcular la magnitud de un vector dados sus com ponentes /* M a g n i t u d de v e c t o r e s en e l e s p a c i o
*/
#include tíinclude # i n c lu d e< ma th . h> v o id main()
{ c l r s c r f ); float c1 t c 2 , c 3 , m a g ;
p r i n t f ( " M a g n i t u d de v e c t o r e s en e l e s p a c i o \ n ,,) ; p r i n t f ( " Dame l a
lera,
componente
n) ;
2da.
componente " ) ;
3era.
componente
s c a n f ( "% f" , & c 1 ) ; p rin tff"
Dame l a
s c a n f f "% f" , & c 2 ) ; p r i n t f ( " Dame l a
");
s c a n f f "% f" , & c 3 ) ; m a g = s q r t( c1 * c1 +c 2 *c 2+ c 3* c3 ); p r i n t f f " Su m a g n i t u d e s i g u a l
a 96 . 2 f " , m a g ) ;
getchf);
}
9.1.6 Calcular las ppm (partes por millón) en una solución /*Programa p a r a c a l c u l a r l a s ppm de una s o l u c i ó n * / # i n c l u d e < s t d i o . h> # i n c l u d e < c o n i o . h> v o id m ainf)
{ textcolor(R ED );
www.FreeLibros.me
9.1 Secuenciación
235
t e x t b a c k g r o u n d (B L A C K ) ; c l r s c r ( ); float ppm,s o l u t o , s o l v e n t e ; g o t o x y f1 8 , 2 ); p r in t f f" P r o g r a m a para c a l c u l a r l a s p a rte s po r m i l l ó n p r i n t f ( " \ n L a masa d e l
en una s o l u c i o n \ n " ) ;
s o l u t o y d e l s o l v e n t e deben e s t a r en l a s mismas
u n id ad e s\n "); p rin tff"\n
Introduce l a
masa d e l
s o l u t o \ n " );
s c a n f f "%f", & s o l u t o ) ; p r i n t f ( " \n A h o r a l a masa d e l s o l v e n t e \ n " ) ; s c a n f f "% f", & s o l v e n t e ) ; p p m= s o l u t o / s o l v e n t e * 1 000000 ; p r i n t f f " \ n %f ppm",ppm); g e t c h f );
}
9.1.7 Calcular el porcentaje de masa / * C a l c u l a r e l p o r c e n t a j e en masa*/ # i n c l u d e < s t d i o . h> f t i n c l ude void m a in f)
{ te xtco lorfR E D ); t e x t b a c k g r o u n d (BLACK); c l r s e r f ); f loat pm, comp, s o l u c i ó n ; g o to x y f3 2 ,2 ); p rin tff"C a lu la
e l % en m a s a \ n " ) ;
p r i n t f ( " \n I n t r o d u c e l a
masa d e l
componente a c a l c u l a r \ n " ) ;
s c a n f f "% f" , &comp); p r i n t f f " \ n A h o r a l a masa t o t a l
de l a
solu ción
-Re cuer da que l a s masas
t i e n e n qu e e s t a r en l a s mismas u n i d a d e s - \ n " ) ; s c a n f f ”%f", & s o l u c i o n ) ; pm=comp/ s o l u c i o n * 700; p r i n t f ( " \n
p o r c i e n t o en m a s a " , p m ) ;
getchf); }
www.FreeLibros.me
236
Capítulo 9
Ejercicios resueltos
9.1.8 Calcular el número de ladrillos que se necesitan / *Número_de_ 1 a d r i l í o s * / # i n c l u d e < s t d i o .h> f t i n c l u d e < c o n i o . h> void main()
{ i n t me,ni; c l r s c r ( ); p r i n t f ( " T e i n d i c a r e e l numero de l a d r i l l o s
que n e c e s i t a s \ n d i m e
cuantos metros cuadrados c o n s t r u i r á s " ); s c a n f ( "%cT, &mc); nl=mc*72; p r i n t f ( " E l numero de l a d r i l l o s
que n e c e s i t a s es%d", n i ) ;
getchf);
}
9.1.9 Calcular el núm ero de escalones de una distancia / * E s c a l o n e s */ # i n c l u d e < s t d i o . h> Uinclude v o id main()
{ in t
esc,d;
c lrs c rf); printf("Dam e l a
d i s t a n c i a h o r i z o n t a l y t e d i r e e l numero de
e s c a l o n e s \ndame l a
d ista n cia
en cm") ;
scanf("%d",&d); es c =d /3 0 ; p r i n t f ( " E l numero de e s c a l o n e s e s W " , e s c ) ; getchf);
}
9.1.10 Separa un núm ero de cuatro dígitos en millares, centenas, decenas y unidades /* S e p a r a * / # i n c l u d e < s t d i o . h>
www.FreeLibros.me
9.1 Secuenciación
# i n c l u d e < c o n i o . h> void m ain()
{ i n t num; textbackground(54); te x tco lo r(1 5 ); c l r s c r ( ); g o t o x y ( 1 5 , 5 ) ; p r i n t f ( " I n t r o d u c e una c a n t i d a d e n t e r a de 4 d í g i t o s como máximo ") ; scanf("%d",&num); p r i n t f f " \ n \ n \ n E s t e numero t i e n e : " ) ; p r i n t f f " \n\n%d u n i d a d e s de m i l l a r " , num/ 1 0 0 0 ) ; num = numWQOQ; p r i n t f f " \n%c/ c e n t e n a s " , num/ 1 0 0 ) ; num=num96l 0 0 ; p r i n t f f " \n%c/ d e c e n a s " , num/ 1 0 ) ; num=num96l 0 ; p r i n t f f " \n96d u n i d a d e s " , num/ 1 ) ; num=nump6l; getchf);
}
9.1.11 Calcular el campo eléctrico /*Campo e l é c t r i c o * / ftinclude
#i n c l u d e
v o i d mai n ()
{ e lrse r
();
float e,
f,
q;
p rin tf
( " E l programa c a l c u l a e l
p rin tf
("Dame l a
scanf r % f" , p rin tf
f u e r z a \ n " );
& f);
("Dame l a
scanf
campo e l e c t r i c o \ n " ) ;
carga");
& q);
e=flq; p rin tf getch
("El
campo e l é c t r i c o e s %6 . 2 f ,
e);
();
}
www.FreeLibros.me
237
238
Capítulo 9
Ejercicios resueltos
9.1.12 Calcular la resistencia / * f í e s i s t e n c i a */ ttinclude
üinclude
v o i d mai n ()
{ float v,
a, r;
c lrs c r
();
p rin tf
( " E l programa c a l c u l a l a
p rin tf
("Dame e l
s c a n t ( " * f m, p rin tf
r e s is t e n c ia \ n " );
v o l t a j e \ n " );
& v);
("Dame e l
s c a n t ("%f",
am peraje\n");
& a);
r=v/a; p rin tf getch
("la
re siste n cia
e s %6 . 2 f o m h s " ,
r);
();
}
9.2 Selectiva sim ple 9.2.1
Calcular el coeficiente de variación
/* P ro g r a m a p a r a c a l c u l a r e l
c o e f i c i e n t e de v a r i a c i ó n
*/
#include t t i n c l u d e < c o n i o . h> void main()
{ c l r s c r (); float S, X, CV; in t
op;
p r i n t f ( " Programa p a r a c a l c u l a r e l
c o e f i c i e n t e de v a r i a c i o n \ n " ) ;
p r i n t f f " 1 .Muestra\n 2 . P o b l a c io n \ n " ); p r i n t f ("E lig e
una o p c i o n
") ;
scanf("%d",&op); p r i n t f ( " Dame l a
m edi a
") ;
www.FreeLibros.me
9.2 Selectiva sim ple
239
s c a n f ( "% f" , & X ) ; printf("Dam e l a
desviación estándar
");
s c a n f f "% f" , & S ) ; CV=S/X*100; i f
( o p — 1) p r i n t f ( " E l
c o e f i c i e n t e de v a r i a c i ó n m u e s t r a l es
%. 2 f % \ n " , C V ) ; i f
( o p — 2) p r i n t f ( " E l
c o e f i c i e n t e de v a r i a c i ó n p o b l a c i o n a l
es
%. 2f%\/7‘ , C V ) ; if
((op!=1)
&& ( o p ! = 2 ) ) p r i n t f ( "Tu o p c i o n no e s t a en e l menú");
getchf);
9.2.2 Calcular el producto punto de un vector /* P r o d u c t o p u n t o de v e c t o r e s en R2 y R3 */
# i n c l u d e < c o n i o . h> # i n c l u d e < s t d i o .h> t t i n c l ude v o id main()
{ clrscr(); float a1 , a 2 , a 3 , b 1 , b 2 , b 3 , p r o d ; in t
op;
p r i n t f ( " P r o d u c t o p u n t o de v e c t o r e s en R2 y R 3 \ n " ) ; p r i n t f ("
1. E n R2\n 2 . En R 3 \ n " ) ;
p r i n t f ( " E l i g e una o p c i o n
") ;
scanf("*6d",&op); if
(op==1 )
{ prin tf("N ota:
Usa un e s p a c i o e n t r e c a d a n u m e r o \ n " ) ;
p r i n t f ( “Dame e l p r i m e r v e c t o r
") ;
s c a n f ( ■%f%f“ , & a 1 , & a 2 ) ; p r i n t f ( " D a m e e l s egu ndo v e c t o r
");
s c a n f ("*6f%f", & b 1 , & b 2 ) ; p r o d = s q r t ( a 1 *b 1 +a2 *b 2 ) ; p r i n t f ( " E l p r o d u c t o p u n t o e s %. 2 f " , p r o d ) ;
www.FreeLibros.me
240
Capítulo 9
Ejercicios resueltos
} i f
(op==2)
{ p r i n t f f "N o t a : Usa un e s p a c i o e n t r e c a d a n u m e r o \ n " ) ; p r i n t f ( " Dame e l p r i m e r
vector
") ;
s c a n f ( " 96f96f96 f " , & a 1 , & a 2 , &a3) ; p r i n t f ( " Dame e l segu ndo v e c t o r
");
s c a n f ( " 96f96f96 f " , & b 1 , & b 2 , &b3) ; p r o d = sq rt (a 1* b1 + a2 *b 2+ a 3* b3 ); p r i n t f ( " E l p r o d u c t o p u n t o e s %. 2 f " , p r o d ) ;
} getch();
}
9.2.3 Calcular la pendiente de una recta /* P e n d i e n t e de una r e c t a dados d o s p u n t o s
*/
t t i n c l ude #include void main()
{ c l r s c r f ); float x1 , x 2 , y 1 , y 2 , m , X ; p r i n t f ( uP e n d i e n t e de una r e c t a d ad o s d o s p u n t o s \ n u) ; p r i n t f f "P r i m e r a c o o r d e n a d a \ n " ) ; p r i n t f ( " Dame l a
X de l a
lera,
coordenada
");
Y de l a
lera,
coordenada
“) ;
s c a n f ( n*6f " , & x 1 ) ; p r i n t f ( " Dame l a s c a n f ( "% f" , &y 1 ) ; p r i n t f ( "Segunda c o o r d e n a d a \ n " ) ; printf("Dam e l a
X de l a
2da.
coordenada
") ;
Y de l a
2da.
coordenada
");
s c a n f ( " * f " , & x 2 ); printf("Dam e l a scanf("% f",&y2); X =x1 -x2; i f
(XI =9)
{
www.FreeLibros.me
9.2 Selectiva sim ple
241
m=( y1-y2)/ X; p r i n t f ( " L a p e n d i e n t e de l a
r e c t a es
} i f
((X==Q) && ( y 1 ! =y2) )
p r i n t f ( " L a r e c t a es v e r t i c a l
\"pendiente
in d e fin id a \ " " ) ; if ((X = = 0)
&& ( y 1 — y 2 ) ) p r i n t f ( " E s un p u n t o
\"no t i e n e p e n d i e n t e \ " " ) ;
getchf);
}
9.2.4 Calcular la fórm ula VENA /*F ó r m u l a
"vena"*/
# i n c l u d e < s t d i o . h> t t i n c l u d e < c o n i o . h> void main()
{ textco lor(R E D ); t e x t b a c k g r o u n d (BLACK); c l r s c r ( ); f loat V, E, N , A ; c h a r op; gotoxy(32,2); prin tf("U so
de l a
form ula
p r i n t f ( "A)Volumen
VENA\n I n d i q u e que d e s e a c a l c u l a r : \ n " ) ;
B )E q u iv alen tes qu im icos\n ");
p r i n t f ( "C)Norm alidad
D)Gramos de s u s t a n c i a \ n " ) ;
scanf("% c",&op); i f (op=='A ' )
{ p r i n t f ( " \n Dame l o s gramos d e l
s o lu t o \ n " );
s c a n f f "% f" , & A ) ; p r i n t f ( " \n A h o r a l o s
e q u iva le n te s qu im icos\n ");
scanf(">6f",&E); p r i n t f ( " \n P o r u l t i m o l a n o r m a l i d a d \ n " ) ; scanf("*6f",&N); V=A/(E*N); p r i n t f ( " \ n * f L" ,V) ;
} i f
( o p == ' B[)
www.FreeLibros.me
C apítulo 9
242
Ejercicios resueltos
p r i n t f ( " \ n Dame l o s gramos d e l
s o lu t o \ n " );
scanf("% f",&A); p r i n t f ( " \ n Ahora e l
v o l u m e n \ n u) ;
scanf("*6f",&V); p r i n t f ( " \ n Por ultim o l a
n o r m a li d a d \ n " );
scan ff% f,& N ); E=AI(V*N); p r i n t f ( m\ n H f E q u i v a l e n t e s q u í m i c o s " , E ) ;
} i f
( op=='C' )
{ p r i n t f ( "\n Dame l o s gramos d e l
s o l u t o \ n " );
scanf('% f*,&A); p r i n t f ( "\n A h o r a l o s
e q u iva le n te s quim icos\n");
scanf('% f*,&E); p r i n t f ( " \ n Por ultim o e l
volumen\n");
s c a n f f "% f" , & V ) ; N=A/(E*V); p r i n t f ( m\ n H f E C / L " , N ) ;
} i f
(o p==' D' )
{ p r i n t f ( " \ n Dame e l
volumen\n");
s c a n f ( "% f1, & V ) ; p r i n t f ( " \ n Ahora l o s
e q u i v a l e n t e s q u i m i c o s \ n " );
scanf("*f",&E); p r i n t f ( " \ n Por ultim o l a
n o r m a li d a d \ n " );
scanff W 96 f " , &N) ; A=V*E*N; p r i n t f ( " \ n % f L " ,A ) ;
} g e tc h f);
}
9.2.5 Calcular las ecuaciones básicas del gas /*F ó r m u l a PV=nRT*/ # i n c l u d e < s t d i o . h>
www.FreeLibros.me
9.2 Selectiva sim ple
243
# i n c l u d e < c o n i o . h> Udefine R 0.0821 void m ain()
{ textco lor(R E D ); textbackground(BLACK); c lrs c rO ; f loat P , V , n , T; c h a r op; g oto xy(33,2); p r i n t f ( " E c u a c i ó n d e l gas id e a l\ n Q u e desea c a l c u l a r ? \ n " ); p rin tf("\n A )P resió n
B)Volumen
C)Moles
D ) Tempera t u r a \ n " ) ;
scanf("% c",&op); i f
( o p = = ' A 1)
{ p r i n t f ( " \n Dame l o s m o l e s \ n u) ; s c a n f ( " * 6 f u, & n ) ; p r i n t f ( " \n A h o r a l a
t e m p e r a t u r a (e n K ) \ n " ) ;
scanf("*6f",&T); p r i n t f ( " \n F i n a l m e n t e e l volumen (en L ) \ n " ) ; s c a n f ( " * 6f t' , & V ) ; P=n*fí*T/V; p rin tf("\n % f atm ",P);
} i f
( op = = 'fí' )
{ p r i n t f ( " \n Dame l o s m o l e s \ n n) ; s c a n f ( " 96 f " , & n ) ; p r i n t f ( " \n A h o r a l a
t e m p e r a t u r a (e n K ) \ n " ) ;
s c a n f ( B96 f ” , & T ) ; p r i n t f f " \ n Finalm ente l a p r e s ió n
(en a t m ) \ n " ) ;
s c a n f f "% f" , & P ) ; V=(n*fí*T)/P; p r i n t f ( " \n%f L " , V ) ;
} i f
( op==' C ' )
{ p r i n t f f " \ n Dame l a
presión
(en a t m ) \ n " ) ;
scanf(">6f",&P);
www.FreeLibros.me
244
Capítulo 9
p r i n t f ( " \n A h o r a l a
Ejercicios resueltos
t e m p e r a t u r a (e n K ) \ n " ) ;
s c a n t ("% f",&T); p r i n t f ( " \ n F i n a l m e n t e e l volumen (en L ) \ n " ) ; s c a n t ( "% f" , & V ) ; n=(P*V) / (R*T) ; p r i n t f ( " \n96 f m o l e s " , n ) ;
} i f
( o p == ' D ' )
{ p r i n t f ( " \ n Dame l o s m o l e s \ n " ) ; s c a n t f"% f",& n ); p r i n t f ( " \ n Ahora l a
presión
(en a t m ) \ n " ) ;
s c a n t ( "% f" , & P ) ; p r i n t f ( " \ n Finalm ente e l
volumen (e n L ) \ n ") ;
s c a n t ( "% f" , & V ) ; T=(P*V)/ ( n * R ) ; p r i n t f ( " \n%f K " , T ) ;
} getchf);
y
9.2.6 Calcular el costo indirecto de cada departam ento de la com pañía Good Mark /*Good M a r k Company*I # i n c l u d e < s t d i o . h> # i n c l u d e < c o n i o . h> Hdefine mon 1 20000 void main()
{ i n t m am ,m an, i ns ,dp , t o t a l ; c l r s e r f ); p r i n t f ("C alcu la el de l a
costo in d ir e c t o t o t a l
de c a d a d e p a r t a m e n t o
Good M a r k Company\ n " ) ;
p r i n t f ( "Depart ament o d e l que n e c e s i t a s s a b e r e l
t o t a l de su c o s t o
i n d i r e c t o \ n " ); p r i n t f ( " 1 ) d e p a r t a m e n t o de c o r t e \ n 2 ) d e p a r t a m e n t o de i m p r e s i o n \ n " ) ; s c a n t ("%d",&dp);
www.FreeLibros.me
9.2 Selectiva sim ple
p r i n t f ( " C u a n t o fue d e l
c o s t o de manejo de m a t e r i a l e s \ n " ) ;
s c a n f ( U96d",&mam); p r i n t f ( " C u a n t o se i n v i r t i ó
de m a n u f a c t u r a \ n " ) ;
scanf("%d",&man); p r i n t f ( " C u a n t o fue d e l
c o s t o de i n s p e c c i o n \ n " ) ;
s c a n f ( tt96d"t & i n s ) ; i f
( d p — 1)
{ total=mam+man+ins+mon; p r in t f ("E l
costo in d ir e c t o
del
d e p ar t a me nt o de c o r t e e s $%c/", t o t a l ) ;
} i f
( d p — 2)
{ total=(mam+man+ins+mon)- ( . 2 0 *(mam+man+ins+mon)) ; p r i n t f ("E l
costo in d ir e c t o
es
del
d e p ar t a me nt o de i m p r e s i ó n
to ta l);
} getch();
}
9.2.7 Calcular la cantidad de piedra que se necesita para un cimiento /*Cimientos*/ # i n c l u d e < s t d i o . h> # i n c l u d e < c o n i o . h> void m ain()
{ float m,c; i n t m3; c l r s c r f ); p r i n t f ( "Te i n d i c a r e l a
c a n t i d a d de p i e d r a que n e c e s i t a s p a r a t u s
c i m i e n t o s , ya sean c o l i n d a n t e s o c e n t r a l e s \ n C u a n t o s m e t r o s de c i m i e n t o s ? \ n " ) ; s c a n f ( " W , &m); p r i n t f (" E l
cim iento,
es c e n t r a l
o colindan te?\ncolin dante= 1\
n ce n tra l= 2 \n"); s c a n f ( n96 d " , & c ) ;
www.FreeLibros.me
245
246
Capítulo 9
if
(c==1)
m3=m*1.5;
i f
(c==2)
m3=m*2;
Ejercicios resueltos
p r i n t f ( " N e c e s i t a s ^ f " ,m3,"m3 de p i e d r a " ) ; getch();
}
9.2.8 Calcular el índice de m asa muscular l * P r o gr a ma í n d i c e
de masa c o r p o r a l */
# i n c l u d e < s t d i o . h> f t i n c l u d e < c o n i o . h> v o id main()
{ float p e s o ,
estatura,
ín d ice ;
textbackground(5); te x tc o lo r(2) ; c l r s c r f ); g o t o x y ( 5 , 5); p r i n t f ( " * - * Programa p a r a c a l u l a r e l í n d i c e
de masa m u s c u l a r * - * " ) ;
gotoxy(1,9);
p r i n t f ( " I n t r o d u c e t u p e s o (en k g ) :
") ;
s c a n f f "% f" , & p e s o ) ; g o to xy( 1 , 11); p r i n t f ( uI n t r o d u c e t u e s t a t u r a
(e n m e t r o s ) :
") ;
s c a n f f "%f", & e s t a t u r a ) ; ind ice= peso/ ( e s t a t u r a * e s t a t u r a ) ; goto xy(5,15); p r i n t f ( "Tu í n d i c e de masa c o r p o r a l i f
(indice>=30) ELEVADO,
i f
p r i n t f ( “ \n \n \n \n \n Cuidado! \n
ín d ice ); t u í n d i c e de masa c o r p o r a l
( i n d i c e < = 1 8 . 5) p r i n t f ( " \ n \ n \ n \ n \ n C u i d a d o ! ! \n
tu ín d ic e
de masa c o r p o r a l
n e c e s i t a s a l i m e n t a r t e mas”) ;
( 1 8 . 5 < i n di c e> 3 0) p r i n t f ( " \ n \ n \ n \ n \ n F e l i c i d a d e s ! ! corporal
es
n e c e s ita s hacer e j e r c i c i o " );
e s demas iado BAJO i f
es:
e s NORMAL");
g e t c h f ); }
www.FreeLibros.me
tu ín d ic e
de masa
9.2 Selectiva sim ple
247
9.2.9 Determ inar el tipo de compuesto /*alcano,
alq ueno o a l q u in o * /
Uinclude
Uinclude
< co ni o. h>
v o i d mai n ()
{ i n t h,
c,
h 1 , h2,
h3;
c lrs c r
();
p rin tf
( " E l programa i n d i c a
si
el
compuesto e s a l c a n o ,
alq ueno o a l q u i n o
según e l numero de h i d r o g e n o s \ n " ) ; p rin tf
("Dame e l numero de c a r b o n o s \ n " ) ;
s c a n f ("%d*, p rin tf
& c);
("Dame e l numero de h i d r o g e n o s \ n " ) ;
s c a n f ("%d",
& h);
h1=2*c+2; h 2 =2 *c; h3=2*c-2; if
(h==h1 ) p r i n t f
( " E l compuesto
e s un a l c a n o " ) ;
if
(h==h2 ) p r i n t f
( " E l compuesto
e s un a l q u e n o " ) ;
if
(h==h3) p r i n t f
( " e l compuesto
e s un a l q u i n o " ) ;
if
(h!=h1 && h!=h2 && h!=h3) p r i n t f ( " E l
getch
compuesto no e x i s t e " ) ;
();
}
9.2.10 Sensor óptico para encender u na luz / * S e n s o r */ üinclude
Uinclude
< co ni o. h>
v o i d mai n ()
{ in t
d;
clrs c r
();
p rin tf
(" sensor o p t ic o \ n " );
p rin tf
("Dame l a
s c a n f r% c/\ i f
d ista n cia a l a
& d);
( d >0 && d # i n c l u d e < c o n i o . h> void m ain()
{ i n t m 3, hf p ; c lrs c rf); p rin tff" T e in d ica re
el
c o s t o de t u p e d i d o según e l
c o n c r e t o que n e c e s i t a s
y l o s m3 qu e d e s e e s \ n c u a n t o s m3 de c o n c r e t o n e c e s i t a s ? \ n " ) ; scanf("%d",&m3); p r i n t f f "La humedad en e l l u g a r de l a e s a s i marca 1 \nde l o
c o n s t r u c c i ó n s o b r e p a s a e l 8096 ? \ n s i
c o n t r a r i o marca 2 \ n " ) ;
scanf("% d",&h); if
(h==1)
{ p=m3*700; p rin tf("S i la
humedad p a s a e l
80%, n e c e s i t a s un c o n c r e t o de
2 0 0 kg/cm 2
y e l p r e c i o de t u p e d i d o e s % d ", p );
} else
{ p=m3*500; p rin tf("S i la
humedad no p a s a e l
80%, n e c e s i t a s un c o n c r e t o de 150kg/cm2
y e l p r e c i o de t u p e d i d o es%c/",p^;
} g e tc h f);
}
9.3.2 Sensor para encender u na luz /*Sensor*/ Hinclude
www.FreeLibros.me
252
Capítulo 9
Hinclude
Ejercicios resueltos
v o i d mai n ()
{ in t
d;
c lrs c r
();
p rin tf
("S ensor o p t i c o \ n " );
p rin tf
("Dame l a
s c a n f ( m* d m, i f
d ista n cia a l a
& d);
(d>0 && d yo) m i ó ”) ; g o to x y (42,25); p rin tf("...
presiona enter para con tin u ar
...");
getch(); c l r s c r f ); p r i n t f ( " \n \nEsta es t u u l t i m a o p o r t u n id a d i n g r e s a o t r o nume ro: " ) ; s c a n f f "%c/", &u su a r i o ) ; i f
( u s u ar i o = =y o ) p r i n t f ( " \ n \ n F e l i c i d a d e s , a d i v i n a s t e mi numero") ;
else
{ i f
(usuario # i n c l u d e < s t d i o . h> v o i d mairi( )
{ char usuario; te x tc o lo r (0) ; textbackground(98); clrscrf); g o t o x y (15, 5); p r i n t f ( "Programa q u e i n d i c a e l t i p o d e d a t o i n t r o d u c i d o " ) ; p r i n t f f " \ n \ n \ n I n t r o d u c e t u dato (un d í g i t o )
”) ;
s c a n f f "% s\ & u s u a r i o ) ; if
( ( 5 7 > = u s u a r i o ) && ( u s u a r i o > = 4 8 ) ) p r i n t f ( " \ n \ n E s t e e s un n u m e r o " )
else if
( ( 1 2 2 > = u s u a r i o ) && ( u s u a r i o > = 9 7 ) || ( 9 0 > = u s u a r i o ) && (usuario>=65))
p r i n t f ( ”\ n \ n E s t a e s una l e t r a " ) ;
else p r i n t f ( " \ n \ n E s t e e s un c a r á c t e r e s p e c i a l " ) ; g etch f);
}
9.4.3 El número menor de cinco números /* Me n o r * /
t t i n c l u d e < c o n i o . h> # i n c l u d e < s t d i o . h> void m a in f)
{ in t a,b,c,d,e; textcolor(25) ; textbackground(0) ; clrscrf); p r i n t f ( " I n t r o d u c e c i n c o n ú m e r o s ( p r e s i o n a e n t e r d e s p u é s d e c ada numero): \n*); s
c
a
n
f
f
", &a, & b , &c , & d , & e ) ;
www.FreeLibros.me
262
Capítulo 9
i f
((a ttdefine p r 5 . 2 0 Udefine p e 5 . 0 0 Udefine t r
10.20
ttdefine t e
10.00
v o id main()
{ in t
op;
float c r , c e , h r , h e , c i v a , c i v , t o t a l ,dpm, dum, dtm, demo; c l r s c r f ); p r i n t f ( " D e s v i a c i ó n de l a
m anufacturera c h o i c e \ n " );
p r i n t f ( "Que d e s v i a c i ó n des ea c a l c u l a r ? \ n " ) ; p r i n t f ( " 1 / d e s v i a c i ó n de m a t e r i a l e s \ n 2 ) d e s v i a c i ó n de mano de o b r a \ n 3 ) d e s v i a c i ó n de c o s t o s i n d i r e c t o s \ n " ) ; scanf("%d",&op); i f
(op==1 )
{ p r i n t f ( " Dame e l v a l o r de l a
c a n t i d a d r e a l \ n " );
scanf("% f",&cr); dpm=cr* ( p r - p e ) ; p r i n t f ( " L a d e s v i a c i ó n en p r e c i o
es ^td" ,dpm);
www.FreeLibros.me
9.4 Selectiva d o b le anidada
p r i n t f ( " \nDame e l
v a l o r de l a
265
c a n t i d a d e s t a n d a r \ n ”) ;
scanf("%f"',&ce); dum=(cr-ce) *pe; p r i n t f ( " L a d e s v i a c i ó n en c a n t i d a d ( u s o )
es
2 f " , dum);
total=dpm+dum; p r i n t f ( " \nEntonces l a
d e s v i a c i ó n de m a t e r i a l e s e s $%.2 f " , t o t a l ) ;
} e lse i f
(op==2)
{ p r i n t f ( " Dame l a
c a n t i d a d de h o r a s r e a l e s \ n " ) ;
scanf("% f",&hr); dtm =hr*(tr-te); p r i n t f ( " L a d e s v i a c i ó n de t a s a e s $%. 2 f " , d t m ) ; p r i n t f ( " \nDame l a
c a n t i d a d de h o r a s e s t a n d a r e s \ n " ) ;
scanf("% f",&he); d e m o =t e * (h r - h e) ; p r i n t f ( " L a d e s v i a c i ó n de e f i c i e n c i a e s $96 . 2 f " , d e m o ) ; total=(demo-dtm); p r i n t f ( " \nLa d e s v i a c i ó n de mano de o b r a e s $%.2 f " , t o t a l ) ;
} else if
( op==3)
{ printf("Dam e e l t o t a l
de c o s t o s i n d i r e c t o s v a r i a b l e s \ n " ) ;
s c a n f ( " ,96 f " , & c i v ) ; printf("Dam e e l t o t a l
de c o s t o s i n d i r e c t o s
v a riab les
a p l i c a d o s \ n " ); scanf("% f”,& civa); total= civ-civa; p r i n t f ( " L a d e s v i a c i ó n de c o s t o s i n d i r e c t o s e s $%. 2 f " , t o t a l ) ;
} getch();
}
9.4.7 Calcular las propiedades coligativas de soluciones acuosas l*Propiedades c o l i g a t i v a s * / # i n c l u d e < s t d i o . h>
www.FreeLibros.me
266
Capítulo 9
Ejercicios resueltos
# i n c l u d e < c o n i o . h> Udefine R 0.0821 Udefine kb 0 . 5 8 Udefine k f
1.86
v o id main()
{ textco lor(R E D ); textbackgroundfBLACK); c l r s c r ( ); f l o a t p i , t b , t f , d t b , d t f , m , M , T, P v a p s l n , P v a p s o l v , X s o l v ; c h a r op; g o t o x y ( 13,2); p r i n t f ( * * P r o p i e d a d e s c o l i g a t i v a s \ n De s o l u c i o n e s a c u o s a s , no v o l á t i l
no e l e c t o l i t o
(e n e l c a s o de l a p r e s i ó n v a p o r ) " ) ;
p r i n t f ( " \n Que p r o p i e d a d des ea c a l c u l a r ?
\ n A) T e m p e ra t u r a de e b u l l i c i o n \
t B ) T e m p e r a t u r a de c o n g e l a c i o n \ n C ) P r e s i ó n o s m o t i c a \ t D ) P r e s i ó n v a p o r \ n " ); s c a n t ( "%c", & o p ) ; í f
( 0p = = ' A ')
{ p r i n t f ( " \n Dame l a
m o la rid a d \n ");
s c a n t ( " % f " , &m); dtb=kb*m; tb=100-Hitb; p r in t f ( " ^ f oC",tb);
} e lse
{ i f
( o p == ' B ' )
{ p r i n t f ( “ \n Dame l a
m olaridad \n");
s c a n f ( "%f" ,&m);
dtf=kf*m; tf=0-dtf; p r i n t f ( " % f 0C", t f ) ;
} else {
i f
( op==' C ' )
{
www.FreeLibros.me
9.5 Selectiva m ú ltip le
p r i n t f ( " \ n Dame l a
267
m olaridad \n");
s c a n f f "%f" , &M); p r i n t f ( " \n A h o r a l a
t e m p e r a t u r a , en K \ n " ) ;
s c a n f f "%f■,& T ) ; pi=R*T*M; p r i n t f ( B96 f atm" , p i ) ;
} e lse
{ i f
( op==' D' )
{ p r i n t f ( " \ n Dame l a p r e s i ó n v a p o r d e l s o l v e n t e \ n u) ; s c a n f f "%fB, & P v a p s o l v ) ; p r i n t f ( " \n A h o r a l a
f r a c c i ó n mol d e l
s o l v e n t e \ n ”) ;
s c a n f f "%f" , & X s o l v ) ; Pvapsln=Pvapsolv*Xsolv; p r i n t f f " % f a t m u, P v a p s l n ) ;
} else p r i n t f ( " \ n O pc ión i n c o r r e c t a " );
} } } g e t c h f );
}
9.5 Selectiva m últiple 9.5.1 Calcular la resistencia de un cable l * C á l c u l o de l a
r e s i s t e n c i a */
t t i n c l u d e < c o n i o . h> # i n c l u d e < s t d i o . h> üdefine AU 1 . 0 6 e - 8 Udefine CO 1. 72e -8 üdefine AL 3 . 2 1 e - 8 Udefine PL
11.05e-8
void m a in f)
www.FreeLibros.me
268
Capítulo 9
Ejercicios resueltos
{ c l r s c r f ); float 1, in t
a,
res,
r;
op;
p rin tf
( " E l programa p e r m i t e c a l c u l a r l a
p rin tf
( "Selecione e l m a te ria l
p rin tf
("
de un c a b l e \ n " ) ;
c a b l e \ n " );
1) p l a t a \ n 2 ) c o b r e \ n 3 ) a l u m i n i o \ n 4 ) p l a t i n o
s c a n f ("%d", switch
del
re siste n cia
\ n ");
&op);
(op)
{ c a s e 1: res=AU; p rin tf
( " E l m a t e r i a l es A U \ n " );
break; c a s e 2:
res=CO; p rin tf
( " E l m a t e r i a l e s C O \ n " );
break; c a s e 3:
re s= AL ; p rin tf
( " E l m a t e r i a l es A L \ n " );
break; c a s e 4:
res =P L; p rin tf
( " E l m a t e r i a l es P L \ n " );
break; d e fau lt: p rin tf
( " E r r o r conductor desconocido\n");
} p rin tf
("Dame l a
l o n g i t u d d e l m e t a l en metr o s \ n " ) ;
scanf ("* f",& l); p rin tf
("Dame e l
area g r o s o r d e l
c a b l e en m 2 . \ n " ) ;
s c a n f ( U96 f " , & a ) ; r= res*l/a; p rin tf
(" La r e s i s t e n c i a
es
ohms\n", r ) ;
getchf);
}
9.5.2 Calcular la magnitud de vectores /* M a g n i t u d de v e c t o r e s en R 2 , R 3 , R 4 */ t t i n c l u d e < c o n i o . h> # i n c l u d e < s t d i o . h>
www.FreeLibros.me
9.5 Selectiva m ú ltip le
269
t t i n c l u d e v o id main()
{ c l r s c r ( ); f loat a1 , a 2 , a 3 , a 4 , m a g ; in t
op;
p r i n t f ( " C a l c u l a m a g n i t u d de v e c t o r e s \ n " ) ; p rin tff"
1) EN R2\n 2 )E N R3\n 3 )EN R 4 \ n " ) ;
p r i n t f ("E l i g e
una o p c i o n
") ;
scanf("%d",&op); printf("NOTA:
Usa un e s p a c i o e n t r e c a d a numero d e l
v e c to r\n ");
switch(op)
{ c a s e 1: p r i n t f ( " Dame e l
v e c t o r en R2 ") ;
s c a n f ( " % f % f " , & a 1,& a 2 ) ; mag=sqrt(a1*a1+a 2 *a 2 ) ; p r i n t f ( " La magnitud d e l
v e c t o r en R2 e s 96 . 2 f ” ,mag);
break; c a s e 2: p r i n t f ( " Dame e l
v e c t o r en R3 " ) ;
scanf("*6f%f%f",&a1,&a2,&a3); mag=sqrt(al*al+a2*a2*a3*a3); p r i n t f ("la
m a g n i t u d d e l v e c t o r en R;
e s %.2 f " , m a g ) ;
break; c a s e 3: p r i n t f ("Dame e l
v e c t o r en R4 ") ;
s c a n f ( " ^ f M ^ f ^ f " , &a1,&a2, &a3, &a4) ; ma g= sq rt ( a 1 *a1+a2* a2+a3* a3+a4* a 4 ) ; p r i n t f ( " L a m a g n i t u d d e l v e c t o r en R4 e s
2f",m ag);
break; d e fau lt: p r i n t f ( " O p c i o n no v a l i d a " ) ;
} getchf);
}
9.5.3 Calcular las funciones básicas de un polígono regular /* E l e m e n t o s de un p o l í g o n o r e g u l a r * / t t i n c l u d e < c o n i o .h> # i n c l u d e < s t d i o . h>
www.FreeLibros.me
270
Capítulo 9
Ejercicios resueltos
void main()
{ c l r s c r f ); i n t n,op; float r e s u l ; p r i n t f ( " E l e m e n t o s de un p o l í g o n o r e g u l a r \ n " ) ; p r i n t f f " 1 . A n g u l o c e n t r a l \ n 2 . A n g u l o i n t e r n o \ n 3 . A n g u l o e x t e r n o \ n 4.Num. de D i a g o n a l e s en un V , r t i c e \ n
5 . Tota l
p r i n t f ( " E l i g e l o qu e q u i e r e s c a l c u l a r
de d i a g o n a l e s \ n " ) ;
") ;
scanf("%d",&op); p r i n t f ( "Dame e l numero de l a d o s d e l p o l í g o n o
");
scanf("%d",&n); s w i t c h (o p)
{ c a s e 1: r e s u l =360/ n; p r i n t f ( "Cada á n g u l o c e n t r a l mi de %.2 f o " , r e s u l ) ; break; c a s e 2:
r e s u l =90*( n - 2 ) In; p r i n t f ( “Cada á n g u l o i n t e r n o mi de %. 2 f o " , r e s u l ) ; break;
c a s e 3: r e s u l = 3 6 0 / n ; p r i n t f ( " C a d a á n g u l o e x t e r n o mi de %.2f e ” , r e s u l ) ; break; c a s e 4: r e s u l = n - 3 ; p r i n t f ( " E l numero de d i a g o n a l e s de cada v , r t i c e es % . 0 f " , r e s u l ) ; break; c a s e 5: r e s u l = n * ( n - 3 ) 12; p r i n t f ( " E l numero t o t a l de d i a g o n a l e s e s %. 0 f " , r e s u l ) ; break; de f a u l t : p r i n t f ( " O p c i ó n i n v a l i d a " );
} getchf);
}
9.5.4 Juego de piedra, papel o tijera /*Programa j u e g o p i e d r a ,
papel o t i j e r a * /
t f i n c l u d e < s t d i o . h>
www.FreeLibros.me
9.5 Selectiva m ú ltip le
# i n c l u d e < c o n i o . h> f t i n c l u d e < s t d l i b . h> U i n c l u d e void m ain()
{ t e x t b a c k g r o u n d (27); te x tco lo r(3 2 ); c l r s c r f ); in t
usuario,
yo;
srand(tim e(NULL)); g otoxy(25,5); p r i n t f ("* ** * J u e g o p i e d r a ,
papel o t i j e r a
****";,-
g oto xy( 1, 8 ); p r i n t f ( " I n t r o d u c e t u jugada:
\ n \ n 1 ) P i e d r a \ n 2 ) P a p e l \ n 3 ) T i j e r a \ n \ n n) ;
s c a n f ( "%c/", &u s u a r i o ) ; y o = ( r a n d ( ) % 3 ) +1; /*P i e d r a
*/
g o to x y (25,20); if
( u s u a r io = = 1)
{ switch(yo)
{ c a s e 1: p r i n t f ( " E M P A T A M O S : p i e d r a
VS p i e d r a " ) ;
break; c a s e 2: p r i n t f ( " P E R D I S T E :
p i e d r a VS p a p e l " ) ;
break; c a s e 3: p r i n t f ( "GANASTE: p i e d r a VS t i j e r a " ) ; break;
} } /* P a p e l if
*/
(u suario==2 )
{ switch(yo)
{ c a s e 1: p r i n t f ( "GANASTE: p a p e l
VS p i e d r a " ) ;
break; c a s e 2: p r i n t f ( " E M P A T A M O S : p a p e l VS p a p e l " ) ; break;
www.FreeLibros.me
271
272
Capítulo 9
Ejercicios resueltos
c a s e 3: p r i n t f ( ”PERDISTE: p a p e l
VS t i j e r a ”) ;
break;
} } /* T i j e r a if
*/
(usuario==3)
{ switch(yo)
{ c a s e 1: p r i n t f ( " PERDISTE:
tije ra
VS p i e d r a ”) ;
break; c a s e 2: p r i n t f ( “GANASTE: t i j e r a
VS p a p e l ”) ;
break; c a s e 3: p r i n t f ( “EMPATAMOS: t i j e r a
VS t i j e r a ”) ;
break;
} } getch();
}
9.5.5 Calcular las propiedades coligativas de una solución / * P r o p i e d a d e s c o l i g a t i v a s */ # i n c l u d e < s t d i o . h> t t i n c l u d e < c o n i o . h> ttdefine R 0 . 0 8 2 1 ttdefine kb 0 . 5 8 ttdefine k f
1.86
vo id m ainf)
{ textco lor(R E D ); textbackground(BLACK); c l r s c r ( ); float p i , t b , t f , d t b , d t f ,m,M, T, P v a p s l n , P v a p s o l v , X s o l v ; c h a r op; g o t o x y f 13,2); p r i n t f ( ” * P r o p i e d a d e s c o l i g a t i v a s \ n De s o l u c i o n e s a c u o s a s , no v o l á t i l
no e l e c t r o l i t o
(e n e l c a s o de l a p r e s i ó n v a p o r ) ”) ;
p r i n t f ( ” \n Que p r o p i e d a d des ea c a l c u l a r ?
www.FreeLibros.me
\ n A) T e m p e ra t u r a de e b u l l i c i o n \
9.5 Selectiva m ú ltip le
273
t B) Temperat ur a de c o n g e l a c i o n \ n C ) P r e s i ó n o s m o t i c a \ t D ) P r e s i o n v a p o r \ n " ) ; s c a n f ( U96 C" , &o p ); switch(op)
{ case
'A p r i n t f f " \ n
Dame l a
m o la rid a d \n ");
s c a n f ( "%f" , &m); dtb=kb*m; tb=1Q)(d+dtb; p r i n t f ( "%f 0 C \ t b ) ; break; case
' B ' : p r i n t f f " \ n Dame l a
m o l a r i d a d \ n u) ;
s c a n f ( ”% f " , &m); d tf =k f* m; tf= 0-dtf; p r i n t f ( "%f 0 C " , t f ) ; break; case
' C ' : p r i n t f ( ” \n Dame l a
m o la rid a d \n ");
s c a n f ( " 96 f " , & M ) ; p r i n t f ( " \ n Ahora l a
temperatura,
en K \ n " ) ;
s c a n f f "%f" , & T ) ; pi=R*T*M; p rin tf(W 96 f a t m " , p i ) ; break; case
' 0 ' ; p r i n t f ( " \ n Dame l a
p r e s ió n vapor d e l
s o l v e n t e \ n ”) ;
s c a n f ( n^ f u, & P v a p s o l v ) ; p r i n t f f u\n A h o r a l a
f r a c c i ó n mol d e l
s o l v e n t e \ n n) ;
scanf("*6f",&Xsolv); Pvapsln=Pvapsolv*Xsolv; p r i n t f ( u%f atm" , P v a p s l n ) ; break; de fau lt: p r i n t f f ■\n O p c i ó n i n c o r r e c t a " ) ;
} g e t c h f );
}
9.5.6 Calcular la solubilidad y sus variables / * S o l u b i l i d a d y v a r i a b l e s */ # i n c l u d e < s t d i o . h>
www.FreeLibros.me
274
Capítulo 9
Ejercicios resueltos
# i n c l u d e < c o n i o . h> v o id main()
{ textcolor(R E D ); textbackground(BLACK); c l r s c r ( ); float S g ,k h ,P g ; c h a r op; g o t o x y f 13,2); p rin tf("C a lcu lo
de l a
s o l u b i l i d a d y sus v a r i a b l e s \ n " );
p r i n t f ( " \n I n d i q u e que s e desea c a l c u l a r : \ n A ) S o l u b i l i d a d \ t B ) C o n s t a n t e de Henry\tC)Presión del g a s\n "); s c a n f ( "%c", & o p ) ; switch(op)
{ case
' A ' : p r i n t f ( " \n Dame l a
c o n s t a n t e de H enr y p a r a e l g a s \ n " ) ;
scanf("% f",&kh); p r i n t f ( “ \n A h o r a l a
p r e s ió n vapor del ga s\n ");
scanf("*6f" ,&Pg); Sg=kh*Pg; p rin tf("% f n/L",Sg); break; case
' 8 ' ; p r i n t f ( " \ n Dame l a
s o lu b ilid a d del gas\n");
scanf("*6f",&Sg); p r i n t f ( " \ n Ahora l a
p r e s ió n vapor del g a s \n " );
s c a n f ( "%f" , & P g ) ; kh=Sg/Pg; p r i n t f ( "%f n / L
atm ",kh);
break; case
' C 1: p r i n t f ( " \ n Dame l a
s o l u b i l i d a d d e l g a s \ n " );
s c a n f ( "%f" , & S g ) ; p r i n t f ( " \ n Ahora l a
c o n s t a n t e de H enr y p a r a e l g a s \ n " ) ;
scanf("% f",&kh); Pg=Sg/kh; p rin tfa tm " ,P g ); break; d e fau lt: p r i n t f ( " \n O p c i ó n i n c o r r e c t a .
E j e c u t e e l programa de nuevo y e l i j a
una o p c i o n c o r r e c t a " ) ;
www.FreeLibros.me
9.5 Selectiva m ú ltip le
275
} getch();
}
9.5.7 Calcular los costos unitarios de la em presa Gelstrap /*Empresa G e l s t r a p * / # i n c l u d e < s t d i o . h> f t i n c l u d e < c o n i o . h> void m a in f)
{ in t
op,md,mod,cin;
float t o t a l ; c l r s c r ( ); p r i n t f ( v\ n C a l c u l e l o s
costos u n ita r io s
p r i n t f ( "\ n Q u e c o s t o u n i t a r i o
de l a
empresa G e l s t r a p \ n " ) ;
deseas c a l c u l a r \ n " );
p r i n t f ( " 1 ) M a t e r i a l e s d i r e c t o s \ n 2 ) M a n o de o b r a \ n 3 ) C o s t o s I ND IRECT OS \n”) ; s c a n f ( U96 d " , & o p ) ; switch(op)
{ case
1 : p r i n t f ( “Dame e l
c o s t o de m a t e r i a l e s d i r e c t o s \ n " ) ;
s c a n f ( U96dH,&md); ot a l= md 19000; p r i n t f ("E l
c o s t o u n i t a r i o de m a t e r i a l e s d i r e c t o s
es
$ % . 3 f n, t o t a l ) ; if
(total #include v o id main()
{ c lrs c rf); in t i,n ; float s u m , r , x , x 1 , r e s u l ; p r i n t f f " S u m a l o s e l e m e n t o s de una p r o g r e s i ó n g e o m e t r i c a \ n " ) ; p r i n t f f " D a m e e l numero de t é r m i n o s de l a
progresión
s c a n f ( " 96 d " , & n ) ; printff"D am e e l
v a lo r d e l prim e r term ino
“) ;
s c a n f f "%f" , & x ) ; printff"D am e e l
v a l o r de l a
razón
");
s c a n f f *%f" , & r ) ; i =2; x 1 =x; sum=0 ; p rin tff"% .2f
+ ", x ) ;
whilefi # i n c l u d e < c o n i o . h> void m ainf)
{ in t
x , p h t , nht,sexo,ptt,sumasm,sumasf;
float s m , s f ; c l r s c r f ); p r i n t f f " \ n \ t C u a n t o gana n l o s hombres y m u j e r e s en t o t a l \ n \ t y e l p r o m e d i o de a c u e r d o a l numero de e l l o s ? \ n " ) ; surnasm=0 ; sumas f = 0 ; sm=0 ; sf=0 ; w h ile
( (sumasm void main()
{ in t
x,p;
clrs c rO ; p r i n t f ( "Te d a r é e l p r e c i o de l a s del
o lla s
de c o n c r e t o según r e s i s t e n c i a
c o n c r e t o \ n " );
x=50; p=10M; w h ile
(x # i n c l u d e < s t d i o . h> # i n c l u d e < m a t h . h> v o id main()
{ c l r s c r ( ); double cov1 , r ,
x,
double r c o v , rdx, in t
y,
sx= 0 , sy=0 , sxy= 0 , s x 2 =0 , s y 2 =0 , c o v ,
dx,
dy;
rd y , dx1, dy1;
cont= 0 ;
char op= 's'; c h a r o p 1= ' s ' ; w h ile
( o p==' s 1 || o p == ' S')
{ p r i n t f ( " E l programa p e r m i t e c a l c u l a r e l
c o e f i c i e n t e de c o o r e l a c i o n
e n t r e dos v a r i a b l e s \ n ( d o s p a r e s de n ú m e r o s ) \ n " ) ; w h ile
(op1=='s'
|| op1==' S ' )
{ p r i n t f ("Dame e l
v a l o r de x \ n " ) ;
scanf ("U f" ,& x ); p r i n t f ("Dame e l
v a l o r de y \ n " ) ;
scanf ("U f" ,& y ); cont=cont+1 ; sx=sx+x; sy=sy+y; s x y =(x *y)+sxy; s x 2 =sx2 + ( x * x ) ; s y 2 =sy2 + ( y * y ) ; p r i n t f ( " D e s e a i n g r e s a r o t r o c o n j u n t o de v a l o r e s ? \ n s i / n o \ n " ) ; s c a n f ("% s",& op1) ;
} cov=sxy-(sx*sy/cont); c o v 1 = c o v / ( c o n t - 1) ; dx=sx 2 - ( s x * s x / c o n t ) ; d x 1= d x l ( c o n t - 1) ; dy=sy 2 - ( s y * s y / c o n t ) ;
www.FreeLibros.me
9.6 Estructura rep etitiva w h i l e
283
d y 1 =dy/ ( c o n t - 1 ) ; r dx =s qr t ( d x 1 ) ; r dy =s qr t ( d y 1 ) ; r=cov 1 / ( r d x * r d y ) ; p r in t f ("El
c o e f i c i e n t e de c o r r e l a c i ó n
es %f\n",
r);
p r i n t f ( " D e s e a c a l c u l a r o t r o c o e f i c i e n t e de c o r r e l a c i o n ? \ n s i / n o \ n " ) ; scanf ("te",&op);
} getch();
9.6.7 Calcular el balance de masa /*B a l a n c e de masa*/ / * R e a c c i ó n de e l e m e n t o s * / # i n c l u d e < s t d i o . h> Uinclude void m a in f)
{ f loat m,mf; in t
e,n=1;
textco lor(R E D ); c l r s c r f ); g o t o x y ( 2 3 }3); p r i n t f ( " B a l a n c e de mas a\n\n C u a n t o s e l e m e n t o s r e a c c i o n a n ?
") ;
scanf("% i",&e); mf=0; w h ile
(n # i n c l u d e < c o n i o . h> void main()
{ in t
v,e;
float m,me, p o r e ; textco lor(R E D ); c l r s c r f ); g o t o x y f 1 2 ,3); printf("Im prim e l a
f r a c c i ó n mol de l o s
Cuantos elementos t i e n e e l
e l e m e n t o s de un c o m p u e s t o \ n \ n
com puesto?\n");
s c a n f ( " % i u,8,e); p rin tf("\n
I n t r o d u c e l o s m ol e s d e l c o m p u e s t o \ n " ) ;
s c a n f ( "%f“ , &mc); v= 1 ; w h ile
(v Uinclude void m ain()
{ f loat p a , g , a ; char op= 'S'; textcolor(R E D ); w h ile
( o p = = ' S ')
{ c l r s c r f ); g o to xy( 2 6 ,3); p r i n t f f " A t o m o s de un e l e m e n t o \ n \ n I n t r o d u c e e l p e s o a t ó m i c o d e l e l e m e n t o \ n u) ; s c a n t ( U96 f u,&p a) ;
www.FreeLibros.me
286
Capítulo 9
Ejercicios resueltos
p r i n t f ( " \n A h o r a l o s gramos d e l
elemento\n");
scanf("% f",&g); a=(g*6.023e23)/pa; p r i n t f ( “ \n%f
t o m o s \ n \ n Desea c a l c u l a r l o
de n u e v o ? S/N:
“,a);
scanf("% s",&op);
} getch();
}
9.7 Estructura repetitiva d o w h i l e 9.7.1 Calcular el determ inante, dados el cofactor y el vector /* C á l c u l o d e l
d e t e r m i n a n t e dados e l
vector y el
cofactor
*/
#include Hinclude v o id main()
{ c lrs c r(); in t i,n ; float c o f , a , s u m = 0 , p; p r i n t f ( “C a l c u l a e l p r i n t f ( “Dame e l
d e t e r m i n a n t e dados e l
o r d e n de l a m a t r i z
cofactor y el
“) ;
s c a n f ( “%d“ , & n ) ; i= 1; do
{ p r i n t f ( “Dame e l componente %d d e l v e c t o r s c a n f ( “% f “ , & a ) ; p r i n t f ( “Dame e l v a l o r d e l c o f a c t o r
",i) ;
s c a n f ( “*6f“ , & c o f ) ; p=a* cof ; sum+=p;
i ++; } while(i
www.FreeLibros.me
9.8 Estructura rep etitiva f o r
void m ain()
{ i n t p r o ,c o n t ,p ,d e = 0 ,per=0 ; clrs c rf); p r i n t f ( u\ n \ t \ t C h e c a r l a
c a l i d a d de l o s p r o d u c t o s \ n " ) ;
p r i n t f ( " \ n C u a n t o s p r o d u c t o s s e e l a b o r a r o n ? \ n v) ; s c a n f ( ”% d " , & p r o ) ; for
( c o n t = 1 ;c ont else
{ p r i n t f ("E l producto esta pe rfe cto ;
em pacalo\n");
per=per+1 ;
} } p r i n t f ( ” \nEl t o t a l
de p r o d u c t o s d e f e c t u o s o s e s =9o d " , d e ) ;
p r i n t f ( ” \nEl t o t a l
de p r o d u c t o s p e r f e c t o s e s =96d" , p e r ) ;
getchf);
}
9.8.3 Calcular el salario de un trabajador, dependiendo de las piezas que elaboró /*Pago p o r c a d a p i e z a e l a b o r a d a */ # i n c l u d e < s t d i o . h> t t i n c l u d e < c o n i o . h> void main()
{ in t p ie,tra,con t; float sue= 0 , p a , s ; c l r s c r f ); p r i n t f f " \ n \ t \ t S u e l d o de un t r a b a j a d o r p o r c a d a p i e z a e l a b o r a d a \ n " ) ;
www.FreeLibros.me
292
Capítulo 9
Ejercicios resueltos
p r i n t f ( " \ n Cu a nt os empl eados t r a b a j a n p o r p i e z a s e l a b o r a d a s ? \ n " ) ; scanf("% d",&tra); for
( c o n t = 1 ;c o nt < = t r a ; c o n t + + )
{ p r i n t f ( " \nEmpleado numero 96d\n" , c o n t ) ; p r i n t f ( " C u a n t a s p i e z a s e l a b o r a s t e ? \ n " ); s c a n f ( " 96 d " , & p i e ) ; p r i n t f ( " C u a n t o s e t e pa g a p o r c a d a p i e z a ? \ n " ) ; scanf("% f",&pa); i f
( p i e # i n c l u d e < c o n i o . h> void main()
{ ftoat c 1 , c 2 , v 1 , v 2 , n c ; in t i,n ; textco lor(R E D ); c l r s c r f ); goto xy(27,3); p r i n t f ( " R e a l i z a una d i l u c i ó n p o r p a s o s \ n \ n I n d i c a de c u a n t o s p a s o s d e s e a s re a liza r la
dilu ció n :
");
www.FreeLibros.me
9.8 Estructura rep etitiva f o r
293
s c a n f ( "%¿" , & n ) ; p rin tf("\n
I n t r o d u c e e l p r i m e r v ol umen:
");
s c a n f f "%f" , & v 1 ) ; p rin tf("\n
Y la
concentración i n i c i a l :
");
s c a n f f " , & c 1) ; p r i n t f ( u\n C u an t o volumen v a s a a g r e g a r ?
");
s c a n f f " % f " ,& v2 ) ; c 2 =v1 * c 1 / ( v 2 +v1 ) ; p r i n t f f u\n L a c o n c e n t r a c i ó n en l a for
primer d i l u c i ó n
es:
",c2);
( i =1 ; i < n ; i + + )
{ c l r s c r f ); p r i n t f f " \ n Que volumen de l a
s o l u c i ó n c on l a
con centración a n t e r io r
q u i e r e ? \ n " ); s c a n f ( H96 f " , &v 1 ) ; p r i n t f ( n\n Que volumen va a a g r e g a r ? \ n " ) ; s c a n f ( " % f n, & v 2 ) ; n c = ( v 1 *c 2 ) / ( v 2 +v1 ) ; p r i n t f ( " \n A h o r a l a
c o n c e n t r a c i ó n es
c 2 =nc;
} g e t c h f );
}
9.8.5 Indicar los moles de un elemento /*M o l e s * / # i n c l u d e < s t d i o . h> # i n c l u d e < c o n i o . h> void m a in f)
{ float n , o , m c , p e , p a e t mol; in t i; textcolor(R E D ); c l r s c r f ); g o t o x y ( 9 , 3); p r i n t f ( " I n d i c a l o s m o l e s de c a d a e l e m e n t o de f o r m u l a m o l e c u l a r desconocida\n\n
Dame e l num.
de e l e m e n t o s que t i e n e :
s c a n f f " % f ", & n ) ; p r i n t f ( u\n A h o r a l a
masa d e l c o m p u e s t o : " ) ;
www.FreeLibros.me
");
294
Capítulo 9
Ejercicios resueltos
s c a n f f "%f" , &mc); f o r ( i =1 ;i # i n c l u d e < c o n i o . h> void m ainf)
{ float v 1 , v 2 , v a , c 1 , c 2 ; in t i; textcolor(R E D ); c lrs c rf); gotoxy(32,3); p rin tff"D iso lu cio n e s\n \n
Introduzca e l
volumen a d i l u i r :
");
s c a n f f "%f" , & v 1 ) ; p r i n t f f " \n L a c o n c e n t r a c i ó n de d i c h a s o l u c i ó n :
") ;
s c a n f f " % f ", & c 1 ) ; p r i n t f ( " \n F i n a l m e n t e l a
concentración a l a
que q u i e r e l l e g a r :
");
scanff"*6f",&c2);
v 2 =v1 * c 1 I c 2 ; va=v 2 - v 1 ; p r i n t f ( " \n E l
volumen de agua a a g r e g a r e s %f. O t r a s c o n c e n t r a c i o n e s
( s u b m ú l t i p l o s d e l volumen i n i c i a l ) ", v a ) ; for
( i = 1 ;i # i n c l u d e < c o n i o . h> void m ain()
{ float m , p , v , t , p t = Q ; in t n ,i; textco lor(R E D ); c l r s c r f ); g o to x y ( 2 6 ,3); p r i n t f ("P re sio n e s p a r c ia le s \ n \ n
C u a n t o s componentes t i e n e e l g a s ? \ n " ) ;
s c a n t ( "%i" , & n ) ; for
( i =1 ;i t t i n c l ude void m ain()
{ in t
e,i,a ¡2 0 ],a a ¡2 0 ],A A ;
printf("M agn itud a l
c u a d r a d o de un v e c t o r " ) ;
p r i n t f ( " De c u a n t o s e l e m e n t o s e s e l
vector
(máximo 2 0 ) ? " ) ;
scanf("% i",&e); for
(i=0 ; i < e ; i = i + 1)
{ printf("Dam e e l
valor del
e l e m e n t o %¿ d e l p r i m e r
s c a n f( " % i" , & a [ i] );
} for
(i=0 ; i < e ; i = i + 1) a a [ i ] = a [ i ] * a [ i ] ;
AA =aa[ 0 ] ; for
(i=1 ; i < e ; i = i + 1 ) AA=AA+aa[ i ] ;
p rintf("% i",A A ); g e t c h f ); }
www.FreeLibros.me
v e c to r",i+ 1 );
Capítulo 9
Ejercicios resueltos
9.9.2 Calcular el producto cruz de dos vectores /*Producto cruz*I t f i n c l u d e < s t d i o . h> # i n c l u d e < c o n i o . h> void main()
{ i n t i,a[3],b[3 ],ab[3 ],A B ; p r i n t f ( " P r o d u c t o c r u z de dos v e c t o r e s " ) ; p r i n t f ( " Re c u e r d a que so n de 3 e l e m e n t o s " ) ; for
(i=0;i t t i n c l u d e < c o n i o . h> void main() {
float r e a c , p m , m o l e s [ 1 5 ] ,comp; in t
c,i,elem ento;
www.FreeLibros.me
9.9 A rre g lo s u nidim ensionales
p r i n t f ( " R e a c t iv o l i m i t a n t e " ); prin tf("In d iq u e
c u a n t o s c omp uest os t i e n e l a
r e a c c i ó n (no mas de 1 5 ) " ) ;
scanf("*6i",&c); for
(i= 0 ; i < c ; i = i + 1)
{ printf("Dam e l a
cantidad del
r e a c t i v o %¿",
i+ 1);
s c a n f ( "%f" , & r e a c ) ; p rin tf("D a m e e l peso m o le cu la r del r e a c t i v o " ); scanf("%f",&pm); m o l e s [ i ] =reac/pm;
} comp=moles[(ñ] ; for
( i =1 ; i < c ; i = i + 1 )
{ if
(comp v o id main()
{ in t n ,i;
float v 1 [ 1 0 0 ], v 2 [ 1 0 0 ] , pro, propun, mag 2 , den, e s c , com; char op; textco lor(B LU E ); textbackground(WHITE); do
{
www.FreeLibros.me
299
300
Capítulo 9
Ejercicios resueltos
c l r s c r f ); p r i n t f ( "C alcula l a
p r o y e c c ió n e n t r e dos v e c t o r e s \ n \ n " );
p r i n t f ( " Dame e l numero de e l e m e n t o s de l o s
vectores:
");
scanf("%d",&n); propun=(d; den=0 ; p rin tf("\n "); f o r ( i = 0 ; i < n; i + + )
{ p r i n t f ( " Dame l a
componente %c/ d e l
vecto r sobre e l
cual
p r o y e c c i ó n : " , i +1);
scanf('% f,& v1[i]); } p r i n t f ( " \ n " ); f o r ( i = 0 ;i < n ; i ++ )
{ p r i n t f ("Dame l a
componente %c/ d e l
otro
vector:
",i+ 1);
p r i n t f ( " \nLa p r o y e c c i ó n r e s u l t a n t e e s e l
vector:
") ;
s c an f("% f" ,& v2 ( i ] ) ;
} for
( i = 0 ; i < n; i + + )
{ pro=v1 [ i j * v 2 [ i j ; propun+=pro; mag2 =v1 [ i ] * v 1 [ i ] ; den+=mag2 ;
} esc=propun/ den;
p r i n t f ("{ for
");
( i = 0 ;i < n ; i ++ )
{ com=v1 [ i ] * e s c ; p rin tf(
"%. 2 f
" ,com) ;
} p rin tf("} \n "); p r i n t f ( " \nDesea c a l c u l a r o t r a p r o y e c c i ó n ? S / N " ) ; s c a n f ( "%s", & o p ) ; }
www.FreeLibros.me
es l a
9.9 A rre g lo s u nidim ensionales
301
w h i l e ( (op==' s ' ) \\(op=='S') ) ; getchf);
}
9.9.5 Calcular el ángulo en grados entre dos vectores /* Á n g u l o en g r a d o s e n t r e dos v e c t o r e s de n componentes */ # i n c l u d e < s t d i o .h> # i n c l u d e < c o n i o . h> t t i n c l u d e v o id main()
{ in t n ,i; float v 1 [ 1 0 0 ] , v 2 [ 1 0 0 ] ,m1 ,m2,mag1, mag2 , p r o , p r o p u n , x , a n r a d , a n g r a d ; c h a r op; textcolor(W HITE); textbackground(BLUE); do
{ c l r s c r f ); p rin tf("C a lcu la
el
ángulo e n t r e dos v e c t o r e s \ n \ n " );
p r i n t f ( " Dame e l numero de e l e m e n t o s de l o s
vectores:
") ;
s c a n f ( U96 d " , & n ) ; mag 1 =0 ; pr o pu n = 0 ; mag2 =0 ; p r i n t f ( “ \n"); for
( i = 0 ; i < n; i + + )
{ p r i n t f ( " Dame l a
componente %c/ d e l p r i m e r v e c t o r :
" ,i+1);
s c a n f ( " * 6f " , & v 1 [ i ] ) ;
} p rin tf("\n "); for
( i = 0 ; i < n; i + + )
{ p r i n t f ( " Dame l a
componente %c/ d e l
segundo v e c t o r :
s c a n f ( " * 6f " , & v 2 [ i ] ) ;
} for
( i = 0 ;i < n ; i ++ )
www.FreeLibros.me
" , i + 1) ;
302
Capítulo 9
Ejercicios resueltos
{ pro=v1 [ i ] * v 2 [ i j ; propun+=pro; m1 =v1 [ i ] * v 1 [ i ] ; mag 1 +=m1 ; m2=v2[i]*v2[í];
mag2 +=m2 ;
} x = pr o pu n /( s q r t ( m a g 1 *mag2 ) ) ; anrad=acos(x); a n gr ad= 18 0* anr ad/ 3 . 1 41 59 ; p r i n t f ( " \nEl ángulo e n tre l o s
v e c t o r e s e s de 96 . 2 f o \ n u, a n g r a d ) ;
p r i n t f ( H\nDeseas h a c e r o t r o c a l c u l o ? S / N ' ) ; scanf("*6S",&op);
} w h il e ((op=='s')\\(op=='S-)); getchf);
}
9.9.6 Calcular la desviación estándar y varianza muestral de n datos /* C a l c u l a l a
d e s v i a c i ó n e s t á n d a r y v a r i a n z a m u e s t r a l de n d a t o s
#include i t i n e l ude # i n c lu d e< ma th . h> v o id main()
{ in t i,n ; c h a r op; float d a t o [ 1 00 ] , sum, pro m, v a r , d e s v , s u m a t ; textbackground(BLUE); textcolor(W HITE); do
{ c l r s c r f ); sum=0 ; sumat= 0 ;
www.FreeLibros.me
*/
9.9 A rre g lo s u nidim ensionales
p rin tf("C a lcu la la
d e sv ia ció n estándar y l a
303
v a r i a n z a de n d a t o s \
n\n"); p r i n t f ( " Dame e l numero de d a t o s de t u m u e s t r a :
");
s c a n f ( U96 d" ,& n) ; p r i n t f ( ” \n") ; for
( i = 0 ; i < n; i + + )
{ p r i n t f ( " Dame e l
v a l o r %c/ de t u m u e s t r a :
" , i + 1);
s c a n f f "%f", & d a t o [ i J ) ; s u m+ = da to [ i] ;
} prom=sum/n; for
(i= # i n c l u d e < s t d i o . h> void main()
{ in t
con[99][99], c , s , x , y ;
c l r s c r ( ); p r i n t f ( "Tabulare l a nCuantos t i p o s
re siste n cia
de c o n c r e t o s segú n l a
de c o n c r e t o s t i e n e s ?
semana de p r u e b a \
\n");
scanf("%d",&c); p r i n t f ( “C u a n t a s semanas h a r a s p r u e b a s ? \ n " ) ; s c a n f ( " 96d“ , & s ) ; for
(x= 0 ;x void main()
{ i n t peso[4][5], i , j , s , s e , p , to ta l; c l r s c r ( ); p r i n t f ( " T i e m p o de e j e r c i c i o
(semana de 5 d i a s ) \ n " ) ;
p r i n t f ( ”De c u a n t a s semanas q u i e r e s t u c o n t r o l de p e s o ? \ n " ) ; s c a n f ( U96 d " , & s e ) ; for
( i = 0 ;i t t i n c l ude void m ain()
{ f loat x [ 2 0 ] [ 2 0 ] , y [ 2 0 ] [ 2 0 J ; in t i,j , f, c ; te x tco lo r(3 ); textbackground(0) ; c lrs c rO ; g o t o x y ( 1 5 , 5 ) ; p r i n t f ( " R a i z c u a d r a d a de una m a t r i z " ) ; p r i n t f (° \n\n\nNumero de f i l a s :
") ;
s c a n f f "%c/n, & f ) ; p r i n t f ( " \nNumero de c o l u m n a s :
");
s c a n f ( n96d“ , & c ) ; p r i n t f ( ” \ n \ n \ n ”) ; for
(i=0 ;i< f;i+ + )
{ for
(j=0 ;j t t i n c l u d e < c o n i o . h> v o i d md()
{ float md, t o t a l ; p r i n t f ( "Dame e l
c o s t o de m a t e r i a l e s d i r e c t o s f m a s de 9 0 0 0 ) \ n " ) ;
s c a n f f "% f" , &md); t o t a l = m d 19000; p r i n t f ( " E l c o s t o u n i t a r i o de m a t e r i a l e s d i r e c t o s e s $*t>.3f", t o t a l ) ;
} v o i d cmdf )
{ float mod, t o t a l ; p r i n t f ( "Dame e l
c o s t o de mano de o b r a d i r e c t a f m a s de 9 0 0 0 ) \ n " ) ;
s c a n f f "% f",&mod); total=mod/9000; p r i n t f ( " E l c o s t o u n i t a r i o de mano de o b r a d i r e c t a
www.FreeLibros.me
e s $%.3 f " , t o t a l ) ;
324
Capítulo 9
Ejercicios resueltos
} void c i( )
{ float c i n , t o t a l ; printf("Dam e e l
total
de c o s t o s i n d i r e c t o s ( m a s de 9 0 0 0 ) \ n " ) ;
s c a n t("% f",& cin ); total= cin/9000; p r i n t f ("El
costo u n ita r io
de c o s t o s i n d i r e c t o s
e s $%.3 f " , t o t a l ) ;
} v o id main()
{ in t
op;
c l r s c r f ); p r i n t f ( ” \nCalcule l o s
costos u n ita r io s
p r i n t f ( ” \nQue c o s t o u n i t a r i o
de l a
empresa G e l s t r a p \ n " ) ;
deseas c a l c u l a r ? \ n " );
p r i n t f ( " 1 ) M a t e r i a l e s d i r e c t o s \ n 2 ) M a n o de o b r a \ n 3 ) C o s t o s i n d i r e c t o s \ n u) ; s c a n f ( ”%du, & o p ) ; switch(op)
{ c a s e 1 : md(); break; c a s e 2 : cmd( ); break; c a s e 3:
ci(); break;
d e fau lt: p r i n t f ( "Opción i n v a l i d a " );
} getchf);
}
9.11.3 Calcular la molaridad de una solución / * C á l c u l o de l a
m olaridad*/
# i n c l u d e < s t d i o .h> Uinclude v o i d m o l a r i d a d () {
www.FreeLibros.me
9.11 Funciones sin paso d e parám etros
325
float M , n , L ; p rin tf("\n
\n I n t r o d u z c a l o s m o l e s :
");
scanf("% f",&n); p r i n t f ( u\n A h o r a e l
volumen en l i t r o s :
");
s c a n f f "% f" , & L ) ; M=n/L; p r i n t f ( " L a m o l a r i d a d e s : %f"
} void m ain()
{ c h a r op; do
{ g o t o x y ( 2 6 , 3); p r i n t f ( " C a l c u l o de l a
m olaridad
(M) " ) ;
molaridad( ) ; p r i n t f ( " \ n \ n Q u ie re c a l c u l a r o t r a m o la r id a d ? S/N
");
scanf("*6S",&op);
} w h ile
(op=='S');
getchf);
9.11.4 Calcular el porcentaje de masa de una solución l * C á l c u l o de % masa*/ # i n c l u d e < s t d i o . h> t t i n c l u d e < c o n i o . h> v o i d masa ()
{ float pm,comp, s o l u c i ó n ; p r i n t f ( " \ n \ n I n t r o d u c e l a masa d e l componente a c a l c u l a r :
") ;
s c a n f ( "%f", &comp); p r i n t f ( ” \n R e c u e r d a qu e l a s la
masa de l a
solu ción :
u n i d a d e s deben s e r l a s mismas\n P o r u l t i m o , ") ;
s c a n f f "%f“ , & s o l u c i o n ) ; p m = ( c o m p / s o l u c i ó n ) *1 0 0 ; p r i n t f ( " \ n E l p o r c e n t a j e es:
www.FreeLibros.me
326
Capítulo 9
Ejercicios resueltos
} v o id main()
{ c h a r op; c lrs c rO ; do
{ g o to x y ( 2 6 ,3); p rin tf("C a lcu lo
d e l ^masa”) ;
masa( ) ; p r i n t f ( " \ n \ n Q u ie r e s c a l c u l a r o t r o p o r c e n t a j e ? S/N
");
scanf("*6S”,& op );
} w h ile (o p = = 'S ' ); getchf);
}
9.11.5 Calcular la norm alidad de una normalidad l * C á l c u l o de l a
norm alidad*/
# i n c l u d e < s t d i o . h> # i n c l u d e < c o n i o . h> v o i d n o r m a l i d a d ()
{ float n, E Q , L ; p r i n t f f " \n\n E s n e c e s a r i o c o n o c e r e l num. c omponente; i n t r o d ú z c a l o s :
de e q u i v a l e n t e s q u í m i c o s d e l
") ;
s c a n t ( "% f" , &E Q ); p r i n t f ( " \n F i n a l m e n t e , e l
volumen de l a
s o l u c i ó n en l i t r o s :
s c a n t ( "% f" , & L ) ; n=EQ/L; p r i n t t f ■\n N^>tn, n ) ;
} void main()
{ c h a r op; c l r s e r f ); do
{
www.FreeLibros.me
");
9.11 Funciones sin paso d e parám etros
327
g o to x y ( 2 6 ,3); p r i n t f ( " C a l c u l o de l a
norm alidad");
norm alidad(); p r i n t f ( " \n\n Q uiere c a l c u l a r o t r a n o rm a lid a d ? S/N s c a n f ( "%s", & o p ) ;
} w h i l e ( o p = ' S ' ); getchf);
}
9.11.6 Calcular la velocidad l*V elocidad*/ ftinclude
< co ni o. h>
#i n c l u d e
float v , d, void v e l
t;
()
{ p rin tf
("Dame l a
s c a n f ("%f", p rin tf
d is t a n c ia \ n " );
& d);
("Dame e l t i e m p o \ n " ) ;
s c a n f ("%f",
& t);
v=d/t; p rin tf
( " L a v e l o c i d a d e s 96 7 . 2 f m / s \ n " , v ) ;
} void d i s t
()
{ p rin tf
("Dame l a
s c a n f ("%f", p rin tf
v e lo c id a d \ n " );
& v);
("Dame e l t i e m p o \ n " ) ;
s c a n f ("%f",
& t);
d=t*v; p rin tf
("La d is t a n c ia
e s %7.2 f m \ n " , d ) ;
} v o i d t i e m p o ()
{ p rin tf
("Dame l a
s c a n f ("%f", p rin tf
v e lo c id a d \ n " );
& v);
("Dame l a
d i s t a n c i a \ n ”) ;
www.FreeLibros.me
");
328
Capítulo 9
scanf
Ejercicios resueltos
& d);
t=d/v; p rin tf
("El
t i e m p o e s %7. 2 f s \ n ” , t ) ;
} v o i d mai n ()
{ e lrse r in t
();
f;
c h a r o p = 's '; w h ile
( 0p = = ' s ' \ \ o p = = ' S ' )
{ e lrse r
();
p r i n t f ( " E l programa c a l c u l a
1 ) la v e lo c id a d 2)l a
tiempo\n"); p r i n t f ("Que d e s e a s c a l c u l a r ? \ n " ) ; s c a n f C * d m, switch
& f);
(f)
{ c a s e 1: p r i n t f
( "V e lo cid a d \n ");
vel
();
break; case 2 : p r i n t f ( " D is t a n c ia \ n " ); d ist
();
break; c a s e 3: p r i n t f ( " T i e m p o \ n " ) ; tiempo ( ) ; break; de fau lt: p r i n t f
( " E r r o r de c a s o
\ n ");
} p rin tf scanf
("Deseas r e p e t i r l a
función? s/n\n");
& op);
} getch
();
}
9.11.7 Calcular el campo eléctrico /*Campo e l é c t r i c o * / Uinclude
H include
www.FreeLibros.me
d ista n cia
3)el
9.11 Funciones sin paso d e parám etros
float e,
f,
q;
v o i d c am po _e l e ()
{ p rin tf
("Dame l a
s c a n f ( " % f a, p rin tf
& f);
("Dame l a
scanf
f u e r z a \ n " );
ca rg a \n ");
& q);
e=f/q; p rin tf
("El
campo e l é c t r i c o
e s 96 7 . 2 f \ n a,
e);
} void f u e r z a
()
{ p rin tf
("Dame e l campo e l e c t r i c o \ n " ) ;
scanf ("*f", p rin tf
& e);
("Dame l a
scanf
ca rg a \n ");
& q);
f =e*q; p rin tf
("L a f u e r z a es
. 2 f ",
f);
} void carga
()
{ p rin tf
("Dame e l campo e l e c t r i c o \ n " ) ;
s c a n f ("%f", p rin tf
& e);
("Dame l a
s c a n f ('% f",
fuerza
\ n ");
& f);
q=f/e; p rin tf
( " L a c a r g a e s % 7 .2 f " ,
q);
} v o i d mai n ()
{ clrs c r in t
();
f;
char op= 'sl ; w h ile
(op=='s'\\op=='S')
{ c lrs c r
();
p r i n t f ( " E l programa c a l c u l a \ n
1)Campo e l e c t r i c o \ n 2 ) F u e r z a \ n
3 ) C a r g a \ n ”) ; p r i n t f ("Que d e s e a s c a l c u l a r ? \ n " ) ;
www.FreeLibros.me
329
330
Capítulo 9
scanf ( V , switch
Ejercicios resueltos
& f);
(f)
{ c a s e 1: p r i n t f
("Campo e l e c t r i c o \ n " ) ;
c am po _e l e ( ) ; break; case 2 : p r i n t f ( " F u e r z a \ n " ); fuerza
();
break; c a s e 3: p r i n t f carga
("Carga\n"); ();
break; d e fau lt: p r i n t f
( " E r r o r de c a s o
\ n ");
} p rin tf scanf
("Deseas r e p e t i r l a
("%s",
función? s/n\n");
& op);
} getch
();
}
9.11.8 Calcular el número de ladrillos y la cantidad de cem ento necesarios para construir una pared / *Cos t a l e s _ d e _ c e m e n t o */ # i n c l u d e < s t d i o . h> # i n c l u d e < c o n i o . h> v o i d c o s t a l e s ()
{ float kg; in t
cc;
p r i n t f ( " D i m e e l numero de k g y t e i n d i c a r e ndime e l numero de k g " ) ; s c a n f ( " % f " ,& kg); c c=k g/50; p r i n t f ( " E l numero de c o s t a l e s e s % d " , c c ) ;
} void l a d r i l l o s f ) {
i n t me,ni;
www.FreeLibros.me
cuantos c o s t a l e s n e c e s it a s \
9.12 Fu nciones co n p ro to tip o sin paso d e parám etros
p r i n t f ( "Te i n d i c a r e
e l numero de l a d r i l l o s
que n e c e s i t a s \ n d i m e c u a n t o s
metros cuadrados c o n s t r u i r á s " ); s c a n f f "%c/", &mc); nl=mc*72; p r i n t f ( " E l numero de l a d r i l l o s
que n e c e s i t a s e s % d " , n l ) ;
} void m a in f)
{ in t
op,res;
c l r s c r f ); p r i n t f ( " D i m e e l numero de k g de cemento y t e i n d i c a r e l o s
c o s t a l e s que
n e c e s i t a s , o de m e t r o s c u a d r a d o s de p a r e d y t e i n d i c a r e
e l numero
de l a d r i l l o s \ n " ) ; p r i n t f ( "Que d e s e a s c a l c u l a r ? \ n 1
cement o\n2 l a d r i l l o s " ) ;
s c a n f f "96d", & o p ) ; if
( 0p==1)
{ c o s t a l e s ();
} else
{ la d rillo s f) ;
} getchf);
}
9.12 Funciones con prototipo sin paso de parám etros 9.12.1 Calcular la distancia entre dos puntos /* Programa de l a
d i s t a n c i a e n t r e d o s p u n t o s con f u n c i o n e s s i n p a s o de
p a r á m e t r o s */ # i n c l u d e < s t d i o . h> # i n c l u d e < c o n i o . h> t t i n c l u d e v o id fun_puntos(); v o id m ainf)
{
www.FreeLibros.me
332
Capítulo 9
Ejercicios resueltos
c h a r op; do
{ c l r s c r ( ); p r i n t t ( "Programa p a r a c a l c u l a r l a
d ista n cia
e n t r e dos p u n t o s \ n \ n " ) ;
f u n _ p u n t o s ( ); p r i n t t ( " \ n \ n \ n D e s e a s r e p e t i r e l pr o gr am a? S / N
");
scanf("%s”,&op);
} w hile((op= = 's')\\(op= 'S '));
getchf); } void fun_puntos()
{ float x 1 , x 2 , y 1 , y 2 , d i s t ; p r i n t f ( "P r i m e r p u n t o \ n \ n " ) ; printf("Dam e l a
x de l a
p rim e ra coordenada
");
p r i n t f ( " D a m e l a y de l a
p rim e ra coordenada
");
s c a n f ( " % f " , & x 1) ;
s c a n t ( U96f" , & y 1 ) ; p r i n t f ( " \nSegundo p u n t o \ n \ n " ) ; p r i n t f ( uDame l a
x de l a
segunda c o o r d e n a d a
") ;
s c a n t ( "% f" , &x 2 ) ; p r i n t t ( " D a m e l a y de l a
segunda c o o r d e n a d a " ) ;
scant('%t',&y2); d i s t = s q r t ( ( x 2 - x 1) * ( x 2 - x 1)+(y2 -y1) * ( y 2 - y 1) ) ; p r i n t t ( " \ n \ n L a d i s t a n c i a e s de %. 2t u n i d a d e s " , d i s t ) ;
>
9.12.2 Calcular la excentricidad de una elipse sin paso de parámetros /* P r o g r a ma de l a
e x c e n t r i c i d a d de una e l i p s e
Hinclude #include t t i ncl ud e< ma th .h> v o id e x c _ t u n ( ); void main()
www.FreeLibros.me
s i n p a s o de p a r á m e t r o s
*/
9.12 Fu nciones co n p ro to tip o sin paso d e parám etros
333
{ textcolor(W H ITE ); textbackground(BLUE); c h a r op; do
{ c l r s c r ( ); p r i n t f ( "E x c e n t r i c i d a d de una e l i p s e \ n \ n " ) ; exc_ f u n ( ) ; p r i n t f f " \ n \ n De s ea s r e p e t i r e l pr o gr am a? S / N
");
s c a n f ( u% s " , & o p ) ;
} w h i l e ( (op=='s ' ) \ \ ( o p = ' S ' ) ) ;
} v o id exc_fun()
{ float a 2 , b 2 , a , b , e ; p r i n t f ( " D a m e l a m edi da d e l e j e mayor
");
s c a n t ( U96 f " , &a 2 ) ; p r i n t f ( " D a m e l a m edi da d e l e j e menor " ) ; s c a n f C % f , & b 2 ); a=a2 / 2 ; b=b2/2; e = (s q rt ( a * a -b * b )) /a; if((a!=0)&&(b!=Q))
p r i n t f ( u\nLa e x c e n t r i c i d a d e s de %f u . \ e ) ;
else p r i n t f f " \ n L a s m e d i d a s no s on v a l i d a s " ) ; getch();
}
9.12.3 Calcular la derivada de X a la n /* Programa de d e r i v a d a s de X a l a
n s i n p a s o de p a r á m e t r o s
# i n c l u d e < s t d i o .h> # i n c l u d e < c o n i o .h> v o i d d e r _ f u n ( );
v o id main()
{
www.FreeLibros.me
*/
334
Capítulo 9
Ejercicios resueltos
textco lor(B LU E ); textbackground(WHITE); c h a r op; do
{ c lrs c rf); p r i n t f ( " D e r i v a d a s de X a l a
n de o r d en s u p e r i o r \ n ”) ;
der_fun(); p r i n t f ( K\ nDeseas r e p e t i r e l pr o gr am a? S / N " ) ; scanf("% s",&op);
} w hile((op= = 's')\\(op= = 'S'));
} v o id der_fun()
{ in t
x , n , i f acum,o;
p r i n t f ( “ \nDame l a
constante
");
scanf("% d",&x); printf("Dam e e l
exponente
");
s c a n f ( " 96 d " , & n ) ; p r i n t f ( u\nDe que o r d e n q u i e r e s c a l c u l a r l a
derivada?
”) ;
scanf("% d'',&o); for
( i =1 ;i
www.FreeLibros.me
9.13 Fu nciones con paso d e parám etros
# i n c l u d e < c o n i o . h> üdefine mon 1 2 0 0 0 0 float d i m p r e f i n t d p , i n t ma m, in t m a n , i n t i r i s )
{ r e t u r n ( (mam+man+ins+mon) - (. 2 0 * (mamman+ins+mon) ) ) ;
} in t
d c o r t e ( i n t d p , i n t ma m, in t m a n , i n t i n s )
{ return(mam+man+ins+mon) ;
} void m ain()
{ i n t mam,man,i ns ,dp; e l r s e r (); p rin tf("C a lcu la
el
costo in d ir e c t o t o t a l
de c a d a d e p a r t a m e n t o de l a
Good Mar k Company\n") ; p r i n t f ( "De c u a l
d e p ar t a me nt o n e c e s i t a s s a b e r e l
t o t a l de s u c o s t o
i n d i r e c t o ? \ n " ); p r i n t f ( ” 1 ) d e p a r t a m e n t o de c o r t e \ n 2 ) d e p a r t a m e n t o de i m p r e s i o n \ n " ) ; s c a n f ( U96 d " , & d p ) ; p r i n t f ( "Cuant o f u e d e l
c o s t o de manejo de m a t e r i a l e s ? \ n " ) ;
s c a n f ( "%cP, &mam); p r i n t f ( "Cuant o s e i n v i r t i ó
de m a n u f a c t u r a ? \ n " ) ;
s c a n f ( " 96d",&man); p r i n t f ( "Cuant o f u e d e l
c o s t o de i n s p e c c i o n ? \ n " ) ;
s c a n f ( U96 d " , & i n s ) ; i f
(dp==1) p r i n t f ( " E l
costo in d ir e c t o
del
d e p ar t a me nt o de c o r t e es
del
d e p ar t a me nt o de i m p r e s i ó n es
5%c/", d c o r t e ( d p , mam, man, i n s ) ) ; i f
(dp==2 ) p r i n t f ( " E l
costo in d ir e c t o
$%f" , dimpre(dp,mam, m a n , i n s ) ) ; g e t c h f );
}
9.13.2 Calcular los costos unitarios de la em presa Gelstrap /*Empresa G e l s t r a p * / # i n c l u d e < s t d i o . h> # i n c l u d e < c o n i o . h> float m d i ( f l o a t md)
www.FreeLibros.me
335
336
Capítulo 9
Ejercicios resueltos
{ return(m d/9000);
} float m a o b r a f f l o a t mod)
{ r e t u r n f m o d / 9 000 );
} float c o s i n d f f l o a t c i n )
{ re tu rn (cin /90 0 0 );
} void main() i in t
op;
float total,m d,m od, c i n ; c l r s e r f ); p r i n t f ( v\ n C a l c u l e l o s
costos u n ita r io s
p r i n t f ( "\ n Q u e c o s t o u n i t a r i o
de l a
empresa G e l s t r a p \ n " ) ;
deseas c a l c u l a r ? \ n " );
p r i n t f ( " 1 ) m a t e r i a l e s d i r e c t o s \ n 2 ) m a n o de o b r a \ n 3 ) c o s t o s i n d i r e c t o s \ n " ) ; s c a n t ( U96d" , &op) ; sw itch(op)
{ c a s e 1 : p r i n t f ( " Dame e l
c o s t o de m a t e r i a l e s d i r e c t o s ( m a s de
9000)\n"); s c a n t ( V96f" ,&md); p r i n t f ("E l costo u n ita r io
de m a t e r i a l e s d i r e c t o s es
3 f ” ,mdi(md)); break; c a s e 2 : p r i n t f ( " Dame e l
c o s t o de mano de o b r a d i r e c t a ( m a s de
9 0 0 0 ) \ n ”) ; s c a n t ( "% f■,&mod); p r i n t f ("E l
costo u n it a r io
de mano de o b r a d i r e c t a
es $%.3 f " , m a o b r a ( m o d ) ) ; break; c a s e 3:
p r i n t f ( ”Dame e l
t o t a l de c o s t o s i n d i r e c t o s
(mas de
9000)\n"); s c a n t ( "%f" , & c i n ) ; p r i n t f ("E l
c o s t o u n i t a r i o de c o s t o s i n d i r e c t o s
$%. 3 f " , c o s i n d ( c i n ) ) ;
www.FreeLibros.me
es
9.13 Fu nciones co n paso d e p arám etros
break; d e fau lt: p r in t f f " O p c ió n i n v a l i d a " );
} getch();
}
9.13.3 Calcular la excentricidad de una elipse /* Programa de l a
e x c e n t r i c i d a d de una e l i p s e c on p a s o de p a r á m e t r o s */
U i n c l u d e < c o n i o . h> # i n c l u d e < s t d i o .h> t t i n c l ude float e x c _ f un ( f l o a t x, fio a t y ) ; v o id main()
{ textcolor(W HITE); textbackground(BLUE); c h a r op; float a 2 , b 2 , r e s u l ; do
{ c l r s e r f ); p r i n t f ( "E x c e n t r i c i d a d de una e l i p s e \ n \ n " ) ; p r i n t f ( " D a m e l a m edi da d e l e j e mayor
");
scant("% f",&a2); p r i n t f ( " D a m e l a m edi da d e l e j e menor
");
scanf("*6f",&b2); r e s u l = e xc _ f u n ( a 2 , b 2 ) ; p rin tff"\n La
e x c e n t r i c i d a d e s de % . 2 f u . " , r e s u l ) ;
p r i n t f f " \ n \ n De s ea s r e p e t i r e l pr o gr am a? S / N scant("% s",&op);
} w h i l e ( (op==' s '; II ( o p==' s ■; ; ; getchf);
} float e x c _ f u n ( float x, float y) {
float a , b , e ;
www.FreeLibros.me
") ;
337
338
Capítulo 9
Ejercicios resueltos
a =x/ 2 ; b=yl2 ; e=sqrt(a*a-b*b)¡a; if
( ( a ! = 0 ) & & ( b ! =0 ) )
r e t u r n e;
else p r i n t f ( " M e d i d a s no v a l i d a s \ n " ) ;
}
9.13.4 Calcular derivadas de X a la n /* P r og r a m a de d e r i v a d a s de X a l a
n con p a s o de p a r á m e t r o s */
# i n c l u d e < s t d i o . h> f t i n c l u d e < c o n i o . h> in t
d e riv_ co n s(in t x , i n t n , i n t
in t
d e riv_exp (int x , in t n , i n t
o); o);
void main()
{ in t
x ,n ,o ,re s u l1,r e s u l2 ;
c h a r op; do
{ c lrs c rf); p r i n t f ( " D e r i v a d a s de X a l a p r i n t f ( " \nDame l a
n de o r d e n s u p e r i o r \ n n) ;
c o n s t a n t e : ");
s c a n f ( U9f d u, &x ) ; p r i n t f ("Dame e l e x p o n e n t e : " ) ; scanf("%d",&n); p r i n t f ( " \nDe que o r d e n q u i e r e s c a l c u l a r l a
derivada?
scanf("*d",&o); r e s u l 1= d e r i v _ c o n s ( x , n , o ) ; r e s u l 2 =deriv_exp(x, n , o ) ; p r i n t f ( " \nLa d e r i v a d a es: %c/ X*%d\n" , r e s u l 1 , r e s u l 2 ) ; p r i n t f ( " \nDeseas r e p e t i r e l pr o gr am a? S / N s c a n f ( " % s ” ,&op);
} w hile((op= = 's')\\(op= 'S ')); g e t c h f );
}
www.FreeLibros.me
");
") ;
9.13 Fu nciones co n paso d e p arám etros
in t
d e riv_ co n s(in t x , i n t n , i n t
o)
{ in t i; f o r ( i = 1 ;i
ttinclude
float v e l
( f l o a t a,
fl oat b)
{ r e t u r n a/ b ;
} float t i e m p o ( f l o a t a,
f l o a t b)
{ r e t u r n a/ b ;
} float d i s t
( f l o a t a,
f l o a t b)
{ r e t u r n a*b;
} v o i d mai n ()
www.FreeLibros.me
339
340
Capítulo 9
Ejercicios resueltos
{ e lrse r
();
f l o a t v, in t
d,
t;
f;
char op= 's'; w h ile
( 0p = = ' s ' \ \ o p = = ' S ' )
{ p r i n t f ("Dame l a
f u n c i ó n que d e s e a s l l e v a r a c a b o \ n 1 ) v e l o c i d a d \ n 2 )
t i e m p o \ n 3 ) d i s t a n c i a \ n " ); s c a n f ("%d", switch
& f);
(f)
{ case 1 : p r i n t f ( " v e l o c i d a d \ n " ); p rin tf
("Dame l a
scanf C * f ,
& d) ;
p r i n t f ("Dame e l s c a n f ("%f", v = vel p rin tf
d i s t a n c i a \ n " );
tiem po\n");
& t);
(d, t ) ; ( " L a v e l o c i d a d e s %7. 2 f m / s \ n " , v ) ;
break; c ase 2 : p r i n t f ( " t i e m p o \ n " ); p rin tf
("Dame l a
s c a n f ("%f",
d i s t a n c i a \ n " );
& d) ;
p r i n t f ("Dame l a s c a n f ("%f",
v e l o c i d a d \ n " );
& v);
t= tiempo ( d , v ) ; p rin tf
("El
tiempo es % 7 .2 fs \n " , t ) ;
break; c a s e 3: p r i n t f
( " d is t a n c ia \ n " );
p r i n t f ("Dame l a s c a n f ("%f",
& v);
p r i n t f ("Dame e l s c a n f ("%f", d=dist
v e l o c i d a d \ n " );
tiem po\n");
& t);
( v , t );
p r i n t f ("La d is ta n c ia
e s 96 7 . 2 f m \ n " ,
break; d e fau lt: p r i n t f
( " E r r o r de c a s o \ n " ) ;
} p r i n t f ("Deseas c a l c u l a r o t r a f u n c i o n ? \ n " );
www.FreeLibros.me
d);
9.13 Fu nciones con paso d e parám etros
s c a n f ( a* s u, & o p ) ; } getch
();
}
9.13.6 Calcular fuerza, masa y aceleración /*F u e r z a */ ttinclude
< co ni o. h>
ttinclude
float f u e r z a
( f l o a t a,
f l o a t b)
{ r e t u r n a*b;
} float masa (f loat a,
f l o a t b)
{ r e t u r n a/b;
} float a c e l e r a c i ó n
( f l o a t a,
float b)
{ r e t u r n a/b;
} v o i d mai n ()
{ e lrse r
();
float F , in t
m,
a;
f;
c h a r o p = 's '; w h ile
( 0p = = ' s ' \ \ o p = = ' S ' )
{ p r i n t f ("Dame l a
f u n c i ó n que d e s e a s l l e v a r a c a b o \ n 1 ) F u e r z a \ n 2 ) m a s a \ n 3 )
a c e le r a c io n \ n " ); s c a n f ("%d", switch
& f);
(f)
{ case 1: p r i n t f ( " F u e rz a \n "); p rin tf scanf p rin tf
("Dame l a
masa\n") ;
& m); ("Dame l a
s c a n f ("*6f",
a c e le r a c io n \ n " );
& a);
www.FreeLibros.me
342
Capítulo 9
F = fuerza p rin tf
Ejercicios resueltos
(m, a) ;
( " L a f u e r z a es %7.2fN\n" , F ) ;
break; case 2 : p r i n t f
("m asa\n") ;
p rin tf
("Dame l a
scanf ("*f",
fu e r z a \ n " );
& F);
p r i n t f ("Dame l a
a c e le r a c io n \ n " );
s c a n f ( " * f m, & a ) ; m= masa ( F , a ) ; p r i n t f ( " L a masa e s %7. 2 f m \ n " , m); break; c a s e 3: p r i n t f ( "a c e l e r a c i o n \ n " ) ; p rin tf
("Dame l a
scanf ( " * f ,
f u e r z a \ n " );
& F);
p r i n t f ("Dame l a m a s a \ n ") ; scanf
& m);
a= aceleración
( F, m) ;
p r i n t f ( " L a a c e l e r a c i ó n e s 96 7 . 2 f m / s 2 \ n " , a ) ; break; de fau lt: p r i n t f
( " E r r o r de c a s o \ n " ) ;
} p rin tf
("Deseas c a l c u l a r o t r a
scanf
f u n c i o n ? \ n " );
& op);
} getch
();
}
9.13.7 Determ inar si un com puesto es alcano, alqueno o alquino /*Alcano alqueno o a lq u in o * / Uinclude
itinclude
in t
c,
h , a1, a2,
float a l c a n o
a3;
( f l o a t c)
{ return
2 *c+2 ;
> float
alq ueno
( f l o a t c)
{
www.FreeLibros.me
9.13 Fu nciones con paso d e parám etros
343
r e t u r n 2 *c;
} float a l q u i n o
( f l o a t c)
{ retu rn 2 *c-2 ;
} v o i d mai n ()
{ e lrse r
();
i n t h,
x;
c h a r o p = 's '; w h ile
( 0p = = ' s ' \ \ o p = = ' S ' )
{ e lrse r
();
p rin tf
( " E l programa i n d i c a
si
e l compueso e s un a l c a n o ,
alq ueno y
a lq u in o \ n " ); p r i n t f ("Dame e l numero de c a r b o n o s \ n " ) ; s c a n f ("%du,
& x);
p r i n t f ("Dame e l numero de h i d r o g e n o s \ n " ) ; scanf ( " W , alcano
(x);
alq ueno
(x);
a lq uino
(x);
i f
& h);
(h==alcano ( x ) ) p r i n t f ( " E s un a l c a n o \ n " ) ;
e lse i f
(h==alqueno ( x ) ) p r i n t f
( " E s un a l q u e n o \ n " ) ;
else if
( h = a lq u in o (x))
p rin tf
( " E s un a l q u i n o \ n " ) ;
else p rin tf
("Error,
p r i n t f ("Deseas r e p e t i r l a scanf
no p e r t e n e c e a n i n g ú n g r u p o \ n " ) ;
función? s/n \n");
& op);
} getch
();
}
9.13.8 Calcular resistencia, am peraje o voltaje /*R esistencias* / f t i n e l u d e
www.FreeLibros.me
344
Capítulo 9
Hinclude
Ejercicios resueltos
float r e s i s t e n c i a
( f l o a t a,
f l o a t b)
{ r e t u r n a/b;
} float v o l t a j e
( f l o a t a,
f l o a t b)
float a mpe raj e ( f l o a t a,
f l o a t b)
{ r e t u r n a*b;
} { r e t u r n a/b;
} v o i d mai n ()
{ e lrse r
();
float r , in t
v,
a;
f;
c h a r o p = 's '; w h ile
( 0p = = ' s ' \ \ o p = = ' S ' )
{ p rin tf
("Dame l a
f u n c i ó n qu e d e s e a s l l e v a r a c a b o \ n 1 ) r e s i s t e n c i a \ n 2 )
v o lt a j e \ n 3 ) a m p e r a j e \ n " ); s c a n f ('% d', sw itch
& f);
(f)
{ case 1 : p r i n t f
( "r e s i s t e n c i a \ n " ) ;
p r i n t f ("Dame e l scanf ("*f",
& v);
p r i n t f ("Dame e l s c a n f ("%f", r
v o lt a j e \ n " );
am p e raje\n ");
& a);
= re siste n cia p rin tf
(r,a); ("La r e s i s t e n c i a
e s % 7 .2 f Ohms\n" , r ) ;
break; case 2 : p r i n t f ( " v o l t a j e \ n " ); p rin tf scanf ("W ",
( “Dame l a
& r);
p r i n t f ("Dame e l s c a n f ("%f",
r e s i s t e n c i a \ n " );
am p e raje\n ");
& a);
www.FreeLibros.me
9.13 Fu nciones co n paso d e p arám etros
v= v o l t a j e
(r,a);
p r i n t f ( "El
vo lta je
e s %7.2 V o l t s \ n " , v ) ;
break; c a s e 3: p r i n t f
( " am p e raje\n ");
p rin tf s c a n f ( U96f*, p rin tf
("Dame l a
r e s i s t e n c i a \ n " );
& r);
("Dame e l
v o lt a j e \ n " );
s c a n f ( " % f ' t & v); a=amperaje ( r , v ) ; p rin tf
("El
a mpe raj e e s % 7 .2 f A m p e r e s \ n " , a ) ;
break; d e fau lt: p r i n t f
( " E r r o r de c a s o \ n " ) ;
} p rin tf
("Deseas c a l c u l a r o t r a f u n c i o n ? \ n " );
scanf getch
& op);} ();
}
9.13.9 Calcular campo eléctrico, fuerza y carga /*R esistencias* / H i n d u de Hinclude
float ca mp o _e l e ( f l o a t a,
float b)
{ r e t u r n a/b;
} float f u e r z a
(f loat a,
float b)
{ r e t u r n a*b;
} float c a r g a
( f l o a t a,
f l o a t b)
{ r e t u r n a/b;
} v o i d mai n () {
clrs c r
();
float e , f ,
q;
www.FreeLibros.me
345
346
Capítulo 9
Ejercicios resueltos
i n t g; c h a r o p = 's '; w h ile
( 0p == ' s ' \ \ o p == ' S ' )
{ p r i n t f ("Dame l a
f u n c i ó n qu e d e s e a s l l e v a r a c abo \n1 )c amp o e l e c t r i c o \
n 2 ) fu e rz a \ n 3 ) c a rg a \ n "); s c a n f ("%d", sw itch
& g);
(g)
{ c a s e 1 : p r i n t f ("campo e l e c t r i c o \ n " ) ; p rin tf s c a n f ("%f",
("Dame l a
fu e r z a \ n " );
& f);
p r i n t f ("Dame l a s c a n f ("*6f",
c a r g a \ n " );
& q) ;
e = ca mp o _e l e ( f , q ) ; p r in t f ("El
campo e l é c t r i c o
e s 96 7 . 2 f N \ n " ,
e);
break; c a s e 2 : p r i n t f ( "f u e r z a \ n " ) ; p rin tf s c a n f ("%f",
("Dame e l
& e);
p r i n t f ("Dame l a s c a n f ("%f", f= f u e r z a
campo e l e c t r i c o \ n " ) ;
c a r g a \ n " );
& q);
(e,q);
p r i n t f ( " L a f u e r z a e s 96 7. 2f m\ n" ,
f);
break; c a s e 3: p r i n t f ( " c a r g a \ n " ) ; p rin tf s c a n f ("*f",
("Dame e l
campo e l e c t r i c o \ n " ) ;
& e);
p r i n t f ("Dame l a s c a n f ("%f",
f u e r z a \ n " );
& f);
q=carga ( e , f ) ; p r i n t f ( " L a c a r g a e s 96 7 . 2 f m / s 2 \ n " , q ) ; break; de fau lt: p r i n t f
( " E r r o r de c a s o \ n " ) ;
} p rin tf
("Deseas c a l c u l a r o t r a f u n c i o n ? \ n " );
scan f f% s", getch
& op);}
();
www.FreeLibros.me
9.14 Funciones con arreglos
9.14 Funciones con arreglos 9.14.1 M ostrar el inventario de una librería / * I n v e n t a r i o de l o s l i b r o s más v e n d i d o s * / # i n c l u d e < s t d i o . h> t t i n c l u d e < c o n i o . h> float c d ( i n t c [ 4 J )
{ in t
t=0 , i ;
f o r ( i =0; i t t i n c l ude v o i d f o r m u l a ()
{ float p e , in t
e,
i,
muestra,
m oles[ 1 0 ], p o r c ,
comp;
s u b [ 1 0 J;
p r i n t f f "I n d i q u e e l num.
de e l e m e n t o s d e l
compuesto (máximo 1 0 ) " ) ;
scanf("% i",& e); printf("Dam e l a
masa de m u e s t r a d e l
compuesto");
s c a n f f "%¿", & m u e s t r a ) ; for
( i = 0 ; i < e ; i = i + 1)
{ p r i n t f f "Dame e l p e s o a t ó m i c o d e l
e l e m e n t o %¿", i + 1 ) ;
s c a n f f "%¿" , & p e ) ; prin tff"A h o ra la
c a n t i d a d d e l compuesto (e n % m a s a ) “) ;
scanff"te",& porc); m o l e s [ i ] = f f p o r c / 100) *muestra)/pe;
} comp=moles[ 0 ]; for
( i =1 ; i < e ; i = i + 1 )
{ if
(comp ttin clu de< conio . h > void r l ( )
{ float r e a c , p m , m o l e s [ 1 5 ] , c o m p ; in t
c , i , elemento;
p r i n t f ( ”I n d i q u e c u a n t o s c omp ues tos t i e n e l a
reacción
s c a n f f "% i■,& c ) ; for
( i = 0 ; i < c ; i = i + 1)
{ p r i n t f ( “Dame l a
c a n t i d a d d e l r e a c t i v o % i",
i+1);
s c a n f ( U96 f ” , & r e a c ) ; p r i n t f ( " D a m e e l p e s o m o l e c u l a r d e l r e a c t i v o ”) ; s c a n f ( " % f ” ,&pm); mol e s [ i ] = r e a c /pm;
y comp=moles[ 0 ]; for
( i = 1 ; i < c ; i = i + 1)
{ i f
( c o m p < m o l e s [ i ])
{ c o m p = m o l e s [ i ]; elemento=i;
y
www.FreeLibros.me
(no mas de 1 5 ) ”) ;
C apítulo 9
354
Ejercicios resueltos
} p r i n t f ("E l re a ctiv o lim ita n te
e s % i",
elem ento);
} void main()
{ p r i n t f (" Reactiv o l i m i t a n t e " ); n(); getch();
}
9.14.7 Calcular la magnitud de un vector / * C á l c u l o de l a
m a g n i t u d de un v e c t o r * !
# i n c l u d e < s t d i o . h> t t i n c l u d e < c o n i o . h> # i n c l u d e < m a t h . h> v o i d mag()
{ in t
e , i , a [ 2 0 ] , a a [ 2 0 ] ,AA;
prin tf("D e
c u a n to s elementos es e l
vector
(máximo 2 0 ) ? " ) ;
s c a n f f "%¿" , & e ) ; for
( i = 0 ; i < e ; i = i + 1)
{ p r i n t f ( "Dame e l
v a l o r d e l e l e m e n t o %i d e l p r i m e r
scanff"% i" , & a [ i ] );
} for
( i = 0 ; i < e ; i = i + 1) a a [ i j = a [ i ] * a [ i j ;
AA=aa[0]; for(i= 1;i< e;i= i+ 1)
AA=AA+aa[i] ;
prin tf("% i",A A );
} void main()
{ p r i n t f ( "Magnitud a l
c u a d r a d o de un v e c t o r " ) ;
mag() ; g etchf);
y
www.FreeLibros.me
v e c t o r " , i+ 1);
9.14 Funciones con arreglos
9.14.8 Calcular el producto cruz de un vector l*Producto cruz*I # i n c l u d e < s t d i o . h> f t i n c l ude v o i d p e ()
{ i n t i,a[3],b[3 ],ab[3],A B ; p r i n t f ( " R e c u e r d a qu e so n de t r e s for
ele m e n to s");
(i=0;i