Introduccion Al Lenguaje C
Introduccion Al Lenguaje C
Introduccion Al Lenguaje C
Programacin 1
2. INTRODUCCINALLENGUAJE
2.1. HISTORIAYDESARROLLODELLENGUAJE
Setratadeunlenguajeestructurado,esdecir,tienelacapacidaddeseccionaryesconder
del resto del programa toda la informacin y las instrucciones necesarias para llevar a
cabounadeterminadatarea.Estopermitemodularizarlasdistintaspartesdelprogramay
reutilizarelcdigo.
CaractersticasdeC.
EllenguajeCesunlenguajedeusogeneral,conunasintaxiscortayunjuegode
operadorespotente
C como ya se coment es de nivel medio y explota por tanto los recursos de
harwareascomoelmanejodelasdireccionesylosbits
No posee operaciones de entradasalida, ni mtodos de archivos y tampoco
manejalosobjetoscompuestoscomolascadenasdecaracteres.Estasoperaciones
sehacenpormediodefuncionescontenidasenlibrerasexternasallenguaje
Cesunlenguajeestructurado.LaestructurabsicadeunprogramaenCsehace
alrededor del concepto de funcin la cual puede tener sus propias variables
locales,accederavariablesglobalesdelprogramaydevolvervaloresoninguno.
C es un lenguaje que permite una compilacin separada de los programas y
enlazarlos entre si junto con las bibliotecas externas para formar el programa
ejecutablecompleto.
15
Programacin 1
CestadefinidobajoelestndarANSI.Sucreacinyusosiguelasnormasdeeste
estndar y por tanto, todo lo expresado en l ser utilizable con cualquier
compiladorqueseadopteycumplaconelestndar.
2.2. IDENTIFICADORESESTANDAR
Losidentificadoressonnombresqueselesdaavarioselementosdeunprograma,tales
comolasvariables,constantes,funciones,tiposyetiquetas.Unidentificadorseformade
letras y dgitos en secuencia, las letras pueden ser maysculas o minsculas (una letra
maysculaesdiferentealamismaletraperoenminsculas)ylosdgitosvandel0al9.
Ademssepuedeutilizarelcarcterespecialdesubrayadooguinbajo(_).Comoregla,
elprimercarcterdeunidentificadordebeserunaletraoelcarcterdesubrayado.Por
ejemplo:
Suma
suma
Calculo_num_primos
Abc123
ab12C3
_ordenar
i
Hayciertaspalabrasreservadasdellenguajedenominadaspalabrasclave,quetienenenC
un significado estndar y por tanto no pueden ser utilizadas como identificadores
definidosporelprogramador.
2.3. PALABRASRESERVADAS
16
Programacin 1
AlgunasversionesdecompiladoresparaCpuedentenerpalabrasreservadasadicionales.
EsimportanterecalcarqueellenguajeCqueseestudiasebasaenelestndardelANSI
por lo tanto deberemos utilizar un compilador de C que est basado en ste estndar
independientementedelsistemaoperativoquesetrabaje.
2.4. ESTRUCTURADEUNPROGRAMA
TodoprogramaescritoenlenguajeCconstadeunaomsfuncionesdondeunadeellas
debedellamarsemain()yrepresentaelprogramaprincipaldelaaplicacin,problemao
algoritmo que se pretende resolver. El programa comienza su ejecucin en la funcin
main() desde la cual es posible hacer el llamado a otras funciones escritas fuera del
programaprincipal.
Como todos los lenguajes, siempre es bueno comenzar con un ejemplo sencillo de un
programa, en este caso de C, para entender su estructura. El siguiente programa es el
primer programa tpico, estndar que se utiliza para ejemplificar la estructura de un
programaenC:
#include<stdio.h>/*inclusindeunarchivoolibrera*/
voidmain(void)
{/*iniciaElcuerpodelprog.Principal*/
printf(HolaMundo!\n);/*imprimeenpantalla*/
return;/*regresaumvaloralsistema*/
}
HolaMundo.c
Explicacin:
#include <stdio.h>: #include es una directiva u orden para el compilador que le
dice que tiene que leer un archivo de cabecera o header, en este caso con el nombre
stdio.h,queesdondeestadefinidalafuncin printf()queseutilizaenelejemplo.Este
headercontiene todas las funciones de entrada y salida de C. Cuando un compilador se
encuentraconestadirectiva,losustituyeporelarchivoindicado.
Elcompiladortienevariasmanerasdebuscarunarchivodecabecera:
#include<stdio.h>/*Directoriodeinstalacin*/
#includestdio.h/*Directorioactivoenelmomento*/
#includec:\mi_header.h/*Directorioindicado*/
17
Programacin 1
{...}:Todafuncindebeiniciarconunallavequeabreyterminaconunallaveque
cierra.Loqueestadentrodelasllavesselellamaelcuerpodelafuncinypuedeincluirel
llamadoafunciones,declaracionesdevariables,constantes,clculosaritmticos,lgicos,
etc.
/*inclusindeunarchivoolibrera*/:Estoesuncomentarioquenose
ejecuta por el compilador. Sirve para describir el programa de forma que tenga ms
claridadalahoradeleerelcdigofuente.UNcomentariopuedeocuparmsdeunalnea:
/*inclusindeun
archivoolibrera*/
Uncomentarioentoncesempiezaconloscaracteres/*yterminacon*/.Cualquiercosa
queseescribaentreestoscaracteres,elcompiladorlointerpretarcomouncomentario.
return; :Es la instruccin que hace que las funciones regresen algn valor al sistema
cuyo tipo depende del tipo declarado en la funcin. En el caso del ejemplo, como la
funcin main() es una funcin sin tipo, es decir, no devuelve nada, entonces el uso del
returnsinregresarningnvalor,nossirvepararetornaralsistema.
18
Programacin 1
2.5. TIPOSDEDATOSESTANDAR(PRIMITIVOS)
ExistencincotiposdedatosatmicosenC:
charcarcter
intentero
floatrealdepuntoflotante
doublerealdedobleprecisin
voidsinvalor
Existen modificadores de tipos que se utilizan para alterar los tipos base (short, long,
unsigned,signed).Estosmodificadoresseaplicanalostiposbaseintychar,noobstante
longtambinsepuedeaplicaradouble.
LasiguientetablamuestratodoslostiposdedatosestandarenCylascombinacionesque
sepuedendarconlosmodificadoresdetipos:
A reserva de trabajar las cadenas ms adelante, definiremos una cadena como una
secuenciadecaracteresentrecomillasdobles.Silascomillastienenqueaparecercomo
partedeunacadena,elcarcterdelascomillasdebeirprecedidoporelcarcter\.
19
Programacin 1
2.6. DECLARACINDECONSTANTESYVARIABLES
2.6.1. VARIABLES
tiponombre_variable[,nombre_variable,...,nombre_variable];
dondetipodeterminaeltipodelavariable:int,char,etc.
nombre_variableindicaelnombredelavariableconlasreglasparadefiniridentificadores
Los corchetes [ ] indican que se puede definir en lnea ms de una variable del mismo
tiposeparadasporcomasyterminandoconunpuntoycoma.
Porejemplo:
inti,j,k;
floatlargo,ancho;
charc;
EliniciodeunprogramaenCsevedelasiguientemanera:
main()
{
declaracindevariables;
proposiciones;
return;
}
1. Pidenalcompiladorqueseparelacantidaddememorianecesariaparaalmacenar
losvaloresasociadosconlasvariables.
2. Debidoaqueseespecificanlostiposdedatos asociadosconlasvariables,stas
permitenalcompiladorinstruiralamquinaparaquedesempeecorrectamente
ciertasoperaciones.
20
Programacin 1
mbitodelasvariables
Segn el lugar donde se declaren las variables, tendrn un mbito. Dentro de las
funciones,esdecir,variableslocales,enladefinicindelosparmetrosdelasfuncioneso
parmetrosformalesyfueradetodaslasfuncionesllamadasvariablesglobales.
Variables Locales: Son aquellas que se declaran dentro de una funcin. Las variables
localesslopuedenserreferenciadas(utilizadas)porsentenciasoinstruccionesqueestn
dentro de la funcin que han sido declaradas. No son conocidas fuera de la funcin.
Pierden su valor cuando se sale y se entra en la funcin. Una variable local tambin es
aquella que est siendo referenciada slo por sentencias que estn dentro del bloque
dondeestndeclaradas.Unbloqueesaquelqueestencerradoentredosllaves.
voidfunc1(void)//lavariablexdeclaradaenfunc1()
{//noeslamismaqueladeclaradaenfunc2()
intx=10;
}
voidfunc2(void)//Lavariableydeclaradaenfunc2()
{//secreasoloalentrarenelfragmento
intx=20;//delprogramaydesaparecealsalirdel
{
inty;
y=2;
}
}
Floatmul(floatx,floaty)//Losparmetrosformalesde
{//lafunctionmul()sonxey
Return(x*y);
}
VariablesGlobales:Sonconocidasalolargodetodoelprograma,porlotantosepueden
usarencualquierpartedelcdigo.Mantienensusvaloresdurantetodalaejecucin.Las
variablesglobalessedeclaranporlogeneralalprincipiodelprograma,fueradetodaslas
funciones,incluidalafuncinmain().Inicialmentetomanelvalorceroonulosegneltipo.
intx;//lavariablexesglobal,puesest
//declaradafueradetodas
voidfun1()//lasfunciones
{
21
Programacin 1
y=x;//enlafunctionfun1()seaccedeala
x=10;//variableglobalx
}
voidfun2()//enlafunctionfun2(),xserefierea
{//lavariablelocal
intx;
x=3;
}
EspecificadoresdeAlmacenamiento:
Existencuatrotiposdeespecificadoresdealmacenamiento:extern,static,register.Estos
especificadoresindicanalcompiladorcmodebealmacenarlasvariables.Susintaxises:
especificadortiponombre_variable[,nombre_variable,...,nombre_variable];
extern:DadoqueenCesnormallacompilacinporseparadodemdulosquecomponen
unprogramacompleto,guardadoscadaunoensucorrespondientearchivo,puededarse
elcasodequesedebautilizarunavariableglobalqueseconoczcaenlosmdulosquenos
interesesinperdersuvalor.Lapalabraexternindicaalcompiladorquelasvariablesque
siguen ya han sido declaradas en alguna otra parte y por tanto, no se crea una nueva
variable.
intx,y;
charc;
...
fun1()
{
x=10;
}
Archivo1
externintx,y;
externcharc;//Lasvariablesx,y,cdeclaradaseneste
...//archivo2sonexactamentelasdeclaradasen
fun11()//elarchivo1
{
x=y;
}
Archivo2
static: Si se quiere mantener el valor de una variable local entre una llamada y otra sin
perder por ello su mbito, sta tendr que ser declarada como static. Cuando se aplica
static a una variable local, su valor se retiene entre llamadas de funciones y se crea un
22
Programacin 1
almacenamientopermanenteigualquelasvariablesglobales(aunquesiguedesconocida
fueradesumbito).Cuandoseaplicastaticaunavariableglobal,seindicaalcompilador
que cree una variable conocida nicamente en el archivo. Ninguna funcin de otros
archivospuedeteneraccesoaella.
serie(void)//Cadallamadaalafuncinserie1()produce
{//unNuevovalorn,basndoseenelnmero
staticintn;//anterior
n=n+23;
}
serie2(void)//enlasegundafuncinserie2(),elvalorde
{//nseinicializaa10,peronocadavezquese
staticint=10;//llamealafunctionserie2(),comoeselcaso
n=n+23;//delasvariableslocales
}
register:Envezdequeunavariableseamantenidadentrodeunaposicindememoriade
lacomputadora,seguardaenregistrosinternosdelmicroprocesador.Deestamanerael
acceso a ellas es ms rpido y directo. Se aplica nicamente para las variables locales y
nunca para las variables globales. Se suele usar para almacenar los contadores de los
ciclos(for,while,repeat).
2.6.2. CONSTANTES
Unaconstanteesunvalorfijoquenopuedesermodificadoporelprograma.Puedeserde
cualquiertipodedatosbsicos.Lasconstantesdecarctervanencerradasentrecomillas
simples, Las constantes enteras se especifican con nmeros sin parte decimal y las de
punto flotante con su parte entera separada por un punto de su parte decimal. Las
cadenasdecaracteresirnencerradasentrecomillasdobles.Porejemplo:
Flotantes
Enteros
Cadenas
Caracter
3.10
10
HolaMundo
a
0.987
1234
UnaconstanteenCsedefinedelasiguientemanera:
#defineidentificadorvalor
Donde#defineesladirectivadeCqueseutilizaparadefinirconstantes.
identificadoreselnombredelaconstantey
valoreselvalorasociadoalaconstante.
23
Programacin 1
Ejemplos:
#define
entero
10
#define
real
1.09982
#define
cad
Estoesunacadena
#define
car
a
2.7. EXPRESIONES,PROPOSICIONESYASIGNACIONES
tan(1.8)
a+b*3.0*9.3242
3.77+sen(3.14*98.7)
Elsignode=eseloperadorbsicodeasignacinenC.Cuandounaexpresinvaseguida
deunpuntoycomaentoncesstaseconvierteenunaproposicin.Lasproposicionesde
asignacintienenlasiguientesintaxis:
variable=expresin;
Porejemplo:
x=Tan(1.8);
r=a+b*3.0*9.3242;
3.77+sen(3.14*98.7);
OperadoresAritmticosBinarios:
24
Programacin 1
PrioridaddelosOperadoresAritmticos:
OperadoresRelacionales:
OperadoresLgicos:
25
Programacin 1
OperadoresdemanejodeBits
Losoperadoresparaestetipodeoperacionestienenqueserdetipoenterodeunoodos
bytesochar,nopuedenserreales.
OperadoresdeAsignacin:
26
Programacin 1
Tabladeprioridadesdelosoperadores:
Otrosoperadores:
El operador de indireccin (*) accede a un valor indirectamente a travs de un
apuntador.Elresultadoeselvalordireccionadoporeloperando.
Eloperadordedireccin(&)indicaladireccindesuoperando.Esteoperadornose
puedeaplicarauncampodebitspertenecienteaunaestructuraoaunidentificador
declaradoconelespecificadorregister.
2.8. ENTRADAYSALIDABSICA
LasoperacionesdeentradaydesalidanoformanpartedelconjuntodesentenciasdeC,
sinoquepertenecenalconjuntodefuncionesdelalibreraestndardeentradaydesalida
deC,esdecir,estndefinidasenelarchivostdio.h.Cuandoseempleaalgunafuncinde
entrada y salida, se debe incluir ste archivo al comienzo del programa mediante la
directiva: #include <stdio.h> y el compilador inserta el cdigo fuente al comienzo del
archivodenuestroprograma.
Lassiguientesfuncionessonalgunasdelasmsutilizadasparalaentradaysalidadedatos
enC:printf,scanf,getch,getchar,puts,gets.Todasycadaunadeellastieneunasintaxis
quelasidentifica.
2.8.1.Salidadedatosconformato(usodeprintf)
Para visualizar los datos por la pantalla se dispone de la funcin printf() que permite
formatearlasalida.Estafuncinpuedevisualizarunacombinacindevaloresnumricos,
caracteresycadenasdecaracteres.Susintaxiseslasiguiente:
printf(cadena_de_control,arg1,arg2,...,argn);
27
Programacin 1
La cadena de control especifica cmo va a ser la salida. Es una cadena delimitada por
comillas, por caracteres ordinarios, secuencias de escape y especificaciones de formato
bajoelcualserequierelasalidadelainformacinhaciapantalla.
Lalistadeargumentosarg1,arg2,...argnrepresentaelvalorovaloresaescribirenla
pantalla.Unaespecificacindeformatoestcompuestapor:
%[flags][width][.prec][F|N|h|l|L]tipo_de_dato
Cadaunodelosdatosquesedeseemandaraimprimirdebeirantecedidoporelcarcter
%ydespusdebedevenir(eneseorden)losiguiente(noesnecesarioponertodo,loque
seencuentraentrecorchetesesopcional):
COMPONENTE ESPECIFICACIN
flags
Justificacin,etc.
width
Nmerodedgitossignificativosparteentera
.prec
Nmerodedgitossignificativospartereal
F|N|h|l|L
ModificadoresdeSalida
N=Nearapuntador
F=farApuntador
h=enterocorto
l=enterolargo
L=reallargo
Tipo_de_dato c=imprimeuncarcter
d=imprimeunentero
e=notacincientfica
s=imprimeunacadena
f=decimalenpuntoflotante
Ejemplo:
printf(holaPueblasonlas%d\n,tiempo);
Otroejemplo:
n1=5;
n2=6.7;
printf(Eldato1es:%dyeldato2es%f\n,n1,n2);
28
Programacin 1
SecuenciasdeescapeenlenguajeC
2.8.2. Entradadedatosconformato(usodescanf)
Lafuncinscanf()leelosdatosdesdeeltecladoconformato.Susintaxises:
scanf(cadena_de_control,arg1,arg2,...,argn);
29
Programacin 1
Cdigosdeformatodescanf()
Losargumentosarg1,arg2,arg3,...,argnsondireccionesdelasvariablesyparaellosse
debe utilizar el operador de direcciones (&). La lista de valores por tanto representa el
valor o valores a escribir en pantalla. Una especificacin de formato para scanf() esta
compuestapor:
30
Programacin 1
Ejemplo:
printf(Daunnumero:);
scanf(%d,&n);
Otroejemplo:
main()
{
inta,r;
floatb;
charc;
printf(Introducirunvalorentero,unrealyuncaracter\n=>);
r=scanf(%d%f%c\n,&a,&b,&c);
printf(Numerodedatosleidos:%d\n,r);
Printf(datosleidos:%d%f%c\n,a,b,c);
}
Para leer datos de tipo cadena no lleva el operador de direccin &. Y tenemos que
cambiarelformato%spor%[^\n].Porejemplo:
charnombre[40];
31
Programacin 1
scanf(%[^\n],nombre);
printf(%s,nombre);
Entrada:FranciscoJavier
Salida:FranciscoJavier
2.8.3.EntradaySalidasinformato
Paraleeruncarcterdesdeeltecladooimprimirloenpantalla,seempleanlassiguientes
funciones:
En la tabla anterior se encuentran tambin las instrucciones para leer o escribir una
cadenadecaracteres.Estasson:gets()yputs()respectivamente.Acontinuacinunos
ejemplos.
32
Programacin 1
2.9. ESTRUCTURASDECONTROL
Cuandoseresuelvenproblemasgenerandoprogramasdecomputadora,enestecasoen
lenguaje C, lo ms probable es que necesitemos de algn tipo de elementos de control
lgicoocomprobacionesdecondicionesqueseanciertasofalsas(seleccinodecisin).
Adems los programas pueden requerir que un grupo de instrucciones se ejecute
repetidamenteundeterminadonmerodeveces,ohastaquesesatisfagaunacondicin
lgica(cicloderepeticin).
En el lenguaje C se incluyen entonces la instrucciones de decisin if y switch y las
sentenciasderepeticin,for,while,do/while.
2.9.1.LaProposicinif
Lasintaxisdelaproposicinifeslasiguiente:
if(expresin)
{
proposiciones;/*bloque*/
}
proposicinsiguiente;
Dondeexpresindebeserunaexpresinnumrica,relacionalolgica.
Si se tiene una sola proposicin, no es necesario introducir las llaves. Si tenemos varias
proposicionesarealizar,estasirnseparadasconsusrespectivospuntosycomas.
Si el resultado de la expresin es verdadero (cualquier valor diferente de cero), se
ejecutar la proposicin o proposiciones. Si el resultado es falso entonces no se realiza
ningunaaccinycontinuaelflujodelprogramaalasiguientelneadecdigodespusdel
if(proposicin_siguiente).
33
Programacin 1
Porejemplo:
if(grado>=90)
printf(\nFELICIDADES);
printf(\nsugradoes%d,grado);
LaProposicinelse
Elelseesoptativoysuaplicacinresultaenlaejecucindeunaounaseriedesentencias
(bloque) en el caso de que el resultado de la expresin del if sea falso. La sintaxis de la
proposicinifelseeslasiguiente:
if(expresin)
{
proposicin_1;/*bloque1*/
}
else{
proposicin_2;/*bloque2*/
}
proposicin_siguiente;
Porejemplo:
if(x<=y)
min=x;
else
min=y;
34
Programacin 1
Porejemplo:
if(a>b)
printf(%desmayorque%d,a,b);
elseif(a<b)
printf(%desmenorque%d,a,b);
elseprintf(%desigualque%d,a,b);
Enlassentenciasdeseleccinenlasquehayslounelse,sepuedenreescribirmediante
eloperadorcondicional(?:)cuyasintaxiseslasiguiente:
(condicin)?(expresin1):(expresin2);
Lasexpresionesdebensersimplesynodebenformargruposdeinstrucciones.Primerose
evala la condicin y si sta es verdadera se ejecuta la expresin1, sino se ejecuta la
expresin2.
2.9.2. LaProposicinswitch
sta proposicin permite ejecutar una de varias acciones, en funcin del valor de una
expresin.Lasintaxisdeestaproposicines:
switch(expresintest)
{
caseconstante1:sentencia;
caseconstante2:sentencia;
caseconstante3:sentencia;
...
caseconstanten:sentencia;
default:sentencia;
}
35
Programacin 1
2.9.3. LaProposicindeiteracinfor
Cuandosedeseaejecutarunaaccinsimpleounbloquedeinstrucciones,repetidamente
unnmerodevecesconocido,esrecomendableutilizarlaproposicinfor,cuyasintaxises
lasiguiente:
for(inicializacin;condicin;incremento)
{
sentencia1;
sentencia2;
.....
sentencia_n;
}
36
Programacin 1
donde:
inicializacinesunaproposicindeasignacinparaestablecerelvalorinicialdelavariable
decontrol.Sepuedenestablecervariasvariablesdecontrolenunciclofor.
Condicinesunaexpresinrelacionalolgicaquedeterminacuandoterminarelciclode
repeticin.
Incremento define cmo cambiar la variable de control o las variables de control, cada
vezquecambiaeste.
2.9.4. LaProposicindeIteracinwhile
while(expresin)
{
sentencia1;
sentencia2;
.....
sentencia_n;
}
Una proposicin while se ejecuta mientras la expresin sea verdadera (cualquier valor
distinto de cero). En el momento en que la expresin sea falsa, entonces se ejecuta la
siguientelneadespusdelfindelciclo.Porejemplo:
37
Programacin 1
charca;
ca=0;
while(ca!=A)
{
ca=getchar();
putchar(ca);
}
2.9.5. LaProposicindowhile
Estaproposicinejecutaunasentenciaovarias,unaomsvecesdependiendodelvalor
deunaexpresin.Susintaxises:
do{
sentencia1;
sentencia2;
.....
sentencia_n;
}while(expresin);
Enlasentenciadowhileseejecutaprimerolasentenciaobloquedesentenciasqueestan
dentrodeldo.Despusseevalalaexpresinysistaesfalsaterminalaproposicindo
while,sinoserepotelasentenciaosentenciasqueestndentrodeldo.Porejemplo:
intn;
do{
printf(\ndaunnmero:);
scanf(%d,&n);
}while(n>100);
2.9.6.Lassentenciasbreak,continueylafuncinexit()
La sentencia break: Esta sentencia ya descrita en el uso del switch, tambin sirve para
terminar ciclos producidos por el for, while y dowhile, antes de que se cumpla la
condicinnormaldeterminacin.Porejemplo:
38
Programacin 1
for(t=0;t<100;t++)
{
contador1;
do{
Printf(%d,contador);
contador++;
ifcontador(==10)
break;
}while(1);
}
Lasentenciacontinue:Comestasentencia,envezdeterminarumciclo,terminaconLa
realizacin de La iteracin en curso saltando El resto de la pasada, ES decir, todas las
sentenciasqueseencuentrandespusdecontinue,parairalasiguienteiteracin.Igual
quebreak,sepuedeutilizarenlosciclosfor,whileydowhile.
Porejemplo:
do{
printf(Daunnumero:);
scanf(%d,&x);
if(x<0)continue;
printf(Elnumeroes%d,x);
}while(x!=100);
39
Programacin 1
Lafuncinexit():Otraformadeterminaruncicloderepeticindesdedentroesutilizarla
funcin exit(). A diferencia con el break, la funcin exit() terminar con la ejecucin del
programayregresarelcontrolalsistemaoperativo.
Porejemplo:
for(i=0;i<=1000;i++)
{
printf(Elvalordeies%d,i);
if(i>10)exit();
}
40