You are on page 1of 37

Pr ogramaci n enl enguaj e C

I ntroducci n
Cr eaci n del programa
Se puede crear un archi voque cont enga el programa compl et o. Se puede usar cual qui er edi tor
de text os or di nari o con el que se estef ami li ari zado.
Por convenci n el nombr e del archi vo debe ter mi nar con ``. c'' por ej empl o: mi progr ama. c
pr ogpr ueba. c. El cont eni do del archi vo deber obedecer l a si ntaxi s de C.
Compi l aci n
Exi sten muchos compi l adores de C. El cc es el compi l ador estndar de Sun. El compi l ador GNU
de C es gcc, el cual es bastant e popul ar y esta di sponi bl e en vari as pl ataf or mas.
Exi sten tambi n compi l adores equi val ent es de C++ l os cual es usual ment e son nombr ados como
CC. Por ej empl o, Sun pr ovee CC y GNU GCC. El compi l ador de GNU es tambi n denot ado como
g++.
Compi l aci n
Para compi l ar el programa usar emos el comando gcc. El comando deber ser segui do por el
nombr e del programa en Cque se qui ere compi l ar. Un det er mi nado nmer o de opci ones del
compi l ador pueden ser i ndi cadas tambi n.
Por l otant o, el comando bsi co de compi l aci n es: gcc pr ograma. c donde progr ama. c es el
nombr e del archi vo.
Compi l aci n
Otr o compi l ador muy popul ar es el TURBO C de Borl and que yai ncl uye un edi tor.
En tur bo C, el comando bsi co de compi l aci n es: tc progra ma. c donde pr ogr ama. c es el
nombr e del archi vo.
Ej ecuci n del pr ograma
El si gui ent e estado es correr el pr ograma ej ecutabl e. Para correr un ej ecut abl e en DOS ( o
Wi ndows), si mpl ement e se escri be el nombr e del archi vo que l oconti ene.
Conl o ant eri or, se ej ecuta el programa, mostrando al gn resul tado enl a pant alla. En ste
estado, podr a haber errores en ti empo de ej ecuci n, ent onces se debe regresar a edi tar el
archi vo del programa, recompi l arl o, y ej ecutarl o nueva ment e.

El model o de compi l aci n de C
El prepr ocesador
Compi l ador de C
Ensambl ador
Li gador
El prepr ocesador
El prepr ocesador acept a el cdi gof uent e como entrada y es responsabl e de:
qui tar l os coment ari os
i nter pretar l as di recti vas del prepr ocesador l as cual es ini ci an con #.
Por ej empl o:
#i ncl ude -- i ncl uye el cont eni do del archi vo nombr ado. Est os son usual ment ell amados
archi vos de cabecer a( header). Por ej empl o:
Compi l ador de C( Compi l er)
El compi l ador de Ctraduce el cdi gof uent e en cdi go de ensambl ador. El cdi gof uent e
es reci bi do del prepr ocesador.
Ensambl ador ( Assembl er)
El ensambl ador crea el cdi go f uent ei ol os archi vos obj et o. Enl os si stemas con UNI X se
podr n ver l os archi vos con el sufij o. o.
Li gador (Li nker)
Si al gn archi vof uent e hace ref erenci a af unci ones de una bi bli oteca o de f unci ones que
estn defi ni das en otros archi vos f uent es, el li gador combi na estas f unci ones (con
mai n()) para crear un archi vo ej ecutabl e. Las ref erenci as a vari abl es exter nas en esta
et apa son resuel tas
Cap tul o 1
Pri nci pi os de C
Or genes del C
Cr eaci n de unl enguaj ell amado BCPL, desarroll ado por Marti n Ri char ds.
El BCPL i nfl uy en unl enguaj ell amado B, usado en 1970 ei nvent ado por Ken Thomps on.
Desarroll o de C en 1971, el cual l oi nvent ei mpl ement Denni s Ri tchi e.
Para 1973 el si stema operati vo UNI X estaba casi total ment e escri to en C.
Estndar i ni ci al para C: versi n 5 del UNI X, document ada en The C Pr ogrammi ng Language
escri to por Bri an W. Ker ni ghan y Denni s M. Ri tchi e en 1978 como K&R.
Or genes del C
Post eri or ment e se hi ci eron vari as i mpl ement aci ones las cual es mostrabanl as si gui ent es
tendenci as:
Nuevas caracter sti cas
Di f erenci as de mqui nas
Di f erenci as de pr oduct os
Err ores enl os compi l ador es
Mal as i mpl ement aci ones
En el verano de 1983 se establ eci un comi t que empez a trabaj ar en un estndar ANSI C, l a
cual f ue compl etado en 1988.
Car acter sti cas de C
Ta mao pequeo.
Us o extensi vo dell amadas a f unci ones.
Comandos breves ( poco tecl eo).
Lenguaj e estruct urado.
Pr ogramaci n de baj o ni vel (ni vel bi t)
I mpl ement aci n de apunt ador es - uso extensi vo de apunt ador es paral a me mori a, arregl os,
estruct uras y f unci ones
Vent aj as y desvent aj as de C
Razones por l a cual se ha converti do en unl enguaj e de uso pr of esi onal son:
El uso de construct ores de al to ni vel.
El poder manej ar acti vi dades de baj o- ni vel.
El generar pr ogramas efi ci ent es.
La posi bili dad de poder ser compi l ado en una vari edad de comput ador as, con pocos
cambi os ( portabili dad).
Un punt o en contra es que ti ene una det ecci n pobr e de errores, l ocual en ocasi ones es
pr obl emti co paral os pri nci pi ant es.
Estruct ura de pr ogramas en C
Un pr ograma de Cti ene bsi cament el a si gui ent e f orma:
Comandos del prepr ocesador.
Defi ni ci ones de ti pos.
Pr ot oti pos de f unci ones - decl ara el ti po de f unci n ylas vari abl es pasadas al a mi s ma.
Vari abl es
Funci ones
Estruct ura de pr ogramas en C
Un pr ograma si empr e debe tener una ruti na of unci n pri nci pal mai n().
Una f unci n ti enel af or ma:
ti po nombr e_de_l a_f unci on ( parmetr os)
{
vari abl es l ocal es
sent enci as de C
}
Si l a defi ni ci n del ti po es omi ti da, C asume que l af unci n regresa un ti po ent er o, l ocual puede
ser una f uent e de pr obl emas en un pr ograma.
Estruct ura de pr ogramas en C
A conti nuaci n se muestra un pri mer pr ograma:
/* Pr ograma ej empl o */
mai n()
{
pri ntf( " Me gusta C\n" );
exi t ( 0);
}
Estruct ura de pr ogramas en C
Al gunas observaci ones con respect o al pr ograma ant eri or:
C requi ere un punt o y coma al fi nal de cada sent enci a.
pri ntf es una f unci n estndar de C, l a cual es ll amada enl af unci n mai n().
\n si gni fi ca sal to del nea. Sali da f or mat eada.
exi t() es tambi n una f unci n estndar que hace que el programa ter mi ne. En el senti do
estri cto no es necesari o ya que es l a l ti ma l nea de mai n() y de cual qui er f or ma
ter mi nar el programa.
Pr cti ca 1
I nstal ar el compi l ador Tur bo C. Anot ar l os pasos segui dos para ell o.
Fa mi li ari zarse con el ent orno de trabaj o de tur bo C.
Utili zar el ej empl o de cdi go para practi car l a creaci n de un archi vof uent e y compi l arl o. Anot ar
l os pasos segui dos en ese proceso.
I nvesti gar el cont eni do delos archi vos de cabecera del di rect ori oi ncl ude.
Reali zar l os ej erci ci os pr opuest os.
Ej empl o de cdi go
El si gui ent e pr ograma i mpri me en pant all al afrase "Hol a Mundo"
#i ncl ude <st di o. h> // necesari o para utili zar pri ntf()
i nt mai n( voi d)
{
pri ntf("Hol a, Mundo\n");
ret ur n 0; // i mpl ci to en C99 para mai n().
}
Ej erci ci os
1. Escri be, compi l a y corre el si gui ent e pr ograma. Modi fica el programa para quei ncl uyas tu
nombr e yl af or ma como hi ci stel o ant eri or. Parai ni ci ar un coment ari o usa /* y para ter mi narl o
*/:
#i ncl ude <st di o. h>
mai n()
{
i nt i;
pri ntf("\t Numer o \t\t Cubo\n\n");
f or( i =0; i <=20; ++i )
pri ntf("\t %d \t\t\t %d \n",i,i *i *i );
}
Ej erci ci os
2. El si gui ent e pr ograma usala bi bli oteca mat emti ca. Tecl al o, compi l al o y ej ecutal o. I ncl uye con
coment ari os dentr o del progra ma t u nombr e yl af orma como hi ci stel o ant eri or.
#i ncl ude <st di o. h>
#i ncl ude <mat h. h>
mai n()
{
i nt i;
pri ntf("\t Angul o \t\t Seno\n\n");
f or( i =0; i <=360; i +=15)
pri ntf("\t %d \t\t\t %f \n",i, si n(( doubl e) i *M_PI /180. 0));
}




Cap tul o 2
Vari abl es de C
Ti pos de Vari abl es
Decl araci n de Vari abl es
For mat o de decl araci n de vari abl es en C:
ti poli sta_vari abl es;
ti po es un ti po vli do de Cy li sta_vari abl es puede consi sti r en uno o ms i ndenti fi cador es
separados por una coma. Uni denti fi cador debe comenzar con una l etra o un gui n baj o.
Ej empl o:
i nt i, j, k;
fl oat x, y, z;
char ch;
Vari abl es gl obal es
Una vari bl e gl obal se decl ara f uera de todas l as f unci ones, i ncl uyendo al af unci n mai n().
Una vari abl e gl obal puede ser utili zada en cual qui er parte del programa.
Por ej empl o:
short numer o, suma;
i nt numer ogr, sumagr;
char l etra;
mai n()
{
...
}
Vari abl es gl obal es
Por ej empl o:
fl oat suma= 0. 0;
i nt sumagr = 0;
char l etra=' A' ;
mai n()
{
...
}
Que es l o mi s mo que:
fl oat suma;
i nt sumagr;
char l etra;
mai n()
{
suma = 0. 0;
sumagr = 0;
l etra =' A' ;
...
}
Vari abl es gl obal es
Dentr o de Ctambi n se per mi tel a asi gnaci n ml ti pl e usando el operador =
Por ej empl o:
a = b = c = d = 3;
Que es l o mi s mo, per o ms efi ci ent e que:
a = 3;
b = 3;
c = 3;
d = 3;
La asi gnaci n ml ti pl e se puede ll evar a cabo, si todos l os ti pos del as vari abl es soni gual es
Vari abl es gl obal es
Se pueden redefi ni r l os ti pos de C usando typedef.
Ej empl o: se crean dos nuevos ti pos real yl etra que pueden ser usados dei gual f or ma como l os
ti pos predefi ni dos de C.
typedef fl oat real ;
typedef char l etra;
/* Decl araci on de vari abl es usando el nuevo ti po */
real suma=0. 0;
l etra si g_l etra;
Vari abl es l ocal es
Una vari bl el ocal se decl ara dentr o del af unci n donde ser utili zada.
Una vari abl el ocal no puede ser utili zada en otra parte del programa, sol o enl afunci n donde
f ue decl arada.
Por ej empl o:
mai n()
{
i nt numer o;
l ong i nt suma;
char l etra;
...
}
Lect ura y escri tura de vari abl es
El l enguaj e C usa sali da f ormat eada conl af unci n pri ntf.
%c caract eres
%s cadena de caract eres
%d ent er os
%f fl otant es
Por ej empl o:
pri ntf(" %c %d %f ", ch,i, x);
La sent enci a de f or mat o se enci erra entre " ", y ensegui da l as vari abl es.
Asegur arse que el orden de for mat eo yl os ti pos de datos del as vari abl es coi nci dan.
Lect ura y escri tura de vari abl es
scanf() es l af unci n para entrar val ores a vari abl es.
Su f or mat o es si mi l ar a pri ntf.
Por ej empl o:
scanf(" %c %d %f %s", &ch, &i , &x, cad);
Observar que se ant epone & a l os nombr es del as vari bl es, except o al a cadena de caracteres.
El uso del operador &se ver mas a f ondo al est udi ar los apunt ador es.
Constant es
ANSI C per mi te decl arar const ant es.
Es pareci do a decl arar una vari abl e, except o que el val or no puede ser cambi ado.
La pal abra cl ave const se usa para decl arar una constant e:
const a = 1;
i nt a = 2;
Se puede usar const ant es o despus del ti po.
Es usual i ni ci ali zar una constant e con un val or, ya que no puede ser cambi ada de al guna otra
f or ma.
Constant es
La di recti va del prepr ocesador #defi ne es un mt odo ms fl exi bl e para defi ni r const ant es en un
pr ograma.
Fr ecuent ement e se vel a decl araci n const enl os par metr os del af unci n, i ndi cando que l a
f unci n no cambi ar el val or del parmetr o.
Por ej empl o:
char *strcpy( char *dest, const char *ori g);
El segundo argument o ori g es una cadena de C que no ser al terada, cuando se usel af unci n
de l a bi bli oteca para copi ar cadenas.
Pr cti ca 2
En una porci n de pr ograma cual qui era, seal ar l as vari abl es l ocal es, gl obal es y constant es.
Escri bi r un pr ograma en Cdonde se usen vari abl es gl obal es yl ocal es.
Reali zar l os ej erci ci os pr opuest os.
Ej erci ci os
1. Leer l a entrada de dos nmer os y mostrar el dobl e pr oduct o del pri mer o menos la mi tad del
segundo.
2. Lea y escri ba su nombr e, apel li do pat er no, apelli do mat er no y nmer o de C.I. enun f or mat o
adecuado.
3. Escri bi r un pr ograma paraimpri mi r vari as veces el ej erci ci o 2. Puede usar vari as i nstrucci ones
pri ntf, con un caracter de nueva l nea en cada una, o una i nstrucci n con vari os caract eres
nueva l nea enl a cadena de f or mat eo.











Cap tul o 3
Oper ador es de C
Oper ador es Ari t mti cos
+ suma, - resta, * mul ti pli caci n, / di vi si n y % mdul o (resi duo del a di vi si n de ent er os)
Asi gnaci n =, por ej empl o: i =4; ch=' y';
I ncrement o ++ y decremento-- unari o. Por ej empl o: x++ es l o mi s mo y ms efi ci ent e que x=x+1.
Los operador es ++ y -- pueden ser prefij os o postfij os. Cuando son prefij os, el val or es cal cul ado
ant es de que l a expr esi n sea eval uada, y cuando es postfij o despus.
Oper ador es unari os
En el si gui ent e ej empl o, ++z es prefij o y-- es postfij o:
i nt x, y, z;
mai n()
{
x=( ( ++z ) - ( y-- ) ) %100;
}
Que es equi val ent e a:
i nt x, y, z;
mai n()
{
z++;
x =( z-y ) %100;
y--;
}
Utili zaci n del os operadores
Exi ste una f or ma ms corta para expresar cl cul os en C, si seti enen expresi ones como: i =i + 3;
o x = x *(y + 2); , pueden ser reescri tas como:
expr1 oper = expr 2
Lo cual es equi val ent e, pero ms efi ci ent e que:
expr1 = expr 1 oper expr 2
Por l o que pode mos reescri bi r l as expresi ones ant eri ores como:
i += 3; y x *= y + 2; respecti va ment e.
Oper ador es de Compar aci n
El operador para pr obar l aigual dad es ==
Se debe tener cui dado de no escri bi r acci dent al ment e un sl o =, por ej: if ( i =j ) ... copi a el val or
de j en i , l ocual seri nter pretado como VERDADERO, si j es di f erent e de cer o, que es al go
di f erent e que compar ar i con j .
Di f erent e ( noi gual ) es !=, otros operador es son: < menor que, > mayor que, <= menor que o
i gual a y >= ( mayor que oi gual a).
Oper ador es l gi cos
Los operador es l gi cos son usual ment e usados con sent enci as condi ci onal es orel aci onal es, l os
oper ador es bsi os l gi cos son:
&& Y l gi co,
|| Ol gi co
! negaci n
Pr ecedenci a del os operador es
Es necesari oser cui dadosos con el si gni fi cado de expresi ones tal es como a + b *c, dependi endo
de l o que se desee hacer (a + b) * c o a +( b * c)
Todos l os operador es ti enen una pri ori dad, l os operador es de mayor pri ori dad son eval uados
ant es que l os que ti enen menor pri ori dad.
Los operador es que ti enen l a mi s ma pri ori dad son eval uados dei zqui er da a der echa, por l o que:
a - b- c es eval uado como (a - b) - c
Pr ecedenci a del os operador es
De acuer do al o ant eri or, l a si gui ent e expr esi n:
a < 10 &&2 * b < c; es i nterpr etada como:
(a < 10) &&( ( 2 * b) < c );
En tant o que:
a = b = 10 / 5 + 2; se eval ua como:
a =( b =( 10 / 5) + 2);
Ej erci ci os
1. Escri bi r un pr ograma paraleer un``fl otant e'' que represent a un nmer o de grados Cel si us, e
i mpri me como un ``fl otante' ' l atemper at ura equi val ent e en grados Fahr enhei t. La sali da puede
ser del a si gui ent e f or ma: 100. 0 grados Cel si us son 212. 0 grados Fahr enhei t.
2. Escri bi r un pr ograma que lea el radi o de un c rcul o como un nmer o fl otant e y muestre el rea y
el per metr o del c rcul o.
Ej erci ci os
3. Dados ci ert os cent metr os como entrada de ti pofl otant e, i mpri mi r su equi val enci a a pi es
( ent er os) y pul gadas (fl otant e, 1 deci mal ), dandol as pul gadas con una preci si n de unl ugar
deci mal Suponer 2. 54 cent metr os por pul gada, y 12 pul gadas por pi e.
Si l a entrada es 333. 3, el f or mat o del a sali da deber ser:
333. 3 cent metr os son 10 pi es 11. 2 pul gadas.












Cap tul o 4
I nstrucci ones de Entrada/Sali da
Funci n exi t
La f unci n exi t ti ene el si gui ente pr ot oti po de acuer do al a cabecera #i ncl ude <stdl i b. h>:
voi d exi t(i nt stat us);
La f unci n pr oducel a ter mi nacn nor mal del programa yl a devol uci n de stat us al proceso
padr e o al si stema operati vo. El val or de stat us es usado parai ndi car como ha ter mi nado el
pr ograma:
Si n error: sal e con un val or EXI T_SUCCESS en una ter mi naci n
Con error: sal e con un val or EXI T_FAI LURE en una termi naci n
Por l otant o cuando se encuentre un error sell amar a l af unci n como exi t( EXI T_FAI LURE) para
ter mi nar un pr ograma con err ores.
Fl uj os
Los fl uj os son una f or ma flexi bl e y efi ci ent e paral eer y escri bi r dat os.
Se ti enen predefi ni dos 3fluj os ( en stdi o. h): stdi n, stdout y stderr.
Todas ell as usan text o como mt odo de E/S.
Los fl uj os stdi n y stdout pueden ser usados con archi vos, programas, di sposi ti vos de E/S como el
tecl ado, l a consol a, etc. El fl uj ostderr si empr e va al a consol a ol a pant all a.
La consol a es el di sposi ti vopr edefi ni do para stdout y stderr. El tecl adol o es para st di n.
Los fl uj os predefi ni dos son aut omti cament e abi ert os.
E/S Bsi ca
Entrada/Sali da f or mat eada
pri ntf
El prot oti po del af unci n esta defi ni do como:
i nt pri ntf( const char *f or mat o, li sta arg...); que muestra en stdout l ali sta de
argument os de acuer do al f or mat o especi fi cado. La f unci n devuel ve el nmer o de
caract eres i mpr esos.
La cadena de f or mat eo ti ene dos ti pos de obj et os:
car acteres ordi nari os -- estos son copi ados al a sali da.
especi fi cadores de conversi n -- precedi dos por %yli stados enl a si gui ent e tabl a:
Entrada/Sali da f or mat eada
Entre el %y el caracter de for mat o se puede poner:
- si gno menos paraj usti fi car al ai zqui er da.
nmer o enter o para el ancho del campo.
m. d en donde mes el ancho del campo, y d es l a preci si n de d gi tos despus del punt o
deci mal o el nmer o de caract eres de una cadena.
Por l otant o:
pri ntf(" %- 2. 3f\n", 17. 23478); l a sali da en pant all a ser:
17. 235
y pri ntf("VAT=17. 5%%\ n"); general a si gui ent e sali da:
VAT=17. 5%
Entrada/Sali da f or mat eada
scanf
La f unci n esta defi ni da como si gue:
i nt scanf( const char *f or mat o, li sta arg...); Lee del a entrada estndar (stdi n) y col ocal a
entrada enl a di recci n delas vari abl es i ndi cadas enli sta args. Regr esa el nmer o de
caract eres l e dos.
La cadena de control de f ormat eo es si mi l ar al a de pri ntf.
Entrada/Sali da f or mat eada
I mportant e: se requi erel adi recci n del a vari abl e o un apunt ador con scanf.
Por ej empl o:
scanf(" %d", &i );
Para el caso de un arregl oo cadena sl ose requi ere el nombr e del mi s mo para poder usar scanf
ya que corresponde al i ni cio del a di recci n del a cadena.
char cadena[ 80];
scanf(" %s", cadena);
Cap tul o 5
Estruct ura de control
Ta mbi nll amada estruct ura condi ci onal .
Son di sti nt os mt odos con l os que C contr ol a el fl uj olgi co de un pr ograma.
Los operador es rel aci ones bi nari os que se usan son:
==, !=, <, <=, > y >=
ade ms l os operador es l gi cos bi nari os:
||, &&
y el operador l gi co unari ode negaci n !, que sl otoma un argument o.
La sent enci aif
Pri mer a f or ma:
if (condi ci on)
sent enci a;
Segunda f or ma:
if (condi ci on)
sent enci a1;
el se
sent enci a2;
Tercera f or ma:
if (condi ci on1)
sent enci a1;
el seif(condi ci on2)
sent enci a2;
...
el se
sent enci an;
Oper aci n del a sent enci aif
Ej empl o de uso deif
mai n()
{
i nt x, y, w;
........
if (x>0) // si l a condi ci n es ver dadera
{
z=w; // s e ej ecuta este grupo de sent enci as yl uego sal e
....... // del a estruct uraif
}
el se
{
z=y; // si l a condi ci n es fal sa se ej ecuta todol o que
....... // est asoci ado conl a pal abr a el se
}
}
El operador ?
El operador ter nari o condi ci onal ? es ms efi ci ent e que l a sent enci aif. Suf or mato es:
expr esi on1 ? expr esi on 2: expr esi on3;
Que es equi val ent e al a si gui ent e expr esi n:
if (expr esi on1) then expresi on2
el se expr esi on3;
Por ej empl o, para asi gnar el mxi mo de a y b al a vari abl e z, usando ?, tendr amos:
z =(a>b) ? a: b;
que es l o mi s mo que:
if (a > b) z = a;
el se z = b;
Ej empo de uso del operador ?
Se pueden ej ecut ar una oms ll amadas de f unci n usando el operador ? poni ndol as enl as
expr esi ones que f or manl os operandos:
f 1(i nt n){
pri ntf(" %d ", n);
}
f 2(){
pri ntf("i ntroduci do\n");
}
mai n(){
i nt t;
pri ntf(": ");
scanf(" %d", &t);
/*i mpri me mensaj e apr opi ado */
t ? f 1(t) +f 2() : pri ntf("Se di un cer o\n");
}
La sent enci a s wi tch
Aunque conl a estruct uraif ... el seif se pueden reali zar compr obaci ones ml ti pl es, en ocasi ones
no es muy el egant e, ya que el cdi go puede ser di f cil de segui r y puede conf undi r i ncl uso al
aut or transcurri do un ti empo.
C ti enei ncor porada una sent enci a de bi f urcaci n ml ti pl ell amada s wi tch.
La comput ador a compr ueba una vari abl e sucesi vamentefrent e a una li sta de constant es
ent eras o de caracter.
Despus de encontrar una coi nci denci a, l a comput adora ej ecutal a sent enci a o bl oque de
sent enci as que se asoci an conl a constant e.
For ma del a sent enci a s wi tch
s wi tch( vari abl e) {
case constant e1:
secuenci a de sent enci as
br eak;
case constant e2:
secuenci a de sent enci as
br eak;
case constant e3:
secuenci a de sent enci as
br eak;
...
def aul t:
secuenci a de sent enci as
}
Oper aci n del a sent enci a swi tch
La sent enci a def aul t es opci onal y se ej ecuta si no coi nci de ni nguna constant e con l a vari abl e.
Cuando se encuentra una coi nci denci a, l a comput adora ej ecutal as sent enci as asoci adas con el
case hasta encontrar l a sentenci a break conl o que sal e del a estruct ura s wi tch.
Las li mi taci ones que ti enela sent enci a s wi tch... case respect o al a estruct uraif son:
- Sl ose ti ene posi bili dad de revi sar una sol a vari abl e.
- Con s wi tch sl ose puede compr obar por i gual dad, mi entras que coni f puede ser con
cual qui er operador rel aci onal .
- No se puede pr obar ms de una constant e por case.
Oper aci n del a sent enci a swi tch
Se puede si mul ar el l ti mo punt o no teni endo sent enci as asoci adas a un case, es deci r, teni endo
una sent enci a nul a donde sl o se pone el caso, conl oque se per mi te que el fl uj odel programa
cai ga al omi ti r l as sent enci as.
s wi tch(l etra){
case' a':
case' e':
case'i':
case' o':
case' u' :
numvocal es++;
br eak;
case' ':
numesp++;
br eak;
def aul t:
numotras++;
br eak;
}
Ej erci ci os
1. Escri bi r un pr ograma que lea dos caracteres, ei mpri ma su val or cuando se pueda i nter pretar
como un nmer o hexadeci mal . Acept ar l etras mayscul as y mi nscul as paral os val ores del 10 al 15.
2. Leer un val or ent er o. Suponer que el nmer o es un d a del a semana. Suponer que 0
corresponde a Domi ngo y as sucesi vament e. I mpri mi r el nombr e del d a.
Ej erci ci os
3. Dados como entrada 3 ent er os represent andol a fecha como d a, mes, ao, i mpri mi r l af echa del
d a ant eri or. Por ej empl o para una entrada como: 1 31992 La sali da ser: Fecha ant eri or a 1- 3- 1992 es
29- 02- 1992
4. Escri bi r un pr ograma el cual l ea dos val ores ent er os. Si el pri mer o es menor que el segundo, que
i mpri ma el mensaj e`` Arri ba''. Si el segundo es menor que el pri mer o, que i mpri ma el mensaj e`` Abaj o''.
Si l os nmer os soni gual es, que i mpri ma el mensaj e``igual''. Si hay un error enl al ect ura del os dat os,
que i mpri ma un mensaj e cont eni endol a pal abra `` Error'' y haga exi t( 0);


Estruct ura de control
Parte 2: Operaci ones i terati vas
Estruct uras iterati vas
Ta mbi nll amadas estruct uras repeti ti vas.
Se usan para repeti r un conj unt o dei nstrucci ones hasta que se cumpl e ci erta condi ci n.
En C exi sten tres ti pos de oper aci ones repeti ti vas: La proposi ci n whil e, l a proposi ci n f or yl a
pr oposi ci n do- whil e
La sent enci a f or
La sent enci a f or ti ene el si gui ent e f or mat o:
f or( expresi on1; expresi on2; expr esi on3)
sent enci a;
o { bl oque de sent enci as }
Oper aci n del a sent enci a for
Ej empl o de uso de f or
i nt X;
mai n()
{
for( X=3; X>0; X--)
{
pri ntf("X=%d\n", X);
}
}
general a si gui ent e sali da a pant all a...
X=3
X=2
X=1
Otr os ej empl o de uso de f or
Todos l as si gui ent es sent enci as f or son vli das en C.
f or ( x=0; ( (x>3) &&(x<9) ); x++ )
f or ( x=0, y=4; ( (x>3) &&(x<9) ); x++, y+=2)
f or ( x=0, y=4, z=4000; z; z/=10)
En el segundo ej empl o se muestral af or ma como mlti pl es expresi ones pueden apar ecer,
si empr e y cuando estn separ adas por una coma ,
En el tercer ej empl o, el ci clo conti nuari terando hasta que z se convi erta en 0.
La sent enci a whi l e
La sent enci a whi l e es otroci cl o o bucl e di sponi bl e en C. Suf or mat o es:
whi l e( expresi on) sent enci a;
donde sentenci a puede ser una sent enci a vac a, una sent enci a ni ca o un bl oque de sent enci as
que se repeti rn.
Cuando el fl uj o del programa ll ega a estai nstrucci n, pri mer o se revi sa si l a condi ci n es ver dad
par a ej ecutar l a(s) sent enci a(s), y despus el ci cl o whi le se repeti r mi entras l a condi ci n sea
ver dadera.
Cuandoll ega a ser fal sa, el contr ol del programa pasa a l al nea que si gue al ci cl o.
Ej empl o de uso de whi l e
En el si gui ent e ej empl o se muestra una ruti na de entrada desde el tecl ado, l a cual se ci cl a
mi entras no se pul se A:
mai n()
{
char carac;
carac =' \0' ;
whil e( carac !=' A' ) carac = getchar();
}
NOTA: tant o el ci cl of or, como el ci cl o whi l e compr uebanl a condi ci n enl o al to del ci cl o, por l o
que el cdi go dentr o del cicl o no se ej ecut a si empr e.
Otr o ej empl o de uso de whil e
mai n()
{
i nt x=3;
whil e( x>0 )
{
pri ntf("x = %d\n", x);
x--;
}
}
que general a si gui ent e sali da en pant all a:
x = 3
x = 2
x = 1
... y otro ej empl o ms
El ci cl o whi l e pueda acept ar tambi n expresi ones, y no sol ament e condi ci ones.
whi l e( x-- );
whi l e( x = x + 1);
whi l e( x += 5)
Sol ament e cuando el resul tado de x--, x=x+1 o x+=5 sea cer o, l a condi ci nf all ar y se podr sali r
del ci cl o.
Pode mos reali zar una operaci n compl eta dentr o dela expr esi n:
mai n()
{
char carac;
carac =' \0' ;
whil e( (carac = getchar()) !=' A' )
putchar(carac);
}
La sent enci a do- whi l e
La f or ma general del ci cl o es:
do {
sent enci a;
} whil e(condi ci n);
El bucl e do... whil e exami na l a condi ci n enl a parte baj a del mi s mo.
Un ci cl o do... whil e si empre se ej ecut a al menos una vez.
Aunque no son necesari as las ll aves cuando sl o est pr esent e una sent enci a, seusan
nor mal ment e por l egi bili dad y para evi tar conf usi n(respect o al l ect or, y no del compi l ador) con
l a sent enci a whi l e.
Ej empl o de uso de do- whi l e
En el si gui ent e pr ograma se usa un ci cl o do... whil e paral eer nmer os desde el tecl ado hasta
que uno de ell os es menor que oi gual a 100:
mai n()
{
i nt num;
do
{
scanf(" %d", &num);
} whil e( num>100 );
}
Otr o uso comn del a estruct ura do... whil e es una ruti na de sel ecci n en un men, ya que
si empr e se requi ere que se ej ecut e al menos una vez.
Otr o ej empl o de uso de do- whi l e
mai n()
{
i nt x=3;
do
{
pri ntf("x = %d\n", x--);
}
whil e( x>0 ) ;
}
Us o de break y conti nue
La sent enci a break se usa para f orzar l ater mi naci ni nmedi at a de un ci cl o, sal tandol a pr ueba
condi ci onal del ci cl o.
Cuando se encuentral a sent enci a break en un bucl e, l a comput ador a ter mi na i nmedi atament e
el ci cl o y el control del pr ograma pasa al a si gui ent e sent eci a del ci cl o.
La sent enci a conti nue f unci ona de manera si mi l ar al asent enci a break. Si n embargo, en vez de
f orzar l a sali da, conti nue f uerza l a si gui ent ei teraci n, por l o que sal ta el cdi go que f al ta para
ll egar a pr obar l a condi ci n.
Ej empl o de uso de break
Est e pr ograma muestra en pant all al os nmer os del 0al 10, cuando al canza el val or 10 se
cumpl el a condi ci n del a sent enci aif, se ej ecutal a sent enci a break y sal e del ci clo.
mai n()
{
i nt t;
for(t=0; t<100; t++)
{
pri ntf(" %d ", t);
if (t==10) break;
}
}
Ej empl o de uso de conti nue
El si gui ent e pr ograma vi suali zar sl ol os nmer os pares:
mai n()
{
i nt x;
for( x=0; x<100; x++)
{
if (x%2)
conti nue;
pri ntf(" %d ", x);
}
}
Ej erci ci os
1. Anali zar l os ej empl os resuel tos de esta secci n.
2. Escri bi r un pr ograma que l ea 5 nmer os y encuentre el promedi o, el mxi mo y el m ni mo de esos
val ores.
3. Reali zar l os dems ej erci ci os del a hoj a de prcti ca N 5

Cap tul o 6
Funci ones
Defi ni ci n
Una f unci n es un conj unto de decl araci ones, defi ni ciones, expr esi ones y sent enci as que
reali zan una tarea espec fi ca.
El f or mat o general de una funci n en C es:
especi fi cador _de_ti po nombr e_de_f unci n( li sta_de_par metr os )
{
vari abl es l ocal es
cdi go del af unci n
}
Car act er sti cas de una f unci n
El especi fi cador _de_ti poi ndi ca el ti po del val or que l af unci n devol ver medi ante el uso de
ret ur n.
El val or puede ser de cual qui er ti po vli do.
Si no se espec fi ca un val or, ent onces l a comput ador a asume por def ect o quel afunci n
devol ver un resul tado enter o.
No se ti enen si empr e que incl ui r parmetr os en una funci n. l ali sta de parmetros puede estar
vac a.
Las f unci ones ter mi nan y regr esan aut omti cament e al procedi mi ent o que l as lla m cuando se
encuentral a l ti ma ll ave }
Se puede f orzar el regreso ant es usandol a sent enci a ret ur n.
Ade ms l af unci n ret ur n se usa para devol ver un val or.
Ej empl o de una f unci n
Funci ones voi d
Las f unci ones voi d dan una f or ma de emul ar, l o que en otros l enguaj es se conocen como
pr ocedi mi ent os ( por ej empl o, en PASCAL).
Se usan cuando no requi ere regresar un val or.
Enl af unci n del ej empl o sigui ent e no esta defi ni do ni ngn parmetr o, y por otra parte
tampoco se empl ea l a sentenci a ret ur n para regresar de l af unci n.
Ej empl o de f unci n voi d
Se muestra un ej empl o que i mpri me l os cuadrados de ci ertos nmer os.
voi d cuadrados()
{
i nt contador;
for( cont ador =1; cont ador<10; cont ador ++)
pri ntf(" %d\n", cont ador*cont ador);
}
mai n()
{
cuadrados();
}
Pr ot oti pos de f unci ones
Ant es de usar una f unci n C debe tener conoci mi ent o acerca del ti po de dat o que regresar y el
ti po del os parmetr os que l af unci n espera.
El estndar ANSI de Ci ntroduj o una nueva ( mej or) f orma de hacer l o ant eri or respect o al as
versi ones previ as de C.
Lai mportanci a de usar pr ototi pos de f unci ones es l a si gui ent e:
Se hace el cdi go ms estruct urado y por l otant o, ms fcil del eer.
Se per mi te al compi l ador de Crevi sar l a si ntaxi s del as funci ones ll amadas.
Lo ant eri or es hecho, dependi endo del al cance del afunci n. Bsi cament e si una funci n ha si do
defi ni da ant es de que sea usada ( oll amada), ent onces se puede usar l af unci n sin pr obl emas.
Decl araci n de f unci ones
La decl araci n si mpl emente manej a el ti po de dat o que l af unci n regresa y el ti po de
par metr os usados por l afunci n.
Es una prcti ca usual y conveni ent e escri bi r el prot oti po de todas l as f unci ones al pri nci pi o del
pr ograma, si n embargo esto no es estri ctament e necesari o.
Para decl arar un pr ot oti pode una f unci n sei ndi car el ti po de dat o que regresarl af unci n, el
nombr e del af unci n y entre parnt esi s l ali sta del ti po del os parmetr os de acuer do al orden
que aparecen enl a defi ni cin del af unci n.
Por ej empl o:
i nt l ongcad( char []);
Lo ant eri or decl ara una f unci nll amada l ongcad que regr esa un val or ent er o y acept a una
cadena como parmetr o.
Funci ones predefi ni das
El l enguaj e de pr ogramaci n Cti ene una extensa li brer a de f unci ones predefi ni das para di versos
usos.
Para utili zar estas f unci ones predefi ni das hay que i ncl ui r el archi vo de cabecera que conti ene l as
decl araci ones de stas.
Por ej empl o para utili zar pri ntf() se debe i ncl ui r stdi o. h; para utili zar sqrt() sei ncl uye mat h. h; ...
Las f unci ones predefi ni das se pueden cl asi fi car en categor as. Las ms i mportantes son:
f unci ones de entrada/sali da; f unci ones mat emti cas; f unci ones para manej o de cadenas;
f unci ones de conversi n de ti pos; f unci ones del si stema; f unci ones para manej o de archi vos;
f unci ones de ti empo.
Ej erci ci os
1. Escri bi r una f unci n``reempl aza'', l a cual toma una cadena como parmetr o, le reempl aza todos l os
espaci os del a cadena por un gui n baj o, y devuel ve el nmer o de espaci os reempl azados. Por ej empl o:
char cadena[] = "El gat o negr o";
n = reempl aza( cadena );
deber devol ver:
cadena converti da "El _gat o_negr o
n = 2
2. Escri bi r un pr ograma que l ea una l nea de text o en un buff er ( una cadena de caract eres) usandol a
f unci n gets y cal cul el al ongi tud del al nea ( NOusar la f unci n strl en).

Cap tul o 7
Arrays (arregl os) y Cadenas
Defi ni ci n y caracteri sti cas
Los arregl os o arrays son una col ecci n de vari abl es del mi s mo ti po que se ref erenci an
utili zando un nombr e comn.
Un arregl o consta de posi ciones de me mori a conti gua. La di recci n ms baj a corresponde al
pri mer el ement o yl a ms alta al l ti mo.
Un arregl o puede tener una o vari as di mensi ones. Cuando ti ene una di mensi on sell ama vect or y
cuando ti ene mas de una se denomi na matri z.
Para acceder a un el emento en parti cul ar de un arregl o se usa un ndi ce o numer o de or den.
Decl araci on
El f or mat o para decl arar un arregl o uni di mensi onal es:
ti po nombr e_arr [ tamao ]
Por ej empl o, para decl arar un arregl o de ent er os ll amado li stanumcon di ez el ement os se hace
de l a si gui ent e f or ma:
i nt li stanum[ 10];
En C, todos l os arregl os usan cer o como ndi ce para el pri mer el ement o. Por tanto, el ej empl o
ant eri or decl ara un arregl ode ent er os con di ez el ement os desde li stanum[ 0] hastali stanum[ 9].
Acceso al os el ement os del array
Arr egl os mul ti di mensi onal es
C per mi te arregl os con ms de una di mensi n, el f or mat o general es:
ti po nombr e_arr [ tam1 ][ ta m2 ] ... [ tamN];
Ej empl o, arregl o bi di mensi onal de ent er os:
i nt tabl adenums[ 50][ 50];
Para decl arar cada di mensi nll eva sus pr opi os parntesi s cuadrados.
Para acceder l os el ement os se pr ocede de f or ma si mi l ar al arregl o uni di mensi onal:
tabl adenums[ 2][ 3] = 15;
num= tabl adenums[ 25][ 16];
Ej empl o de uso de un array
Se asi gna al pri mer el emento de un arregl o bi di mensi onal cer o, al si gui ent e 1, yas
sucesi vament e.
mai n()
{
i nt t,i, num[ 3][ 4];
for(t=0; t<3; ++t)
for(i =0; i <4; ++i )
num[ t][i]=(t*4) +i *1;
for(t=0; t<3; ++t)
{
for(i =0; i <4; ++i )
pri ntf("num[ %d][ %d] =%d ", t,i, num[ t][i]);
pri ntf("\n");
}
}
I ni ci ali zaci on de arregl os
En C se per mi tel ai ni ci ali zaci n de arregl os, debi endo segui r el si gui ent e f or mat o:
ti po nombr e_arr[ tam1 ][ ta m2 ] ... [ tamN] ={li sta- val or es};
Por ej empl o:
i nt i[10] ={1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
i nt num[ 3][ 4] ={ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11};
Cadenas
A di f erenci a de otros l enguaj es de pr ogramaci n que e mpl ean un ti po denomi nado cadena
stri ng para mani pul ar un conj unt o de si mbol os, en C, se debe si mul ar medi ant e un arregl o de
caract eres, en donde l a termi naci n del a cadena se debe i ndi car con nul o. Un nul ose especi fi ca
como ' \0'.
Cuando se decl are un arregl o de caracteres se debe consi derar un carcter adi ci onal al a cadena
ms l arga que se vaya a guar dar. Por ej empl o, si se qui ere decl arar un arregl o cadena que
guar de una cadena de di ez caract eres, se har como:
char cadena[ 11];
I ni ci ali zaci on de cadenas
Se pueden hacer tambi nini ci ali zaci ones de arregl os de caracteres en donde automti cament e
C asi gna el caracter nul o al fi nal del a cadena, del a si gui ent e f or ma:
char nombr e_arr[ tam] ="cadena";
Por ej empl o, el si gui ent e frag ment oi ni ci ali za cadena con hol a:
char cadena[ 5] ="hol a";
El cdi go ant eri or es equi val ent e a:
char cadena[ 5] ={' h',' o','l',' a',' \0' };
Utili zaci on de cadenas
Para asi gnar l a entrada estndar a una cadena se puede usar l af unci n scanf conl a opci n %s
( observar que no se requi ere usar el operador &), deigual f or ma para mostrarl oenl a sali da
estndar.
Por ej empl o:
mai n()
{
char nombr e[ 15], apelli dos[ 30];
pri ntf("I ntroduce tu nombr e: ");
scanf(" %s", nombr e);
pri ntf("I ntroduce tus apelli dos: ");
scanf(" %s", apelli dos);
pri ntf("Usted es %s %s\n", nombr e, apelli dos);
}
Utili zaci on de cadenas
El l enguaj e C no manej a cadenas de caract eres, como se hace con ent er os ofl otant es, por l o que
l osi gui ent e no es vli do:
mai n()
{
char nombr e[ 40], apelli dos[ 40], compl et o[ 80];
nombr e="J os Mar a"; /*Il egal */
apelli dos=" Mor el os y Pavn"; /*Il egal */
compl et o=" Gr al. "+nombre+appelli dos; /*Il egal */
}
Ej erci ci os
1. Escri bi r un pr ograma que l ea un arregl o de cual qui er ti po( ent er o, fl otant e, char), se podr a pedi r
al usuari o que i ndi que el tipo de arregl o, y tambi n escri bi r un pr ograma que revi se el arregl o para
encontrar un val or en particul ar.
2. Escri bi r un pr ograma paral eer un text o hasta el fi n- de- dat os, y mostrar una estad sti ca del as
l ongi tudes del as pal abras, est o es, el nmer o total de pal abras del ongi tud 1 que hayan ocurri do, el
total del ongi tud 2 y as sucesi vament e.
Defi ne una pal abra como una secuenci a de caract eres al f abti cos. Se debern permi ti r pal abras
hasta de una l ongi tud de 25 l etras.
Ej erci ci os
1. Leer un text o, un caract er al a vez desde l a entrada estndar ( que es el tecl ado), ei mpri mi r cada
l nea enf or ma i nverti da. Leer hasta que se encuentre un fi nal - de- dat os (tecl ar CONTROL- D para
generarl o).
El programa podr a pr obarse tecl eando pr ogr ev | pr ogrev para ver si una copi a exacta del a
entrada ori gi nal es recreada.
Paral eer caracteres hasta el fi nal de dat os, se puede usar un ci cl ocomo el si gui ent e
char ch; whi l e( ch=getchar(), ch>=0 ) /* ch < 0i ndi ca fi n- de- dat os */ o
char ch; whi l e( scanf( "%c", &ch ) == 1) /* sel ee un caract er */

Cap tul o 8
Apunt ador es o punt er os
I ntroducci n
El l enguaj e C usal os apuntador es enf or ma ext ensi va. Por qu?
Es l a ni ca f or ma de expresar al gunos cl cul os.
Se genera cdi go compacto y efi ci ent e.
Es una herrami ent a muy poder osa.
C usa apunt ador es expl ci tament e con:
Arr egl os,
Estruct uras y
Funci ones
Defi ni ci n y decl araci n
Un apunt ador es una vari abl e que conti enel a di recci n en me mori a de otra vari abl e. Se pueden
tener apunt ador es a cual qui er ti po de vari abl e.
El operador unari o o mondi co &devuel vel a di recci n de me mori a de una vari abl e.
El operador dei ndi recci n o deref erenci a * devuel ve el cont eni do de un obj et oapunt ado por
un apunt ador.
Para decl arar un apunt ador para una vari abl e ent era hacer:
i nt *apunt ador;
Asoci aci n apunt ador- vari abl e
I ni ci ali zaci n de apunt adores
Por ej empl o:
mai n()
{
i nt *ap;
*ap = 100;
}
puede generar un error en ti empo de ej ecuci n o present ar un comportami ent oerrti co.
El uso correct o ser: mai n()
{
i nt *ap;
i nt x;
ap = &x;
*ap = 100;
}
Ari t mti ca de apunt ador es
Conl os apunt ador es se puede reali zar tambi n ari t mti ca ent era, por ej empl o:
mai n()
{
fl oat *fl p, *fl q;
*fl p = *fl p + 10;
++*fl p;
(*fl p) ++;
fl q =fl p;
}
Utili zaci n de apunt ador es
NOTA: Un apunt ador a cual qui er ti po de vari abl es es una di recci n en me mori a -- l a cual es una
di recci n ent era, per o un apunt ador NOes un ent er o.
La razn por l a cual se asoci a un apunt ador a un ti po de dat o, es por que se debe conocer en
cuant os byt es esta guar dado el dat o. De tal f or ma, que cuando sei ncrement a un apunt ador, se
i ncrement a el apunt ador por un`` bl oque'' de me mori a, en donde el bl oque esta en f unci n del
tamao del dat o.
Por l otant o para un apuntador a un char, se agrega un byt e al a di recci n y para un apunt ador a
ent er o o a fl otant e se agregan 4 bytes. De esta f or ma si a un apunt ador afl otante sel e suman 2,
el apunt ador ent onces se mueve dos posi ci ones fl oat que equi val en a 8 byt es.

You might also like