Vous êtes sur la page 1sur 7

PRLOGO A LA 2.

EDICIN

INTRODUCCIN
Bienvenido a Programacin en C, 2 edicin. El prlogo de la primera edicin se abra con el interrogante Por qu un libro de C al principio del siglo XXI? El libro efectivamente lo escribimos en el ao 2000 y
fue publicado en el ao 2001. En esta ocasin y cuatro aos despus, hemos escrito la nueva edicin en el
2004 y 2005, y se publicar en el 2005. Qu ha cambiado desde entonces en el mundo de la programacin? Realmente, poco y mucho. C sigue siendo el lenguaje ms utilizado para aprender fundamentos y
tcnicas de programacin tanto en la universidad como en los institutos tecnolgicos y centros de formacin profesional. C++ sigue reinando en el aprendizaje de la programacin orientada a objetos y Java con
C# se han erigido como los lenguajes por excelencia en el mundo profesional de programacin, ingeniera de software, ingeniera web, telecomunicaciones y en general, industria del software.
C es un lenguaje ideal para aprender programacin de computadoras. C es un lenguaje muy compacto
ya que su sintaxis es sencilla y fcil para aprender a escribir aplicaciones reales. Es tambin un lenguaje
muy potente ya que se utiliza mucho en programacin en todos los niveles, desde controladores de dispositivos y componentes de sistemas operativos hasta aplicaciones a gran escala. Existen compiladores de C
para cualquier entorno de programacin y de sistemas operativos, tales como Windows, Unix, Linux, Mac,
etc., de modo que cuando usted haya aprendido C estar en condiciones de programar en cualquier contexto y entorno actual. Tambin observar que C en una base excelente para continuar su formacin en programacin orientada a objetos con C++ y luego migrar a Java o C# en funcin del ambiente profesional en
que se desenvuelva..
Todas las carreras universitarias de Ciencias e Ingeniera, as como los estudios de Formacin Profesional, requieren un curso bsico de algoritmos y de programacin con un lenguaje potente y profesional pero
que sea simple y fcil de utilizar. C es idneo para aprender a programar directamente las tcnicas algortmicas y de programacin o bien en paralelo con asignaturas tales como Introduccin, Fundamentos o Metodologa de la Programacin cuando se utiliza un lenguaje algortmico o un lenguaje de programacin estructurada. C sigue siendo el lenguaje universal ms utilizado y recomendado en planes de estudio de universidades
y centros de formacin de todo el mundo. Organizaciones como ACM, IEEE, colegios profesionales, siguen
recomendando la necesidad del conocimiento en profundidad de tcnicas y de lenguajes de programacin
estructurada con el objetivo de acomodar la formacin del estudiante a la concepcin, diseo y construccin de algoritmos y de estructuras de datos. El conocimiento profundo de algoritmos unido a tcnicas fiables, rigurosas y eficientes de programacin preparan al estudiante o al autodidacta para un alto rendimiento
en programacin y para asumir los retos de la programacin orientada a objetos en una primera fase y las tcnicas y mtodos inherentes a ingeniera de software en otra fase ms avanzada.

XXmmProgramacin en C: Metodologa, algoritmos y estructura de datos

UN ENFOQUE CLSICO Y A LA VEZ INNOVADOR EN EL APRENDIZAJE DE C


La experiencia alcanzada con los varios aos de vida de la primera edicin de Programacin en C. Metodologa, algoritmos y estructuras de datos y su uso en facultades y escuelas de ingeniera, institutos tecnolgicos y centros de formacin profesional, nos ha llevado a considerar la necesidad de mantener el estilo de la primera edicin intentando aadir nuevas caractersticas que redundasen en el aprendizaje eficiente
de la programacin en C, no slo en el aspecto esttico del libro sino y fundamentalmente en su estructura docente. As pues, las caractersticas ms distintivas de esta nueva edicin son:
Cada captulo comienza con la enumeracin del contenido de cada captulo, una breve introduccin
que oriente al lector sobre los temas a tratar y una relacin de trminos y palabras clave que se introducirn como nuevos o bien se reiterar su uso por la importancia que pueda tener en el aprendizaje:
Ejemplos frecuentes para ayudar al aprendizaje.
Consejos tericos y prcticos A recordar
Consejos de programacin como ayuda al lector en su formacin en programacin
Sintaxis de las reglas gramaticales del lenguaje C
Ejecuciones de muestra de ejemplos y programas en C que permitan al lector habituarse en la depuracin y puesta a punto de sus programas
Resumen al final de cada captulo que facilite al lector la asimilacin de los conceptos ms importantes del mismo a modo de compendio y recordatorio terico-prctico.
Ejercicios y Problemas propuestos al lector en cada captulo, con el objetivo fundamental de evaluar y medir su progresin en el aprendizaje de la programacin en C, tanto en el diseo y construccin del programa fuente, sino probando su eficiencia compilando y poniendo a punto el programa
con el compilador que utilice en su centro acadmico en las prcticas de programacin en el laboratorio o en sus horas de estudio en casa.

DIFERENCIAS IMPORTANTES CON LA PRIMERA EDICIN


DE PROGRAMACIN EN C
El libro se ha revisado en su totalidad y se ha vuelto a escribir conservando gran parte del contenido inicial. Se ha corregido y depurado la teora, ejemplos y ejercicios, y se han incluido nuevos conceptos, ejemplos y ejercicios prcticos cuando se ha visto su necesidad desde el punto de vista docente y sobre todo en
proceso de aprendizaje.
Numerosos lectores, alumnos y colegas espaoles y latinoamericanos nos han sugerido mejoras, nos
han sealado erratas o incluso errores que tenamos en la primera edicin, pero sobre todo nos han propuesto incluyamos algunos temas no tratados en la primera edicin o bien ampliar algunos temas que estaban tratados pero no con extensin suficiente como el caso de la importante propiedad de la recursividad
en el mundo de la programacin profesional. Hemos tratado de incluir todas esas numerosas propuestas y,
naturalmente, sus consejos. Esperamos haber sabido interpretar todas estas consideraciones de nuestros
lectores y colegas, a los que desde ahora mismo deseamos agradecer su confianza en nuestra obra y su generosidad en la crtica de la primera edicin. Sus crticas constructivas nos han animado constantemente en
la escritura de esta segunda edicin.
Los captulos que se han escrito nuevos son: 8, Recursividad (en la primera edicin se incluan los
conceptos bsicos en el captulo de funciones); 10, Algoritmos de ordenacin y Bsqueda; 16, Organizacin de datos en un archivo y 17 Tipos abstractos de datos (TAD/Objetos). Otro cambio notable en la organizacin del libro se ha producido en los apndices. La incorporacin de los captulos anteriores a la segunda edicin, obligaba a un aumento considerable en el nmero total de pginas del libro
cosa que por muchas razones no desebamos, por lo que hemos optado por no incluir los apndices de
la 1 edicin e incluir slo algunos imprescindibles en la edicin en papel e incorporar los apndices en

Prlogo a la 2. edicinmmXXI

la pgina Web oficial del libro. Sin embargo, la autorizacin de McGraw-Hill permite que el lector de
esta segunda edicin pueda tener todos los apndices de la primera edicin, as como alguno nuevo ms,
en la direccin oficial de Internet del libro (http://www.mhe.es/joyanes) donde podr consultar todos
ellos y descargarse en su computadora aquellos que desee y necesite para su aprendizaje y formacin
actual o futura.
Tambin se incluir en la pgina oficial del libro adems de los apndices, material didctico complementario de los autores con normas, reglas, ejercicios y problemas resueltos, apuntes de clase, bibliografa actualizada, sitios web de referencia en programacin, etc. que ayuden de forma gradual el aprendizaje del lector en su trayectoria profesional de programador o bien en sus estudios de informtica o de
sistemas computacionales, o en las diferentes ingenieras y reas cientficas.

LIBRO COMPLEMENTARIO DE LA SEGUNDA EDICIN


DE PROGRAMACIN EN C
Esta segunda edicin al igual que la primera edicin puede ser estudiada o leda en paralelo con la obra
Programacin en C. Libro de Problemas, de los autores de esta obra y de los profesores Andrs Castillo y
Lucas Snchez, editada por McGraw-Hill y que es una coleccin completa de ejercicios y problemas de
programacin. Pensando en esta nueva edicin los cuatro autores anteriores hemos escrito un nuevo libro
Problemas de C. en la coleccin Schaum de McGraw-Hill eminentemente terico-prctico como son todos
los pertenecientes a esta coleccin con el objetivo de ayudar a los lectores a superar sus exmenes y pruebas prcticas y mejorar su aprendizaje, que si bien tiene un carcter totalmente autnomo, se ha concebido y escrito de modo que propone y resuelve ejercicios y problemas propuestos en la segunda edicin con
una temtica y contenido similar.
Cualquiera de ambos libros puede ayudar al lector interesado en una formacin complementaria totalmente prctica y paralela al contenido de esta segunda edicin. De igual forma en la pgina Web oficial de
McGraw-Hill, el lector podr encontrar numerosos ejercicios y problemas propuestos y resueltos de programacin en C (http://www.mhe.es/joyanes)

QU NECESITA PARA UTILIZAR ESTE LIBRO?


Programacin en C, 2 edicin, est diseado para ensear mtodos de escritura de programas tiles tan
rpido y fcil como sea posible, aprendiendo a la par tanto la sintaxis y funcionamiento del lenguaje de programacin como las tcnicas de programacin y los fundamentos de construccin de algoritmos bsicos.
El contenido se ha escrito pensando en la posibilidad de que el lector sea:
Una persona novata en la programacin que desea aprender acerca de la programacin y escritura de
programas en C desde el principio.
Una persona con conocimientos bsicos de programacin que ha seguido cursos de iniciacin en
algoritmos o en lenguajes clsicos como BASIC o PASCAL o bien C++ o Java.
El libro es eminentemente didctico para enseanza reglada de la programacin de computadoras, pero
no presupone ningn conocimiento previo de programacin , por lo que puede ser tambin utilizado por
lectores autodidactas con o sin formacin en informtica o en ciencias computacionales.
Para utilizar este libro y obtener el mximo rendimiento. Se necesitar una computadora con un compilador C, una biblioteca instalada de modo que se puedan ejecutar los ejemplos del libro y un editor de
texto para preparar sus archivos de cdigo fuente. Existen numerosos compiladores de C en el mercado y
tambin numerosas versiones shareware (libres de costes) disponibles en Internet. Idealmente., se debe elegir un compilador que sea compatible con la versin estndar de C del American Nacional Standards Institute (ANSI) que es la versin empleada en la escritura de este libro. La mayora de los actuales compila-

XXIImmProgramacin en C: Metodologa, algoritmos y estructura de datos


dores disponibles de C++ , comerciales o de dominio pblico, soportan C, por lo que tal vez sta pueda ser
una opcin muy recomendable.
Usted puede utilizar cualquier editor de texto, tales como Notepad o Vi, para crear sus archivos de programas fuente, aunque ser mucho mejor utilizar un editor especfico para editar cdigo C, como los que
suelen venir con los entornos integrados de desarrollo bien para Windows bien para Linux. Sin embargo,
no deber utilizar un procesador de textos, tipo Microsoft Word, ya que normalmente los procesadores de
texto o de tratamiento de textos comerciales, incrustan o embeben cdigos de formatos en el texto que
no sern entendidos por su compilador.
En cualquier forma si usted sigue un curso reglado, el mejor mtodo para estudiar este libro es seguir
los consejos de su maestro y profesor tanto para su formacin terica como para su formacin prctica. Si
usted es un autodidacta o estudia de modo autnomo, la recomendacin entonces ser que compile, ejecute y depure de errores sus programas, tanto los propuestos en el libro, como los que usted disee, a medida que vaya leyendo el libro, tratando de entender la lgica del algoritmo y la sintaxis del lenguaje en cada
ejercicio que realice.

CMO EST ORGANIZADO EL LIBRO?


Todos los captulos siguen una estructura similar que respeta el formato de la primera edicin. As, cada
captulo comienza con un extracto del contenido, una breve introduccin al captulo y una lista de los
conceptos y trminos ms importantes del captulo. La descripcin terica y prctica se acompaa de
numerosos ejemplos y ejercicios prcticos con el objetivo fundamental de que el lector/alumno vaya
aprendiendo a la par que sigue y estudia su contenido. A continuacin se incluye un resumen con un
recordatorio de los conceptos tericos y/o prcticos ms importantes del captulo. Por ltimo se incluyen una serie de descripciones de ejercicios de nivel de iniciacin y medio, junto con otra lista de enunciados de problemas propuestos, con el objetivo fundamental que el lector/alumno practique y vea la
progresin realizada con el seguimiento del libro as como de sus clases terico-prcticas en su centro
de enseanza.
El libro se ha dividido en tres partes que buscan facilitar la lectura y estudio por parte del lector/alumno o bien la organizacin del profesor o maestro para la imparticin de sus clases, de modo que pueda organizarse sus clases en la manera que mejor considere para conseguir la mxima eficacia y el objetivo final
de un aprendizaje correcto y el dominio de la programacin en C tanto a nivel de iniciacin como a nivel
medio, que le faculten para iniciar su profesin de programador de C o bien pasar a cursos de nivel avanzado de programacin en C o inclusive de programacin de sistemas. La parte I Metodologa de la programacin es una introduccin a las computadoras, a los lenguajes de programacin y a las tcnicas y
herramientas tpicas de programacin con independencia del lenguaje de programacin utilizado. La parte II Fundamentos de algoritmos y programacin en C es un primer curso de introduccin a la programacin de computadoras utilizando el lenguaje C; en general, este curso ser similar a cualquier curso de
Introduccin a la programacin, Metodologa de la Programacin o Fundamentos de Programacin con
C como herramienta de programacin;, inclusive no le ser difcil su adaptacin a cualquier lenguaje de
programacin algortmico con unas reglas sencillas de traduccin de sintaxis entre lenguajes. La parte III
Estructura de Datos, es un curso de nivel medio sobre un tema tan importante en la programacin como
es la organizacin de los datos en estructuras de datos y de la informacin; esta parte se debera estudiar
a continuacin de la primera parte, aunque el orden de los temas puede quedar al arbitrio del lector y o del
profesor y maestro; en cualquier forma constituyen temas avanzados en C y son requisito imprescindible
para la programacin profesional en C; en esta parte se estudia tambin el concepto de Tipos Abstractos de
Datos (TAD, ADT en ingls, Abstract Data Type) y su implementacin en C que ser la base para el estudio posterior de la programacin orientada a objetos a nivel terico y posteriormente prctico con lenguajes como C++, C# o Java.

Prlogo a la 2. edicinmmXXIII

Captulo 1.

Captulo 2.

Captulo 3.

Captulo 4.

Captulo 5.

Captulo 6.

Captulo 7.

Captulo 8.

Captulo 9.
Captulo 10.

Introduccin a las computadoras y a los lenguajes de programacin. Explica y describe los


conceptos fundamentales de la computacin y de los lenguajes de programacin. El conocimiento completo del contenido del captulo no es requisito imprescindible para el conocimiento y aprendizaje de los restantes captulos aunque si es fundamental en su formacin de programacin. Por estas circunstancias el lector/alumno puede optar por su estudio en una sola vez
o bien graduar el aprendizaje a lo largo de todo su curso de programacin. Siempre se cuenta
tambin con el profesor y maestro que podr orientar al alumno en su progresin docente. Para
los lectores que no hayan recibido ningn curso de introduccin a las computadoras o a la informtica les recomendamos su lectura antes de pasar al siguiente captulo y luego una relectura
en el momento y forma que ellos mismos consideren. Este captulo ha sido actualizado totalmente respecto a la primera edicin y se han introducido tanto los conceptos fundamentales y
genricos tradicionales como las ltimas innovaciones tecnolgicas que ms afectan al mundo
de la programacin.
Metodologa de la programacin y desarrollo de software. Se introduce al lector en los conceptos fundamentales de algoritmos y sus herramientas de representacin. Asimismo, se describen los tipos clsicos de programacin con especial nfasis en la programacin estructurada soporte del lenguaje C. Una breve introduccin al ciclo de vida del software y a los
mtodos formales de verificacin de programas pretende que el lector se mentalice desde el
comienzo de su formacin en programacin en la importancia de estos temas en el desarrollo de software fiable y eficiente.
El lenguaje C. Elementos bsicos. Introduce a la estructura y los componentes principales de un programa en C. Ensea los significados de los elementos fundamentales de
todo programa, tales como datos, constantes, variables y las operaciones bsicas de entrada/salida.
Operadores y expresiones. Se describe el uso de los operadores aritmticos, relacionales y
lgicos para la manipulacin de operaciones y expresiones en C. Se estudian tambin operadores especiales y conversiones de tipos, junto con reglas de prioridad y asociatividad de
los operadores en las expresiones y operaciones matemticas.
Estructuras de seleccin: sentencias if y switch. Introduce a las sentencias de seleccin
bsicas y fundamentales en cualquier programa. Se examina el uso de sentencias compuestas
o bloques as como el uso de operadores condicionales y evaluacin de expresiones lgicas.
Estructuras de control: bucles. Se aprende el concepto de bucle o lazo y el modo de controlar la ejecucin de un programa mediante las sentencias for, while y do-while. Tambin se explica el concepto de anidamiento de bucles y bucles vacos; se proporcionan ejemplos tiles para el diseo eficiente de bucles.
Funciones. Examina las funciones en C, una parte importante de la programacin. Se describe
el concepto de programacin estructurada un mtodo de diseo de programas que enfatiza en
el enfoque descendente para la resolucin de problemas mediante la descomposicin de un problema grande en problemas de menor nivel que se implementan a su vez con funciones.
Recursividad. La recursividad o propiedad de una funcin o expresin de llamarse a s misma es una de las tcnicas ms importantes en la construccin de algoritmos. Por esta razn
se dedica un captulo completo al aprendizaje de las funciones recursivas. En la primera edicin este concepto se estudiaba dentro del captulo de funciones.
Arrays (listas y tablas). Explica un mtodo sencillo pero potente de almacenamiento de datos.
Se aprende como agrupar datos similares en arrays o arreglos (listas y tablas) numricas
Algoritmos de ordenacin y bsqueda.. Ensea los mtodos para ordenar listas y tablas, as
cmo bsqueda de datos en listas y tablas. Se estudian los algoritmos clsicos ms sencillos
y eficientes tanto de ordenacin como de bsqueda.

XXIVmmProgramacin en C: Metodologa, algoritmos y estructura de datos


Captulo 11 Estructuras y uniones. Se describen conceptos bsicos de estructuras, uniones y enumeraciones: declaracin, definicin, iniciacin, uso y tamao. Las operaciones fundamentales de
acceso a estructuras, arrays de estructuras y estructuras anidadas se analizan tambin en este
captulo. En el captulo se muestra de modo prctico como usar estructuras y uniones para
conseguir las necesidades del programa; se explican las diferencias entre estructuras y uniones, as como el uso de la palabra reservada typedef.
Captulo 12. Punteros (Apuntadores). Presenta una de las caractersticas ms potentes y eficientes del
lenguaje C, los punteros. Este captulo proporciona explicacin detallada de los punteros,
arrays de punteros, punteros de cadena, aritmtica de punteros, punteros constantes, punteros como argumentos de funciones, punteros a funciones y a estructuras. De un modo prctico aprende el modo de utilizar punteros a punteros y cmo se pueden utilizar los arrays de
punteros para manipular las cadenas, que se estudiarn en profundidad en el captulo 14.
Captulo 13. Asignacin dinmica de memoria. Se describe la gestin dinmica de la memoria y las funciones asociadas para esas tareas: alloc( ), free( ), calloc( ) y realloc( ). Se proporcionan reglas de funcionamiento de esas funciones y reglas para asignacin de memoria.
Captulo 14. Cadenas. Se describe el concepto de cadena (string) as como las relaciones entre punteros,
arrays y cadenas en C. Se introducen conceptos bsicos de manipulacin de cadenas junto con
operaciones bsicas tales como longitud, concatenacin, comparacin, conversin y bsqueda
de caracteres y cadenas. Se describen las funciones ms notables de la biblioteca string.h.
Captulo 15. Entrada y salida de archivos. Se estudia el concepto de flujo (stream) y los diferentes mtodos de apertura de archivos, junto con los conceptos de archivos binarios y funciones para
el acceso aleatorio. Muestra de un modo prctico como C utiliza los flujos, examina los flujos predefinidos y el modo prctico de trabajar con la pantalla, la impresora y el teclado.
Captulo 16. Organizacin de datos en un archivo. Los conceptos clsicos de registros y organizacin
de archivos se estudian en el captulo. Dos tipos de archivo especiales tales como los secuenciales indexados y con direccionamiento hash son motivo de estudio especfico. Por ltimo
se analizan mtodos de ordenacin de archivo tanto externa como por mezcla directa.
Captulo 17 Tipos de datos (TAD/Objetos). La programacin orientada a objetos es el paradigma ms
importante despus del paradigma estructurado. El rol de la abstraccin, la modularidad y
los tipos abstractos de datos son analizados en este captulo. Se desciben la especificacin e
implementacin de tipos abstractos de datos en C como primer nivel de objetos.
Captulo 18. Listas enlazadas. Una lista enlazada es una estructura de datos que mantiene una coleccin
de elementos, pero el nmero de ellos no se conoce por anticipado o vara en un rango amplio.,
La lista enlazada se compone de elementos que contienen un valor y un puntero. El captulo describe los fundamentos tericos, tipos de listas y operaciones que se pueden realizar en
la lista enlazada.
Captulo 19. Pilas y colas. Las estructuras de datos ms utilizadas desde el punto de vista de abstraccin
e implementacin son las pilas y colas. Su estructura, diseo y manipulacin de los algoritmos bsicos se explican en el captulo.
Captulo 20 rboles. Las estructuras de datos no lineales y dinmicas son muy utilizadas en programacin. Los rboles son una de las estructuras ms conocidas en algoritmia y en programacin
ya que son la base para las tcnicas de programacin avanzada.

Prlogo a la 2. edicinmmXXV

APNDICES
A Compilacin de programas C en Windows
B Bibliografa y recursos de programacin

APNDICES DISPONIBLES EN LA WEB


W1
W2
W3
W4
W5
W6
W7
W8
W9

Cdigo ASCII
Palabras reservadas C/C++
Lenguaje ANSI C. Gua de referencia
Gua de sintaxis ANSI/ISO C++
Biblioteca de funciones ANSI C
Recursos de C (libros, revistas, web)
C versus C++
Prioridad de operadores C/C++
Lenguaje algortmico UPSAM 2.0

Vous aimerez peut-être aussi