You are on page 1of 735
Aprendiendo C en 21 Dias Trata el C de ANSI, y es compatible con todos los Ce econ Ow | OTR CU CR Recut) instantanea pone la informacion al alcance CSTR COON Tee RSet ig eRe CURLED PRENTICE tt DIA 1 DIA 2 DIA 4 DIA 5. DIA 6 DIA 7 Comience con Aprenda las par- Use los operado- Llegue al fondo El control del Aqui se tratan las un dia para acos- tes desu primer —_claraciones de los res para manipu- de los programas programa es ficil _funciones tumbrarse. Insta- programaenC, — diversos tips dear las de C con funcio- con los tres printf), puts() y lesucompilador linea por linea, y datos y constan-_expresiones de C._nes y programa-—enunciados de scanf{): la entra- ysu editor y tra- la manerade do- tes. Los progra- _y haga su prime- cin ciclo del C: el ci- day salida de baje con ellos. cumentar sus mas de C ra prueba de estructurada. Pa- clo for, el ciclo programa ser iEn s6lo tres se- programas con _—_guardan datos en control de pro-_—se mas tiempo while yel ciclo. muy facil a partir manas usted ser’ lineas de comen- variables y cons-__grama con el viendo este ma- —_do...while. de hoy. un experto en C!__tarios. tantes. enunciado if. terial. DIA 8 DIA 9 DIA 10 DIA 11 DIA 12 DIA 13 DIA 14 Aprendaaagru- Para aprender En Cse guardan—_Aprenda otro Entienda cabal. Vuelvaaverel —__Aprenda todo lo par datos simila- tiene que enten- palabras y frases método de agru-- mente el alcance control de pro- _necesario acerca res con arreglos der los apunta-__en cadenas. par variables rela~ de las variables. grama. Aprenda de los cinco flu- numéricos. dores, la clave de Aprenda los pun- _ cionadas: las Qué son una trucos de progra- _ jos predefinidos Duerma muy C. Tomese su tos especificos de estructuras. Se global y una lo-—macién avanza-_—_ de C-y sus fan- bien estanoche tiempo con esta lascadenasylo —tratantemasde cal. Eselmo- —_—_ dos, tales como _ciones. Hay mu- porque manana le basico del mane-_estructuras tanto. mento paralos __el enunciado cho que sera un gran dia, jode memoria. _basicos como detalles. switch y los ci- aprender avanzados. clos infinitos. DIA 15 DIA 16 DIA 17 DIA 18 DIA 19 DIA 20 DIA 21 Apuntadores: la Aprenda todo lo Aprenda las fun- Funciones: la Profundice en la Amarre hoy al-—_jHagamos fiest consecuencia. __necesario acerca ciones para com- _consecuencia. _ biblioteca de gunos cabos Todo lo que nos Este es un dia de de los archivos parar, convertir y Explore temas _funciones, E sueltosy reciba falta son los ar- retos. Hoy trata- de disco en un —_coneatenar cade-_avanzados de plore las funcio- una segunda lec-_chivos de enca- remos algunas. solo dia. Los nas cuando se funciones, inclui- nes matemiaticas, cién sobre el ma- _ bezado formas complejas programas més trata la manipu- da la interaccion_—_ de tiempo y de nejo de directivas de! de uso de los litiles que se es-_lacién de cade- de apuntadores y manejo de erro- memoria. ;Casi__ preprocesador. apuntadores. criben emplean nas. funciones. res, ;S6lo quedan acabamos Luego, ser u arel dos dias! ted un experto co, en C. ;Felicida- de Cémo usar este libro Tal como se puede suponer porel titulo, este libro ha sido disefiado de tal forma que usted pueda aprender por si mismo el lenguaje de programacién C en 21 dfas. Dentro de los diversos lenguajes de programacién disponibles, cada vez més programadores profesionales escogen al C debido a su poder y flexibilidad. Por las razones que mencionamosenel Dia 1, usted nose haequivocadoal seleccionaral C como su lenguaje de programacién. Pensamos que ha hecho una decisiGn atinada seleccionando este libro como su medio para aprender el C. Aunque hay muchos sobre C, creemos que este libro presenta al C ensusecuencia més l6gica y facil de aprender. Lohemos diseftado pensando en que usted trabaje los capitulos en orden, diariamente. Los capftulos posteriores se apoyan en el material presentado en los primeros. Nosuponemos que usted tenga experiencia anterior de programacién, aunque tenerla con otro lenguaje, como BASIC, puede ayudarle a que el aprendizaje sea més répido. Tampoco hacemos hipétesis acerca de su computadora © compilador. Este libro se concentra sobre el aprendizaje del C sin importar el compilador. Caracteristicas especiales de este libro E] libro contiene algunas caracteristicas especiales para ayudarle en su aprendizaje del C, Cuadros de sintaxis le muestran c6mo usar un concepto especifico del C. Cada cuadro proporciona ejemplos concretos y unaexplicacién completa del comando 0 concepto del C. Para ambientarse al estilo de los cuadros de sintaxis, véase el siguiente ejemplo. (No trate de entender el material, ya que todavia no ha llegado al Dia 1.) La funcién printf0) Hinclude print£( cadena de formato[,argumentos,...}); print é() es una funci6n que acepta una serie de argumentos, donde a cada uno se le aplica un especificador de conversion en la cadena de formateo dada. print () impri- me la informaci6n formateada en el dispositivo estandar de salida, que, por lo general, es la pantalla. Cuando se usa print £ () se necesita incluir el archivo de encabezado de Ja entrada/salida esténdar, STDIO.H. La cadena’ de formato es imprescindible. Sin embargo, los argumentos son opcio- nales. Para cada argumento debe haber un especificador de conversiGn, La tabla 7.2 lista los especificadores de conversin mas comunes. La cadena de formato también puede contener secuencias de escape. La tabla 7.1 lista las mAs usadas. A continuacién se presentan ejemplos de Hamadas a print £() y su salida: Ejemplo 1 #include main() ‘ print£( *;8ste es un ejemplo de algo impreso!*); ) Despliega jEste es un ejemplo de algo impreso! Ejemplo 2 printf( “Esto imprime un carécter, $c\n un nimero, td\n un punto flotante, Ser, ‘2", 123, 456.789 1; Despliega sto imprine un carécter, 2 un némero, 123 un punto flotante, 456.789 Otra caracteristica de este libro son los cuadros de DEBE/NO DEBE, los cuales dan indicaciones sobre lo que hay que hacer y lo que no hay que hacer. Proporcionamos numerosos ejemplos con explicaciones para ayudarle a aprender la manera de programar, Cada dia termina con una seccién, que contiene respuestas a preguntas comunes relacionadas con el material del dia. También hay un taller al final de cada dfa. El taller contiene cuestionarios y ejercicios. El cuestionario prueba su conocimiento de los conceptos que han sido presentados en ese dfa. Si desea revisar las respuestas, o esta confundido, éstas se encuentran en el apéndice G, “Respuestas”. Sin embargo, usted no aprenderé C solamente leyendo el libro. Si quiere ser un programador, tiene que escribir programas. A continuaciOn de cada juego de preguntas del cuestionario se encuentraun juego deejercicios. Lerecomendamos que trate de hacer cada uno de ellos. Escribir c6digo de C es la mejor manera de aprender el lenguaje de programacién C. Consideramos que los ejercicios de BUSQUEDA DE ERRORES son los més benéficos. Estos son listados de cédigo que contienen problemas comunes. Bs su tarea localizar y corregit los errores. Conforme avance por el libro, algunas de las respuestas a los ejercicios tenderdn a hacerse largas. Otros ejercicios tienen varias respuestas posibles. A consecuencia de esto, los tiltimos capftulos tal vez no den respuestas para todos los ejercicios. Haciendo un mejor libro Nadaes perfecto, pero nos esforzamos poralcanzar la perfecci6n. Esta edicién bestseller tiene algunas nuevas caracteristicas que vale la pena tener en cuenta, Si usted tiene preguntas especificas acerca de los diferentes compiladores de C, pase al apéndice H. Ahiencontrarélistados de las principales caracterfsticas delos compiladores y sugerencias para la instalacién, Esperamos que esto le sea de ayuda para elegir el compilador que se adapte mejor a sus necesidades. Un concepto del C que no fue tratado en la primera edicién fueron las uniones. Esta edicién tiene una secci6n adicional en el capitulo 11, donde se detallan las uniones. Asegtirese de resolver completamente el nuevo ejercicio en el taller del capitulo 11 que trata este tema. Al final de cada semana usted encontraré “La revisién de la semana”. Esta seccién contiene un amplio programa que usa varios de los conceptos tratados durante la semana anterior. Muchas de las lineas del programa tienen nimeros ala izquierda de los mimeros de litiea. Estos niimeros identifican el capitulo donde se trata el tema de esa Iinea. Si cualquiera de los conceptos lo confunde, regrese a ese capitulo. Aun cuando usted haya dominado los conceptos de C, este libro seré una referencia adecuada, y la tarjeta desprendible, en la parte inicial de este libro, es un recurso adicional para usted. La tarjeta, que contiene informacién por ambos lados, sera un ttil material de consulta de escritorio al estar escribiendo sus programas de C. Convenciones usadas en este libro Este libro usa diferentes tipos de letra para ayudarle a distinguir entre el c6digo de C y elespafiol normal y aidentificar conceptosimportantes. El cédigo actual de Cesté escrito en.un tipo de letra especial nonoespaciado. Placeholders, es decir, los términos usados para representar Jo que de hecho se tiene que teclear en el c6digo, estan escritos en un tipo cursivo monoespaciado. Los términos nuevos o importantes estén escritos en cursivas. perro) 1 Educac MEXICO + ARGENTINA + BRASIL + COLOMBIA « COSTA RICA + CHILE ESPANA + GUATEMALA + PERU * PUERTO RICO « VENEZUELA APRENDIENDO C EN 21 DIAS traducido del inglés de la obra: TEACH YOURSELF C IN 21 DAYS, ‘Autorized translation form the English language edition published by SAMS PUBLISHING Copyright © 1994 llrightsreserved. No part ofthis book may be reproduced or transmitted in any form orby any means, electronic or mechanical, including photocopying recording or by any information storage retrieval system, without permission in writing from the Publisher. ‘Spanish language edition published by Prentice Hall Hispanoamericana, S.A. Copyright © 1994 ‘Traduccién autorizada de la edicin en inglés publicada por SAMS PUBLISHING Copyright © 1994 ‘Todos los derechos reservados. Ninguna parte de este libro puede reproducirse bajo ninguna forma o por ningsn medio, lectrénico ni mecénico, incluyendo fotocopiado y grabacin, ni por ningdn sistema de almacenamiento y recuperacién de informaci6n, sin permiso por escrito del Eitor Edlicin en espatiol publicada por Prentice Hall Hispanoamericana, S.A. Derechos Reservados © 1994 Calle 4 NF 25.2 piso Face: nd. lee Blanco, Naueagan do Juez, E80, de México, ISBN 968-880-444-4 Miembro de la C&mara Nacional dela Industria Editorial, Reg. Nim. 1524 (Original English Language Edition Published by Copyright © 1994 By SAMS PUBLISHING AIL Rights Reserved ISBN 0.672-30448-1 Impreso en México/Printed in Mexico i Editor Richard K. Swadley Editor adjunto Jordan Gold Gerente de adquisiciones Stacy Hiquet Editor de adquisiciones Gregory Croy Editor de elaboracién Dean Miller Redactores Keith Davenport Katherine Stuart Ewing Fran Hatton. Tad Ringo Formador Pat Whitmer Asistente editorial Sharon Cox Revisores técnicos Timothy C. Moore Scott Parker Gerente de comercializacién Greg Wiegand Disefiador de portada Dan Armstrong Director de produccién y manufactura Jeff Valler Jefe de impresién Kelli Widdifield Disefiadora del libro Michele Laseau Analista de produccién ‘Mary Beth Wakefield Coordinadora de correccién. e indizacién Joelynn Gifford Especialistas de imagenes y gréficos Dennis Sheehan Sue VandeWalle Produccién Ayrika Bryant Rich Evers Mitzi Gianakos Dennis Clay Hager Juli Pavey Angela M. Pozdol Linda Quigley Beth Rago Michelle M. Self Dennis Wesner Alyssa Yesh Indizadores John Sleeva Suzzane Snyder Resumen del contenido La semana 1 de un vistazo Comienzo Los componentes de un programa C... Variables y constantes numéricas .. Enunciados, expresiones y operadores Funciones: lo bisico.... aAuhwne Control basico del programa 7 Entrada/salida bésica Revisién de la semana 1 La semana 2 de un vistazo 8 — Arreglos numéricos 9 Apuntadores 10 Caracteres y cadenmas 1 Estructuras “ 12 Alcance de las variables .. 13 Més sobre el control de programa... 14 Trabajando con la pantalla, la impresora y el teclado ... Revisién de la semana 2 379 La semana 3 de un vistazo 15 Més sobre apuntadores 16 Uso de archivos de disco, 391 _ 425 463 495 17 Manipulacién de cadenas... 18 (Cémo obtener ms de. las funciones 19 Exploracién de la biblioteca de funciones eaves SES 20 Otras funciones - eee S41 21 — Cémo aprovechar las directivas del preprocesador y més... 563 Revisién de la semana 3 585 Apéndices 595 599 A Tabla de caracteres ASCII... B Palabras reservadas del C . Indice moanmoa Precedencia de operadores en C Notacién binaria y hexadecimal Prototipos de funcién y archivos de encabezado . Funciones comunes en orden alfabético Respuestas .. Puntos especificos de los compiladores Contenido La semana de un vistazo id 1 Comienzo .. Una breve historia del lenguaje C {Por qué usar C? Preparacién para la programacién . El ciclo de desarrollo del programa Creacién del cédigo fuente .. Compilacién del cédigo fuente Enlazar para crear un archivo ejecutable .. Completando el ciclo de desarrollo El primer programa en C... Tecleo y compilacién de HELLO. Resumen . 3 Preguntas y respuesta Los componentes de un programa C .. Un programa corto en C Los componentes de un programa... La funcién main() (Iineas 5-18).. La directiva #include (linea 2) Definicién de variables (Iinea 3) Prototipo de funcién (linea 4) Enunciados del programa (lineas 8, 9, 12, 13, 16, 17, 23) .. Definici6n de funcién (lineas 21-24). Comentarios del programa (lineas 1, 7, 11, 15, 20). Llaves (Iineas 6, 18, 22, 24) Ejecucién del programa Una nota sobre la precisin Revisin de las partes de un programa 28 Resumen . 30 Preguntas y respuesta: Taller Cuestionari Ejercicios .. Variables y constantes numéricas Memoria de la computadora.. Variables... xiv Aprendiendo C en 21 dias Nombres de variabl . Tipos de variables numéricas Declaracién de variables La palabra clave typedef. Inicializacién de variables numéricas Constantes .. Constantes literales Constantes simb6licas Resumen Preguntas y respuestas Taller .. Cuestionario Ejercicios . Enunciados, expresiones y operadores Enunciados .... Enunciados y el espacio en blanco Enunciados compuestos Expresiones Expresiones simples... Expresiones complejas.. Operadores El operador de asignacién Operadores matemitico: Precedencia de operadores y los paréntesis Orden para la evaluacién de subexpresione: Operadores relacionales El enunciado if. Evaluacién de expresiones relacionales Precedencia de los operadores relacionales . Operadores I6gicos Mis sobre valores cierto/falso Precedencia de los operadores Iégicos Operadores de asignacién compuestos El operador condicional El operador coma... Resumen .. Preguntas y respuestas Taller .. ; Cuestionario Ejercicios Funciones: lo basico.. {Qué es una funcién? La definici6n de una funcién La ilustraci6n de una funcién La manera en que trabaja una funci6n ... Las funciones y la programacién estructurada, Las ventajas de la programaci6n estructurada La planeacién de un programa estructurado El enfoque descendente Escritura de una funcién. El encabezado de la funcién El cuerpo de la funcién El prototipo de la funcién Paso de argumentos a una funcién . Llamado de funciones Recursién .. {Dénde se ponen las funciones’ Resumen Preguntas y respuest Taller . 4 Cuestionario Ejercicios .. 6 — Control bisico del programa Arreglos: lo basico Control de la ejecucién del programa El enunciado for.. Enunciados for anidados El enunciado while . Enunciados while anidado: El ciclo do...while Ciclos anidados. Resumen ... Preguntas y respuestas. Taller - Cuestionario Ejercicios 7 Entradalsalida bésica Desplegado de la informacién en la pantalla La funeién printf{) ss. Desplegado de mensajes con puts() Entrada de datos numéricos con scanfi) Resumen Preguntas y respuestas Taller Cuestionario . Ejercicios .. Revisién de la semana xv xvi Aprendiendo C en 21 dias La semana de un vistazo 167 8 10 169 170 170 175 176 178 182 184 185 186 186 186 189 190 190 191 192 192 192 193 195 197 197 198 Arreglos numéricos {Qué es un arreglo? ‘Arreglos de una sola dimension Arreglos multidimensionales .. Denominacién y declaracién de arreglos .. Inicializacién de arreglos Tamafio maximo del arregl Resumen .. Preguntas y respuesta Taller Cuestionario Ejercicios Apuntadore {Qué es un apuntador? . La memoria de la computadora Creacién de un apuntador .. Los apuntadores y las variables simples Declaracién de apuntadores Inicializacién de apuntadores Uso de apuntadores... Los apuntadores y los tipos de variable Los apuntadores y los atregl0s ...... El nombre del arreglo como un apuntador .. Almacenamiento de elementos de arregl Aritmética de apuntadores .. Precauciones con los apuntadores.. Notaci6n de subindices de arreglo y apuntador Paso de arreglos a funciones Resumen. Preguntas y ‘respuestas Taller Cucstionario 204 205 206 210 211 211 212 Ejercicios 212 Caracteres y cadenas.. 215 EI tipo de dato char 216 Uso de variables de cardcter .. Uso de cadenas ... Arreglos de caracteres Inicializacién de arreglos de caracteres..... Cadenas y apuntadores . Cadenas sin arreglos... AsignaciGn de espacio para la cadena en la compilaci6n.. 217 219 219 220 221 221 222 11 12 La funcién matloc() .. Desplegado de cadenas y caracteres La funcién puts() La funcién printf) .. Lectura de cadenas desde el teclado .... Entrada de cadenas con la funciGn gets() - Entrada de cadenas con la funcién scanf{) Resumen . a Preguntas y respuestas . Taller Cuestionario Ejercicios Estructuras Estructuras simples Definicién y declaracién de estructuras Acceso de los miembros de la estructura . Estructuras més complejas Estructuras que contienen estructuras Estructuras que contienen arreglos .. Arreglos de estructuras Inicializacién de estructuras Estructuras y apuntadores Apuntadores como miembros de estructuras Apuntadores a estructura: Apuntadores y arreglos de estructuras Paso de estructuras como argumentos a funciones Uniones.. Definici6n, declaracién e inicializacién de uniones Acceso de miembros de la unin .. Listas encadenadas...... ' La organizacién de una lista encadenada La funcién malloc() .... Implementacién de una lista encadenada typedef y las estructuras Resumen .... Preguntas y respuestas Taller Cuestionario Ejercicios Alcance de las variables ..... {Qué es el alcance? Una demostracién del alcance {Por qué es importante el alcance? xvii a Aprendiendo C en 21 dias 13 14 xviii Variables externas ... Alcance de las variables externas Cuéndo usar variables externas La palabra clave extern. Variables locales .... ‘ Variables estdticas versus automiticas .... El alcance de los pardmetros de la funci6n Variables estéticas externas .. Variables de registro . Variables locales y la funcién main() .. {Qué clase de almacenamiento se debe usar? Variables locales y bloque: Resumen .. Preguntas y respuesta: Taller .. Cuestionario Ejercicios ... Ms sobre el control de programa ‘Terminacién anticipada de ciclos El enunciado break El enunciado continu El enunciado got Ciclos infinitos El enunciado switch... Terminacién del programa La funcién exit() La funcién atexit() (sdlo para el Ejecucién de comandos del sistema operativo en un programa Resumen Preguntas yrespuesias. Taller Cuestionario Ejercicios .. ‘Trabajando con la pantalla, la impresora y el teclado Los flujos y el C {Qué es exactamente la {Qué es un flujo? ...... ” Flujos de texto contra flujos binarios Los flujos predefinidos .. Funciones de flujo del C. Un ejemplo... Aceptando entrada del teclado ... Entrada de caracteres .. Entrada formateada.. Revisién de la semana Salida a pantalla Salida de caracteres con putchar(), putc() y futc() . Uso de puts() y fputs() para la salida de flujos .. Uso de prinift) y fpringf() para la salida formateada .. Redireccién de la entrada y la salida. Cuando usar fprinif{) «. Uso de stderr. Resumen .. Preguntas y respues Taller Cuestionario Ejercicios La semana de un vistazo 389 15 16 Mas sobre apuntadores Apuntadores a apuntadore: ‘Apuntadores y arreglos de varias dimensiones Arreglos de apuntadores Cadenas y apuntadores: una revisién Arreglos de apuntadores a char. Un ejemplo... Apuntadores a funciones Declaracién de un apuntador a una funcién Inicializacién y uso de un apuntador a una funcién .. Resumen Preguntas y respuestas Taller . Cuestionario .. Ejercicios Uso de archivos de disco Flujos y archivos de disco Tipos de archivos de disco Nombres de archivo Apertura de un archivo para usarlo Escritura y lectura de datos de archivo Entrada y salida de archivos formateados Entrada y salida de caracteres Entrada y salida directas de archivos. Bufer con archivos: cierre y vaciado de archivos Acceso de archivos secuencial contra aleatori Las funciones ftell() y rewind{) .. La funcién freek() . Deteccién del fin de archivo . * Aprendiendo C en 21 dias 17 Lo Funciones para manejo de archivos Borrado de un archivo Renombrado de un archiv Copiado de un archivo Uso de archivos temporales .. Resumen Preguntas y respuestas Taller . Cuestionario Ejercicios . Manipulacién de cadenas Longitud y almacenamiento de cadenas Copia de cadenas..... La funcién strepy() La funci6n stracpy() La funcién strdup() Concatenacién de cadenas La funcién strcat() La funcién stracat( Comparacién de cadena Comparacién de dos cadenas : Comparaci6n de dos cadenas: ignorando maytisculas y mintisculas Comparacién parcial de cadenas .. Buisqueda en cadenas.. Lafunci6n strchr() La funcién strrchr{ La funcién strespn(, La funcién strspn() La funcién strpbrk()... La funcién strstr().. Conversion de cadenas Funciones diversas para cadenas, La funcién strrev() n. Las funciones strset() y strnset() Conversién de cadenas a ntimeros .. La funci6n atoi()... La funcién atol() La funcién atofi) Funciones de-prueba de caracteres . Resumen ... Preguntas y respuesta: Taller Cuestionario Ejercicios 18 Cémo obtener més de las funcionés 19 20 Paso de apuntadores a funciones Apuntadores tipo void... Funciones con nimero variable de argument: Funciones que regresan un apuntador Resumen Preguntas y respuestas. Taller ... Cuestionario Ejercicios . Exploracién de la biblioteca de funciones ... Funciones mateméticas Funciones trigonométricas ‘ Funciones exponenciales y logaritmicas Funciones hiperbélicas Otras funciones matematicas .. Manejo del tiempo .... Representaci6n del tiempo Las funciones de tiempo ..... Uso de las funciones de tiempo Funciones para el manejo de errores ... La funci6n assert() El archivo de encabezado ERRNO.H La funcién perror(). Buisqueda y ordenamiento .. Buisqueda con bsearch() Ordenamiento con qsori().. Dos demostraciones de busqueda y ordenamiento Resumen . Preguntas y respuestas Talay Cuestionario Ejercicios ‘Otras funciones Conversiones de tipo Conversiones automiticas de tipo .. Conversiones explicitas con modificadores de tipo Asignacién de espacio de almacenamiento en memoria La funcién malloc() La funcién calloc() .. La funcién realloc() La funcién free().. Uso de argumentos de la linea de comandos “N xxii Aprendiendo C en 21 dias 554 554 555 . 556 . 556 558 539 . 560, . 560 561 Operaciones sobre bits Los operadores de desplazamiento Los operadores I6gicos a nivel de bit El operador de complemento Campos de bits en estructuras Resumen Preguntas y respuestas Taller .. Cuestionario Ejercicios 21 Cémo aprovechar las directivas del preprocesador y més. 563 Programacién con varios archivos fuente .. Ventajas de la programacién modular Técnicas de la programacién modular. Componentes de los médulos ... Variables externas y la programacion modular. Uso de archivos .OBJ 568 El preprocesador de C 569 La directiva del preprocesador #define .. 569 La directiva #include .. 575 Uso de #if, #elif, #else y endif. Uso de #if..#fendif para ayudarse en la depuracion Cémo evitar la inclusién miiltiple de archivos de encabezado La directiva #undef. Macros predefinidas Resumen Preguntas y respuestas Taller .. Cuestionario Ejercicios .. 576 577 578 579 579 580, 581 581 581 582 Revisién de la semana 585 Apéndices Tabla de caracteres ASCII Palabras reservadas del C .. A B C__ Precedencia de operadores en C... D__Notacién binaria y hexadecimal E F G Prototipos de funcién y archivos de encabezado Funciones comunes en orden alfabético Respuestas Respuestas para el Dia 1 “Comienzo” .. Cuestionario .. Ejercicios . Respuestas para el s componentes de un programa C’ Cuestionario . 29 Ejercicios . 30 Respuestas para el Dfa 3 “Variables y constantes numéricas” Cuestionario . Ejercicios .. Respuestas para el Dia 4 “Enunciados, expresiones y operadores” Cuestionario .. Ejercicios 634 Respuestas para 37 Cuestionario . 37 Ejercicios . 37 Respuestas para el Dia 6 “Control basico del programa” - 41 Cuestionario . 641 Ejercicios . 642 Respuestas para el Dia 7 “Entrada/salida basica” 643 Cuestionario . 643 Ejercicios .. 644 Respuestas para el Dia 648 Cuestionario . 648 Ejercicios .. 649 Respuestas para el Dia 9 “Apuntadores” . Cuestionario .. Ejercicios .. 655 Respuestas para el Dfa 10 “Caracteres y cadenas” 656 Cuestionario .. 656 Ejercicios .. 658 Respuestas para el Dé 658 Cuestionario .. 658 Ejercicios . 659 Respuestas para el Dia 12 “Aleance de las variables” Cuestionario . Ejercicios .. Respuestas para el Dfa 13 “Mas sobre el control del programa’ Cuestionario . Ejercicio: Respuestas para el Dia Ja impresora y el teclado” . Cuestionario .. Ejercicio: Respuestas para el Dia 15 “Mas sobre apuntadores” . Cuestionario .. Ejercicios .. xxiii Aprendiendo C en 21 dias xxiv Respuestas para el Dia 16 “Uso de archivos de disco” 2.671 Cuestionario ... : Ejercicios ... Respuestas para el Dia 17 “Manipulacién de cadenas” Cuestionario ... Ejercicios 673, Respuestas para el Dia 18 “Obteniendo més de las funciones’ Cuestionari 2 Ejercicios Respuestas para e Cuestionari Ejercicios . Respuestas para el Dia 20 “Otras funciones” Cuestionari Ejercicios .. Respuestas para el Dia 21 “Aprovechando las directivas del preprocesador y més”. Cuestionario . icin de la biblioteca de funciones” ....675 Puntos especificos de los compiladores... Instalaci6n de la edicién estandar del Visual C/C++ de Microsoft ... Instalacién de lo minimo .. Instalacién del Turbo C/C++ para DOS de Borland Instalaci6n de lo minimo para el Turbo C/C++ para DOS de Borland... {Qué ofrecen los compiladores? Borland C+... Turbo C+ para DOS de Borlan: Edici6n esténdar del Visual C++ de Microsoft Otros compiladores . Indice Reconocimientos ‘Mi agradecimiento a todas las personas que me ayudaron a llevar este libro a su término: la gente de Sams Publishing. Siesta obraleresultaausted una dtl gufa de ensefianza, gran parte del méritoes deellos. Cualesquieraerrores son, desde luego, de mi absoluta responsabilidad. Peter Aitken Querrfa agradecerle a Greg Guntle por darme la confianza necesaria para emprender proyecto tal como el de escribir un libro; querria agradecerle también a Peter Aitken y aJoe Wikert por aportar la base de esta obra. Y, sobre todo, querrfa agradecerle a Stacy Hiquet el tiempo que pas6 respondiendo a todas mis preguntas y orientandome hacia la culminacién del libro. Bradley Jones Revisin por la Indianapolis Computer Society Diane VanOsdol Brenda Havens Jay Ferguson Jeffrey Callaway Acerca de los autores Peter Aitken es Profesor Adjunto en el Centro Médico de la Universidad de Duke, donde someteaintenso uso las PC en sus investigaciones sobreel sistemanervioso. Es experimentado escritor de temas relativos a las microcomputadoras, con una produccién de unos 60 articulos y 12 libros en su haber. Los escritos de Aitken abarcan tanto los temas de aplicaciones como los de programacién; entre sus libros se cuentan QuickBasic Advanced Techniques (Que), Learning C (Howard W. Sams) y The First Book of 1-2-3 for Windows (Howard W. Sams). También es Editor colaborador de la revista PC Techniques. Bradley Jones es Programador C de profesin. Ha ayudado a la creaci6n de sistemas para varias empresas estadounidenses. También es miembro activo de la Indianapolis Computer Society, en la que dirige la ensefianza de Cy C++ como jefe de C/C++ SIG. Asimismo, es colaborador regular de la revista Indy PC News. Sino setieneuricompilador isaresté libro; si . La mejor fé de programacién va 1 dias siguientes no se dan respuestas para todos los ejercicios, ya que hay muchas soluciones posibles. Le recomendamos encarecidamente que aproveche los ejercicios y revise sus respuestas. : S = ao = Z =) Dénde andamos... La primera semana trata el material basico que se necesita para saber cmo comprender el C completamente. En los dias 1, “Comienzo”, y 2, “Los componentes de un programa C”, usted aprenderd la manera de crear un programa C y reconocer los elementos bésicos de un programa simple. El dia 3, “Variables y constantes numéricas”, complementa lo tratado en Ios primeros dos dias definiendo los tipos de variables. El dia 4, “Enunciados, expresiones y operadores”, toma las variables y afiade expresiones simples, para que, de esta forma, puedan ser creados nuevos valores. El dia también proporciona informacién sobre lamanera de tomar decisiones y cambiar el flujo del programa usando enunciados if. El dfa 5, “Funciones: lo bisico”, trata las funciones del C y la programacién estructurada. El dfa 6, “Control basico del programa”, presenta mas comandos que le permitirén controlar el flujo de los programas. La semana termina en el dfa 7, “Entrada/salida basica”, con un andlisis sobre laimpresién de informacién y una ayuda para hacer que los programas interactden con el teclado y la pantalla. Esta es una gran cantidad de material para tratarla en solamente una semana, pero si se toma Ja informaci6n de un capitulo por dfa, no se debe tener problemas. Comienzo ai Bienvenido a ;Aprenda C por usted mismo en 21 dias! Este capitulo le da los medios para Hegar a ser un programador de C eficiente. Hoy aprender: (Por qué el C es la mejor alternativa entre los lenguajes de programacién. 1 Los pasos en el ciclo de desarrollo de un programa. ( La manera de escribir, compilar y ejecutar el primer programa en C. Acerca de los mensajes de error generados por el compilador y el enlazador. Una breve historia del lenguaje C Tal vez se pregunte cual ha sido el origen del lenguaje C y de d6nde le vino su elegante \ nombre. E1C fue creado por Dennis Ritchie en los laboratorios de la Bell Telephone, en 1972. El lenguaje no fue creado por el gusto de hacerlo, sino para un fin especifico: el disefio del sistema operativo UNIX (el cual se usa en muchas minicomputadoras). Desde el principio, el C tuvo como propésito ser ttil: permitir a los programadores atareados que las cosas se pudieran hacer. Como el Ces un lenguaje muy poderoso y flexible, su uso se difundié répidamente més all de los laboratorios Bell. Los programadores de todo el mundo comenzaron a usarlo para escribir todo tipo de programas. Sin embargo, diferentes organizaciones comenzaron a : utilizar muy pronto sus propias versiones del C, y las pequefias diferencias entre las | implementaciones comenzaron a dar problemas a los programadores. Para resolver este problema, el American National Standards Institute (ANSI) form6 un comité en 1983 para establecer una definici6n estndar del C, que llegé a ser conocida como el C esténdar ANSI. Con unas cuantas excepciones, todos los compiladores de C modernos se adhieren a este esténdar. Ahora, gpor qué tiene este nombre? El lenguaje C se Hama de esta forma debido a que su predecesor fue llamado B. El lenguaje B fue desarrollado por Ken Thompson también en los laboratorios Bell. Tal vez se imagine facilmente por qué fue llamado B. Por qué usar C Enel mundo actual de la programacién de computadoras, hay muchos lenguajes de altonivel entre los que se puede escoger, como C, Pascal, BASIC y Modula. Todos éstos son lenguajes excelentes, adecuados para la mayorfa de las labores de programacién. No obstante, hay varias razones por las cuales muchos profesionales de la computacién sienten que el C se encuentra a la cabeza de la lista: Ces un lenguaje poderoso y flexible. Lo que se puede lograr con el C esta limitado solamente por la imaginaci6n. El lenguaje, por sf mismo, no le pone limites. El C se usa para proyectos tan diversos como sistemas operativos, procesadores de palabras, gréficos, hojas de célculo y hasta compiladores para otros lenguajes. 1 E1Ces un lenguaje comiin, preferido por los programadores profesionales. Como resultado, se tienen disponibles una amplia variedad de compiladores de Cy accesorios titiles. Q El Ces un lenguaje transportable. Transportable significa que un programa en C escrito para un sistema de computadora (por ejemplo, una PC de IBM) puede ser compilado y ejecutado en otro sistema (tal vez en un sistema DEC VAX) con pocas © ninguna modificacién. La transportabilidad es aumentada con el estindar ‘ANSI para el C, el juego de reglas para los compiladores C que se mencionaron anteriormente. EI Ces un lenguaje de pocas palabras, que contiene solamente unos cuantos términos llamados palabras clave que son la base sobre la que est construida la funcionalidad del lenguaje. Tal vez piense usted que un lenguaje con més palabras clave (llamadas, algunas veces, palabras reservadas) pudiera ser més poderoso. Esto no es cierto. Conforme programe en C, encontraré que puede ser programado para ejecutar cualquier tarea. (1 EI Ces modular. El cédigo de C puede (y debe) ser escrito en rutinas Hamadas funciones. Estas funciones pueden ser reutilizadas en otras aplicaciones programas. Pasando informacién a las funciones, se puede crear c6digo titi y reutilizable. Como muestran estas caracteristicas, el C es una alternativa excelente para ser el primer lenguajede programacién, ;Quéhay acerca de este nuevo lenguaje llamado C++ (pronunciado Cplus plus)? Tal vez ya haya ofdo acerca del C++ y de una nueva técnica de programacién Mamada programacién orientada a objetos. Tal vez. se pregunte cudles son las diferencias entre C y C++, y si debe aprender por sf mismo C++ en vez de C. iNo se preocupe! C++ es una versién mejorada del C, lo que significa que el C++ contiene todo lo que tiene el C, y nuevos agregados para la programaci6n orientada a objetos. Si va aprender el C++, casi todo lo que aprenda acerca del C todavia serd aplicable al C++. Al aprender C, no sélo estard aprendiendo el lenguaje de programacién actual mas poderoso y generalizado, sino también se estar preparando para la programacién orientada a objetos del majiana, Comienzo Preparacion para la programacion Cuando se trate de resolver un problema, se deben tomar ciertos pasos. En primer lugar, el problema debe ser definido . ;Si no se sabe cul es el problema, no se puede encontrar una soluci6n! Una vez.que se conoce el problema, se puede pensar un plan paracomponerlo. Una vez que se tiene un plan, por lo general se le puede implementar fécilmente. Por tiltimo, una vez que se implementa el plan, se deben probar los resultados para ver si el problema se resuelve. Esta misma légica también puede ser aplicada a muchas otras reas, incluida la programacién. Cuando se cree un programa en C (0 en sf un programa de computadora en cualquier Ienguaje), se debe seguir una secuencia de pasos similar: 1. Determinar el objetivo del programa. 2. Determinar el método que se quiere usar para la escritura del programa. 3. Crear el programa para resolver el problema. 4, Ejecutar el programa para ver los resultados. Un ejemplo de un objetivo (véase el paso 1) puede ser escribir un procesador de palabras 0 ‘un programa de base de datos. Un objetivo mucho mis simple es desplegar el nombre de uno ena pantalla. Si no se tiene un objetivo, no se podré escribir un programa, por lo que ya se tiene dado el primer paso. El segundo paso es determinar el método que se quiere usar para la escritura del programa. {Se necesita un programa de computadora para resolver el problema? ,Qué informacion necesita ser registrada? Qué formulas serén utilizadas? Durante este paso se debe tratar de determinar lo que se necesita saber y en qué orden debe ser implementada la solucién. Como un ejemplo, supongamos que alguien nos pide escribir un programa para determinar el drea de un cfrculo. El paso 1 est completo, ya que se sabe el objetivo: determinar el érea de un effeulo. El paso 2 consiste en determinar lo que se necesita saber para calcular el dea. Eneste ejemplo, supongamos que el usuario del programa proporcionaré el radio del cfrculo. Sabiendo esto, se puede aplicar la formula m1? para obtener la respuesta. Ahora se tienen las. piezas que se necesitan, por lo que se puede continuar a los pasos 3 y 4, que son Ilamados “ciclo de desarrollo del programa”. EI ciclo de desarrollo del programa Elciclo de desarrollo del programatiene sus propios pasos. Enel primer paso se usa un editor para crear un archivo de disco que contiene el cédigo fuente. En el segundo paso se compila ‘ el c6digo fuente para crear un archivo objeto. Enel tercer paso se enlaza el c6digo compilado —= = para crear un archivo ejecutable. Por tiltimo, el cuarto paso es ejecutar el programa para ver si funciona como se plane6 originalmente. Creaci6n del cédigo fuente El c6digo fuente es una serie de enunciados 0 comandos usados para darle instrucciones a lacomputadora de que ejecute las tareas que se desean. Como se dijo anteriormente, el primer paso en el ciclo de desarrollo del programa es teclear el cédigo fuente con.un editor. Por ejemplo, a continuacién se presenta una linea de c6digo fuente de C: print£(*Hello, Mom!"); Este enunciado le indica a la computadora que despliegue el mensaje He110, mom! enla pantalla. (Por ahora, no se preocupe sobre la manera en que funciona este enunciado.) Uso de un editor Algunos compiladores vienen con un editor que puede usarse para teclear el cédigo fuente, y otros no. Consulte los manuales del compilador para ver si el compilador viene con un editor. En caso de no ser asf, se tienen disponibles muchos editores. Lamayorfade los sistemas de c6mputo incluyen un programa que puede usarse como editor. Si se esté utilizando un sistema UNIX, se pueden usar comandos como ed, ex, edit, emacs ovi, Siseestausando Windows de Microsoft, se dispone del Notepad. Con DOS 5.0, se puede usar Edit, y si se esté usando una versin de DOS anterior a la 5.0, se puede usar Edlin, La mayoria de los procesadores de palabras usan cédigos especiales para formatear sus documentos. Estos cédigos no pueden ser lefdos correctamente por otros programas. El American Standard Code for Information Interchange (ASCII) ha especificado un formato de texto estndar que casi cualquier programa, incluyendo el C, puede usar. La mayoria de los procesadores de palabras, como WordPerfect, Display Write, Word y WordStar, tienen la capacidad de guardar archivos fuente en formato ASCH (como un archivo de texto, en vez de un archivo de documento). Cuando se quiere guardar un archivo de procesador de pala- bras como un archivo ASCH, seleccione la opcién ASCII 0 texto al momento de guardarlo. ‘Si usted no quiere usar ninguno de estos editores, puede comprar un editor diferente. Hay Paquetes tanto comerciales como de dominio piblico que han sido disefiados especificamente ara teclear cédigo fuente. Cuando se guarda un archivo fuente, se le debe dar un nombre. ;Cémo debe ser llamado un archivo fuente? El nombre que se le dé al archivo debe describir lo que hace el programa. Ademis, cuando se guardan archivos fuente de programas C se le debe dar al archivo una extensi6n .C. Aunque se le puede dar al archivo fuente cualquier nombre y extensién que se desee, se considera adecuado usar la extensién .C. Comienzo NO DEBE Compilacién del cédigo fuente Aunque uno puede ser capaz de entender el cddigo fuente del C (jpor lo menos después de leer este libro usted ser4 capaz de hacerlo!), la computadora no puede. Una computadora requiere instrucciones digitales, o binarias, en lo que es llamado lenguaje de maquina. Antes de que un programa en C puedaejecutarse en una computadora, debe ser traducido del c6digo fuente a lenguaje de maquina. Esta traducci6n, el segundo paso en el desarrollo del programa, es ejecutada por un programa llamado compilador. El compiladortomael archivo del cédigo fuente como entrada y produce un archivo en disco que contiene las instrucciones de lenguaje de maquina que corresponden a los enunciados del cédigo fuente. Las instrucciones del lenguaje de maquina creadas por el compilador son llamadas cédigo objeto, y el archivo de disco que las contiene, archivo objeto. Cada compilador requiere que se usen sus propios comandos para crear el c6digo objeto. Para compilar tfpicamente se usa el comando que pone en ejecucién el compilador seguido del nombre de archivo del archivo fuente. Los siguientes son ejemplos de comandos dados para compilarun archivo fuente llamado RADIUS.C usando varios compiladores para DOS: C de Microsoft cl radius.c Turbo C de Borland tcc radius.c C de Borland bec radius.c C de Zortec ztc radius.c Para compilar RADIUS.C en una maquina UNIX, use cc radius.c Consulte el manual del compilador para determinar el comando exacto para su compilador. Después de que se compile, se tiene un archivo objeto. Si se ve una lista de los archivos del directorio donde se hizo la compilacién, se deberé encontrar un archivo conel mismonombre que el archivo fuente pero con una extensién .OBJ (en vez de extensi6n .C). La extensién ,OBJ es reconocida como un archivo objeto, y usada por el enlazador. En sistemas UNIX el compilador crea archivos objeto con la extensién .O, en vez de la extensién OBJ. Enlazar para crear un archivo ejecutable Se requiere un paso adicional antes de que se pueda ejecutar el programa. Parte del lenguaje Cesuna biblioteca de funciones que contiene el c6digo objeto (esto es, c6digo que yaha sido compilado) para funciones predefinidas. Una funcin predefinida contiene cédigo C que ya hasidoescrito, y se proporcionaen una forma lista para usarse con el paquete del compilador. La funcién printé(), usada en el ejemplo anterior, es una funcién de biblioteca. Estas funciones de biblioteca ejecutan tareas que se necesitan frecuentemente, como el desplegado de la informacién en la pantalla y la lectura de datos a partir de archivos de disco. Siel programa usa cualquiera de estas funciones (y dificilmente existe un programa que no use por lo menos una de ellas), el archivo objeto producido cuando fue compilado el cédigo fuente debe ser combinado con el cédigo objeto de la biblioteca de funciones para crear el programa final ejecutable. (Ejecutable significa que el programa puede correr, 0 ser ejecutado, en la computadora.) Este proceso es llamado enlazado y es ejecutado por un programa llamado (jadivinelo!) enlazador. Los pasos desde el cédigo fuente al c6digo objeto y al programaejecutableest4n diagramados en la figura 1.1. Uso det editor édigo fuente call ‘Compitacion de! archivo fuente (aicton ts Enlace de! Programa biblioteca archivo objeto ff | ejecutable Figura 1.1. El cddigo fuente del C que se escribe se convierte en cédigo objeto mediante el compilador y, después, en un archivo ejecutable por el enlazador. te Comienzo 10 Completando el ciclo de desarrollo Una vez que el programa esté compilado y enlazado para crear un archivo ejecutable, se puede correr tecleando su nombre en la linea de comandos del sistema, en forma similar como se hace con cualquier otro programa. Si se ejecuta el programa y se reciben resultados diferentes a lo que se crefa o debiera, hay que regresar al primer paso. Se debe identificar Jo que causé el problema y corregirlo en el cédigo fuente. Cuando se hace un cambio al cédigo fuente, se necesita volver a compilar y enlazar el programa para crear una version corregida del archivo ejecutable. jSeguiremos este ciclo hasta que se logre que el programa ejecute exactamente como se pretende! Una nota final sobre la compilacién y el enlazado. Aunque la compilacién y el enlazado se ‘mencionan como pasos separados, muchos compiladores, como los de DOS mencionados anteriormente, hacen ambas cosas en un solo paso. Sin tomaren cuenta el método por el cual se logra la compilacién y el enlazado, comprenda que estos dos procesos, aunque se hagan con un solo comando, son dos acciones separadas. Ciclo de desarrollo del C o Paso 1: Useuneditor paraescribir el c6digo fuente. Por tradicién, los archivos del e cédigo fuente de C tienen la extensién .C (por ejemplo, MYPROG.C, sg DATABASE.C, etcétera). & Paso 2: Compile el programa con un compilador. Si el compilador no encuentra R ningén error en el programa, produce un archivo objeto. El compilador produce archivos objeto con la extensién .OBJ y el mismo nombre que el archivo de c6digo fuente (por ejemplo, la compilacién de MYPROG.C da MYPROG.OB)). Si el compilador encuentra errores, los reporta, Se debe regresar al paso 1 para hacer correcciones al cédigo fuente. Paso 3: Enlace el programa con un enlazador. Si no hay errores, el enlazador produce un programaejecutable, que se encuentraen un archivodediscocon Ia extensién EXE y el mismo nombre que el archivo objeto (Por ejemplo, el enlazado de MYPROG.OBJ da MYPROG.EXE). Paso 4: Ejecute el programa. Se debe probar para determinar si funciona adecuadamente. Si no lo hace, vuelva a empezar con el paso 1 y haga modificaciones y adiciones al c6digo fuente. Los pasos para el desarrollo de programas se presentan en forma esquemética en la figura 1.2. Para casi todos, a excepcién de los programas més simples, se puede pasar por esta secuencia muchas veces antes de terminar el programa. ;Incluso los programadores més experimentados no pueden sentarse y escribir un programa completo y sin errores en un solo paso! Debido a que va a estar pasando por el ciclo: editar-compilar-enlazar-probar muchas veces, es importante que se familiarice con las herramientas: el editor, el compilador y el enlazador. Edicién del * | |e6digo fuente t [Compilacién el] 6digo fuente > No Enlace del programa No Ejecucion del programa No Final Figura 1.2. Los pasos en el desarrollo de la programacién en C. El primer programa en C iProbablementeesté ansioso de intentar el primer programa C! Para ayudarle a familiarizarse Con el compilador, a continuacién se presenta una muestra répida para que la haga. Tal vez u Comienzo 12 no entienda todo en este momento, pero deberé ambientarse al proceso de escritura, compilacién y ejecucién de un programa C real. Esta muestra usa un programa lamado HELLO.C que no hace més que desplegar las palabras Hello, World! en la pantalla, Este programa, una introducci6n tradicional a la programaci6n en C, es bueno para que usted aprenda. El c6digo fuente para HELLO.C se encuentra en el listado de programa 1.1. Feige Listado 1.1. HELLO.C. 1: #include 2: 3: main() arf 5 printf£(*Hello, World!"); 6 He] Asegtirese de que ha instalado el compilador, como se especifica en las instrucciones de instalacién proporcionadas con el software. Ya sea que esté trabajando con UNIX, DOS 0 cualquier otro sistema operativo, asegdrese de que comprende la manera de usar el compilador y el editor que haya seleccionado. Una vez. que se encuentre listo el compilador y el editor, siga estos pasos para teclear, compilar y ejecutar a HELLO.C. pecles y compilacién de HELLO.C . Active el directorio donde se encuentran los programas de C y arranque el editor. Como se dijo anteriormente, se puede usar cualquier editor de texto, pero la mayoria de los nuevos compiladores C (como el Turbo C++ de Borland y el QuickC de Microsoft) vienen con un ambiente de desarrollo integrado (IDE) que Ie permite teclear, compilar y enlazar los programas en un ambiente adecuado. ‘Véanse los manuales para ver si su compilador tiene un IDE disponible. 2. Use el teclado para teclear el cédigo fuente de HELLO.C exactamente como se muestra en el listado 1.1. Oprima Enter al final de cada Ifnea de cédigo. 3. Guarde el cédigo fuente. A este archivo debe darle el nombre HELLO.C. 4, Verifique que HELLO.C se encuentre en el disco haciendo un listado de los archivos del directorio. Se debe ver a HELLO.C dentro de este listado. 5. Compile y enlace a HELLO.C. Ejecute el comando adecuado que especifique el manual de su compilador. Se debe obtener un mensaje que indique que no hubo errores. HE 6. Revise los mensajes del compilador. Si no se reciben errores, todo debe estar correcto. Pero, ;qué pasa si se comete algin error al teclear el programa? El compilador se da cuenta de ello y despliega un mensaje de error en la pantalla. Por ejemplo, si en vez de teclear la palabra print £ se tecleé prntf, se desplegard un mensaje similar al siguiente: Error: simbolos no definidos: _prntf en hello.c (hello.OBJ) 7. Regrese al paso 2, si se despliega éste o cualquier otro mensaje de error. Abra el archivo HELLO.C en el editor. Compare cuidadosamente el contenido del archivo conellistado 1.1 de este capitulo, haga cualquier correccién necesaria y contintie con el paso 3 y los siguientes. 8. Su primer programa de C ahora debe compilar y estar listo para ejecutar. Si se despliega un listado del directorio de todos los archivos lamados HELLO (y que tengan cualquier extensi6n), se deber4 ver lo siguiente: (1 HELLO.C que es el archivo de c6digo fuente que se creé con el editor). (2 HELLO.OBJ 0 HELLO. (que contiene el cédigo objeto de HELLO.C). (2 HELLO.EXE (que es el programa ejecutable creado cuando se compil6 y enlaz6 a HELLO.C). 9. Para correr o ejecutar a HELLO.EXE, simplemente teclee hello. El mensaje Hello, world. es desplegado en la pantalla. jFelicidades! Yahatecleado, compilado y ejecutado su primer programaen C. Evidentemente, HELLO.C es un programa simple que no hace nada itil, pero es bueno para un comienzo. De hecho, debe recordar que la mayoria de los expertos programadores de C de ahora comenzaron aprendiendo C de esta misma forma, compilando HELLO.C, por lo que esté usted en buena compatifa. Errores de compilacién Un error de compilacién sucede cuando el compilador encuentra algo en el c6digo fuente que no puede compilar. Una palabra mal escrita, un error de tecleo cualquier otra cosa Puede hacer que el compilador se atragante. Afortunadamente los compiladores moderns no solamente se atragantan, jsino que dicen qué es lo que los est atragantando y dénde se encuentra! Esto facilita encontrar y corregir los errores en el cédigo fuente. Esto puede ilustrarse introduciendo un error en forma deliberada en HELLO.C. Si se hizo este ejemplo (tal como debiera), ahora tiene una copia de HELLO.C en el disco. Usando el editor, mueva el cursor al final de la linea que contiene la llamada a print £() y borré el Punto y coma de terminacién. HELLO.C ahora debe verse como en el listado 1.2. — f | a 14 Comienzo Etta Listado 1.2. HELLO.C with an error. : #include 2 main() { print£(*Hello, World!*) Ahora guarde el archivo. Se encuentra listo para compilar el archivo. Hégalo tecleando el comando para el compilador. Debido al error que se ha cometido, la compilacién no puede completarse. En vez de ello, el compilador despliega un mensaje en la pantalla similar al siguiente: hello.c(6) + Error: ';" esperado Viendo esta linea, se puede ver que consta de tres partes. hello.c, es el nombre del archivo donde se encuentra el error (6), el néimero de linea donde se encuentra el error Error: *;’ expected, una descripcién del error Esto es bastante informativo, diciéndole que en la linea 6 de HELLO.C el compilador esperaba encontrar un punto y coma, pero no lo encontr6, Claro, usted sabe que el punto y coma fue quitado de la linea 5, y hay una discrepancia. Nos encontramos con aincongruencia de por qué el compilador reporta un error en la linea 6, cuando de hecho el punto y coma fue omitido en el final de la linea 5. La respuesta se encuentra en el hecho de que el C no toma en cuenta cosas como los cortes entre lineas. El punto y coma que corresponde después del enunciado print () pudo haber sido puesto en la siguiente linea (aunque hacerlo asf hubiera sido una mala préctica de programaci6n). S6lo después de haber llegado a la llave de la linea 6 el compilador esta seguro de que le falta el punto y coma; por lo tanto, reporta que el error esté en la linea 6. Esto saca a relucir un hecho innegable acerca de los compiladores de C y los mensajes de error. Aunque el compilador es muy listo acerca de la deteccién y localizaci6n de errores, no es Einstein, Uno debe usar su conocimiento de lenguaje C, interpretar los mensajes del compilador y determinar la posicién actual de cualquier error que reporte. A veces se en- cuentra en la linea reportada por el compilador y, en caso de no ser asf, casi siempre se encuentra en la Ifnea anterior. Al principio cuesta un poco de trabajo encontrar los errores, pero luego le sera mas facil. Antes de abandonar este tema, veamos otro ejemplo de un error de compilacién. Cargue HELLO.C nuevamente en el editor y haga los siguientes cambios: 1, Reemplace el punto y coma al final de la Iinea 5. 2. Borre las comillas que se encuentran antes de la palabra Hello. Guarde el archivo en disco y vuelva a compilar el programa. En esta ocasi6n, el compilador debe desplegar mensajeside error similares a los siguientes: nello.c(5) : Error: identificador no definido ‘Hello’ hello.c(6) : Error 1éxico: cadena no terminada Error léxico: cadena no determinada Error 1éxico: cadena no determinada Error fatal: final prematuro del archivo fuente El primer mensaje de error encuentra al error correctamente, ubicdndolo en la linea 5 en la palabra iie1 Lo. El mensaje de error unident ified identi fier significa que el compilador no sabe qué hacer con la palabra Helo, ya que no est entre comillas. Sin embargo, ;qué hay acerca de los otros cuatro errores que reporta? Estos errores, de cuyo significado no tenemos que preocuparnos ahora, ilustran el hecho de que un solo error en un programa C algunas veces puede causar varios mensajes de error. La lecci6n por aprender de todo esto es la siguiente: si el compilador reporta varios errores y solamente se puede encontrar uno, siga adelante, corrija el error y vuelva a compilar. Tal vez encuentre que una sola correccién es todo lo que se necesita y que ahora el programa compila sin errores. Mensajes de error del enlazador Los errores del enlazador son relativamente raros y, por lo general, se deben a errores de escritura del nombre de una funcién de biblioteca de C. En este caso, se obtiene el mensaje de error Error: undefined symbols:, seguido del nombre mal tecleado (y precedido por un signo de subrayado). Una vez que se corrige la palabra, el problema debe desaparecer. Resumen Después de leer este capitulo, debe usted tener confianza de que la selecci6n del C como su lenguaje de programacién es una buena selecci6n. El C proporciona una combinacién de poder, popularidad y portabilidad sin paralelo. Estos factores, junto con la intima relacion del C con el nuevo lenguaje orientado a objetos C++, hacen al C inmejorable. Este capitulo ha explicado los varios pasos involucrados en la escritura de un programa en C, el proceso conocido como desarrollo de programa. Se debe tener una clara comprensiOn del ciclo editar-compilar-enlazar-probar, asf como de las herramientas que se han de usar Para cada paso. Los errores son una parte inevitable del desarrollo de programas. El compiladorde C detecta errores en el c6digo fuente y despliega mensajes de error dando la naturaleza y la ubicacién del error. Con esta informacién se puede editar el c6digo fuente para corregir el error. Sin 15 4 16 Comienzo embargo, recuerde que el compilador no siempre puede reportar con precisi6n 1a naturaleza y ubicacién del error. Algunas veces necesitaré usar su conocimiento del C para localizar exactamente lo que est causando un determinado mensaje de error. Preguntas y respuestas 1. Si quiero darle a alguien un programa que escribi, qué archivos debo darle? Una de las cosas buenas acerca del C es que es un lenguaje compilado. Esto significa que después de que el c6digo fuente es compilado, se tiene un programa ejecutable, Este programa ejecutable es un programa aislado. Si quiere dar HELLO a todos sus amigos que tengan computadora, lo puede hacer. Todo lo que necesita darles es el programa ejecutable HELLO.EXE. Ellos no necesitan el archivo fuente HELLO.C ni el archivo objeto HELLO.OBIJ. jIncluso ni necesitan tener su propio compilador C! 2. Después de haber creado un archivo ejecutable, necesito guardar el archivo fuente (.C) o el archivo objeto (.OBJ)? Si se deshace del archivo fuente, no tiene manera de hacer cambios al programa en el futuro; por lo tanto, jdebe guardar este archivo! Los archivos objeto son una cosa aparte, Hay razones para guardar los archivos objeto. Sin embargo, por el ‘momento esti fuera del alcance de lo que estamos haciendo. Por ahora, usted puede deshacerse de los archivos objeto una vez que tenga el archivo ejecutable. Si necesita el archivo objeto, se puede recompilar el archivo fuente. 3. Simi compilador viene con un editor, ;tengo que usarlo? Definitivamente no. Se puede usar cualquier editor, siempre y cuando guarde el cédigo fuente en formato de texto. Si el compilador viene con un editor, trate de usarlo, Si usted tiene un editor mejor, tiselo. Yo (Brad) uso un editor que compré por separado, aunque todos mis compiladores tienen sus propios editores. Los editores que vienen con los compiladores son cada vez mejores. Algunos de ellos formatean automdticamente el c6digo C. Otros codifican con color diferentes partes del archivo fuente para facilitar la busqueda de errores. 4, {Puedo ignorar los mensajes de advertencia? Algunos mensajes de advertencia no afectan la manera en que un programa ejecuta, pero otros sf. Si el compilador le da un mensaje de advertencia, es sefial de que algo no est completamente bien. La mayorfa de los compiladores le permiten ajustar el nivel de mensajes de advertencia. Ajustando el nivel de los mensajes, se pueden obtener solamente los mensajes mAs delicados u obtener todos los mensajes, aun los mAs banales. Algunos compiladores hasta le dan varios niveles intermedios. En los programas se debe ver cada mensaje y tomar una determinaci6n. Siempre es mejor tratar de escribir todos los programas sin gue aparezca ningtin mensaje de advertencia o de error. (Con un mensaje de error el compilador no crearé el archivo ejecutable.) Taller El taller le proporciona preguntas que le ayudardn a afianzar su comprensién del material tratado asf como ejercicios que le dardn experiencia en el uso de lo aprendido. Trate de comprender el cuestionario y dé las respuestas antes de continuar al siguiente capitulo. Las respuestas se proporcionan en el apéndice G, “Respuestas”. Cuestionario 1. Dé tres razones por las cuales el C es la mejor seleccién de lenguaje de programacién 2. {Qué hace el compilador? 3. ¢Cudles son los pasos en el ciclo de desarrollo en el programa? 4. {Qué comando se necesita teclear para compilar un programa llamado PROGRAMIL.C en su compilador? 5. ¢Su compilador ejecuta el enlazado y la compilacién con un solo comando 0 se tienen que dar comandos separados? 6. {Qué extensién se debe usar para los archivos fuente del C? 7. (Es FILENAME.TXT un nombre vilido para un archivo fuente del C? 8. Si se ejecuta un programa que se ha compilado y no funciona como se esperaba, qué se debe hacer? 9. {Qué es el lenguaje de maquina? 10. {Qué hace el enlazador? Ejercicios 1. Use el editor de texto para ver el archivo objeto creado por el listado 1.1. ,Se Parece el archivo objeto al archivo fuente? (No guarde este archivo cuando salga del editor.) 2. Teclee el siguiente programa y compflelo. ,Qué hace este programa? (No incluya los ntimeros de I{nea.) 17 18 Comienzo 1: #include 2: 4 3: int radius, area; as 5: main() 6: { j Ts printf( "Enter radius (i.e. 10): " B: scanf( "$d", &radius ); Be area = 3.14159 * radius * radius; printf( "\n\nArea = %d", area ); return 0; ) Teclee y compile el siguiente programa. ;Qué hace este programa? 1: #include int xy main() { for (x = 0; x < 10; x++, printf( *\n* ) ) for (y = 0; y < 10; y++) printf ( *X" ); q 10: 11: return 0; Haste) BUSQUEDA DE ERRORES: El siguiente programa tiene un problema. Tecléelo enel editor y compilelo. ,Qué linea genera mensajes de error? 1: #include 2: 3: main(); 4a: ¢ Bs printé( ‘Keep looking!" ); 6: print£( *You\'ll find it!" ); I return 0; 8: } BUSQUEDA DE ERRORES: El siguiente programa tiene un problema. Tecléelo enel editor y compilelo. {Qué linea da problemas? ‘ 1: #include 2: 3: main() a: Bs printf( "This is a program with a" ); 6 do_it( "problem!"); mm return 0; 8: ) |. Haga los siguientes cambios al programa del ejercicio ntimero 3. Vuélvalo a compilar y ejecute este programa. ;Qué hace ahora el programa? 9: print£( "$e", 1); . Teclee y compile el siguiente programa. Este programa puede usarse para imprimir sus listados. Si se tienen errores, asegdrese de haber tecleado el programa correctamente. EL uso de este programa es PRINT_IT nombre de archivo.ext, donde nombre de archivo.ext es el nombre de archivo fuente junto con su extensi6n. Observe que este programa afiade ntimeros de linea al listado. (No se preocupe por la longitud de este programa; no espero que lo entienda todavia. Se incluye aqui para ayudarle a comparar las impresiones de sus programas con las que se dan en el libro.) 1: /* PRINT_IT.C- Este programa imprime un listado con nimeros de linea*/ #include void do_heading(char *filename) ; +. int line, page; 9: main( int argv, char *argc[] ) doz { 11: char buffer(256]; 12: FILE *fp; 13: 14: if( argv < 2) 15: { 19

You might also like