Table Of Content
,
PROGRAMACION EN C
Segunda edición revisada
"
PROGRAMACION EN C
Segunda edición revisada
BYRON S. GOTTFRIED
Profesor de Ingeniería Industrial
Universidad de Pittsburgh
Traducción:
JOSÉ RAFAEL GARCÍA LÁZARO
Dpto. Lenguajes y Computación
Universidad de Almería
Revisión técnica:
ALFONSO BOSCH ARÁN
Dpto. Lenguajes y Computación
Universidad de Almería
MADRID• BUENOS AIRES• CARACAS• GUATEMALA• LISBOA• MÉXICO
NUEVA YORK• PANAMÁ• SAN JUAN• SANTAFÉ DE BOGOTÁ• SANTIAGO• SÁO PAULO
AUCKLAND • HAMBURGO •LONDRES• MILÁN• MONTREAL • NUEVA DELHI
PARIS • SAN FRANCISCO• SIDNEY •SINGAPUR• ST. LOUIS •TOKIO• TORONTO
The McGraw·Hi/1 Companles :'. ~'~"
La información contenida en este libro procede de la traducción de la segunda edición en inglés editada por
McGraw-Hill Companies, Inc. No obstante, McGraw-Hill no garantiza la exactitud o perfección de la
información publicada. Tampoco asume ningún tipo de garantía sobre los contenidos y las opiniones vertidas
en dichos textos.
Este trabajo se publica con el reconocimiento expreso de que se está proporcionando una información, pero
no tratando de prestar ningún tipo de servicio profeSional o técnico. Los procedimientos y la información
que se presentan en este libro tienen sólo la intención de servir como guía general.
McGraw-Hill ha solicitado los permisos oportunos para la realización y el desarrollo de esta obra.
PROGRAMACIÓN EN C. Segunda edición revisada
No está permitida la reproducción total o parcial de este libro, ni su tratamiento informático, ni la
transmisión de ninguna forma o por cualquier medio, ya sea electrónico, mecánico, por fotocopia, por
registro u otros métodos, sin el permiso previo y por escrito de los titulares del Copyright.
•
McGraw-Hill/lnteramericana
de España, S.A.U.
DERECHOS RESERVADOS © 2005. respecto a la segunda edición en español, por
McGRAW-HILL/INTERAMERICANA DE ESPAÑA, S. A. U.
Edificio Valrealty, l.' planta
B3.sauri, 17
28023 Aravaca (Madrid)
Traducido de la segunda edición en inglés de
PROGRAMMING WITH C
http://www.mcgraw-hill.es
profesional@mcgraw-hill.com
Copyright© MCMXCVI, por McGraw-Hill Companies, !ne.
ISBN: 0-07024-035-3 Esta obra se term'mó de
Imprimir en Febrero de 2005 en
ISBN: 84-481-9846-80-l Programas Educativos, S.A. de C.V.
Depósito legal: M. 0.000-2005 Calz. Chabacano No. 65-A
Col.Asturias, C.P. 06850, Méx. D.F.
Empresa Certificada por el Instituto Mexicano
Editores: Concepción Femández / Carmelo Sánchez
de Normalización y Certificación A.C., bajo la
Compuesto en Puntographic, S. L.
Norma JSO-9002: 1994/NMX-CC-004: 1995 con
el núm. de Registro RSC-048 y bajo la Norma
ISO-14001-1996/NMX-SAA-001: 1998 IMNC
IMPRESO EN MEXICO -PRINTED IN MEXICO con el núm. de Registro RSAA-003
Contenido
Ejemplos completos de programas ....................................................................................... ix
Prólogo....................................................................................................................................... xi
1. Conceptos básicos........................................................................................................... 1
1.1. Introducción a las computadoras ...... .. .............. ....... ......... .. .. . .. .. ...... ... .. ........... 1
1.2. Características de las computadoras ............................................................... 2
1.3. Modos de operación.......................................................................................... 5
1.4. Tipos de lenguajes de programación............................................................... 8
1.5. Introducción al C............................................................................................... 9
1.6. Algunos programas sencillos en C .................................................................. 13
1.7. Características deseables de un programa...................................................... 23
2. Conceptos básicos de C ......................................... ,...................................................... 31
2.1. El conjunto de caracteres de C ........................................................................ 31
2.2. Identificadores y palabras reservadas ............................................................. 32
2.3. Tipos de datos.................................................................................................... 33
2.4. Constantes.......................................................................................................... 35
2.5. Variables y arrays ............................................................................................. 43
2.6. Declaraciones .................................................................................................... 45
2.7. Expresiones........................................................................................................ 49
2.8. Instrucciones...................................................................................................... 50
2.9. Constantes simbólicas....................................................................................... 51
3. Operadores y expresiones............................................................................................. 59
3.1. Operadores aritméticos..................................................................................... 59
3.2. Operadores unarios ........................................................................................... 65
3.3. Operadores relacionales y lógicos................................................................... 68
3.4. Operadores de asignación ................................................................................ 71
3.5. El operador condicional.................................................................................... 75
3.6. Funciones de biblioteca.................................................................................... 77
4. Entrada y salida de datos .... ... ... ........ ..... ... .. ........ ......................... ... ... ............. ........... .. 87
4.1. Introducción....................................................................................................... 87
4.2. Entrada de un carácter - La función getchar .............................................. 88
4.3. Salida de un carácter - La función putchar ................................................. 89
4.4. Introducción de datos - La función scanf ........................ ,........................... 91
4.5. Más sobre la función scanf ............................................................................ 96
4.6. Escritura de datos - La función printf ........................................................ 101
4.7. Más sobre la función printf .......................................................................... 107
V
Vi CONTENIDO
4.8. Las funciones gets y pu ts ............................................................................. 114
4.9. Programación interactiva (conversacional).................................................... 114
5. Preparación y ejecución de un programa en C ....................................................... . 127
5. l. Planificación de un programa en C ................................................................ . 127
5.2. Escritura de un programa en C ....................................................................... . 129
5.3. Introducción de un programa en la computadora ......................................... . 131
5.4. Compilación y ejecución de un programa ..................................................... . 133
5.5. Mensajes de error ............................................................................................. . 135
5.6. Técnicas de depuración ................................................................................... . 140
6. Instrucciones de control ............................................................................................... . 153
6.1. Introducción ...................................................................................................... . 153
6.2. Ejecución condicional: La instrucción if - else .................................... . 156
6.3. Bucles: la instrucción while .......................................................................... . 159
6.4. Más sobre bucles: la instrucción do - while ............................................ . 163
6.5. Más aún sobre bucles: la instrucción far ..................................................... . 166
6.6. Estructuras de control anidadas ...................................................................... . 170
6.7. La instrucción switch .................................................................................... . 181
6.8. La instrucción break ...................................................................................... . 190
6.9. La instrucción continue ............................................................................... . 193
6.10. El operador coma ............................................................................................. . 195
6.11. La instrucción gato ......................................................................................... . 199
7. Funciones .................................................................................................. ,. .................... . 217
7 .1. Introducción ...................................................................................................... . 218
7.2. Definición de una función ............................................................................... . 219
7.3. Acceso a una función ....................................................................................... . 223
7 .4. Prototipos de funciones ................................................................................... . 226
7.5. Paso de argumentos a una función ................................................................. . 235
7.6. Recursividad ..................................................................................................... . 241
8. Estructura de un programa ........................................................................................ . 257
8.1. Tipos de almacenamiento ................................................................................ . 257
8.2. Variables automáticas ................................................................. :. ................... . 258
8.3. Variables externas (globales) .......................................................................... . 261
8.4. Variables estáticas ............................................................................................ . 268
8.5. Programas de varios archivos ......................................................................... . 272
8.6. Más sobre funciones de biblioteca ................................................................. . 282
9. Arrays ........· . ..................................................................................................................... . 299
9 .1. Definición de un array ..................................................................................... . 300
9.2. Procesamiento de un array .............................................................................. . 305
9 .3. Paso de arrays a funciones .............................................................................. . 308
9.4. Arrays multidimensionales .............................................................................. . 321
9.5. Arrays y cadenas de caracteres ....................................................................... . 328
CONTENIDO vii
10. Punteros ........................................................................................................................... 345
10.1. Conceptos básicos............................................................................................. 345
10.2. Declaración de punteros................................................................................... 349
10.3. Paso de punteros a una función....................................................................... 350
1O . 4. Punteros y arrays unidimensionales . .. . .. .. . .. .. . .. .. . .. .. . . .. . .. . .. .. .. .. .. .. . .. ... .... .. .. .. ... .. 3 5 8
10.5. Asignación dinámica de memoria................................................................... 363
10.6. Operaciones con punteros................................................................................ 365
10.7. Punteros y arrays multidimensionales ............................................................. 369
10.8. Arrays de punteros............................................................................................ 375
10.9. Paso de funciones a otras funciones................................................................ 388
10.10. Más sobre declaraciones de punteros.............................................................. 397
11. Estructuras y uniones.................................................................................................... 415
11. l. Definición de una estructura............................................................................ 415
11.2. Procesamiento de una estructura . .................................................................... 421
11.3. Tipos de datos definidos por el usuario ( typedef) .................................... 433
11.4. Estructuras y punteros ...................................................................................... 436
11. 5. Paso de estructuras a una función . .. . .. .. . ... . .. .. .. .. .. . ... ... ... .. . .. .. ... .. . .. .. . .. .. . . ... .. .. .. . 441
11.6. Estructuras autorreferenciadoras ..................................................................... 453
11.7. Uniones.............................................................................................................. 467
12. Archivos de datos ....................................... .................................................................... 489
12.1. Apertura y cierre de un archivo....................................................................... 490
12.2. Creación de un archivo..................................................................................... 492
12.3. Procesamiento de un archivo........................................................................... 499
12.4. Archivos sin formato ........................................................................................ 505
13. Programación a bajo nivel ....................... .................................................................... 519
13.1. Variables registro.............................................................................................. 519
13 .2. Operaciones a nivel de bits .............................................................................. 523
13.3. Campos de bits .................................................................................................. 535
14. Características adicionales de C ............. .................................................................... 553
14.1. Enumeraciones.................................................................................................. 553
14.2. Parámetros de la línea de órdenes................................................................... 559
14.3. Más sobre funciones de biblioteca.................................................................. 563
14.4. Macros................................................................................................................ 563
14.5. El preprocesador de C ...................................................................................... 573
Apéndice A Sistemas de representación de números ..................................................... 585
Apéndice B Secuencias de escape....................................................................................... 587
Apéndice C Resumen de operadores .. .. .... ... .. .. .. ... ... .. .. ... .. ... .. ... ... ... ... ... ... ... ..... .. .... .. ... ... ... . 589
Apéndice D Tipos de datos y reglas de conversión de datos......................................... 591
viii CONTENIDO
Apéndice E El conjunto de caracteres ASCII ................................................................. 593
Apéndice F Resumen de instrucciones de control . .. .. . .. . .. . .. .. ... .. .. . .. . .. . .. . .. . .. .. .. . . .. .. ... .. . .. . . 595
Apéndice G Caracteres de conversión más usados de scanf y printf .................... 597
Caracteres de conversión de scanf ............................................................................ 597
Caracteres de conversión de printf .......................................................................... 598
Indicadores ..................................................................................................................... 599
Apéndice H Funciones de biblioteca más usadas ............................................................ 601
Respuestas a problemas seleccionados................................................................................. 607
Índice.......................................................................................................................................... 649
Ejemplos completos de programas
A continuación se listan los ejemplos de programas según el orden en que aparecen en el texto.
Los ejemplos van desde los más sencillos a los de complejidad moderada. Se presentan varias
versiones de algunos de ellos, en especial de los más sencillos.
l. Área de un círculo - Ejemplos 1.6 - 1.13
2. Conversión de un carácter de minúscula a mayúscula - Ejemplos 3.31, 7.1
3. Conversión de texto en minúsculas a mayúsculas - Ejemplos 4.4, 6.9, 6.12, 6.16, 9.2
4. Lectura y escritura de una línea de texto - Ejemplos 4.19, 4.31
5. Calificaciones medias de los estudiantes - Ejemplo 4.32
6. Cálculo del interés compuesto - Ejemplos 5.1 - 5.4, 8.13
7. Errores sintácticos - Ejemplo 5 .5
8. Errores de ejecución (Raíces reales de una ecuación de segundo grado) - Ejemplo 5.6
9. Depuración de un programa - Ejemplo 5.7
10. Depuración con un depurador interactivo - Ejemplo 5.8
11. Generación de cantidades enteras consecutivas - Ejemplos 6.8, 6.11, 6.14, 6.15
12. Media de una lista de números - Ejemplos 6.10, 6.13, 6.17, 6.31
13. Repetición de la media de una lista de números - Ejemplo 6.18
14. Conversión de varias líneas de texto a mayúsculas - Ejemplos 6.19, 6.34
15. Codificación de una cadena de caracteres - Ejemplo 6.20
16. Cálculos repetidos del interés compuesto con detección de error - Ejemplo 6.21
17. Solución de una ecuación algebraica - Ejemplo 6.22
18. Cálculo de la depreciación - Ejemplos 6.26, 7.13
19. Búsqueda de palíndromos - Ejemplo 6.32
20. Mayor de tres cantidades enteras - Ejemplo 7.9
21. Cálculo de factoriales - Ejemplos 7.10, 7.14, 8.2
22. Simulación de un juego de azar («Shooting Craps») - Ejemplos 7.11, 8.9
23 Escritura inversa - Ejemplo 7.15
24. Las torres de Hanoi - Ejemplo 7.16
25. Longitud media de varias líneas de texto - Ejemplos 8.3, 8.5
26. Búsqueda de un máximo - Ejemplos 8.4, 8.11
27. Generación de números de Fibonacci - Ejemplos 8.7, 8.12, 13.2
28. Desviaciones respecto a la media - Ejemplos 9.8, 9.9
29. Reordenación de una lista de números - Ejemplos 9.13, 10.16
30. Un generador de «Pig Latín» - Ejemplo 9.14
31. Suma de dos tablas de números - Ejemplos 9.19, 10.22, 10.24
32. Reordenación de una lista de cadenas de caracteres - Ejemplos 9.20, 10.26
33. Análisis de una línea de texto - Ejemplo 10.8
34. Presentación del día del año - Ejemplo 10.28
35. Valor futuro de depósitos mensuales (cálculo de intereses compuestos) - Ejem
plos 10.30, 14.13
ix
X EJEMPLOS COMPLETOS DE PROGRAMA
36. Actualización de registros de clientes - Ejemplos 11.14, 11.28
3 7. Localización de registros de clientes - Ejemplo 11.26
38. Procesamiento de una lista enlazada - Ejemplo 11.32
39. Elevación de un número a una potencia - Ejemplos 11.37, 14.5
40. Creación de un archivo de datos (conversión de texto de minúsculas a mayúsculas) -Ejem-
plo 12.3
41. Lectura de un archivo de datos - Ejemplos 12.4, 14.9
42. Creación de un archivo que contiene registros de clientes - Ejemplo 12.5
43. Actualización de un archivo que contiene registros de clientes - Ejemplo 12.6
44. Creación de un archivo de datos sin formato que contiene registros de clientes - Ejem
plo 12.7
45. Actualización de un archivo de datos sin formato que contiene registros de clientes - Ejem
plo 12.8
46. Presentación de patrones de bits - Ejemplo 13 .16
47. Compresión de datos (almacenamiento de nombres y fechas de nacimiento) -Ejemplo 13.23