You are on page 1of 1110
Introducci6n a las computadoras, a Internet y ala World Wide Web Objetivos + Comprender los concepts bisicos acerca de las computadoras. ‘+ Familiacizarse con diferentes tipos de lenguajes de programaci6n, + Familiarizarse con la historia del lenguaje de progtamacién C. + Conocer Ia biblioteca estindar de C, *+ Comprender los elementos de un entorno de desarrotio tipico deC. ‘+ Apreciar por qué es apropiado aprender C como primer curso de programacién. + Apreciar por qué C proporciona los fundamentos para el estudio de otros lenguajes de programacin emt general, y en particular paca C+, Java y CH. + Familiarizarse con la historia de Internet y de Ia World Wide Web, Las cosas siempre son mejores al principio. Blaise Pascal Las grandes ideas requieren un lenguaje grande, Aristofanes Nuestra vida siempre es malgastada por et detalle.. simplificar simplifcar. Henry Thoreau 2. Ineduccién a las computadoras, a Internet y a la World Wide Web Capitulo 1 Plan general 1.1 Introduceién 1.2 {Qué es una computadora? 1.3. Otganizacién de computadoras 1.4 Evolucién de los sistemas operatives 1.5 Computacién personal, distribulda y cliente-servidor 1.6 Lenguajes maquina, lenguajes ensambladores y lenguajes de alto nivel 1.7 FORTRAN, COBOL, Pascal y Ada 1.8 Lahistoria de c 1.9 Labiblioteca estindar de 110 C++ 1.11 Java 1.12 BASIC, Visual Basic, Visual C++, C# y .NET 1.13. Latendencia clave del software: Tecnologia de objetos 1.14 Conceptos bésicos de un ambiente fipico de programacién en C 1.18 Tendencias de hardware 1.16 Historia de internet 1.17 Historia de ta World Wide Web 1.18 Notas generales acerca de C y de este titro Resumen * Terminologta + Error comin de programacién * Buena prictica de programaci6n + Tip de rendimiento + Tips de portabilidad » Observaciones de ingenieria de sofware * Ejericios de awtoevaluacién * Respuestas a los jercicios de autoevaluacion * Ejerccios 1.1 Introduccién sBienvenidos aC, C++ y Java! Hemos trabajado duro pars crear To que creemos serd una experiencia educa: ‘va informativa y entretenida para usted. Este libro es tnico entre otros libros de texto de C porque: Es apropiado para gente con orientacién réeniea que cuente con poca o nada de experiencia en progr smacidn, Es adecuado para programadores experimentados que deseen conacer més profundamente el lenguaje, {.Cémo puede un libro ser atractivo para ambos grupos? La respuesta es que Ia parte central det libro pone Enfasis en la claridad de los programas, a través de las técnicas comprobadas de programacidn estructurada, Los principiantes aprenden a programar bien desde ¢! principio. Hemos intentado escribir de manera clara y directa. El libro contiene ilustraciones en abundancis, Quizé lo més importante sea que ¢! libro contiene cientos «de programas completos, los cuales muestran los resultados que arrojan cuando se jecutan en una computado- ra, Nosotros Yasyamos esto “el método del eédigo activo”. Todos estos programs de ejemplo se encuentran cen el CD-ROM que acompaia a este libro; también puede descargar los originales desde nuestra pagina Web www. deitel .com. Los primeros cuatro capitulos presentan los fundamentos de las computacién, de la programacién de ‘computadoras y del lenguaje de programacién C. Los principiantes que han tomado nuestros cursos nos han di- ‘cho que el material que presentamos en estos capitulos contiene una base sélida para un tratamiento mas pro- fundo de C en los capitulos restantes. Los programadores experimentados por 10 general leen répistamente los ‘cuatro primeros eapitulos, y encuentran que el tratamiento de C en las capstules 5 a 14 es mas riguraso y de- safiante, Ep particular, aprecian el tratamiento profundo de apuntadores, cadenas, archivos y estructuras de da tas de los capftulos restantes, Capfulo 1 Introduccién a las computacioras,a internet y a ja World Wide Web 3 Muchos programadores experimentados aprecian el tratamiento de fa programacién estructurads. A menu eleaitoryse almacena J en-ctco' Biprograme preprocesodor process elcodige Elcomplador rec el codigo objeto yo famacenaen disco Eleniazodor elaciona el céctao ‘bjeto con os Biioleces, ceaa.out yo alacena c snacs —— Merete IE] pace | order ar | Rae Ecagodor esos — eee emote roe en |.__-E | Le CPU torne code instuccion Yiaojecuta. posiblement ‘lmecena nuevas valores (Ge dt mienitos el programe seeecuta Figura 1.1 Ambiante tipico de desarrollo en C. ‘c6mo editar un programa, El programador eseribe un programa en C mediante un editor, hace correcciones si ces necesario, y después almacena el programa en un dispositivo de almacenamiento secundario, como un dis- co. Los nombres de programas en C deben terminar con la extensién .¢. ‘A continuacién, cl programador introduce el comando para compilar el programa. El compilador traduce el programa en C a c6digo en lenguaje miquina (también conocido como cédizo objeto). En un sistema de C, se ¢jecuta de manera automética un programa preprocesador antes de que comience la fase de traduccién del com- pilador. El preprocesador de C obedece ciertos comandos especiales lamados directivas del preprocesador, las custes indican que se deben realizar ciertas manipulaciones en el programa antes de la compilacién, Por lo ge~ neral, estas manipulaciones consisten en inclu otros archivos dentro del archivo para que sean compilados, y en realizar distintos reemplazos de texto. En los primeres capitulos explicatemos las directivas mas comunes del preprocesador, y daremos una explicacién detallada de las caractersticas del preprocesador en el capitulo 13. Capitulo 1 Introcuccién a las computadoras, 0 internet y alla World Wide Web 13 El compilador invoca de manera automitica al preprocesador, antes de que el programa sea convertido a len- guaje méquina. La siguiente fase se denomina enlace. Por lo general, los programas en C contienen referencias a las fun- cones y datos definidos en alguna pare, tales como las bibliotecas esténdar o las bibliotecas privadas de gru- pos de programadores que trabajan en un proyecto en particular Por lo general, el cédigo objeto producido por cl compilador de C contiene “huecos”, debido a estas partes faltantes. Un enlazador enlaza el e6digo objeto ccon el cédigo correspondiente a las funciones faltantes para producir una imagen ejecutable (sin piezas faltan- tes). En un tipico sistema UNIX, el comando para compilar y enlazar un programa es ec. Para compilar y en~ lazar un programa llamado bienvenido.c teclee: ce bienvenido.c nel indicador de UNIX y presione la tecla Bnirar (Intro (0 de retorno).{Nota: Los comandlos de UNIX son sen- sibles a maytiscalas y minisculas, asegtrese de que teciea las cs como mimisculas y de que las letras del nombre de archivo sean maytsculas 0 mintsculas,segtin sea cl caso, Si Ta compilacidn y el enlace del programa ocurten con éxito, se crea un archivo a .out. Esta cs una imagen ejecutable de nuestro programa bienvenido..c. La siguiente fase se denomina carga. Antes de que el programa se pueda cjecutar, ste debe cargarse en memoria. Esto s¢ lleva a cabo mediante el cargador, el cual toma la imagen ejecutable del disco y Ia transfie- re a la memoria. También se cargan los componentes adicionales de la bibliotecas compartidas que soportan cl programa Por sitimo, la computadora, bajo cl control de la CPU, ejecuta el programa, una instrucckin ala vez. Para cargary ejecutar el programa en un sistema UNIX, teclee a -out en el indicador de UNIX y presione Entrar: Los programas no siempre funcionan al primer intento. Cada uno de los procedimientos puede falar debi- 4o a distinis errores, los cuales explicaremos. Por ejemplo, un programs en ejecucién podria intentar hacer ‘una divisin entre cero (una operacién ilegal en las computadoras, asf como en In aritmética). Esto ocasionarfa 4ue la computadora desplegara un mensaje de error. El programador volveria entonces la fase de edicin ha- ra las correcciones necesarias y procederfa con las fases restantes para verificar que correcciones funcionan adecuadamente. Error comiin de programacién 1.1 “Errores coma la divsiGn enve cero ocurven divante la ejecucian del programa, asi que estos errores son denon nnados erraes en tiempo de ejecucidn. En general, fa division entre coro es un error fatal, es decir un errr que ‘ocasiona la terminacisn inmediata del programa sin haber realizado de maneva exitasa su trabajo, Las errores no Jfatales pert al programa la ejecucin completa en su mayorta con resultados incorrectos. [Novas En algunos sistemas, la divisin entre cero no es un error fatal. Revise Ta documentacién de su sistema] ‘La mayoria de los programas en C introducen y/o arrojan datos. Ciertas funciones en C toman su entrada desde stdin (el flujo estindar de entrada) cl cual es, por lo general, el teclado, pero el stdin puede conec- tase a otro dispositivo. En su mayoria, los datos son arrojados hacia stdout (el flujo estandar de salida) el cual, por lo general es el monitor, pero el stdout puede conectarse a otro dispositivo. Cuando decimos que tun programa imprime un resultado, normalmente nos referimos a que el resultado se despliega en el monitor. Los datos pueden ser arrojados hacia otros dispositivos tales como discos e impresoras de alta velocidad. Exis- te también un flujo estdndar de errores denominado stderr. El flujo stderr (por lo general asociado con el monitor) se utiliza para desplegar los mensajes de error. Es comiin para los usuarios destinar los datos de sa lida normales, es decir, cl stdout, hacia un dispositivo distinto al monitor y mantener el stderr asignads al monitor, de manera quel usuario pueda estar informado de los errores de manera inmediata 1.15 Tendencias de hardware La comonidad de programadores se dsarola junta con el flujo continuo deavances dramaticos en el ard ware, el sofware y ls teenalogias de comnicacén. En general, cade ao la gene espera pagar ms por Ia rayora de los servicios y productos. Lo ontario ha sido el caso en los campos de las computador y 8s co- municaciones, especialmente con respect los cosios de anteimiento de estas teenologias, Por muchas Jé- cadas, sin expectaivas de cambio alguno en un futuro préximo, los costs de hardware han dsminuido de manera répda, sino es que precpitada, Este e un fendmeno de la ecnologi, Cada uno o dos fos, Ia capa- 14 Inoduccién a las computadoras,a Internet y a la World Wide Web Capfulo 1 Cckiades de las computadoras tienden 1 duplicarse mientras que los precios de las computadoras siguen cayendo. La disminucién en picada de la relacién costa/rendimiento de los sistemas de cémputo se debe a la ereciente velocidad y capacidad de la memoria en la cual la computadora ejecuta sus programas, al aumento exponen- cial en la cantidad de memoria secundaria (tal como el almacenamicnto en disco) en la que tienen que almacenar Jos programas y los datos durante largo tiempo, y al continuo ineremento en la velocidad de proceso (la velo cidad a la eual se ejecutan los programas en las computadoras, es decir, la Velocidad a la que hacen su trabajo), En las comunicaciones ha ocurrido el mismo crecimiento, y sus costos también han ido en picada, espe- cialmente en afios recientes con Ta enorme demanda por ancho de banda de comunicaciones, la cual arrae una ‘enorme competencia, No conacemos otros campos en los que la teenologfa se mueva tan répidamente y los cos- 10s disminuyan de la misma forma. Cuando en las décadas de los sesenta y setenta hizo explosién el uso de las, computadoras, se hablaba de las grandes mejoras en la productividad humana que las computadoras y las o- ‘municaciones traerfan consigo. Sin embargo, estas mejoras no se materializaron. Las empresas gastaron gran- des sumas de dinero en computadoras, y con certeza las emplearon eficientemente, pero no vieron realizadas ‘sus expectativas en cuanto a la productividad. Fue la invencién de la tecnologia de microprocesadores en chips yy su amplia wilizaci6n a finales de la década de los setenta y en la de los ochenta, Jo que sent6 la base para las ‘mejoras en la productividad actual 1.16 Historia de Internet ‘A finales de 1a década de los sesenta, uno de los autores (HIMD) de este libro era us estudiante egresado del “MIT. Sus investigaciones dentro del proyecto Mae del MIT (ahora el laboratoio d ciencias de la computaciGn, Ja casa del World Wide Web Consortium), eran patrocinadas por ARPA (Advanced Rescarch Projects Agency of the Department of Defense). ARPA patrocin6 una conferencia en la que algunas docenas de estudiantes de proyecto se eunieron en la universidad de Illinois, en Urbana-Champaign, para conocer y compartir sus ideas. Durante esta conferencia, ARPA difundis el anteproyecto de coneciar en red a las principales computadaras de tuna docena de universidades ¢insitutos de investigacin patrocinados por ARPA. Estas se conectarfan mediante lineas de comunicacién que operaban, en ese entonces, a le inretble velocidad de 56 KB (es decir, 56,000 bits por segundo), esto en una época en la que Ia mayorfa dela gente (de los pocos que podian estar) se conectaba mediante las Iineas telefGnicas a las computadoras @ un rango de velocidad de 110 bits por segundo. HMD recuerda hicidament Ia emocién en aquella conierencia. Investigadores de Harvard hablaron acerca de comu- nicar la Univac 1108, “una supercomputadera” dela universidad de Utah, con todo el pals, para manejar los caleulos relacionados con sus investigaciones acerca de grficas por computadors. Se comentaron muchas otras posibilidades inrigantes. La investgacién aeadémica estaba a punto de dar un paso gigantesco hacia delantc Poco después de éta conferencia, ARPA prOcedi con la implantacién de lo que pronto se convirti en ARPA net, 1 abuelo de Ia Internet actual Las cosas resultaron diferentes a lo que se habia planeado originalmente. En lugar de que el principal be- neficio fuera el que los investigadares pudieran compartir sus computadoras, se hizo evidente que el principal beneficio de ARPAnet iba a ser el permitr que Ios investigadores se comunicaran de una manera ripiday fac entze ellos, por medio de lo que se llame correo electrénico (e-mail) Esto es verdad incluso en el Internet ae- tual, en donde el correo clectrénicofacilita la comunicacion de td tipo de personas alrededor del mundo. Usa de las principales metas de ARPA, con respecto a lated, era permitir que miltiples usuarios enviaran y eeibieran informacién al mismo tiempo y sobre las misma rutas de comuniaci6n (al como una Tinea tele- {nica). La red operaba mediante una téenica denominada intercambio de paquetes, en la cual, un dato digital se enviaba en pequefios paguetes. Dichos paquets contentan datos, informaciGn de la dtecciGn, informacign para el coniol de ertoes y a informacién de la secuencia. La informacién sobre la dreccidn se utlizaba para establecer la ruta de los paquetes hacia su destino. La informacién de la Secuencia se ullizaba para ayudar a ‘acomodar los pauetes en su orden original (los cuales, debido alos complejos mecanismos de ruteo, en tea- lidad pueden llegar en desorden), Los paquetes de muchas personas se mezclahan en las mismas Tineas de comunicacién, La wenica de intercambio de paquetesredujo de manera importante os costos de tansiisin, com= parados con los costos de ls leas de comunicacin dedicadas. La ted se disei6 para operar sin un control central. Esto significaba que si una porcin de la red fllaba, Jas porciones restantes podrian ser capaces de enviar paquetes, de los remitentes a los destinatarios, através de rutas alternas. Coptulo 1 Infroduccién a las computadoras, a inlemet yaa World Wide Web 15 Los protocolos para la comunicacién a través de ARPAnet se hicieron conocidos como TCP (Transmission Control Protocol). TCP garantizaba que los mensajes se enrutaran apropiadamente del remitente al destinata- rio, y que los mensajes Hegaran intactos, En paralelo con Ia primera evolucién de Intemet, las empresas de todo e1 mundo estaban instalando sus propias redes de comunicacién, tanto intraempresariales (dentro de la empresa), como interempresariales (en- tue las empresas). En ese entonces aparecié una gran cantidad de hardware y software para redes, Uno de los desafios era lograr la intercomunicaci6n. ARPA lo logr6 mediante cl desarroll6 de IP (Internet Protocol), y con ello creé la verdadera “red de redes”; la arquitectura actual de Internet, A la combinacién de ambos protocolos se le denomina TCPAP. En un principio, el uso de Internet estaba limitado a las universidades y a los institutos de investigacion; después, la milicia se convirtié en un usuario importante. En algin momento, el gobierno permitié el acceso a Internet con fines comerciales. De entrada, hubo recelo por parte de las comunidades militares y de investig: ci6n, pensaban que el tiempo de respuesta se haria deficiente, conforme “la red” se saturara de usuatios. De hecho, ha ocurrido lo contrario, La gente de negocios rpidamente se dio cuenta de que si utlizaban cfectivamente la Internet, podrian afinar sus operaciones y ofrecer nuevos y mejores servicios a sus clientes. Como resultado, los ejecutivos de negocios gastaron grandes cantidades de dinero para desarrollar y mejorar Intemet. Esto generé una feroz competencia entre los proveedores de dispositivos de comunicacién, de hard- ‘ware y software para cubrir la demanda. El resultado es que el ancho de banda (es decir, Ia capacidad de trans isin de informacin de las lineas de comunicacién) sobre Internet ha crecido enormemente y Jos costos ban ido en picada, En la actualidad, los paises alrededor del mundo saben que Internet es erucial para su prosperi- dad econémica y su competitividad. 1.17 Historia de la World Wide Web La World Wide Web permite alos usuarios de computadoras, localizar y ver documentos basadas en multimedia (es decir, documentos con texto, gréficas, animacién, audi y/o video) de casi cualquier tema, Aunque Internet se desarroll6 hace més de tres décadas, la introduccién de World Wide Web es un suceso relativamente recien- te, En 1990, Tin Berners-Lee, miembro de In CERN (European Organization for Nuclear Research) desarroll6 la World Wide Web y los distintos protocolos de comunicacién que forman su esqueleto. Tanto Internet como la World Wide Web estardn en Ia lista de las creaciones mas importantes de la hum dad, En el pasado, Ia mayorfa de las aplicaciones de cémputo se ejecutaban sobre computadoras “indepen- dientes”, es decir, computadoras que no estaban conectadas entre si Las aplicaciones actuales pueden ser escritas para comunicar a cientos de miles de computadoras alrededor del mundo. Internet combina las tecnologias de comunicacién y computacién. Hace mds Fécil nuestro wabajo. Hace que la informacién esté disponible de mane- ‘2 Instantinea y conveniente 2 nivel mundial. Hace posible que los individuos y los pequeéios negocios puedan lexponerse a nivel mundial. Esté modificando la naturaleza de la forma en que se llevan a cabo los negocios. La gente puede buscar los mejores precios y virtualmente cualquier producto o servicio, Las comunidades con inlereses especiales pueden mantenerse en contacto entre si. Los investigadores pueden dar aviso de manera ins- {anténea de los Gltimos avances a nivel mundial. 1.18 Notas generales acerca de C y de este libro Aguas veces los programadores experimentados de C se sienten orgullosos por ser capaces de crear aplicacio- es tara, retoreida ¢intrincadas del lenguaje. sta es una mala préctica de programacign. Hace que los progra- ‘mas sean mis dificiles de ler, con mayor probabilidad de comporiarse de manera extrsfa, mas difiiles de leer y depurar, y ms dificiles de adaptar a modificaciones necesarias. Est libro se orienta hacia los programadores Drincipiantes, por ello motivamos la claridad. La siguiente es nuestra primera “buena préctica de programacién”. Buena practica de programacién 1.1 Escriba sus programas en C de manera clara, directa y simple. Aesto se le Nama algunas veces KIS ("keep tt sim ple”, maniéngalo sinple). No "estire” ef lengua, inientando emplearlo de manera extraia. Probablemente ha escuchado que C es un lenguaje portable, y que los programas escritos en C pueden sje. ccutarse en muchas computadoras diferentes. La portabilidad es una meta escurridiza. El documento C estin- 16 Introduccién a las computadoras, a Internet y a Ia World Wide Web Capitulo 1 dar de ANSI contiene una larga lista de temas acerca de Ia portabilidad, y se han escrito libros completos que la explican, Tip de portabilidad 1.3 “Aungue ex posible escribir programas portables, exisien muchos problemas entre Tos diferenres compladores de ©, yas computadoras pueden hacer que la portbilidad sen diel de canseguix Escrbir programas en C no go rantiza la portabilidad. A menudo, el programador fendrd que enfientarsedivectomente con la variaciones ene os compiladores y las computadoras. Nosotros hicimos una revisién cuidadosa de! documento para cl estindar de C, y comparamos nuestra presentacin contra este documento para que fuera completa y acertada. Sin embargo, C sun lengusje rico. y existen algunas sutlezas en el lenguaje y algunos temas avanzados que no cubrimos. Si usted requiere detalles ‘6enicosadicionaes sobre C, e sugerimos que lea el documento de Cestindar ol libro de Kemighan y Ritchie. Nosotros limitamos nuestra explicacién al C de ANSV/ISO. Muchas de las caracteristicas de esa versi6n fain{ void ) nicia la ejecucién del programa */ print£| "Bienvenido a C!\n" ); return 0; /* indica rama te eal p de la funcién main */ Bienvenido a C| Figura 2.1 Progrome de imoresion de texto Capitulo 2 Inoduccién ala progamacién enc 28 los comentarios y no genera e6digo objeto en lenguaje maquina. El comentario anterior slo describe el nt 1a, el nombre del archivo y el propésito del programa. Los comentarios también ayudan a otras personas a leer y entender un programa, pero demasiados comentarios pueden ocasionar que un programa sea dificil de ler. (Olvidar nalizar un comentario con *7 a Error comin de programacién 2.1 Comensar un comentario con los caracieres */, ofinalizarto eon 7. Error comin de programacién 2.2 Lafinea 3 Winclude ‘es una directiva del preprocesador de C. Las Iineas que comienzan con # son procesadas por el pteprocesa- dor antes de que el programa se compile. Esta linea en particular indica al preprocesador que incluya en el programa el contenido del encabezado estandar de entrada/salida (stAio.n). Este encabezado comtiene informacién que el compilador utiliza cuando compila las Tlamadas a Tas funciones de la biblioteca estindar de entrada/salida, como print£. En el capitulo 5 explicaremos con mas detalle el contenido de los enca- bezados. Lalines 6 int main( ) forma parte de todos los programas en C. Los paréntesis que aparecen después de main indican que main es tun blogue de construccién de programas llamado funcién. Los programas en C contienen una o ma funciones, tuna de las cuales debe ser main. Todo programa en C comienza su ejecucién en la funcién main, Buena practica de programacién 2.1 La ave izquierda, ¢, (nea 7), debe iniciar el cuerpo de cada funci6n, Una Have derecha correspondien- te (linea 12), debe finalizar cada funci6n. Este par de Hlaves y la parte del programa entre ellas se conocen co- ‘mo blogue, El blogue es una unidad importante del programa en C. La linea 8 print€( “Bienvenido a C!\n" )y indica a la computadora que realice una accidn, es decir, que imprima en la pantsla la cadena de caracteres contenida entre las comillas En algunas ocasiones a una cadena se le amma cadena de earacteres, mensaje 0 literal. La linea completa (que incluye print, su argumento entre paréntess,y el purio y coma (2)] se conoce como insiruccién. Tods insirucci6n debe finalizar con un punto y coma (también conocido como terminador de fa instruc). Cuando la instruceién print anterior se ejecuta, ésa imprime en la pantalla ¢] mensaje Bienvenido a C! En general, los caractees se imprimen exactamente como aparecen entre las comillas de Ia instruccién print £. Observe que los caracteres \n no aparecieron en pantalla. La diagonal invertida (\) se conoce como canicter de excape. Este indica que se espera que print haga algo fuera de To ordinaio. ‘Cuando una diagonal invertida se encuentra dentro de una cadena, el compilador ve el siguiente carcter y 10 ‘combina con la diagonal invertéda para formar una secuencia de escape. La secuencia de escape \n significa ‘eva Tinea. Cuando una nueva nea aparece en la sida de lx cadena por medio de print, esta nueva linea ocasiona que el cursor se posicione al comienzo de la siguiente Knead la pantalla. Bn la figura 2.2 aparecen algunas secuencias de escape comunes Las dos titimas secuencias de escepe de la figura 2.2 pueden parecer extraias. Debido a que In diagonal invertida tiene un significado especial en una cadena, es decir, que el compilador la reconoce como un caracter , (Mnea12), indica el final de Ja funcién main, my Buena practica de programacién 2.2 Dijimos que print € ocasiona que la computadora reali alguna accién, Cuando cualquier programa se cjecuta, és realiza diversas acciones y toma decisiones. Al final de este capitulo explicamtas la toma de deci- siones. En el capitulo 3, explicamos a profundidad este modelo de programacién de accidnidecision. Error comin de programacién 2.3 Escrbir en un programa el nombre de la func de salida petnt® como print, Resulta importante observar que las funciones de la biblioteca estindar como print y scanf no for- ‘man parte del lenguaje de programacién C. Por ejemplo, el compilador no puede encontrar ertores de escritura en printf o scanf. Cuando el compilador compila una instruccién print, éste s6le proporciona espacio en cl programa objeto para una “llamada” a la funcién de biblioteca, Sin embargo, €1 compilador no sabe en dén- de estan las funciones de biblioteca; el enlazador sf Io sabe. Cuando se ejecuta el enlazador, éste localiza las funciones de biblioteca e inserta las lamadas apropiadas para dichas funciones en el programa objeto. Ahora, cl programa objeto esté “completo” y listo para ejecutarse. De hecho, al programa enlazado con frecuencia se Je conoce como ejecutable. Si el nombre de la funcién esté mal escrito, es el enlazador quien detectaré el error, ya gue no sera capaz de hacer coincidir el nombre que se encuentra en el programa en C, con el nombre de nin- ‘guna funcién conocida de las bibliotecas. Bs Buena préctica de programacién 2.3 El ittimo cardce re inprima cualquier funcian de inpresin debe ser una neva Tinea {\a). Esto garantiza que 1a fancidn dejard at cursor de la panralla posicionado al principio de wna nueva linea. Las convenciones de esta nnaturaleza facilitan la retlizacion de software, un objetivo clave de fos ambientes de desarrolio de software. Buena practica de programacién 2.4 Capitulo 2 Intioduccién a la programacién en 27 /* Figura 2.3: £1g02_03.¢ Impresién de una linea mediante dos iastrucciones printf */ Hinclude /* la funcién main inicia Ja ejecuciéa del pros int main() printe | *Bienvenide * 1; printf *a.ct\nt ); return 0; /* indica que el programa terminé de con éxito */ 13) /* €in de La funcién main */ Bienvenido a Ct Figura 2.3. Impresién de una tinea mecionte instrucciones print separadas, my Buena praéctica de programacién 2.5 [BRB] Esai me comencon pore ama de eso gee wd pio» plane de wana ane a tonenton deer acl deaulctn pare eral sur proto sod aon een ‘tar Neato econcadanor guile slate butcon de Ide plgade owe cen ner epaco pare omar ior vets dela ser La funcién print puede imprimir de diferentes formas el mensaje Bienvenido a C! Por ejemplo, el pro- ‘grama de la figura 2.3 produce la misma salida que el de la figura 2.1. Esto funciona porque cada printf con- tina con la impresion a partir de donde la funcién print é anterior dejé de imprimir. La primera print £ (Qinea 8) imprime Bienvenido seguido por un espacio, y la segunda print (Iinea 9) comienza a imprimir cen 1a misma linea, inmediatamente después de! espaci Una sola print puede imprimir varias lineas utilizando caracteres de nueva linea, como en la figura 2.4 ‘Cada vez que aparece la secuencia de escape \m (nueva linea), la salida continia al prinipio de la siguiente linea 2.3 Otro programa sencillo en C: Suma de dos enteros [Nuestro siguiente programa utiliza la funcién sean de la biblioteca estindar para obtener dos enteros escri- 10s por el usuatio a través del teclado, para calcular la summa de dichos valores e imprimir el resultado median- /* Figura 2.4: £1g02_04.¢ Impresién de miltiples iineas mediante una sola instruccién printt */ Hinclude int maint) 1 2 3 4 5 /* la funcién main inicia la ejecucién del programa */ 6 7 8 print£( "Bienvenido\na\nc! \nY 1; 9 10 return 0; /* indica que el programa terminé con éxito */ u 12) /* fin de 1a funcién main */ Bienvenido cr Figura 2.4 Impresion en varias ineas con una sola instrucciin print, 28 Inlroduccién a la programacién en C Copitulo 2 ura 2.5: £ig02_05.c Programa de suna */ tinelude int main) ‘ int enterol; /* primer nimero a introducix’ por el usuario” +/: 1 2 3 4 5 /* 1a funcién main inicia 1a ejecucién del programa */ ‘6 7 8 9 int entero2; /* segundo nimero introduci= por el usuario */ 10 int suna; /* variable en la que se almacenaré la suna */ u 12 print£( "Introduzca el primer entero\n" ); /* indicador */ 13 scanfi 8a", sentero1 77 lee un entero’ + 4 15 printf “Introduzca el segundo entero\n* ); /* indicador */ 16 seanE\ "td", ‘gentero? ), 2 dee !un entero Ws 7 18 suna = enterol + entero; /* asigna el resultado a suma */ 9 200 print£(.*La sumaes $d\n", sung); /* impeitie! 1a Suita +7 2 22 return 0; /* indica que el programa terminé con éxito */ 23 24) /* fin de 1a funcién main */ Introduzca el primey entero 45 Introduzea el segundo entero 2 La guna es 17 Figura 2.5. Programa de sumo. te printé. El programa y el resultado del ejemplo aparecen en la figura 2.5. [Observe que en el dislogo de centradalsalida de la figura 2.5 resaltamos los niimeros introducidos por el usuario.) El comentario de las lineas I y 2 establece el propésito del programa. Como dijimos antes, todo programa comienza su ejecucién en main. La llave izquierda, {, de la Iinea 7 marca el comienzo del cuerpo de main, y la lave derecha correspondiente, }, de la linea 24 manca el fin Las lineas 8 10 int enterol; /* primer mimero a introducir por el usuario */ int entero2; /* segundo nimero a introducir por el usuario */ int guna; /* variable en l= que se almacenaré la suma */ son definiciones. Los nombres enterol, entero2, y suma son los nombres de las variables. Una variable sun sitio de la memoria de la computadora en donde se puede almacenar un valor para que lo utilice un pro- grams. Esta definicién especifica que las variables entero, entero2 y suma son de tipo int, lo cual sig nifica que estas variables almacenan valores enteros, es decir, nimeros completos como 7, ~11, 0, 31914, y ‘otros similares. Todas las variables deben declararse mediante un nombre y un tipo de dato inmediatamente ‘después de la Have izquierda que comienza el cuerpo de main, antes de que puedan utiizarse en un programa. En C, existen otros tipas de datos ademas de dint. Observe que hubiéramos podido combinar las definiciones anteriores en una sola iustruccién de declaracién de la siguiente manera Ant enterol, entero?, suma: En C, el nombre de una variable es cualquier identificador vélido. Un identificador es una serie de carac- teres que consta de letras, digitos y guiones bajos (_), y que no comienza con un digito. Un identificador pue~ Capitulo 2 Inlroduccién a la programacin en 29 de tener cualquier longitud, sin embargo, los compiladores de C s6lo requieren reconocer los primeros 31 ca: racteres, de acuerdo con el ANSI C estindar. C es sensible a maytisculas y minisculas, de tal forma que al y ‘Ai son identificadores diferentes. Error comin de programacién 2.4 Titi Tip de portabilidad 2.1 Uuilce dentificadores de 31 caracteres 0 menos. Esto le aywdard a garanizar la portabildad y puede evitar al- unos problemas sutiles de programacin Buena practica de programacién 2.6 legir nombres de variables que tengan significado le ayuda a escribir programas “auiodocumentados”; es decih necesitard menos comentarios una letra mayiscula cuando debe wilizarse wna miniscula (por ejemplo, escribir Main en lugar de Buena préctica de programacién 2.7 Laprimera Tera de un Wdenificador willzado como un nombre de variable sencilla debe er miniscwla. Mas ade lame asignaremos wn significado especial a los identficadores que comienzan con una letra mayscul, y a los ldentifcadores que uilizan todas sus letras en mayisculas Buena practica de programacién 2.8 {Tos nombres de variables con muchas palabras pueden ayudarle a escribir wn programa mds legible. Evite juntar palabras diferentes como comisionestotales: mejor ulice las palabras separadas por un guidn bajo como en comisiones_totales, ¢, si desea juntar las palabras, comience cada una con letras mayiiculas como en Comisionestotales. Este iliimo estilo es preferibe. a fe [oe] 3 La declaracién de variables debe colocarse después de la lave i2quierda de una funcién y antes de cualquier instruccin ejecutable. Por ejemplo, en el programs de la figura 2.5, insertar las declaraciones después del pr ‘mer print£ ocasionarfa un error de sintaxis, Sucede wn error de sintaxis cuando el compilador no puede te ‘conocer una instruccién, El compilador por lo general envia un mensaje de error para ayudar al programador a localizar y a arreglar la instruceién incorrecta. Los errores de sintaxis son violaciones del lenguaje. A estos cervores también se les conoce como errores de compilacidn, o erroresen tiempo de compilacién. Error comin de programacién 2.5 Colocar las declavaciones de variables entre istruccionesejecuiables, ocasiona errores de Sinton Buena practica de programacién 2.9 [BB] Serr tes etree ys racine hcl wa nin maa a eV, rae E>] sardondeterminan ls delaracionesy donde comienzan as inrucclones ejecabes, La linea 12, print£( “Introduzca el priner entero\n” 1 [*indicador */ imprime en la pantalla las palabras tntroduzca el primer entero, y posiciona el cursor a principio de Ia siguiente linea. A este mensaje se le lama indicador porque le indica al usuario que realice una accién espe- cifica La siguiente instruceién scanf( "a", genterol ); /* ise un entero */ utiliza sean para obtener un valor por parte del usuario, La foncién scané toma la informacién de entrada Gesde la entrada esténdar que, por lo general, es el teclado, Esta scang tiene dos argumentos, "a" y &en- ‘terol. El primer argumento, la cadena de contro! de formato, indica el tipo de dato que debe introducir el uusuasio. El especificador de conversién, 4, indica que el dato debe ser un entero (a letra A significa “entero decimal’). En este contexto, sang (y también print, como veremos més adelante) trata al % como un ca: rricter especial que comienza un especificador de conversion. El segundo argumento de scan£ comienza con tun amperson (&), conocido en C como operador de direccién, seguido del nombre de una variable. El amper- son, cuande se combina con el nombre de una variable, le indica a scang la ubieacién en memoria de la va- 30 _Introduccién 04a programacién on C Coptulo2 riable enterol. La computadora después almacena el valor de entezod en esa ubicacién. El uso del am- person (&) con frecuencia es confuso para los programadores principiantes o para la gente que ha programado ¢n otros lenguajes que no requiaren esta notacién. Por el momento, s6lo recuerde que debe colocar un amper- son antes de cada variable en cualquier instruccién scant. En los capftulos 6 y 7 explicamos algunas excepcio- nes a esta regla. El uso del amperson seri claro después de que estudiemos los apuntadores en el capitulo 7 Buena practica de programacién 2.10 ‘Cuando Ia computadora ejecuta la instruccién seané anterior, &ta espera a que el usuario introduzea un valor para la variable entero. E] usuario responde escribiendo un entero y después oprimiendo la recla de retomo (algunas veces Tlamada tecla Entrar}, para enviar el niimero a la computadora. Después, la compu- tadora asigna este nlimero, 0 valor, a fa variable entero’, Cualquier referencia posterior a enterol cn el programa utlizard este mismo valor. Las funciones print y scang facilitan la imeraccién entre el usuario y a computadora. Debido a que esta interaccién parece un didlogo, con frecuencia se le lama computacién con- versacional 0 computaci6n interactiva La linea 15 printf ( “Introduzca el segundo entero\n” ); /*indicador */ > xy es mayor que y < < xy se 6s menor que ¥ = x2 26s mayar 0 igual que ¥ . xs. 2 es meor 0 igual que ¥ Figura 2.12 Operasores de igualdad y de relacién, Error comin de programacién 2.16 (Qcurrird un error de sintaxs si Tos das simbolos de cualquiera de los eperadores parados por wn espacio. Error comin de programacién 2.17 ‘Ocurrird wn error de sintais si se nvierien los simbolos de cualquiera de los operadores . respectivamente, Error comin de programacién 2.18 Confndir el operador de igualdad ‘nel operador de asignacion = Error comtn de programacién 2.19 = 1 /* Figura 2.13: £1g02_13.¢ 2 0 de inetrucciones if, operadores 3 de relacién, y operadores de igualdad */ 4 include 5 6 a efecucién del programa */ 7 8 9 rimer nimero que lee el usuario */ 10 jundo numero que lee el usu u 12 eros, y le dire\n* ) 13 satisfacen: * } 4 Figura 2.13 Uso de los operadores de igualdad y de relacién.(Parte | de 2) Coptuio2 Inoduccién ala programacién en 37 15 scanf( *tdav, snumi, &mum2 }; /* Lectura de los enteros */ 16 Ye Camtasia 18 printé( "td es igual que d\n, numl, mum2 ); 9) /* fin de if */ 20 21 Se ¢ munities 1 ( 22 printf( "dno es igual que t€\n", num, num2 ); 2300) /* Ein de if */ 24 25 if ( iim 2" muD ) ¢ 26 printf( "td es menor que td\n", num, num? 1; 2+) /* fin de it */ 28 29 if ¢ aoa SD 30 printf( ‘td es mayor que td\n", numl, num2-}; 31 ) /* fin de it */ 32. 3300 Gf ( Bumioe="puna ) ¢ 34 printf ( "td es menor o igual que $d\n", uml, num2 ); 3500) /* Ein de if 47 36 37 sf (ain v4 38 printé ( mayor o igual que 8d\n", numl, num? }: 39) /* Fin de it */ 40 41 return 0; /* indica que el programa cerminé con éxito */ 42 43) /* fin de 1a funcién main */ Tntvodusea dos entercs, y le dive las relaciones que satisfacen: 3 7 3 noes igual que 7 3.8 menor que 7 3 es menor o igual que 7 Thtroduzca dos enteros, y de dixe jas relaciones que satisfacen: 22 12 22 no es igual que 12 22 es mayor que 12 22 es mayor 0 igual que 12 Tntroduzca dos enteros, y le dire las relaciones que satisfacen: 7 7 Fes iguaY que 7 7 @@ menor “© igual’ que 7 7 ea mayor o igual que 7 Figura 2.13. Uso de los operadores de igualdded y de relacién. Parte 2 de 2) Observe que el programa de la figura 2.13 utiliza la funci6n seané (linea 15) para introducir dos miimeros. (Cada especificador de conversién tiene un argumento correspondiente, en el que se almacenard un valor. El primer ‘sd convierte un valor que se almacenaré en la variable mumt, y el segundo %4 convierte un valor que se almace- 38 Introduccién a la programacién on C Captuio2 Operadores ‘Aociativided sop os ‘nquierda aderecha = iaquierda a dereena inquierda a derecha iagoierda a derecha derecha aizguierda Figura 2.14 Precedencia y asocistividad de los operadores que hemos expiicade hasta el momento. nard en la variable num2. Colocar sangrias a Jo Jargo del cuerpo de cada instruccién if, y colocar Iineas en blanco arriba y debajo de cada una de ellas mejora la legibilidad del programa. Ademds, observe que cada ins truccién 4 de Ia figura 2.13 tiene una sola instruceién en su cuerpo. En el capitulo 3, mostramos cémo espe- cificar insicucciones ££ con cuerpos formados por multiples instrucciones, y, Buena practica de programacién 2.12 8 | Cotogue sangrias en el cuerpo de wna instruccion 42 Buena préctica de programacién 2.13 Cologue una linea en blanco antes y después de cada tnstruccion 4, para mejorar a legiblidad del programa Buena préctica de programacién 2.14 ad : Error comin de programacién 2.20 Colocar comas (cuando no son necesarias) entre expectficadores de conversin en la cadena de control de forma ‘correspondiente a una instrucién scant. } comentario (lineas 1 a 3) dela figura 2.13 estd separado en tres ineas, En los programas en C, los espa clos blancos come tabuladores, nuevas lineas y espacias, por lo general son ignorados. Por lo tanto, as instruc- cones y comentarios deben extenderse en varias lineas. Sin embargo, no es correcto separar identificadores. Buena préctica de programacién 2.15 [SRS thence pede deen variant, Sana Raacln de wpa To go dear LES far ets enon ten ce dep de na com a spar por comes 8 na truccén se divide en des o mds linens. colaqu songras en todas ls Ie subsignenes. La figura 2.14 lista la precedencia de los operadores que presentamos en est capitulo, Los operadores apa recen de arriba abajo en orden decreciente de precedencia. Observe que el signo de iguadad también es un ope- rador. Todos estos operadores, con excepcidn del de asignacién =, asocian de izquierda a derecha, El operador de asignacign (=) asocia de derecha a izquierda Buena practica de programacién 2.16 Revise la tabla de precedenca dle operadores, cuando escriba expresiones que contengan muchos operadores. Com firme que los operadores dela expesin se apcan en el orden coret, St no esd seguro del orden de evalacin de una expresion compa uliceparéntesis para agrapar expresiones. Asegirese de recordar que algunos de as ‘operadores de C, como el de asignacén (=), asocin de derecha a fequerda,y no d tierda a derecha. ‘Algunas de las palabras que hemos utiizado en los programas en C de este capitulo, en particular int, return e if, son palabras clave 0 palabras reservadas del lenguaje. Las palabras reservadas de C aparecen cen la figura 2.15. Estas palabras tienen un significado especial para el compiladar de C, por lo que el programa: dor debe tener cuidado de no utilizar estas palabras como identificadores, tales como nombres de variables. En este libro, explicaremos todas estas palabras reservadas. Capitulo 2 Infroduccién a la programaciénenC 39 Palabras reservadas auto double int struct break else long switch case enum register typedert char extern return union conet Float short unsignea continue for signed void defauit goto sizeot volatile ao. ae static while Figura 2.18. Palabras reservacis de C. En este capitulo introdujimos muchas caracteristicas importantes del lenguaje de programaci6a C, que in- le indica al compilador que incluya en el programa el encabe- ado estindar de entrada/salida, Este archivo contcne informacion que el compilador utiliza para verficar la precision de Tas Hlamadas a funciones de entrada y salida, como scant y print. ‘Los programas en C consisten en funciones, una de ls cuales debe ser main. Todo programa en C comienza su ejecw- cidn en la funcién main, La funcién print puede ullzarse para imprimir una cadena que se encventra entre comillas,y para imprimir Ios vax lores de expresiones. Cuando se imprime un valor entero, ef primer argumento de fa funci6n prime (la cadena de con- trol de formato) contiene el especificador de conversin MA y cualquier otro carter a imprimir; el segundo argumento ela expresion cuyo valor se imprimita, Si se va a imprimir mas de un entero, la cadena de control de formato contiene ‘un para cada entero y los argumentos separadas por comas que siguen ala cadena de contol de formato contienen las lexpresiones cuyos valores se imprimirén, [a funcién ecant obviene valores que el usuario normalmente introduce por medio del teclado. Su primer argumento es la cadens de control de formato que le indica 1a computadora qué tipo de dato debe intoducirel usuario. El especii- cader de conversion, %, indica que e! dato debe ser un entero. Cada uno de los argumentos restantes corresponden a uno de los especificadores de conversion dela cadena de control de formato, En general, todo nombre de variable es prece ido por un amperson («), llamado operador de direccién, El amperson, cuando se combina con e} nomire de una vars ble, le indica a la computador la posicién de memoria en donde se almacenari cl valor. Después la computadora alma cena el valor en esa posits, + Todas las variables deben declararse antes de que puedan uilizarse en un programa. Un nombre e variable es cualquier identiicador valid. Un identifcador es una serie de caracteres compuestos por e- teas, digits y guiones bajos (_). Los identficadores no deben comenzar con un digito. Los idemificadores pueden tener ‘cualquier longitud, sin embargo, so los primeros 31 digitos son importantes. Ces sensible a maytiseulas y minsculas. ‘La mayorfa de los eleulos se realizan en instrucciones de + Toda va + Siempre que un nuevo valor se cologue en una posicién de memoria, éstereemplaza a! valor anterior de esa pos! bido a que la informacién ancrioe se destuye, al proceso de leer informacién en una posicin de memoria se e conoce como lectura destructiva, ble almacenada en la memoria de la computadora tiene un nombre, un valor y un tip. 49 _Introduccién a la programacién en C tadora asociatividad de operadores. Capttulo 2 Al proceso de lectura desde una posicin de memoria se le conoce como letura no destuctva Las expresionesaritméticas deben esribirseen forma de Kina recta, par faciltar la ntroduccién de programas & la compu El compilador evalia expresiones aritmeticas en una seeuencia precisa, determinada por las reglas de precedeneia y de + La instroecin 4 permite al programador tomar decisiones cuando se cumple cesta condicién, + Si la condicidn es vertutera,entonces se ejecuta Ia instruccién en el cuerpo de 4, Sila condicin es fsa, se sala la instrvccign del everp. + Por lo general las condiciones en instrucciones Lf se orn uilzando operadores de igualdad o de relaciSn. El resul- tado de utilizar estos operadores siempre es la simple absereacion de “verdadero” 0 “falso". Observe que las condicio- nes pueden ser expresiones que generen un valor cero (falso), 0 uno diferente de cero (verdadero) TERMINOLOGIA accidn amperson (6) argumento ‘sociatvidad de derecha a izquinda ssociatividad de izquierda a derecha asocitividad de operadores asteriseo (*) biblioteca Estindar de C blogue cadena cadena de caracteres cadena de control cadena de control de formato cardcter de escape cardcter de escape diagonal invertida (\) cardeter de nueva linea (\n) cardeter espacio en blanco comentario ‘computacién conversacional ‘computaci6a interactiva condicion ceverpo de una funcién secision declaracién sion entera ivisign entre cero lencabezaulo estindar de entrada) sala entero error de compilacién error de sintaxis certoren tempo de compilacién certo fatal erro no fatal specificador de conversion especificador de conversion a falso flujo de convot forma de linea recta foncién funcisn print funcién scant suidn bajo) Identificador indicador instaceiGn de asignacion instuceiGn de control 4€ int Iectura no destroctiva iiteral saves mensaje modelo de scciGn/decisién nombre nombre de variable ‘operader copezador de asignaciéa ‘operador de asignacién signo de igual ‘operador de dteocin ‘operador de muliplicacisn (#) ‘operador médulo () ‘operadores aritméticos ‘operadores binarios ‘operadores de igualéad ‘es igual que" “no es igual que” ‘operadores de relacién ERRORES COMUNES DE PROGRAMACION 21 Olvidar finaizar un comentario con 7. 2.2 Comensar un comentario con las caracreres * /, 0 inalizarlo con /* > "es mayor que” -< "es menor que” “es mayor 0 igual que” “es menor 0 igual qu” ‘operando palabras clave palabras reservadas palabras reservadas de C paréntesis ( paréntesis anidados pposcién, bicacién precedercia preprocesador de C rogramacin estructrade reglas de precedencia de operadores sangria socvencia de escape sensible a mayiscuas y mindsculas signo de porcentaj (¥) para nici un especificador de conversion ataio.k tecla de retorno tecla Entrar terminador de instrueciéa () terminador de instruecién punto y coma (7) tipo de variable toma de decisiones ubiession (0 posicién) de memoria valor valor cero (also) valor de variable valor diferente de cero (verdadero) variable verdadero Capitulo 2 Introduccién a la programacién enc 41 23 24 28 26 27 28 29 2.10 2a 22 243 214 218, 216 247 218 219 Eseribir en un programa el nombre de la funcisn de salida print é como print. Usilizar una letra ma scula cuando debe utlizarse una yaindscuta (por ejemplo, escribir Main en lugar de main), Colocar las declaraciones de variables enreinstruecionesejecutales, ocasiona etrores de sintais Los edlculos en ls instrucciones de asignacin deben estar la derecha del operador =. Colocar Ios edleulos a la iaguierda de un operador de asignacién, es un eror de sintaxis. (Olvidar una 0 ambas comillas alrededor de la cadena de contol de formato en una instruccién Print 0 scant, Olvidar el % en una especiticacion de conversin en Ia cadena de control de formato de una instucciin print £ o scant, CColocar una secuencia de escape como \n fuera de la cadena de control de formato de una instrcci6n print o scant. (Olvidar inctuir las expresiones cuyos valores van a imprimiese en una instruceidn prime € que contiene especiti- adores de conversion. [No proporcionar a una eadena de contol de formato, comrespondiente a una instruccién prime, un especifcador de conversidn, cuando se necesita uno para imprimir el valor de una expresin. CColocar dentro de una cadens de control de formato la coma que se supone debe separa la cadena de control de formato de las expresiones a imprimirse. Olvidar colocar un amperson antes de una v debe ser precedia por uno. ble correspondiente a una instruceién scan£, cuando, de hecho, ‘Colocar un amperson ames de una variable ineluida en una instruccién print, cuando, de hecho, no debe ser precedida por uno. La division entre cero por lo general noes definida en los sistemas de comput, y da come resultado un eof es decir, un error que ocasiona que el programa termine de inmediato, sin que haya finalizado con éxito su traba- jo. Los errores no fatalespermiten alos programas ejeciars totalmente, pero con frecuencia producen resultados curt un errr de sintaxs silos dos sfmbolos de cualquiera de Tos operadores rados por un espacio. (Ocurrir un error de sintaxis si se invierten los simbolos de cualquiera de los operadores 1=, >= y <=, como =!, >, ne, fespectivamente. CConfundir el operador de igualdad == con el operador de pparecen seps- ignacion = CColocar un punto y coma inmediatamente ala derecha del paréntesis derecho después de la condicion de una ins truccisn if, CColocar comas (cuando no son necesaras) entre especificadores de conversin en la cadena de contol de formato correspondiente a una instrccién sean. BUENAS PRACTICAS DE PROGRAMACION 2a 22 23 24 25 26 “Tada funcién debe ser precedida por un comentario que deseriba el propésito dela func, ‘Agreave un comentario a Ia nea que contiene la lave derecha, ), que cierra toda funcién, incluyendo a main, EE limo career que imprima cualquier funcién de impresién debe ser una nueva linea (\n). Esto garantiea que la funcin dejar al cersor de la pantalla posicionado al principio de una nueva linea, Las convenciones de esta na- turalezafacilitan ta reutitzacion de software, un objetivo clave de los ambiente de desarrollo de software. [Bstablezea sangrias en ef cuerpo de cas funciOn, un nivel hacia adentro del lave que define el cuerpo de la fun- ine maint ) ‘ int x, ¥, 2, resultado; /* declara variables *, printf( "Introduzca tres enteros: * ); /* indicader */ scanf( "803684", &x, &y, G2 }7 /* lee tres enteros */ resultado = x * y * 2; /* maltiplica los valores */ DrintE( "El preducte es Sd\n", resultado J; /* despliega el resultado */ return 0; ? a) Enor: anumero, Cosreccisn: elimine el &. Mas adelante explicaremos las excopciones @ eto. b) Ener: mumero2 no tiene wn amperson, Conecci6n: numero debe aparecer como &mumexo2. Mis adelan- te explicaremes las excepciones a esto ©) ror: El punto y coma gue se encuentra después del paréntesis derecho de Ta condicign que se encuentra en la instrceién 4, Comeccion: eliing el punto y coma que se encuentra después del parénesis derecho. (Nota: El resultado de este error es que la instrwesi6n printf se ejecutur, independientemente de qve la condicion de la instruceidn 4¢ sea verdadera. El punto y coma despues del parénesis se considera como una instruccién ‘vaca; es decir, una instruecién que hace nada-] 18) ror: El operador do rlacidn => debe cambiar a >= (mayor o igual qos) EJERCICIOS 27 dentitique y conija los errores de cada uno de los siguientes ejericios (Nota: Puede haber més de un eror en car da ejercicio.) a) scant( "a", valor )1 b) printé( “Bi producto de “dy Md es %A\n, x, ¥ I: ©) primerumero + segundoNuero = eunaDeNuneros 4) 4£ ( numero => masGrande ) Capitulo 2 Inlroducci6n a la programacién en 45 28 29 210 2a 212 213 214 ©) */ programa para deterninar el minero mis grande de tres enteros /* i) Scant( ¥4", unBntero ); 2) printé( “Bl residuo de Sa entre Nd es\n", x, Ye x %¥ 17 bat (xe ys print£( es igual que SA\n", x,y 7 1) printe( "ha suma es 84\n," x + y )7 i) Print£( "BL valor que escribié es: %d\n, tvalor ); ‘Complete los espacios en blanco: 4) Los se utlizan para documentar un programa y para mejorar su legibilidad ') La foncign que se uli para desplegarinfrsucién en Ia pantalla es — }EnC, una istrccin para tomar decsiones es 4) En general las insrucciones son quienes teaizan ts célculos, ¢} La funcién —__ introduce valores desde el teclad. seriba una sola instruccino lines de C que realice lo siguiente: 4) Imprims el mensaje "Becriba dos nineros” ')Asigne el producto de las variables by ¢ ala variable a ©) Indique ave un program realiza un edleulo de némina (es dest tilice texto que ayude a documeatae un pro- gam). {)Escriba tes valores enters desde el eclado ycoloque tos valores en as variables enteas a,b y Indique cuales de las siguientes oraciones son verdaderas y cules son flsas. Si son flsas, expique su respuesta a} Los operadores de C se evalan de iquirda a derecha ) Los siguientes son nombres de variables vidos: sion base u_cuenta total, a,b, ¢, z, 22 ©) Lainstrucci6n print é ("a = 57 2 sun tipico ejemplo de una instrccin de asignacion, ‘Una expesion aritmatica valida que na conteneparéntesis se eval de iaquicrda a derecha ©) Los siguientes son nombres no vidos de variables: 39, 87, 6782, 822, 2h. ‘Complete fs espacios en blanco: 8) {Qué operaciones artmeéticas se encuentran en el mismo nivel de precedencia que In motiplicacion? 926134, ©5, 37, bb) En una expres aritmética cuando los paréntesis est anidados, ;qué conjunto de parémesis se evala pric ©) Una posicién en la memoria do Is computadora que contiene diferentes valores en diferentes momentos, a lo laggo de la ejecucién de un programa se congce como Qué se imprime cuando se ejecuta cada una de ls siguientes nstrueciones? Sino se imprime algo, entonces res- Ponda “nada”. Suponga que x=2 yy = 3 ) prine( ea", x 7 by) peinee( “eae, x 6 x 7 @) printé( eka", x 02 ©) printé( "Sd = Ra", x4, y+ xT Deexey g) scant ( “dva", ex, BY): by /* printe( m+ y = Ra", x ey 2 */ i) prante( *\a") + {Cuil de Ins siguientes instrucciones de C contieven variables involucradas con Ia Lectura destructive? a) scant ( "Saraednata", eb, ke, ed, ke, EE): bpeieders ©) printe( “Lectura destructiva” )+ 4d) printe( “a = 5" ‘Dada la ecuacidn y = ax'47, ,eudl de as siguientes son insrueciones comectas en C para esta ecuacisn? aystatxetxt xed: Dysatxrxt (xe 707 Qys(atxy txt (xe Tr Dyes (ateytxtee ts Oystat(xtxte) 47 Dysatet (xt xed hy 46 Introduccién a la programacién en C Capitulo 2 2.15 Establezca el orden de evaluacién de los operadores en cada una de las siguientes instruc valor dea después de que se realice cada insinucidn, )xeT+3*6/2-4) bee 2e2e202-272 xe Cater Cae (9* 3/630) ) dF 2.16 Escriba un programa que pida al usuario escribir dos nimeros, que abtenga los dos nimeros por parte del usuario, ‘que fmprime la sums, el producto, la diferencia, el cocientey el resid de los dos nimeros. res de C, y muestre et sande os sic 2.17 Eseriba un programa que imprima los ndmeros del 1 al 4 en la isin linea. Escrba el programs util _euientes métodos 48) Mediante una instruccién print f sin especificadores de conversién, ) Mediante una instruccién print con cuatro especificadores de conversién, ©) Mediante cuatro instrucciones printe, 2.18 _Escriba un programa que pds al usuario que introduzca dos enters, que obtenga fos miimeras por parte del usu rio, después que imprima las palabras “ea m&s grande”. Si los nimeros son iguales, que imprima el mensaje “Betos mimeroa gon iguales”. Solamente utile la forma de seleecién simple de la instrucién 4, que aprendli6 en este capital, 2.19 Escriba un programa que introduzca tres diferentes enteros desde l teclado, después que imprima la sum, el promedio, el producto, el ntimero més pequefo y el mas grande de éstos. Solamente uilice la forma de seleccién simple de lainstruccién 4, que aprendié en este capitulo. El dislogo en la pantalla debe aparecer de la siguiente forma: Escriba tres enteros diferentes: 13.27.14 La suma es 54 El pronedio es 18 #1 producto es 4914 1 mimero mas pequefio es 13 BL nimero més grande es 27 2.20 Escriba un programa que lea el radio de un efreulo y que imprima el didmeto, la circunferenciay cl drea de ese cieulo, Utlice el valor constante de 3.14159 para m: Realice cada uno de estos eileulos dentro de instuccin(es) PEAntE, ylilice el especificador de conversién *E. (Nota: En este capitulo slo explicamos constantes y vaia- bles enteras. Ene} capitulo 3 explicaremos los imeros de punto flotante, es decir, valores que pueden tener pun- tos decimales:} 2.21 Esertu un programa que imprima una caja, un 6valo, una fecha y un diamante como los siguientes: 2.22 ,Qué imprime el siguiente c6digo? printé( "#\nt*\nte#\ntete\nte**n\nr ); 2.23 Escriba un programa que lea cinco enters y que después imprima el nimero mis grande y el mas pequefo del gu ‘po. Usilice s6l0técnicas de programacién que hays aprendido en este capitulo, 2.24 Escrba un programa que Tea un entero y que determine e impitma si es par o impat. (Pista: Uilice l operador ‘médulo, Un nimero par es un multiple de dos. Cualquer miiple de 2 aoja un residvo de cero, cuando se divide entre 2] Coptulo 2 Introduccion a la programaciénenC 47 2.25 Imprima sus iniciles en maydsculas de imprenta de manera que apunten hacia a part inferior de la piginas (aco ‘das), Constraya cada mayscula de imprenta con Ia letra que ésta representa, de la siguiente formal PPPPPPPEP oag995 ‘ppppnoppp D D D D DoD oppo 2.26 scriba un programa que leados enters y que determine impriana sie primero es miltiplo del segundo. [Pisa Unllice el operador médulo,) 2.27 esplicgue cl siguiente pated de disefo mediante acho instucciones printf, y después desplieaue el misme pax tu6n con el menor niémero posible de insrucciones prints. 2.28 _Distinga ene los érminos eror fatal y no fatal. {Por qué podtfa usted prefeirexperimentar un eror fatal a un No fatal? 2.29 He squt un avance. En este capitulo aprendis acerea de enters y del tipo int. C también puede representar letras rmayiisculas, windsculas, yuna considerable Variedad de simbolos especiales. C utiliza internamente enteos pegue- Tos para representat cada caricrer. Al conjunto de caracteres que utiliza una compatadoray a las representaciones enteras para esos caractere x les conoce Como conjunto de caracteres dela computador. Por ejemplo, usted puede imprimir el enero equivalentea la Ammaysscula,siejecuta a instreccién printe( ea", /ar )y Escriba un programa en C que imprima los enteros equvalentes a algunas letras mayisculas, mindscula, dgitos ¥ slinbolos especiales. Como minim, determine los enteros equivalentes de las sighientes: ABC abeO12$* + /yelcaricter espacio en blance. 2.30 seria un programa que introdv2ca un niimero de cinco digitos, que separe el nimezo en sus digitos individuals y que despliegue los digitos separados entre sf mediante tes espacios cada uno. [Pista: Uslce combinaciones de la division entera y el operader médulo.) Por ejemplo, si el usuario eseribe 42139, el programa éebe imprimir 48 Infroduccién a la programacién en Capitulo 2 231 Utiice sto las tgenieas que aprendi6 en este capitulo para escribir un progratna que calcule los cuadadosy los cu bos de los némeros 0. 10, y que utlicetabuladores para desplegar la siguiente tabla do valores unero cuadrado— cubo. a 0 ° i 1 1 2 4 8 3 9 27 a 16 64 5 25 125 6 36 216 7 43, 343 8 6a 512 9 ai 729 io 300 1000 Desarrollo de programas estructurados en C Objetivos + Comprender las tonicas bésicas para solucionar problems + Desarrollar algoritmos a través del proceso de mejoramiento arriba abajo, paso a paso. + Utilizar las instrucciones de seleccién 1f e 1f..e1L8e para seleccionar acciones. + Utilizar la instrucci6n de repeticién whi Le para ejecutar repetidamente las instrucciones de un programa, + Comprender la repeticiGn controlada por contador y Ia repeticién controlada por centinela + Comprender Ia programacién estructurada + Usilizar los operadores de incremento, decremento y asignacién, El secreto del éxito es la constancia Benjamin Disraeli ‘Movimonos ws lugar hacia detante Lewis Carroll La rueda ha completado el céreulo. William Shakespeare Elrey Lear _Cudntas manzanas cayeron en la cabeza de Newton antes de que tuviera la idea? Robert Frost (Comentario) 50 Desarrollo de programas estructurados en C Capitulo 3 Plan general 3.1 Introduccién’ 3.2 Algoritmos 32.3 Pseudocddigo 3.4. Estructuras de control 35 3.6 Lainstruccién de seleccion if. .-else 3.7 Lainsttuccién de repeticién while 3.8 Formulacién de algoritmos: Ejemplo prdctico 1 (repeticién controlada por contador) 3.9 Formulacién de algoritmos mediante mejoramiento arriba-abajo, paso a pa! Ejemplo practico 2 (repeticion controlada por centinela) 3.10 _Formulacién de algoritmos mediante mejoramiento arriba-abajo, paso a paso: Ejemplo préctico 3 (estructuras de control anidadas) 3.11 Operadores de asignacin 3.12 Operadores de inctemento y decremento Resunen + Terminologia * Errores comunes de programacién + Tips para presenir ervores + Buenas préciicas de prosramacion + Tips de rendimiento + Observaciones de ingenler(a de softwaw + Ejercicios de autoevaluacién + Respuestas a los ejercicios de auloevaluacion + Ejercicios 3.1 Introduccién Antes de escribir un programa para resolver un problema en particular, es esencial que comprendamos el pro- blema y el método para resolver dicho problema, Los dos capitulos siguientes explican las técnicas que fa- cilitan el desarrollo de programas estructurados de computadora, En la secci6n 4.12, presentamos un resumen sobre programacién estructurada, ef cual une las téenicas que desarrollamos en éste y en el capitulo 4 3.2 Algoritmos La solucién a cualquier problema de cémputo involucra la ejecucién de una serie de acciones en un orden es- pecifico. Ai procedimiento para resolver un problema en términos de: 1, Las acciones a ejecutar. 2. El orden en el cual se evan a cabo dichas acciones, se le llama algoritmo. El siguiente ejemplo demuestra que es importante especificar correctamente el orden en cl que se deben ejecutar las aeciones. Considere el algoritmo “levantarse y arreglarse” que sigue un joven ejecutivo para salir de la cama e ir @ su trabajo: Levantarse de la cama. Quirarse la pijama Baitarse. Vestirse. Desayunar Manejar hacia el trabajo. Esta rutina hace que el ejecutivo vaya al trabgjo bien preparado para tomar decisiones erticas. Sin embar- 20, suponga que sigue los mismos pasos en un orden ligeramente diferente:

You might also like