Está en la página 1de 8

31/1/2017

ProgramacinenCCaptulo2

CAPITULO2:VARIABLESYCONSTANTES

1.DEFINICIONDEVARIABLES
Siyodesearaimprimirlosresultadosdemultiplicarunnmerofijoporotroqueadoptavaloresentre0
y9,laformanormaldeprogramarestoseracrearunaCONSTANTEparaelprimernmeroyunpar
deVARIABLESparaelsegundoyparaelresultadodelproducto.Unavariable,enrealidad,noes
msqueunnombreparaidentificaruna(ovarias)posicionesdememoriadondeelprogramaguarda
losdistintosvaloresdeunamismaentidad.UnprogramadebeDEFINIRatodaslasvariablesque
utilizar,antesdecomenzarausarlas,afindeindicarlealcompiladordequetiposern,yporlo
tantocuantamemoriadebedestinarparaalbergaracadaunadeellas.VeamoselEJEMPLO2:
#include<stdio.h>
main()
{
intmultiplicador;/*definomultiplicadorcomounentero*/
intmultiplicando;/*definomultiplicandocomounentero*/
intresultado;/*definoresultadocomounentero*/
multiplicador=1000;/*lesasignovalores*/
multiplicando=2;
resultado=multiplicando*multiplicador;
printf("Resultado=%d\n",resultado);/*muestroelresultado*/
return0;
}

Enlasprimeraslneasdetextodentrodemain()definomisvariablescomonmerosenteros,es
decirdeltipo"int"seguidodeunidentificador(nombre)delamisma.Esteidentificadorpuedetenerla
cantidaddecaracteresquesedesee,sinembargodeacuerdoalCompiladorqueseuse,este
tomarcomosignificantesslolosprimerosndeellossiendoporlogeneralniguala32.Es
convenientedarlealosidentificadoresdelasvariables,nombresquetenganunsignificadoque
luegopermitaunafcillecturadelprograma.Losidentificadoresdebencomenzarconunaletracon
elsmbolodesubrayado"_",pudiendocontinuarconcualquierotrocaractralfanumricoel
smbolo"_".Elnicosmbolonoalfanumricoaceptadoenunnombreesel"_".EllenguajeCes
sensiblealtipodeletrausadoastomarcomovariablesdistintasaunallamada"variable",deotra
escritacomo"VARIABLE".EsunaconvencinentrelosprogramadoresdeCescribirlosnombresde
lasvariablesylasfuncionesconminsculas,reservandolasmaysculasparalasconstantes.
Elcompiladordarcomoerrorde"Definicinincorrecta"aladefinicindevariablesconnombresdel
tipode:
4pesos$variableprimervariable!variableetc.etc
NOTA:Loscompiladoresreservandeterminadostrminospalabrasclaves(Keywords)paraeluso
sintcticodellenguaje,talescomo:asm,auto,break,case,char,do,for,etc.Sibienestaspalabras
estndefinidasparaelANSIC,losdistintoscompiladoresextiendenestadefinicinaOTROS
trminos,porloqueesaconsejableleerlatablacompletadepalabrasreservadasdelcompilador
quesevayaausar,paranoutilizarlasennombresdevariables.
Vemosenlasdoslineassubsiguientesaladefinicindelasvariables,quepuedoyaasignarles
valores(1000y2)yluegoefectuarelclculodelavariable"resultado".Siprestamosahoraatencin
alafuncinprintf(),stanosmostrarlaformadevisualizarelvalordeunavariable.Insertadaenel
textoamostrar,apareceunasecuenciadecontroldeimpresin"%d"queindica,queenellugarque
http://www.pablin.com.ar/computer/cursos/c2/manc2.htm

1/8

31/1/2017

ProgramacinenCCaptulo2

ellaocupa,deberponerseelcontenidodelavariable(queapareceluegodecerradaslascomillas
quemarcanlafinalizacindeltexto,yseparadadelmismoporunacoma)expresadocomounun
nmeroenterodecimal.As,sicompilamosycorremoselprograma,obtendremosunasalida:
SALIDADELEJEMPLO2
Resultado=2000
2.INICIALIZACIONDEVARIABLES
Lasvariablesdelmismotipopuedendefinirsemedianteunadefinicinmltipleseparandolas
mediante","asaber:
intmultiplicador,multiplicando,resultado
Estasentenciaesequivalentealastresdefinicionesseparadasenelejemploanterior.Lasvariables
puedentambinserinicializadasenelmomentodedefinirse.
intmultiplicador=1000,multiplicando=2,resultado
DeestamaneraelEJEMPLO2podraescribirse:
EJEMPLO2BIS
#include<stdio.h>
main()
{
intmultiplicador=1000,multiplicando=2;
printf("Resultado=%d\n",multiplicando*multiplicador);
return0;
}

Obsrvesequeenlaprimersentenciasedefineneinicializansimultaneamenteambasvariables.La
variable"resultado"lahemoshechodesapareceryaqueesinnecesaria.Sianalizamoslafuncin
printf()vemosquesehareemplazado"resultado"porlaoperacinentrelasotrasdosvariables.Esta
esunadelasparticularidadesdellenguajeC:enlosparmetrospasadosalasfuncionespueden
ponerseoperaciones(inclusollamadasaotrasfunciones),lasqueserealizanANTESdeejecutarse
lafuncin,pasandofinalmenteaestaelvalorresultantedelasmismas.ElEJEMPLO2funciona
exactamenteigualqueantesperosucdigoahoraesmuchomscompactoyclaro.
3.TIPOSDEVARIABLES
VARIABLESDELTIPOENTERO
Enelejemploanteriordefinimosalasvariablescomoenteros(int).
Deacuerdoalacantidaddebytesquereserveelcompiladorparaestetipodevariable,queda
determinadoel"alcance"mximovalorquepuedeadoptarlamisma.
Debidoaqueeltipointocupadosbytessualcancequedarestringidoalrangoentre32.768y
+32.767(incluyendo0).
http://www.pablin.com.ar/computer/cursos/c2/manc2.htm

2/8

31/1/2017

ProgramacinenCCaptulo2

Encasodenecesitarunrangomsamplio,puededefinirselavariablecomo"longint
nombre_de_variable"enformamsabreviada"longnombre_de_variable"
Declaradadeestamanera,nombre_de_variablepuedealcanzarvaloresentre2.347.483.648y
+2.347.483.647.
Alainversa,sisequisieraunalcancemenoraldeint,podradefinirse"shortint"simplemente
"short",aunqueporlogeneral,loscompiladoresmodernosasignanaestetipoelmismoalcanceque
"int".
DebidoaquelanormaANSICnoestablecetaxativamentelacantidaddebytesqueocupacadatipo
devariable,sinotansloqueun"long"noocupemenosmemoriaqueun"int"yestenoocupemenos
queun"short",losalcancesdelosmismospuedenvariardecompiladorencompilador,porloque
sugerimosqueconfirmelosvaloresdadosenestepargrafo(correspondientesalcompiladorde
BorlandC++)conlosotorgadosporsucompiladorfavorito.
Paravariablesdemuypequeovalorpuedeusarseeltipo"char"cuyoalcanceestrestringidoa
128,+127yporlogeneralocupaunnicobyte.
Todoslostiposcitadoshastaahorapuedenalojarvalorespositivosnegativosy,aunquees
redundante,estopuedeexplicitarseagregandoelcalificador"signed"delanteporejemplo:
signedint
signedlong
signedlongint
signedshort
signedshortint
signedchar
Siencambio,tenemosunavariablequeslopuedeadoptarvalorespositivos(comoporejemplola
edaddeunapersona)podemosaumentarelalcancedecualquieradelostipos,restringindolosa
queslorepresentenvaloressinsignopormediodelcalificador"unsigned".EnlaTABLA1se
resumelosalcancesdedistintostiposdevariablesenteras
TABLA1VARIABLESDELTIPONUMEROENTERO
TIPO

BYTES VALORMINIMO VALORMAXIMO

signedchar
1
unsignedchar 1

128
0

127
255

unsignedshort 2

32.768

+32.767

unsignedshort 2

+65.535

signedint

32.768

+32.767

unsignedint

+65.535

2.147.483.648
0

+2.147.483.647
+4.294.967.295

signedlong
4
unsignedlong 4

NOTA:Siseomiteelcalificadordelantedeltipodelavariableentera,steseadoptaporomisin
(default)como"signed".
http://www.pablin.com.ar/computer/cursos/c2/manc2.htm

3/8

31/1/2017

ProgramacinenCCaptulo2

VARIABLESDENUMEROREALOPUNTOFLOTANTE
Unnmerorealdepuntoflotanteesaquelqueademsdeunaparteentera,poseefraccionesdela
unidad.Ennuestraconvencinnumricasolemosescribirlosdelasiguientemanera:2,3456,
lamentablementeloscompiladoresusanlaconvencindelPUNTOdecimal(envezdelacoma).As
elnumeroPiseescribir:3.14159Otroformatodeescritura,normalmenteaceptado,eslanotacin
cientfica.Porejemplopodrescribirse2.345E+02,equivalentea2.345*100234.5
Deacuerdoasualcancehaytrestiposdevariablesdepuntoflotante,lasmismasestndescriptas
enlaTABLA2
TABLA2TIPOSDEVARIABLESDEPUNTOFLOTANTE
TIPO

BYTES VALORMINIMO VALORMAXIMO

float

3.4E38

3.4E+38

double

1.7E308

1.7E+308

3.4E4932

3.4E+4932

longdouble 10

LasvariablesdepuntoflotantesonSIEMPREconsigno,yenelcasoqueelexponenteseapositivo
puedeobviarseelsignodelmismo.
5.CONVERSIONAUTOMATICADETIPOS
CuandodosmastiposdevariablesdistintasseencuentranDENTROdeunamismaoperacin
expresinmatemtica,ocurreunaconversinautomticadeltipodelasvariables.Entodomomento
derealizarseunaoperacinseaplicalasiguientesecuenciadereglasdeconversin(previamentea
larealizacindedichaoperacin):
1)Lasvariablesdeltipocharshortseconviertenenint
2)Lasvariablesdeltipofloatseconviertenendouble
3)Sialgunodelosoperandosesdemayorprecisinquelosdems,estosseconviertenaltipo
deaquelyelresultadoesdelmismotipo.
4)Sinoseaplicalareglaanterioryunoperandoesdeltipounsignedelotroseconvierteen
unsignedyelresultadoesdeestetipo.
Lasreglas1a3nopresentanproblemas,slonosdicenquepreviamentearealizaralguna
operacinlasvariablessonpromovidasasuinstanciasuperior.Estonoimplicaquesehaya
cambiadolacantidaddememoriaquelasalojaenformapermanente
Otrotipodereglaseaplicaparalaconversinenlasasignaciones.
Sidefinimoslostrminosdeunaasignacincomo,"lvalue"alavariablealaizquierdadelsignoigualy
"rvalue"alaexpresinaladerechadelmismo,esdecir:
"lvalue"="rvalue"
Posteriormentealclculodelresultadode"rvalue"(deacuerdoconlasreglasantesdescriptas),el
tipodeesteseigualaaldel"lvalue".Elresultadonoseverafectadosieltipode"lvalue"esigual
superioraldel"rvalue",encasocontrarioseefectuaruntruncamientoredondeo,segunseael
caso.
Porejemplo,elpasajedefloataintprovocaeltruncamientodelapartefraccionaria,encambiode
doubleafloatsehaceporredondeo.
5.ENCLAVAMIENTODECONVERSIONES(casting)

http://www.pablin.com.ar/computer/cursos/c2/manc2.htm

4/8

31/1/2017

ProgramacinenCCaptulo2

Lasconversionesautomticaspuedensercontroladasagustoporelprogramador,imponiendoeltipo
devariablealresultadodeunaoperacin.Supongamosporejemplotener:
doubled,e,f=2.33;
inti=6;
e=f*i;
d=(int)(f*i);

Enlaprimersentenciacalculamoselvalordelproducto(f*i),quesegnlovistoanteriormentenos
darundoubledevalor13.98,elquesehaasignadoae.Sienlavariabledquisiramosreservar
sloelvalorenterodedichaoperacinbastarconanteponer,encerradoentreparntesis,eltipo
deseado.Asendsealmacenarelnmero13.00.
Tambinesfactibleaplicarlafijacindetipoaunavariable,porejemploobtendremoselmismo
resultado,sihacemos:
d=(int)f*i
Enestecasohemosconvertidoafenunentero(truncandosusdecimales)
6.VARIABLESDETIPOCARACTER
EllenguajeCguardaloscaracterescomonmerosde8bitsdeacuerdoalanormaASCIIextendida,
queasignaacadacaracterunnmerocomprendidoentre0y255(unbytede8bits)Escomn
entoncesquelasvariablesquevayanaalojarcaracteresseandefinidascomo:
charc
Sinembargo,tambinfuncionademaneracorrectadefinirlacomo
intc
Estaltimaopcindesperdiciaunpocomsdememoriaquelaanterior,peroenalgunoscasos
particularespresentaciertasventajas.Pongamosporcasounafuncinqueleeunarchivodetexto
ubicadoenundisco.DichoarchivopuedetenercualquiercaracterASCIIdevalorcomprendidoentre
0y255.Paraquelafuncinpuedaavisarmequeelarchivohafinalizadodeberenviarunnmero
NOcomprendidoentre0y255(porlogeneralseusael1,denominadoEOF,findearchivoEnd
OfFile),enestecasodichonmeronopuedesermantenidoenunavariabledeltipochar,yaque
estaslopuedeguardarentre0y255siseladefineunsignednopodriamantenerloscaracteres
comprendidosentre128y255siseladefinesigned(verTABLA1).Elproblemaseobviafacilmente
definindolacomoint.
Lasvariablesdeltipocaractrtambinpuedenserinicializadasensudefinicin,porejemploes
vlidoescribir:
charc=97
paraqueccontengaelvalorASCIIdelaletra"a",sinembargoestoresultaalgoengorroso,yaque
obligaarecordardichoscdigos.Existeunamaneramsdirectadeasignaruncaractrauna
variablelasiguienteinicializacinesidnticaalaanterior:
charc='a'

http://www.pablin.com.ar/computer/cursos/c2/manc2.htm

5/8

31/1/2017

ProgramacinenCCaptulo2

Esdecirquesidelimitamosuncaracterconcomillasimple,elcompiladorentenderquedebe
suplantarloporsucorrespondientecdigonumrico.
Lamentablementeexistenunaseriedecaracteresquenosonimprimibles,enotraspalabrasque
cuandoeditemosnuestroprogramafuente(archivodetexto)nosresultardifcildeasignarlasauna
variableyaqueeleditorlastomacomounCOMANDOynocomouncaracter.Uncasotpicoserael
de"nuevalinea"ENTER.
Conelfindeteneraccesoalosmismosesqueaparecenciertassecuenciasdeescape
convencionales.LasmismasestanlistadasenlaTABLA3ysuusoesidnticoaldeloscaracteres
normales,asipararesolverelcasodeunaasignacinde"nuevalinea"seescribir:
charc='\n'/*secuenciadeescape*/
TABLA3SECUENCIASDEESCAPE
CODIGO

SIGNIFICADO

VALORASCII
(decimal)

VALORASCII
(hexadecimal)

'\n'

nuevalnea

10

0x0A

'\r'

retornodecarro

13

0x0D

'\f'

nuevapgina

x0C

'\t'
'\b'

tabuladorhorizontal
retroceso(backspace)

9
8

0x09
0x08

'\''

comillasimple

39

0x27

'\"'

comillas

0x22

'\\'

barra

92

0x5C

'\?'

interrogacin

63

0x3F

'\nnn'

cualquiercaracter(dondennneselcdigoASCIIexpresadoenoctal)

'\xnn'

cualquiercaracter(dondenneselcdigoASCIIexpresadoenhexadecimal)

7.TAMAODELASVARIABLES(sizeof)
Enmuchosprogramasesnecesarioconocereltamao(cantidaddebytes)queocupaunavariable,
porejemploenelcasodequererreservarmemoriaparaunconjuntodeellas.Lamentablemente,
comovimosanteriormenteestetamaoesdependientedelcompiladorqueseuse,loqueproducir,
sidefinimosrigidamente(conunnmerodadodebytes)elespaciorequeridoparaalmacenarlas,un
problemaseriosiluegosequierecompilarelprogramaconuncompiladordistintodeloriginal
Parasalvaresteproblemaymantenerlaportabilidad,esconvenientequecadavezquehayaque
referirsealTAMAOenbytesdelasvariables,selohagamedianteunoperadorllamado"sizeof"que
calculasusrequerimientosdealmacenaje
Esttambinpermitidoelusodesizeofconuntipodevariable,esdecir:
sizeof(int)
sizeof(char)
sizeof(longdouble),etc.

8.DEFINICIONDENUEVOSTIPOS(typedef)
Avecesresultaconvenientecrearotrostiposdevariables,redefinirconotronombrelasexistentes
,estosepuederealizarmediantelapalabraclave"typedef",porejemplo:
http://www.pablin.com.ar/computer/cursos/c2/manc2.htm

6/8

31/1/2017

ProgramacinenCCaptulo2

typedefunsignedlongdoubleenorme
Apartirdeestemomento,lasdefinicionessiguientestienenidnticosignificado:
unsignedlongdoublenombre_de_variable
enormenombre_de_variable
9.CONSTANTES
Aquellosvaloresque,unavezcompiladoelprogramanopuedensercambiados,comoporejemplo
losvaloresliteralesquehemosusadohastaahoraenlasinicializacionesdelasvariables(1000,2,
'a','\n',etc),suelendenominarseCONSTANTES.
Comodichasconstantessonguardadasenmemoriadelamaneraquealcompiladorleresultams
eficientesuelenaparecerciertosefectossecundarios,avecesdesconcertantes,yaquelasmismas
sonafectadasporlasreglasdeRECONVERSIONAUTOMATICADETIPOvistapreviamente.
Afindetenercontrolsobreeltipodelasconstantes,seaplicanlasiguientesreglas:
Unavariableexpresadacomoentera(sinpartedecimal)estomadacomotalsalvoquesela
sigadelasletrasFL(maysculasminsculas)ejemplos:
1:tomadacomoENTERA
1F:tomadacomoFLOAT
1L:tomadacomoLONGDOUBLE
UnavariableconpartedecimalestomadasiemprecomoDOUBLE,salvoqueselasigadela
letraFL
1.0:tomadacomoDOUBLE
1.0F:tomadacomoFLOAT
1.0L:tomadacomoLONGFLOAT
SiencualquieradeloscasosanterioresagregamoslaletraUulaconstantequedacalificada
comoUNSIGNED(consiguiendomayoralcance):
1u:tomadacomoUNSIGNEDINT
1.0UL:tomadacomoUNSIGNEDLONGDOUBLE
Unavariablenumricaquecomienzacon"0"estomadocomoOCTALasi:012equivalea10
unidadesdecimales
Unavariablenumricaquecomienzacon"0x""0X"estomadacomohexadecimal:0x16
equivalea22unidadesdecimalesy0x1Aa26unidadesdecimales.
10.CONSTANTESSIMBOLICAS
Porlogeneralesunamalaprcticadeprogramacincolocarenunprogramaconstantesenforma
literal(sobretodosiseusanvariasvecesenelmismo)yaqueeltextosehacedificildecomprendery
anmsdecorregir,sisedebecambiarelvalordedichasconstantes.
Sepuedeencambioasignarunsmboloacadaconstante,yreemplazarlaalolargodelprograma
porelmismo,deformaqueesteseamslegibleyadems,encasodequerermodificarelvalor,
bastarconcambiarloenlaasignacin.
Elcompilador,enelmomentodecrearelejecutable,reemplazarelsmboloporelvalorasignado.
Paradarunsmboloaunaconstantebastar,encualquierlugardelprograma(previoasuuso)
ponerladirectiva:#define,porejemplo:
#defineVALOR_CONSTANTE342
#definePI3.1416

CAPITULOANTERIORDELCURSO
PROXIMOCAPITULODELCURSO
http://www.pablin.com.ar/computer/cursos/c2/manc2.htm

7/8

31/1/2017

http://www.pablin.com.ar/computer/cursos/c2/manc2.htm

ProgramacinenCCaptulo2

8/8