Introduccion a la programacion estructurada en C

Citation preview

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