Download - Programación en C

Transcript
  • 15/7/2015 ProgramacinenC/TextocompletoWikilibros

    https://es.wikibooks.org/w/index.php?title=Programaci%C3%B3n_en_C/Texto_completo&printable=yes 1/34

    ProgramacinenCTextocompletoDeWikilibros,lacoleccindelibrosdetextodecontenidolibre.

  • 15/7/2015 ProgramacinenC/TextocompletoWikilibros

    https://es.wikibooks.org/w/index.php?title=Programaci%C3%B3n_en_C/Texto_completo&printable=yes 2/34

    8Expresiones9Instruccionesdecontrol

    9.1Laestructuracondicionalif...else9.1.1Operadoresdecomparacin9.1.2Operadoreslgicos9.1.3Evaluacindecortocircuito

    9.2Laestructuracondicionalabiertaycerradaswitch...case9.3Elbuclewhile9.4Elbuclefor9.5Elbucledo...while9.6Lasentenciagoto

    10UsodeFunciones10.1Funciones

    10.1.1Lasentenciareturn10.1.2Argumentos10.1.3Declaracinydefinicin10.1.4PasodeParmetros

    10.1.4.1PorValor10.1.4.2PorReferencia

    10.1.5VariablesLocalesyGlobales10.2FuncionesRecursivas

    10.2.1Recursividadindirectaorecursinmutua10.2.2RecursinversusIteracin

    10.2.2.1EjemploIterativo10.2.2.2EjemploRecursivo

    11Vectores12GNUFreeDocumentationLicense

    12.10.PREAMBLE12.21.APPLICABILITYANDDEFINITIONS12.32.VERBATIMCOPYING12.43.COPYINGINQUANTITY12.54.MODIFICATIONS12.65.COMBININGDOCUMENTS12.76.COLLECTIONSOFDOCUMENTS12.87.AGGREGATIONWITHINDEPENDENTWORKS12.98.TRANSLATION12.109.TERMINATION12.1110.FUTUREREVISIONSOFTHISLICENSE

    PrlogoPrlogo

    Elavancedelatecnologaylaconcurrenteentregadeinformacin,nospermitegenerarunaedicin,variableyalternativaenlaenseanzadellenguajedeprogramacinquemsimpactosocialhatenidoenlahistoriadelainformtica.Estelibrohasidoforjadoconlaincansableayudadeinformticosdehablahispana,quienesbyteabytehancolaboradoporhacerdelainformacinunafuentedeconocimientoglobal.Delamismaforma,continahoysiendomodificadoenunaconstantebsquedadesuperacindelacalidad.

    Estaobraestllamadaaserlapiedraangularenlaenseanzadelaprogramacin,lograndoabarcartodoslosaspectosdellenguajeendiversosnivelesydeestaformasertantounareferenciatcnicaparaquienesyadominanellenguajecomounaintroduccinsencillaparaquienesestnempezandoaconocerlo.

  • 15/7/2015 ProgramacinenC/TextocompletoWikilibros

    https://es.wikibooks.org/w/index.php?title=Programaci%C3%B3n_en_C/Texto_completo&printable=yes 3/34

    Viajaremosporlahistoriadellenguaje,veremossupropsitoeindagaremosenlacienciadelaprogramacin.ElfinesotorgarallectorunadoctrinaclaradelaprogramacinyellenguajeCloinduciremosaconseguirunmanejoimportantedellenguaje.

    Paraquinesestelibro?

    Estelibroestdirigidoatodoslosquedeseenobtenerconocimientosdeprogramacin,pueselobjetivoexplcitoquenoshamotivadoacrearloesdifundirlaimportanciadellenguajeCenelmundodelainformtica.Sinosenfocamosaungruposocialespecfico,podremosindicarqueestelibrocontribuirconlosestudiantesdecarrerasdelreainformtica,debidoaquelostemasconvenidos,sonpartedesuplandeestudios.

    PorquotromanualdeC?

    PorqueellenguajeCeslabasefundamentaldelaprogramacin.Paraquienesestnenelambientedelainformticaescrucialtenerporlomenosnocionesdeestelenguaje.Variossistemasoperativos,cientosdebibliotecas,ymilesdeprogramasestnconstruidosutilizandoC,alconocerloesposibleentender,colaborarydesarrollarenestelenguaje.

    Lossistemas,programas,juegosyherramientasquenosotrosdisfrutamoshoyfueronconstruidosporpersonascomonosotros,queempezaronconnuestromismopotencialyfueronaprendiendoahacercosasfantsticasconlasherramientasquetenanamano.

    UnaraznimportanteparaotrolibrodelenguajeCestambinqueloslibrosexistentesmuestranmuypocadocumentacindecalidad.EnInternetexisteunacantidadinmensadeinformacinpublicadaperoestdispersa,ymalmanejadaenalgunossitios.Eslaintencindeestelibrocrearunbuencompendiodeinformacin,quepermitaalosinteresadosaprenderaprogramarenC.

    Enlaces

    Nocionesbsicasdeprogramacin(generales,independientesdellenguaje):

    Fundamentosdeprogramacin

    Wikilibrosimilarasteeningls

    CProgramming

    esquemadeoperadoresyexpresiones

    [1](http://es.calameo.com/read/000048582e9eccea231d9)

    Licenciayautores

    Copyright2004EnviteCopyright2005AlejandroMorenoCalvoCopyright2006AndreuCorreaCasablancaCopyright2009zerohours

    Verelhistorialdecadapginaparaelrestodeautores.

    CmocontribuiraesteWikiLibro?

    https://es.wikibooks.org/wiki/Usuario:Envitehttp://es.calameo.com/read/000048582e9eccea231d9https://es.wikibooks.org/wiki/Fundamentos_de_programaci%C3%B3nhttps://en.wikibooks.org/wiki/C_Programminghttps://es.wikibooks.org/wiki/Usuario:Almorcahttps://es.wikibooks.org/w/index.php?title=Usuario:CaStarCo&action=edit&redlink=1https://es.wikibooks.org/wiki/Usuario:Zerohours
  • 15/7/2015 ProgramacinenC/TextocompletoWikilibros

    https://es.wikibooks.org/w/index.php?title=Programaci%C3%B3n_en_C/Texto_completo&printable=yes 4/34

    Contribuirconestelibroesmuysimpleprimerodeberasregistrarteunusuarioy/oentrar(estonoesnecesarioperosimuyconveniente)aWikilibros,paraquepodamosidentificartusediciones.Luego,sinuncahascontribuidoenunproyectodewikipediaoenotrowikideberasleerelmanualdeusodewikilibros.

    Unavezhechoestotodoloquetienesquehaceresagregarelcontenidoqueconsideresnecesarioparaellibro.Paraeditarcualquierseccinbastaconhacerclickallinkquediceeditarenlapestaaenlapartesuperiordelapagina,seriabuenorevisar(antesdeeditarcualquiercosa)lapestaadediscusinqueestahparaserusada.Tenencuentaqueelmaterialqueyaestfueescritoporpersonasquedeseabancontribuirigualquet,asquetrataderespetarlo.Aunqueconestonomerefieroaquesisenecesitaalgunacorreccin,reorganizacin,quitarpartesqueseanambiguas,nodejesdehacerlo.Lomejorseraquetodoscontribuyramosdecualquiermaneraallibro.

    Adems,esrecomendableconsultarlapginadediscusindellibroyladelarticuloenparticularquequierasmodificar,yaquedeestamanerasepuedencoordinaresfuerzos.

    RecuerdaquetodoelcontenidoqueaadasallibroespublicadobajolalicenciaGFDL,porloquenousesmaterialquenohayasidoescritoportioquenoestyapublicadobajoGFDL.RecientementewikimediadecidiadoptarlaLicenciaCreativeCommonsCompartirIgual3.0(http://creativecommons.org/licenses/bysa/3.0/deed.es)paratodoslosaportes,porloqueactualmenteellibrotieneunalicenciadual.

    IntroduccinObjetivos

    ElobjetivoprincipaldeesteWikilibroesquecualquierpersonasinconocimientospreviosdeprogramacinpuedasercapazdeprogramarenellenguajeC.

    Unavezlogradoeldominiodellenguaje,esprobablequeloslectoresseinteresenporotrostemasmscomplejosquesuperenalostemasbsicos.Tambinlessermsomenossencilloaprendercualquierotrolenguajedeprogramacinestructurada.

    Sinembargo,estenoesunlibroqueapuntenicamenteaprogramadoresprincipiantes.Tambinpuederesultardeintersparaquienesyatenganexperienciaenelreadeprogramacin.EnestaintroduccinhaydosseccionesenlasqueseexplicaparalosdosgruposprincipalesdelectoresqucaminoseguirparacomenzaraprogramarenellenguajeCobienperfeccionarconocimientos.

    EllenguajeCestanusadoporqueesunlenguajedeprogramacinqueempleapocasinstruccionesenlenguajemquinaparatraducirelementosdelcdigo.Estoreducelostiemposdeejecucindelosprogramas.

    Notasobrelaexactitud

    Muchasdelascosasexpresadasenestewikilibro,especialmenteenlosprimeroscaptulos,nosoncompletamenteexactas,aunquesonbuenasaproximaciones.Losdetallesmsexactosirnapareciendoposteriormente,unavezquelosmaterialesanterioreshayansidocorrectamenteasimiladosporellector.Engeneral,dadasdosdefinicionesodatoscontradictoriosenestewikilibro,debeconsiderarsesiemprecomomsexactoalsegundo,habiendoaparecidoelprimerocomounaintroduccinmsgeneralaltema.

    Estndarutilizado

    EllenguajeCfuecreadoenlosaossetenta,yalolargodesuhistoriahapasadopormuchasmodificaciones,tantoconrespectoalasintaxiscomoconrespectoalcdigoincluidodentrodelabibliotecaestndar.Esporelloquesefuerondesarrollandoestndares,paraquetodossepanconquversindellenguajeseesttrabajando.

    LosdistintosestndaresdellenguajeChansido:elCdeKernighanyRitchie,unestndarnooficialquesurgiluegodelapublicacindesulibroen1978elC89oC90,elprimerestndaroficial,posterioralapublicacindelosestndaresANSIen1989eISOen1990yelC99,publicadoen1999.

    https://es.wikipedia.org/wiki/Lenguaje_de_programaci%C3%B3n_Chttps://es.wikibooks.org/wiki/Especial:Entrarhttps://es.wikipedia.org/wiki/Programaci%C3%B3n_estructuradahttps://es.wikipedia.org/wiki/Licencia_de_documentaci%C3%B3n_libre_de_GNUhttps://es.wikibooks.org/wiki/Discusi%C3%B3n:Programaci%C3%B3n_en_Chttps://es.wikibooks.org/wiki/Wikilibros:Manualhttp://creativecommons.org/licenses/by-sa/3.0/deed.es
  • 15/7/2015 ProgramacinenC/TextocompletoWikilibros

    https://es.wikibooks.org/w/index.php?title=Programaci%C3%B3n_en_C/Texto_completo&printable=yes 5/34

    EnestelibroseutilizarelestndarC99,sibienporcuestionesdeestiloycompatibilidadmuchasvecesseutilizarcdigocompatibleconelestndarC89.

    Paralosprincipiantes

    Paraquiennohayaprogramadoantes,esrecomendableseguirelordendellibro.Lostemasestnespecialmenteorganizadosdemaneraincrementaloacumulativa.Talvez,loquesetevaahacermstilenelcaminodelaprendizajeeslaconstanciasterco,notrastabilles,noterindas,talveztupreguntaseacuntasvecestengoqueintentar?,lasvecesnecesariasparalogrartuobjetivo,seralarespuesta.

    Claroqueelprincipalenemigodenosotrosloshumanoseseltiempoyporesoencasodequedeverdadeststrancadoenalgobuscaayudadealguienquesepa"msquet".Quenotienesanadieatualrededorconesacaracterstica?Talveznobuscastebienytalvezquierasusarlaredderedes.Utilizalosbuscadores,preguntaenIRC,enforosdeprogramacin,enlistasdecorreo.

    Paralosmsavanzados

    Ellanzamientoquedalibreporsupuesto,solotsabesloquenecesitas.Lasreglasdeljuegosonlasmismasdesiempre:primerosaberloquesequiereonecesitayatacarporah.

    Enestecaso,tesertilaccederaloscontenidosapartirdelndice,eligiendosloaquellosqueteseannecesarios.

    Requisitos

    Sepresuponequeloslectorestienenconocimientoselementalesdeinformticaaniveldeusuario,ysoncapacesdeinstalaruncompiladordellenguajeCensussistema.LosdetallessobrelainstalacinsevernenlaseccinHerramientas.

    ConrespectoalHardware,slosernecesariocontarconunaPCconsistemaoperativo,dondeseaposibleinstalaruncompilador,yenloposibleunentornodedesarrollo.Cuantomejorsealacomputadora,msrpidoserelprocesodecompilacinyejecucindelosprogramas.Sinembargo,cualquierPCsirveparaaprenderconlosejemplosdeestelibro.

    Paraquienesnotenganconocimientosbsicosdeprogramacin,puedeserunabuenaideacomenzarleyendolosprimeroscaptulosdelWikilibroFundamentosdeprogramacin,yaquealgunostemasexplicadoseneselibroseasumenyaconocidos.

    Finalmente,unrequisitoimprescindibleentodoprogramadorestenersentidocomn.Muchasvecessepuedenadoptarmejoresopeoressolucionesantelosdiversosproblemas,yladecisindeculelegirpasaporlaaplicacindelsentidocomn.

    Herramientas

    ParaprogramartantoenC,comoenC++,Javaocualquierotrolenguajedeprogramacin,necesitamoscontarconaplicacionesoherramientasquenospermitanponerenfuncionamientonuestroprograma.

    EllenguajedeprogramacinCescompilado,asqueenestecasonecesitaremosuncompilador,queserelencargadodetransformarnuestrocdigofuenteencdigoquelacomputadorapuedaejecutar.

    Adems,parafacilitarlatareadelosprogramadoresexistenlosdenominadosEntornodedesarrollointegrados(IDE).Enmuchoscasos,estosentornosincluyenuncompilador,undepurador,yotrasherramientas.

    Lasherramientasainstalardependerndelsistemaoperativoutilizado.AcontinuacinselistanalgunasposibilidadesparaelsistemaoperativoWindowsoGNU/Linux,noesimprescindibleutilizarestasherramientasenparticular,cualquiercompiladorpuedeservir.

    Windows

    https://es.wikibooks.org/wiki/Fundamentos_de_programaci%C3%B3n
  • 15/7/2015 ProgramacinenC/TextocompletoWikilibros

    https://es.wikibooks.org/w/index.php?title=Programaci%C3%B3n_en_C/Texto_completo&printable=yes 6/34

    UnodelosentornosdedesarrollomsconocidosentrelosprogramadoresdeCsobreWindows,tantonovatoscomoexpertos,eselBloodshedDevC++,queesunentornolibremultiplataforma.TalentornodedesarrollofueabandonadoyretomadomejorndolopasandoallamarseWxDevC++(http://wxdsgn.sourceforge.net/).OtroentornolibreygratuitoeselCode::Blocks(http://www.codeblocks.org/).AmbosentornospuedenutilizarsetantoparaCcomoparaC++.

    TambinhayotrasalternativasprivativascomoloscompiladoresdeBorlandodeMicrosoft(MicrosoftVisualC++).

    GNU/Linux

    EnlossistemasGNU/Linux,sernecesariotenerinstaladaslasherramientasgccymakeylaversin6delaglibcconsudocumentacin,quesonlasquepermitirncompilarlosprogramas.

    Paraescribirymodificarelcdigo,esposibleutilizarcualquiereditordetextoplano(enloposiblequecuenteconresaltadodesintaxis),comosonemacs,vim,kate,geditogeany.

    Sinembargo,paraquienessonnovatosenlaprogramacin,esrecomendableutilizarunentornodedesarrollocomosonelAnjutaDevStudio(paraelentornoGNOME)oKDevelop(paraelentornoKDE),yaqueincluyenfacilidadesadicionalesparalaejecucinysolucindeproblemas.

    LosprogramasmencionadosseincluyendentrodelainstalacinestndardelamayoradelasdistribucionesactualesdeGNU/Linux,demodoqueparainstalarlosslosernecesarioseguirelprocedimientousualdeinstalacindeaplicacionesparaladistribucindeseada.

    HistoriadeCEllenguajedeprogramacinCfuecreadoporDennisRitchieentre1969y1973cuandotrabajabaenBellLaboratoriesdeAT&TjuntoconKenThompsoneneldiseodelsistemaoperativoUNIX.Cfuecreadoparapoderescribirdichosistemaoperativoenunlenguajedealtonivel,independientedelhardwaredondeseejecutara.

    Contarconunlenguajedealtonivelpermitielavancedelossistemasoperativos,yaqueelmismocdigopodaserutilizadoenlasdistintasplataformas,propiciandolareutilizacindecdigoyreduciendolostiemposdedesarrollo.AsesquelossistemasoperativosbasadosenUNIX,elsistemaBSD,elsistemaGNU/LinuxymuchosotrosfuerondesarrolladosenC.

    Adems,conelpasodeltiemposehandesarrolladocientosdebibliotecasquepermitenalosprogramadoresdeCutilizarelcdigodesarrolladoporotrosparalarealizacindetareascomunes.Esto,asuvez,hapropiciadoeldesarrollodeaplicacionesenlenguajeC.

    ActualmenteesimposiblecontarlacantidaddeaplicacionesyherramientasdesarrolladasenC.

    Evolucin

    Amediadosdelosaos60s,MartinRichardsdiseellenguajeBCPLconlafinalidaddeusarloparaescribirsoftwaredesistemasoperativosycompiladores.

    En1969,KenThompsonescribielLenguajeB,enBellLaboratories,conelobjetivoderecodificarUNIX(escritohastaesemomentoenlenguajeensamblador)usandounlenguajedealtonivelmsportableyflexible.

    Durantelossiguientesaos,DennisRitchiemodificellenguajeB,llegandoacrearellenguajeCyreescribiendoelsistemaUNIXendicholenguajeaadicaractersticasnuevas,comosoneldiseodetiposylasestructurasdedatos.

    https://es.wikipedia.org/wiki/Glibchttp://wxdsgn.sourceforge.net/https://es.wikipedia.org/wiki/Martin_Richardshttps://es.wikipedia.org/wiki/Ken_Thompsonhttps://es.wikipedia.org/wiki/Lenguaje_de_programaci%C3%B3n_Bhttps://es.wikipedia.org/wiki/BCPLhttp://www.codeblocks.org/https://es.wikipedia.org/wiki/Dennis_Ritchie
  • 15/7/2015 ProgramacinenC/TextocompletoWikilibros

    https://es.wikibooks.org/w/index.php?title=Programaci%C3%B3n_en_C/Texto_completo&printable=yes 7/34

    En1978,DennisRitchieyBrianKernighanpublicaronlaprimeraedicindellibroEllenguajedeprogramacinC.Estelibrofueduranteaoslaespecificacininformaldellenguaje.Ellenguajedescritoenlaprimeraedicindeestelibro,fueconocidocomo"elCdeKernighanyRitchie"osimplemente"K&RC".Enestelibroseintrodujeronnuevascaractersticasallenguaje:lostipodedatosstruct,longintyunsignedintlosoperadores=+y=fueronsustituidospor+=y=.

    Amediadosdelosaos80,BjarneStroustrup(tambindeloslaboratoriosBell),creaellenguajeC++,unlenguajebasadoenC,connumerosascaractersticasadicionales,siendolaprincipalqueestorientadoaobjetos.SibiensehancreadomuchoslenguajesbasadosenC,C++eselquehapermanecidomsasociadoaC.

    EnlosaossiguientesalapublicacindelCdeKernighanyRitchie,seaadieronallenguajemuchascaractersticasnooficiales,queestabanpresentesenalgunoscompiladoresynoenotros.Fueporelloqueen1989ANSI(AmericanNationalStandardsInstitute)publicelprimerestndaroficialdeC,queesconocidocomoANSIC.

    Enesteestndarsetomaronmuchasdelasfuncionalidadesnooficialesyseagregaronfuncionalidadesnuevascomolosprototiposdefuncin,yunpreprocesadormejorado.Tambinsecambilasintaxisdeladeclaracindeparmetrosdefunciones,paraqueincluyeraneltipojuntoconelnombre.

    Alaosiguiente,en1990sepubliclaestandarizacinISOdellenguaje.EsteestndaresbsicamenteelestndarANSI,conunaspocasmodificacionesdeformato.Aesteestndarseloconoce,entonces,comoC89,oC90,ysetratadelmismolenguaje.

    BasndoseenelestndarANSIqueestabaenpreparacin,en1988KernighanyRitchiepublicaronlasegundaedicindesulibro,queesanhoyutilizadacomounadelasreferenciasprincipalesdellenguaje.

    Durantelossiguientesaos,ellenguajeCpermanecisindemasiadoscambios.Sinembargo,comohabasucedidoantes,losdistintoscompiladoresfueronincorporandocaractersticasadicionales,queotroscompiladoresnotenan,siendoC++laprincipalinfluencia.

    FueporelloqueafinalesdelosnoventasedecidirevisarelestndardeC,loquellevalapublicacindelestndarC99.Esteestndarincluyevariasnuevascaractersticascomoson:lasfuncionesinlinelaposibilidaddedeclararvariablesencualquierpartedelcdigoloscomentariosdeunasolalneautilizando//lostiposdedatoslonglongint,boolycomplex,entreotras.

    Anhoyelprocesodeevolucindellenguajesigueavanzando,ydesde2007seesttrabajandoenelarmadodeunnuevoestndar.

    Msinformacin

    LenguajedeprogramacinBCPLHistoriadellenguajedelprogramacinCTheDevelopmentoftheCLanguage(http://cm.belllabs.com/cm/cs/who/dmr/chist.html)

    FundamentosdeprogramacinEnestecaptuloveremosunresumidolistadodeconceptosbsicos,estainformacinpuedeencontrarseenformamselaboradaenelWikiLibroFundamentosdeprogramacin.

    Definiciones

    Sedenominaalgoritmoaunasecuenciadeinstruccionesquepermitenobtenerunresultadoenparticular.Nonecesariamentesonprogramasdecomputadora,unarecetadecocina,olasinstruccionesparacambiarunneumticosonejemplosdealgoritmosdelavidareal.

    Lascomputadoras,sonmaquinassininteligenciapropia,cuyanicafinalidadesinterpretarelcdigoqueselesprovee.

    Ellenguajedemquinaeselnicolenguajequelacomputadora"entiende"yescapazdeejecutar.

    https://es.wikipedia.org/wiki/Lenguaje_de_m%C3%A1quinahttps://es.wikipedia.org/wiki/Bjarne_Stroustruphttps://es.wikipedia.org/wiki/Computadorahttps://es.wikipedia.org/wiki/BCPLhttps://es.wikipedia.org/wiki/Algoritmohttps://es.wikipedia.org/wiki/Lenguaje_de_programaci%C3%B3n_C#Historiahttp://cm.bell-labs.com/cm/cs/who/dmr/chist.htmlhttps://es.wikipedia.org/wiki/C%2B%2Bhttps://es.wikibooks.org/wiki/Fundamentos_de_programaci%C3%B3n
  • 15/7/2015 ProgramacinenC/TextocompletoWikilibros

    https://es.wikibooks.org/w/index.php?title=Programaci%C3%B3n_en_C/Texto_completo&printable=yes 8/34

    Loslenguajesdeprogramacinsonelmediodecomunicacinentreelprogramadoryunacomputadora.Elprogramadorescribeenalgnlenguajedeprogramacinyutilizalasherramientasprovistasporeselenguajeparatransformarloenlenguajedemquina.

    Finalmente,denominamosprogramaaunasecuenciaderdenesaserejecutadasporunacomputadora.Unprogramadebeestarescritoenalgnlenguajedeprogramacin,ypuedeincluirunoomsalgoritmos.

    Tiposdelenguajes

    Existeunagrancantidaddelenguajesdeprogramacin,queestnpensadosparadistintasfinalidades,siguendistintosparadigmas,ydeunauotraformasediferenciandelosdems.

    Esquemasdeprogramacin

    ElesquemadeprogramacinllamadoProgramacinImperativa,consisteenescribirunasecuenciadeinstruccionesunadetrsdelaotra,queseejecutarnenorden.Algunasdeesasinstruccionespuedenhacerquelamquinapaseaunainstruccinquenosealasiguiente,talvezporquesecumplaunacondicinquehayamosestablecido.

    Enlosltimosaoshatomadofuerzaotroparadigmadecomputacin,llamadoProgramacinOrientadaaObjetos,enelcualseintentanmodelarlossistemascreadoscomoextensionesdelarealidadmedianteladefinicinde"objetos"quemodelanentidadesdelavidarealyqueinteractanentresmediante"mensajes"llamadasmtodos.

    EllenguajeCesunlenguajeimperativo,noorientadoaobjetos.

    Altoobajonivel

    Porotrolado,loslenguajesdeprogramacinseclasificanenniveles.Unlenguajeesdemsbajonivelcuantomscercanoestalcdigodemquina,yunlenguajequeesdemsaltonivelcuantomslejanoestdelamquinaymscercanoallenguajehumano.

    Cesunlenguajedealtonivelaunquetienemuchascaractersticasdelenguajedebajonivel(comoelusoquepermitehacerdelamemoria).EstascaractersticashacenqueCseaunlenguajemuypotente,yaquepermiteoptimizaralmximolosrecursosdelamquina.Porende,estotambinhacequeladificultadyqueloserroresquesepuedancometerprogramandoaumenten.AsqueaCseleconsideradenivelmedio.

    LenguajesdemsaltonivelqueCsonaquellosenlosqueelprogramadornonecesitaencargarsedemanipularlamemoria,comoJava,C#,Python,Ruby,entreotros.

    Compiladosointerpretados

    Otraformadeclasificaraloslenguajesdeprogramacinqueessegnlaformaenqueseejecutansusrdenes.Existenloslenguajesquesoninterpretados,cuyasrdenespasanatravsdeunintrpretequeseencargadeejecutarlas(apartirdelcdigofuente)enelmismomomentoenqueestnsiendoledas.AlgunosdeloslenguajesinterpretadossonPython,PerloTcl,entremuchosotros.

    Lacontrapartedeloslenguajesinterpretadossonloslenguajescompilados(comoelmismoC)quesediferencianenquelasrdenessontransformadasalenguajedemquinaquesealmacenaenunarchivoejecutable.Esearchivopuedeejecutarseluego,sinrecurriralcompilador.

    Loslenguajescompiladostienenlaventajadelavelocidadylaeficiencia,perolosinterpretadostienenlaventajadeque,generalmente,sonmuyportablesydemsaltonivel.

    Estructuradelamemoria

    PartedeestapotenciadeCvienedequepermiteaccederconmuchalibertadalamemoriadelamquina.Paraentenderunpococmoesposible,debemosentendercmoseguardanlosdatosenlamemoria.

    https://es.wikipedia.org/wiki/Lenguaje_interpretadohttps://es.wikipedia.org/wiki/Lenguaje_compiladohttps://es.wikipedia.org/wiki/Lenguaje_de_bajo_nivelhttps://es.wikipedia.org/wiki/Programa_(computaci%C3%B3n)https://es.wikipedia.org/wiki/Programaci%C3%B3n_imperativahttps://es.wikipedia.org/wiki/Lenguaje_de_alto_nivelhttps://es.wikipedia.org/wiki/Paradigma_de_programaci%C3%B3nhttps://es.wikipedia.org/wiki/Pythonhttps://es.wikipedia.org/wiki/Pythonhttps://es.wikipedia.org/wiki/Rubyhttps://es.wikipedia.org/wiki/Tclhttps://es.wikipedia.org/wiki/Programaci%C3%B3n_orientada_a_objetoshttps://es.wikipedia.org/wiki/Lenguaje_de_programaci%C3%B3nhttps://es.wikipedia.org/wiki/Perlhttps://es.wikipedia.org/wiki/Lenguaje_de_programaci%C3%B3n_Javahttps://es.wikipedia.org/wiki/C_Sharp
  • 15/7/2015 ProgramacinenC/TextocompletoWikilibros

    https://es.wikibooks.org/w/index.php?title=Programaci%C3%B3n_en_C/Texto_completo&printable=yes 9/34

    Imaginemosquelamemoriatieneunmontndecasillas,unaenormefiladecasillas,cadaunadelascualescontieneundgitobinario(bit):

    0101001010100001010101001010000100111010110010010101001011010110001101010110101010110111...

    Esexactamenteas,peroesmscmodorecordarqueesosbitsseencuentranagrupadosdeochoenocho,formandooctetos(bytes):

    01010010 10100001 01010100 10100001 00111010 11001001 01010010 11010110 00110101 01101010 10110111 ...

    Cadaoctetopuedecontener combinacionesdistintasdecerosyunos,esdecir,cualquiernmeroentre0y255:

    82 161 84 161 58 201 82 214 181 106 183 ...

    Tambinpodemosrepresentarestosnmerosenbasehexadecimal:

    0x52 0xA1 0x54 0xA1 0x3A 0xC9 0x52 0xD6 0x35 0x6A 0xB7 ...

    Oconsiderarloscaracteres,mediantealgunacodificacin:

    R T : R 5 j ...

    EsteeseltipodedatomselementalquenospodemosencontrarenC:elcaracter.Uncaracterocupaexactamenteunbyte(8bits)dememoria,ypuedecontenerunnmeroentre0y255,oentre128y127,dependiendosiqueremosconsiderarlocomosinsignooconl.

    PrimerprogramaenCEnellibro"ElLenguajedeProgramacinC",KernighanyRitchieintrodujeronallenguajeCutilizandounsencilloprogramaquemostrabaunsaludoporlapantalla.DesdeentoncessehizotradicinempezarconcualquierlenguajedeprogramacinconelejemplodelHolamundo.

    EnparticularenCseinvolucranmuchaspartesysintaxisdellenguaje,porlocualesespecialmentetilverlocomoelprimerejemplodeprogramacinenC.

    Ejemplo:Holamundo

    /*Inclusindearchivos*/#include

    /*Funcinprincipal*/intmain(intargc,char**argv){/*Impresinporpantallaysalidadelprograma*/printf("Holamundo\n");return0;}

    Parapodereditaryejecutaresteprogramasernecesarioutilizaralgneditoryluegouncompilador,comoseexplicenlaseccinHerramientasnecesarias.

    SisetieneelcompiladorgccenunentornoUNIXoGNU/Linux,laformasencilladecompilaryejecutarser:

    $gccholamundo.c$./a.outHolaMundo$

    https://es.wikipedia.org/wiki/Bithttps://es.wikibooks.org/wiki/Programaci%C3%B3n_en_C/Herramientashttps://es.wikipedia.org/wiki/Bytehttps://es.wikipedia.org/wiki/Hola_mundohttps://es.wikipedia.org/wiki/Codificaci%C3%B3n_de_caracteres
  • 15/7/2015 ProgramacinenC/TextocompletoWikilibros

    https://es.wikibooks.org/w/index.php?title=Programaci%C3%B3n_en_C/Texto_completo&printable=yes 10/34

    Esdecirqueelcompiladorgeneraunarchivo,enestecasollamadoa.out,ylasalidageneradaporesearchivoes"Holamundo".Acontinuacinunaexplicacindetalladasobreelprocesodecompilacindelprograma,yluegounanlisislneaporlneadelcontenidodeesteejemplo.

    Prerequisitosparalacompilacindeprogramas

    Comoyasemencion,sernecesariotenerinstaladoelcompiladoryuneditoroentornodedesarrolloquepermitanescribirelcdigoacompilar.ParamsinformacinverlaseccinHerramientasnecesarias.

    Elcdigoacompilardebeguardarseconunnombrequerepresentealprogramaencuestinylaextensin.c.EnelcasodelejemplodelHolamundo,elarchivopuedellamarsehola.c.

    Enlasexplicacionesacontinuacin,seasumequesecuentaconuncompiladorinstaladoysehaeditadounarchivohola.cquesequierecompilar.Situsistemaoperativonoapareceenestalistabuscaeninternet,yaqueseguroqueexistealgncompiladorparaesesistema.

    Compilacindeprogramassegnlaplataforma

    Windows

    ParacompilarunprogramaCenentornosWindows,debemosseguirunaseriedepasosquevaransegnelcompiladordeCquequeramosutilizar.Antesquenada,serabuenoqueserevisesladocumentacindelcompiladorelegidoparaconocerloscomandosexactos.

    Compilacindelcdigofuente

    Siseutilizaunentornodedesarrollo,serposiblecompilardirectamentedesdeelentorno,medianteunbotnounacombinacindeteclas.

    Siseejecutaelcompiladordesdelalneadecomandos,lalneaserdistintasegnelcompiladorutilizado.Acontinuacinalgunosejemplosdeciertoscomandossegnelcompilador:

    EnTurboCdeBorlandes:tcchola.cEnC++deBorland:bcchola.cEnVisualCdeMicrosoft:clhola.cEnGNUgcc:gcchola.cocchola.cElCdeZortech:ztchola.c

    Unavezcompiladoelcdigofuentesegeneraunarchivollamadoarchivoobjetooprogramaobjetoqueesluegoenlazadomedianteelenlazador,paragenerarelarchivoejecutable.

    Loscompiladoresactualessuelenhacerdosfuncionesdeunavez,compilandoyenlazandotodoenunasolafuncin,aunqueesposiblepedirlesquenolohaganmedianteparmetrosadicionales.

    Segnelcompiladorylaconfiguracinutilizada,seobtendrndosotresarchivos:

    Elarchivofuente

    hola.c

    Elarchivoobjeto

    hola.obj

    https://es.wikibooks.org/wiki/Programaci%C3%B3n_en_C/Herramientashttps://es.wikipedia.org/wiki/compilador
  • 15/7/2015 ProgramacinenC/TextocompletoWikilibros

    https://es.wikibooks.org/w/index.php?title=Programaci%C3%B3n_en_C/Texto_completo&printable=yes 11/34

    Elarchivoejecutable

    hola.exe

    Esteltimoeselquenosinteresa,puestoaqueeselcdigoejecutable,elprogramaens.Alejecutarloseproducirlasalidadeseadaenunaventanadeconsola.

    Salidaporpantalla

    SiejecutamosenentornoWindowselprogramadirectamentedesdeelnavegadordearchivos,otambindesdealgunosentornosdedesarrollo,loquesucederserqueapenasabiertalaventanadelaconsola,semostrarlacadenaesperadayluegodeterminadalafuncin,laconsolasecerrarsintenereltiemposuficientedevernuestromensajeenpantalla.

    Parapoderverlasalidaporpantallasernecesarioejecutarelprogramadesdelalneadecomandos,omodificarlaconfiguracindelentornodedesarrolloparaquemuestrelasalidaporpantallaalejecutarelprograma.

    Unaposiblesolucinesagregarunafuncinadicionalanuestro"hola.c":

    /*Inclusindearchivos*/#include#include

    /*Funcinprincipal*/intmain(intargc,char**argv){/*Impresinporpantallaysalidadelprograma*/printf("Holamundo\n");system("pause");return0;}

    Lasdoslneasagregadaspermitenqueutilicemoslabibliotecastdlib,queincluyelafuncinsystemyquemedianteestafuncinseejecuteelcomandopausedelsistema,queevitaqueelprogramasigahastaquesepresioneunatecla.

    Asesposiblevisualizarquelasalidadehola.csecompletperfectamente.

    GNU

    Sibienexistenotroscompiladores,lomsusualymssencilloparacompilarunprogramaenGNU/Linuxeselcompiladorgcc,yaqueeselqueseincluyeentodaslasdistribuciones.

    Decualquierforma,esposiblerealizarlacompilacindesdelneadecomandosodesdeelentornogrfico.

    Pararealizarladesdelneadecomandos,sernecesariocontarconunaterminal(xterm,konsole,gnometerminal,etc).Noesnecesariocontarconpermisosderootparacrearocompilarprogramas.Enesaterminalsernecesarioescribir

    gcchola.c

    Sinoexistenerroresenelcdigo,estecomandonoscrearunarchivoejecutable,queporomisinsellama"a.out",yquepodemosejecutardesdelalneadecomandosdelasiguienteforma:

    ./a.outHolamundo

    Esunabuenaideaespecificarelnombrequeelarchivoejecutabletendr,pasandocomoparmetroalcompiladorlaopcino,delasiguienteforma:

  • 15/7/2015 ProgramacinenC/TextocompletoWikilibros

    https://es.wikibooks.org/w/index.php?title=Programaci%C3%B3n_en_C/Texto_completo&printable=yes 12/34

    gcchola.cohola

    Conlocual,elnombredelarchivocreadoserhola.EstearchivonotieneextensinyaqueeslaformausualdellamaralosarchivosejecutablesenlosentornosUNIXyGNU/Linux,sinembargofuncionaradelamismaformasisellamarahola.exe.

    Paraejecutarlo,haremoslosmismoqueenelcasoanterior:

    ./holaHolamundo

    Existenotrosparmetrosquepodemosespecificaralcompiladorenlalneadecomandos,dependiendodeltipodeprograma,yenfuncindelacomplejidaddelmismo.Porejemplo,podemosagregarlassiguientesopciones:

    gcchola.coholaWallpedantic

    LaopcinWallnosmostrartodoslosavisosqueproduzcaelcompilador,nosolamenteloserrores.Losavisosnosindicandndey/oporqupodrasurgiralgnerrorennuestroprograma.

    LaopcinpedanticnosaportamsinformacinsobreloserroresylosavisosmostradosporGCC.

    Diseccionandoel"HolaMundo"

    AcontinuacinveremosculeslaestructurabsicadeunprogramaenC,parapoderentenderquhacecadaunadelaslneasdenuestrosencilloprograma.

    Esprobablequeloprimeroquesaltealavistasealalnea:

    printf("Holamundo\n");

    EstaeslalneaquehaceaparecerlacadenaHolaMundoennuestrapantalla.NotamosqueenClasentenciaparaimprimiralgoporpantallaesprintf()y,adems,hayquecolocarparntesisalrededordeloquequeremosimprimirparautilizarla.

    EstosedebeaqueenC,printfesunafuncin,queimprimesuargumento(lacadenaHolaMundo\n)enlapantalla.Sedenominainvocarunafuncinalaaccindeutilizarlaparaquerealiceunaaccin.

    Podemosobservartambinquelacadenaaimprimirterminaconunaextraacombinacin:\n.Lacombinacin\nnorepresentaadoscaracteresindependientes,sinoquerepresentaunnicocarcternoimprimible:elsaltodelnea.Sinelsaltodelnea,elresultadoalejecutarelprogramasera:

    $./a.outHolaMundo$

    Esdecirquenohaysaltodelneaentrelacadenaimpresa,ylasiguienteentradadelalneaderdenes,quenoesloqueesperbamos.

    Loltimoanotarenlalneaesqueterminaconunpuntoycoma.EnC,todaslassentenciasterminanconunpuntoycoma.Alprincipiopuedeparecerobviodndeterminaunasentencia,peroyaveremosmsadelantequenoloestanto.

    Observemosahoralasiguientesentenciadelprograma:

    return0;

  • 15/7/2015 ProgramacinenC/TextocompletoWikilibros

    https://es.wikibooks.org/w/index.php?title=Programaci%C3%B3n_en_C/Texto_completo&printable=yes 13/34

    Luegodeestasentencia,terminaelprograma.Enelcasodelainstruccinreturndentrodelafuncinmain,elresultadoesquesefinalizaelprograma,comunicndolealsistemaoperativoqueelvalorderetorno(uncdigonumricoqueelsistemautilizaparasabersielprogramahafuncionadobienohadadofallos)es0,esdecir,correcto.

    Lasdosltimassentenciasseencuentranencerradasentrellaves.Deestamanera,formanunbloque,esdecir,ungrupodesentenciasqueseejecutarnsiempredeformacorrelativa.

    Yquesesalneaqueprecede(enrealidad,quedanombre)albloque?

    intmain(intargc,char**argv)

    Puesesladefinicindeunafuncin,enestecasollamadamain.EnC(yengeneralentodosloslenguajesdeprogramacinestructurada)todosehaceabasedefunciones,comomainyprintf.

    Lafuncinmainesespecial,porqueesellaqueseinvocacuandoseejecutaelprograma.TodoslosprogramasenCcomienzansuejecucinalprincipiodelafuncinmain,ycuandostaacaba,elprogramatambin.

    Veamosconmsdetalleladefinicindelafuncin:

    intmain(intargc,char**argv){...}

    Elnombredelafuncinquevieneacontinuacin,entrellaves,esmain.Recibedosargumentos:intargcychar**argv(querepresentanalacantidaddeargumentosingresadosalejecutarelprogramayalosvaloresdeestosargumentosrespectivamente).[1]

    Lafuncindevuelvecomoresultadounnmeroentero,int(queesel0delainstruccinreturn).[2]

    Finalmente,yuntantoaparte(estseparadadelrestoporunalneaenblanco),tenemoslalnea:

    #include

    Queparecebastantedistintaalrestodelprograma,yque,adems,parecenotenersentido,puestoqueyahemosdefinidolafuncinmainquehacetodoeltrabajo.

    Efectivamente,esalneanoespartedelprograma,aunqueseaimprescindible.LalneaesunainstruccindelpreprocesadordeC,comonosloindicaelsmbolo#,yloquehaceesincluirenesepuntoelcontenidodeotrofichero,antes(deahelnombredepreprocesador)dequecomiencelacompilacin.Elficherostdio.heselquecontieneladefinicindelafuncinprintf(),queantesutilizamosperoquenoescribimos,yaqueformapartedelabibliotecaestndardeC.

    Comentarios

    Unavezescritouncdigo,tratardeentenderlounaomstardesoloconleerlopuedeserfrustrante:nohaymaneradesaber(sielprogramaesmedianamentecomplicado)quescadavariable,oquhacecadabloquedecdigo.Poresto,encualquierlenguajedeprogramacinsonimportantesloscomentarios.

    UncomentarioenCestodoloqueseencuentreentrelossmbolos/*y*/.Hayquetenerencuentaqueloscomentariosnosepuedenanidar:sidentrodeuncomentariohayun/*,seguirsiendoelprimer*/elquefinaliceelcomentario,noseesperaralsegundo.

    HayotrotipodecomentariosenC,procedentesdellenguajeC++,eincorporadasalestndardeCapartirdeC99://.Todoloqueestdespusdeestossignos,hastaelfinaldelalnea,seconsideraruncomentarioyelcompiladornolotomarencuenta.

    https://es.wikipedia.org/wiki/Biblioteca_est%C3%A1ndar_de_Chttps://es.wikipedia.org/wiki/Preprocesadorhttps://es.wikipedia.org/wiki/C%2B%2B
  • 15/7/2015 ProgramacinenC/TextocompletoWikilibros

    https://es.wikibooks.org/w/index.php?title=Programaci%C3%B3n_en_C/Texto_completo&printable=yes 14/34

    Enelejemplopresentadopuedenversetreslneasconcomentarios,quedocumentansomeramentelasdistintasfuncionalidadesdelcdigo.Enlosprximoscaptulospodrnversemejoresusosdeloscomentariosdentrodelcdigo.

    Tambinpodradecirsequeesunaherramientabsicabasadaencompilador

    1. Enuncaptuloposteriorpodrverunejemplodelusodelosparmetrosquerecibemain.2. Esimportantesealarqueelestndardicequemaindeberdefinirsecomofuncinqueretornaunentero,odelo

    contrarioelresultadoquedaindefinido.

    TiposdedatosHistoria

    EnellenguajeCestandarizadocomoC89,existancuatrotiposdedatosbsicosqueson:losnmerosenteros,losnmerosreales,loscaracteres,ylospunteros.ApartirdelestndarC99seagregan:losvaloreslgicos(verdaderoofalso)ylosnmeroscomplejos.

    Estostiposdedatossonpartedellenguaje,yporelloselosconsideraprimitivos.Msadelanteveremosqueconelusodeestructurasyunionesesposiblecreartiposcompuestosdedatosapartirdeestostiposprimitivos.

    Enestecaptuloveremoslosenteros,losrealesyloscaracteres.Msadelantesevernotrostiposdedatosmscomplejos,comosonlosvectores,lascadenasdecaracteres,ylospunterosengeneral.

    Enteros

    LosenterossoneltipodedatomsprimitivoenC.Seusanpararepresentarnmerosenteros.Perosiempresepuedenencontrarotrasaplicacionesparalosnmerosenteros.Engeneralsepuedenusarpararepresentarcualquiervariablediscreta.

    Lostiposdedatosenterosson:short,int,longylonglong,cadaunorepresentandounnmeroenterodeuntamaoocapacidaddeterminado.Segnelcompiladorylaplataformadehardware,cadaunodeestostiposdedatopuedeocupardesde1bytehasta8bytesenmemoria(paramsdetallesbuscaenlareferencia).

    Adems,ellenguajeChaceladistincindesielenteroesconsigno(signed)osinsigno(unsigned).Encasodequenosedeclaresiesconsignoosinsigno,setomaconsigno.

    Algunosejemplosdedeclaracionesdeenteros:

    inta;unsignedinta;signedlonga;signedlonglonga=10000000;

    Todoslosnmerossonrepresentadosenmemoriamedianteunacadenadebits.Enelcasodelosnmerosconsigno,elbitmssignificativoeselqueseusapararepresentarelsigno.Larepresentacindelosnmerosnegativosserealizamedianteelcomplementoados,queesunatcnicaquepermiteoperarconlosnmerosnegativosdeformalgica.

    Amododeejemplo,larepresentacinenmemoriadelnmero8enunavariablede2bytes,entera,consigno,seralasiguiente:

    1111111111111000

    https://es.wikipedia.org/wiki/Tipo_de_dato_l%C3%B3gicohttps://es.wikipedia.org/wiki/Bit_m%C3%A1s_significativohttps://es.wikibooks.org/wiki/Programaci%C3%B3n_en_C/Estructuras_y_Unioneshttps://es.wikibooks.org/wiki/Programaci%C3%B3n_en_C/Referenciahttps://es.wikipedia.org/wiki/Tipo_primitivohttps://es.wikipedia.org/wiki/Complemento_a_dos
  • 15/7/2015 ProgramacinenC/TextocompletoWikilibros

    https://es.wikibooks.org/w/index.php?title=Programaci%C3%B3n_en_C/Texto_completo&printable=yes 15/34

    Flotantes

    Sedenominaflotantesalostiposdedatosquerepresentanalosnmerosreales,yaqueutilizanunsistemaderepresentacinbasadoenlatcnicadecomaflotante,quepermiteoperarconnmerosrealesdediversasmagnitudes,medianteunnmerodecimalllamadomantisayunexponentequeindicaelordendemagnitud.

    EltipodedatoflotanteenlenguajeCslotienedostamaos:elfloatyeldouble,queson4bytesy8bytesrespectivamente.Selospuedeutilizartantopararepresentarnmerosdecimales,comopararepresentarnmerosenterosconunordendemagnitudmuygrande.

    Laformadedeclararunavariableflotanteesescribiendoenunalneaunodelostiposdedatosflotantesyacontinuacinelnombredelavariableytalvezalgnvalorqueselesquieradar.

    Algunosejemplos:

    floata;doublea=1e23;doublea=3.1416;floata=4e9;doublea=78;

    Hayquetenerencuentaqueaunquelosvaloresflotantessonmsconvenientesparaalgunasaplicaciones,haycasosenlosqueseprefierenlosenteros.Estosedebeaquelosnmerosflotantesnonecesariamentetienensoportedehardware,enparticularenlasplataformasintegradas.Unaalternativaqueseutilizaenestassituacionesesinterpretarlosenteroscomodecimalesdeformaque150seinterpretecomo1.5y2345como23.45.

    Paraelcasodelosflotantesde4bytes,seutiliza1bitparaelsigno,8bitsparaelexponentey23bitsparaelvalordelnmero.Elprocedimientoparaalmacenarunnmeroenunavariableflotanteeselsiguiente:

    1. Seconvierteabinariolaparteentera.2. Secolocaelsignoenelbitmssignificativodelamismamaneraqueenlosenteros(1paraely0parael+).3. Semuevelacoma(enlarepresentacinbinariadelaparteentera)hastaqueestaladerechadelprimerunoystese

    descarta(elunomssignificativo).Elvalordelexponenteserelnmerodeposicionesquesemovilacoma.Elexponenteusalarepresentacindeunenteroconcomplementoados.

    4. Seconvierteenbinariolapartedecimaldelnmero.Estousandoelpesodelosbits.elbitdecimalmssignificativovale1/2,elsiguientevale1/4,elotro1/8,elotro1/16yashastacompletarloquefaltaparalos23bitsdelvalor.

    5. Seconcatenatodoyeseeselvalorflotanterepresentadoenmemoria.

    Caracteres

    Loscaracteresserepresentanutilizandoeltipochar,quetieneslo1bytedetamao.Estetiposeutilizapararepresentarlos256caracteresdelatabladecaracteresdelsistema.Eltipocharestambinuntipoentero,yaquepuedetomarvaloresde0a255.Porlotantotambinpuedesersignedounsigned.

    Encuantoalaformadedeclararvariablesdetipochareslamismaformaqueconlosotrostipos.

    chara;chara='s';unsignedchara=48;

    Comopuedesver,selepuedeasignarunnmeroaunavariablechar,yaquesetratadeuntipoentero.Enmuchassituacionesseutilizaeltipocharparaalmacenarnmerospequeos,yaqueocupaenmemoriaslamenteunbyte.

    EsimportantenotarqueconlallegadadelacodificacinUTF8,loscaracteresdelosdiversosidiomaspuedenocupar1,2,3o4bytes,demodoqueeltipocharyanoalcanzaparalarepresentacindetodosloscaracteresposibles.Porello,elestndarC99introduceeltipowcharquepuedeocuparmsde1byte,segnseanecesarioparalacodificacinutilizadaporelsistema.

    https://es.wikipedia.org/wiki/Sistema_integradohttps://es.wikipedia.org/wiki/Orden_de_magnitudhttps://es.wikipedia.org/wiki/Mantisahttps://es.wikipedia.org/wiki/UTF-8https://es.wikipedia.org/wiki/Coma_flotante
  • 15/7/2015 ProgramacinenC/TextocompletoWikilibros

    https://es.wikibooks.org/w/index.php?title=Programaci%C3%B3n_en_C/Texto_completo&printable=yes 16/34

    InteraccinconelusuarioEnestecaptuloveremosunpocomssobrecomointeractuarconelusuariodenuestrosprogramasdesdelaconsola,utilizandoprintf()comovimosenelprimerejemplo"Holamundo",ascomoscanf()paralalecturadelteclado.

    Imprimirporpantalla

    Comohemosvistohastaahoraenlosejemplos,hayunafuncinqueutilizamosparasacarporpantallatextosarbitrariosoelresultadodealgunaoperacin:lafuncinprintf().

    Simiramos(enladocumentacin)sudefinicin,nonosaclarardemasiado:

    intprintf(constchar*TEMPLATE,...)

    ...claroqueporalgotieneunaseccincompletadeladocumentacinparaellasola.

    Vemoslapocoapoco.Setratadeunafuncindelabibliotecaestndar,loquequieredecirqueparautilizarlatenemosqueincluirpreviamentesudefinicin.Laencontraremosen.

    Loprimeroquevemosenladefinicinesqueesunafuncindetipoint,loquequieredecirquedevuelveunentero.Eseenteroeselnmerodecaracteresimpresosenlapantalla,ounnmeronegativoencasodequeseproduzcaalgnerror.

    Losiguienteanotaressuprimerargumento:constchar*TEMPLATE.Setratadeunacadenadecaracteres(char*)quenosermodificadaporlafuncin(const),conloquepuedeserunaconstantedecadenaounavariablequecontengaunacadena,perosiempredebeacabarconelcarcternulo\0.

    Yluegovienenesosextraospuntossuspensivos.Esaelipsisnosindicaquecomoargumentosadicionalesdeprintf()podemosponerunaserieilimitadadeotrosargumentos,quesesuponequelafuncinsabrquhacerconellos.Yesoesjustamenteloquehacetanfabulosaytilaprintf().

    Comohemosvisto,elusomssimpledeprintf()esimprimirunacadenadetextosimpleycorriente.Comoyavimos:

    printf("HolaMundo\n");/*imprimelacadena*/

    Ytambinhemosvistoprintf()tambinpuede,conunargumentoextrayunasintaxisespecial,imprimirunnmeroenteroquehayamosalmacenadoenunavariable:

    charresultado;

    resultado=5+2;printf("Resultadodelasuma:%i\n",resultado);

    Aquelpuntodeinsercineslasecuencia%i.printf()siempretratalassecuenciasquecomiencenpor%comosecuenciasdecontrolqueledicenquedebeimprimiralgoqueleproporcionamosenlosotrosargumentos.As,podemosimprimirvariosenterosdistintosenlossitiosquequeramosdelacadena,insertandovariasdeestassecuencias%i:

    intnumero;

    numero=3;printf("Eldoblede%ies%iysucuadradoes%i\n",numero,numero*2,numero*numero);

    Lecturadedatosdelteclado

    https://es.wikibooks.org/wiki/Programaci%C3%B3n_en_C/Primer_programa_en_C
  • 15/7/2015 ProgramacinenC/TextocompletoWikilibros

    https://es.wikibooks.org/w/index.php?title=Programaci%C3%B3n_en_C/Texto_completo&printable=yes 17/34

    Laentradadedatossepuedehacerdemuchasmanerasyentreellasestndesdeelusodedispositivosespecialeshastanuestrosimpleteclado.Laentradadedatosserefiereacualquierformadeinfluenciadelusuariosobrelosdatosqueposeeelsistema.

    Conelfindemostrarunaformadeentradasimpleparaelaprendizajevamosahablardelafuncinscanf()queseencuentradefinidaenyqueseusaparacapturardiferentestiposdedatos.

    Lafuncinscanf()

    scanf()esunadelasfuncionesmsusadasporlosprincipiantesparahacerentradadedatosenellenguajeC.Tieneunasintaxismuyparecidaaprintf:recibeunacadenaconelformatodelosdatosyluegoseponenlasvariablesenordenquecorrespondanaesetipodedatos.Esdecir,ascomoenprintfsepuedenmostrarporpantallalosdatosdevariasvariablesenunamismasentencia,enscanfsepuedencapturarvariosdatosenunasolasentencia.

    #includeintmain(){inta;printf("digaunvalorparaa:");scanf("%i",&a);printf("elvalores:%i\n",a);return0;}

    Porahoranonosinteresanlasdemssentencias,slolaquecontienescanf.Enelcdigosevelosiguiente:

    scanf("%i",&a);

    Seobservaquelafuncionprintfdejenpantallaunapeticinparaqueelusuariointrodujeraunvalor.Entonces,scanfrecibecomoargumentounacadenadelformatoenquesevanacapturarlosdatosylalistadevariablesquevanarecibirvaloresyquedebencoincidirconlosdelformato.

    Enestecasolacadenadeformato,"%i",especificaqueelusuarioingresarunnmeroentero.Luegosedesignaalavariableaparaconteneraesenmero.Elsmbolo(&)queprecedeaaesparaespecificarqueloqueseestenviandocomoargumentonoeselvalorqueposeelavariableasinoladireccindememoriaenqueseencuentra.Enestemomentoesonotienemucharelevancia,slohayquerecordarquesedebeusarelsmbolo&dentrodelscanf.Enelmomentoenquehablemosdepunterosveremosmsdetallesdeesto.

    Otroejemplodelusodescanf:

    #includeintmain(){inta,b;printf("introduzcadosvaloresconelformato\"a,b\":");scanf("%i,%i",&a,&b);printf("elprimervalor:%i\n",a);printf("elsegundovalor:%i\n",b);return0;}

    Aquhemosintroducidounanuevavariableenelcdigo.Lacadenadeformato,"%i,%i"especificaqueelusuarioingresarunnmero,seguidodeunacoma,yluegootronmero.Elprimer%isercapturadoporlavariableayelsegundoporb.

    ExpresionesVamosatratarahoradequeelordenadorhagaunpocodematemticasparanosotros.Porejemplo,querealiceunaspocassumas,restasmultiplicacionesydivisiones.

  • 15/7/2015 ProgramacinenC/TextocompletoWikilibros

    https://es.wikibooks.org/w/index.php?title=Programaci%C3%B3n_en_C/Texto_completo&printable=yes 18/34

    #include

    intmain(void){intresultado;

    resultado=5+2;printf("Resultadodelasuma:%i\n",resultado);resultado=52;printf("Resultadodelaresta:%i\n",resultado);resultado=5*2;printf("Resultadodelamultiplicacin:%i\n",resultado);resultado=5/2;printf("Resultadodeladivisin:%i\n",resultado);return(0);}

    Despusdegrabarlo(porejemplo,conelnombreejemplo.c),locompilamosyejecutamos,con(respectivamente):

    $gccejemplo.c$./a.outResultadodelasuma:7Resultadodelaresta:3Resultadodelamultiplicacin:10Resultadodeladivisin:2$

    Fijmonosenlalneadelprincipiodelafuncinmain:

    intresultado;

    Estalnealoquehaceesreservaruntrozodememoria,deltamaodeunint(normalmente4bytes),yasignarleelnombreresultado,parapoderdespusreferirnosal.Apartirdeestemomento,podemosconsiderarqueennuestroprogramaexisteunavariable,quenotienevalordefinido,peroalaquelepodremosdarvalorposteriormente.

    Laslneasconprintf()yalasconocemos,perohayalgoenellasquenohabamosvistoantes.Esos%iylapartederesultadosonnuevasparanosotros.

    Lafuncinprintf()noslosabeimprimircadenassimples,como"HolaMundo\n",sinotambinimprimirvariables.Paraello,enellugardelacadenadondequeremosqueaparezcaelvalordelavariable,introducimosloquesellamaunacadenadeconversindeprintf().Estascadenassiempreempiezanpor%,siendo%ilacadenaparaimprimirunentero,comoesennuestrocasointresultado.Finalmente,printf()debesaberquvalorescribir,poresoledamosotroargumento(uotros),usando,comoseparador,quecontienenlasvariablescuyosvaloresqueremosmostrar.

    Enelrestodelprogramahemosvistocmodecirlealordenadorqueejecuteunasuma,unaresta,unamultiplicacinyunadivisinentera,conlosoperadores+,,*y/.Esdenotarqueelresultadodeunaoperacincomoestasentrenmerosenterossersiempreotroentero,comosepuedeobservarenladivisin,enlaquenoobtenemosunbonitodecimal,sinounresultadoentero.Adems,hemosvistoqueelresultadodeesasoperaciones,quellamamosexpresiones,puedeserasignadoaunavariable:

    resultado=7;

    Esaasignacinsehacemedianteeloperadordeasignacin:=.Conl,yaconocemoscincooperadores.

    Pero,como=tambinesunoperador,cmosabeelordenadorquoperadordebeejecutarprimero?Ysiesunoperador,porqunodaunresultado?Nocreaunaexpresin?

    Operadores Precedencia

    */ Izq.aDer.

    + Izq.aDer.

    https://es.wikipedia.org/wiki/Variable_(programaci%C3%B3n)
  • 15/7/2015 ProgramacinenC/TextocompletoWikilibros

    https://es.wikibooks.org/w/index.php?title=Programaci%C3%B3n_en_C/Texto_completo&printable=yes 19/34

    = Der.aIzq.

    Empezandoporlasltimaspreguntas,eloperadordeasignacinscreaunaexpresin,comolosoperadoresdesuma,resta,multiplicacinydivisin,yesaexpresintieneunresultado,queeselvalorqueobtieneelladoizquierdoalrealizarlaoperacin.Encuantoasaberqusedebeejecutarprimero,elordenadortieneunalistadeprecedencia,segnlacualsiempreejecutaprimerolasmultiplicacionesydivisiones,deizquierdaaderecha,acontinuacinlassumasyrestas,deizquierdaaderecha,yacontinuacinlasasignaciones,dederechaaizquierda.Paramsdetallesacercadelaprecedenciadelosoperadoresverelanexodelosoperadores.

    Encuantoaloscaracteresdepuntoycoma,notamosaququeunaexpresintambinpuedeserunasentenciaporsmisma,sinnecesidaddequehayaningunafuncin.Dehecho,unasentenciapuedenotenersiquieraunaexpresin.Lalnea:;esunasentenciaperfectamentevlida,lasentenciavaca,queseratilenpuntosdondeellenguajerequieraunasentenciaperonoseanecesariaparanuestroprograma.

    InstruccionesdecontrolComoyasehamencionado,Cesunejemplodeprogramacinestructurada.Enestetipodeprogramacin,esnecesariocontarconciertasestructurasquepermitancontrolarelflujodelprograma,esdecir,tomardecisionesyrepetiracciones.

    Laestructuracondicionalif...else

    Enlagranmayoradelosprogramassernecesariotomardecisionessobrequaccionesrealizar.Esasdecisionespuedendependerdelosdatosqueintroduzcaelusuario,desisehaproducidoalgnerrorodecualquierotracosa.

    Laestructuracondicionalif...elseeslaquenospermitetomaresetipodedecisiones.Traducidaliteralmentedelingls,selapodrallamarlaestructura"si...sino",esdecir,"sisecumplelacondicin,hazesto,ysino,hazestootro".

    Unejemplosencilloseraelsiguiente(nosetratadeunprogramacompleto,sinotanslounaporcindecdigo):

    if(edad

  • 15/7/2015 ProgramacinenC/TextocompletoWikilibros

    https://es.wikibooks.org/w/index.php?title=Programaci%C3%B3n_en_C/Texto_completo&printable=yes 20/34

    Elbloquedelelseesopcional.Sinoseloencuentra,sloserealizarlaaccincorrespondientealbloqueif.

    Acontinuacin,unejemploconunafuncin,quedevuelveelmayordedosnmeros:

    intmayor(inta,intb){ if(b>a){ returnb; }//Noposeeespecificacindelaparte"else",yaquenoesnecesaria.returna;//Finalizalafuncinretornandoelvalorde"a".}

    Operadoresdecomparacin

    Elsmbolo>vistoenelltimoejemploesunoperador,queenestecasocomparadosnmerosenterosydevuelveverdaderosielprimeroesmayor,falsoencasocontrario.

    AcontinuacinunlistadodelosposiblesoperadoresdecomparacinenCysusignificado.

    OperadoresdeComparacinOperador Significado

    < estrictamentemenorque

    > estrictamentemayorque

    = mayoroigualque

    == iguala

    != distintode

    TeniendoencuentaqueenCsetomacomofalsoelvalor0,ycomoverdaderocualquierotrovalor,unaprcticacomnesexpresarcondicionessinutilizarningnoperador:

    floatdivision(intdividendo,intdivisor){ if(divisor){ returndividendo/divisor; }else{ printf("Nosepuededividirporcero\n"); return0; }}

    Enestecaso,laexpresin(divisor)esequivalentea(divisor!=0).

    Operadoreslgicos

    Losoperadores&&("y"),||("o")y!("no")sonoperadoreslgicos.Permitenoperarconexpresioneslgicasparagenerarexpresionesmscomplejas.

    Porejemplo:determinarsiunaoesbisiestoono.Losaossonbisiestossisondivisiblespor4,peronosisondivisiblespor100,amenosquetambinseandivisiblespor400.

    if((!(a%4)&&(a%100))||!(a%400)){ printf("esunaobisiesto.\n"); }else{ printf("noesunaobisiesto.\n"); }

  • 15/7/2015 ProgramacinenC/TextocompletoWikilibros

    https://es.wikibooks.org/w/index.php?title=Programaci%C3%B3n_en_C/Texto_completo&printable=yes 21/34

    Enrealidad,teniendoencuentalaprioridaddelosoperadoresutilizados,podemossimplificarlaexpresinanteriordelsiguientemodo:

    if(!(a%4)&&(a%100)||!(a%400)){ printf("esunaobisiesto.\n"); }else{ printf("noesunaobisiesto.\n"); }

    Adems,comoacadaramadeliflesigueunanicainstruccin,podemosexpresarlaexpresinanteriordelsiguientemodo:

    if(!(a%4)&&(a%100)||!(a%400)) printf("esunaobisiesto.\n"); else printf("noesunaobisiesto.\n");

    Enestecaso,seutilizaeloperadormdulo(%),queobtieneelrestodeladivisinenteradeunnmeroporotro.Cuandounnmeroesdivisibleporotro,elrestodesudivisinenterasercero.Siendoqueceroesequivalenteafalso,ycualquiervalordistintodeceroesequivalenteaverdadero,podemosusareloperador%paraverificarsielnmeroesmltiplode4,de100ode400.

    Evaluacindecortocircuito

    LaevaluacinencortocircuitoesunacaractersticadellenguajeCqueseutilizaparaoptimizarlaejecucindeprogramas.Consisteenqueelprogramapuedeverificarsiunaexpresinesverdaderaofalsaantesdehaberevaluadotodacondicin.

    Porejemplo,sisetieneunacondicincomolasiguiente:

    if((a>2)||(b2.Enelcasoenqueseaverdadero,nocontinuarconlasiguientecondicin,yaqueelresultadoserdecualquiermodoverdadero.

    Delamismaforma,silacondicinfuera:

    if((a>2)&&(b2,noseevaluarlasiguientecondicin,yaqueelresultadoserfalsodetodosmodos.

    Estacaractersticanotienedemasiadaimportanciaalcomenzaraprogramar,perofacilitarciertasoperacionesyoptimizacionesenprogramasavanzados.

    Laestructuracondicionalabiertaycerradaswitch...case

    Laestructuracondicionalswitch...caseseutilizacuandoqueremosevitarnoslasllamadasescalerasdedecisiones.Laestructuraifnospuedeproporcionar,nicamente,dosresultados,unoparaverdaderoyotroparafalso.Unaestructuraswitch...case,porsuparte,nospermiteelegirentremuchasopciones.Ejemplo:

    https://es.wikipedia.org/wiki/Resto
  • 15/7/2015 ProgramacinenC/TextocompletoWikilibros

    https://es.wikibooks.org/w/index.php?title=Programaci%C3%B3n_en_C/Texto_completo&printable=yes 22/34

    #include#include

    intmain(void){ intdia;

    printf("quenmerodedadelasemanaes?"); scanf("%i",&dia);

    switch(dia){ case1: printf("Lun,Lunes"); break; case2: printf("Mar,Martes"); break; case3: printf("Mier,Miercoles"); break; case4: printf("Jue,Jueves"); break; case5: printf("Vie,Viernes"); break; case6: printf("Sab,Sabado"); break; case7: printf("Dom,Domingo"); break; default: printf("Noexiste");}return0;}

    Laestructuraanterior,derealizarseconsentenciasif,necesitaracuatrodeellas,resultandounenormebloquemuydifcildeleer.Enlamayoradeloscasos,adems,lasentenciaswitchproporcionaunagananciaenvelocidaddelcdigo,puespermitealcompiladortrabajarenbaseaquesetratadeunadecisinmltipleparaunanicavariable,cosaqueconsentenciasifelcompiladornotieneporqudetectar.

    Comovemos,paracadavalordelavariableseejecutaunbloquedesentenciasdistinto,enelquenonecesitamosllaves.Hayuncasoespecial,default,queseejecutasiningnotrocorresponde,yquenoesnecesarioponer.Es,entodo,equivalentealbloqueelsedeunasentenciaif.

    Lassentenciasbreaksonmuyimportantes,yaqueelcomportamientonormaldeunbloqueswitchesejecutarlotododesdelaetiquetacasequecorrespondahastaelfinal.Porello,sinoqueremosquesenosejecutemsdeunbloque,pondremossentenciasbreakalfinaldecadabloqueexceptoelltimo.

    Esdecir,lasetiquetascasesonpuntosdeentradadelaejecucin,ynoimplicanquealacabarseelbloquecaselaejecucinsaltealfinaldelbloqueswitch.Lasetiquetascasesiguientesalaquehemosutilizadoparaentrarson,sencillamente,ignoradas.

    Alaausenciadesentenciasbreakselellama,enocasiones,"dejarcaerlacascadaswitch".

    Elbuclewhile

    Elbuclewhilesirveparaejecutarcdigoreiteradasveces.

    while(/*condicion*/){ /*Cdigo*/}

    Lacondicindebedeserunaexpresinlgica,similaraladelasentenciaif.Primeroseevalalacondicin.Sielresultadoesverdadero,seejecutaelbloquedecdigo.Luegosevuelveaevaluarlacondicin,yencasodedarverdaderosevuelveaejecutarelbloque.Elbuclesecortacuandolacondicindafalso.

  • 15/7/2015 ProgramacinenC/TextocompletoWikilibros

    https://es.wikibooks.org/w/index.php?title=Programaci%C3%B3n_en_C/Texto_completo&printable=yes 23/34

    Ejemplo:imprimirlosnmerosde0a99:

    inti=0;while(i

  • 15/7/2015 ProgramacinenC/TextocompletoWikilibros

    https://es.wikibooks.org/w/index.php?title=Programaci%C3%B3n_en_C/Texto_completo&printable=yes 24/34

    Laverdadesqueesteejemplopuederesultarunpocoabsurdo,peroesbastanteintuitivo.Elcdigodelbucleasignaunvaloraleatorioalavariabledefinidaanteriormente,ymientrasesavariablenotengaelvalor25,elbuclesigueejecutndose.

    Lasentenciagoto

    Lasentenciagotosirveparaindicaralprogramaquecontinueejecutndosedesdelalneadecdigoindicada.Susintaxisesmsomenosas:

    /*Cdigo*/ETIQUETA:/*Cdigo*/gotoETIQUETA;/*Cdigo*/

    As,cuandoseejecutelasentenciagoto,elprograma"saltar"ycontinuarsuejecucinapartirdelaetiquetamarcada.

    Comosepuedeobservarsepuedeusarparacrearunbucle,oparairaunapartedelcdigouotrasisecombinaconunasentenciaif...else.Peroporlogeneralpuedeobtenerseelmismoefectoutilizandolosbuclesanteriormentevistos.

    Poreso,lasentenciagotoespocoaceptadaporlacomunidaddeprogramadores,puespuedeprovocarquesehaganprogramasunpoco"sucios"yconfusos.Sloenocasionesmuyexcepcionalesserrecomendadoelusodelgotoalcreariteracionesmuycomplejas.Sinembargo,conelpasardelosaosestecomandoyahaquedadoprcticamentedescartadodellenguajedelosprogramadores.

    UsodeFuncionesFunciones

    ComovimosanteriormenteCtienecomobloquebsicolafuncinmain(),tambinhemosvistolasentenciaprintf()queesotrafuncin,ydeigualformahaymuchasmsfuncionespredefinidas,peronosotrosmismostambinpodemosdefinirnuestraspropiasfunciones.Dehecho,esfundamentalhacerlo.

    Podemosdefinirunafuncincualquieradelamismamaneraenquedefinimoslafuncinmain().Bastaconponersutipo,sunombre,susargumentosentreparntesisyluego,entrellaves,sucdigo:

    /*Inclusindearchivos*/#include

    voidholamundo(void)/*Funcindondeseejecutalalgicadelprograma*/{ printf("HolaMundo\n");/*imprimelacadena*/ return;/*saledelafuncin*/}intmain(void)/*Funcinprincipaldelprograma*/{ holamundo();/*llamadaalafuncinholamundo*/ return0;/*saledelprogramaconcdigo0(correcto)*/}

    Estecdigoesentodoequivalenteal"HolaMundo"original,sloquenosmuestracmoescribirycmoutilizarunafuncin.Yademsnosmuestraunprincipiodebuenaprogramacin:meterlassentenciasque"haceneltrabajo"enotrasfuncionesespecficasparasacarlasdemain(),dejandoenstatanslounguingeneraldeloquehaceelprograma,nolasrdenesespecficas.Deestamanerasefacilitalacomprensindelprograma,yportantoelfuturotrabajodemodificarlo.

    https://es.wikibooks.org/wiki/Programaci%C3%B3n_en_C/Primer_programa_en_C#Diseccionando_el_.22Hola_Mundo.22
  • 15/7/2015 ProgramacinenC/TextocompletoWikilibros

    https://es.wikibooks.org/w/index.php?title=Programaci%C3%B3n_en_C/Texto_completo&printable=yes 25/34

    Lasentenciareturn

    Lasentenciareturnpuedeutilizarsedentrodeunafuncinparaterminarsuejecucin.

    Enelejemploanterior,lafuncinholamundofuedeclaradaconvalorderetornodetipovoid(esdecir,valorderetornonulo).Enesecaso,lasentenciareturnnollevaningnparmetroadicional,yaquelafuncinnodebedevolverningnvaloralafuncinquelallama.

    Encambio,lafuncinmaintieneunvalorderetornodetipoint,porloquereturndebeirseguidodeunvalorentero(0enelejemplo).Elvalor0seutilizaparaindicarqueelprogramahallegadoaunpuntoenelquetodosehadesarrolladocorrectamenteyseutilizacualquierotrovalorparaindicarquehahabidoalgntipodeerror.

    Lainstruccinreturnnoesunafuncin,setratadeunasentenciaqueloquehaceesretornarcomovalordelafuncinelvalorqueseleproporcionacomoargumento.

    Argumentos

    Lasfuncionestambinpuedenrecibirargumentosoparmetros,paramodificarsucomportamiento.Porejemplo,ladefinicindeunafuncinparasumardosnmerosseradelasiguientemanera:

    Declaracinydefinicin

    Enelejemploanteriorpodemosnotarquelafuncinsumarfiguraenelcdigoantesquemain.Qupasarasilasescribiramosendistintoorden?

    #include

    intmain(void){ intsuma=sumar(5,3);/*ERROR,sumarnohasidodeclaradaan*/ printf("Lasumaes:%d",suma); return0;}

    intsumar(intnumero1,intnumero2){ returnnumero1+numero2;}

    Enestecasoelprogramaeserrneoynocompila,yaqueenlalneadondesellamaalafuncinsumar,elcompiladorannoconoceningunafuncinconesenombre,yculessonsusargumentosyvalorderetorno.

    Unaposiblesolucinesdeclararelprototipodelafuncinalprincipio,parainformaralcompiladorqueexiste,yluegodefinirelcuerpodelamismaencualquierlugardelprograma:

    #include

    /*Declaracin*/intsumar(intnumero1,intnumero2);

    intmain(void){ intsuma=sumar(5,3); printf("Lasumaes:%d",suma); return0;}

    /*Definicin*/intsumar(intnumero1,intnumero2){ returnnumero1+numero2;}

    PasodeParmetros

  • 15/7/2015 ProgramacinenC/TextocompletoWikilibros

    https://es.wikibooks.org/w/index.php?title=Programaci%C3%B3n_en_C/Texto_completo&printable=yes 26/34

    Lasfuncionespuedenrecibirdatoscomolohemosobservado,peroexistendosformasdeenviarlosdatoshaciaunafuncinporvaloryporreferencia,lascualesmodificanendiferenteformaelcomportamientodeelprograma.

    PorValor

    Elpasoporvalorenvaunacopiadelosparmetrosalafuncinporlotantoloscambiosquesehaganenellanosontomadosencuentadentrodelafuncinmain().Ejemplo:

    /**por_valor.c**JulioCsarBrizuela2009**paraelwikilibro"ProgramacinenC"*bajolicenciaFDL,adaptadodelDominioPblico*/

    #include

    voidsumar_valor(intnumero);/*prototipodelafuncin*/

    intmain(void){ intnumero=57;/*definimosnumeroconvalorde57*/

    sumar_valor(numero);/*enviamosnumeroalafuncin*/

    printf("Valordenumerodentrodemain()es:%d\n",numero); /*podemosnotarqueelvalordenumerosemodifica *slodentrodelafuncinsumar_valorperoenlaprincipal *nmerosiguevaliendo57 */

    return0;}

    voidsumar_valor(intnumero){ numero++;/*lesumamos1alnumero*/

    /*elvalordenmerorecibidoseaumentaen1 *ysemodificadentrodelafuncinsumar_valor() */ printf("Valordenumerodentrosumar_valor()es:%d\n",numero);

    return;}

    PorReferencia

    Elpasoporreferenciasehaceutilizandoapuntadores.Seenvaladireccindememoriadelavariable,porlotantoloscambiosquehagalafuncinsiafectanelvalordelavariable.Ejemplo:

    /**por_referencia.c**JulioCsarBrizuela2009**paraelwikilibro"ProgramacinenC"*bajolicenciaFDL,adaptadodelDominioPblico*/

    #include

    voidsumar_referencia(int*numero);/*prototipodelafuncin*/

    intmain(void){ intnumero=57;/*definimosnumeroconvalorde57*/

  • 15/7/2015 ProgramacinenC/TextocompletoWikilibros

    https://es.wikibooks.org/w/index.php?title=Programaci%C3%B3n_en_C/Texto_completo&printable=yes 27/34

    sumar_referencia(&numero);/*enviamosnumeroalafuncin*/

    printf("\nValordenumerodentrodemain()es:%d",numero); /*podemosnotarqueelvalordenumerosemodifica *yqueahoradentrodemain()tambinsehamodificado *aunquelafuncinnohayaretornadoningnvalor. */

    return0;}

    voidsumar_referencia(int*numero){ *numero+=1;/*lesumamos1alnumero*/

    /*elvalordenumerorecibidoseaumentaen1 *ysemodificadentrodelafuncin */ printf("\nValordenumerodentrosumar_referencia()es:%d",*numero);

    return;}

    VariablesLocalesyGlobales

    Ademsdepasarvaloresaunafuncin,tambinsepuedendeclarartiposdedatosdentrodelasfunciones,estostiposdedatosdeclaradosdentrodeunafuncinsolosonaccesiblesdentrodeestamismafuncinyselesconocencomovariableslocales,aspuespodemosdefinirlosmismosnombresdevariablesendiferentesfunciones,yaqueestasvariablessolosonaccesiblesdentrodeesasfunciones.Ejemplo:

    /**locales.c**JulioCsarBrizuela2009**paraelwikilibro"ProgramacinenC"*bajolicenciaFDL,adaptadodelDominioPblico*/

    #include

    voidfuncion1(){ intdato=53;/*definimosdatoen53*/ charnum1='a';/*num1valea*/

    /*imprimimos*/ printf("Funcion1,dato=%d,num1=%c\n",dato,num1);

    return;}

    voidfuncion2(){ intdato=25;/*definimosdatoen25*/ charnum2='z';/*num2valez*/

    /*imprimimos*/ printf("Funcion2,dato=%d,num2=%c\n",dato,num2);

    return;}

    intmain(void){ funcion1();/*llamamosafuncion1()*/

    funcion2();/*llamamosafuncion2()*/

    return0;}

  • 15/7/2015 ProgramacinenC/TextocompletoWikilibros

    https://es.wikibooks.org/w/index.php?title=Programaci%C3%B3n_en_C/Texto_completo&printable=yes 28/34

    Enestecasolavariabledato,estadefinidadentrodecadaunadelasfuncionesysontotalmentedistintaunadeotraynosepuedeutilizarfueradeesta,aspuesnum2nopuedeserutilizadaporlafuncion1()ynum1tampocopuedeserutilizadaporfuncion2().

    Existenpuesvariablesquesedefinenfueradelafuncinprincipalmain()yfueradecualquierotrafuncincreadapornosotros,estasvariablesselesconoceconelnombredeVariablesGlobalesyaquesepuedenutilizardentrodemain()ydentrodecualquierfuncincreadapornosotros.Ejemplo:

    /**global.c**JulioCsarBrizuela2009**paraelwikilibro"ProgramacinenC"*bajolicenciaFDL,adaptadodelDominioPblico*/

    #include

    intvariable_global=99;/*inicializamoslavariableglobal*/

    voidfuncion();

    intmain(void){ /*imprimimoselvalor*/ printf("main(),accesoavariable_global%d\n",variable_global);

    /*llamamosalafuncin*/ funcion();

    return0;}

    voidfuncion(){ /*imprimimoselvalor*/ printf("funcion(),accesoavariable_global%d\n",variable_global);

    return;}

    FuncionesRecursivas

    Larecursividad(recursin)eslapropiedadporlacualunafuncinsellamaasmismadirectaoindirectamente.Larecursinindirectaimplicautilizarmsdeunafuncin.

    Sepuedeconsiderarlarecursividadcomounaalternativaalaiteracin.Larecursinpermiteespecificarsolucionesnaturales,sencillas,queseran,encasocontrario,difcilesderesolver.Todafuncinrecursivadebecontemplaruncasobaseocondicindesalida,paraterminar,olarecursividadnopodrterminarnunca.

    Unafuncinrecursivapodradefinirseas:

    funcion_recursiva(/*parmetrosrecibidosporlafuncin*/){ /*Cdigo*/ funcion_recursiva();/*llamadaalafuncinmisma*/ /*Cdigo*/}

    Unodelosejemplosmsrepresentativosenlarecursividadeselfactorialdeunnumero(n!):

    ladefinicinderecursividaddelfactoriales:

  • 15/7/2015 ProgramacinenC/TextocompletoWikilibros

    https://es.wikibooks.org/w/index.php?title=Programaci%C3%B3n_en_C/Texto_completo&printable=yes 29/34

    Enestadefinicin,n=0,esnuestrocasobase,queledafinalarecursividad.

    Entoncesnuestroprogramaquecalculaelfactoriales:

    /**factorial.c**JulioCsarBrizuela2009**paraelwikilibro"ProgramacinenC"*bajolicenciaFDL,adaptadodelDominioPblico*/

    #include

    longfactorial(intn){ if(n==0)/*casobase*/ return1;/*como0!=1,seretorna1*/ else returnn*factorial(n1);/*llamadaaestamismafuncin*/}

    intmain(void){ /*enestecasosellamaalafuncinyseimprimedirectamente*/ printf("%ld",factorial(5));

    return0;}

    Tambinexistenotrostiposdefuncionesrecursivascomoloeselproductodedosnmeros.Elproductodea b,dondeaybsonnmerosenterospositivosseria:

    Soluciniterativa:

    Solucinrecursiva:

    Aspues es:

    Podemosverquelamultiplicacindedosnmerosa,bsepuedetransformarenotroproblemamspequeomultiplicarapor(b1),elcasobaseseproducecuandob=0yelproductoes0.Ejemplo:

    /**producto.c**JulioCsarBrizuela2009**paraelwikilibro"ProgramacinenC"*bajolicenciaFDL,adaptadodelDominioPblico*/

    #include

  • 15/7/2015 ProgramacinenC/TextocompletoWikilibros

    https://es.wikibooks.org/w/index.php?title=Programaci%C3%B3n_en_C/Texto_completo&printable=yes 30/34

    intproducto(inta,intb){ if(b==0)/*casobase*/ return0;/*comob=0,seretorna0*/ else returna+producto(a,b1);/*llamadaaestamismafuncin*/}

    intmain(void){ /*enestecasosellamaalafuncinyseimprimedirectamente*/ printf("%i",producto(7,3));

    return0;}

    Recursividadindirectaorecursinmutua

    Estaseproducecuandounafuncinllamaaotra,queestaasuvezterminarllamandodenuevoalaprimerafuncin.Elsiguienteprogramavisualizaelalfabetoutilizandorecursinindirectaomutua:

    /**elalfabeto.c**JulioCsarBrizuela2009**paraelwikilibro"ProgramacinenC"*bajolicenciaFDL,adaptadodelDominioPblico*/

    #include

    voidfuncionA(charc);/*sedeclaraelprototipodelafuncinparaqueelllamado*/voidfuncionB(charc);/*alamismaenlafuncinnoseaimplcita*/

    intmain(void){

    funcionA('z');/*llamadoafuncionA*/

    return0;}

    voidfuncionA(charc){ if(c>'a')/*casobasemientrascnoseamenorqueA*/ funcionB(c);/*llamadoalafuncionB*/

    printf("%c",c);/*imprimimoselvalordec*/*lavariableesunparametronoutilizadoparaesteproceso}

    voidfuncionB(charc){ funcionA(c);/*llamadoalafuncionAdecrementandoelvalorde'z'*/}

    RecursinversusIteracin

    Tantolaiteracincomolarecursinsebasanenestructuradecontrol:laiteracinutilizaunaestructurarepetitivaylarecursinunaestructuradeseleccin.Laiteracinutilizaexplcitamenteunaestructurarepetitivamientrasquelarecursinconsiguelarepeticinmediantellamadasrepetitivasafunciones.

    Laiteracinterminasilacondicindelbuclenosecumple,mientrasquelarecursinterminacuandosereconoceuncasobase.

    Larecursinpuedepresentardesventajasantelaiteracinyaqueseinvocarepetidasvecesalmecanismodellamadadefuncionesysenecesitauntiempomayorpararealizarcadallamada.

    Laraznporlacualsepuedeelegiruoptarporusarrecursividadesqueexistenmuchosproblemascomplejosqueposeennaturalezarecursivay,enconsecuencia,sonmasfcilesdeimplementar.

  • 15/7/2015 ProgramacinenC/TextocompletoWikilibros

    https://es.wikibooks.org/w/index.php?title=Programaci%C3%B3n_en_C/Texto_completo&printable=yes 31/34

    EjemploIterativo

    /**iterativo.c**JulioCsarBrizuela2009**paraelwikilibro"ProgramacinenC"*bajolicenciaFDL,adaptadodelDominioPblico*/

    #include

    longfactorial(intnumero);

    intmain(intargc,char**argv){ intcontador=0;

    /*calculaelfactorialde0a10*/ for(contador=0;contador=1;i) resultado*=i;

    returnresultado;}

    EjemploRecursivo

    /**recursivo.c**JulioCsarBrizuela2009**paraelwikilibro"ProgramacinenC"*bajolicenciaFDL,adaptadodelDominioPblico*/

    #include

    longfactorial(intnumero);

    intmain(intargc,char**argv){ intcontador=0;

    /*calculaelfactorialde0a10*/ for(contador=0;contador

  • 15/7/2015 ProgramacinenC/TextocompletoWikilibros

    https://es.wikibooks.org/w/index.php?title=Programaci%C3%B3n_en_C/Texto_completo&printable=yes 32/34

    VectoresLosvectoressonunaformadealmacenardatosquepermitencontenerunaseriedevaloresdelmismotipo,cadaunodelosvalorescontenidostieneunaposicinasociadaqueseusarparaaccederlos.Estposicinondicesersiempreunnmeroenteropositivo.

    EnClacantidaddeelementosquepodrcontenerunvectoresfijo,yenprincipiosedefinecuandosedeclaraelvector.Losvectoressepuedendeclarardelasiguienteforma:

    tipo_elementonombre[largo];

    Estodeclaralavariablenombrecomounvectordetipo_elementosquepodrcontenerlargocantidaddeelementos,ycadaunodeestoselementopodrcontenerunvalordetipotipo_elemento.

    Porejemplo:

    doublevalores[128];

    Enesteejemplodeclaramosunvectorde128elementosdeltipodouble,losndicesdeloselementosiranentre0(paraelprimerelementoy127paraelltimo).

    Delamismaformaqueconlasotrasdeclaracionesdevariablesquehemosvistoselepuedeasignarunvaloriniciaraloselementos.

    Otambinsepuedendeclarar:

    tipo_elementonombre[largo]={valor_0,valor_1,valor_2};

    Encasoestamosasignadolevaloresalosprimeros3elementosdelvectornombre.Notarquelargodebesermayoroigualalacantidaddevaloresqueleestamosasignandoalvector,enelcasodeserlamismacantidadnoaportainformacin,porloqueellenguajenospermiteescribir:

    tipo_elementonombre[]={valor_0,valor_1,valor_2};

    Quedeclararnombrecomoelvectordelargo3.

    Paraaccederaunelementoaccederemosatravsdesuposicin.Esdecir:

    tipo_elementoelemento; ... elemento=nombre[2];

    Asumiendoquetenemoselvectoranteriordefinidoestaramosguardandovalor_2enelemento.

    Veamosalgunosejemplos:

    /**Ejemplo:Elproductoescalardedosvectores*/#include

    doubleproducto_escalar(doublev1[],doublev2[],intd);

    intmain(){ constintlargo=3; doublevector_1[]={5,1,0};

  • 15/7/2015 ProgramacinenC/TextocompletoWikilibros

    https://es.wikibooks.org/w/index.php?title=Programaci%C3%B3n_en_C/Texto_completo&printable=yes 33/34

    doublevector_2[]={1,5,3};

    doubleresultado=producto_escalar(vector_1,vector_2,largo);

    //imprimeelresultado printf("(%f,%f,%f).(%f,%f,%f)=%f\n", vector_1[0],vector_1[1],vector_1[2], vector_2[0],vector_2[1],vector_2[2], resultado); return0;}

    /*productoescalarentredosvectores*/doubleproducto_escalar(doublev1[],doublev2[],intd){ doubleresultado=0; inti; for(i=0;i

  • 15/7/2015 ProgramacinenC/TextocompletoWikilibros

    https://es.wikibooks.org/w/index.php?title=Programaci%C3%B3n_en_C/Texto_completo&printable=yes 34/34

    Delamismaformaquevenimosusandovectoresdetiposbsicos,podemostenervectoresdevectores,estossedeclarandelasiguienteforma:

    intmatriz[3][7];inttabla[3][4]={{1,2,3,4}, {5,6,7,8},/*losespaciosysaltosdelneasnosontomadosencuenta*/ {9,10,11,12}};doublev[2][2][2];...printf("tabla[0][1]:%i\n",tabla[0][3]);//Imprime4printf("tabla[2][0]:%i\n",tabla[2][0]);//Imprime9...

    Enesteejemplotablaesunvectordelongitud3,cuyoselementossonvectoresdelongitud4deelementosdetipoint.

    Enresumen,suponiendoquev[n]esunvectordecualquiertipodedatoconncantidaddeposiciones,alvectorvseleaplicanlassiguientesreglas:

    1. Laprimeraposicinsiempreserv[0]2. Laltimaposicinesv[n1]3. EnversionespreviasaC99nesunaconstantedefinidaantesdeladeclaracindev[n]

    GNUFreeDocumentationLicense

    Obtenidodehttps://es.wikibooks.org/w/index.php?title=Programacin_en_C/Texto_completo&oldid=171299

    Categoras: ProgramacinenC Programacin

    Estapginafuemodificadaporltimavezel31may2011alas04:07.EltextoestdisponiblebajolaLicenciaCreativeCommonsAtribucinCompartirIgual3.0puedenaplicarsetrminosadicionales.VaseTrminosdeusoparamsdetalles.

    https://es.wikibooks.org/wiki/Categor%C3%ADa:Programaci%C3%B3n_en_Chttps://es.wikibooks.org/w/index.php?title=Programaci%C3%B3n_en_C/Texto_completo&oldid=171299https://es.wikibooks.org/wiki/Especial:Categor%C3%ADashttps://es.wikibooks.org/wiki/Categor%C3%ADa:Programaci%C3%B3nhttps://wikimediafoundation.org/wiki/Terms_of_Use/eshttps://creativecommons.org/licenses/by-sa/3.0/deed.es