Anda di halaman 1dari 290
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 sf mismo el lenguaje de programacién C en 21 dias. 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 ‘mencionamosenelDfa 1, usted no se ha equivocado al seleccionar al C como su lenguaje de programac Pensamos que ha hecho una decisién atinada seleccionando este libro como su medio para aprender el C. Aunque hay muchos sobre C, cteemos que este libro presenta al C ensusecuencia mas 6gicay facil de aprender. Lohemos disefiado pensandoenqueusted trabaje los capftulos en orden, diariamente. Los capitulos posteriores se apoyan en el material presentadoen los primeros. No suponemos 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 haceruos hip6tesis acerca de su computadora © compilador. Este libro se concentra sobre el aprendizaje del C sin importar el compilador. Caracteristicas especiales de este libro El libro contiene algunas caracteristicas especiales para ayudarle en su aprendizaje del C.Cuadros de sintaxis le muestran eémo usar un concepto especifico del C. Cada cuadro proporcionaejemplos concretos yunaexplicacién completa del comando oconcepto 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 funci6én printfO f#ilclude print€( cadena do fornatol ,argunentos, 1): print£() es una funcién que acepta una serie de argumentos, donde a cada uno se le aplica un especificador de conversién en la cadena de formateo dada, print £ () impri- me la informacién 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 estandar, STDIO.H. La cadena de formato es imprescindible. Sin embargo, los argumentos son opcio- nales, Paracada argumento debe haber un especificador de conversidn. La tabla 7.2 lista los especificadores de conversién mds comunes. La cadena de formato también puede contener secuencias de escape. La tabla 7.1 lista las més usadas. A continuacién se presentan ejemplos de Hamadas a print£() y su salida: Ejemplo 1 Hinclude aint) _ a fl print£( *:Este es un ejemplo de algo impreso!*); ) Despliega iBste es un ejemplo de slgo impreso! Ejemplo 2 printf( ‘Esto imprine un carécter, &c\n un minero, $4\n un punto flotante, Str, tz", 123, 456.789 I; Despliega Esto imprime un carécter, 2 uun ntinero, 123 tun punto Florante, 456.789 tra caracteristica de este libro son los cuadros de DEBE/NO DEBE, los cuales dan indicaciones sobre lo que hay que hacer y Jo que no hay que hacer. Proporcionamos numerosos ejemplos con explicaciones para ayudarle a aprender la manera de programar. Cada dfa 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 contione cuestionarios y ejercicios. El cuestionario prueba stv conocimiento de los conceptos que han sido presentados en ese dia. Si desea revisar las respuestas, 0 est4 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 continuaciGn de cada juego de preguntas del cuestionario se encuentra un juegodeejercicios. Lerecomendamos que trate de hacer ‘cada uno de ellos. Escribir e6digo de C es la mejor manera de aprender el lenguaje de programacién C. Consideramos que los ejercicios de BUSQUEDA DE ERRORES son los masbenéficos. Estos son listados de e6digo que contienen problemas comunes. Es su tarea localizar y corregitr los errores. Conforme avance por el libro, algunas de las respuestas a los ejercicios tenderén a hhacerse largas. Otros ejercicios tienen varias respuestas posibles. A consecuencia de sto, los dltimos capitulos tal vez no den tespuestas para todos los ejerc Haciendo un mejor libro Nadas perfecto, pero nos esforzamos poralcanzar la perfeccisn. EstaediciGn bestieller tiene algunas nuevas caracterfstcas que vale la pena tener en cuenta. Si usted tiene preguntas espectficas acerca de los diferentes compiladores de C, pase al apéndice H. ‘Ahfencontarslistados de las principales caracteristicasde los compiladoresy sugerencias para a instalaci6n, Esperamos que esto le sea de ayuda para elegirelcompilador que se aadapte mejor asus necesidades. Un concepto del C que no fue tratado en la primera edici6n fueron las uniones. Esta ediciGa tiene una seccién adicional en el capitulo 11, donde se detallan las uniones Asegirese de resolver completamente el nuevo ejercicio enel taller del capitulo 11 que trata este tema. Al final de cada semana usted encontraré “La revisign de la semana”. Esta seccién contienc un amplio programa que usa varios eos conceptostratados durante la semana anterior. Muchas delaslinas del programa tienen nimerosala izquierda dels nimeros de lea. Estos nimeros idenifican el capitulo donde se trata el tema de esa linea. Si cualquiera de los conceptos lo confunde,regrese a ese capitulo ‘Aun cuando usted haya dominado los coaceptos de C, est libro seré una referencia adecuada ylatarjetadesprendible,enlapat inicil de est ibro,es un recurso adcional para usted, La tarjeta, que contieneinformaciGn por ambos lads, see uns material Ge consula de escrtorio al estar escribiendo sus programas de C. Convenciones usadas en este ‘ libro Este libro usa diferentes ipos de letra para ayudarle a distinguir entre el cddigo de C y elespafiol normal yaidentificarconceptos importantes. Elcédigo actual deCestéescrito cen un tipo de letra especial nonoespaciiado. Placeholders, es decir, los érmminos usados para representar lo que de hecho se tiene que teclear en el cdidigo, estin escritos en un tipo cursive menoespactado, Los términos nuevos o importantes estén escritos en “tibro) 8 DOT medio. . oo _Prence Hal Comper Pablshing Bibfoteca dete Fie es &l i i MEXICO « ARGENTINA + BRASIL» COLOMBIA + COSTA RICA + CHILE [ESPANA GUATEMALA + PERU = PUERTO RICO = VENEZUELA E Resumen del contenido La semana 1 de un vistazo Funciones: lo bisico : soe BT 1s DV Comienz0 sn niesnnnnnnnnninnann 3 2 Los componentes de un programa C. a2 3. Variables y constantes numéticas.. 35 4 Enunciados, expresiones y operadores 53 5 6 Control basico del programa 7 Entrada/slida bdsica = . 139 RevisiOn de Ia semana 1 159 La semana 2 de un vistazo 8 Ameglos numnéricos 169 9 Apuntadores... 189 10 Caracteres y cadenas... 215 IL Estructuras, 241 12 Aleance de las variables. 281 13. Mis sobeel contol de programa. snnnnsennan 301 14 Trabajando con la pantalla, 1a impresora y €lt€C1Ad0 ..ennsnsnsennon 331 Revisién de la semana 2 379 La semana 3 de un vistazo 13° Mas sobre apuntadores. — soon 391 16 Usode archivos de disco 425 17 Manipalacién de cadenas 463 18 Cémo obtener mas de las fUNCIONES ..ennnrsnsnnineninnansnanansrnnn 49S 19 Exploracién de la biblioteca de funciones 513 20 Otras funciones - Al 21 Céao aprovechar as dtectvas del preprocesadory mis... E63 Revisién de la semana 3 585 Apéndices 595 599 ‘A Tabla de caracteres ASCIL.... B Palabras reservadas del C .. HOmmon Precedencia de operadores en C.. Notacién binaria y hexadecimal os Prototipos de funcién y archivos de encabezado Funciones comunes en orden alfabétic Respuestas nn Puntos especificos de los compiladores... Contenido La semana de un vistazo 1 1 Comienzo Una breve historia del lenguaje C GPor 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.C Resumen Preguntas y respuess. Taller i. Cuestionario Ejercicios Los componentes de un programa C Un programa corto en C Los componentes de un program. La funciGn main()(lineas 5-18) La directiva #include (\inea 2) DefiniciGn de variables (linea 3) Prototipo de funcién (linea 4) e Enuncados del programa (ines 89, 12.13, 16.17.23) eet Definicin de funcién (lineas 21-24) Comenarios det rogama Mines 1,7 1 15,20). Llaves (ineas 6,18, 22, 24). Ejecucién del programa ‘Una nota sobre la precisién Revision de spans de un programa Resumen Preguntas y fespuess. Taller Cuestionario Ejercicios Variables y constantes numéricas. Memosia de computador Variables... aa Aprendiendo C en 21 dias Nombres de variable ok ‘Tipos de variables numeéricas . 39 Declaracién de variables. 42 La palabra clave npedef. Inicializaciém de variables numériens Constantes en. ‘Constantesliterales Constantes simbolicas Resumen Ejerccios . — : 4 Enunciados, expresiones y operadores avsensnenenennn Eaunciades Enunciados y el espacio en blanco Enunciados compuestos Expresiones Expresiones simples. Expresiones complejas. Operadores. Bl operador de asignacién... ‘Operadores matemiticos. Precedencia de operadores y los paréntesis rien par a evausen de subexoresions “Operadores relacionales El enunciado f. Evaluacién de expresiones relacionales... Precedencia de los operadores relacionales Operadores Iégicos... Mis sobre valores cierofalso Precedencia de los operadores logicos . Dperadores de asignacién compuestos El operador condicional Eloperador coma. = Recumen . = Preguntas y respuestas i Taller i Cuestionario Bjercicios S- Funciones: lo B&sieo wun Qué es una funcién? ‘La definicién de una funcién La ilustracin de una funcién ‘La manera en que trabaja una funcién Las funciones y la programaci6n estructurada ‘Las ventajas de la programacién estructurada. La planeacién de un programa estructurado. El enfoque descendente Escritura de una funcion... El encahezado de Ia funcién . El cuerpo de la fun EI 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 respuestas Taller Cuestionario Ejercicios Control bisico del programa sun. Arreglos: lo basco... Control de la ejecus ‘el programa ELeounciadeic... Enunciados for anidados El enunciado while... Enunciados while anidados Preguntas yrespuestas. Taller. Cuestionario Bjercicios ... Entrada/salida bésica Desplegado de Ia informacién en la pantalla ‘La funcién pring!) Desplegado de mensajes con puls() Botrada de datos numérico con scan) Resumen ... Preguntas y respuestas Taller . Cuest Ejercicios So ee iendo C en 21 dias ‘La semana de un vistazo 167 8 Arreglos numéricos svn {Qué es un arreglo?. “Arreglos de una soi ‘Arreglos multidimensionales Denominacién y declaracién de arregios Inicializacién de arreglos. ‘Tamafio méximo del arregio Resumen Preguntas y espera Taller. Cuestionario Ejercicios . 9 Apuntadores un. Qué es un apuntador? ‘La memoria de Ta computadora Creacin de un apuntaor Los apuntadores y ls variables simple Declaracién de apuntadores... Inicializacin de apuntadores Uso de apuntadores. Los apuntadores y Ios tipos de variabies Los apuntadores y los areglos. El nombre del areglo como un apuntador Almacenamiento de elementos de arreglo... Aritmética de apuntadores Precauciones con los apuntadores Notacién de subindices de areglo y apuntadores. Paso de arreglos afunciones Resumen . Cuestionario Bjerci 10 Caracteres y cadet meninn El tipo de dato char... Uso de variables de caricter Uso de cadena oe “Amteglos de caracteres Inicializacién de arreglos de caracteres Cadenas y apuntadores. Cadenas sin arreglos. ‘Asignacién de espacio para la cadena en la compilaci6n. sa La funci6n malloc() Desplegado de cadenas y caracteres La funcién puss) La funcién pring) Lectura de cadenas desde el teclado Entrada de cadenas con la funcién geis() Entrada de cadenas con la funcién seanf{) Resumen Preguntas y respuesta: uw Estructuras simples... Definicién y dectaracién de estructuras Acceso de ios miembros de la estructura Estructuras més complejas Estructuras que contienen estructuras .. Estructuras que contienen arreglos ‘Arreglos de estructuras.. Tniclalizacion de estructuras Estructuras y apuntadores . ‘Apuntadores como miembros de estructur Apuntadores a estructuras. Apuntadores y arregios de estructuras Paso de estructuras como argumentos a funciones Uniones.. : Definicin, declaracin e inicializacién ‘Acceso de miembros de la unién .. Listas encadenadas .. La organizacién de una lisa eneadenada La funci6n malloe() Implementacién de una lista encade oypedef y las estructuras Resumen : Preguntas y respuestas. Taller. Cuestionari Ejercicios 12 Aleance de las variables Qué es el alcance? . ‘Una demostracién del alcance {Por qué es importante el aleance’ uniones . xvii ay Aprendiendo C en 21 dias . Variables externas 284 “Aleance de las variables externas . "285 ‘Cudndo usar variables externas 285 La palabra clave extern.. 286 Variables locales... 287 ‘Variables estéticas versus antométicas 287 El alcance de los pardmetros de la funci "290 ‘Variables estéticas externas . 201 ‘Variables de registro = 291 Variables locales y Ia funcién main() mene 202) {Qué clase de almacenamiento se debe usar? 293 Variables locales y Bloque. 294 Resumen 295 Preguntas y respuestas 296 Taller a 297 ‘Cuestionanio: 297 Bjercicios . 298 B a 301 Terminacién anticipada de ciclos.... 302 El enunciado break . 302 El enunciado continue. El enunciado goto. Ciclos infinitos Elenunciado switch. ‘Terminacin del programa . ‘La funcién exit() LLa funcién atexit()(s6lo para el DOS) . -Ejecucién de comandos del sistema operativo en un Prag on 3S Resumen Preguntas y respuesta... Taller : ‘Cuestionario Ejercicios . 14 Trabajando con tapantlia la tn impresora ye telado Los flujos y el C {Qué es exactamente la Fntrada/Salida de un programa {QUE es un flujo? . Flujos de texto contra flujos binatios uw Les flujos predefinidos . Funciones de flujo del C Un ejemplo.. ‘Aceptando entrada del teclado Entrada de caracteres.. Entrada formateada... Salida a pantalla Salida de earacteres con putchar(), putt) y foutc() Uso de puts() y fputs() para la salida de flujos i Uso de printf) y fprinfi) para la salida formateada, 362 Redireccién de la entrada y 1a S4L148....oonn Cugndo usar fpring) Uso de stderr. Resumen : Preguntas y respuesta. Taller Cuestionario Ejetcicios Revisién de la semana La semana de un vistazo 15 Més sobre apuntadores nm Apuntadores a apuntadores.... ‘Apuntadores y arreglos de varias dimensiones ‘Arreglos de apuntadores. Cadenas y apuntadores: una revisi6 Arreglos de apuntadores a char Un ejemplo. sn Apuntadores a funciones . ‘Declaracién de un apuntador a una funcion Inicilizacion y uso de on apuntador 2 una funcin Resumen Preguntas y Fespests. Taller Cuestionario Ejercicios ... 16 Uso de archivos de disco Flujos y archivos de disco ‘Tipos de archivos de disco Nombres de archivo ‘Apertura de un archivo para usar Escritura y lectura de datos de archivo Entrada y salida de archivos formateados . Entrada y salida de caracteres E Entrada y salida directas de archivos. Bufer con archivos: ciere y vaciado de archivos... ‘Acceso de archivos secuencial contra aleatorio Las funciones fiell()y rewind() La funcidn fscek() Deteccién del fin de archivo 21 | Aprendiendo € en 21 dias Funciones para manejo de archivos Borrado de un archivo Renombrado de un archivo Copiado de un archivo ‘Uso de archivos temporales esumen Preguntas y espuestas Taller... ‘Cuestionario Ejercicios 17 Manipulacién de cadena. Longitud y almacenamiento de cadenas Copia de cadens. ‘La funcién strepy() La funcién strnepy() La funcién strdup() Concatenacién de cadenes La funcién streai/)... La funcién strncat() Comparacién de cadenas..... ‘Comparacién de dos cadenas ‘Comparacién de dos cadenes: ignorando maytsculas y mindsculas Comparacién parcial de cadenas Biisqueda en cadenas 2 Lafuncign strehr(). Ea funci6n sirrehr() La funci6n strespn() La funci6n strspn() La funci6n strpbrit). La funci6n strstr)... ‘Conversién de cadena: Funciones diversas para eadenas, ‘La funcién strev() Las funciones strse() y strseif) Conversion de cadenas a nimeros La funcién atoi() La funcién ato) La funcién aro). Funciones de prueba de caracteres Resumen Preguntas y espe. Taller : Cuesti Ejercicios .. ______e 18 Cémo obtener més de las funciones. Paso de apuntadores a funciones. Apuntadores tipo void : Funciones con mimero variable de argumentos Fonciones que regresan un apuntador Resumen Preguntas y respuestas Taller Cuestionari Ejercicios .. 19 Exploraci6n de la biblioteca de funciones .. Funciones matemiticas . Funciones trigonométticas Funciones exponenciales y logaritmicas Funciones hiperbdlicas... tras funciones matematicas Manejo del tiempo Representacién del tiempo 1Las funciones de tiempo Uso de las funciones de tiempo Funciones para el manejo de errores La funcién assert) : El archivo de encabezado ERRNO.H.......- La funcién perror()... Baisqueda y ordenamiento Buisqueda con bsearch) Ordenamiento con qsort() Dos demosracones de bisqueda y orenumiet Resumen Preguntas y Teopesas. Taller... Cuestionario Ejercicios 20 Otras funciones... Conversiunes de tipo «. ‘Conversiones automaticas de tipo Conversiones explicitas con modificadores de tipo .. ‘Asignacién de espacio de almacenamiento en memori La funcién matloc() La funcién calloc() La funci6n reatloc() La funcin free() ‘Uso de argumentos de la linea de comandos i Aprendiendo C en 21 dias Operaciones sobre bits ‘Los operadores de desplazamiento Los operadores légicos a nivel de bit El operador de complemento ‘Campos de bits en estructuras RESUMED cr Preguntas y respuestas Taller ‘Cuestionario EBjercicios 21 Cémo aprovechar las directivas del preprocesador y mas Programacién con varios archivos fuente ‘Ventajas de la programacién modular ‘Técnicas dela programacicn modular Componentes de tos mdulos Variables externas y la programacién modular Uso de archives .OBB .. El preprocesador de C La hese det pepoceador Aine La directiva Finclude oo. Uso de tif elif, Hele y endif. Uso de Af. ten para ayudarse en Ia depuracién ‘Cémo evitar la inclusién miiple de archivos de encabezado...... 578 La direetva funde. Macros predefnida Resumen Preguntas y respuesta. Taller Cuestionario. Bjercicios Revisién de la semana Apéndices ‘Tabla de caracteres ASCII Palabras reservadas del C . Precedencia de operadores en C Notacién binaria y hexadecimal erevnenennn Prototipos de funcién y archivos de encabezad0 eum anmmocae> Respuestas para el Dfa 1 “Comienzo” Cuestionario Ejercicios .... Respuestas para el Dia 2 “Los componentes de un programa C” ‘Cuestionario Ejercicios Respuestas para el Dia 3 “Variables y constantes numéricas” Cuestionario Ejercicios Respuestas para el Dia 4 “Enuncindos, expresiones y operadores” 633 Cuestionario 633 Bjercicios 634 Respuestas para el Dia 5 “Funciones: lo basico” 637 Cestionatio .nunonmneme : 637 Ejercicios 637 espuestas para el Dia 6 “Control basico del programa” 641 Cuestionario : 641 Ejercicios 642 Respuestas para el Dfa 7 “Entrada/salida basica’ 643 Cuestionario 643 Ejercicios 644 expen pars el Dia 8 “Arrogiosnumioe” 648 Cuestionario : 648 Ejercicios ... 649 Respuestas para el Dia 9 “Apuntadores" Cuestionario Ejercicios 655 Respuestas para el Dia 10 “Caracteres y cadenas” 656 Cuestionario 656 Ejercicios .. 658 Respuestas para el Dia 11 “Estructuras” Cuestionario. Ejercicios Respuestas para el Dia 12 “Aleance de las variables”. ‘Cuestionario : z Ejercicios Respuestas para el Dia 13 “Mas sobre el control del programa”. Cuestionario Ejercicios Respuestas para el Dia 14 “Trabajando con la pantalla, la impresora y el teclado” . Cuestionario Ejercicios 2 Respuestas par sobre apuntadores” i Aprendiendo C en 21 dias fa 16 “Uso de archivos de disco” Respuestas para el Cuestionario| Bjercicios Respuestas para el Bia 17 “Manipulacion de cadenas" Cestionati cn Ejercicios Respuestas para el Dia 18 “Obteniendo mas de las funciones™ ‘Cuestionario| Bjecicios Respuestas para el ‘Cuestionario| Ejrcicios Respuestas para el Dia 20 “Ours funciones™ Cuestionario| Bjercicios Respuestas para el Dia 21 “Aprovechando las directivas del preprocesador y més” Chestionari H, Puntos epetco dels complladores Instalacién de la edicién estindar del Visual (C++ ‘Turbo C+ para DOS de Boriand.. 689 Ecdici6n estindar del Visual C++ de Microsoft Otros compiladores.. Indice. delaprog 3 a \ commpadof bneditoryeste Kono Sinosotienduigompilador -Suneditor todavia se puede Usax est bro; sibebargo, st ler ser iil Lars i de sre ease _de programacién tz més allé de'la Sola lectura duh libro: ee que ver cone cleo yl ejecbeidn de varios progran Sos programas en Cfnouidos en ese bio, vA organized det fori aie Papin contonesineiet c fa, uated debey Goan las respuestas a todas las sgeffen el apéndiceG, "Respuestas”, En los ‘fas siguientes no se dan respuestas para todoslosejercicios, ya que hay muchas soluciones posibles. Le recomendamos ‘encarecidamente que aproveche los ejecicios y revise sus respuestas. Dénde andamos... La primera semana trata el material bsico que se necesita para saber emo 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 bisicos de un programa simple. El dfa3, “Variables y constantes numéricas”, complementa lo tratado en los primeros dos das definiendo los tipos de variables. El dia 4, “Enunciados, expresiones ¥ operadores”, toma las variables y afade expresiones simples, para que, de esta forma, ppuedan 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 dia 5, “Funciones: lo bésico”, trata las funciones del C y la programacidn estructurada, El dia 6, “Control bésico del programa”, presenta més comandos que le permitirén controlar el flujo de los programas. La semana termina en el dfa 7, “Entrada/salida bésica”, con un andlisis sobre laimpresiGn de informacién y una ayuda para hacer que los programas interactien con el teclado y Ia pantalla, Esta es una gran cantidad de material para tratarla en solamente una semana, pero si se toma Ja informacién de un capftulo por dia, no se debe tener problemas. G—-- | Bienvenido a jAprenda C por usted mismo en 21 dias! Este capitulo le da los medios para llegar a ser un programador de C eficiente. Hoy aprenderd: 1D Por qué 1 Ces la mejor alternativa entre los lenguajes de programacion Los pasos en et ciclo de desarrollo de ust programa. Gi Laimanera de escribir, compar y ejecutarel primer programa en C. [2 Acerca de os mensajes de eror generados por el compilador y el enlazador. Una breve historia del lenguaje C “Tal ver se pregunte cual ha sido el viigen det lenguaje C y de dénde le vino su elegante nombre F1C fue creado por DeapisRitchic eno aboratorios dela BellTelephone,en 197%, El lenguaje no fue creado por el gusto de hacerlo sino para un fin especifico: el diseio del sistema operativo UNIX (cl cual se usa en muchas minicomputadoras). Desde el principio, ac tuvo como prop6sito ser itil: permitir alos programadores atareados que las cosas Se eran hacer. ‘Como el Ces un lenguaje muy poderoso y flexible, su uso se difundi répidamente més alld de los laboratorios Bell. Los programadores de todo el mundo comenzaron a usarlo para ‘escribir todo tipo de programas. Sin embargo, diferentes organizaciones comenzaron @ btilizar muy pronto sus propias versiones del C, y las pequefias diferencias entre las jmplementaciones comenzaron a dar problemas alos programadores. Para resolver este problema, el American National Standards Institute (ANSI) formé un comité en 1983 para Patablecer una definicidn estindar del C, que lleg6 a ser conocida como el C estdndar ANSI. ‘Con unas cuantas excepciones, todos los compiladores de C modemos se adhieren a este ‘etindar. ‘Ahora, ;por qué tiene este nombre? El lenguaje C se llama de esta forma debido a que su fue llamado B. El lenguaje B fue desarrollado por Ken Thompson también en os, Taboratorios Bell. Tal vez se imagine fécilmente por qué fue llamado B. Por qué usar C Enel mundo actual de la programacién de computadoras,hay muchos lenguajes de altonivel centre los que se puede escoger, comoC, Pascal, BASIC y Modula, Todos tos son lenguajes ‘xcelentcs, adecuados para la mayoria de las labores de programacién. No obstante, hay ‘arias razones por las cuales muchos profesionales de la computacidn sienten que el C se encuentra a la cabeza de la lista: _—____ DF Ces un lenguaje poderoso y flexible. Lo que se puede lograr con el C esté limitado solamente por la imaginacién. El lenguaje, por s{ mismo, no le pone mites. El C se usa para proyectos tan diversos como sistemas operativos, procesadores de palabras, graficos, hojas de célculo y hasta compiladores para ‘otros lenguajes. 1 ElCes un lenguaje comén, preferido por los programadores profesionales. Como resultado, se tienen disponibles una amplia variedad de compiladores de C y accesories tiles © ElCes un lenguaie 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 ppocas © ninguna modificacién. La transportablidad es aumentada con el esténdar ‘ANSI para el C, el juego de reglas para los compiladores C que se mencionaron anteriormente. C1 ElCes 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 funcionatidad del lenguaj. Tal vez piense usted que un lenguaje con més palabras lave (llamada, algunas veces, palabras reservadas) pudiera ser més poderoso. Esto noes cierto. Conforme programe en C, encontrard que puede ser programado para ejecutar cualquier tarea, (C1 ElCes modular. El cédigo de C puede (y debe) ser escrito en rutinas Ilamadas Junciones, Estas funciones pueden ser eutlizadas en otras aplicaciones 0 ‘programas. Pasando informaci6n a las funciones, se puede crear oédigo stil y reutilizable. ‘Como muestran estas caracteristicas, el C es una altemnativa excelente para ser el primer lenguaje de programacién. ;Quéhay acercadeeste nuevo lenguajellamadoC+ (promunciado Cpls plus)? Tal vez.ya haya ofdo acerca del C+ y de una nueva técnica de programacién Uamada programacién orientada a objetos. Tal vez. se pregunte cudles son las diferencias, centre 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 Io que tiene el C, y nuevos agregados para la programacién orientada a objetos. Si va a aprender el C++, casi todo lo que uprenda acerca del C todavia serd aplicable al C++. Al aprender C, no s6lo estaré aprendiendo el lenguaje de programacién actual més poderoso y generalizado, sino también se estaré preparando para la programaci6n orientada a objetos del mafiana. | (i Comienzo Preparacién para la programaci6én Cuando se trate de resolver un problema, ¢ deben tomar ciertos pasos. En primer lugar, el problema debe ser defini .;Sino se sabe cul sel problema, no se puede encontrar una Soluciat Una vez que seconoce el problema, puede pensr un plan parscunsponeio. Una ‘ez que se tiene un plan po lo general se le puede implementa fcilmente, Por timo, tna vez que se implementa el plan se deben probar los resultados paa vr siel problem Sse resuelve- Esta misma ldgiea tambien puede ser aplicada a muchas otras dre, incluida la programacioa CCuando se cree un programa en C (o en sf un programa de computadora en cualquier lengua), se debe seguir una Secuencia de pasos similar: 1. Determinarel objetivo de programa, 2. Determinar el método que se quiere usar para la escritura del programa. 3, Creare programa para resolver el problema. 4. Bjecatarel programa para ver lo resultados Un ejemplo de un objetivo (véase el paso 1) puede ser escribir un procesador de palabra 0 programa ease de datos. Un objetivo mucho mas simple es desplegarel nombre deuno ena pantalla, Sino se tiene un objetivo, no se pdr escribir un programa, por lo que yase tiene dado el primer paso, El segundo pasoes deerminar el méiodo que e quiere usar para a escritura del program {Se necesita un programa de computedorn para resolver el problema? Qs informacion necesita ser registrada? {Qué formulas ser4n utilizadas? Durante este paso se debe tratar de determina Io que se necesita saber y en qué orden debe ser implementad la soluc6a, Como un ejemplo, supongarnos que alguien nos pide escribir un programa para determinar el 4rea de un circulo, El paso 1 est4 completo, ya que se sabe el objetivo: determinar el érea de un circulo. El paso 2 consiste en determinar lo que se necesita saber para calcular el érea. Enestecjemplo, supongamos queel usuario el programa proporcionargelradio del circu. Sabiendo esto, se puede aplcarlafSrmula x para obtener lrespesta, Ahora seienen as piezas que se necsitan, por lo que se puede continuar alos pasos 3 y 4, que son llamados "elo de desarrollo del programa” El ciclo de desarrollo del programa Elciclo de desarrollo del programa tiene sus propios pasos. Enel primer paso seusaun editor ‘para crear un archivo de disco que contiene el cédigo fuente. En el segundo paso se compila ‘ele6digo fuente paracrear un archivo objeto. Eneltercer paso seenlazaelc6digo compilado —_______ [para crear un archivo ejecutable. Por Gltimo, el cuarto paso es ejecutar el programa para ver ‘si funciona como se plane6 originalmente. Creacién del cédigo fuente El c6digo fuente es una serie de enunciados o comandos usados para darle instrucciones a acomputadorade queejecutelastareas 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 continuaciGn se presenta una linea de c6digo fuente de C: prinef(*Helloy womt")2 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 c6digo fuente, y otros no. Consulte los manuales del compilador para ver si el compilador viene con un ‘editor. En caso de no ser asi se tienen disponibles muchos editores. ‘Lamayorfa de los sistemas de cémputo incluyen un programa que puede usarse como editor. Si se esta utilizando un sistema UNIX, se pueden usar comandos como ed, ex, edit, emacs vi. Siseestd usando Windows de Microsoft, se disponedel Notepad. Con DOS 5.0, se puede usar Edit, si se esté usando una versién de DOS anterior a la 5.0, se puede usar Edlin, ‘La mayorfa de los provesadores 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 estindar que casi cualquier programa, incluyendo el C, puede usar. La mayorfa de los procesadores de palabras, como WordPerfect, Display Write, Word y WordStar, tienen lacapacidad de guardar archivos fuente en formato ASCII (como un archivo de exto, 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 o 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 disefiadosespecificamente para teclear cédigo fuente. (Cuando se guarda un archivo fuente, se le debe dar un nombre. ;COmo debe ser lamado un archivo fuente? El nombre que se le dé al archivo debe describir lo que hace el programa, ‘Ademés, cuando se guardan archivos fuente de programas C se le debe dar al archivo una extensién .C. Aunque se le puede dar al archivo fuente cualquier nombre y extensi6n que se desee, se considera adecuado usar la extensién .C, DEBE Eee Sees Compilacién del cédigo fuente Aunque uno puede ser capaz de entender el c6digo fuente del C (;por lo menos después de Teer este libro usted serécapaz de hacerlo), a computadora no puede. Una computadora requier instrucciones digitales, obinaras,enlo qe es llamado lenguaje de eéquina. Antes dequeun programaen pueda jecuaryecn umeimiputadora, debe scr traducidodel digo fuente 2 lenguaje de miquina. Esta trduccién, 1 segundo paso en el desarolo del programa, es jecutada por unprograma llamado canpilador. compiladortomaelarchivo fel edige fuente como entrada y produce un archivoen disco que contiene la instracciones de Tenguaje de méquina que corresponden a los enunciados del c6digo fuente. Las insuruciones del lenguaje de maquina creadas por el compilador son lmaas elise objeto, y e archivo de disco que las conten, archivo objet. ‘Cada compilador requiere que se usen sus propios comandos para crear el o6digo objeto. Para compilar tipicamente se usa el comando que pone en ejecucién el compilador seguido ‘del nombre de archivo del archivo fuente. Los siguientes sn ejemplos de comandos dados pparacompilar un archivo fuente llamado RADIUS. C usando varios compiladores para DOS: Cde Microsoft cl radius.c ‘Turbo C de Borland tec radius.c (C de Borland bee radivs.¢ Ce Zortee ate radius.c Para compilar RADIUS.C en una méquina UNIX, use cco radiue.c CConsulte 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 det directoriodonde sehizo lacompilacién, se deberdencontrar unarchivo cone! mismo nombre {que el archive fuente pero con una extensién ORI (en ver. de extensién .C). La extensién OBJ es reconocida como un archivo objeto, y usada por el enlazador. En sistemas UNIX cl compilador crea archivos objeto con la extensiGn .O, en vez de la extensién .OBI. varios niveles intermedios, En los programas se debe ver cada mensaje y tomar ‘una determinacién, Siempre es mejor tratar de escribir todos los programas sin que aparezca ningtin mensaje de advertencia o de error. (Con un mensaje de error el compilador no crearé el archivo ejecutable.) ler El taller Ie proporciona preguntas que le ayudarén a afianzar su comprensién del material tratado asf como ejervicios que le darén 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 1a mejor selecci6n 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 PROGRAMI.C en su compilador? {Su compilador ejecuta el enlazado y la compilacién con un solo comando 0 se tienen que dar comandos separados? 6. {Qué extensin se debe usar para los archivos fuente del C? 7. (Bs FILENAME:TXT un nombre vélido para un archivo fuente del C? Si se ejecuta un programa que se ha compilado y né funciona como se esperaba, {qué se debe hacer? 9. (Qué es el lenguaje de méquina? 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 Jos ntimeros de linea.) 7 18 3. Finclude int radius, area; main() ( . printf( ‘Enter radius (i.e. 10): *); scanf( "td", eradius }; area = 3.14159 * radius * radius; printt( *\u\uheea = 8d", area ); return 0; Teclee y compile el siguiente programa. ;Qué hace este programa? 1 Winclude pint ys + main() { for (x= 0; x < 10; x++, printé( *\n" ) ) for (y= 0; y< peinté( °K"); yee) 1 2 3 4 5 6 1 8 9 4 v return 0; 1 BUSQUEDA DE ERRORES: El siguiente programa tiene un problema. Tecléelo en el editor y compilelo. {Qué linea genera mensajes de error? A: Hinelude Print£( *Keep looking!" }; Drintf{ *You\'11 find it! ); return 0; ‘5. BUSQUEDA DE ERRORES: El siguiente programa tiene un problema. Tecléelo en el editor y compflelo. ;Qué linea da problemas? 1: #include main() { printf( "This is a program with a * do_it( "problen!*); return 0; 1G Haga los siguientes cambios al programa del ejercicio niimero 3. Vuélvalo a ‘compilar y ejecute este programa. {Qué hace ahora el programa? printé( "8c, 1); 7. Teclee y compile el siguiente programa. Este programa puede usarse para ‘imprimir sus listados. Si se tienen errores, asegtiese 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 nimeros de linea al istado. (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®/ finclude 2 3: 4: 5: void do_heading (char *filenane) ; int Line, page: 9: main( int argv, char *argcl] ) 10: { 11: char buffer (256); 32: FILE *fpz BB: Wd: if argv <2) 5: d 19 Camienzo 1: YEprinté (stderr, *\nProper Usage is: * ); fprinté (stderr, *\n\nPRIVT_IT filenane.ext\n" }; exit (1); AL (¢ fp = Coyent acgelt), NuLL ) ( Eprint£( stderr, "Error opening file, ts!", argc[11]; » exit (Ds ) page = 0; line = 1; do_heading( arge(1}); while( fgets( buffer, 256, fp) != NULL } ( if( line $55 == 0) do_heading( argc(1} }; fprint£( stdorn, *84d:\ts*, lines+, buffer }; fprint£( stéprn, "\f* ); {close (fp): return 0; a ) void do_heading( char *filename ) t pager+: if ( page > 1) _fprintf( stdprn, *\£* ); fprint£( stdprn, *Page: 84, ts\n\n", page, filename }; ) Los componentes de un programa C (Cada programa en Cconsiste en varios componentes combinados de cierta forma. La mayor parte de este libro estd dedicada a explicar estos diversos componentes del programa y la ‘manera en que se les usa. Sin embargo, para tener la visin general se debe comenzar viendo un programa en C completo (aunque pequetio) donde se identifique a todos sus componentes. Hoy aprender Un pequeiio programa en C con la idemtficacién de sus componentes. El objeto de cada componente del programa. Q A compilar y ejecutar un programa de ejemplo, Un pequefio programa en C El listado 2.1 presenta el c6digo fuente para MULTIPLY.C. Este es un programa muy simple; todo lo que hace es recibir dos niimeros desde el teclado y calcular su producto. En este momento no se preocupe acerca de la comprensi6n de los detalles del funcionamiento del programa. Fl ahjetive es familiarizarse com las partes de un programa en C, para que se pueda tener una mejor comprensién de los listados que se presentan posteriormente en el libro. Antes de ver el programa de ejemplo, se necesita saber lo que ¢s una funcién, como las funciones son el punto medular de la programacién en C. Una funcién es una seccién independiente de cédigo de programa, que ejecuta una tarea determinada y a la que se le ha asignado unnombre. Al hacer referenciaal nombre de la funcién, el programa puede ejecutar el c6digo que se encuentra en la funcién. El programa también puede enviar informaci6n, lamada argumentos, ala funci6n, y ésta puede regresar informaciGn al programa. Los dos tipos de funciones de C son funciones de biblioteca, que son parte del paquete del compilador C. y las funciones definidas por el usuario, que, el programador, crea. Se aprenderé acerca de ambos tipos de funcion en este libro. ‘Tome en cuenta que los mimeros de linea que aparecen en el listado 2.1, asf como en todos los listados de este libro, no son parte del programa. Han sido incluidos solamente para propésitos de identificacién. ty Listado 2.1. MULTIPLY.C. 1: /* Prograna para calcular el producto de dos nimeros. */ 2: Hinclude int a,b,c; int product (int x, int y); main() a 4 5 6 7: /* Pide el primer nimero */ 8 8 i printf (*Enter a nunber between 1 and 100: *); scanf(*8d", &a); 0: /* Pide el segundo niimero */ printf (*Enter another number between 1 and 100: scanf(*#d*, &); /* Caleula y despliega el producto */ © = product (a, b); Printf (*\n8d tines td = ta", a, b, cd; /* Puncién que regresa el producto de sus dos argunentos */ int product (int x, int y) fl ) return (x * y); La salida del listado 2.1 es Enter a number between 1 and 100: 35 Enter another nunber between 1 and 100: 23 38 times 23 = 805 componentes de un programa siguientes parrafos describen los diversos componentes del programa de ejemplo janterior. Sc incluyen Jos nimeros de Tinea, para que de esta manera pueda identificar te las partes del programa que se estén uatando, a funcién main() (lineas 5-18) _EL nico componente que es obligatorio en cada programa en Ces la funci6n main ().En J su forma més simple la funcién main) consiste en el nombre naiin, seguido por un par de paréntesisvacfos ())y unparde aves ({}). Dentro de as laves se encuentran enunciados ' que forman el cuerpo principal del programa. Bajo circunstancias normales la ejecuci6n del. » ‘programa comienza con el primer enunciado demain () y termina on el tltimo enunciado de maint). a La directiva #include (linea 2) La directiva #include da instrucciones al compilador C para que afiada el contenido de tun archivo de inclusiGn al programa durante la compilacién. Un archivo de inclusi6n es un archivo de disco separado que contiene informacién necesaria para el compilador. Varios de estos archivos (algunas veces llamados archivos de encabezado) se proporcionan con el ‘compilador. Nunca se necesita modificar lainformacién de estos archivos y ésta es larazén por cual se mantienen separados del e6digo fuente. Todos los archivos de inclusién deben tener la extensi6n .H (por ejemplo, STDIO.H). ‘Se usa la directiva finclude para darle instrucciones al compilador que afiada un archivo de] inclusién especifico al programa durante la compilaci6n. La directiva #include, en este| programa de ejemplo, significa “afiada el contenido del archivo STDIO.H”. La mayorfa de los programas en C requieren uno 0 mas archivos de inclusién. Se dard iayor informaci6a| acerca de los archivos de inclusi6n que es dada en el Dfa 21, “Aprovechando las directivas| del preprocesador y més”. Definicién de variables (linea 3) Una variable es un nombre asignado a una posicién de almacenamiento de datos. El programa utiliza variables para guardar varios tipos de datos durante a ejecuci6n del programa. En C, una variable debe serdefinida antes de que pueda ser usada. Una definicidn de variable le informa al compilador el nombre de la variable y el tipo de datos que va a ‘guardar. En el programa de ejemplo la definicién de la linea 3, int a,b,c, define es variables, Hamadas a, b y c, que guardarén cada una un valor entero. Se presentard més informaci6n acerca de las variables y las definiciones de variables en el Dia 3, “Variables y constantes numéricas”. Prototipo de funcién (linea 4) Un prototipo de funcién proporciona al compilador C el nombre y los argumentos de una! funci6n contenida en el programa, y debe aparecer antes de que ia funci6n sea usada. Un| prototipo de funciénesdiferente de una definicinde funcién, que contiene lasinstrucciones| ctuales que hacen a la funcién. (Las definiciones de funcién se tratan a mayor detalle, posteriormente, en este capitulo.) Enunciados del programa (lineas 8, 9, 12, 18, 16, 17, 23) El trabajo real de un programa C es hecho por sus enunciados. Los enunciados de C despliegan informacién en la pantalla, leen entrada del teclado, ejecutan operaciones matemiticas, llaman funciones, leen archivos de disco y hacen todas las otras operaciones que un programa necesita ejecutar. La mayor parte de este libro est4 dedicada a ensefiarle Jos diversos enunciados de C. Por el momento, recuerde que en el cédigo fuente los enun- ciados de C son escritos uno por linea y siempre terminan con un punto y coma. Los. enunciados en MULTIPLY.C se explicaran brevemente en las siguientes secciones.. | printfQ) El enunciado printf () (lineas 8, 12 y 17) es una funcién de biblioteca que desplie; informacién en la pantalla, El enunciado print ¢() puede desplegar un simple mensaje. a texto (tal como sucede en las Iineas 8 y 12) 0 un mensaje y el valor de una o mAs variables del programa (tal como sucede en la linea 17). seanf() = Elenunciado scanf () (Iineas 9 y 13) es otra funcién de biblioteca. Ella lee datos desde el teclado y asigna los datos a una o més variables del programa, - ¢ = product (a,b); Este enunciado del programa llama a la funcién denominada product). Estoes, ejecuta los enunciados de programa contenidos en la funci6n product(). También envfa los argumentos ay ba la funci6n. Después de que se completa la ejecucién de los enunciados que se encuentran en product), product () regresa un valor al programa. Este valor es guardado en la variable llamada c. return (x *y); Este enunciado es parte de la funcién product (). Este calcula el producto de las variables XY y,y fegresa el resultado al programa que llam6 a product (). Definicién de funciédn (lineas 21-24) Una funcién es una seccién de c6digo independiente y autocontenida que es escrita para ejecutar determinada tarea. Cada funciGn tiene tn nombre, y el cOdigo de cada funcién es ¢jecutado, incluyendo el nombre de la funcién, en una instruccién de programa. A esto se Te llama Hamado de la funcién. La funcién denominada product (), que se encuentra en las ineas 21 a 24 en el listado 2.1, ‘es una funcién definidapor el usuario. Tal como lo indica sunombre, las funciones definidas por el usuario son escritas por el programador durante el desarrollo del programa. Esta funci6n es simple, ya que todo lo que hace es multiplicar dos valores y regresar la respuesta al programa que la llam6. Enel Dia 5, “Funciones: lobésico”, aprenderé que el uso adecuado de las funciones es una parte importante de la programacién correcta en C. ‘Tome en cuenta que en un programa real en C probablemente no usaré una funci6n para una tarea tan simple como la multiplicacién de dos méimeros. Aqui Io hacemos solamente para efectos de demostracién: ELC también incluye funciones de biblioteca que son parte del paquete del compilador C. Las funciones de biblioteca ejecutan la mayorfa de las tareas comunes (como la entrada/ salidade lapantalla,elteclado y disco) quenecesitael programa. Enel programade ejemplo, printf () y scant) son funciones de biblioteca. yy a Los componentes de un programa C Comentarios del programa (lineas 1, 7, 11, 15, 20) Cualquier parte del programa que comicnza con /* y termina con */ es llamado un comentario. El compilador ignora todos los comentarios y, por lo tanto, no tienen ningiin efecto sobre la manera en que funciona el programa. Se puede poner lo que se quiera en un ‘comentario, yesto no modificaréla maneraen que trabajael programa. Un comentario puede ‘ocupar parte de una linea, una linea completa 0 varias lineas. Algunos ejemplos son J* un comentario de una sola linea */ int a.bsez /* Un comentario de una Linea parcial */ un ‘comentario de varias ineas */ ‘Sin embargo, nose deben usar comentarios anidados (Io que significa que no se debe incluir ‘un comentario dentro de otro). La mayoria de los compiladores no aceptarén lo siguiente: , 7* Conentario anidado */ "1 ‘Sin embargo, algunos compiladores sf permiten los comentarios anidados. Aunque esta caracteristica puede ser tentadora, le sugerimos que la evite. Como uno de Ios beneficios del Ces su portabilidad, usar una caracteristica como los comentarios anidados puede limitar aportabilidad del e6digo. Los comentarios anidados también pueden dar lugar a problemas dificiles de encontrar. Muchos programadores novatos consideran innecesarios los comentarios de programa y creen que son tna pérdida de tiempo, ;Estees un error! La operacién del programa puede ser muy clara cuando se esti escribiendo, en particular cuando se escriben programas simples, Sin embargo, conforme se van haciendo mAs grandes y mis complejos, o cuando 20 necesita modificar un programa que se escribié hace seis meses, considerars que lo= ‘comentarios son muy valiosos. Este es el momento para desarrollar el habito de usar ‘comentarios libremente, para documentar todas las estructurasy operaciones de programa. NO DEBE “ on > Llaves (lineas 6, 18, 22, 24) Se usan Haves ({}) para agrupar las Iineas de programa que forman cada funcién de C, {ncluyendo la funcin nain().Un grupode unoomés enunciados encerrados dentro dellaves ¢s llamado un logue. Como vers en los capitulos siguientes, el C tiene muchos usos para Jos blogues. Ejecucién del programa Ahora tome su tiempo para teclear, compilar y ejecutar a MULTIPLY.C. Proporciona prdctica adicional sobre el uso del editor y el compilador. Recuerde estos pasos que se mencionaron en el Dia 1, “Comienzo”. exe woe 6. Haga al directorio donde va a programar el directorio de trabajo. Inicie el editor. ‘Teclee el e6digo fuente para MULTIPLY.C, exactamente como se muestra en el listado 2.1, pero omita los ntimeros de linea. Guarde el archivo de programa Compile y enlace el programa, dando los comandos adecuados para el ‘compilador. Si no aparecen mensajes de error, se puede ejecutar el programa tecleando MULTIPLY en Ia linea de comandos. Si aparece uno o més mensajes de error, regrese al paso 2 y corrija los errores. Una nota sobre la precisién Una computadora es répida y precisa, pero también es completamente literal. No sabe lo suficiente paracorregirel més simple error. Toma todo al pie dela letra y nocomo se lequiso decir! Los componentes de un programa C Esto también se aplica al o6digo fuente C. Un simple error de tecleo en el programa puede hacer que el compilador Cfalle. Afortunadamentc, eunguccl compiladorno slo suficiente- mente listo para corregir los errores(y usted cometerd errores, jtodo el mundo To hace!), es Jo suficientemente listo para reconocerlos como errores y eportarlos, La manera en que el compilador reporta los mensajes de error y la forma de interpretarlos, fue tratada en el Dia 1, “Comienzo”. Revisién de las partes de un programa Ahora que han sido descritas todas las partes del programa, usted deberd ser capaz.de ver cualquier programa y encontrar algunas similitudes. Examine el listado 2.2, LIST_IT.C y vvea si puede identificar las diferentes partes. al Listado 2.2. LIST_IT.C. Hinclude void display_usage(void) : int Line; 6 ve" min int av, char satuet]) char buffer(256); FILE *fpr itt argv <2) { Gisplay_ueagel) exit (i)? ) Af (( fp = fopen( argelil, ( D) == NULL) exit (1); while( foets( buffer, 256, fp) != NULL) fprintf( stdout, *4d:\tts, Liners, buffer ); /* LIST_IZ.C = Este prograna despliega un Listado con nineros de 1inea */ fprintf( stderr, *Brror opening file, ts!*, arge[1) }; be felose (tp): lz return 0; void display_usage(void) ee fprint£ (stderr, *\nProper Usage is: * ); fprinté (stderr, *\n\nLISt_IT filename.extin* }: Poatinuacion se presenta la salida del listado 2.2 B:\wlist, 1: /* LIST_IT.c - Este prograna despliega un listado con nimeros de Linea */ 2: include 3 4: void display usage{void) ; si 6: int Line; 7 8: main( int argv, char *arge(} ) a u char buffer (2561; i: FILE ‘fp x 1 if( argv <2) wd 4 15: display_usage() + ou exit (17 cH ? 18: 19: if (( fp = fopen( argc[1], ‘rt }) == MULL} 20: { ai: fprintf( stderr, “Error opening file, ts!*, ‘argelt] Ir exit (1) ) Line = 1; while( fgets( buffer, 256, fp ) != MULL ) fprintf( stdout, “td:\t¥st, liners, buffer ); felose(tp): return 0; ) void display_usage (void) i | 2s | | Los componentes de un programa C 26 fprintElotdoes, "\nproper Usage ie: +): u fprintf(stderr, “\a\nlist_I? fllename.ext\n* ); 38 } LIST_IT.Cees muy similar a PRINT_IT.C, que se tecleé en el ejerccio siete del ‘Dia 1, “Comienzo”, Ellistado 2.2 despliega en la pantalla listados de programas ‘C guardados, en vez de enviarlos a la impresora. ‘Viendo el listado se puede resumir dénde se encuentran las diferentes partes. La funcién ‘obligatoria nain() se encuentra en las lineas 8-32. En la linea 2 se tiene una directiva ‘include. Las lineas 6, 10, 11 tienen definiciones de variables. Un prototipo de funcién, void display_usage(void), se encuentra en la linea 4. Este programa tiene muchos ‘enunciados (lineas 13, 15, 16, 19, 21, 22, 25, 27, 28, 30, 31, 36 y 37). Una definicion de funcién para a:zpley_veage() ocupa la linens 34.38 1. lavesencierran Bloques por todo elprograma, Por tltimo, sélola linea | tiene un comentario. jEnla mayoria de los programas. probablemente incluiré més de una linea de comentarios! LIST_IT.C llama muchas funciones. Solamente ama una funcién definida por el usuario, isplay_usage (). Las funciones de biblioteca que usa son exit () en las lineas 16 y 22, foen|) enlalinea 19, princt () enlas|ineas?1, 28, 36y37, fgets () enlalinea 27 fclose ) cela linea 30, Estas funcionesde biblioteca s tratarén amayor detalle alo largo de eete libro. Resumen Exe capitulo es corto pero importante, como presenta los componentes principales de un pprogramaC. Enél se aprendié quelatinica parte obligatoria de cada programa Cesla funcién znain'). También se aprendis que el trabajo real del programa es hecho por enunclados del ‘programa, que le dicen a la computadora que ejecute las acciones deseadas. Este capitulo ‘también presenta las variables y definiciones de variables, y muestra cémo usar comentarios ‘en el e6digo fuente. ‘Ademés dela funcién nain() unprogramaen C puede usar dos tipos de funciones auxiliares: funciones de biblioteca, proporcionadas como parte del paquete del compilador,y funciones definidas por el usuario, creadas por el programador. Preguntas y respuestas 1. {Qué efecto tienen los comentarios en un programa? Los comentarios son para el programador. Cuando el compilador convierte el ‘ebdigo fuente a cédigo objeto desecha los comentarios y espacios en blanco. Esto significa que ellos no tienen efecto en el programa ejecutable, Los comentarios 30 hacen que el archivo fuente sea més grande, pero por lo general esto no tiene importancia. Resumiendo, se deben usar comentarios y espacios en blanco para ‘que sea fécil, en la medida de lo posible, la comprensién y el mantenimiento del c6digo fuente. Cual es la diferencia entre un enunciado y un bloque? Un bloque es un grupo de enunciados encerrados dentro de Haves ({}). Un bloque puede ser usado en muchos lugares donde puede ser usado un enunciado. 3. 4Cémo se sabe cudles funciones de biblioteca estén disponibles? | » | F Lecmsgect ds es compildons van corn nual doco especificamente } ala documentacin de las funciones de biblioteca Por lo general, venen en orden | _alfabético. Otra manera de conocer las funciones de biblioteca disponibles es } comprar un libro que las liste. El apéndice E, “Prototipos de funcién y archivos de | encaberado’ el apéndiceF, “Fanciones comunes en orden fabio” stan as | funciones por categoria y, desde luego, en orden alfabético,respectivament. + Después de que comience a entender més del C, es buena idea leer estos | apéndices para que no reescriba una funcién de biblioteca. (jNo vuelva a inventar elhilo negro!) ller taller proporcionan cnestionario que le ayudaré a reafirmar su comprensiGn del material ado ast como ejercicios para darle experiencia en el uso de lo que ha aprendido. lestionario 1. ¢Cémo se llama a un grupo de uno o més enunciados del C encerrados entre Mlaves? {ual es el nico componente obligatorio de todo programa en C? 4Cémo se afiaden comentarios al programa y para qué se usan? awn {Qué es una funcién? ELC proporciona dos tipos de funciones. ;Qué son y c6mo se diferencian? Para qué se usa la directiva tinclude? 4Se pueden anidar los comentarios? ea ay iLos comentarios pueden ser més grandes que una linea? » {Qué otro nombre se le da a los archivos de inclusién? 31 Los componentes de un programa C 10. ,Qué es un archivo de inclusién? Ejercicios 1. Escriba el programa mas pequefio posible. 2. Usando el siguiente programa, conteste las preguntas: a, {Qué Ifneas contienen enunciados? b. {Qué Iineas contienen definiciones de variables? c. {Qué Ifneas contienen prototipos de funcién? d. {Qué Iineas contienen definiciones de funcién? ©. {Qué lineas contienen comentarios? ts /* Ex2-2.0 +7 2: Hinclude 3 th void display_line(void); 5 6: main() 1 ( 8: display_tine(); 9. printé(*\n Teach Yourself C In 21 Days!\n"); display_line(}; return 0; n) : /* Imprime una linea de asteriscos */ void display_line(void) £ int counter; for( counter printé(*** 0; counter < 21; counter++ ) /* Fin del programa */ 3. Escriba un ejemplo de un comentario. 32 4. {Qué hace el siguiente programa? (Tecléelo, compilelo y ejecttelo.) J Bx2-4.0 2: Hinelude 3: include 4: main() 5 6: char bulfer{2561: A 3 1 1 printf ( ‘Enter your nane and press :\n") gets( buffer ); 1: printf( *\nYour name has #4 characters and spaces!” strlen( buffer }); 33 “i Variables y constantes numéricas Los programas de computadora trabajan, por lo general, con diferentes tipos de datos, y necesitan una manera para guardar los valores que estin usando. Estos valores pueden ser ‘nimeros 0 caracteres, EL tiene dos maneras de guardar valores numéricos, variables y ‘constantes, con muchas opciones para cada una de ellas. Una variable es una posicién de ‘almacenamiento de datos que tiene un valor que puede ser cambiado durante Ia ejecucién ‘del programa, Por el contrario, una constante tiene un valor fijo que no puede cambiar. Hoy aprender (Q Cémo crear nombres de variables en C. Q E1uso de diferentes tipos de variables numérica. Q La diferencia y similitd entre caracteres y valores numéricos. La manera de declarar¢ iniciar variables numérica. 1 Los dos tipos de constantes numéricas del C. ‘Sin embargo, antes de entrar ls variables se necesita saber un poco acerca de Ia operacién de la memoria de Ia computadora. Memoria de la computadora ‘Siusted ya sabe c6mo funciona la memoria de la computadora, se puede saltar esta secci6n. Sin embargo, sino esté seguro, por favor Iéala. Esta informaciGn ayudard a comprender ‘mejor ciertos aspectos de Ia programacién en C. La computadora usa memoria de acceso aleatorio (RAM) para guardar informacién mientras esté funcionando. La RAM se encuentra en citcuitos integrados @ chips en el interior dela computadora. La RAM es voldtil,loque significa que es borrada y reemplazada ‘con nueva informacién tan pronto como se necesita. La volatilidad también significa que la RAM “recuerda” solamente mientraslacomputadoraestdencendida, ypierde su informacién ccuando se apaga la computadora. ‘Cada computadora tiene una determinada cantidad de RAM instalada. La cantidad de RAM cen un sistema se espocificn, por lo general, en ilabytae (K), como por ejemplo, 256 K, 51? K (0 640 K. Un kilobyte de memoria consiste en 1,024 bytes. Por lo tanto, un sistema con 256 K de memoria de hecho tiene 256 veces 1,024 6 262,144 bytes de RAM. La RAM también es mencionada en megabytes. Un megabyte equivale a 1,024 kilobytes. Un byte es la unidad fundamental del almacenamiento de datos dela computadora. EI Dia 20, “Otras funciones", tiene mis informacién acerca de los bytes. Sin embargo, por él ‘momento, para darse una idea de qué tantos bytes se necesitan para yuardar determinados tipos de datos, puede ver la tabla 3.1 ———— ‘Tabla 3.1. Espacio de memoria requerido para guardar datos. Tatar Bytes requaridos Taletrax 1 EI nimero 100 2 El ndmero 120.145 4 La frase Aprenda usted mismoC 22 ‘Una pagina eserita a méquina 3000 (aproximadamente) LaRAMenlacomputadoraesté organizada en forma secuencial, unbytetras otro. Cadabyte ‘de memoria tiene una direccin Gnica mediante la cual es identificado, una direccién que también lo distingue de todos los otros bytes de la memoria, Las direcciones son asignadas ‘ala memoria en orden, comenzando en 0 y aumentando hasta egar al Iimite del sistema, Por el momento no necesita preocuparse acerca de las direcciones, ya que son manejadas ‘autométicamente por el compilador C. {Para qué se usa la RAM de la computadora? Tiene varios usos, pero solamente uno, el almacenamiento de datos, le interesa al programador. Los datos significan la informacién. ‘con Ia cual trabaja el programa en C. Ya sea que el programa esté trabajando con una lista, de direcciones, monitoreando la bolsa de valores, manejando un presupuesto familiar 0 ‘cualquier otra cosa, la informacién (nombres, precios de acciones, gastos © lo que sea) es ‘guardada en la RAM de la computadora mientras el programa esté ejecutando. [ .. | ‘Ahora que ya entiende un poco acerca del almacenamiento de memoria, podemos regresar ala programacién en C y la manera en que el C usa la memoria para guardar informacién. Variables Una variables una posici6a de slmacenamiento de datos dela memoria de lacomputadora 4uetiene un nombre. Alusar un nombrede variable en el programa de hecho seestéhaciendo referencia al dato que se encuentra guardado abi i Nombres de variable Para usar variables en los programas en Cse debe saber cémo crear nombres de variables. En C, los nombres de variables se deben ajustara las siguientes relas: Bi nombre puede contener letras, dgitosyelcardcter de subrayado (). 37 Variables y constantes numéricas QE primer cardcter del nombre debe ser una letra. El cardcter de subrayado también es un caréctr inicial aceptado, pero no se recomicnda su uso. O Tiene importancia el uso de maytigcalas x aniniscalas. Por lo tanto, los nombres contador y Coritador hacen referencia a dos variables diferentes. Las palabras claves del C no pueden usarse como nombres de variable. Una palabra clave es una palabra que es parte del lenguaje C. (Una lista completa de las 33 palabras claves del C esté en el apéndice B, “Palabras reservadas del C.) Elsiguiente édigocontiene algunos ejemplos denombrerde variabledeC legales. ilegales: porcentaje 1+ Yegal +7 yox5_sg7h 72 Yegal +7 Utilidadesanuales —/* legal */ -1980_tax 7 Legal pero no recomendable */ Suentatgas 7 legal: contiene el cardcter ilegal # */ double / ‘egal: es una palabra clave del C */ winter 4 ilegal: el priner carécter es un dfgito */ Debido a que el C toma en cuenta las maydsculas y las mingsculas, los tres siguientes nombres, porventaje, 20xCHNTAJE_y Porcentaje, se considera que hacen referencia a tres variables distinas. Los programadares de C, por lo general, usan solamente mindsculas eo los nombres de variable, aunque noes obligatorio. Las maydsculas se reservan por lo general para los nombres de constantes (tratadas posteriormente, en este capitulo). Para muchos compiladores un nombre de variable de C puede ser hasta de 31 caracteres de largo. (De hecho, pueden ser més largos que esto, pero el compilador solamente toma en cuenta los 31 primeros caracteres del nombre.) Con esta flexibilidad se pueden crear nombres de variable que reflejen los datos que estén siendo guardados. Por ejemplo, un programa que calcula los pagos de un préstamo puede guardar el valor de la tasa de interés, fen una variable Hamada tasa_interés. El nombre de variable ayuda a aclarar st uso. ‘También se podria haber creado un nombre de variable como x 0 juan_pere2, ya que no le importa al compilador de, Sinembargo,elusodela variable no ser tan claro paracualquier otra persona que vea el oSdigo fuente. Aunque puede levar algo més de tiempo teclear nombres de variable descriptivos, lamejoraen claridad del programa hace que valgala pena, ‘Se usan muchas convenciones de denominacién para los nombres de variables creados con varias palabras. Ya ha visto un estilo: asa_interés. Al usar un cardcter de subrayado para separar palabras en los nombres de variable se facilita la interpretaciGn. El segundo estilo es la notacién de camello. En vez de usar espacios, se pone en mayiscula la primera letra dde cada palabra, En vez de casa_interés, la variable serfa nombrada Tasainterés. La notacién de camello'esté ganando popularidad, ya que es mds fécil teclear una maydscula {que un subrayado, Usaremos el subrayado en este libro, porque es més facil de leer para la ‘mayoria de la gente. Usted decidird cusl estilo prefiere adoptar. p 8) 9333 NO DEBE Tipos de variables numéricas EI C proporciona varios tipos diferentes de variables numéricas. ;Para qué se necesitan diferentes tipos de variables? Diferentes valores numéricos tienen requisitos de almacenamiento de memoria variables, differen eulafacilidad von que vestas operaciones ‘mateméticas pueden ser ejecutadas con ellos. Los mimeros enteros pequefis (por ejemplo, 1, 199, 8) requieren menos espacio de memoria para almacenamiento, y las operaciones ‘matemiticas (uma, multiplicacin, et.) conesosmimeros pueden serrdpidamente ejecutadas por la computadora . En contraste, los enteros argos y los valores de punto flotante (123,000,000 0 0.000000871256, por ejemplo) requieren més espacio de almacenamiento ‘ymis tiempo para ls operaciones matemiticas. Usando los tipos de variables adecuados se ‘asegura que el programa cjecuta lo més cficientemente posible. 1Las variables numéricas del C caen en las siguientes dos categorias principales: Las variables enteras guardan valores que no tienen fracciones (esto es, solamente indimeros enteros). Las variables enteras son de dos tipos: las variables enteras con signo pueden guardar valores positivos 0 negativos, y en cambio las variables centeras sin signo solamente pueden guardar valores positivos (y 0, por supuesto). Las variables de punto flotante guardan valores que tienen fracciones (esto es, ‘nimeros reales) Dentrode estas categorfas se encuentran dos om tipos especificos de variables. Elos estén ‘esumidos en la tabla 3.2, que también muestra la cantidad de memoria en bytes que se ‘equiere para guardar una sola variable de cada tipo cuando se usa una microcomputadora con arquitectura de 16 bits. (al 39 Variables y constantes numéricas ‘Tabla 3.2. Tipos de datos numéricos del C. Bytes ‘Tipo de variable __Palabraclave __requeridos_Rango Carketer chat 1 “128 127 Eutero int 2 32768 3 32767 Enero corto short 2 32768 032767 nto largo tong 4 -2,147,483,648, 22,147,483,647 CCarécter sin signo unsigned char 1 00255 Enero sin signo unsigned int 2 0.265535 Entero corto sin signo unsigned sho’ 2 0.265535 nero largo sin signe wusigued long 4 024,294967,295 Punto flotnte de ‘float 4 1.26-38 a 34538" precisin sencilla Punto flotante de double 8 2.2E-308 a 1.8E308* doble prevsisn + Rango aproximado; precision = 7 digits. 2 Rango aproximado; preisiGn = 19 digitos. 1rango aproximado (véase la tabla 3.2) significa os valores maximo y minimo que puede guardar una variable dada. (Las limitaciones de espacio impiden lstar los rangos exactos para los valores de cada una de estas variables.) Precisién significa la cantidad de digitos, con los cuales es guardada la variable. (Por ejemplo, si se evalia 1/3, Ia respuesta es 0.33333... con un alimero de 3 hasta el infinito. Una variable con precisi6n de 7 guarda siete ‘imeros 3.) ‘Alverla tabla 3.2 puede darse cuenta de que los tipos de variable int y short sonidénticos. tor qué tienen dos tipos diferentes? Los tipos de variable int y short son idénticos ‘solamente en los sistemas compatibles con la PC de IBM de 16 bits, pero pueden ser diferentes en oto tipo de hardware. En un sistema VAX, un short y un int. no son del ‘mismo tamafio. En este caso, un short es de dos bytes y un int es de cuatro. Kecuerde que elCesunlenguaje flexible y portable, porloque proporciona diferentes palabras claves para los dos tipos. Si se est trabajando en una PC se puede usar int. y short: indistintamente. ee ‘No se necesita palabra clave especial para hacer que una variable entera tenga signo, ya que nen signo. Sinembargo, se puede incluirla palabra clave signed si se desea. Las palabras claves de la tabla 3.2 son usadas en las declaraciones de Jas variables enteras por om ' variable que se tratan en la siguiente seccicn de este capitulo. 16: a 18: 1a: 20) ai Como muestra lo siguiente, a sada del listado 3.1 le dice exactamente qué tantos bytes ccupa cada tipo de variable en una computadora en particular. Si se esté usando una PC de ip Hinclude "\Mk char is 8d bytes", sizeof( char )) ‘\min int is td bytes", sizeof( int }); “\nk short is $d bytes", sizeof short )); S\nk long is # bytes", sizeof( long )); \ndn unsigned char is td bytes", sizeof( unsigned char )) ‘\nAn unsigned int is td bytes", sizeof( unsigned a *\nAn unsigned short is td bytes", sizeof{ unsigned shor’ *\nin unsi long ) "\nk float is 0 bytes, sizeof{ float }); *\nk double is #d bytes, sizeof double )}; long is td bytest, sizeof unsigned 0; 16 bits, las cifras deben coincidir con las que se presentan en la tabla 3.2 A char An int, B short 4 long An unsigned An unsigned An unsigned is 1 bytes is 2 bytes is 2 bytes is ¢ bytes char is 1 bytes int is 2 bytes, short is 2 bytes, a a Variables y constantes numéricas ‘An unsigned long is ¢ bytes Afloat ie ¢ bytes Rouble ip # bytes al No se preocupe en tratar de comprender todos los componentes individuales det programa. Aunque algunos conceptos son nuevos, como sizeof (), otros deben serle familiares. Las lineas 1 y 2 son comentarios acerca del nombre del programa y una breve descripcién. La nea 4 incluye el archivo de encabezado estindar de entrada/ salida, para ayudarle a imprimir la informacién en la pantalla. Este es un programa simple, ya que s6lo contiene una sola funci6n, main() (lineas 7-21). Las Ineas 9-18 son el euerpo {el programa. Cada una de estas lineas imprime un texto de descripcién con el tamatio de cada uno de los tipos de variable, lo cual se logra usando el operador sizeof. El Dfa 19, ““Exploracién de la biblioteca de funciones”, trata a deta al operador sizeof. La linea 20 del programa regresa el valor 0 al sistema operativo antes de terminar el programa. ELC garantizaciertas cosas gracias al estindar ANST. Hay cinco cosas con las que se puede ccontar. OQ Et tamafo de char es 1 byte. Ci Bl amato de n store es menor qu o igual al tematic de ua int. D Bltamato de un int es menor que o igual al tama de un 2009. 2 Eltamato de un snsioned es igual al tamafo de un int. Eltamaio de un float es menor que o igual al tama de un double Declaracién de variables Antes de que pueda usar una variable en un programa C debe declararla. Una declaracién de variable le informa al compilador el nombre y tipo de la variable, y opcionalmente inicia Ta variable a un valor especifico, Si el programa trata de usar una variable que no ha sido declarada, el compilador genera un mensaje de error. Tina declaracién de variahle tiene Ia siguiente forma: snosbre de tipo nombre de variable: snonbre'de tipo especifica el tipo de la variable y debe ser una de las palabras claves dadas enlatabla3.2. naabre de variableesel nombre de a variable, que debe ajustarse alas eglas ‘mencionadas anteriormente. Se pueden declarar varias variables del mismo tipoenunalinea, separando los nombres de variable con comas. int contador, nimero, inicio: J tres variables enteras */ Eloat porcentaje, total; /* Gos variables flotantes */ Enel Dia 12, “Alcance de las variables”, aprendera que la posicién de la declaracién dela ‘Variable dentro del cédigo fuente es importante, debido a que afecta la manera en la que el_, _—_________ wi et ° ' ‘programa usa las variables. Porel momento, puede poner todas las declaraciones de variable juntas, inmediatamente antes del comienzo de la funcién nain{). La palabra clave typedef Lapalabraclave typedet esusada paracrear unnuevo nombre paraun tipode dato existente, De hecho, typedef crea un sinénimo, Por ejemplo, el enunciado typeder int entero: ‘seca entero como un sindnimo de int. Luego puede usar entero para definir variables de tipo ine, entero contador; ‘Tomeen cuentaque typedef nocrea un nuevo tipo de dato, sino que solamente permite usar unnombre diferente para un tipode dato predefinido. Eluso miscomtinde typedef serefiere «los tipos de datos agregados, que son explicados en el Dia 11, “Estructuras”. Un tipo de dato agregado consiste en una combinacién de los tipos de datos pieseutaduseneste capitulo, Inicializacién de variables numéricas ‘Cuando se declara una variable, se le da instruccin al compilador para que reserve espacio 3.141597 const long deuda ="12000000, float tasa_inpuesto = const afecta a todas las variables de la linea de declaracién. En el iltimo ejemplo deuda y tasa_imouesto son constantes simbdlicas. Si el programa trata de modificar una variable ‘const, el compilador genera tn mensaje de error. Por ejemplo, 21: [| ar 48 Variables y constantes numéricas const int contador contador ~ 200 J Mio compili 100; No se puede reasignar 0 alterar el valor de una constante. */ {Cuil es la diferencia préctica entre las constantes simb6licas creadas con la directiva, ‘efine y las creadas con la palabra clave const? Las diferencias tienen que ver con los apuntadores y el alcance de las variables. Los apuntadores y el alcance de las variables son ddos aspectos muy importantes de ia programacién de C, y son tratados en los Dias 9 y 12, “Apuntadores” y “Alcance de las variables”, respectivamente. ‘Veamos ahora un prugtaima que nuestra las declaraciones de variables y eluso de constantes literales ysimblicas. Elcddigo que seencuentra nel listado3.2 le pide al usuarioque teclee ‘su peso en libras y cl aiio de nacimiento. Luego calcula y despliega el peso del usuario en ‘ramos y la edad que tendré en el aio 2000. Se puede teclear, compilar y ejecutar este programa usando los procedimientos explicados en el Dia 1, “Comienzo”. Listado 3.2. Un programa que muestra el uso de variables y constantes. 7* Wuestra las variables y constantes */ include /* Define una constante para convertir Libras a granos */ ‘define GRANS_PER_POUND 454 /* Define una constante para el comienzo del siguiente ciclo */ const. int NExT_cewrURY = 2000; (* beclata las variables necesarias */ ong weight_in_arans, weight_in_pounds; int year_of_birth, age_in_2000; main() ¢ /* Recibe entrada de datos del usuario */ print (Enter your weight in pounds: *) scané("8d", kweight_in_pounds): printf ("Enter your year of birth: *); Scanf(*8d", eyear_of birth) /* Bjecuta conversiones */ weight_in_grans = welght_in_paunds * GRAMS_PER_POUND; age_in_2000 = NEKT_CENTURY > year. of birth /* Despliega los resultados en la pantalla */ printf (*\nYour weight in grans = #1é", weight_in_grams); rint£(*\nIn 2000 you will be 8d years old", ‘age_in_2000); eee return 0: El listado 3.2 produce la siguiente salida: ncer your weight in pounds: 175 Enter your year of birth: 1960 Your weight in grana = 12014 1m 2000 you will be 40 year old El programa declara los dos tipos de constantes simbélicas en las lineas 4 y 6. Ba la nea 4 es usada una constante para hacer més comprensible al valor 454, Debido a que usa canns_Pei_POUND lalinea 23 es entendible. Las lineas 8 9 declaran Jas variables usadas en el programa. Observe el uso de nombres descriptives, como eight inarans Tayendo su nombre se ve para qué se usa esta variable. Las Kneae 16 y 18 imprimen mensajes en la pantalla. U's funciGn print ®{) se trata a mayor detalle Posteriormente. Para permitir que el usuario responda alos mensajes, las ineas 17 y 19 usan otrafuncidn debiblioteca, scant () ,quese rataposteriormente. scant |) obtiene informacion. delteclado. Por ahora, acepte queesto funciona como se muestraenel istado. Posteriormente aprenderd exactamente c6mo funciona. Las lineas 23 y 24 calculan el peso del usuario en _gramos y laedad que tendré en el fio 2000. Estos y otros enunciados sern tratados adetalle cl dia de mafana. Para terminar el programa, las lineas 28 y 29 despliegan el resultado. Resumen En este capitulo se han explorado las variables numéticas que son usadas por un programa ‘en para guardar datos durante laejecucién del programa. Se ha visto que hay dos amplias clases de variables numéricas, enteras y de punto flotante. Dentro de cada clase hay tipos especificos de variables. El tipo de variable, inc, ong, flost o double, que se use para tuna aplicacién especifica, depende de Ia naturaleza de los datos que serén guardados en la variable, También se vio que en un programa C se debe declarar a una variable antes de que pueda ser usada, Una declaracidn de variable le informa al compilador sobre el nombre y el tipo de ta variable. | = | 49 “Bi Variables y constantes numéricas Este capftalo también ha tratado dos tipos de constantes del C, lterales y simbélicas. A. diferencia de las variables, el valor de una constante no puede ser cambiado durante 1a e|jecucidn del programa, Se teclean constantes literales en el cédigo fuente cada vez que se necesiteel valor. Las constantes simbdlicas tienen un nombre asignado aellas, que es usado ceada vez que se necesita el valor de la constante. Las constantes simbélicas pueden ser ‘readas con la drectiva Naef ine 0 con la palabra clave const. Preguntas y respuestas 1. Las variables long int guardan nmeros més grandes; entonces, ,por qué no ‘usarlas siempre en vez de las variables int? Una variable Long int ocupa més RAM que la int, que es més pequefia Fn programas pequefios esto no da problema, Sin embargo, conforme los programas. se hacen més grandes, hay que tratar de ser eficienteen el uso de memoria, 2. {Qué pasa si asigno un nimero con un decimal a un entero? ‘Se puede asignar un ndimero con un decimal a una variable int. Si se esté usando ‘una variable constante el compilador probablemente le dard un aviso de precaucién. El valor asignado tended truncada la porcién decimal. Por ejemplo, si se asigna 3.14 a una variable entera llamada pi, pi contendra solamente 3, El 14 serd truncado y desechado, 3, ;Qué pasa si pongo un niimero en un tipo que no es lo suficientemente grande ‘como para guardarlo? "Muchos compiladores permitiran esto sin indicar un error. Sin embargo, cl rimero es acomodado para que quepa y es incorrecto, Por ejemplo, si se asigna 32768 a un entero con signo de dos bytes, el entero en realidad contiene el valor 32768, Si se asigna el valor 65535 a este entero, en realidad contiene el valor -1. ‘El restar el valor méximo que el campo pueda contener, por lo general le da el valor que serd almacenado. 4. {Qué pasa si pongo un niimero negativo en una variable sin signo? Como se indicé en el ejemplo anterior, el compilador tal vez no marque ningin error si se hace esto, El compilador hace el mismo ajuste que cuando se asigna un ‘imero que es demasiado grande. Por ejemplo, si se asigna -1 a una variable int {que es de dos bytes de longitud, el compilador pondré el nimero mayor posible en Ia variable (65535). 5. {Cual es la diferencia préctica entre las constantes simbélicas creadas con la ‘irectiva ¥detine y las creadas con la palabra clave const? 50 CEEEEEEEEEEE-PFEPPEPP gg La diferencia tiene que ver con los apuntadores y el alcance de la variable. Los apuntadores y el alcance de la variahle son dos aspectos muy importantes de la rogramacién en C, y son tratados en los Dias 9 y 12, “Apuntadores” y “Alcance de las variables”, respectivamente. Por el momento, basta saber que usando ‘4def ine para crear constantes se logra que los programas sean més féciles de leet. bller * aticeproporcione /cuestionario que le ayudara a reatirmar su comprensién del material tratado y ejercicios para darle experiencia en el uso de lo que ha aprendido. Cuestionario 1. {Cudl es la diferencia entre una variable entera y una de punto flotante? ie | 2. Dé dos razones para usar una variable de punto flotante de doble precisién (tipo Gouble) en vez de una variable de punto flotante de precisién sencilla (tipo float). 3. {Cuéles son las cinco reglas que indica el estandar ANSI que siempre serén ciertas cuando se ubica espacio para las variables? 4. (Cudles son las dos ventajas de usar una constante simbélica en ver. de una literal? 5. Muestre dos métodos para definir una constante simbélica llamada wax1¥UX y que tenga un valor de 100. 6. {Qué caracteres son permitidos en los nombres de variables del C? 7. {Qué reglas hay que seguir para la creacién de nombres para variables y constantes? 8, (Cua es la diferencia entre una constante simbélica y una literal? 9. {Cual es el valor mfnimo que puede contener una variable de tipo int? ijercicios 1, {Qué tipo de variable seria més adecuado para guardar los siguientes valores? 4. Laedad de una persona redondeada a ais. . El peso de una persona en libras, €. El radio de un eireulo, 4. Su salario anual. Bt Variables y constantes numéricas €. Bl costo de una cosa. La calificaci6n méxima de un examen (suponga que es siempre 100). ‘e-La temperatura, h. El valor neto de una persona i. La distancia a una estrella, en mila. 2. Determine nomhees de variahle adecnadas para los valores del ejercicio 1 3._Eseriba declaraciones para las variables del ejercicio 2 4. {Cuales de los siguientes nombres de variable son vlidos? a. 123variable be x cc. anotacién_total 4. Peso_en_ts £. costo-bruto 9. RADIO b. Radio i. radio i ésta_es_una _variable_para_guardar_el_ancho_de_una_caja 52 r “i Enunciados, expresiones y operadores Los programas de C consisten en enunciados, y la mayorfa de ellos estén compuestos de expresiones y operadores, Senecestacomprenderests tes temas parasercapazdeescribir programas en C. Hoy aprenderé Lo que es un eaunciado, 1 Lo quees una expresion Los operadores matemiticos, relacionales y Iépicos del C. Qué es a precedencia de operadores 1 efenunciado | Enunciados Un ennciad es una indicocion complete que led insimutinnes 21 sompatadars pars Secular alguna trea Ea , los enunciados son esertos, porlo general, uno en cada linea, “aunque algunos enunciados puedenextendersea varias lineas. Los enunciados del siempre terminan con un punto y coma (a excepci6n de las drectivas del preprocesador, como Adofine y Mnclude. que se tatan en el Dia 21, “Aprovechando las directivas del preprocesador y més"), Yale han sido presentados varios tipos de enunciados del C. Por ‘ejemplo, noted sun enunciado de asignacin Este le da instrucciones # a computadora para que sume 2 ¥ 3y asigneelresultadoala vaiable x, Ouostpos de enunciados son preseatados conforme Se les necesita alo largo de este libro. Enunciados y el espacio en blanco Eltérmino espacio en blancoserefierealosespacios en blanco, tabuladores yineasen blan- ‘co quese encuentran enelcédigo fuente. Elcompilador Cnoes sensiblealespacioen blanco. ‘Cuaudo el eompilador esté leyendo un enunciado en el digo fuente, toma en cuenta los ccaracteres en el enunciado y el punto y coma terminal, pero ignora los espacios en blanco, Por lo tanto, el enunciado x=2+3; es exactamente equivalente a xededs y también es equivalente a 2 3: s4 ee =H E HEEL Esto le da una gran flexibilidad en el formateo del e6digo fuente. Sin embargo, no se debe usar formateo comoen el eiemplo anterior. Los enunciados deben serdadosuno por englén con un nimero de espacios alrededor de las variables y operadores. Si se siguen las convenciones de formateo usadas en este libro, se tendré una buena forma. Conforme tenga ‘mAs experiencia descubriré que prefiere ligeras variaciones, Lo que hay que lograr es que el cédigo fuente sea legible Sin embargo, laregla de que al C no le importan los espacios en blanco tiene una excepeién. Dentro de las constantesTiterales dec uladores y espacios no son gnorados, sino ‘que son considerados parte de la cadena. Una cadena e3 un Conjunto de caracteres. Las constantes literales de cadena son cadenas que se encuentran entre comillas, y son interpretadas literalmente por el compilador, espacio por espacio. Aunque lo siguiente esté ‘muy mal, no obstante es legal: printf ( “Hello, world? , Sin embargo, lo que viewe a comtinuaci6n no es legal: print£(*Hel1o, Para partir una linea de una constante literal de cadena se debe usar el cardcter de diagonal. © L——— inversa (\) inmediatamente antes del corte. Asf, lo siguiente es legal: Print (Hello, world"); ‘ise pone un puntoy coma soloenunalinea, secreaun enunciadonulo, estoes,unenunciado que no ejecuta ninguna accién. Esto es perfectamente legal en C, Posteriormente en el libro &aprenderd la manera en que el enunciado nulo puede ser wil algunas veces Enunciados compuestos Un enunciado compuesto, también lamado un bloque, sun grupo dedos o més cnuuciadoy de C encerrados entre Ilaves. A continuacién se presenta un ejemplo de blogue: ha printf (Hello, * print (*worldi*) ) En C, un bloque puede usarse en cualquier lugar donde puede usarse un solo enunciado. ‘Muchos ejemplos de esto aparceen a lo largo del libro. Tome en cuenta yuc las Haves pueden ser posicionadas en diversas maneras. Lo siguiente es equivalente al ejemplo anterior: {print é ("Hello ); print (*world!*):} BSIBLIOT, Ne etn we * aa Enunciados, expresiones y operadores ‘Es una buena idea el ponerlas lavesen su propia nea, haciendo claramente visible! inicio ‘y inal del bloque. Ethecho de ponerlas llaves en sus propiae Knee también facilita ver dénde faltan, Expresiones En C, una expresién es cualquier cosa que evalia aun valor numérico. Las expresiones de (C se presentan en todos Tos niveles de complejidad. Expresiones simples expresidn més simple de Cconsisteen un solo concepto: un constante literal o constanie simbdlica. A continuacin se pTESEN cuatro expresiones 1+ tna constante simbilica (Gefinida en el programa) */ 2 1 Una conotante Literal. */ Velocidad /* Usa variable. */ “a5 7 Otra constente Literal. */ ‘Una constant literal evalia a su propio valor. Una constante simbélica evalda al valor que le fue dado cuando se cres con la directiva #def ine. Una variable evala al valor asignado ‘aclla por el programa, Expresiones complejas Las expresiones mds complejas consistenen expresiones simples conectadas por operadores. Por ejemplo, zee 56 a ae E's sr es una expresién que consiste de dos subexpresiones 2 y 8 y el operador de suma +. La expresién 2.4 Revaliia camo usted sabe a 10. Se pueden escribir expresiones de C de mayor ‘complejidad: 1.25/84 5 * tasa + tasa * tasa / costo ‘Cuando una expresin contiene varios operadores laevaluacin de la expresin depende de Haprees cles era es Este concepto, asf cama.suscdgalles acerca de todos os ‘operadores GeTC; se trata posterigamente en este capt. operadores Ge C, se tratan posteriSrments en este capitulo ~ Las expresiones de C se ponn todavia més ineresantes. Vea el siguiente enunciado de asignacién: ina xeas 10; Este enunciadoevalialaexpresiGn a + 10 y asignael resultado x. Ademés, el enunciado completox = a + 10 esensfunaexpresi6n queevaliiaal valordela variable que se encuentra al lado izquierdo del signo de igual. Esto se muestra en la figura 4.1. PP Evin un vale ——— > entaantnona Figura 4.1. Un enunciado de asignacién es en si mismo una expresién Renunciade de avignacién es en si mismo una expresién Por lo tanto, se pueden escribir enunciados como yexsae 0; el cual asigna el valorde la expresin a « 1 aamhas variables, xy y. También se pueden escribir enunciados como xe6e ede Ss El resultado de este enunciado es que y tiene el valor de 9 y x tiene el valor de 15. Observe los paréntesis, que son necesarios para que el enunciado pueda ser compilado. El uso de los pparéntesis se trata posteriormente, en este capitulo. 31 38 Operadores _-Operadores matematicos Enunciados, expresiones y operadores ‘Un operadores un simbolo que le da instrucciones al C para que ejecute alguna operacién, ‘operands: Un operando es algo sobre TOCURT RETR TLOPETACOT-En ‘Ctodos los operandos son expresiones. Los operadores dé Cseagrupan en varias categort. sats Bo ceca va GRP Pomme ete SO Pe care El operador de asignacién Eloperador de asignaciGn es el siguode igual ().Es usadoen programacién en una forma, ligeramente diferente a su uso en las matematicas normales. Si se escribe xeyi en un programa C no significa “x es igual a y”. En cambio, significa “asigne el valor de y ax", En un enunciado de asignacién del C el lado derecho puede ser cualquier expresién, y el lado izquierdo debe ser un nombre de variable. Por lo tanto, la forma es fPertanie Cuando sejecuta lacxpresinesevaluady eval exprP ony esultanteesasignadoala variable. Los operadores matemiticos del C ejecutan operaciones mateméticas, como la suma y 1a resta. El C tiene dos operadores mateméticos unarios y cinco operadores matematicos binarios, Los operadores matemiticc Los operadores matemdticos unarios on lamados de esta forma debido aque toman un solo ‘operando, ETC tiene dos operadores matemiticos unarios, que se listan eW 15 abla. ‘Tabla 4.1. Opéradores matemiticos unarios del C. Operador —Sfmbolo Accién Ejemplo TIncremento ++ Incrementa al operandoen 1 +4x,x++ Decremento — Decrementa al operando en 1 —x,x— Losoperadoresde increment y decremento pueden usrse solamente con variables ynocon astanies La operaci6njecutada es el sumar orestar uno del operando. En otra palabras, Jos enunciados ee ae - ey Oa son equivalentes a xexel yey-1y Debe observaren latabla4.1 quecualquierade los operadores unarios puede ser puesto antes desu operando fen modo de préfjoyo después de su operand (en mio s fos modos na son quivaleitex. Se diferencian enelmomentoen ques ejeculaclincremento me 7: i Cuando se usan en modo de prefijo, los operadores de incremento y decremento *BBUIGAN ah Operando antes de queer sade. C1 Cuando se usan en modo de posfijo los of ss de incremento y decremento - ‘hodifican a su operando despuds de que es usado. Un ejemplo haré esto més claro. Vea los siguientes dos enunciados: x= 10; Ly = xe | = | Después de que estos enunciados se ejecutan x tiene el valor de 1] y y tiene el valor de 10: el valor de x fue asignado ay, y luego x fue incrementado. Por lo contrario, los enunciados x= 10; y= om dan como resultado que tanto y como x tienen el valor de 11: x fue incrementado y luego fue asignado su valor a y.. Recuerde que = es el operador de asignacién y no el enunciado de igualdad. Como una analogfa piense que el = es el operador de “fotocopia”. Elenunciado x = y significa que se copie xay.. Los cambios subsecuentes de x, después de que la copia ha sido hecha, no tienenefectoeny. SSS El programa del listado 4.1 muestra la diferencia entre los modos de prefijo y posfij. Fal Listado 4.1, UNARY. Denuestra los wodos de prefijo y posfijo de operadores unarios */ Hinclude int a, bs nmain() ‘ 59 i Enunciados, expresiones y operadores Listado 4.1. continuacién 9) 7* Pone ay D igual a5 */ 10 Mache; we B 1* Los inprine decrenentindolos cada ver */ J+'0sa modo de prefijo para b y modo de posfijo para a */ print (*\ntd 82", a>, “bie peinte(*\n8d 8a", a, “BI? printe(n\ntd 8d; a>, BI? printe(*\nbd 8a") 3c, Iz printe(*\nbd 88") a+, Ble return 0; ’ La salida del programa es son puestas al valor de 5. Con Ia ejecucién de cada enunciado printf () (lineas 16- 20) tanto a como b son decrementados en 1. Después de que es impreso, a es /* Define constantes */ Adeline secs_eeR_ aN 60 ‘fécfine oDc_PER_jOUR 3600 J Recibe el ninero de segundos */ printf(*Enter nunber of seconds (< 65000): *); # scant (*8a", aseconds); hours = seconds / SECS_PER_HOUR; minutes = seconds / SECS_PER_MIN; ming_left = minutes ¥ S®CS_PER MI? 6 4 a Enunciados, expresiones Listado 4.2. continuacién Dar gece deft = seconds & SECS_PER MIN 7 25: be: print €(*tu seconds is equal to", seconds! Be eemte(rtu he au a, and fa e*) hours, mins_left, secs_left) Be\plist0402 Enter munber of seconds (< 69000): 10000 10000 seconds is equal to 2h, 46m, and 40 ae EI programa SECONDS.C sigue el mismo formato que han seguido fos programas Eeriores, Las ineas 1-3 proporcionan algunos comenttivs para indicar fo que va 2 hacerel programa. Lalineaesespacioen blanco parshacer més legible al program, De manera similar al espacio en blanco que se encuentra en enunciados y expresiones, las Iineas en blanco son ignoradas por el compilador. La Iinea 5 incluye los archivos de ‘cncaborado necesarios para este programa, Las lineas 9 y 10 definen dos constantes, wos. PER MINy SECS_PER_HOUR, que se usan para facilitar Ia lectura de Jos enunciados ‘ene! programa. Lalinea [2 declara todaslas variables que serén usadas, A algunas personas Jes gosta declara cada variable en su propia linea, en Ver-de devlasazlas todas on una sols Como se muestra anteriormente, De manera similar # muchos elementos del C, esto es, ‘cuestiGn de estilo. Cualquier método es corrects, LLalinea I4esla funcién:a i) ,quecontiene laparte medulardel programa. Paraconvertir segundos ahoras, minutos el programa primero debe obtener los valores que necesita para ttabajar, Para hacer esto la nea 18 usaafunci print £() para desplegar un enunciado tn a pata, seguido dela linea 19 que usa la funcion scan () para obtener el mimero tecleado por el usuario. Elenunciado scanf () luego guarda la cantidad de segundos que hha de convertise en la variable seconds, Las funciones printf () y scans () se trata mayor detalleen el Dia, “Enirada/salida bsica”. La inea 21 contiene una expresin para Ucterminar la cantidad de horas, dividiendo la cantidad de segundos por la constante ‘Sees, PER_HOUR, Debidoaque hoursesuna variable entera, apart fraccional es ignorad La linea 22 usa la misma légica para determinar la cantidad total de minutos # que correyndenfos segundos tecleados. Debido que el aGmero toa de minutos caleulado en Ta lines 22 también contiene los minutos de las horas, a linea 23 usa el operador de médulo paradividilashorasy guardarlosminatos estates. La inea24hace un eéleulo similar para Titerminar la cantidad de segundos que quedan. Las Iineas 26 y 27 son un reflejo de lo que ‘Sha visto anteriormente. Ellas oman los valores que han sidocalculados en las expresiones ¥ tos despliegan La linea 29 termina el programa, regresando 0 al sistema operativo antes ‘de termina. —_______ i Precedencia de operadores y los paréntesis En una expresi6n que contiene mas de un operador, zcudl es el orden en que se ejecutan las ‘operaciones? La importancia de esta pregunta se ilustra con el siguiente enunciado de * asignacién: xe4e5 23; t 1, Siprimero se ejecuta la suma, se tiene x93 * yaxse le asignael valor27. Porel contrario, si primero se ejecuta la multiplicacién, se tiene xe ae 15; y axe le asigna el valor 19. Es obvio que se necesitan algunas reglas acerca del orden en {que se ejecutan las operaciones. Este orden, llamado precedencia de los operadores, es indicado estrictamente en C. Cada operador tiene una precedencia especifica. Cuando una expresién es evaluada, los operadores que tienen mayor precedencia se ejecutan primero. La precedencia de los operadores matemiticos del C se lista en la tabla 4.3. EI nfimero 1 es Ja mayor precedencia, ta 4.3. La precedencia de los operadores matemiticos del C. Operadores —_-Precedencia relativa +e 1 71% 2 + 3 En la tabla 4.3 se puede ver que en cualquier expresidn del C las operaciones se ejecutan en el siguiente orden: 1 Incremento y decremento unario. Matiplicaci, divisién y médulo. Suma y resa Si.una expresién contiene més de un operador con cl mismo nivel de precedencia, los operadores sé ejecutan en orden de izquierda a derecha, como aparecen enlaexpresi6n. Por ‘ejemplo, en la expresidn ~ ese? [ - | 8 A a | Enunciados, expresiones y operadores los operadores % y * tienen el mismo nivel de precedencia, pero el % es el operador de la inquiceda y por esto se ejecuta primero. La expresin evalda ad (12 % 5 evalia a 2;2* 2 dad), Regresando al ejemplo anterior, se ve que cl enunciado x = 4 + 5 * 3;asignael valor de 19a x, debido a que la multiplicacién se ejecuta antes que a suma. ‘{Qué pasa si el orden de precedencia no evalia la expresién como se necesita? Usando el ejemplo anterior, ,qué habria que hacer si se quiere sumar 4 a5 y luego multiplicar la suma por 3? Enel C se usan paréntesis para modificar el orden de evaluacién. Una subexpresin fencerrada entre paréntesis es evaluada primero, sin tomar en cuenta la precedencia de los ‘operadores. Por Io tanto, se podria escribir xe e503; LLaexpresién 4 + 5 dentro del paréntesisesevaluada primero y, por otanto,el valorasignado a xes27. ‘Se pueden usar varios paréntesisy anidarlos en una expresién. Cuando los paréntesis estén ‘anidados la evaluacién se ejecuta desde 1a expresién mds interna hacia afuera. Vea la siguiente expresin compleja: x= 25-424 (lo + (8/200) Esta evalu ‘se ejecuta en Jos siguientes pasos: 1. Laexpresién mis interna, 8 /2, es evaluada primero dando el valor 4. 2s - 2+ os 2. Moviéndonos hacia afuera, la siguiente expresién, que ahora es 10 + 4, cevaluada, dando como resultado el valor 14. 5 (241) 3, La ltima expresi6n, o mas externa, es 2 * 14, y ¢s evaluada dando como resultado el valor 28. 2-8 4. La expresién final, 25 -28, es evaluada, asignando el valor -3 ala variable x. x3 ‘Tal ver usted quierausar paréntesis en algunas expresiones con objeto de ener mis claridad, incluso culo no scan necesarios para modifica la precedencia de los operadores. Los paréntesis deben estar siempre en pares, o en caso contrario el compilador generar un ‘mensaje de error. a || Orden para la evaluacién de subexpresiones ‘Como se dijo en la seceién anterior, si las expresiones de C contienen més de un operador con el mismo nivel de precedencia son evaluadas de izquierda a derecha. Por ejemplo, en Ia expresién wrusyte ‘primero es multiplicado por +, el resultado de Ia multiplicacién es luego dividido entre vy yeel resultado de la division es luego multiplicado por = Sin embargo, entre los niveles de precedencia no hay garantfa de que se sigael orden de iquierda a derecha. Vea esta expresin: wexdyensy Debido aa precedencia, la multiplicacin y divisin son ejecutadas antes que la summa Sin embargo, el Cnoespecifica i la subexpresion w + x / ydebe ser evaluada antes o después de z /y. Tal vez no le sea claro el porqué de la importancia de esto. Vea otro ejemplo whee easy ‘Sila primera subexpresisn es evaluada primero, y ha sido inerementada cuandoes evaluada ~ lasegundaexpresin Silasegundaexpresines evaluada primero, y noha sido inerementada yelresultadoesdiferente. Porlotanto, se debe evitarestetipode expresionesindeterminadas en a programacin, El apéndice C, “Precedencia de operadores en C”, lista la precedencia de todos los ‘operadores de C. Operadores relacionales Los operadores relacionales del C se usan paracomparar expresiones, “haciendo preguntas” ‘como “jes x mayor que 100?” o "es y igual a07”. Una expresién que contiene un operador relacional evaliaacierto(1) falso (0). Los seis operadores relacionales del Cse encuentran listados en la tabla 44, | 65 zy Enunciados, expresiones y operadores ‘ease la tabla 4.5 para algunos ejemplos sobre 1a manera en que pueden usarse los ‘operadores elacionales. Estosejemplos usan constantes literales, pero os mismos principios se aplican con las variables. Tabla 4.4. Operadores relacionales del C. ae CEH AAP Operador —_Simbolo_Pregunta Tgual Es el operando 1 igual al operando 2? Mayorque > Bs el operando 1 mayor que el operando 2? x>y Menorque << UES el operando 1 menor que el operando 2? x= Bs el operando 1 mayor que o igual al x >=y igual a ‘operando 2? Menor que <= GEsel operand I menor que oigualal = x<=y o igual a ‘operando 2? Diferente t= GES el operando 1 diferente al operando 2? x !=y ‘Tabla 4.5. Operadores relacionales en uso. Evaliia a 0 (falsoy 1 (cierto) l=1 1 (cierto) (+10 =G*5) 1 (cierto) ss |} enunciado if ‘Los operadores relacionales se emplean principalmente para construir las expresiones ionales que seusan en los enunciados if ywii 16, tratados adetalleenel Dia6, “Control Keston Pr shraes tarp obGscodlenmenso's penmeae ‘manera en que se usan los operadores relacionales para hacer enunciados de control de Programa. Tal vez se pregunte qué cosa es un enunciado de control de programa, Los enunciados en rogram eu C nonmalmente ejecutan de ariba hi en ef mismo orden en que Seaecen eT arcivadecGligoTuene, Un enunciado de control de programa mexifiacl n de ejecuci6n de los enunciados. Los enunciados de control de programa pueden usar ‘ros enunciados de programa para ejecularfos varias veces oparano ejecularlos, ependiendo Jas circunstancias. El enunciado if es uno de los enunciados de control de programa de] Otros, como de y while fe ratan en el Dia 6, “Control bésico del programa” ‘Ensu formabésica,clenunciado it evaltiaunacxpresi6n.y ditigelaejecuciéndel programa ependiendo del resultado de esa evaluacién. La forma de un enunciado : £ es la siguiente: if expresién) fenunciados Sila expresién evaltia a cierto, se ejecuta el enunciado, Si la expresién evaliia a falso, el ‘nunciado no se ejecita. Enrctalquier caso, la ejecucign contintia al cédigo que se encuentra ‘acontinuacién del enunciado if. Se puede decir que la ejecuciGn del enunciado depenide EIR cap resin. Olsen ORES COTE GT Ta nee Cog Teton) yla linea de entmciado, forman eT enuncTado 1 completo; no son enunciados separados. PAR eae cnunciado, formar et enuniciado TF completo; n ‘In enunciado i £ puede controlar la eje i un srlunefado Compuesto o bloque. Como se definié anteriormente en este capitulo, un bloque (a Enunciados, expresiones y operadores es un grupo de dos o més enunciados encerrados entre Haves. Un bl rede usarse en. fonds pusde usarse un jolo cnunciado. Por fo tanto, 36 podrfa evcri6iF an gounciado if de la manera siguiente: Sf (expresién ‘ enunciadol; enunciado2; 4 aqui va\cédigo adicional */ enunciadon; ) En la programacién encontrar que los enunciados i se usan la mayorfa de las veces con ‘expresfones relacionales. En otras palabras, “ejecute Ios siguientes enunciados s6lo si tales y-cuales condiciones son ciertas”. A continvaciOn se presenta un ejemplo iti y vex te codigo asigna cl valor de x ay sulamute sia caumyor que y. Six wv es mayor que ‘v.nbse ejecuta ninguna asignacign. Fi listado 4.3 presenta un programa corto que ilustra el uso de enunciados if. EB ys Listado 4.3. IF.C. 1: /* Denueatra el uso de enunciades if */ 3: Finelude 4 S: int x, ys 6 7: maint af 9: (+ Recibe los dos valores que se han de probar */ 10: i print#(*\ntnput an.inveger value for x: * x Seanf(*8a", 6x); ¥ Print (*\ntapat an integer value for y: *): u scanf("#a", &y) 1 u /* Prueba los valores ¢ imprine 1 resultado */ X 1: if be ==y) ws: Brine Os ie equal ta yt 20: if > y) printf (*%x is greater than y*) if wey) printf(*x is smaller than y" — ES 26: 28: wy Bs\s1iet0403, Input an integer value for x: 100 Input an integer value for y: 10 x is greater than y Bs\sList0403 Input an integer value for x: 10 Input an integer value for y: 100 x is smaller than y B:\slisto403 Input an integer value for x: 10 Input an integer value for y: 10 x is equal toy | IF.C muestra tres enunciados i en accién (lineas 18-25). Muchas de as ineas de este programa le deben ser familiares. La linea 5 declara dos variables, x y y, y las lineas 10-14 le piden al usuario los valores que deberdn ser puestos en estas variables. Las Iineas 18-25 usan enunciados i £ para determinar si xes mayor que, menor que o igual a y. Observe que Ja nea 18 usa un enunciado if para ver si x esignal a y Reenerde que =-,el coperador de igualdad, es lo mismo que decir “es igual a”, y no debe ser confundido con cel operador de asignacién =. Después de queel programa revisa para ver silas variables son iguales, en la linea 21 revisa para ver si_x es mayor que y, seguido de una revisién en la linea 24 para ver si x es menor que y. Tal vez piense que esto es ineficiente y tiene usted raz6n. En el siguiente programa veri cémo evitar esta ineficiencia, Por ahora ejecute el programa con diferentes valores para x lados. ‘guiente manera: if lexpresiéa) enunciadel; else ‘enunciado2; Silnespresionescierta,secjecutae enunciado I. Sies alsa, se ejecutael enunciado2, Tanto Lenunciado! comoel enunciado? pueden se Ellistado 4.4 nmestra al programa del istado 4.3 regscrito para usar un enunciado i f conunaclausula elee. Enunciados, expresiones y operadores Listado 4.4. El enunciado if con ut 7* Denvestva el uso del enunciado if con eldusula else */ Méusula el Hinelude int x, yi nain() C J Kectte 1os dos valores que se han de probar */ printf(*\nfoput an integer value for x: zeant ("84") axl printf(*\ninput an integer value for y: *); scanf(*td*, ky); ” J Prueba los valores e inprime el resultado */ fey) DrintE(*x is equal toy"); “if > yl) printf(*% is greater than y*); else peinté(tx is enaller than y*); return 0; Br \oListodoa Input an integer value for x: 99 put an integer value for y: 8 x is greater than y Es\olisto4od ae Input an integer value for x: 8 Input an integer value for y: 98 xis smaller than y * Br \pList0404 Input an integer value for x: 98 Input an integer value for y: 99 xis equal to y so Las lineas 18-24 son ligeramente diferentes del listado anterior. La linea 18 todavia revisa para ver Si x es igual a y. Si x-i¢s igual a y se escnbe que x es igual a y, de manera similar a como se hizo en IF.C. Sin embargo, el programa termina a ‘continuacidn. Las lineas 20-24 no se ejecutan. La linea 21 se ejecuta solamente en el caso de que xno sea igual a y 0, para decirlo con més precisién, sila expresién "x igual ay" es falsa, Si xno es igual a y, lalinea 21 revisa para ver si x es mayor que y. Siestoes as, la linea 22 imprime que x es mayor que y y, en caso contrario (else), ejecuta la linea 24 Observe que el programa del listado 4.4 usa enunciadas i ¢ anidados. El anidado significa ner (anidar) uno o MAS enunciados de C dentro de otro enunciado de C., En el caso del stado 74, un enunciado 1* es parte de Ja cliusula e1e del primer enunciado + Elenunciado if Format itl expresiéa ) 201 siglfente entneiado Estee el enunciado i f ensu forma ms simple. Sila expresiGnes cierta, entonces se ejecuta | fMenunciadol. SilaexpreaiGn no es clerta, el enunciadol es ignarala. [Forma 2 iE expresisn.) ase guuneiader sigiente enuneiedo | ss | | Estaes laforma més comiin del enunciado i f.Silaprimeraexpresicn escierta, seejecuta ef enuncladol y, en caso contrario, se ejecutaelenunciadoz, = Forma 3 if ewresién ) else it( expresién ) enuniciado? els enunciades siguiente enunciado ‘Esta forma presenta un if anidado. Sila primera expresin gs cierta, se ejecuta el enunciadol y, en caso contrari, se evalia Ja segunda-cxpresidn. Sila primera expresién no es clerta y Ta segunda es ceria, se ejecuta el enunciado2. Si ambas EGbrsiones son falas se qjeclaelenuncado3”Solamente uno delostesenaflado ejecuta. n ala Enunciados, expresiones y operadores Rjemplo 1 AEC salario > 45,000 } impuesto = 0-30 else inpuesto = 0.25 jemplo 2 tC edad < 18} printé (Menor*) ; AMEE (*AGULtO") else printf Aneiano*) Evaluacién de expresiones relacionales Recuerde que las expresiones que usan operadores relacionales son expresiones del C ‘verdaderas, que evalan por definicin a un valor. Las expresionesrelacionales evaldan @ im valor qe nee ser alan (0) cierto (I). Aunque uso mds comin para las expresiones relacionals se da dentro de los enunciados i ¢ y otras construcciones condicionales, pueden usarse como valores numéticos puos, Eto es iustrado por el programa que se encyentra enellisiado 45 x | Listado 4, Demostracin de la evaluacion i Ac expresiones relacionales 7* Demuestra 1a evaluacién Ge expresiones relacionales */ Hinclude int a: saint) i a= 5 Evaléa a1 +) printf {*\na = (5 += 5)\na = 88", a); a= (5 t= 51: J+ Bvabia a 0 */ printf (*\na = (5 {= 5)\na = 4d", a) ast 2 a= = peint£(*\na Feturn 0; Dy /* Brake ots a */ 2) 4 15 t= T)\na = tae, a); A continuacién se presenta la salida del listado 4.5: (2 212+ GD La salida de este lstado puede parecer algo confusa a primera vista. Recuerde que el error més comiin que comete a gente cuando usa los operadores relacionales es usar tun signo de igual solo el operador de asignacién, en vez de un signo de igual doble, Lacxpresién eval a 5 (y también asigna el valor de $ 2 x). Por el contrario, a expresién Fevalia aoa (de escribe iE (x =35) print icudo sixes igual « 5) y no cambla el valor de x. Si por error se x es igual a 54); ‘el mensaje siempre se imprimiré debido a que la expresi6n que esté siendo probada por el ‘enunciado i £ siempre evalia a cierto, sin importar cudl haya sido el valor original de x. fon el listado 4.5 e8 puede comenzar a comprender por qué toma los valores que tous. Eu, a linea 9 el valor 5 es igual a 5 y, por lo tanto, se asigna cierto (1) a a, En la linea 12 el Fenunciado “S no es igual a 5” es falso y por lo tanto se asigna 0a a. Repitiendo, los operadores relacionales se usan para crear expresiones relacionales, que ‘hacen preguntas acerca de relaciones entre expresiones. La respuesta regresada por una ‘expresi6n relacional es 1 (representando cierto) 0 0 (representando falso). cedencia de los operadores relacionales De manera similar alos operadores matemticos,tratados anterormente en este capitulo, Jos operadores relacionales tienen una precedencia que determina el orden en el que se e|jecutan en una expresién que tiene varios operadores, En forma similar, se pueden usar paréntesis para modificar la precedencia en expresiones que usan operadores relacionales. En primer lugar, todos los operadores relacionales ‘operadores matemiéticos. Por lo tanto, sise escribe ers eae EOF 12 AO, 8 eacTibe EH nen menor precedencia que los if ee d>y) | B Aa Enunciados, expresiones y operadores ees sumado @ x y el resultado es comparado con y. Esto es el equivalente de if Uxs21oy que es un buen ejemplo sobre el uso de paréntesis para dar claridad. Aunque no son ‘requeridos por el compiladorC, los paréntesis que rodean a (x + 2) aclaranque es la suma de x y 2la que va.a ser comparada contra y. ‘También hay una precedencia de dos niveles dentro de los operadores relacionales. Esta se muestra en la tabla 4.6. Por lo tanto si se eseribe xaryoz 8 lo mismo que escribir xa y>2 = debido a que el C evalia primero la expresi6n y > 2, dando como resultado un valor de 0 (01. A continuacién el C determina si xes igual al 1 ol obtenidoen el primer paso. Es muy ‘poco probable que se llegue a darel caso de que se use este tipo de construccién, pero sedebe saber acerca de ella. Recuerde que, cl apéndice C, “Precedenciade operadores en” listala precedencia de todos los operadores del C. Orden de precedencia de los operadores relacionales del C. Precedencia relativa <<=>>= 1 2 nas veces tal vez necesite hacer més de una pregunta relacional al mismo tiempo. Por ‘ejemplo, “si son las 7:00 AM y es un dia laboral y Wo estoy de Vacaciones, Naz sonar al Hdespertador”. [19s operadores I6gicos del C le permiten combinar dos o més expresiones “ionalgs enj§{na sola expresién que evalliaa cierto.0 falso. Los tres operadores légicos s@elCse Bstan En 1a tabla 4,7 an 5 n4.7. Operadores légicos del C. * Operador — Simbolo Ejemplo ly oe expl && exp? a expt 11 exp? no. A texpl ‘La manera en que funcionan estos operadores I6gicos se explica en la tabla 4.8. 4.8. Operadores Iogicos del C en uso. Expresién Evaliia a (expl && exp2) Cierto (1) solamente si am ‘exp2 son ciertos. En caso contrario, falso ). (expl 1! expa) Cierto (1) si Ly exp? es cierto. En caso contrario, falso ), (expl) Falso (0) si expl es cierto, y cierto (1) si expl es falso, eee 15 ‘a Enunciados, expresiones y operadores Puede ver que las expresiones que usan los operadores ldgicos evalian a cierto o falso, dependiendo de lus valores cicito v falso de sus operandos. La tabla 4.9 muestra ejemplos de c6digo de trabajo. Tabla 4.9, Ejemplos de e6digo de operadores légicos del C. Expresion Evalia a (5-7 8) 46 (6 [5.27 Glento (1) debido a que ambos operands son cero enn wen Certo (1) debido a que un operando es cierto. ae 5) Falso (0) debido a que un operando es falso. ssa ! debido a que el operando es falso. ‘Se pueden crear expresiones que usan Varios operadores l6gicos. Por ejemplo, para hacer Ta pregunta “jes x igual a2, 3 04?" se podria escribir (eae 2 ix Los operadores l6gicos a memudo proporcionan més de una forma de hacer una pregunta. Sixes una variable entera la pregunta anterior también pudiera ser escrita en alguna de las, siguientes maneras: be> 1) se <5) ° Oe >= 2) bb (xe Mas sobre valores cierto/falso ‘Ya ha visto que las expresiones relacionales del C evalian a 0 para representarfalso y a1 eh as ee ‘numérico es interpretado como cierto ofalso cuando es "en una expresin oenunciado ‘del C que esté esperando un valor I6gico (esto es, cierto 0 Falso). Las reglas para esto son {as siguientes: ee ne ‘Un valor de 0 representa falso. £135; ie - Printf£(*8d*, xb; 16 ‘Como x tiene un valor diferente de ceto, 1a expresion (x) es interpretada como cierta por elenunciado if, Se puede generalizar esto todavia ms, debido a que cualqui sién Ceserita {expresién! es equivalente a escribir (expresién t= 0) ‘Ambas evaléan a cierto cuando la expresiénnoes igualacero, yafalso cuando laexpresién €8 0. Usando al operador no (!) tambin se puede escribir: (lexpresién) ‘que es equivalente a lexpresign == 0) Precedencia de los operadores légicos ‘Tal como usted se imagina, los operadores l6gicos también tienen un orden de precedencia, tanto entre ellos como en relacién a otros operadores. El of 1 tiene una preceden- cia gu: lores ticosunarios ++ y --.Porlotanto, ! tiene una precedencia ‘mayor que todos los operadores relacionales'y todos TO: operadores matemAticos binarios — orl contrario, los operadores a y 1; lenen una precedencia mucho menor, menor que todos Tos operadores tutemdtcosy Tlaconals- Angus Ee ene une avo i ‘que {1 De manera similar a todos fos operadores del C, se pueden utilizar paréntesis para iodificar ef orden de evafuaciGn cuando se usan Tos operadores ‘Vea el siguiente ejemplo. ae ‘Se quiere escribir una expresiGn légica que haga tres comparaciones individuales: 1. {fl a menor que b? 2. gEs a menor que c? 3. Esc menor que a? Se quiere que la expresién I6gica completa evalie a cierto si la condicién 3 es cierta y cualquiera de las condiciones 1 0 2 sea cierta. Podria escribir acbitlacceccal Sin embargo, esto no hace lo que se pretende. Debido a que el operador && tiene mayor precedencia que | !, la expresiGn es equivalente a acbillacctkeca) n 8 Enunciados, expresiones y operadores yevaltiaaciertosi (2 < b) escierto, ‘sean cicrtas. Se nccesita escribir portar que las relaciones (a < c) y (¢ < a) facbiiaccmecd lo que fuerza que el |: sea evaluado antes que el @&. Esto se muestra en el listado 4.6, que ‘evalda la expresi6n escrita en ambas formas. Las variables estén puestas en tal forma ‘que si se escriben correctamente Ia expresidn debe evaluar a falso (0). s Be Listado 4.6, Precedencia de los operadores logicos. Vinelude /* Inicializa variables. Observe que ¢ no es menor a1 7* que es una de las condiciones que se han de probar. */ /* Por lo tanto, 1a expresién completa debe evaluar 2 falso */ int a=5,b int x; 6 e254 Printif \cWithout parentheses the expression evaluates as 8d", x), /* Byala 1a expreaién con paréatesis */ xe lacb! printf ( aa" a return 05 ‘the expression evaluates as \ Darentheses the expression evaluates as 1 With parentheses the expression evaluates a3 0 diferentes. Este programa inicializa cuatro variables, en Ia linea 7, con valores que serdn usados en las comparaciones. La linea 8 declara x para que sea usada para ‘guardar imprimir los resultados. Las lineas 14 y 19 usan los operadores I6gicos. La linea 14 no usa los paréatesis, por lo que los resultados son determinados por la precedencia de operadores. En este caso los resultados no son los deseados. La Ifnea 19 usa paréntesis para ‘cambiar el orden en que son evaluadas las expresiones. ne Teclee ycorraestelistado. Observe que los dos valores impresos parala expresiGn son ee — Operadores de asignacién compuestos Los operadores de asignacién compuestos del C proporcionan un método abreviade para jnbinar una operacin matematicabinara con una operacion de asignacisn. Por ejeraplo, Eiger ae es Iefomenicel vale ce a is que beuierssemeniac lal deen 50, Tas pala, soar $4 5F isignay el Test ‘a x. Se podria escribir -SSignaT STRUTT a Se poeta eserbir xext5; 7 Con un ciGn compuesto, del cual se puede pensar como un método breviado de asignacidn, se polit ay ea xe 5 En una notacién mas general, los operadores de asignaciGn compuestos tienen la siguiente tans (onde op representa us operadarBingig) eee exp! op: exp? ‘que es equivalente a escribir ep Sepueden crear operadores de asignacién compuestos conlos cinco operadores matemiticos bisatos Gata anteiomnenc en ene capo La abla 10 Tita algunos emp” binariog Watados anteriormente en este capitulo, Tabla 4.10. Ejemplos de operadores de asignacién compuestos. Siseescribe Es equivalente a Pl op exp2; xty yeyored ary 4 xeys8 ryt 1 Los operadores compuestos proporcionan un método abreviado conveniente,cuyas ventajas son particularmente evidentes cuando Ia variable del lado izquierdo del operador de asignacign ee compleja, De manera similar a todos los otros enunciados de arignacin, un ‘enunciado de asignaciGn compuesto es una asignacién, y evaléa al valor asignado del lado i2quierdo, Por lo tanto, ejecutando los enunciados ” (al a a Enunciados, expresiones y operadores {da como resultado que tanto x como 2 tengan el valor de 14, El operador condicional Eloperador condicional ese ini operador temario de C sgnificando esto que usa tres operandos. Su sintaxis es expl ? exp? + exp? : Siexp1 evaléaaciero estoes, diferente de0),laexpresién completaevaléaal valor deexp2 Si expl evalia afalso (esto 5, cero) la expresi6n completa evala al valor de exp3. Por ejemplo, el enunciado xey?t: 100; signal valorde 1a xsiy es cierta, y asigna 100. x siy es falsa. De manera similar, para hhacer que z sea igual al mayor de x yy, e podria escribir Belo yoxry: Tal vez se haya dado cuenta de que el operador condicional funciona de manera parecida ‘un enunciado i f. El enunciado anterior también podrfa ser escrito: if oy) eles eey: operaercondiona opt ween tos as sitaconsen ver deunaconsiucia {f.elee,parelopeatrconicionl es mis cons, Eoprdor contol tain posters eal oe int co car oun lo ongelinetor dem gunciado print £ (7. = ‘El operador coma Lacomacs fesenement wadaen como unasinple marc depuntsinsrvendo para separa declraciones de vale arguments de fniOn, et En alguns soacone I coma cis como un operator en er ee slanen ua prs puede forma ha ‘expresiGn separando dos una coma, Elfesilliado es el siguiente: Ambas expresiones son evaluadas (primero la expresisn del zquirda). Lia expresion completa evalia al valor de la expresisn dela derecha Por ejemplo, el enunciado Xe (abe, beds ae asigna el valor de b a x, luego incrementa a a y luego incrementa ab, Debido a que el ‘operador ++ es usado en modo de postijo, el valor de b, antes de ser incrementado, es asignadoa x. Esnecesario usar paréntesis, yaqueel operador de comatiene una precedencia ‘menor, incluso al operador de asignaci6n, ‘Como le ensefiaré el siguiente capitulo, el uso més comiin del operador de coma es en los cenunciados for. Eo NO DEBE Resumen Este capitulo ha tratado mucho material Se ba aprendido lo que ¢s un enunciado de C. que Jos espaciosen blancono le importan al compilador y que los enunciados siempre terminan ‘con un punto y coma. También se aprendié que un enunciado compuesto (0 bloque), que consiste en dos o més enunciados encerrados entre laves, puede usarse en cualquier lugar donde puede usarse un solo enunciado, ‘Muchos enunciados estan compuestos de alguna combinacién de expresiones y operadores. RRecuerde que una expresiGn es algo que evalia a un valor numérico. Las expresiones camplejas pueden contener muchas expresiones mée simples, lamadas subexpresiones, Los operadores son sfmbotos del C que le dan instruciones ala computadora para que eje- cite una operacién en una 0 més expresiones. Algunos operadores son unarios, 10 que significa que operan en un solo operando. Sin embargo, la mayoria de los operadores del C son binarios, operando en dos operandos. Un operador, el condicional, es temario. Los operadores del C tienen una jerarqufa definida de precedencia, que determina el orden en l cual se ejecutan las operaciones en una expresida que contiene varios operadores ‘Los operadores del Ctratados en este capitulo se agrupan en tes categoras,indicando que O Los operadores mateméticos ejecutan operaciones. a dog: su operandos (por ejemplo, suma). _ a a | Enunciados, expresiones y operadores Los operadores relacionales ejecutan comparaciones ente sus operandos (por ejemplo, mayor que). OD Los operadores lgicos operan sobre expresiones ciertrfaso. Recuerde que el C usa al Oy al | para representarfalso y cierto, respectivamente, y que cualquier valor diferente de cero es interpetado como cierto. ‘También se presents el enunciado £ del C, que le permite controlar Ia ejecucién del programa baséndose en la evaluacién de expresiones relacionales Preguntas y respuestas 1, {Qué efecto tienen los espacios y las Iineas en blanco sobre la ejecucién del programa? Los espacios en blanco (lineas, espacios, tabuladores) hacen que el listado de igo sea mas legible. Cuando el programa es compilado, los espacics en blanco. son quitados, y por lo tanto no tienen efecto sobre el programa ejecutado. Por esta raz6n los espacios en blanco deben usarse para hacer que el programa sea fécil de leer. 2. {Qué es mejor, codificar un enunciado i £ compuesto o anidar varios enunciados id ‘Se debe hacer que el c6digo sea ficil de entender. Si se anidan enunciados 4 £. son cevaluados como se vio en el capitulo. Si se usa un solo enunciado compuesto, las expresiones son evaluadas solamente hasta que el enunciado completo es cevaluado como falso. 3, {Cull es la diferencia entre operadores unarios y binarios? Como su nombre lo indica, los operadores unarios trabajan con una yariable y los binarias con dos. . WY 4. iis el operador de resta (-) unario 0 binario? ; Ex ambos! El compilador esl suficientement listo como para saber cul se esté undo. El sabe cudl forma usa basindose en Ja cantdad de variables en la repre cu es extt wean Hol sigulicse enumclts, e& aug xey ona so bao ques ues ay 2 _________ '5. {Los miimeros negativos son considerados ciertos o falsos? Recuerde que 0 es falso y cualquier ovo valor es clerto, Esto ncluye los nulmeros 5 AiEaivos. a aller weer taller proporcionaun custonaro quel ayudar areafrmarsucomprensin el materi tratado y ejercicios para darle experiencia en el uso de lo que ha aprendido. Juestionario © 1, {Cémo se le Hama al siguiente enunciado'C y cul es su significado? e568; 2. {Qué es una expresién? 3. En una expresién que contiene varios operadores, ;qué es lo que determina el orden enel que se jecutan as operaciones? 4, Sila variable x tien el valor de 10, geudles son los valores de x y a después de {que cada uno de los siguientes enunciados se ejecuta por separado? 1 | a | 5. gCual es el resultado de la expresién 10 % 37 6. {Cables el resultado de la expresion 5+3* 8/2? 7. Reescriba la expresiGn de la pregunta 6, aladiendo paréntesis de tal forma que dé como resultado 16. 8, Siuna expresion evalua a falso, .qué valor tiene la expresion? 9. {Cuil tiene mayor precedencia? asso< brot 10. ,Qué son los operadores de asignacién compuestos y para qué son vitiles? 3 Enunciados, expresiones y operadores L Ejercicios El siguiente o6digo no esté bien escrito, Tecléelo y compflelo para ver si funciona. include int x,yemain(){ printf ( \nnter two numbers") scant ( ha bd" ex, ky) print *\n\ntd is bigger’, (xy) x:y) sreturn 0;) ‘Vuelva a escribir el cédigo del ejercicio 1 para que sea més legible, 3. Cambie el listado 4.1 para que cuente bacia arriba en vez de hacia abajo. Fseriha tn enunciado i que asigne el valor de x ala variable y solamente si x se encuentra entre 1 y 20, Deje ay sin cambio cuando x no se encuentre en ese rango. ‘5. Use el operador condicional para ejecutar la misma tarea que en el ejercicio 4, ‘Vuelva a escribir los siguientes enunciados i £ anidados, usando un solo enunciado it y operadores compuestos. ited Sf (x > 10) {Cul es el resultado de cada una de tas siguientes expresiones? a e2eay bowesea-e2 + eeu es 4. (5 == 5) eee) aie wi eS 9. Bscriba un enunciado i £ que determine si alguien es legalmente un adulto (edad 21 afios), pero no un anciano (edad 65 aos). 10. BUSQUEDA DE ERRORES: Componga e! siguiente programa para que ejecute ‘correctamente, 4 Un programa con problenas...*/ Hinclude Ant xe 1s main() ‘ if(x= ay printé(* x equals 1°}; otherwise printé(* x does not equal 1*); ) 85 “a Funciones: lo basico Las fines on lpr ental dee prosramacin en Cy de filosofia de disefia de programas en. Ya ‘presentadas algunas funciones de biblioteca del C, que son Fintona competas proporcionadas como parte dl compilador. He capo toa clones eins porel war, cus, compan nombre loins, Sn RETEST, ines Hoy aprenders D1 Loquees una funciéa y cudles son sus partes. Gi Acerca de las ventajas de Ia programacién estucturada con funciones. Cl Como crear una funcién. Acerca dela declaracién de variables locals en una funcién. C1 Lamanera de egresar un Valor desde una funcin al programa. 1 La manera de pacar argumentos a una funcin. ZQué es una funcién? Este capitulo responde ala preguna:“,Qué es na fancén?”, de dos maners, Primero le ize lo que son ls foncionesy lego le moestn la manera en qUe 6 Usa. La definicién de una ion Primero la definicin: una juncidn es una seccién de eéal i ae, qu eeu uns te speci» a ‘prograzma que a lama. i ‘Una funcin tiene nombre. Cada funcién tiene un nombre tnico. Con ese nombre, en ‘cualquier otra parte del programa, se pueden ejecuiar Tos enunciados contenidos en la foncidn A eSiaseTeconoce como a lama dea TunciGn. Una Tuncién puede sera ead ol interior de otra funcion en Uap Una funcion es independiente. Una funciGn puede ejecutar su abajo sin intererencas de, "Hi fei con, otras partes dl programa. ee iin tree con, ones Una fncion ejecuia ua area especfica. Estas la pat teil dela definicin, Una area ‘es un trabajo concreto que un programa debe ejecutar como parte de su operacién general, ‘como enviar una linea de texto a la impresora, ordenar un arreglo en orden numérico © calealar una raz csbica. Una funciin puede regresar un valor al programa que a lama. Cuando e! programa llama omen '3=_qjecatan Tos catineados que contiene, Estos, en se deseo, _Pusdén pasar informaciGn de represo al programa que ia ami. , ey Esto es todo por lo que se refiere a la definici6n. Téngalo presente mientras ve la siguiente soos todo poco gta cién. Téngalo presente igu La ilustracién de una funcién El programa que se presenta en el lstado 5.1 contiene una funcin definida por el usuario. Los mimeros de renglén no son parte de! programa. Listado $.1. Un programa que usa una funcién para calcular el cubo de un néimero, /* Denuestra una funcién simple */ finclude ong cube (long x) + Yong fnpnt, answer; main() c print€(*enter an integer value: *); scant (*8d", &input) 7 answer = cube (input): J Wota: tld es el especificador de conversién para */ 7 un entero largo */ print€(*\n\nthe cube of $d ie $10.*, input, auame); ) (ea long cube|ong x) Jona cube tong long x cubed I xceubed = x * x * x: return x_cubed; , A continuacién se muestra la salida que produce la ejecuci6n de este programa tres veces: Br\>list0501 Enter an integer value: 100 ‘The cube of 160 is 1000000 E:\olistoso1 Enter an integer value: 9 The cube of 9 is 729. E:\9]ist0s01 Enter an integer value: 2 ‘The cube of 3 is 27. 89 a Lalinea 4 contiene el prototipo de funcién, un modelo para una funcién que apareo runcién contiene elm reauiereunavariabledetpo Seay aiid oT isiade variable ue serdnpasadas la fucisson|lamades anzumenosy SsTeCoerie os Parnes $e-encuentran a continuaciGn del sombre de funcidn: Eneste ejemplo-el argumento de! funciénes long x. 7a clave antes del nombre de la funciGn indica el tipo de variabl ‘Lalinea 17 llama aa funcién cube y le pasa la variable input como argumento de la funci nein Er Valor de retomo de la funci6n es: ala variable answer. Observe que tanto iny ‘como answer son declaradas en la Tinea Comte variables Tong, ajustindose al prototipo dd aa 1La funci6n propiamente dicha ¢s llamada la definicién de funciGn. En este caso es lam: a ‘Programa 18 824. De manera similar al provotipoy tiene varias partes. cenlalinea 18, Elencabezado de funcién se encuentraal inicio dela funcién ye. mbt ‘a funcign (en ete caso, el nombre es cube). apeerrae| “de a funcion describe sus argumenios, Observe que el encabezado de funciGn es ident ‘Tprotatipo fain (a excepein del punt y coma. El cuerpo de la funcién, ineas 19 a 24, se encuentra encerrado entre Haves. El cverpa contiene enunciados, como el que se muestra en la linea 22, que se ejecuan ca vez que os Tait Ta linea 20 es una declaraciGn de vaviable, que se parees a Yat Geclaraciones que shan so anteriomente, pero con una iferencia:eslocal as Vai localessonaquellas que son decTaradas eniro del cuerpo de unafuncién, (Las declaraciones (Goals Ustn a mv dts ela 2,“ Alcance de as variables") POF OTTO, funcidn termina con un enunciado return @Ti de la funevon. Os enunciado return también regresa un valor al programa Gue Ta llam. Enygsiesai0 et learereibele etnae ore see peter ‘St eecompars Is estnictira de Ta fancién evshe () con la de la funcién main) se verd que son la misma, nain() es también una funcidn, Otras funciones que ya se han usado sot print £() yscanf ().Aungue print () y scant () son funciones de biblioteca (en ver de ser funciones definidas porel usuario), pueden recibir argumentos regresar valores, dt ‘manera similar alas funciones que uno crea. in que se encuentra en Ia linea 4. : —_____#@ A manera en que ‘abaja una funcién Un programa en C no ejecuta los enunciados de una funcién sino hasta que ella es Hamada Por otra parte del programa, Cuando una funcién es llamada, Jnformacién para la funci6n en forma de uno o més argumentos. Us dato 1 el programa que es necesario para que la funcién ejecute su tarea. Luego tos enunciados {dein feign ejecutan, reaizando la tare pra la cal fueron dsshadon, Cuando teh * ros enunciados de la funcién, la ejecucién regresa a la misma posicién en el programa de donde fue llamada Ia funcién. Las funciones pueden enviar informacién de regreso al ‘Programa en forma de un valor de retomno. ae ae 2a figura 5.1 muestra un programa con tes funciones, y cada una de elas es Hamada una {vez. Cada vez que es llamada una funcin, la ejecucién pasa a esa funcién. Cuando termina ‘Ya funcién, laejecucién regresaal lugar de donde fue llamada la funcidn, Una funeién puede , ser llamada tantas veces como se necesitey las funciones pueden ser lamadasen cualquier ‘orden, Programa peep Figura 5.1, Cuando un programa llamaa una funcidn, la gjecuciénpasaalafunciény luego regresa al programa que la Hard, ‘Ahora usted sabe lo que es una funcién y la img ones. A continuacién se presentan lecciones sobre Ia manera de crear y usar sus propias funciones. Funciones Prototipo de funcién tipo_de_retorno nonbre.de_funcién (tipo-de-argunento nonbre-1,..., tipo-de- argunento nonbre-n); | ws | 1 wz Funciones: lo basico Definici6n de funci6n, tipo_de_retorno noebre_defuncién (tipo-de-argunento nombre-1,..., tipo-de- argusento. nosbre-n) ° t enunciados;) ‘Un prototipo de funcién proporciona al compilador la descripciOn de una funcién que seré float x = 3.5, y = 65.11, 2 Aloat half_of (float k) main() c | 4 | 7 98 Funciones: lo basico En esta Llarada x es el argunento para half_of(). */ fof (x) he value of 2 = ¥f\n", 2); print! /* En esta Danada y es ei argunento para half_of(). */ 2 = halfotiyi; print ®(*The value of z = #£\nt, 2): 20; float half_of (float k) 22. #2 os el pardnetro. cada vez que half_of() es Llarado, */ 23: /* k tiene el valor que fue pasado cono exgunento. *7 2 25 return (&/2) ‘The value of 2 = 1.750000 ‘The value of 2 = 32,555000 {La figura 5.4 muestra esqueméticamente la relaci6n entre argumentos y pardimetros, Sones amas can 25016 ot 6.1 Figura 5.4. Cada vee que es llamada una funcién, los argumentos son pasados a los ardmetros de ta funcién Enel listado 5.2 se puede ver queeel prototipo dea funcién hai f_o£ () est declarado ena linea 7. Las lineas 12 y 16 llaman a hal £_of (),y las lineas 20-26 contienen la fineién actual. Las lineas 12 y 16 cuvian cada una un argumento diferente a hal£_of (). Lalinea 12 envia x, que contiene un valor de 3.5, y la linea 16 envia y, que contiene un valor de 65.11. Cuando el programa ejecuta, imprime el niimero correcto para cada una de ella. Los valores que se encuentranen xy’ son pasados al argumento ede hai f_of () Estoescomocopiarel valorde xa k,yluegoelde yak. Hal tof {) regresa luego este valor después de haberlo dividido entre 2 (linea 25). NO DEBE ' a eee El cuerpo de la funcién EB cuerpo de la funcién se pone entre laves, y se encuentra inmediatamente después del ‘encabezado de funcién. Aqui es donde se hace el trabajo real. Cuando una funcién es amada, la ejecucién comienza en el inicio del cuerpo de la funcién, y termina (regresa al programa que la llam6) cuando se encuentra un enunciado return o cuando la ejecucién Mega ala lave derecha, Variables locales Se pueden declarar variables dentro del cuerpo de la funcién. Las variables declaradas en tuna funcién son Ilamadas variables locales. El término local significa que las variables son privadas de esa funcién particular, y distintas de otras variables que tengan el mismo nombre ¥¥ que hayan sido declaradas en eualquicr otro lugar del progsaina. Esta es usta explicacion breve. Por ahora, usted debe aprender la manera de declarar variables locales. Una variable local se declara en la misma forma que cualquier otra variable, con los mismos tipos de variable y reglas para los nombres que se aprendieron en el Dia 3, “Variables y cconstantes numéricas”. Las variables locales también pueden ser inicializadas cuando son declaradas. Se pueden declarar variables de cualquier tipo en una funci6n. A continuacién se presentan algunos ejemplos: int funct (int y) cl int a, > float’ tas: double costo = 12.55; 10; } Las declaraciones anteriores crean las variables locales a,b, tasay costo. que pueden usarse por el c6digo de la funcién. Note que los pardmetros de la funcién son considerados como declaraciones de variables, por lo que, en caso de haberlas, las variables que se encuentren en la lista de parémetros también estin disponibles, | 2 7 100 Funciones: lo basico Cando se declara y usa una variable en una funcién esté totalmente separada, y ee distinta de cualquier otra variable que se haya declarado en cualquier otro lugar del programa. Esto 8 cierto incluso si las variables tienen el mismo nombre, El programa que se encuentra en el listado 5.3 muestra esta independencia, Listado 5.3, Demostracién de las variables locales. /* Demuestra las variables locales */ Hinclude bb return a; else return by B:\>1istosoa Enter two different integer values: 200 300 ‘the larger value is 200 Es\o1ist 0504 Enter two aifforont integer values. 300) = + 200 ‘he larger value is 300, ee eee " prototipo de funcién para larger_of(). Observe que usa dos variables int como mae at en eet, Om wn ce ‘Una nota final sobre este programa. La linea 11 ¢s una nueva funcién que no se habia visto antes. puts () (lea put string es una funciGn simple que despliega una cadena en la salida esténdar, que por lo general es la pantalla de la computadora, (Las cadenas se tratan en el Dia 10, Caractere yeadenas”. Porahora, simplemente sepaque soneltextoentre comills.) Recuerde que el valor de retomo de wna funci6n tiene un tipo que es especificado en el eencabezado de funcin y en el prototipo de funcién. El valor regresado por la funcin debe ser del mismo tipo, ya que sino el compilador genera un mensaje de eror. 103 as | Funciones: lo basico El prototipo de la funcién {Un programa debe inclvir un prototipo para cada funcién que use. Se vio un ejemplo de prototipo de funcién en a linea 4 del listado 5.1, y ha habido prototipos de funciGn también en los otros listados. ,Qué es un prototipo de funcién y para qué se necesita? Puede ver en los ejemplos anteriores que el prototipa de una funcién es idéntico al encabe- 2ado dela funci6n, con un punto y coma afadido al final. De manera similar al encabezado sdefuncién el prototipo de funcién incloye informacion acerca del tipo de retorno,el nombre y los pardmetros de la funcién. El objeto del prototipo es darle informacién al compilador Sobre el tipo deretomo, el nombre y Tos parimetos dea Tuti6n-Con esta informacién el conmpilador puede hacer una revisin cada vez que elcédigo fuente lame a la funci6n, y verficar que se est pasando la cantidad y tipo corectos de argumentos ala funci6n y se ‘std usando correctamente el valor de retomo. Si hay alguna discordancia, el compilador ‘generar un mensaje de errr. Hablando estrictamente, un prototipo de funcién no necesita ser exactamente igual que el ‘encabezado de funciGn. Losnombres de parimetros pueden ser diferentes siempre y cuando sean del mismo tipo, cantidad y estén en el mismo orden. No hay raz6n para que el ‘encabezado y el prototipo no concuerden. Al tenerlos idénticos se failita la comprensién del cédigo fuente, y tambien faclita la escritura del programa. Cuando se completa una definicién de funcién, use la caracteristica de cortar y pegar del editor, para copiar el ‘encabezado de funcién y crear el prototipo. Asegurese de aiadir un punto y coma al final. _{D6nde deben ponerselos prototipos de funcién en el c6digo fuente? Deben ser puestosantes ‘del inicio de main () © antes de que la funcin sea definida por primera vez. Para mejorar Ia legibilidad, lo mejor es agrupar todos los prototipos en una sola posicién. NO DEBE 104 ‘Para pasar argumentos a una funcién se les lista entre paréntesis a continuacién del nombre de Ia funcién, La cantidad de argumentos y el tipo de cada uno de ellos debe coincidi con 40s parimetros del encabezado y prototipo de funcién. Por ejemplo, si una funciGn esté efinida para que tome dos argumentos de tipo inc, se le deben pasar exactamente dos f, afgumentos 2nt, ni mis nt menos, yno de otro tipo. Si se trata de pasar a una funcién una JF cantidad y/o tipos de argumentos, ei compilador lo detecta basado en la informacién que se encuentra en el prototipo de funcién. Sia funcién usa varios argumentos, os argumentos listados en la llamada a la funcién son asignados a los parémetros de la funci6n en orden: el primer argumento con el primer pardmetro, el segundo argumento con el segundo parimetro y asf sucesivamente, como se * itustra en la figura 5.5. anal Encabeadodohdiin void éunciyine ine Ys sae Ys Figura 5.8. Varios argumentos son asignados a los pardmetros de la funcién en orden. Cada argumento puede ser una expresin valida del C: una constante, una variable, una expresién matemética o légica, 0 incluso otra funcién (una que tenga un valor de retorno). Porejemplo,sinale(), square() y third() son funciones con valores de retoro, se podria escribir x = hal (third (square (half ty) ))); Bl programa primero lama a hal £(), paséndole y cou argomenty, Cuando lt eecucién regresa de half (), el programa llama a square (), paséndole el valor de retomo de hha () como su argumento. A continuaciénes llamado chia), conel valor de retomo de square() como argumento, Luego es vuelto a llamar hal£(),y esta vez con el valor de retomode third) como argumento. Pordltimo, el valorderetorno dena £ () es asignado ala variable x. EI siguiente es un fragmento de c6digo equivalente: a= half(y); B= oquaretar | ot | 105 106 Llamado de funciones Hay dos maneras de llamar una funcién. Cualquier funcién puede ser Hamada simplem con sunombre y lista de argumentos en un enunciado, Sila funcién tiene un valor de ret es descartado. Por ejemplo, wait (12); EI segundo método puede usarse solamente con funciones que tienen un valor de ret Como estas funciones dan como resultado un valor (esto es, su valor de retorna) s expresiones vélidas del C, y pueden usarse en cualquier lugar donde pueda usarse expresién de C. Ya ha visto una expresin con un valor de retomo usada en el lado derec de un enunciado de asignacién. A continuaciGn se presentan otros ejemplos: PrintE (‘Half of td is 44. *, x, balfof (x); En este ejemplo, hal fof () es un pardmetro de una funci6n, Primero es llamada la fu cién hal £_of () con el valor de xy luego es llamada print £() usando los valores x half_of Gc) y= half_of(x} + half_of (2); En este segundo ejemplo estén siendo usadas varias funciones en una expresién, Aung hal f_of () es usada dos veces, la segunda llamada puediera haber sido cualquier o funciGn. El siguiente o6digo muestra los mismos enunciados, pero sin estar todos en u linea. oft); of (2); aed 1Los dos ejemplos finales muestran maneras efectivas de usar los valores de retorno de las) funciones: if ( half_of(x) > 10) ( ) Agu una funcién se esté usando con el enunciado it. Siel valor de retorno de la funcién satisface el criterio (en este caso, sia f_of () regresaun valormayorque 10),elenunciado {if es cierto y los enunciados se ejecutan. Siel valor regresado no satisface el criterio, los ‘enunciados del i no se ejecutan. El siguiente ejemplo es todavia mejor: Af ( ejecuta_un_proceso() != OKAY ) { ‘enunciados /* éste puede ser cualquier enunciado */ enunciados /* ejecuta rutina de error */ ) Nuevamente no he dado los enunciados actuales ni ejecuta_un_proceso() es una funcién real, Sin embargo, es un ejemplo importante que revisa el valor de retorno de un ‘Proceso para ver si ejecut6 correctamente. Silohizo, losenunciados seencargandecualquier ‘manejo de errores o de limpieza. Esto es usado cominmente cuando se accesa informacién en archivos, se comparan valores y se ubica memoria, Si trata de usar una funcién con un tipo de retorno void en una expresién, el compilador ‘genera un mensaje de error. Recursién Eltérmino recursiénserefierealasituacinen aque una funciénsellamaas{misma, directa indirectamemte. Larecursion indirectasucede cuandounafunci6n lama.aotrafuncién que su vezllamaa la primera funcidn. EI permite las funciones recursivas y pueden ser ities en algunas situaciones. L| Por ejemplo, la recursién puede usarse para calcular el factorial de un nimero. El factorial de un niimero x es escrito x!, y calculado de la manera siguiente: Mew aed Sin embargo, también se puede calcular x! de la manera siguiente: xiext =D! ‘Yendo un paso més adelante, se puede calcular (x-1) 1 con el mismo procedimiento: Get)! = x= 1) + Ge 21 ‘Se puede continuarcaleulando en forma recursiva hasta que se Hega al valor de 1. y cuando te ese caso, seha terminado, E programaenel listado 5.5 usa una foncidarecursiva para ‘calcularfactoriales. Como el programa usa enteros sin signo, est limitado aun valor inicial de8. El factorial de9 y de valores més grandes esté fuera del rango permitido para losenteros. 107 108 Funciones: lo bésico Listado 5.5. El uso de una funci6n recursiva ara calculur factoriales. 7 Denuestra 1a recursién Ge una funcién. Calcula el */ 7 Factorial de un mimero. */ Hincluée unsigned int £5 x7 unsigned int factorial (unsigned int a); aint) c pute(*Enter an integer value between 1 and 8: *); seanf(*td", 6x}; iter siixet ( printf ("only values from 1 co 8 are acceptable!) ; -actorial (x peintf£("tu factorial eqais tut, x, 0; ! , staned int factoriaunsioned int a) if (2a) return 1; else { fa te factorial a-1)? return 3; ) Enter an integer value between 1 and 8: 6 6 factorial equals 720 [La primera parte de este programa es similar a muchos de los otros programas que ya se han visto. Comienza con comentarios en las Iineas 1 y 2. En la linea 4 se incluye el archiva de encabezado adecuado para las rutinas de entrada/salida. La inea 6 declara ‘un par de valores enteros sin signo. La inea 7 es un prowtipe ue funcién para la funcisn de factorial. Observe que toma un unsigned int como parimetro y regresa un unsigned int. Las Mineas 9a 23 son fa fanciGa ma in) Las ineas 11 y 12imprimen un mensaje que pide un valor del 1 al 8 y luego acepta el valor tecleado. sueeeeeeeueeenseeceeseeeee GM Las Ifneas 14 a 22 muestran un enunciado é f interesante. Como un valor mayor que 8 causa problemas, eete enunciado i frevisael valor. Si es mayor que , imprime un mensaje de error ¥¥,€n caso contrario, el programa calcula el factorial en la linea 20 e imprime el resultado cena fnea 21. Cuando sepa que puede haber problemas, como el mite en el tamafio de una cifra, alada c6digo para detectar el problema y prevenitlo. Nuestra funcién recursiva, factorial (), se encuentra en las Ifneas 14 a 22. El valor pasado es asignadoa a. Ena linea 27 es revisado el valor de a. Sies 1, el programaregresa ‘el valor 1. Si el valor no es 1, es puesto a igual a s{ mismo multiplicado por el valor de factorial (a-1). Elprograma vuelve allamar ala funci6n factorial, peroesta vezel valor de aes (a ~ 1)-Si(a ~ 1) noesigual a1, es vuelto a llamar factorial () con ((a = 1)~1),quees lo mismo que (a ~ 2). Este proceso continia hasta que el enunciado if de la Iinea 27 es cierto, Si el valor del factorial es 3, el factorial es evaluado a lo siguiente: 34 O-Nea- DD )énde se ponen as funciones 1 Tal vez se pregunte en qué parte del c6digo fuente debe poner las definiciones de funcién, + Porahiora deben ir en el mismo archivo de e6digo fuente que rain () y después del final de nnain (). Laestructura bsica de un programa que usa funciones se muestra en la figura 5.6. * Se pueden guardar las funciones definidas por el usuario en un archivo del eédigo fuente separado, separado de main(). Esta técnica es stil con programas grandes y cuando se ‘quiere usar el mismo juego de funciones en més de un programa. Esta técnica se trata en el fa 21, “Aprovechando las directivas del preprocesador y més”, T1 109 Funciones: lo basico Figura 5.6. Ponga los prototipos de funcién antes de main) y las definiciones de fu después demain) Resumen Este capitulo le present las funciones, que son una parte importante de la programacién: . Las funciones son secciones independientes de C6digo que ejecutan tareas especificas (Cuando el programa necesita que se ejecute una taea lama ala funcién que ejecutaesa tarea Eluso de funciones es esencial para a programacién estructurada, un método de disefio di programa que enfatiza el enfoque modular descendente.La programacin estracturada cea programas més eficientes y también mas féciles de usarse por uno, el programador. —* ‘También se aprendié que una funcin consiste en encabezado y cuerpo. Aquél incluyt informaciénacerca del tipo de retorno.nombre y pardmetrosdela funcin: éste, declaracionet de variables locales y los enunciados del C que se ejecutan cuando es llamada la funciéat Por iltimo, se vio que las variables locales, aquellas declaradas dentro de una funcién, sou completamente independientes de cualquier otra variable de programa declarada ex cualquier otro lado. Preguntas y respuestas L {Qué pasa si necesito regresar mas de un valor de una funcién? ‘Muchas veces necesitaré regresar més de un valor de una funcién, o lo que es més ‘comin, desearé cambiar un valor que le es enviado a la funcién y guardar el 10 ties: bt cambio después de que termine la funcién, Esto se trata en el Dia 18, “Obteniendo més de las funciones”. {Cémo sé qué tan bueno es el nombre de una funcién? Un buen nombre de funci6n describe 1o més especificamente posible lo que hace Ia funcién, ‘Cuando se declaran variables al principio del listado, antes de main), pueden usarse en cualquier lugar, pero las variables locales s6lo pueden usarse en la funcion especifica, ;Por qué no declarar todo antes de man ()? En el Dia 12, “Alcance de las variables” se trata a mayor detalle el alcance de las, variables, {Qué otras formas hay de usar la recursiGn? La funcién factorial es un primer ejemplo sobre el uso de Ta recursiGn. En muchos celeulos estadisticos se necesita el nimmero del factorial. La recursion es simplemente un ciclo. Sin embargo, tiene una diferencia con respecto a otros los. Con ta recursiGn cada vez que es llamada una funcién recursiva se crea un nuevo juego de variables. Esto no es cierto en los otros ciclos que veré en el siguiente capitulo, {iene que ser main) la primera funcién en un programa? No. Es un estindar en C que la funcn rain) sea la primera funcidn que ejecute. Sin embargo, puede ser puesta en Cualyuier lugar del archivo fuente. La mayorta de la gene la pone primero para que sea fécil de localizar. el Eltaller proporciona un cuestionario que le ayudar4.a reafirmar su comprensién del material tratado y ejercicios para darle experiencia en el uso de lo que ha aprendido. Cuestionario Va a usar programacin estructurada cuando escriba sus programas en C? {{Cémo funciona la programacién estructurada?, Dénde entran las funciones del C en la programaci6n estructurada? {{Cusl debe ser Ia primera linea de una definicién de funcién y qué informacién contiene? {Qué tantos valores puede regresar una funcién’? un “8 Funciones: lo basico m2 yee ‘Si una funcién no regresa un valor, con qué tipo debe ser declarada? ‘Cudl es la diferencia entre una definiciGn de funcidn y un prototipo de funcién’? Qué es una variable local? {En qué son especiales las variables locales? Ejercicios Escriba un encabezado para una funcién llamada haz1o(), que tome tres argumentos de tipo char y regrese un tipo float al programa que la lama, Escriba un encabezado para una funci6n llamada imprine_un_nimero(), que ‘tome un solo argumento de tipo int y no regrese nada al programa que la llama, {Qué tipo de valor regresan las siguientes funciones? 48, ine tnprine_error( float numerror); long lee_registro{ int nuneeg, int longitu BUSQUEDA DE ERRORES: {Cudl es el error en el siguiente listado? Hinclude void print_neg{ void ); rain() print_nsg( “This is a nessage to print* ) void print_asg( void } i puts( ‘This is a message to print’); return 0; ) . BUSQUEDA DE ERRORES: {Cul es el error en la siguiente definicién de funci6n? int twice(int y) ‘ return (2 * y); d ‘Vuelva a escribir el listado 5.4 de tal forma que s6lo necesite un enunciado return. 7. Tseriba una funcién que reciba dos niimeros como argumentos y regrese el valor de su producto. | 8, Escriba una funcién que reciba dos néimeros como argumentos. La funcién debe dividir el primer mimero entre el segundo. No divida cuando el segundo niimero sea cero. (Consejo: Use un enunciado i £.) 9. Escriba una funcién que llame a las funciones de los ejercicios 7 y 8. 10. Escriba un programa que use una funcién para encontrar el promedio de cinco valores tipo float tecleados por el usuario. 11. Bscriba una funcién recursiva que calcule el valor de 3 a la potencia de otro rtimero. Por ejemplo, si se le pasa 4, la funcién regresard 81. | an | 113 —— = oe SS aS - ee Se os 116 - Enel Dfa 4, “Enunciados, expresiones y operadores”, se trat6 al enunciado 1£, que da algo ‘de control sobre el flujo de los programas. Sin embargo, muchas veces se necesita algo més {que la simple habilidad de tomar decisiones sobre cierto o falso. Este capitulo presenta tres ‘nuevas maneras de controlar el flujo del programa, Hoy aprender Qi La manera de usar arreglos simples. 1 La manera de usar ciclos for, while y do...whi le para ejecutar enunciados varias veces. Como se pueden anidar enunciados de control de programa. Este capitulo no pretende dar un tratamiento completo de estos temas, pero si suficiente jnformacién para que usted sea capaz de comenzar a escribir programas reales. Estos temas se tratan a mayor detalle en el Dia 13, “Mis sobre el control de programa”. Arreglos: lo basico Antes de que tratemos al enunciado for, hagamos una pausa y aprendamos lo bésico de los arreglos. (Véase el Dia 8, “Arreglos numéricos” para una explicacién a fondo de los arre- glos.) El enunciado for y los arreglos estén intimamente relacionados en C, por lo que es ‘dificil definir uno sin explicar el otro. Para aypdarle a comprender los arreglos, que se usan ‘en los ejemplos del enunciado for que se presentan a continuacién, se da una rpida explicacién de los arreglos. Un arregio es un grupo indexado de ubicaciones de almacenamiento de datos que tienen el ‘mismo nombre y se distinguen entre ellas por un subindice o indice, un niimero que se pone a continuacién del nombre de la variable encerrado entre corchetes. (Esto le quedard mas claro conforme avance.) De manera similar a otras variables del C, los arreglos deben ser declarados. Una declaracién de arreglo incluye tanto el tipo de dato como el tamatio de arreglo (12 cantidad de elementos en el arreglo). Por ejemplo, el enunciado int datoe (1000) ddeclara aun arreglo llamado datos que tiene el tipo int y contiene 1,000 elementos. A los ‘elementos individuales se hace referencia mediante subndices, como datos {0] hasta datos [999]. El primerelementoes datos [0],y no datos [1).Enotros lenguajes, como e1BASIC, el primer elemento de un arreglo es 1, pero esto no es cierto en C. (Cadaclemento de este arregloes equivalente auna variable entera normal y puede ser usado cen la misma forma. Fl subfndice ce un arregla puede ser otra variable del C, como en este ejemplo: int datos 1000) ; int contador Cpntador = 100; Gatos{contador} F* que es igual a datos{100} = 12. */ oe Esta ha sido una rapida introduccién a los arreglos. Sin embargo, con esto debe ser capaz de comprender Ia manera en que se usan los arreglos en los ejemplos de programa que se ‘encuentran posteriormente en este capitulo. Si todos los detalles de los atreglos no le han ‘quedado claros, no se preocupe. Ya verd mas acerca de los arreglos en el Dia 8, “Arreglos ‘uméricos”, Control de la ejecucién del programa El orden por omisiGn de ejecucién en un programa de C es descendente, La ejecucién ‘omienza al principio de la funcién main{),y avanza enunciado por enunciado hasta que se llega al final de nan). Sin embargo, este orden rara vez se encuentra en los programas de C reales. Ellenguaje C incluye una variedad de enunciados para el control de programa, {que le permiten controlar el orden de la ejecucién del programa. Yaha aprendido le manera de usar el operador fundamental de Uevisiones del C, el enunciado if, por lo que «exploraremos tres enunciados de control adicionales que encontrar4 tiles, El enunciado for El enunciado for es una construccién de programacién del C que ejecuta un blogue de uno ‘omfsenuncisdosvina determinada antidad de veces, A veoescs llamado el ciclofor, debids ‘que Ia ejecucién del programa por lo general hace ciclos por los enunciados més de una vez. Ya ha visto unos cuantos enunciados for, que han sido usados en los ejemplos de _programacién anteriormente eneste libro. Ahora se encuentra listo para verlamaneraen que funciona el enunciado for. Un enunciado for tiene la siguiente estructura: tortunicial; condicién; incremento) ‘unefado, inicial, condicién e incresento son expresiones del C, y enunciado es un ‘enunciado simple o compuesto del C. Cuando se encuentra un enurtiado for durante la \ntd", coune); B a 5 16 " 18 8 20 1 diagrama en la figura 6.2 ilusta la operacién del ciclo for en el listado 6.1, La linea 3 incluye el archivo de encabezado de entrada/saida estdndar. La linea 5 seclara una variable de tipo int Hamada count, que serd usada en el ciclo for. Las lineas 11 y 12 son el ciclo for. Cuando se lega al enunciado for, se ejecuta primero lenunciado inicial. Enestelistadoel enunciado iniciales count=1. Estoinicializaa count para que de esta forma pueda serusado enel esto del ciclo, El segunda pasnen la jecncicn {de este enunciado for es laevaluacidn dela condicidn count. <= 20. Debideaque count acaba de ser inicializado a 1, se sabe que es menor que 20, por lo que el enunciado del ‘comando for, print F(), se ejecuta. Después de ejecutar la funcién de impresién es ‘evaluada la expresién de incremento, count ++, Esto aflade 1 a count haciendo que sea 2. ug “i Control bésico del program: 120 Ahora el programa regresa y revisa nuevamente lacondicién, Sis cieta, vuelve aejecutar elprint £ (),yelincremento sumaa count (haciendo que sea3) ylacondiciénesrevisada, Este ciclo continta hasta que la condicin evalia@falso, y en este punto el programa sale 4el ciclo y continda en la siguiente linea (linea 13), que en este listado da por terminado al programa Figura 6.2. La manera en que funciona el ciclo €or del listado 6.1 El enunciado for es usado frecuentemente, como en el ejemplo anterior, para contar, incrementando un contador de un valor a otro. También se le puede usar para “contar al revés", disminuyendo en vez de incrementar Ia variable del contador. for {contador = 100; contador > 0; contador ‘También se puede incrementar en un valor diferente de 1 for (contador = 0; contador < 1000; contador += 5) Elenunciado for es bastante flexible. Por ejemplo, se puede omitir la expresién de inicia- lizaciénsila variable que se ha de probar ha sido inicializada anterioremente-enel programa, (Sin embargo, todavia se debe usar el separador de punto y coma, como se muestra.) contador = 17 Tor ( } contador < 1000; concador+) La expresién de inicializaci6n no necesita ser de hecho una iniializacién, sino que puede ser cualquier expresin valida del C. Sin importar lo que sea, se eecutauna sola vez, cuando el enunciado tor se ejecuta por primera vez. Por ejemplo, lo siguiente imprime “Ahora se ordena el arreglo. SE contador « 1; for { printé{sahora se ordeia el arreglo...°) ; contador < 1000; contadors+) ye" aqui van los enunciados para el ordenaniento */ ‘También se puede omitir la expresiGn de incremento, ejecutando Ia actualizacién en el ‘cucrpodel enunciado for. Nuevamente debe serincluido el punto ycoma,Porejemplo, para imprimir los nimeros del 0 al 99, se puede escribir tor (contador = 0; contador < 100; } PrintE(*8", contadorss]s La expresién de prueba que hace que termine el ciclo puede ser cualquier expresién de C. Mientras evalie a cierto (diferente de cero) el enunciado for continia ejecutando. Se pueden usar los operadores légicos del C para construr expresiones de prueba complejas Por ejemplo, el siguiente enunciado for imprime los elementos de un arreglo lamado arreaio |, detenkéndose cuando todos los elementos han sido impresososeha encontrado tumelemento con un valorde0. 1 #2 t for (contador = 0; contador < 1000 ke arreglo[contador] != 0 contadors+) rinte(*a", arregloleontador!)7 Sepodriasimplificartodaviamésel ciclo for anterior, escribiéndolo de lamanerasiguiente (Sino entiende los cambios hechos alas expresiones de prueba, necesita revisar el Dia 4, “Enunciados, expresiones y operadores”) for (contador ‘ontador < 1000 && arreglo{contador!: ) print#(*83", arreglo[contador+<]]; ‘Se puede poner a continuacién del enunciado fo un enunciado nulo, haciendo que todo el trabajo se ejecute en el mismo enunciado for. Recuerde que el enunciado nulo es un punto ¥ coma s6lo en una linea. Por ejemplo, para iniciatizar toos los elementos dev arregla de 1,000 elementos al valor 50, se podria escribir for {contador = 0; contader < 1000; arreglolcontador-+) = 50) En este enunciado for el valor de $0 es asignado a cada miembro del arreglo por la parte de incremento del enunciado, Enel Dia4, “Enunciados, expresiones y operadores”, se mencion6 que el operador decoma del Ces usado a veces en los enunciados For. Se puede crear una expresién separando dos subexpresiones con el operador de coma, Las dos subexpresiones son evaluadas (en orden de izquierda a detecha) la expresiGn completa evalGa al valor de la subexpresién que se encuentra a la derecha. Usando al operador de coma se puede hacer que cada parte de un ‘enunciado for ejecute varias tareas Imagine que tiene dos arreglos de 1,000 elementos, a} yb{]-Se quiere copiarel contenido de a) ab{) en orden inverso, de forma tal que después de la operacién de copia b{01 = 2[999], b(2] = a(398] y asf sucesivamente, E] siguiente enunciado for hace el truco: | zg | 1 | Control bésico del programa m2 tor ci bul El operador de coma es usado para inicializar dos variables, 3 y 3. También es usado en la parte de increment para modificar las dos variables dentro de cada ciclo. 4. = 999) 4 < 1000; S44, ality Sintaxis Elenunciado for forlinicial; condicién increnento) _enunciado(s) Lo inicial es eualquier expresin valida del C, Por lo general, es un enunciado de asignacién, que pone una variable a un valor determinado. La condicién es cualquier expresiOn valida del C. Por Jo general, es una expresién relacional. Cuandola condicién evaliaa also (0)terminael enunciado for, ylaejecucién pasa al primer enunciado que se encuentra después del enunciado del for. En caso contrario se ejecutan los enunciados del for. Bl incremento es cualquier expresiGn valida del C. Por lo general es una expresion que | incrementa una variable que ha sido inicializada por la expresién inical | Las enuneSados son ls enunciados quest ejecutanmientas la condici6n permanezea int, . = Uneenunciado for es un enunciado de cielo, Puede tener una icalizaci6n, una prueba de ccondicién y un ineremento como parte del comando. El enunciado for ejecuta primero la cexpresién inicial. Luego revisa la condici6n, y en caso de que sea ciera se ejecutan los ‘enunciados, Una vez quelosenunciadosseterminan, es evaluadalaexpresin de ineremento. Elenunciado or vuelve a revisar entonces la condicin, y continda haciendo ciclo hasta ‘que la condicién es falsa jemplo 1 1 * Inprine el valor de x al tiespo en que cuenta de 0a 9 */ for x = 0: x < 10: xr} Drinté| *tnél valor de x es 44%, x) Ejemplo2 (* pide cifras a1 usuario hasta que se teclea 99 */ ine mum = 0; fort 7 num {= 93: ) seant( “td Ejemplo3 /* Permite que el usuario teclee hasta 10 valores enteros. */ [> tos valores son guardados en un arreglo Llanado valor. */ J Sige teclea 99 el ciclo se deciene ) ‘mua int contador, nunero=0; for ( contador = 07 contador < 10 && musero 93 contadorss} puts { *Teclee un nimero, 98 para terminar *) Scant | *3", eninero} valor (contador) = nimeror) Enunciados for anidados ‘Un enunciado for puede ser ejecutado dentro de otro enunciado for. esto se le Mama aidado. (Ya se vio esto en et Dia 4, “Enunciados,expresiones y operadores”, dentro del ‘nunciado i.) Anidandoenunciados fox se puede hacer programacia comple. Elistado 662no es un programa compleo, pero ilustael anidado de dos eaunciados #or. . Fea Listado 6.2. Demostracion de enunciados for anidados. 7* Demwestra el anidado de dos enunciados for */ Ninelude 1 2 3 a 5: void drawbex| int row, int colunn): & 7: maint ef 3 Azawbox( 8, 35.0; 12: void drawbox| int row, int cotum ) aT a int eo} 15 fort 7 tow > 0) rowen ) 16 { Ft for(col = column; oo > 0; col-- } 6 Pinte "x" J sl 20 prlnett "at 13 As | Control bsico del programa El trabajo principal de este programa serealizaen la linea 18. Cuando se ejecuta este ‘programa se imprimen 280 X en la pantalla, ormando un cuadro de 8 por 35. El pro- ‘grama tiene solamente un comando para imprimir una X, pero se encuentra anidado en dos ciclos. Eneste listado se declaraen la nea Sel prototipo de funcién para draw_box (). Esta fun- ‘cin toma dos variables de tipo int, row y colurn, que contienen las dimensiones del ‘cuadro de X que serd trazado. En la linea 9main() lamaadraw_box_), ylepasa 8 como el valor de row y 35 como el valor de column. ‘Viendo detalladamente la Funcién davw_ox }) se pueden ver unas cuantas cosas que no se entienden fécilmente. La primeraes por qué se declara la variable local cot. La segunda es por qué se usa el segundo printf () en la linea 20. Ambas cosas se verdn més claras después de observar los dos ciclos for, Enla linea 15 comienza el primer ciclo for. No se hace la inicializaciGn, debido a que el valor inicial de row fue pasado a la funcién. Viendo la condicién se ve que este ciclo for se ejecuta hasta que row es igual a0. Al ejecutar por primera vez Ja linea 15 row vale 8, y por lo tanto el programa conta a la linea 17. ‘La linea 17 contiene el segundo enunciado for. Aquf el parimetro que se ha pasado, ‘col umn, €§copiado a una variable local, co1, de ipo 2nt. El valor de co1 ¢s inictalmente 35 (el valor pasado por medio de column) y column conserva su valor original. Debido a ‘que col es mayor que cero, se ejecuta la linea 18, imprimiendo wna X. Luego col es paint) 1 2 3 4 5: int count é: & of 1 Inprine los nineros del 1 a1 20 */ 11: count = 1; 12 13: while {count <= 20) 14 15 princf{*\atd*, count) 16: count ++; vv , et 20 RR Sis oon a cre 126 a Sintaxis ‘she actual. y contiene el mismo enunciado condicional que el listado 6.1. count <=20. Enel ciclo white la inea 16 se ocupa de inerementar a count. {Qué cree que pasarfa si se le olvida poner la linea 16 en el programa? El programa no sabria cusndo parar, debido aque count siempre seria 1, que es siempre menor que 20. ‘Tal vez se haya dado cuenta de que un enunciado whi lees esencialmente un enunciado for sin los componentes de inicializacin e incremento. Por lo tanto, tor i) condics es equivalente a waile (condicisn) Debido a esta equivalencia, cualquier cosa que pueda ser hecha con un enunciado for también puede ser hecha con un enunciado wh 1e. Cuando se usa un enunciado whi le se {debe hacer primero cualquier inilalizacién que se necesite en un enunciado separado, y 1a actualizacién debe ser realizada por un enunciado que sea parte del ciclo whi Le. ‘Cuando son requeridas a inicializaciGn y la actualizaci6n, la mayorfa de los programadores de C con experiencia prefieren usar un enunciado for en vez de un enunciado wh: Le. Esta preferencia se basa, en primer lugar, sobre la legibilidad del c6digo fuente. Cuando se usa lun enunciado for las expresiones de inicializacién e incremento se ubican juntas, y son fciles de encontrar y modificar. En un enunciado wh: 12 as expresiones de inicializacién y de actualizaciGn se encuentran ubicadas por separado y pueden ser menos obvias. El enunciado while wnilet condicién } enuneiado(s) La condicicn es cualquier expresin valida del C y por lo general es una expresi6n relacional. Cuando la condicién evala a falso (cero) el enunciado wh’ Le termina, y la «’jecucién pasa al primer enunciado que se encuentraa continuacién delos enunciadosdel while. En caso contrario se ejecutan los eruncéados C gue se encuentran en el while. Los enuncsados son los enunciados C que se ejecutan siempre y cuund la conaicaén Un enunciado whi 1e es un enunciado de ciclo del C. El permite la ejecucisn repetida de un cenunciado o de un bloque de enunciados en tanto la condicién permanezca cierta (diferente ‘de cero) Sila condicién no es cierta cuando el comando whi le se ejecuta por primera vez, Jos ennuncsacoss munca se ejecutan, Ejemplo 1 int x = 0; while( x < 10) 2 “ai Control bésico del programa dit | _ printf *\nbt valor de x es 4d", x17 + pide cifras al usuario hasta que se teclea 39 */ ae nim =F viel nia c= 98) scane( ted", sin 1+ jempio 3 7+ permite que e) usuario teclee hasta 10 valores entercs 1), tee alofes Son guardados en un arreglo ilanado valor 1. sPaettecies 99 el ciclo se deciene foe valoriidl E int contador = 0; minora; Se ‘thine Uconcado! < 10 te némero t= 98) nar *)s puts { *Teclee un nimero, 99 para peant ( td", sninezo) Yalor{contadoe} = ninero; | sontagoe ) Enunciados while anidados oy ” ‘De manera similar a los enunciados for € 4, los enunciados white también pueden apaidene, Estado 6.4 muestra un ejemplo de enunciados wh 1e anidados. Aunque Este no ‘es el mejor uso de un enunciado whe, el ejemplo presenta algunas ideas nuevas nidados. ado 6.4, Demostracién de enunciados wis 7* Demoestra enunciados while anidados */ include 10} t Dprinté( *\ngnter muaber 4@ of 5: *, ctr + 1) Beant( rad", abr 7 ) axcey (ee) ae: g Be fork cer = 9) ctr < §) tne) = Ce a ‘This progran prompts you to enter § nunbers Each miner should be from 1 to 10, bnter nunber 1 of 5:2 inter nunber 2 of 5: 6 Enter nunber 3 of 5:3 ots: 9 Se ue a Sn acta ‘un arregio (llamado array) que puede guardar cinco valores enteros. La funcién main () contiene dos variables locales adicionales, ctr y nbr (Iineas 9 y 10), Observe que estas creatine ami, ries, en se oer i ib ple se creates Sateen ier chs nen oe erate iogearegmbn ee ccpen ome ten ‘eo poe cme ay mycin re eee, is nate anidado) se obtiene un ntimero en la variable nbr, la linea 24 pone el ndmero en el arreglo ale nce te ice oe et | 2 | 129 “a Control basico del programa. El ciclo interno es un buen uso del enunciado whi 1e. Sélo son vAlidos tos nmeros del I al 10, por lo que mientras que el usuario teclee un mimero vAlido no tiene caso continuar con el programa, Las lineas 1822 previenen la continuaci6n, Este enunciado whi Le establece {que mientras el nimero sea menor que Io mientras sea mayor que 10, el programa debe ‘mprimic un mensaje para pedir el aimero y luego obtener. Las Hines 28 y 29 imprimen los valores que se encuentran guards eu array. Observe que 1 2 3 4 5: int get_menu_choice( void ): 6 7 8: aint) i a int choicer 20. 11: choice = get_nem_choice(): 2 2 PEInEE( ‘You chose Menu Option 8a", choice }2 at 15 16: int get_menu_choicet void } Mm ¢ 18: "Ane seteccion © 07 1 20: do ( prince! *\nt printE( \nl - add a Record” ) Brinte( *\n2 - Change a record"); printé( *\n3 — Delete a record’); printé( *\nd = quite) Brine *\nt J; printé{ *\ntnter a selections" ); scanf( “ar, aselection J; while ( selection < 1 |! selection > 4 1; return selection; = Add a Record = Change a record = Delete 2 record ee a inter a selection:8 132 ET FRR rong enon nn Mo tc sale hardreset pe deberd ser capaz de seguir la mayor parte del listado. La funcién main () (Iineas 7-14) no seatirgee ee near thes erin) rinté( *You chose Menu Option 44", get_nenuoption() 1 Si se fuera a armpliar este programa y actuar sobre Ia selecciGn, tal vez necesitaria el valor regresado por get_nenu_choice(), por lo que conviene asignar el valor a una variable (como choice). Las lineas 16 a 35 contienen a get_nenu_choice). Esta funcién despliega un mentien lapantalla(ineas 22.428) y luego btiene unaseleccién, Debidoa quese tiene quedesplegar ‘un meni por lo menos una vez para obtener una respuesta, es adecuado usar un ciclo do. . white, En el caso de este programa, el ment es desplegado hasta que se da una seleccién valida. La linea 32 contiene la parte wh 1 del enunciado do... white y valida el valor de la seleccin que, adecuadamente, es lamado select: ion. Siel valor dado no se encuentra entre 1 y 4, el mend se vuelve a desplegary se le pide al usuario un nuevo valor. (Cuando se da na seleccin valida el programa continta ala linea 34, la cual regresael valor con la variable selection. El enunciado do...while a t enunciado(s} Whilet condiesdn 12 E La condicién es cualquier expresién de C vélida y, por lo general, es una expresién relacional. Cuando la condicién evalia a falso (cero) el enunciado wh Le termina, y la ejecucién pasa al primer enunciado que se encuentra a continuacién del enunciado wie, En.caso contrariel programa regresaal do pararepetirel ciclo yseejecutanlos enunciados del C que se encuentran en enuneiado(s). Los enunciado(s) son un enunciado simple del C 0 un blogue de enunciados, que se ejecutan la primera vez que se pasa porel ciclo y luego mientras la condi cién permanece cierta, 13 | Control bésico del programa 134 fg urcrmeinto whiner unemncino de clo dlc El permite Iaejecucién repetida + de un enunciado o de un bloque de enunciados mientras a condicién se mantenga cierta | (Giferente a cero). A diferencia del enunciado while, un cielo do. ..while ejecuta sus ‘enunciados por lo menos una vez. es | jemplo 1 7 (> Saprine aunque 1a condicisn talte +/ ine = 10s 3 op © © prinett *\ne1 valor de x os 8". x) i white x f= 100; | eee i: /* obtiene nimeros hasta que el ninero es sayor que 99 */ fw nis i a i seant( “té", enn }; while nim define ourt 3 int get_nem_choice( void ) void printareport ( void nain() C int choice wihile( choice t choice = get_nenu_choicel): our) it( choice printé( else a2 2 fi 22 it( choice 22 2 | 2 elneeepors (+ 2 ) 25. d 26: print #( “You chose to quit!" a) 2 25: int get_mems_choice( void ) ao: ¢ 31 int selection = 0 32 3 ca 34 { printé{ *\nr ) Drint£{ "\nl ~'Beep Computer? ) print ( *\n2 - Display Report"); rinté( *\n3 - guit*) print£( *\n* }; print£( *\ngnter a selection:* }; scant "44 selection > 3}; void print report void ) a printf ( *\nSAMPLE REFORT* 1}; printf( *\n\nSequence\tweaning* printt( *\n At printf( "\n\\a\e\ebell (alere)* }: print£( "\n\\b\e \tbackspace* Drint£( *\n...\t\t..."1? 1 = bp conuter 2 Disp Beane, 7 ion Seen ae rae Cometer 31R decals etecton:2 a ees weaning bell (alert) backspace 143 “4 Entrada/salida bisica i> Beep computer 2 = vtspiay xepore 3 - quit Enter a selection:3 You chose to quit! = Ellistado7. | parece largoencomparaciénconlos ejemplos anteriores, peroproporciona algunas adiciones que vale la pena mencionar. El archivo de encabezado, STDIO.H, fue incluido en la linea 3 debido a que se usa print f ()} en este listado. En la linea S se define una constante llamada QUT. En el Dia 3, “Variables y constantcs numéricas”, se aprendié que #aef ine hace que el uso de la constante QUI? sea equivalente a usar el valor 3. Las Iineas 7 y 8 son prototipos de funcién. Este programa tiene dos funciones, get_menu_choice() yprint_report (). get_menu_choice() esté definida en las. Iineas 29 047. Estos similarala funciGn de ment que se encuentra enel listado 6.5. Laslineas 35y 39contienenllamadasaprint £ () queimprimen la secuencia de escape denueva linea. Las lineas 36, 37, 38 40 también usanel carcter de escape de nueva linea imprimen texto. LLalinea 35 pudiera haber cido eliminada, cambiando la linea 36 para que fuera de 1a manera siguiente: printf{ *\n\nl - Beep Computer ‘Sin embargo, dejar la linea 35 hace que el programa sea més fécil de leer Observando a la funcién main() se ve el comienzo de un ciclo whi le en la linea 14, Los ‘enunciados del white se mantendrén haciendo ciclo mientras la selecci6n no sea igual a QUIT. Debido a que QUIT es uum coustante se le pod haber reemplazado con el ndmero 3. Mas sin embargo, de haber hecho esto el programa no serfa tan claro. La Iinea 16 obtiene la Variable choice, que luego es analizada en Ias lineas 18 a 25 en un enunciado if. Si el usuario escoge 1, la linea 19 imprime el carécter de nueva linea, un mensaje y luego da tres pitidos. Sielusuarioselecciona 2enel mend, lalinea?3 ilamaalafuncién print_report (). print_ceport () estédefinida en la lineas 49 a 57 Esta funciGn simple muestra lo fécil ‘quees sara print £() y las secuencias de escape para imprimir informacién formateada ‘en Ia pantalla. Ya ha visto el carécter de nueva linea. Las Lines 52 a 56 también usan el ‘cardcter de escape tabulador, \t. Conél se alinean verticalmente las columnas del reporte. Las lineas 54 y 55 pueden parecer confusas al principio, pero si se comienza a la izquierda Yy se empieza a analizar yendo hacia la derecha, toman sentido. La linea S4 imprime una ‘mueva linea (\n), luego una diagonal inversa (\) y luego la letra a, seguida de dos tabaladores (\t \*)..La kinea termina con un texto descriptivo (bell (alert) ).Lalinea 5 signe el mismo formato. ste programa imprime las primeras dos lineas de la tabla 7.1, junto con un ttulo de reporte yy encabezados de columnas. Enel ejercicio nueve se completard este programa, haciéndolo ‘que imprima el resto dela tabla.

Anda mungkin juga menyukai