You are on page 1of 11

1 1 INSTRUCCIONES EN C INSTRUCCIONES EN C

Cada accin o instruccin acaba con ; .


En una lnea puedo tener varias instrucciones separadas por ;
Si tengo !s de una accin a reali"ar# las deliitareos con llaves$ % &
CO'ENT(RIOS CO'ENT(RIOS
Los comentarios son mensajes dirigidos a cualquiera que lea el cdigo fuente, para hacer ms fcil la
comprensin del programa. Un comentario C empieza con los caracteres /* y finaliza con */. ueden ocupar
ms de una l!nea, pero no pueden anidarse.
/* Comentario en dos
lneas. */
int x; /* Comentario en cola de una lnea de codificacin */
"am#i$n podemos tener comentarios de una l!nea, comenzndola por )).
// esto es un comentario de una lnea
INSTRUCCI*N +E (SI,N(CI*N INSTRUCCI*N +E (SI,N(CI*N
variable - e.presin;
ESTRUCTUR(S (/TERN(TI0(S ESTRUCTUR(S (/TERN(TI0(S
Estructura alternativa$ i1
La instruccin i1 permite e%aluar una e&presin en t$rminos de %erdadero o falso para ejecutar una accin u
otra. 'u sinta&is es la siguiente(
i1 )condicin*+
instrucciones,; )) si hay una sola instruccin se pueden omitir las lla%es
-.else +
instrucciones/0 )) si hay una sola instruccin se pueden omitir las lla%es
-1
Condicin es una e&presin num$rica, relacional o lgica. 2jemplos(
if (a == b*5){
x = 4; a = a + x;

else b = !;
if (x) /* e"ui#alente a if (x $= !) */
ESTRUCTUR( else i1
i1 )condicin ,* +
instrucciones,0 )) si hay una sola instruccin se pueden omitir las lla%es
- . else i1 )condicin /* +
instrucciones/ 0
- 1 2 .else +
01/10/2014 REVISIN POR LA PROFESORA DEL MDULO 1/11


instrucciones3 0
-1
Las condiciones se e%al4an de arri#a a a#ajo. Cuando se encuentra la primera condicin cierta, se ejecutan
las instrucciones correspondientes y luego el flujo del programa sale de la estructura. 'i ninguna de las
condiciones es cierta, se ejecutan, en su caso, las instrucciones del else.
Estructura alternativa 3ltiple$ s4itc5
La sentencia s4itc5 permite ejecutar una de %arias acciones, en funcin del %alor de una e&presin num$rica
entera. 'e emplea para decisiones m4ltiples.
s4itc5 )e&presin*+
case %alor ,(
+ instrucciones ,0 - .brea601
.case %alor /(1
+ instrucciones /0 - .brea6;1
...
.de1ault(1
+ instrucciones 0 -
-
5alor ,, %alor/, etc. 6an de ser constantes enteras.
La sentencia s4itc5 e%al4a la e&presin u#icada entre par$ntesis y compara su %alor con las constantes de
cada case. Cuando se encuentra un case cuya constante coincida con el %alor de la e&presin se ejecutan las
instrucciones correspondientes, continuando hasta el final del #loque sal%o que encuentre una sentencia que
transfiera el control fuera del #loque )normalmente brea6*.
'i no e&istiera ninguna constante igual al %alor de la e&presin, entonces se ejecutar!an las instrucciones del
apartado de1ault.
2jemplo
s%itc& ('uesto){
case () 'rintf(*+nCam'en de li,a +n*);
brea-;
case 4) 'rintf(*+n.ccede a /.0.1...+n*);
brea-;
case (2)
case (3) 'rintf(*+n4romocin+n*);
brea-;
default) 'rintf(*+n/n e"ui'o del montn +n*);

ESTRUCTUR(S RE7ETITI0(S ESTRUCTUR(S RE7ETITI0(S
Estructura 45ile
La estructura 45ile# que se corresponde con la estructura 7829":;' del pseudocdigo, ejecuta un #ucle
cero o ms %eces, dependiendo del %alor de una e&presin.
45ile )condicin*+
instrucciones 0 )) si hay una sola instruccin se pueden omitir las lla%es
-
<onde condicin es cualquier e&presin num$rica, relacional o lgica.
2/11 REVISIN POR LA PROFESORA DEL MDULO 01/10/2014
2jemplos(
1uncin "ue toma caracteres 'or teclado &asta "ue se 'ulsa la ..
#oid es'erar5caracter(#oid)
{
c&ar c;
c = 6+!6; /* 7niciali8ar c a nulo */
%&ile (c $= 6.6 ) c = ,etc&ar();

Estructura do845ile
2jecuta un #ucle una o ms %eces seg4n el %alor de una condicin. 2qui%ale al :22"8: del pseudocdigo
cam#iando el %alor de la condicin. 'u sinta&is(
do +
instrucciones 0 )) si hay una sola instruccin se pueden omitir las lla%es
- 45ile )condicin*0
Estructura 1or
La sentencia 1or corresponde a la estructura ;:; del pseudocdigo, que permite que un #ucle se ejecute
un n4mero determinado de %eces, conocido pre%iamente.
1or ).e&p,10.e&p/10.e&p31* +
instrucciones0 )) si hay una sola instruccin se pueden omitir las lla%es
-
e&p, inicializa la %aria#le de control del #ucle. 'lo se ejecuta una %ez.
e&p/ es una e&presin relacional o lgica )#ooleana* que determina el fin de ejecucin del #ucle.
e&p3 define cmo cam#ia la %aria#le de control cada %ez que se ejecuta el cuerpo del #ucle.
Cuando la condicin sea falsa, la ejecucin contin4a por las instrucciones que siguen a 1or.
2jemplos(
for (x=(; x9=(!!; x++) 'rintf(*:d *; x);
x = (!;
for (<=(!; <$=x; <++) 'rintf(*:d*; <);
'rintf(*:d*; <); /* esta es la =nica sentencia 'rintf() "ue se e>ecutar? */
9os podemos encontrar con #ucles for sin #ucle.
for( ; ; ) 'rintf(*+n este bucle es infinito.*);
odemos usar un for para originar un retardo temporal
for(t=!; t9 @0A.@BC; t++) ;
9ucles anidados
Cuando se incluye una estructura iterati%a )45ile# do845ile# 1or* en otra, tenemos #ucles anidados.
01/10/2014 REVISIN POR LA PROFESORA DEL MDULO 3/11


SENTENCI(S +E S(/TO SENTENCI(S +E S(/TO
Return
'e emplea para terminar una funcin, como ya %eremos.
brea6 'ale de un #ucle. 'al%o con la estructura s=itch, es mejor no usarlo.
Continue <e#e estar dentro de un #ucle. 'u sinta&is(
continue;
La sentencia continue o#liga a ejecutar la siguiente iteracin del #ucle 45ile# do845ile# o 1or, en la que est
contenida.
goto
La instruccin goto# :ue no debeos eplear# transfiere el control a una l!nea espec!fica del programa,
identificada por una etiqueta.
goto eti:ueta0
.
eti:ueta$
...
;UNCIONES +E /I9RER<( EN C 7(R( /( ENTR(+( = S(/I+( +E +(TOS ;UNCIONES +E /I9RER<( EN C 7(R( /( ENTR(+( = S(/I+( +E +(TOS
print1>?$ ermite en%iar datos a la salida estndar )normalmente la pantalla*. 'u formato es(
print1>@cadena de 1orato@ A#e.prB1C2?;
La cadena de formato, adems de te&to y/o secuencias de escape, contiene los denominados
especi1icadores de 1orato. 6a de e&istir tantos especificadores de formato como e&presiones a tratar.
'rintf(DEien#enidos al len,ua>e CF);
'rintf(D0dad) :d +t 0stado ci#il) :cF; edad; e5ci#il);
;lgunos especi1icadotes de 1orato (
Dd 2ntero con signo Du 2ntero sin signo Dld 2ntero largo con signo
Dc Carcter Ds Cadena de caracteres D1 Dg :eal simple precisin
scan1>?$ 'canf permite almacenar datos en %aria#les desde teclado.
scanf)>cadena de formato>,?var1,...,?varn*0
Utiliza un formato similar a print1>?, pero en este caso en la cadena de caracteres no de#emos incluir te&to.
Las %aria#les de#en lle%ar el s!m#olo E delante del nom#re, a no ser que sea una %aria#le de tipo cadena.
2jemplos(
scanf(*:d*;Gnumero);
4/11 REVISIN POR LA PROFESORA DEL MDULO 01/10/2014
scanf(*:c :f*;Gcar; Gdistancia);
getc5ar$ Lee un carcter de la entrada estndar )stdin*.
Finclude Gstdio.5H
int getc5ar>void?;
La funcin getc5ar de%uel%e el carcter le!do. 'i el #uffer de entrada est limpio, la ejecucin del programa
se detendr hasta que introduzcamos un carcter y pulsemos 89":@.
'on equi%alentes car - getc5ar>?; y scan1>@Dc@# Ecar?;.
;uncin putc5ar$ 2scri#e un carcter en la salida estndar )stdout*.
Cada %ez que se ejecute la funcin putc5ar se escri#ir en el monitor un carcter a continuacin del 4ltimo
escrito.
Finclude Gstdio.5H
int putc5ar>int arguento?
;ICIEROS +E C(9ECER($ +IRECTI0( INC/U+E ;ICIEROS +E C(9ECER($ +IRECTI0( INC/U+E
Los ficheros de ca#ecera >con e.tensin .5? contienen fundamentalmente declaraciones de %aria#les
glo#ales y funciones, y definicin de estructuras de datos. 'u uso %a a facilitar la compilacin y el
mantenimiento de los programas. Un programa puede tener ms de un fichero ca#ecera y $stos se pueden
anidar.
ara usar los ficheros ca#ecera se utiliza la directi%a Finclude, que ser tratada por el preprocesador de C.
<ado que para in%ocar a una funcin, es necesario que est$ declarada en alg4n sitio, todas las declaraciones
de las funciones de la #i#lioteca de C se localizan en 1ic5eros de cabecera.
Ainclude Bfichero.hC
Las declaraciones de las funciones scanf y printf se encuentran en el fichero de ca#ecera stdio.5# por lo que
incluiremos en los programas la directi%a Finclude Bstdio.hC
+IRECTI0( +E;INE +IRECTI0( +E;INE
@tra de las directrices del preprocesador es Fde1ine# usado para asignar nom#res significati%os a %alores
e&pl!citos )constantes con identi1icador*.
Ade1ine identificador %alor

Hdefine 47 I.(4(5JK
Hdefine C.47A.L K!!!!!
Hdefine 0@@C@ *0s'era un dato numMrico*
Con #define, e !"e!"o#e$%do" $&$'i'&(e #%d% %!%"i#i)n de iden'ifi#%do" !o" $& *%o"+ Se
,%#e &n% $&$'i'&#i)n i'e"%, !o" o -&e ,%( -&e 'ene" #&id%do #on o$ !%".n'e$i$+
01/10/2014 REVISIN POR LA PROFESORA DEL MDULO //11


2 2 CADENAS DE CARACTERES (STRINGS) EN C. CADENAS DE CARACTERES (STRINGS) EN C.
2n C no e&iste un tipo espec!fico para cadenas de caracteres. 2s por ello que las cadenas de caracteres o
strings se crean como un array de caracteres unidimensional. or tanto, una cadena de caracteres es un array
unidimensional, en el que todos sus elementos son de tipo c5ar. Los strings siempre tienen que terminar con
un carcter 9UL@ >JKLM?# lo que o#liga a reser%ar espacio para un elemento ms.
;l igual que en los arrays num$ricos, un array de caracteres se puede ser inicializar en el momento de su
definicin.
2jemplo(
c&ar cadenaNO = DabcdF;
'rintf(D:s+nF; cadena);
2ste ejemplo define el array de caracteres cadena con cinco elementos )cadena.D1, ..., cadena.E1* y asigna al
primer elemento el caracter FaG, al segundo el carcter F#G, al tercero el carcter FcG, al cuarto el carcter FdG y al
quinto el caracter nulo )%alor ;'C88 D o secuencia de escape HD*, con el que el C finaliza todas las cadenas. 2l
carcter nulo lo aIade C automticamente.
cadena
a # c d HD
La inicializacin anterior tam#i$n puede realizarse(
char cadena.1 J +FaG, F#G, FcG, FdG, FHDG-0 o char cadena.1 J + KL, KM, KK, ,DD, D-0
'i se especifica el tamaIo del array de caracteres y la cadena asignada es ms larga que el tamaIo
especificado, se o#tiene un error en el momento de la compilacin indicando que hemos e&cedido los l!mites
del array. 'i la cadena asignada es ms corta que el tamaIo del array de caracteres, el resto de los elementos
del array son inicializados con caracteres nulos.
'e puede %isualizar una cadena de caracteres con print1 usando la especificacin de formato Ns (
printf)ONsHnP, cadena*0
'e %isualizan todos los caracteres del array hasta el primer carcter nulo.
odemos leer una cadena de caracteres desde el teclado utilizando la funcin scan1 )con Ns*(
char nom#re.E,10
scanf)ONsP, nom#re*0 // no lleva E por:ue nobre es una tabla
<e#emos recordar que scan1 lee datos delimitados por espacios en #lanco, por lo cual almacenar los
caracteres tecleados hasta el primer espacio en #lanco.
Con scan1>NDAOKnCP# nobre?; conseguimos leer caracteres de la entrada estndar hasta teclear Hn
"am#i$n podemos leer una cadena carcter a carcter(
Con scan1 c&ar nombreN4(O;
for (i=!; i94! ; i++) {
scanf(D:cF; GnombreNiO); fflus&(stdin);

nombreN4!O = !;
Con getc5ar int i = !;
c&ar nombreN4(O;
0/11 REVISIN POR LA PROFESORA DEL MDULO 01/10/2014
%&ile (( nombreNi++O = ,etc&ar()) $= P+nQ GG i 94! ) ;
nombreNiO = P+!Q;
La funcin getchar)* de%uel%e un char, correspondiente a la tecla que pulsemos en el momento de su
ejecucin.
ara realizar la lectura y escritura de una cadena de caracteres, de manera ms cmoda, la #i#lioteca de C
dispone de las funciones gets y puts.
/ECTUR( +E UN( C(+EN( +E C(R(CTERES$ ,ETS /ECTUR( +E UN( C(+EN( +E C(R(CTERES$ ,ETS
La funcin gets lee una l!nea de la entrada estndar )stdin? y la almacena en la cadena de caracteres
especificada. 'u sinta&is es(
Ainclude Bstdio.hC
char *gets)char * %ar*0
Bonde #ar es la cadena de caracteres que contendr todos los caracteres tecleados, e&cepto el carcter nue%a
l!nea )Hn*, que se sustituye automticamente por el carcter nulo )HD*, con el cual C finaliza toda cadena de
caracteres.
2jemplo( Lee < #isuali8a la cadena llamada nombre(
c&ar nombreN4(O;
,ets(nombre);
'rintf(D:s+nF; nombre);
La funcin gets de%uel%e un puntero a la cadena de caracteres le!da. Un %alor nulo del puntero indica un
error o una condicin de fin de fichero )eo1?.
ESCRITUR( +E UN( C(+EN( +E C(R(CTERES$ 7UTS ESCRITUR( +E UN( C(+EN( +E C(R(CTERES$ 7UTS
La funcin puts escri#e una cadena de caracteres en la salida estndar )stdout? y reemplaza el carcter nulo
de terminacin de la cadena )HD* por el carcter nue%a l!nea )Hn*, lo que quiere decir que despu$s de escri#ir la
cadena se a%anza automticamente a la l!nea siguiente. 'u sinta&is es(
Ainclude Bstdio.hC
int puts)const char * %ar*0
#ar representa la cadena de caracteres a %isualizar.
2jemplo( // Lee y %isualiza la cadena nom#re
char nombre[32];
gets(nombre);
puts(nombre);
;UNCIONES 7(R( C(+EN(S +E C(R(CTERES ;UNCIONES 7(R( C(+EN(S +E C(R(CTERES
La #i#lioteca de C proporciona un amplio n4mero de funciones para tratar cadenas de caracteres. ;
continuacin se detallan las ms usadas.
Las funciones que copian o concatenan cadenas de caracteres )o strings* guardan el carcter 9UL@ al final
de la nue%a cadena. Cuando se copia o concatena un string con otro, hay que asegurarse de que la cadena
receptora tenga espacio suficiente para almacenar todos los caracteres ms el nulo.
01/10/2014 REVISIN POR LA PROFESORA DEL MDULO 1/11


Todas las 1unciones re:uieren Finclude Gstring.5H
strlen
si"eBt strlen>const c5ar Qcadena?;
roporciona la longitud de cadena, no incluyendo el carcter de terminacin nulo. 2l tipo sizeQt es
sinnimo de unsigned int.
2jemplo(
c&ar nombreNI!O = D4e'e 4Mre8 Ron8?le8F;
'rintf(DLa lon,itud de tu nombre es :u+nF; strlen(nombre));
Strcat
c5ar Qstrcat>c5ar Qcadena1# const c5ar QcadenaR?
La funcin strcat aIade )concatena* la cadena/ a la cadena, y de%uel%e un puntero a cadena,.
StrcpS
c5ar QstrcpS> c5ar Qcadena1# const c5ar QcadenaR?;
Copia la cadenaK, en la cadena( y de%uel%e un puntero a cadena(.
/* Este programa utiliza strcpy y strcat */
#include <stdio.h>
#include <string.h>
int main(void){
char cadena[!"#
strcpy( cadena$ %&ola$ % )#
strcat( cadena$ %strcpy % )#
strcat( cadena$ %y % )#
strcat( cadena$ %strcat te saludan'% )#
print(( %cadena ) *s+n%$ cadena )#
return ,#
-
strcp
int strcp> const c5ar Qcadena1# const c5ar QcadenaR ?;
La funcin strcp compara la cadena( con la cadenaK y de%uel%e un %alor(
B D si la cadena( es menor que la cadenaK
J D si la cadena( es igual a la cadenaK
C D si la cadena( es mayor que la cadenaK
2n otras pala#ras, la funcin strcp nos permite sa#er si una cadena est en orden alfa#$tico antes o
despu$s que otra y el procedimiento que sigue es el mismo que cuando comparamos cadenas carcter a
carcter. La funcin strcmp diferencia las may4sculas de las min4sculas. Las may4sculas estn antes por orden
alfa#$tico.
strncat
c5ar Qstrncat>c5ar Qcadena1#const c5ar QcadenaR# si"eBt n?;
2/11 REVISIN POR LA PROFESORA DEL MDULO 01/10/2014
;Iade los n primeros caracteres de cadenaK a cadena(, termina la cadena resultante con el carcter nulo y
de%uel%e un puntero a cadena(. 'i n es mayor que la longitud de cadenaK, se utiliza como %alor de n la
longitud de cadenaK.
strncpS
c5ar QstrncpS>c5ar Qcadena1#const c5ar QcadenaR#si"eBt n ?;
Copia n caracteres de cadenaK en cadena( y de%uel%e un puntero a cadena(. 'i n es menor que la longitud
de cadenaK, no se aIade automticamente un carcter nulo a la cadena resultante. 'i n es mayor que la longitud
de cadenaK, la cadena, es rellenada con caracteres nulos )FHDG* hasta la longitud n.
strncp
int strncp>const c5ar Qcad1# const c5ar QcadR# si"eBt n ?;
Compara los primeros n caracteres de cad( y de cadK. or lo dems, se comporta igual que strcmp.
'i n es mayor que la longitud de cadena(, se toma como %alor la longitud de la cadena(.
strstr
c5ar Qstrstr> const c5ar Qcadena1# const c5ar QcadenaR ?;
roporciona un puntero a la primera ocurrencia de cadenaK en cadena( o un %alor 9ULL si la cadenaK no
se encuentra en la cadena(.
;UNCIONES 7(R( CON0ERSION NU'TRIC( ( C(+EN( ;UNCIONES 7(R( CON0ERSION NU'TRIC( ( C(+EN(
Las funciones de la #i#lioteca de C de este apartado permiten con%ertir cadenas de caracteres a n4meros y
%ice%ersa, siempre que la con%ersin sea posi#le. "odas ellas requieren( Finclude Gstdlib.5H
ato1
double ato1>const c5ar Qcadena?;
Con%ierte una cadena de caracteres a un %alor en do#le precisin.
atoi
int atoi> const c5ar Q cadena ?;
Con%ierte una cadena de caracteres a un %alor entero.
atol
long atoll > const c5ar Qcadena ?;
Con%ierte una cadena de caracteres a un %alor entero largo.
Cuando las funciones atof, atoi, y atol toman de cadena un carcter que no es reconocido como parte de un
n4mero, interrumpen la con%ersin.
01/10/2014 REVISIN POR LA PROFESORA DEL MDULO 3/11


;UNCIONES 7(R( CON0ERSION +E C(R(CTERES ;UNCIONES 7(R( CON0ERSION +E C(R(CTERES
Las funciones de la #i#lioteca de C que se e&ponen a continuacin act4an so#re un entero para dar como
resultado un carcter.
"odas ellas requieren( Finclude GctSpe.5H
toascii
int toascii> int c ?;
one a cero todos los #its de c, e&cepto los L #its menos significati%os. <icho de otra forma, con%ierte c a
un carcter ;'C88.
tolo4er
int tolo4er> int c ?;
Con%ierte c a una letra min4scula, si procede.
toupper
int toupper>int c?;
Con%ierte c a una letra may4scula, si procede.
2jemplo(
c&ar car;
do {
'rintf(DSBesea continuarT U/n D);
car = ,etc&ar();
fflus&(stdin);
%&ile ( tolo%er(car) $= PnQ GG tolo%er(car) $= PsQ );
2ste ejemplo admite una respuesta si o no )sR'RnR9* en min4sculas o en may4sculas0 pero la comparacin se
hace en min4sculas.
U U (RR(=S +E C(+EN(S +E C(R(CTERES (RR(=S +E C(+EN(S +E C(R(CTERES
Un array de cadenas de caracteres es un array donde cada componente es un array de caracteres. :ealmente
es un array de dos dimensiones, de tipo char.
2jemplo(
c5ar cadenasAUCAVC; /* tres cadenas de seis
caracteres cada una */
'u disposicin en memoria ser!a(
cadenas cadenas./1.,1
cadenas.D1 cadenas.,1 cadenas./1
10/11 REVISIN POR LA PROFESORA DEL MDULO 01/10/2014
Suiz resulte ms sencillo imaginrselo as!(
cadenas.D1
cadenas.,1
cadenas./1
cadenas.,1.31
2s importante asimilar que cadenas.D1, cadenas.,1 y cadenas./1 son tres cadenas de caracteres y que por
ejemplo, cadenas./1.,1 es el carcter que est en la fila /, columna ,.
ara entender la forma de tra#ajar con cadenas de caracteres, %ea el siguiente eWeplo$
/* .eer y visualizar una lista de nom/res de persona*/
#include <stdio.h>
#include <stdli/.h>
#de(ine 012 !, /* n3mero m45imo de (ilas */
#de(ine .678 9, /* n3mero m45imo de caracteres por (ila */
int main(void){
char lista[012"[.678"#
int i ) ,$ n ) ,# /* :ndices */
puts(%Escri/a los nom/res ;ue desea introducir.%)#
puts(%<ara (inalizar introduzca la cadena =(in =+n%)#
do {
print((%7om/re y apellidos> %)#
(in ) gets(lista[i")# // o/servad ;ue en lista usamos s?lo ! :ndice
i@@#
- Ahile ( strcmp(lista[i"$B(inB)'), CC i < 012)#
i( (strcmp(lista[i"$B(in))), ) iDD# /* eliminar la 3ltima entrada> */
/* Escri/ir el contenido del array de cadenas */
print((%+n%)#
(or (n ) ,# n < i# n@@)
print((%*s+n%$ lista[n")#
return ,#
-
01/10/2014 REVISIN POR LA PROFESORA DEL MDULO 11/11

You might also like