Documentos de Académico
Documentos de Profesional
Documentos de Cultura
fntroduccin a fa
Programacin con
I
I
I
;(c
BM lT Education Services
Worldwide Certified Material
f
Informacin de la Publicacin
Esta pubfcacin ha sido producida usando Microsoft Word 20OO y Microsoft powerpoint
2O00 para Windows.
Marcas Comerciales
IBM @ es una marca comercial registrada 'de tnternational Business Machines
Corporation.
propio riesgo.
o
a
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
O
o
o
O ,i
or
o
o
o
o
o
o
o
o
o
o
oi
ol,
olr
Duracin
La duracin de este curso es de 74 horas.
Propsito
Ef propsito de- este curso es ayudar al estudiante a desanollar
habilidades para
programar con c
para este fin, e.ste cu.rso proporciona informacin
detallada acerca
de los diferentes elementos de c. El objetvo orifo
. brindarle una slida base de los
conceptos y fa programacin con c. El curso comienza
con una introduccin a los
conceptos bsicos de computacin,
el
concepto
de
algoritmos a travs de una
.desde
definicin de un programa hasta los de
lenguajes oe frogramacin y compiladores.
Prerrequisitos
Para poder entender los conceptos tratados en
este curso, se debe tener conocimiento
acerca de sistemas operativos, y conocer acerca
de un sistema operativo como Linux
es esenciar para rograr un mejor aprovechamiento
der curso.
oll
oll
-fr
Ii
I,
-.ta
dlutl
.f-
I
,I
ei Curso
a
o
a
a
o
a
o
o
O
Agenda
Cada unidad de este curso es de 2 horas de duracin.
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
d (o
o
o
o
o
o
o
o
o
o
O
o
o
o
o
o
o
lntroduccin a la
l: Fundamentos de C
l: Introduccin
a ta programacin
Objetivos de Aprendizaje
1. Introduccin
2. Qu son Algoritmos?
3. Tipos de Algoritmos
4. Organizacin Elemental de la Computadora
5. eu es un programa de Computadora?
6. por qu se Necesita un Lenguaje de programacin?
7. Compiladores
Resumen
,o
macin con C
*rr::e_g{re
8. Operadores Compuestos de Asignacin
9. Conversin Explcita de Tipos
10. Conversin lmplcita de Tipos
Resumen
Objetivos de Aprendizaje
1. Introduccin
2. Construccin if Simple
3. La Construccin if_et-se
4. La Construccin if Anidado
5. Expresiones y Operadores Lgicos
6. Operador Temario
y Relacionales
2.
o
a
:f
o
o
O
o
o
a
o
o
o
o
o
o
o
o
o
o
:(o
!\ rv
o
o
o
o
O
o
o
o
o
o
O
o
o
o
o!
Sumario delCurso
Introduccin a la
2'
3.
4.
5. Uso de la Funcin ncorporada ptw 1
6. La palabra Reservada continue
7. La Estructura de la Sentencia do_white
f
Resumen
Unidad 5: Examen de Autoevaluacin
Respuestas a ra undad 5: Examen de Autoevaruacin
l\.f
x'E
a
-
amacin con
lntroduccin a la
Sumario del Curso
Unidad 4: Estructuras
Objetivos de Aprendizaje
1. f ntroduccin
2. Definicin y Uso de Estructuras
3' Tipos de Datos Definidos por ef usuario
4. Uniones
Unidad 4: Examen de Autoevaluacin
Respuestas a ta Unidad 4: Examen
de Autoevaruacin
Unidad S: Laboratorio de Estructuras
Objetivos de Aprendizaje
Ejercicios de Laboratorio
Vof ume
Unidad
l:
n 4: Funciones en C
Funciones
Objetivos de Aprendizaje
1. Introduccin
2. programar Funciones
ra sorucn
de probremas
S. Archivos de Encabezamiento
(header)
Resumen
Unidad 1: Examen de Autoevaluacin
spuestas a la Unidad 1:Examen
de Autoevafuacin
Unidad 3: Recursin
Objetivos de Aprendizaje
1. lntroduccin
2. Escribir Funciones Recursivas
3. Recursin vs. lteracin
Resumen
Unidad 3: Examen de Autoevafuacin
Respuestas a la Unidad 3: Examen
de Autoevaluacin
I
a
o
Sumario delCurso
o
o
o
o
Volumen 5: punteros en
Objetivos de Aprendizaje
Introduccin
2. Fundamentos de punteros .
3. uso de punteros para pasar Argumentos a ras Funciones
Resumen
Unidad 1:Examen de Autoevaluacin
Respuestas a ra unidad 1: Examen de Autoevaruacin
l.
o
o
o
o
o
a
o
o
o
o
o
o
o
o
o
a
o
o
a
o
o
o
Vof
oi
d
q
e
ot-
I'
Or
-'tr
.T
T'
5. Puntero a Estructura
6. Puntero a una Funcin
Resumen
t-
Objetivos de Aprendizaje
1. Introduccin
2. Aritmtica de Direcciones
3. Puntero a puntero
4. Arreglo de punteros
/0
^tE
Unidad 1: Punteros
I
I
dx
.-l !
Objetivos de Aprendizaje
1. Introduccin.
2. Uso de Archivos de Datos en C
3. Archivos de Texto y Binarios
4. Manipular Archivos de Datos sin Formatos
Resumen
Unidad 1: Examen de Autoevaluacin
o dei
5. Operadores
de Manejo de Bits
Resumen
Unidad 3: Examen de Autoevaluacin
Respuestas a ra unidad 3: Examen
de Autoevaruacin
"r"rito-o-JrgM.
Curso
oi
a
a
o0
o
ol
Volumen
ol
ol
Unidad
ol
ol
o1
ol
o1
ol
oj
ol
ol
o/
./
o/
:i(
rl 0
ol
oi
ol
o
.l
o
o
q
?
?
?
?
?
?
_^
K(lL
I,U
l:
l: Fundamentos de C
Introduccin a la programacin
::ilffii"?:'
unidad 3: programacin en c
- Los primeros
pasos
Vof ume n
2: Estructuras de Controf en C
if
"*prron"r
anidadas,
relacionales. Se introduce la
5ffiti::':o
:'\-
It
?
t)
ramacin con C
Descripcin de Unidades
Or
Introduccin a la
Introduccin a la
macin con C
::*,,"ffi""#?'i::J"J-* !n
se oiscute v-r.-a-,"n
".,"
unidad
ta
ra
en
reforzar los
El tema
para
arregros
arresros
,""n
m;ggJ:t:#:
lT,$:?:1;;;]e
(arreglos bidimensionales) a
travs de
problemas con matrices.
a travs de un
Unidad 4: Estructuras
Esta unidad discute el uso de las
estructuras y uniones en c. se presentan
para decrarar estructuras y
ros mtodos
a usarros para resofver problemas
especficos.
ieil;;;";
10
I
o
o
o
Volume n 4: Funciones
o1
o
o
o
o
a'a
o
o
en C
Unidad l: Funciones
Esta unidad- introduce la naturale-za
y ef uso de ras funciones en
probfemas' se discuten
fa sorucin de
arjus.runc'ioner-in"oipor"das
ejemplos se ilustra cmo
de
.-A
travs
de varios
d;fi;;r runcones o"r']r""f"ro_ y a
usarros en ra sorucin de
o
o
o
o
o
o
o
o
o
o
o
o
o
ogramacn con C
i#:5#::rJf,:'"#,#",i::,;!:*"::lf m;if
p""nio,o"-c-i",","o,"o-I"n",.
,t;iT:'i:"t[J;,i"?T:1['J;rlaboratorio
Unidad 3: Recursin
Esta unidad discute fa naturale
za general de la recursin y su
rof en la solucin de
r"nen,-.u'ru,t,."
5i?l'33?;"1,.?t3:|,il;n"a;f:[i:3'5f"T'"XJi,,"o.
er mtoJo
Volumen S: punteros en
Unidad l: punteros
;-;;'d;
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
"
"
:#:',
ff
.orJJffientos
a punteros,
a otras funciones.
"l
fll
o
o
11
Introduccin a fa
ramacin con C
i?:"":,;^i',Tilffi ll5J,:?il?gff
?1
I
I
rBM.
o
o
o
o
.'a
ntroduccin a la
Programacin en C
f
ol
Ol
o
ol
o
o
oj
o
oj
oi
oi
o1
oi
o1
oi
),1 r'>.
Fundamentos de C
:'((E
ri '"o
o
o
o
o
.{
a
q
BM fT Education Services
Worldwide Certified Material
f
Informacin de la publicacin
rt8i!::j",ff;?:#:
Marcas Registradas
IBM @ es una marca registrada de lnternationaf
Business Mactrines corporation.
otras compaas y nombres de productos y servicios
pueden ser marcas regrstradas
marcas de servicio de otros.
Red Hat
no ha s,:: s:^.::i:a
:ijlt:T":jg? :"T"nid:.,"n este documento
,;;-;t';" ;;-; -.." -. "^' : :'-'i a
Et uso de esta infornracin o la i_.
-==_u_.=;:^::f::?tcnicas
?.implcita.
= ,-__
estas
es responsabiridad der cornprador y oeoe.os:a
r5
para su evatuacin e integracin en
cada tema ha sido revisado por rBM"ipara
"ro,!'" "oirl-.;r;;:=.: ::-:,==
nra^i^
-:^^-^
propo
riesgo.
;.,;;;i;1.
o
o
o
o
o
o
o
o
o
o
o
o
o
Unidad
Introduccin a la programacin
1.
2. eu son Algoritmos?
3. Tipos de Algoritmos
4. Organizacin Elementaf de la Computadora
5. eu es un programa de Computadora?
6 por qu se Necesita un Lenguaje de programacin?
7. Compifadores
2
2
4
5
x
Resumen
Unidad 1: Examen de Autoevafuacin
Respuestas a ra unidad l:
Examen de Autoevaruacin
unidad 2: Laboratorio de Introduccin
a fa programacin
Objetivos de Aprendizaje
Ejercicios de Laboratorio
Unidad 3: programacin en
C Los primeros pasos
oi
oi
Contenido
Objetivos de Aprendizaje
Introduccin
o
o
o
o
o
o
o
o
ot
o
o'
ol
i:
.lf :
10
11
IJ
l5
15
16
17
Objetivos de Aprendizaje
lntroduccin
La Evofucin de C
prmeros pasos
para
1.
2.
3.
programa en
Escribr
C
4. Ms Acerca de Declaraciones un
5. Ms Acerca de fos Operadores
6. Compifacin de programas Hechos en
1
IT
.1
18
18
24
Lenguaje C
Resumen
Unidad 3: Examen de Autoevatuacin
Respuestas a fa Unidad
3: Examen de Autoevafuacin
Unidad 4: Construir Fundamentos
Slidos en C
Objetivos de Aprendizaje
Introduccin
Aceptar Entradas del Usuario
ldentificadores de Variables
palabras Claves
en C
Tipos de Datos Bsicos
en C
Constantes en C
OperadoresAritmticos
Operadores Compuestos
de Asignacin
Conversin Expficita de Tipos
10. Conversin lmplcita de Tipos
28
24
l
34
35
1.
2.
3.
4.
5.
6.
7.
8.
9.
36
36
36
41
42
43
44
47
48
49
50
IBM
Resumen
Unidad 4: Examen de Autoevaluacin
Respuestas a ra unidad 4: Examen de Autoevaruacin
Unidad 5: Laboratorio de programacin en C
Objetivos de Aprendizaje
Ejercicios de Laboratorio
Ejercicios Opcional
AA
c5
c,A
56
.l
lo
lo
lo
lo
ol
o
o
o
o
o
ol
o
O
Ol
o
Ol
Unidad 1: f ntroduccin a ta
Programacin
Objetivos de Aprend izaje
Al final de esta unidad, Ud. ser capaz
de:.
. Definir el trmino algoritmo.
.
.
'
'
.
oi
ol
r1
ol
o/
!'o
?
o
+
t?
?
p
p
lr
b
l:
p
,Ivt
tnr
tr
ft
I
Votumen@
Unidadt:lnt@
fntroduccin a la
l.
lntroduccin
;ffiffItrender
Ejempfo
su
l.l
l.l
Unidad
r,r"Oor""
Volumen
t: funGmEntos
Oe
Cl
I
o
o
a
o
o
o
o
a
o
O
o
O
o
o
o
o
o
o
o
o
J@
o
o
a
o
o
a
o
o
a
o
o
o
o
a
'l
{y
p
b
.,
aL.
t'o
Introduccin a la programacin
Ejempto 1.2
6ei
6.
1ffiT;;i,ffi:,"l Jrffi j
ax2 + bx
.,
- + sqr.t (discriminante ) / 2a y
-D - sqrt(drscriminante) / 2a
carcter deltexto.
Paso 3: Repetir ros siguientes pasos
hasta tegar af finar det texto.
si er carcter = A a entonces incrementar
en uo contA.
si er carcter = E e entonces incrementar
en uDo conrE.
sier carcter = | i entonces incrementar
en uno contr.
votumen@
:
Unidad
contO y contU.
3. Tipos de Atgoritmos
En la vida real se encuentran diferentes
tipos de algoritmos. una clasificacin
simple
ayuoa a comprender la naturaleza
subyacente oe tos afgoritmos y los
problemas para los que son
tipos de
ms adecuados. Esta cfasificacin tambin
permite
escoger un mtodo apropiado para
evaluar la valide z y laeficiencia del
atgoritmo.
.
.
.
3.2
finitos beterminsticos.
;n":|jf,i:o3"ot
i:
Fundarnentos de C 4
ol
o
3.3 Afgoritmoslnfinitos
o
a
o
a
o
o
o
o
o
o
o
o
o
o
o
a
t:t3
o
o
o
O
o
o
o
o
o
o
o
?
o
5
sin
supercomputadoras. etc.
a bus.
Volumen
$o
It
?
o
l: funarnetoGE
-:
Oispositrvo
Central de
Procesamiento
De
Salida
Bus delSistema
distinguindola
almacenamiento,
los que
permiten
I
I
tl
l
tl
Volumen 1: Fundamentos de C 6
o
o
a
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
lntroduccin a la
;iH:il"
'
o
como
:'ina"J::liento
a la
""i:l^ para entidad.
-apropiada, dispositivo de entrada o
secundario,
que estn
disponibre r"f inrirr"ciones y datos
Sy":t"n
"t",::,f#:ramas
Votumen@
programacin
;r1;3:.::::."
:,'nt[,o"ilffiI"'
p"r"; si no que
realizar
tales como adicin, sustraccin, multiplicacin,
divisin, etc.
La manera como las instrucciones se
comunica al computador, debe ser por
fo tanto
muy simple' Para permitir una comunicacin
bien definida, el lenguaje debe ser
limitado
en su sintaxis y semntica. Ef renguaje
no debe ser ambiguo. Es por eso, que
necesita un lenguaje de programacin
se
de computadora con una sintaxis simple,
semntica restringida y de natuialeza
no ambigua.
6.1 Nivefes de Lenguajes
Hay diversos niveles, de
.lenguajes de programacin. A continuacin se presenta una
breve descripcn de los Oifents
niveles.
;f::::i:rfl""
Volumen 1: Fundamentos de C
a
o
o
:
o
o
a
o
o'
o
o
o
o
O
o
o
o
q
o
o
i
3o
o
o
o
o
o
t
t
a
o.{
o
t
e
;*
?
u
I
I
E
l
.',v
6.1.3
para
6.1.4
6.1.5
Lenguaje procedimentaf
7. Compifadores
una computadcra solamente puede ejecutar instrucciones
en lenguaje mquina. si un
programa se na escrito
l#ffi81 -:>t@->
rl
Progama
Eeculabte
Compiladtr
Volumenr@
Unidadt:lt@
@
de lBM.
Resumen
Ahora que ha completada esta unidad, Ud. debe ser capaz
de:
. Definir el trmino algoritmo.
.
.
.
o
.
ilfr
:i
;
I
;
a.
.l
I
Volumen 1: Fundamentos de C 10
.)
-
o
o
o
o
o0
Unidad
1)
o
o
o
o
o
o
o
o
o
o
o
o
a
o
o
o
o
),A
_i (3
O'.o
O
o
o
o
o
o
o
o
o
O
o
a
o
o
o
O
a
O
l: Examen de Autoevatuacin
o_
Introduccin a la
Volumen
l: funOametosE
Unidadl:lntroOu@
Introduccn a la programacin
con C
7)
8)
Gufa delEstudiante
a) El almacenamiento secundaro.
b) La Unidad de Control.
c)
d)
9)
de
un
10) Qu es un compilador?
a) un dispositivo, de hardware que traduce un programa
de computadora escrito en
lenguaje de alto nivel a ,n
lenguaje mquina.
b) un programa que traduce "n
un programa de computadora escrito
en un lenguaje
Unidad 2:Laboratorio Oe
tnt@
Volumen 1: Fundamehtos Oe C
lZ
Respuestas a la Unidad
1)c
2)b
3)b
4)a
s)d
6)a
7)c
8)c
e)d
i: Exarnen de Autoevatuacin
-
r0) b
Volumen 1: Fundamentos Oe C
@ Copyright tBM Corp .2OOs
Los materiafes der urso n-o pueden sr reproducidos
en parte
o en su totalidad sin elprvo permiso"escrito de lBM.
Estudiante
Unidad 2:Laboratorio
Volumen
i:
Fundamentos de C 14
de lBM.
oI
a':
o
o
-L,
t-
o
o
o
o
(,
ramacin con C
o
o
o
.
.
o
o
o
o
o
o
o
o
o
o
que
j(,
t-,.
.\
o
o
o
c
o
o
a
a
o
o
o
o
o
(t-l
I'
o
o
o
Volumen
l:
Fundamentos OeC
Unidadt:lntroducc@
requieran
trJercfcios de Laboratorio
Ejercicios
1) Expficar paso a paso' ef proceso
2) Escribi*n
I#,i"iJi:il'i:n,i"*";i':#1,ff
3)
4)
ff,fi;:: fts
ff:il,ff,.i:x1""x1;iln:,;ffif':i:',4;,il:x:"
ff#;ff:i,t'"
oe orechal
"ot
para
senellT:::r^:!,*
iJrl"lqueffos
sJ""n
151151
o"lJir",;il?
son todos
o"ru.h,
parndromes.
Unidad
r'r"Oo
Volumenl:@
tBM Corp. 2005
,^
los
materiales delcu
oensutot"r0"'!?J,"rij|,3"J"itr j:Tlj.:ili"",,E[rl"n"
@
Copyright
lr!
ro,
lo
lo
lo
ol
o
o
o
o
o
o
o
o
o
o
o
o
o
Unidad 3: Programacin en C
Los Primeros pasos
Objetivos de Aprend izaje
Alfinal de esta unidad, Ud. ser capaz
.
'
'
de:
Describir la evolucin de C.
Discutir cmo escribir algoritmos en C para resolver problemas
simples.
Explcar los dferentes componentes de un programa simpre
en c.
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
io
fo
ItL
TU
fo
fo
o
o
Unidad 3:Progra
Introduccin a la
f.
ramacin con C
lntroduccin
s^:.
2. La Evolucin de C
Ef lenguaie de programacin
c
Dennis
i,l
Unidad a,O
Volument:f@
@ Copyright fBM Corp.
2005
Los materiales delcurso no pueden
ser reproOucidos en parte
o en su totalidad sin elprevio permis
escrito de tBM.
o
o
o
o
a
o
o
o
o
o
o
o
o
't
Gua del Estudiante
o
o
o
o
o
o
o
o
o
o
o
o
o
o
(0
4 mainOi
5
dec,laracin cle.._a:iabl-es focales
6
senl_encias
1j
8 definicrr Ce i::.:_::.:-.
;.::l:,TbT,
Volumen faFundamenGrdeE
.prdicab"
mn,:rrii
f:;;
Unidad 3:Program
ol
lntroduccin a la programacin
con C
'
def
carctei "_" (subrayado).
El estndar ANSI c establece que fa
variable puede ser de cuarqu.ier
rongitrrd,
como por ejemplo abu jafar_mbh"rr"_ior_i"r"[xn""*rr,=
,, pero sdo
fos primeros 31 caracter so
s"m""i"";
No se permiten comas niespacios
en un nombre de variable.
er
'
'
h;?$s:;:
i[:tot"
decrara como
irrt
num;
;:;?::n:,:J:ilada
ffjnlT|.."
en
::i:J":":n:::::Z:::,
de
Ejemplo
_:
Y
Li
3.r
Votument@
@ Copyright tBM Corp. 2005
Los materiales del curso no pueden
ser reproducidos en parte
o en su totalidad sin elprevio permiso
escrto de lBM.
.l
il:
ei
o
o
o
o
o
o
O
o
o
o
Ol
o
o
o'
o
!i
oi
ot
ol
oi
al
ol
)r ?
o
o
o
o
o
o
o
o
o
o
o
o
o
a
o
o
o
a
u, fil
l\lu
o
o
o
o
Introduccin a la
a ra derecha.
A continuacin se estructura elconjunto de sentencias
en c para ef algoritmo anterior.
El cdigo C comienza aqu...
l: punOamiffi
3:ProgramacOnffi
int num,.
int digito_izguierdo,.
int digito_derecho;
;iliJ,"
fa memoria
num
digito_i zquierdo
::fi 3l'?':'i
es
rfa on
digito derecho
:^"11 i :"
f *ni""'",
# ffi ;";"' :'' ", . l'3'J', n'3
* ", h; l, ;
;ffi;:
num
"1,'"i'"
"il
25
r;;il;;#"
:;T::
alavariable
u,,
Cr
g: to_i zquierdo
diqito _r zquierdo .
digito derecho
digito
num
5
Unidad 3:prog
digrto_i zguierdo
derecho.
digito_derecho
Volumen
l:
funOmEtos oe
zZ
f,
oH
aii
o
o
0
i,
EJ-
oj
oi
ol
o
o
o
o
o
o
o
o
O
o
o
O
o
a
o
o
,.
El digito derecho es 5
Todas fas sentencias en la funcin main se han ejecutado y
el programa termina.
ot
o
Muestra el mensaje
oJ
o
o
o
o
o
digito izquierdo es
o,,,
O'*0
o
o
o
a
,.
ol
ol
q
a
es ?d\n,,, digrto_izquierdo)
1||
O'
Introduccin a la p
4. Ms Acerca de Declaraciones
Cuando se declaran mltiples variables enteras, no se
necesita declararlas
separadamente.
se puede combinar su declaracin en
muestra a continuacin:
digito_derecho;
",
int
#,
Volumen 1:
FundametosE
Unidad 3:Programa
Introduccin a la
,a,;
voca]:
consonante = 'et;
vocaf : consonante,.
- (num ,210)*
10
::tffir::#:de
num
fr-- rr
r))
10
10, y
'
1
2
3
4
5
6
'7
8
#include <stdio.h>
mainO i
Unidad S:ero
votumenl@
@ Copyright tBM Corp. 2005
Los materiafes del curso no pueden
sr reproducidos en parte
o en su totalidad sin el previo permiso
escrito de lBM.
o
o
o
o
o
o
o
o
o
a
o
o
o
o
o
o
o
o
o
o
o
o
o
o 0
o
o
c
o
o
o
o
o
o
o
o
o
o
o
o
o
o^
de
a
o
o
o
ntroduccin a Ia pr
*!
,.
_5
..
num_invertido = digito_derecho *
1O + digito rzquierdo:
Paso 5: Mostrar el valor de num_inverti-do.
Esto es precisamente un algoritmo que necesita
ser convertido a C, tambin usa
algunos pasos ya discutidos anteriormente. Er programa
en c se muestra a
continuacin:
Volumen
l:
fuE-entos de C
Unidad 3:Prog
lntroduccin alaP
1
8
J_O;
i^-^^L
,.
L4
q,
num/100.
temp diqito-j-zquierdo ? 100. Con esto se obtienen los dos
dgitos ms a la derecha y se almacenan en remp.
Paso 4: digito_medio : temp,/10.
Paso 5: digito_derecho : temp % 10.
Paso 6: num_invertido : digito derecho * 100 + digito mecio * 10
Paso 3:
+ digito_izquierdo.
Volumen
'1:
Fundamentos de
26
\\
of
a
o
o
oi
o
o
o
o
o
a
o
o
o
o
o
o
o
o
o
o
o
o3
o"
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
c
o
o
o
-._._
Siempre que un programa tenga una sentencia larga, la lnea se puede dividir
en
mltiples lneas. Cada lnea de la sentencia multilinea se termina con el carcter
de
diagonal inversa (\). Esta declaracin o expresin larga escrita en mltiples lneas.
terminada con un diagonal inversa, se trata como una sentencia compuesta.
Esta
facilidad permite escribir un programa bien formateado. El programa en C se muestra
a
continuacin:
El cdigo de C comienza aqu ...
1 #include <stdio. h>
2 mainO{
3
int nurn, dtg-ito_rzoui erdc, Crcito_riedlo,.
4
int digrto_de:echo, temp, nun inver:rcic,.
5
num : 734;
6 /* E1 dgito ms a 1a izquierda se extrae */
7
: nun / 100,.
digito_izqurerdo
8 /* Los dos dgrtos ms a Ia derecha se extraen * /
9
temp : num ? iOO;
I0 /* E1 dgito del medio se extrae */
11
dig'ito_medjo - -renp,/ iC,.
72 /* EI dgito ms a la derecha se extrae * /
13
digito_de::echo : i_enp ?. ,C;
14 /* El- nmero inverti-do se calcula. se usa eI carcter de diagronal
inversa Para sel)arar las s!-gruientes sentencias en dos 1neas */
15
I6
I1
!8
rg l
10
Volumen 1: Fundamentos de C
Unidad 3:Programacn en
C-Lm
un
cel-sius : 5 * (fahrenheir _ 32 ) /
Unidad 3:Prog
Volumen
i.
Fundamentos dEE-28
o
o
o
o
o
o
o
o
o
o
a
o
o
5
6
o,.
/j
.,
, :-cic,.
: , = r area es :
o
o
f:
o
o
Se sabe que:
rnteres
:0
o
a-paja:
=::_.
- tiempo * tasa/100
o
o
o
o
o
o
?
a
P
P
p
p
t lh
llLt
rtf
b
O
15
-::- :
':
,.
1'1
,.
Volumen 1: FundametosE C
Unidad 3:ProgramacO
hexadecimal)
zx,
zx
?f ?e
?;E Zq
?G
'.F
,_:i5-:
;-
I
.l
I
\b
Retroceso
(Bactspacj
Retomo de carro
Tabulador horizontal
Volumen
i:
Fundanentos OECJO
O
O
Guia oel Estudante
o
o
.l
a
Ahora que ha completada esta unidad, Ud. debe ser capaz de.
. Establecer la evolucin de C.
.
.
.\--
-).vtr\
\
r-. l':
\,.\J
'\--
\.
1 ,
..-.)\
*+
\'.r ).r
:\1
'*.-'-\
O^
.R
?v
o
o
.. "\..
.
--: \i
-\
r,- J
!;l)
\.
\-\\r
---:--_,
c
o
_\')-.s')
\-- \ *-.> l\
. \-_ti\
--f)
\. i'<---
"
r9-
j'.\
o
o
O
t
f
Ip
b
I
I
p
lt s,
r,rL!
-tE
IL
Resumen
a
a
o
o
o
o
a
o
o
o
o
o
o
a
a
o
Unidad 3:Programacn en C
- Los Primeros
pasos
3.1
--.
-l
Gufa delEstudiante
2)
int,
Cules de
a) b+I-723*a/c
b) a++b
c) a (b+c)
d) b/a
a)x:x-1;
b)a+b:a-b;
c) (a) :b+7;
d) x : y * y * y;
b) Bll Martin.
c) Dennis Ritchie.
d) Ken Thomson.
0l
c)
d)
1972.
1983.
Unidad3:Programacffi
Volumen 1: Fundamentos de
a2
I
o
a
o
lr
:t
ov
o
a
o
o
o
o
a
o
a
o
O
o
o
o
a
a
a
IJ'
!tv
o
o
o
o
a
o
o
o
o
o
o
a
o
a
o
o
o
e0
o
o
o
o
;- : cei Estudlante
"cual
b) Il
c) o
a) int
b)
c)
d)
float
char
text
r/3?
c)0
d)
Un valor indefinido
Volumen 1: Fundamentos de C
4)c
5)c
6) ayd
7)c
8)b
e)d
l0) c
0;
Unidad 3:ProgramacOn
effi
Volumen 1: Fundamentos de
o
O
o
o
-:-r cl Estudiante
o
o
o
o
o
o
o
o
o
o
o
o
o
a.
Slidos en C
Objetivos de Aprend izaje
Al final de esta unidad, Ud. ser capaz de.
'
Explicar cmo escribir programas que tomen una entrada simple usando la
funcin scanf.
a
a
cr
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
a
o
o
o
o
o0
o
o
o
o
Volumen 1: Fundamentos de C
en C 35
lntroduccin a fa
l.
acin con C
ntroduccin
En la unidad 3: Programar
enc - Los Primerosp^1os,
los datos de entrada
se escribieron programas
estaan drsponibfes p;;;;;i
donde
programa
asignacin' Esto no es
a travs de una sentencia
ioear, y" qr" tiene varias'lmiacon;.';;;
de
ejempro, se desea
:i T['i:"1
oir".J",5i ri e n e q u e e d ta
",", compifarfos
rcesarios,
". y oot.n"i r
versin ejecutabfe o" "T
progt"r;
:'?ffi[
:: "^:#*:
t itij:.,'f
,nl
.
2. Aceptar Entradas def
Usuaro
nuevamente.
En la tJnidad 3: Programar
en
los datos de entrada
c - los Primerospasos, se
escribieron programas
estaoan'olponiotes p"rt"t
donde
programa
asignacin' Esto no es
a travs de una sentencia
ioear, ya que tiene varias
de
rimitaciones. si, por elempfo,
ejecutar el programa
con un cnjunto o" u"ior".-iu
se desea
0",o, diferents, se tiene que
editar
s a ros,
il,.3ii ;1I.1,,:T:';"
pr,.r o, y obte
?":;"
*: :l*: iff
"::e
p ro p o rc i o n
ner
"o,
un
a p re
e r
funcones incorporadas
como la func.,
:Jfi ,fff
rr*'1"::Trf,!:ilJ:g:n'"'a
;::'i1til::::il:'"";ff:
"r'"""narro
";.:[?1""f:j#:H"
i"*io,''"i']
pueoa atmacenar er
varor
n""" ustamenle esto, pasa en
la
iii&1it;9;,iJ"l,tilmm*"' '"
.':;::"H:;T::i[U*:":,*,Ti:,SilTH"';lTiJ,J,;tifu
i;:T_"j:
Unidad '
Vofumen
l,
punOamentos
oensu,o,",,o"o'!?li,"r?J,:ff
trJ:tJ3j,i3i""',El,l,n"
e C
36
o
o
o
o
o0
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
3a
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
dl
o
o
o
o
Ahora, asuma que se desea leer la entrada del usuario en dos variables pesc ! e.r:j
donde eiai S de tipo de dato rnr- f pe-sc s :-.,:-,. Se debe usar las siguientes
sentencias:
o/of
-)
-
t -- \
t-11,r)
--
tn:lucie
<s-_
i_
. h>
3
in: e':ut:a,1 i - Se tona eI valor de 1a variable como entrada del usuario
5
sca.-i i"?C", &altura)
/- Se impr:-me dicho walor en J-a salida estndar */
7
c:-:,:j ("?d\n", altura);
Ei
,.
^ --: ' :
-_
:_
_.
:-:
=____-l
en
C 37
2 mainO {
3
int num, digito_izguierdo, digito_derecho;
4 /* Se 1e indica a1 usuario que hacer */
5
printf ("rngrese un numero positivo de 2 digitos\n,,),.
6 /* obtener el walor de 1a varia-ble como una entrada
de1 usr::-ia
7
scanf ( "?d"/ &num) ;
B /* E1 dgit.o izquierdo se extrae */
9
digito_izquierdo : nurn / IO;
10 1* E1 digito derecho se extrae *,/
11
digi-to_derecho : num - 1num,/ 1O ) * 10,.
72 * Se muestra cada clig.ito obtenido *,/
'1 ?
^-r --r
rr
prrnti
(/ 'r"El dtgito izqu_:-ei-do es:
?d\n,,, digito_izguierdo) ;
74
printf ("Fl drg:to deecho es: %d\n,,, digito derecho)
t5
*/
,.
'
constru@
.
Volumen
Fundamentos de C
?n
o
o
Gua del Estudiante
o
o
o
!.:
o
o
o
a
o
o
o
fahrenheit,
cer,sjus
o
O
o
o
a
o
o
7
scanf ("%f',,,iradio);
8 /* Calcular e1 rea del crc1o -/
9
area : 3. 11159 * rad.io - :acii_c,.
10 /* Se muestra el radio de entrada y rea cal_culada */
11
crlntf ("\n El radio ingresacio es: n.r,,,:aCl-o);
72
Prlntf ( " \n El area es : .: " , are) :
o
o
o
a 0
o
O,
o
o
t<
#inclucie <stdic.
.tta--:
-_
I *
/ I
1
h>
I
1
oi
oi
l
ol
q
ol
ol
.l
I?
?
?
a:-:.:i1"I:.::ese
Volumen 1: Fundamentos de C
en
fntroduccin a la programacin
con C
;fiff;:'::A:'
a un grupo de personas
int edad;
f-loat sueldo;
/* Ind.icar al usuario que ingrese
1os datos */
/ r'^
pr.LDtr
^-; ! ("Confiesa
t.u edad y sue-l_do actua-l_ \n,,),.
scanf ("?d ?f ,,, &edad, &sue_ldo)
;
/* ros datos adquiridos ,,or teclados
son mostrad.os por pantar_la _/
("Su edad es: zd, y su
suerdo: ?.1f do_lares \,:r,,, etr= j, s-^e-dc)
:, Jprintf
Unidad : Con
Volumen 1: Fundamentos de C
Copyright tBM Corp. 2005
Los materares der curso ro pueden
sr ieprooucidos en parte
o en su totalidad sin elprevio permis
escrito de lBM.
@
40
o
o
o
o
o0
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
^_'((l
o\z
O
o
o
o
O
o
o
o
o
o
o
o
O
o
o
o
o/^
o
o
o
sentencia scanf
3. ldentificadores de Variables
Como se aprendi en la lJnidad 3: Programpr en C
ciertas reglas para los nombres de las variables
rnt
emp,.
Esto implica que temp es una variable entera ! temo es un identificador de variable. Los
identificadores pueden usar caracteres. del alfabeto en mayscula as como en
minscula. Sin embargo, los programadores generalmente usan letras minsculas para
los identificadores de las variables. Por otra parte, la siguiente declaracin crea dos
identificadores distintos:
l-oat Float;
Tambin se puede tener un identificador tlamado rt-oat. Sin embargo, esto
crea
Volumen 1: Fundamentos de C
C 41
confusin- Por tanto, es mejor evitar el uso de estas palabras. Los siguientes nombres
son identificadores vlidos para variables:
Unidad 4:Construir Fundamentos Slidos
en
Gufa delEstudiante
J s.v
KZOZ
q: I : rr
bill_1
SAMPLE
nrrf
9c1oud
salary$
by-pass
first name
_.
4. Palabras Claves en C
En C, como en cualquier otro lenguaje, existen una serie de palabras
cnar
con
^t ^^
saE
int
long
struct
switch
enum
q1-uL!
rct
r
!v!:ro
fLyPsusr
rrna-l^r
doub-l-e
x-^ - r-
extern
st
return
short
signed
sizeof
static
I Vq L
nn!.i
vv.u-tUC n'.^
for
UgIdUIL
^^a-,-l+
goao
do
if
union
unsigned
void
vol_atile
whil_e
Volumen 1: Fundamentos de C
42
o
o
o
o
arl
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
O
o
o^
tt'
o
o
O
o
o
o
o
o
o
a
o
o
o
o
o
o
o
t
o
a
o
o
CO
,^
J
Tipo de Dato
ll
\ n InI
) {f
xi Float
l
C)
(l
\P \-l
(.\r
Double
/.1r.^.
vrrd
a)
Descripcin
Requerimientos
tpicos de Memoria
Entero
2 bytes
4 bytes
B bytes
Carcter simple
1 byte
Volumen
l:
Fundamentos de C
en
C 3
5.1
6. Constantes en C
Existen cinco tipos de constantes en C. Estas son:
Constante enteras.
Constante de punto.flotante.
Constante de carcter.
Constante de cadena.
Constante de enumeracin.
o
.
.
.
.'
Adicionales de C.
Unidad 4: Construir
funffi
Volumen 1: Fundamentos de C
44
or
tl'
ol
6.1
!,c
I
a
q
q
q
a
o
o
o
o
o
.
.
.
o
o
o
O
o
o
a
o
a
o
O
-234,
4518
1)?
2?S
23-
Una constante octal pertenece a la base 8, donde los dgitos 0 y 7 son vlidos. para que
un octal sea viido. debe empezar con un 0 (principalmente para distinguirlo como un
octal) y seguido por cualquier combinacin de dgitos O a 7. Algunos ejemplos de
constantes vlidos de constantes octales son:
t:ZL=
01
-)
011
o Una constante hexacjecimal (base 16) debe empezar con 0x ox y puede ser cualquier
combinacin de dgitos c:i O af 9 y letras A, B, c, D, E y r. Se pueden usar las letras
maysculas o minsculas.
0x723
CXa2b4C9 OxFACE
0x.
a
o
),
'a0
o
a
o
o
o
:0
Constantes Enteras
Una constante entera es un nmero de valor entero. Este consiste de una secuencia de
dgitos precedido por un signo + o -.
o
o
o
Volumen 1: Fundamentos de C
en C 5
Introduccin a la programacin
con C
. 6.2
1256.43
+25
-3.003
.;
U. ^^UUJqC4.
cuando
.3E4 significa 2 .3
I o4 que es 23000. 0.
6.3
10.34
Constantes de Carcter
'3.2.
es vudrqurEr
vo
cuafquier udracler
carcter encerrado entre comilfas simples.
caracteres se fes asigna un nico cdigo
numrico llamado cdigo
cction ASCtI
as.rl
(American Standard Code for fnformation
Interchrng"l.
A los
")zc
)x\
-'
6.4 Constantes
de Cadenas
@consistedeceroomscarcterencerradosencomi|fas
dobles Los siguentes
ejerpro, ,on
hola
nombre
"onstantes
de cadena vridas:
ES
Volumen
l:
Fundanentos de C
ra
1:
46
Or
+
o
o
a
o
o
o
o
a
o
Cuando se usan con operandos enteros, todos los operadores anteriores retornan un
resultado entero.
C)r
o
a
La mayora de ios compiladores de C hacen que el residuo tenga el mismo signo que el
primer operando. -ts t debe ser cuidadosamente interpretado. En la mayora de los
compiladores el residuo ser -:.
o1
o-
o
o
o
o
o
O
o
a
o
operador % es vlido slo cuando ambos operandos son enteros. Cuando uno de los
operandos es un fJ-oat, el resultado ser tambin un ft-oar. Adems, cuando se usa el
operador /, se debe tener mucho cuidado de asegurar que an a/b, b no sea cero. Si se
intenta dividir entre cero, el programa no funcionar. Si uno o ambos operandos son
negativos, entonces el uso de los operadores anteriores resuftar en valores cuyos
signos sern determinados por las reglas del lgebra. Cuando uno de los operandos es
negatrvo, el resultado del operador % no est claro.
O>)*-t
- I/
^A.
/'Una
'
Qu evala esto?
- (5a) - (5b)
-5 (a-5b)
No debe haber ninguna ambigedad, as que, es necesario aprender la jerarqua de los
operadores. El orden en el que las operaciones se ejecutan depender de la prioridad
de los operadores. Esto se da en laTabla 4.2.
Prioridad
Operadores
Descripcin
o,_
Primero
"/o/o
Segundo
Tercero
+-
o
o
o
O
o
o
o0
a
a
a
o
Asignacin
en
C 47
Introduccin a la
expresones'
sin
con C
Gufa delEstudiante
embargo, dentro de
,los
Ejempto 4.6
Considere fa evaluacln de fa
siguiente expresin.
k:5*10+_*3_75/e_g_2
50+2t-fi/4.8_2
50+2I-3+B_2
71 _ 3 + B _ 2
68+g-Z
to _ 2
* eva.l_uado
,/ evaluado
* eval-uado
- evaluado
+ eval_uado
- eva-l_uado
: evaluado
-a
/4
k le es asignado
71
ax2+ bx + c:
'
o)
2a
2a
;irffi:fft
T";
precedencia
La decfaracin
= X + 2 es equivalente a X+= 2. LaTabla
4.3 muestra fa fista de
los operadores compuestos
de asignacin ms usados.
Unidad : Co
Votumen
, -^ _- . .
los
materiales
t: runGmEnG?e
c 4t
o
o
a
Gua del
Estudiante
Operador
o0
o-
o
a
o
o
o
o
o
o
o
o
a
o
a
o
o
o
o.
lr
o
o
Ejemplo
Resta/Asignacin
o
o
o
o
or0
Propsito
Suma/Asignacin
o
o
a
o
o
o
o
o
o
a
o
)i-
x-
t0
Salida
_l
Multiplicacin/Asignacin
50
Divisin/Asignacin
z:
1\
Mdulo/Asignacin
1t
t
C
Ejemplo 4.8
A continuacin se escribe un programa, que acepta un valor entero por parte def usuario
y muestra el cuadrado del nmero dado.
El cdigo C comienza aqu...
1 #include <stCio. h>
2
3
mairr O
int num,'
1-
5
6 /7
e /*
9
_',t
: rin-t/rrTnnrpq:
r_
-'u ./
r'\
/
scanf ("?d",&num),'
Calcular el cuadrado de1 n-mero dado * /
num*=num;
'}
i,nt x;
float y;
Que sucede con la expresin aritmtica (x - y) z r0? La expresin (x - y)
devuelve un resultado de punto flotante dado que y es un ft-oat. Si uno de los
operandos no es un entero, el operador % no ser vlido. Existen ocasiones donde
estas son ineludibles, y ? debe ser aplicado. En ese caso, se debe convertir
explcitamente el punto flotante a un entero. Esto se hace a travs de lo que se
Volumen 1: Fundamentos de C
en
C 9
((int)
(x - y) ) ?
10
a G_y)zro, y el
:_nt i, j
,.
ffoat f;
clrr
I
t
L
h.
l|t).
l AAA
!VJV.-:
r.
L.
^.
ch : t,.
Todas las sentencias anteriores son asignaciones vlidas
en c.
'd
'
'
o
eE
Volumen 1: Fundamentos de C
50
o
o
o
o
o
o
o
o
o
o
o
Resumen
Ahora que ha completada esta unidad, Ud. debe ser capaz de..
' Explicar cmo escribir programas que tomen una simple entrada usando la
funcin scanf.
'
a
a
a
Volumen 1: Fundamentos de C
en C 51
lntroduccin a la
ai
c?
b) y=y+1:
c) float=pi"r*r;
d) P=24.5"alb
a) c = 'c';
b) c ='cat';
c) c = "cat",
d) c = "c';
char c; ?
a) Abu_jafar
b) 123
c) mi nombre
d) miNombre
e) satins
4) Las constantes de punto flotante
pueden ser escritas en c en
a) Forma de fraccin decimal.
b) Forma exponenciat.
c) Como una cadena.
d) Como una concatenacin de 2 enteros.
:XT;:r:i'il:ffi"?r"0"
" a)
b)
c)
d)
como
char
namei
Ocho.
Cualquier longitud.
Uno.
Dos.
d)
^l
'8ill"
Unidad:
Constr@
Volumen 1: Fundamentos de C
BM.
52
o
o
o
o
o0
7) En la expresin, 25*d +
ejecutada primero?
a) 25"d
b) x"2
c) x-y
d) c+d
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
)r;
{{it
oo
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
eo
o
o
B)
(>:*2.3+2) / ( (x-y)
i (c+d).2.3)
si
9)Qualmacenarlaasignacina
a) 15
b)3
c)0
d) 18
t5 + 3 z
9/2?
5?
a) int
b) short
c) long
d) signed
Volumen 1: Fundamentos de C
en C 53
1)c
2)a
3) b, cye
4) ayb
5)c
6) a,byd
7)c
8)b
e)d
10)
unidad4,
con"tru@
Volumen 1: Fundamentos de C
a,
o
o
o
o
o
o0
o
o
o
o
O
o
o
o
o
o
o
o
o
o
o
o
Introduccin
a la prooramacin con
___
enc
.
.
.
O,
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
a
Volumen 1: Fundamentos de C
55
lntroduccin alaP
Ejercicios de Laboratorio
1)
xe
y,
Ejercicio Opcional
4)
Volumen 1: Fundamentos de C
lntroduccin a la
Programacin con
Volum en 2: Estructuras
de Control en C
lnformacin de la pubficacin
5;i;:?j",i,ilff::
Marcas Registradas
IBM @ es una marca registrada
de Internationaf Business Machines
corporation.
oe roJuctos v seryici, Luo"n ser marcas
resisrradas o
351'":"#p"ililJJ}:*::
ffil::"merciafes
Red Hat
Linux
;:nfr"$:,?r".:igil:de
:r
ol
ol
:l o
ol
Contenido
Unidad
OI
ol
of
ol
.l
q
q
?n
o
a
o
o
o
a
o
o
a
o
o
o
o
o
o
1
1
1. Introduccin
2. Construccin rf Simple
3. La Construccin : i_et se
4. La Contruccn r: Anidado
5 Expresiones y operadores Lgicos y Reracionares
6. Operador Ternario
7. Las Diferentes Formas de Sentencias rf
8. La Estructur? sw :c ... case
rf
t?
l:
Objetivos de Aprendizaje
of
d
d
a
.-)
z-
5
'7
IU
1a
tz
o
t
Resumen
LA
to
Objetivos de Aprendizaje
29
Ejercicio de Laboratorio
?n
21
Objetivos de Aprendizare
1
2.
.Introduccin
Construccin lterativs
J
i..,:. _ _
Resumen
q1
CE
Objetivos de Aprendizale
Ejercicios de Laboratorio
56
57
Objetivos de Aprendizaje
1. Introduccin
2' Resolucin de Problemas Usando otras Construcciones
3. Ms acerca de la Sentencia for
5g
lterativas5g
H
\\v
o
o
Losmateria,::_qe:;"#X'Jil,?Y":Tj;,l??3.,cidosenparte
o en su totalidad sin el previo permiso escrito de
lBM.
65
lntroduccin.a la
4.
5.
6.
7.
ramacin con C
o3
(
continue
ov
La Estructura de la Sentencia
do_whi-te
Resumen
69
73
74
76
77
Objetivos de Aprendizaje
77
Ejercicios de Laboratorio
78
BM.
o
o
o
o
oI
o
o
O
o
o
o
o
o
o
O
o
o
o
o
o
o
o
'
'
.
'
.
.
y en los programas
?
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
)
o
o
o
o
de
Decisin
Introduccin a la Programacin
con
1. f ntroduccin
En la unidad anterior, se escribieron programas
que seguan una estructura secuencial
estricta' es decir, ejecutar una sentencia
despus de ra tr". r-o, prs iniciafes que
se
tomaron para aprender a programar fueron
tiles-para fortalecer las bases para
una base sfida no es suficiente pa resorver probremasla
5:3,T,[X?"Jr:ffiH.1rso,
2. Construccin
if
Simpfe
Ejemplo
l.l:
unidadl.esttuffi
x como el mximo,
Volumen 2: Estructuras Oe Control e-n-C
,)
.I
:l
II
:T
lt
off
O lt
.h{
^fr
olt
tt
!t
-G_ua
oel Estudiante
.lf
ol
ol
ti(x
ol
oj
o
o
o
>
r,)
La palabra reservada es
ot
o
o
o
o
o
o
o
a
o
o
o
o
o
o
o
o
o
srmple en c.
ol
o,u
if
:F
Orrs
ofi
o
a
o
o
o
o
l:[:.::f
if
r:i:,:"*,"cionat a >: ),
:,;#;l"":?flj:
construccin
r:
oara escribir
2 nain)
;t)
x es nayo:r aI valor de y
;..
1r:_
^-
;^
9'-rt
hA_.v-
Yue
-!^
eI walor d. y
Unidad
d.e y
l:Estructurffi
er
A continuacin, se
va-lor
es
?d
\::,,, i,)
siguiente
; se ejeCuta. La salida se
24
,.
:::$ffi::fil"rtos
Fin del Ejempto
l.i
El programa
o
o
o
o
o
a,
o
o
o
o
o
o
o
o
oI
o
o
o
o
o
o
o
IE
\v
*_;.C_:Cie
.i*eu::_C.:t)
2 nain O {
:
l:,-_ e:a 1,.
- / * Aceptar Ia e,ciad de1 Clien
te * /
.
::-:,-_:,"_-:.::e.c: _a edad d:_ c-.6
sca:i,,?C,,,&ecad),.
7 /* Verifi_car si 1a ed.ad del cl_rente
es mayor o ign:al a 2l airos *
/
E
(e:ad
ri
>: 2i,
-:
^*r-_ _..
f.
\ :_
--,',--
o ,_,
o
o
o
o
o
o
o
o
o
o
o
o
,_
',a
:2i
,.
3. La Construccin
if-else
rf (condicin)
if-erse
se o,a a continuacin.
sentencian;
j
c l <c I
sentencial;
-centenc1an,.
l
si la condicin es verdadera,
o
o
o
o
o
o
o
o
senLe: i:aJ,.
Io
c_ : ::.-, + :.-:-.:
Unidad
l:
if_erse:
Estructura Oe ControlOe
Oec,sn
"Positivo\n")
"No Positivo\nl')
else i
printf
else
pr
);
- Revisado
2 mainO{
3
int x, y;
4 /* Se le inrtis ar usuari-o qlue ingrese e1 wa]-or de cada nmero */
5
printf ( "Ingrese dos numeros. enteros: ,,) ;
6
scanf ( "td 8d", &x, &y) ;
7
printf ("El- val-or de x es: td\n" , x) i
8
printf ( "El va-lor de y es: gd\n,,, fl ;
*
9 / Verificar si nl^.as variables contienen el n'sno va]for *
/
10
rf (x :: O
11
printf ("Los numeros ingresados son iguaJ-es\n,,),.
Unidad 1: Estructura de Control Oe OecsiOn
:F
OI
ol
Verrfi-car
o l(
of
of
ol
ol
rl
ol
ol
ol
oi
ol
el
ol
j'c
a
o
o
o
o
o
o
a
o
o
o
o
o
o
o
o
o-,
a
o
o
tlproglgr"cin
cor: C
> _\'/
-;-!a/tf-!'-11-ul
,/- Verificar
Introduccin a
': ix
of
ol"
ol
ol
ol
__
l-
rL=..-1ll-
si e1 valor dexes
^t ^^
P-::-_:
:_
].=::_:.-a
aqu...
4. La Contruccin
if
Anidado
v t " Lt
Y t -.
^eiFrC
t arrl
t.rr1
Unidad 1: Estructura Oe
Coffi
ntroduccin a la pro
I Estudiante
22
23
^+ [| rtr1
vrrrrLr
.-L va-Lor maxl_mo eS: gd\n,,, x)
^ri
20
e-lse
,.
g:
^^
^t >e
Verificar
que y es mayor que z - i
i: ty > z)
pr::l:: i "E- _,. --: ;:]:x::.1 s :
24
25
26
21
.:
d\n,,, y)
,.
EI>=
28
)q / *
rf (z > y)
La waria.ble z ti_ene eI nximo val_or -,/
- ^e!-r-__
I :_
-.-:tO:
;aX.;:,:
:S:
?d\::,,,
Z) ;
i:ilil:"8:
;iJff:?fi:ado
sentencia
correlacionar cada
erse
if
andado.
con su correspondiente
if(x>z)
*! r / r.ra
^*i rnLr
( '.L-L ValOr
|Jr
if
i:
dentro de otra
es bastante craro,
,.
else
printf
La primera sentenca i
if (x >
y)
if
(y>z)
Unidadl:Estrrct@
o\
o
O
o
o
;:"$.:il?,"t;:
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
es una construccin
claridad.
ii
v
y el derecho.
o
o
o
o
o
anterior
,11H,,;"n oT'.."1.J0,"
i
are
^!
1,
(&
or
oi
.i
ol
of
ol
OI
((J
*.-*
.iJji./
p::nLt(,,
^- i ^+.
_:J_:=_,
J:,
num es un palndrome.
j=:+::.c-;
-ri-- -.'
lc
j,,,
lar1vd,:.c,.
I
:
11 ,/* Verificar
qrre
g4 a:.*ts:(j
nme-c ingresado es
a-- el
de 3 dgitos */
1,2
else
13
if (num <: 99 I I :run >999)
{
1,/
p::-.--: (,,D:c
Ld-(J 'ncorrecto' ingrese
un numero \
i5
-----..t
de
3 cigiros\n ,,);
\6]
77
else {
18 7* Mostrar 1 os datos ing-resado5 *
/
19
prrntf (,,La entraia es: gd\n,,,num),.
2a 1* Se extrae eI dgito
izquierde */
2i
:zquie:do=num / 1OO;
22 1* Se extrae e1 dgito
derecho *,/
derecho:numg10,.
VolumenZ,@
Unidadl:
gstruc@
24 / * verificar
derecho *./
za
26
21
30
28
29
el-se
JI
num) ;
32
A>10
(a-25) <= max
b<=0
(b*b -2.a) < (c.e)/2
5.1
Operadores Relacionales
Menor que.
Menor o igual que.
Mayor que.
Mayor o igual que.
Unidad
'1:
1O
o
O
o
o
o
a
o
a
o
o
o
5.3
I
.l
o
o
d
o
o
a
""
a-
o'
o
lgual a
No igual a
Effos pertenecen
de precedencia separado por debajo
de los operadores
relacionales' Esto ".'n.-g'uoc
signifi-ca qr" un-rna expresin que
invorucra operadores relacionales
como operadores de igualdad, los
operadores relacionares se evaran
precedencia' La asociatividad
con una rr.rre
de los operadores es de izquierd"
"ru"ha. ntgunos
ejemplos vfldos del uso de los operadores
oe iguaiJal
pr"runtan" a continuacin:
a
o
o
a
Operadores de !guatdad
r=
o
o
o
o
o
5.2
lntroduccin a la pi-ogramacr^
cc
ExpresionesLgicas
il:rr:'i:r,:rt;f:r::?j;.
6;
r
1,0
;:#::?
l
Y
O
(AND)
(CR)
NO INCT)
:::'r'".'";fl:j::'
_
::
:._i:
!,
..,
.:
?,
2 l:
0)
::i::l#,'"'L:i,"#,"':iilU:*:j:,n"
Categora
Operadores
Unarios
++-
Aritmetica (multiplicacin,
*/z
orvtstn, mdulo)
Aritmtica (aOciOn,iuOJEon)
I
+-
Asociatividad
Derecha e izati"rrl
lzquierda a derecha
lzquierda a derecha
----
lzquerda a derecha
VolumenZ:
gstr@
Unidadl:Estructuffi
Introduccin a la
lgualdad
lzquierda a derecha
Y (and) lgico
lzguierda a derecha
&&
(or) lgico
lzquierda a derecha
No (not) lgico
lzquierda a derecha
Tabla
Ll:
Jerarqua de Operadores
6. Operador Ternario
El operador ternario en C es una construccin if de una lnea la cual tiene tres
trminos. Los smbolos interrogacin (?) y dos puntos (:) se usan como operadores
? p::nti("
(a::b)
Ig.*a'e"',:."
: ::_::::l"lic
soi-i iguales\n,,);
b:8;
y=1:::h\
l-'.
una
autoexplicativo.
1 #include <stdio.h>
2 mainO i
3
int num1, num2;
4 /* Se aceptan 1os dos n.meros de1 usuaro */
5
ori:rtf ("f ngrese l-os dos numeros: \n")
6
scar:f ( " ?d ?d", &num1, &num2 )
-7
/* Se muestran ]-os nmeros ingresados por el usuario */
8
printf("Los numeros dados son: Bd y Bd\n",ituml,num2);
,.
,-
12
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
lntroduccin a la prograinacjon
:o: :
.rl
I
I
if,
,/* Verificar
qrre eI noero 1 es mayor que el nmero -/
2
if (nunt>nun2) i
/ * S e1 nmero 1 es rnayor que eI nmero 2
- -i ri,*r
:-. ( L_ ,aX:mO varci es: '::,i:r',,
I
I
efse
O,
,.
o
o c
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
5
o
o
o
o
#'nc-uie <sri1o.h>
jrllc_-l
/ \
{ I
r
J
Introduccin a
_ la_ programacin
.
con C
:_
else
15
t-6
71
18
I9
^-
20
2!
^t ^^
I -
22
^-l*-i
21
22
rJ'i :<l
ti
,.
de
l:
Paso
3:
Volumen 2: Estructuras de
ConJrolenT-Z
o
o
o
o
o
Inroduccior a la pro;-ama:rcn co
,l.A.
o
o
o
o
o
=
-
_:_
- _ ..
-: . . :_ : . ; )
l._
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
:.'<l=:l_.,,,ra,',&cn);
i) e-tto"
lo"- ;.:::t:
:
:':=''-'A',)
/" Er resultado entre cualquier
letra
i j (ch-\:97)&& (ch<=I22) ) /- s
{
es mrnscu]a - /
cr-:d-if,. ,/* Se transforma en mayscula ,,/
r^-f
err L!
v_f
fo
!o
,O
es 32 -/
Jrrj,u..
'':u
Core-Lat.i,a
eS:
,:,,.:-,,,,::_i:,
ifl:oi::"rver
de
if.
fi
;o !,
Unidad
l:
gstru
dicha
Gula det.Estudiante
if
f. if (condicin)
Ejecuta una so_l-a sentencia,.
2 - if (condrcin)
Ejecuta una sola sentencia;
else
Eecuta una so.la sentencia,.
3. if (condicin) {
E;ecuta una o ms sentenc.as;
]
efse
Ejecuta
una
rf (condicin)
Ejecuta una sola se:::e:
efse{
if (condicin)
E j ecut a u:-a j:
p I so I
riF-':':
1--:
5.
I i
i f \vvrrqr!rvtt/
lrA
44
^
-^-:l
!\
l_!__-. ^
--3-
^- ^^
^-,
'-t
..--l:
q=nren-
:-+ti-_a u:la
qFntcnni:c.
.'
]
^^
^t >c
sa
E.-
tO
o
o
o
o
a
o
o
o
o
o
o
o
o
o
o
o
o
o
O.
!r
ol
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
t
t
t
lr
li
p
tio
o
o
lntroduccio:l a la p
s"cJ
e-
tj-t
rS
prrtlL--:
-Fi
/ lrrl
t L_L
tr_1
::1,::g:
if (x::
"o1o
C)
rf (x:
0)
enT
Unidad
l:
Estructura de Control d
OecOn
Iz
Lasentenciaprintfseejecutasinimportarsisecump|e|acondicinx>
Esto sucede porque si la condicn evala a vERDADERo,
el computador ejecuta una
sentencia nufa simbolizada por ef carcter ,;, que sigue
a la condicin (x > y). En
cualquier caso, la sentencia printf se ejecuta. Si la
condicin evala a FALS9, la
sentencia nula se salta y la sentencia printf se ejecuta
de todos modos.
8. La Estructurl
switch
de
- case.
case
'
a= c:
--:
j::.-_=:-l-:S,.
_ ,.
;_^
-_==.-,
. C1S+'.-:
-:.':
:;=:;, "."
ca
se
va r cr:-:
sen:enc:as,.
brea k,.
dof
:rrl
sentencias,.
break;
)
1 #i-nclude <stdio.
2 mainO {
h>
1g
o
o
o
o
o
E /* Verificar
.inmero
entre 1 v 7 En caso contrario
lndica aJ- usuario*.que el nmeroe,et
es. j-nvlido
oi
oi
:I
o
O
a
o
o
o
o
q
o
q
o
?
?
o
I
?
aut a
l\J
I
,t.
p
D
sv
se
j
*_o/ - \ Ir
^
/nr1
\rru1L,
f b
10
oi
o
a
o
o
o
o
o
-.
^-l-!-/rr-
ol
ol
/r:
atrr
ol
ol
a
o
IntroCuccin a ia proqrarncin co r-
rr
- <
lJ_ ar L !
-<o
ES
l1
r2
13
,1
..
_5
hro:
16
ttt.
-,ir++
P:rrrur
i- r lrr
11
hro:
i.
18
yarrjLr
/tt_.\ :_
l^-^-r..
;;
aq4
F.
a:a:
1.
2I
22
nvi-+
Prtru!
lre
nri
nj- : I tt--
14
23
24
-icf
:, I -.
ttt-'
\ :_
k,.
L
]ra
l,
n-r
r:
25
c
21
L LLaLLZd
el swi-tch
:r
--c
::
_,
,.
Volumen 2: Estructuras
Oetonten
1e
ef
se -f (num-dia := 1)
printf ( "El 7 es
Domi_ngo\n")
,.
vlda.
Paso
"
l:
Paso 3: Si (mes
es
vlida.
Paso 4: Si no, si
[g, 4,
y ar_: > O)
6,IIl y ef dia
(mes 2 y dia
ld
fecha es vlida.
Paso 6: Si no la fecha ingresada no es vlida.
EI programa que implementa el algoritmo se da a continuacin:
EI
#lnc]ude <stdio.
marn O
5
6
h>
scanf (',?d,,,
10
&mes) ;
20
.lo
o
r)
o
o
o
o
o
o
o
o
o
a
o
o
a
o
o
o
o
i "
Venficar
-q can
", 6:
=:
:-
oo
__= - -:
fechaValida:
si e]. mes tiene
Veri-ficar
e-se
rf
1i
( (mes
ir
^t
r,r=-- --
*=re::*
, I nes
mes -:9
:
=ur-:t-ll_lc
r;
-^
iecra
r,'a-L .
c= : 2;
.I
- 1^^'
a
o
a
a
o
o
a
o
d. a,
i_:sCA/
cas e
dra, \
brea k;
t
I
soJc
3: printf("?d
anio);
brea
%d %d es
^j
k,.
o
o
o
a^
IU
O
o
a
o
i Ic);
que el da ingresado es rt icic r1-"1\
Verificar ql:e e1 mes i_ngresado es walido (1--L2) *
/
rf ((dia >:1 && Cla <: l-)ee (mes >: _ e mes <
= _. !6-:._-, > 0, i
Aqu el da ingresado puede ser wIrcio, se
verifrca
si g] mes
30 das *,/
if((mes:! llriLes
(cia <: 30 ) )
fechaValjca = _;
'- Verificar si e1 ao es bisiesEo -,1
of
O
O
ol
or
o
o
8)
a
o
o
o
o
o
a
a
l^ --^ ^ la
Hrol-3-iaJrf"rr'uJuuuJIt a
uso ncorrecto?
definido como
flDat
,! f 3l i 3l
a) ptol 6i
b) ptli t3l
c) ptll t1l
d) ptrl 21
i0)
b) Un arreglo bidimensional.
c) Un arregio unidimensional.
d) Un arreglo de O dimensiones.
o
o
a
o
o
o/
o\
o
o
O
o
o
o
o
o
o
o
a
o
o
e
ri
a
_l
t?
o
Votumen
.^
9) Para un arreglo
*l
lf
OA
oi
O
lnt-n^l riA^
Unidad2:Rne@
@ Copyright tBM Corp. 2005
Los materales del curso no pueden ser reproducidos
total
o parcialmente sin ef permiso previo escrito
de lBM.
bn6l---
1t
2)c
3)b
aL
:!
s) ayb)
6)d
\'t3"'--'='l!---\
*
\
7)b
8)d
e)b
l0) a
o
o
a
o
a
o
o
lntroducciol a le ?rocrraot3^ ::
.
.
'
en ra sorucin de probremas.
Usar areglos unidimensionales y
bidmensionales.
Aplicar arreglos a problemas con matrices.
fv4anipular los elementos de un
arreglo tanto para arreglos unidimensionales
como arreglos multimensionales.
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
O
o
o.
O;
o
o!
.l
q
q
q
a
o
Volumen S: T
Unidadg:@
, -
,-
Ejercicios de Laboratorio
l) Escrbir un programa en C que tome 10 enteros positivos
2)
Los elementos del borde son aquellos que estn en la primera y la ltima fila y
columna. Pueden usar mltiples estructuras iterativas para solucionar este
problema.
3)
11
121
1331
14641
a,
46
o
o
o
-_
Unidad 4: Estructuras
A
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o (,
tntroduccn a la programac,r:
'
o
'
ff;*;j
J;:."
a travs de.
o
O
o
o
o
o
o
o
q
o
it
?
?
o
I?
p
IfD
('ul
Volumen 3
Unidad 4:
*:l:"j:::d:l
Estructural
47
l. Introduccin
En las unidades anteriores, se discuti cmo declarar tipos de datos bsicos coro
inr,
! fl-oat, as como las estructuras de datos llamadas aneglos. Se trabaj en
situaciones para solucionar problemas que requeran que se usase slo uno de
estos
tipos de datos o estructuras de datos.
char
personas.
Hasta ahora, el mtodo conocido para hacer esto era declarar tres varjables
enteras. taf
como sigue:
'
int
rnt
rnt
int
4g
o
o
o
o
cD
o
o
o
o
o
Gui::e,
:s:uCiante
Las operaciones que se hacen con las fechas son todas comunes,
no r:nDci-i3
especfrcada, como por ejemplo 'Encontrar el nmero de das
transcuridcs
fecha ocurri ms temprano'. Las estructui"as ayudan a alcanzar
esta ccnesron
o
o
o
o
o
o
o
o
o
o
o
e
o
o
JH
b (0
o
o
o
o
,.
m-iemb::c_l;
mi emb::o_..
|;
Aqu, la palabra
signficado.
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
:r:
lrrL
ul-4,
fnt mes;
lnt ai-r-lo,'
j;
Esta es algo que ya se ha visto antes. sta define una estructura
llamad
iecha
con
los miembros dia, mes, y anio, todos los cuales en esre caso, son
enteros. Sin
int dia :
Nota: Lo anterior slo define una estructura. Ninguna variable est declarada
all. para
declarar variables, se puede usar la siguiente declaracin.
Unidad 4:
"itrito
Estructwas
nacimi-ento. dia
j ubilacron. anio
variab-Ie
ni embro
ingreso_trabajo,
jubilaclon;
sigue:
strjc:
F^^L^
_sulO
rnt dia;
int mes,.
int anio;
Jnacimiento, ingreso_trabajo, jubilacion;
El siguiente es otra forma de definirlas.
c),
air .
Unidad 4: Estructuras
Volumen 3: Tipos de
Oatosffi
o
O
O
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
q
q
d
.l
q
q,
r\ I
)
IA
R.
_struc
int pat:re_eltera,.
I ta nUirLe]:aCiOr;
: :.; denorninacio..
Note que se ha omitido <nombre estructura>, l cuaf es opconal.
Las variables
creadas A y B, tienen las mismas propiedades que la definicin anteror.
Fin del Ejempto 4.2
Ejemplo 4.3: Nombres de personas
Se sabe que generalmente los nombres de las personas se registran como prmer
nombre, segundo nombre y apelldo. Se puede definir una estructura
llamada nonLbre,
con el primer nornbre, segundo nombre y apellido como miembros.
struct
nombre
mi-Nombre;
tamao.
Se puede acceder al
de Ia
enierode0a44.
TiposOeOffi
Unidad 4: Estructuras 51
-t
IJ
I
_.
c:n
o
o
o
o
o
o
o
inti-oduccin a la Proqrara:ron
) yt
def
nombre de
p. mrNombre. primer.[
s se requiere imprimir
sque:
O]
segmento de programa:
Tmn-i;ln-i-prinera
r^.-er!
J-a.
Lnea de la Direccin a 1a salida estndar */
j
::- :^: ("?s\n", p.primera_linea)
,/ - rnpr:-mir 1a seg.una Lnea de
1a Direccin a ra salida estnd ar * /
::-.--_: I "?s\n", p. segunda_]inea)
/- Inp::nir 1a ca1le a J-a sa1ida estndar */
,.
,.
Volumen3:
TiposOe@
o
o
o
o
o
o
o
o
o
o
o
3-':
o'ei :sudiante
o
o
o
O
O
o
o
:::::Xrrfl::,[?j"
o
o
o
o
o
o
o
a
o
o
dectaracin vrida
st_:-uct externo
struct :rivell {
st-uct nlvel2 {
struct nivel3{
n'i-
*/
l-1
3; ll
stn de declaraci-n
de
Ia estructura
?
b
o
frlosofia [100]
o
o
o
o
o
o
o
.^uw
^
IntroCucci:n le Proora-r2^r.F
J *
'sv'J"
Volumen a: Tip
Unidad :
,^
_,
. ..
@CopyrightIBMCorp.2005
EstruczuEl
Sg
ext.11.12.t_3.k
Note que ef nmero de operadores que se usan es tanto corno
ef de definiciones de
estructuras' Es una buena prctica de programacin evitar definiciones
de estructuras
con anjdamiento muy profundos.
prirrcipal.
*--
i-v.
;;;;;,._._:=,..,
j;
continuacin:
lan-i
s!rvrrrlrqvL- -^;^-
Volumen 3: TiposOe
Offi
o
o
74: (4 * 1 + 3) / 4 : 1/4
Esto es lo mismo que
(cie;rominacior * par:e_entera
or
Paso
#include <stdio.
o
o
h>
marn O
MCM
l:
a
o
o
o
o
o
a
:l
?\t
+ numeradc-) / denom:-nador
o
a
o
o
o
o
o
o
a
o
o
o
o
a
o
o
o
o
o
o
o
a
o
o
o
o
o
1
u
'tn
1t
)7\
)rt
Dl
struct fraccj_on_impropia
int numerador,.
int denominador;
Volumen S:
Unidad 4: Eshucturas 55
72
13
ix, Y, Z;
i-nt u, vt
mcm/ mcd;
,.
,.
,-
Unidad 4: Estructuras
56
o
o
o
o
o
!=i
:,
o
o
o
o
o
o
o
o
o
o
o
o
O
o
o
o
o
o
o
o
O
o
o
o
o
o
o
o
o
o
o
o
o
tI
10
b
I
p
i .line:a.]ai
,1
:,
i, .
enOnrl:j-:
)l
nrrmo-:^i--
- .:,.:.::--:_e:l:a:a
- A. J::t!n
--r1,-r _ .:.-:rurne:at--:,.
c,)
o!-4J!- caJ
r
-
Y'=
grlL=-Gt
Y nnmi-=^--
5q
I
)
56 /* Conwertir 1a
para formar y */
51
-i(3.nj:r,.:ajc:
segrr:nda
\_ r, ;n,:-=--
59
Y. cienoii:,ado
I
6!
-) ^^
:::a
improria
--;^-.
3. deomi nadot
+ 3. numei:acior:;
62
vr.rislLc-c!J_
..- - --;^.-
63
Y. denonr nacior
64
65 /*
66 /*
61 /*
68 ,/*
69 /*
10
17
12
nixta
i
58
6A
fraccin
14
if (u >: v)
u: u ?
15
efse
16
78
v: v ?
i,f (u :: 0)
mcd : v,.
19
e-1s e
13
11
tc
v,.
u,.
mcd : ui
J
TiposOeDffi
Unidad 4: Estructuras 57
clase
410
B
r-
D
B
Unidad : Estructtras
Effi
o
o
o
o
4
Curso 5
Uurso ti
Curso
.r
o
o
o
o
o
o
o
o
o
o
o
a
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
Oi
ol 0
ol
ol
ol
al
toutut
I uut
A
A
E
132/18=7.33
Todo lo que se debe hacer es sumar la puntuacin de cada curso, multiplicarlo pcr 3
(unidades del curso) y dividirlo por el nmero tctal de unidaoes.
El siguiente es ef argoritmc para sorucicnar este probrema:
Paso
to
lntroduccin a la
EI
2
3
4
I
8
10
11
I2
13
'1 A
15
L6
*7
Volumen 3:
TiposOeffi
Unidad 4:
Estructuras
59
.l-^^
,.
rr\.
com
^h!^-^-.
: o; ) < 6; j++){
:f
lush (stdin
,-
Cul:so
l-a-tr1
\.
, irl
J,tt,
1
{
_-
t,-r
i^l
uel
J;
= C; i < 6: i-+\f
rtt
:irj ( "?c\n", toupper (Iista Ik] .yraqw)tJ.l
*--i^^
f I1
));
:-: (:oupper (lista Ik] . grados t j I )
num:num*30,.
erse if (toupper(l-ista Ik] .grados ijl )
rRrl
num: num + 24,.
e-lse if (toupper (t_ista Ik] . grados t j I )
vJ
num:num+18;
el-se if (toupper(l-istaIk] .grados tjl )'D'
)
Unidad 4: Estructuras
Volumen 3: Tipos de
Oatoffi
Q.
o
o
o
o
o
o
o
o
o
o
o
o
:e
o
o
o
o'a
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
t
?t
t
A),
I
I
o
p
i
Introduccin a ia
^t
--..
o
o
o
o
o
o
O
Esi:Ciante
L_r.:Lr-- t/ lr-:Jl
__1\ o=_L
s:Jc:r,:+
listaIk].ncrd)
'
'
'
Volumen3:Tipo@
.
Unidad 4:
Estructuras 6i
l.t.dr""i" l" P.
"
el Estudiante
typedef
permite
a
los usuarios definir nuevos tipos de datos que son equivalentes
a
los tipos de datos
existentes. un nuevo tipo de dato puede ser definido como
sigue:
fl-oat u
:--
c--_
- ,
anio
que es equivalente
anio A, a, :-*.],:.:-::.:::::c,.
Se puede usar el
t\ipeie
-l-
y:
anio,
gu son realmente un
C;
rc siguiente.
_;
tlpedef strucc
m i oml-. -.
miemb::c_2;
;, ^-"-^ -.
nuevo-t ipo,.
typedef struct {
char noid[9];
char nombre [4 O] ;
int a-ltura,.
Unidad 4: Estructuras
Volumen 3: Tipos Oe
Dato@
(0.
o
o
o
o
o
o
o
o
o
o
o
o
o
o
O
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
3 - ;a cel Estudiante
i_ .u
oa
?
::^
Permite definiciones
'
estructuras.
'
No se necesita escribir
struct
Asignar un nomcre
'
,,,..
l_
declaraciones concisas
de varrales basados en
nombre-estruc-r::ra
declaraciones ms legibles.
hace
ras
4. Uniones
Las uniones son similares a las estructuras. Af igual que
las estructuras, stas contienen
miembros cuyos tipos de dato pueden ser diferenies.
En una unin, los mrembros
comparten el mismo espacio en memoria. La razn principal
para el uso de una unin
es ahorrar espacio en memoria. Esto es especialmente it si,
en una apticacion, slo
uno de los miembros se usa bajo una condicin. Los valores
no tienen que ser
asignados a todos los miembros al mismo tiempo.
rrni
urrr v_:
^^-^
-tulLJj
j=e- :^
irLr
- a_
erJ:)ro_
J;
en strucr.
uni on {
j.nt x,'
float y,.
char z;
o
o
o
o
o
o
Introduccicn a ia Prcci-anracr:
l-
^.
Volumen 3:
Unidad 4:
Corp. 2005
.tos materiales @delCopyright tBM
pueden
curso no
ser reproducidos total
o parcialmente sin elpermiso previo escrito de lBM.
Estructuras
Og
lntroduccin a la
por
el
Los miembros de una unin pueden ser de cualquier tipo de datos, arreglos
compilador.
fl
,l
.t
b.z
Por lo tanto, una unin en C es bastante semejante a una estructura. El uso de unin
depende de s ef ahorro de espacio es vital para la aplicacin
Unidad 4: Estructuras
o
o
o
o
q
o
o
o
o
o
3.:ra
::l
Estuclante
lntroduccin a la Proorarna:i:-
Resu rnen
Ahora que ha compretado esta unidad, usted
debe ser capaz de:
. Explicar cmo declarar estructuras en C.
'
'
'
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
programas en C.
Describir er uso de tener tipos de daios definidos
por el usuario.
Definir unones y explicar cmo su uso difiere
del de las estructuras.
travs de
ol
Unidad 4: Estructuras- 65
Copyright
@
tBM Corp.
t::l?!yuo"n' r"i2005
Los materia tes del
irod ucidos tora
"u elpermiso
o parcialmente sin
p*u
de lBM.
""[rito
y;
t;
' b) struct {
int x;
float y;
) et
C) struct
i n+L a
f,tt
float
l
) st
r.
y;
F.
2)
Al igual que los arreglos, las estructuras no pueden contener mltples elementos
de datos de diferentes tipos.
a) Verdadero.
b)
3)
Falso.
a)
b)
c) Constantes enteras.
d) Constantescarcter.
4) Cules de los siguientes tipos de datos son vlidos dentro de una declaracjn de
unton'1
Unidad 4: Estructuras
Volumen3:
TiposOeOffi
o
o
o
o
o
o
o
o
o
o
o
o
a
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
a
o
o
o
O
o
o
Gu, :e_!studiante
-{)
Introduccin e
Programacin con C
estructuras?
lor.
a) a/ b, cyd
b) a. byc
c) a yb
d) Slo a
6)
s:ruct
I nr
float
i
y,.
h.
Es vlida la asignacin a.
a) Verdadero.
b)
x = u.\,, ?
Falso.
7)
tyoedef struct
i ni- w.
float
.|
a)
b)
8)
mr Prop.i a
y,.
,.
Verdadero.
Falso.
b) -rn i n
c) typedef
d) Ninguna de las anteriores.
-,,^^r^
__r'j-rae
^}a-v
nombre taOl ;
I crtqL
o
o
o
o-J
o
o
o
EstructuEd[$T
_
UnioaoZlEsiffiEs-
. . ^L-^,^
L*
T:::l?:s-detcubdno
o parcnlmente sin
@
En
varrables cje
oz
l0)
int x;
float y;
char z;
J
rr .
b) union{
int x,.
float y,.
st:ucr jech z;
Unidad 4: Estructuras
6g
o
o
o
o
o
o
o
o
o
O
a
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
a
o
o
o
o
o
o
a
o
a
a
o
o
ot
o'-
o
O
lntroduccin a la Programacin co
s)b
6)a
7)a
8)c
e) byd
r0) d
Unidad 4:
Los. materiales
Estructuras
69
Introduccn a la programacin
con C
0)
Unidad : eltructuras
Volumen g:
a
o
o
o
:cn
0'
a
o
o
o
Introduccin a la Prooran-iacin
.
.
.
o
o
o
o
O
a
o
o
o
a
o
O
o
o
o
o
o
o
o
o
a
o
o
o
o
or
,OJ
o
o
o
Unidad 5: Laboratorio de
Estructuras
71
Gua delEstudiante
Ejercicios de Laboratorio
1)
,.
It
li,ilr,j."r
fracciones mixtas
0,)
. Nombre.
. Cdula.
. Mes de inscripcin.
. Ao de inscripcin.
Realizar la bsqueda de cada suscriptor por
nombre, Iuego del ingreso de toda la
informacin.
I
:
Losmateriar"rd"?"c,o,3JXtJii,t"T":"9;"??3or",o"senparre
Fr! ,
=t_\N Ysv.lu5
tnli
Z
e
o
o
a
o
o
o
O
o
o
o
o
o
o
a
o
o
o
o
o
o
o
o
o
o'
o
o
E-ry---n-
------------
--nr-
a:I
rt_@
Introduccin a la
Programacin con C
Vofumen 3: Tipos de
Datos Estructurados en C
a
o
o
a
o
a
o
o
Informacin de Publicacin
Esta pubficacin ha sido producida usando Microsoft Word
2000 para Windows.
2OOO
y Microsoft powerpoint
Marcas Registradas
IBM @ es una marca registrada de Intemational Btrsiness Machines Corporation.
Microsoft Corporation
Red Hat
derechos
reservados.
ZOO2.
Todos los
No deben removerse las pginas en blanco que puedan aparecer al final de cada
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
O
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
Contenido
Unidad
l:
programar con
Arregfos
Objetivos de Aprendizaje
l. lntroduccin
2. Declarar un Aneglo en C
3. Inicializar un Aneglo
4. Desanoffar y programarAfgoritmos
con Aneglos
5. Cadenas de Caracteres en
C
Resumen
24
27
28
de Autoevafuacin
30
31
31
1. Introduccin
32
33
45
Unidad 4: Estructuras
Objetivos de Aprendizaje
1. Introduccin
46
48
49
49
50
5l
51
52
53
67
68
71
74
75
Objetivos de Aprend2aje
Ejercicios de Laboratorios
75
76
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
fntroduccin a la
ramacin con
'
'
.
'
.
de:
Expficar ef concepto de anegros en ra sorucin
de probremas
Definir qu es un anegto
o
o
o
o
o
o
o
o
o
o
O
o
o
o
o
o
o
o
Volumen3:Tipos@
Unidad
t:
erogramar
de fBM.
co@;
l. Introduccin
En las unidades anteriores se estudiaron los.tipos
de datos simples, tas estructuras de
las construcciones iterativs. Esta unidao or'crt"
lorlp"f" 0"t"",
3H:l#:ffJ':iul
Muchas aplicaciones requieren el uso de mltipleg
elementos de datos que tienen una
caracterstica en comn. Argunos ejempros.orrn.
ron,
o
.
'
.12
.24
ol
.65
of
Figura
Unidad
l:
Programar
2
@
o
o
o
o
o
o
o
o
o
o
o
o
Dos dimensiones
La Figura 1.2 muestra un arreglo bidimensional.
12
-5
65
88
32
66
o
o
o
o
o
o
o
o
o
o
o
o
O
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
b
o
o
2. Declarar un Arreglo en C
En esta unidad, se va a aprender solamente acerca de los aneglos unidimensionales.
Se puede declarar un aneglo unidimensional de la siguiente form:
int-
[ql
24
2
65
7
<_
f r1
d^ Ll
J
a[0] cualquiera[k]
donde
0 <= J a= 4 reportaunvalorentero.
Unidad
l:
Programar con
Aneglos
Introduccjn a ta programacin
con C
Gua delEstudiante
:':fr:Xilg?iXffg::
lor
a[a]
int, f loat
"'p""i-Joor
oe tml"
0"i""
er nmero de
$m1:o|,"i|,":touaoor
;;#irri"rpre
3. Inicializar un Arregto
f;;j#:s:
iniciarizar un anegfo
a travs a"
"rign""ion.
ras
int k, num[tOO] ;
for (k=0,.k<1OO,.k++)
num [k] = O;
Todos tos 100 efementos en un
aneglo son inicializados en 0. Tambin,
puede
anesfo en el
de decrararro (normarmente praseanesros
ffif$|:)un
;;;;ni"
Unidad
t: p
@
o
o
a
o
o
o
O
a
O
o
o
o
o
o
o
o
o
o
o
o
O
o
o
o
o
o
a
o
o
o
a
o
o
o
o
a
usando aneglos.
En otras palabras, para un arreglo num que est declarado en el programa, se debe
hacer que el primer elemento sea 1, el segundo elemento 2, y as suceivamente. Esto
debe resultar en un arreglo que puede vsualizarse como es mostrado en la Fiqura 1.4.
1
4
5
maino {
,/* Decl-aracin de variab]-es */
int k, num[100];
/* nI bucle asigna 1 al primer elemento y asf sucesivamenLe */
for (k=0; k <100; k++)
numlkl = k + l-,'
)
o
o
O
o
O
o
o
o
Arreglos
[r], y
usando ra siguiente
;::,:ffi:ivamente.
trOO
j = {_.};
i.l
ff,Hlffinfl::""
i#:.:fiiivo
gue
);
l
)
aqu */
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
O {
/* Declaracin de VariabLes */
inr k, num[1OOJ;
/* EI bucle inlcializa el contenido
del arreglo */
for (k=O- k <100;.k++)
numlkl = k + 1;
/* EI bucle imprime el contenido del
arreglo */
for (k=0; k <100; k++)
printf ( rnum [?dJ = ?d\nu , k, num
tk] ) ;
) /* ru funcin main termina agu */
main
o
o
o
o
o
o
O
num[0J =
num[1j = 2
num[2j = 3
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
in con C
num[99] = 100
Nota: se us una construccin terat
iva paraimprimir el arregro.
Fin det Ejempto f .3
A continuacin se exprican argunas
operaciones simpfes en ros
afregros.
Ejempro r'4: tmprimir ros Nmeros
rmpares de un Arregro
En este eiempfo' se asume que
el arregfo contiene nmeros
enteros. se quiere que el
5,,f#iliJ$gT:j,:':""1quellos erementos que se;; ni'"ro. impares. Er sisuiente
Vofumen
S:
Unidadt:@z
@
"ririto
de fBM.
Introduccin a ta programacin
con C
.
.
.
Paso
l:
if (num tkl * 2 != O)
printf (..Ed1,,, num tkl ) ;
[f:f impar.
,lJOoritrng. se verifica cada etemento det aneqto para determinar s es un
numero
S es impar, se imprim, ;i.",.;"t, y se
examina el prximo
efemento. del aneglo. El progr"r" que
implementa este algoritmo se muestra
a
continuacin:
El cdigo C inicia aqu...
d,e * /
main O {
']
&num
[k] ),.
Unidad
l:
program
@ Copyright tBM Corp. 2002
Los materiares det curso no pueden ser reproducidos
en parte
o en su totafidad sin el previo permiso escrito
de lBM.
si lo no es,
*,/
do {
> r00);
/* EI bucle inicializa e1 arreglo con 1a entrada */
/" del- usuario */
for (k=0; k <= (var_num_1),. k++) {
printf ( ,'f ngrese e1 el_emenLo ?d\n", k+1) ;
scanf ( u?du,
&num
[k] ) ;
or
k= 0 ,.
);
I:
10
@
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
Introduccin a la p
amacion con
printf
(,'num
);
se
recomienda
;ffiffiffi:l::
:,,!fiff,lilentos'
de la categora generar
de
'
o
o
o
Paso
l:
doi
if
(num
[k]
== var_num) {
VolumenS:npos@
Unidad
t:
, ^_
QCopyrighilBCorp.2002
los
materiales del curso no pueden'ser reproducldos
erogramar co
totaf
A@f
imprimir
J.a
var_num como k;
break.'
posicin
;-r elemento
__. qe.L
else k++,.
) while (k <= (n-1) );
Paso 5: Si (k > (n- r)) imprimirvar-num
nal:r O {
r'
?dtr , &numb) ;
^.
do{
Unidad
l:
Program
@ Copyright tBM Corp. 2002
Los materiales del curso no pueden sr reproducidos en parte
o en su totalidad sin el previo permiso escrito de lBM.
12
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
a
o
o
if
[k] == numb) {
printf(,?d localizado en 1a posicin
?d \
de1 arreglo \n,,, numb, k)
encont.rado = 1;
,.
k++,.
] while (k .= (n_r ;
if (encontrado != 1)
print.f ( " ?d no f ue encontrado\n
)
* , numb)
,.
for'
ii_::
|,1#:i:,
;:,:J"T'Ifu
m*ll*;
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
acon con C
(a
VERDADERO
#define FALSO O
int encontrado = FALSO:
/* No se ha encontrado el nme ro * /
inr k = 9,.
'/* Bsqueda l-lneal en un arreglo usando e1 bucr.e while */
whil-e ( ( !encontrado) && (k <=
n_1) )
{
ei
*!
yrrrLi_
var_num, k) ;
)
else
k++,t
if (!encontrado)
printf ("td no fue encontrado\nr,,var
Ef cdigo C finatiza aquf
Volumen 3
_num);
Unidadt:erog@
@ Copyright tBM Corp.2002
.
Los materiales
"rito
lBM.
l3
= 0;
/t,Este bucle realiza 1a bsgueda lineal
e:l un */
/* arregl.o usando el bucle tor */
for (k=0; k <= (n_l-),. k++)
i
if (var_num == numlkj )
printf ("?d est. localizado en J-a
\
posicin Ad\nu, var_num,k)
;
break;
)
if (k >
(n_1)
nrrm l
continuacin se muestran
:f3i[1",
Ejemplo
l:,*j',"Tffi?l?*;:"tgl'i
Entero a Ln Binario
""rplJ"riy,
|'.jrilr.-
'; J;'qr"
ir
etociente
"
Unidad
l:
pro
@
tt;
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
a
a
o
o
o
o
o
a
o
o
o
Ef ltimo cocenk
E
@
s1e1'qi''?:fr;j:!,,",i,",'i"**?:?lr1t-".;;:,ii:ffr:;,ff T;33;.Xtr
*ro-"i it il=* ,,,irrr""[""
i.:p, por sus ,;, en insfs).
.;;liiJ,io'qr"
equiiate ; u,!e escribe
como se muestra a
1010100
!- 0){
binario [kJ = Vdr_ num ? 2;
Var-nm = V 11U,n
/ z;
Paso 5: lmprimir
Ef programa
binario
desde la posicin 15 a la
unidadt:n@rs
.
Cooyright tBM
Corp.2002
Los materiafes det crso
no pueden l"ir"proorcidos
totat
o parcialmente sin elpermiso
prlr,
de lBM.
"rlrt"
el Estudiante
#include <stdio.h>
/* La funcin main incia aqul */
mainO
,,
?d,, , &var_num) ;
Unidad
l:
Prograrnar
@ Copyright tBM Corp.2002
Los materiales del curso rio pueden sr reproducidos
en parte
o en su totalidad sin el previo permso escrito de
lBM.
l6
o
o
o
o
o
o
o
O
o
o
O
o
O
o
o
o
o
o
o
o
o
binario [15]
o
a
O
a
a
o
o
binario
.
'
.
o
o
o
a
o
o
o
o
o
o
o
a
a
o
o
o
o
Paso
Paso3:num=
binario
pesojosicionar _
1
o PasoS:for(k=iS; k>0; k-){/-procesar
e1 nmero desde r-a derecha */
DUrn = num + binario[k]* peso_posicional;
peso3osicional = peso_posicional*2,.
/* Forma e1 prximo peso posicional */
'
VolumenS:fipos@
Unidadt:erog@
tz
18
o
o
o
o
a
o
a
O
o
o
o
o
o
a
o
o
o
o
o
o
o
o
o
a
o
o
o
o
o
o
o
o
o
o
o
o
o
a
o
o
a
o
un
programa que cuente el nmero de ocunenias de cada una
de las vocales A, E, l, O y
U, e imprimir la frecuencia de sus ocurencias.
o
o
'
.
.
Paso
l:
text
rexr
de
x++;
Oe@
.
Unidad
l: Programar
con
Arregloi tg
l Estudiante
carcter $\nn);
scanf ( "t.u, &text tkl ) ;
while (Lext [k] ! = '$') {
scanf (ntcr, &text [++k]
);
./* rnicializar
contadorA = 0;
contadorE = e;
contadorf = 0;
contadorO = e;
contadorU = e;
'E,)
contadorE++;
eLse if (toupper (text [k] )
contadorl++;
'f ,)
else if
,O | )
(Eoupper
(text tkl )
contadorO++,.
,U,)
contadorU++,.
k++,.
)
?d veces\n", contadorA) ;
printf("81 nmero de ocurrencias de E es \
?d veces\nrr, contadorE) ;
print.f("El nmero de ocurrencias de f es \
?d veces\nr, conLadorf) ;
printf ( "81 nmero de ocurrencias de O es \
td veces\nr', contadorO),.
printf (t'El nmero de ocurrencias de es \
td veces\nr, contadorU) ;
Unidad
l:
Programat
@ Copyright tBM Corp. 2002
Los materiales del curso no pueden sr reproducidos
en parte
o en su totalidad sin el previo permiso escrito de lBM.
20
o
o
o
o
o
o
o
o
o
o
O
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
ib
o
o
aqu */
Se pudo tambin consderar usar un aneglo para almacenar los contadores. Los
estudiantes pueden intentar escribir ese programa, y entender de que
forma sera una
buena idea , y de que otras formas no lo ser.
Fin del Ejempto 1.9
iresentado
continuacin:
1, 2,
Esta claro que se debe mantener el estado de cada una de las personas
n
como viva o
muerta' Se tendr un aneglo tlamado lista que contendr el estado.
Inicialmente,
todas las entradas en el aneglo sern inicializadas en vrvo. Cuando
una persona es
ejecutada, el valor conespondiente en el aneglo se cambia a MUERT9.
lista [k] indica el estado de una persona cuyo nmero en el pecho es k. ruma que
2, 5, 4, t,
Unidad
l:
Programar con
Anegloi
21
lntroduccin a
Paso
fa
l:
amacin con C
Declarar un anegto
lista[elrndividuo]
Paso 9: lmprimir
uuenro
etrndividuo
]
El siguiente programa impfementa
este algoritmo.
j""::::;::
v;
-!
/rLr
', -
if (n<=o) {
prinEf(nfngresar un nmero >
De condenadosrr) ;
Unidad f : progra
22
o
o
o
o
o
o
o
o
o
o
Gua del
Estudiante
entrelyN"/
oo{
printf("Ingresar 1a primera persona \
a ser ejecutada comprendida [t, ?d]:",n);
scanf ( "?d", &elfndividuo) ;
) while ((elrndividuo < t-) ll (elrndividuo > n));
/* Ingresar eI proximo > 0 * /
printf("fngresar un enetero > 0\n");
do{
o
o
o
o
o
o
a
a
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
/* ejecuEar elfndividuo */
lisLalellndividuol = MERTO;
/*
imnrimir
L
elTnrlirirrn
Lrt\E
*/I
1 .
/* e)ecutar ellndividuo */
if (lista lellndividuo] == vrvO) {
lista lellndividuo] = MUERTO;
,/* imprimir ellndividuo *,/
printf ( I'La persona ej ecutada\
Volumen 3: Tipos de Datos Estructurados en C
Unidad
l:
Programar con
Areglos
23
es\nu, elfndividuo)
#Estudiante
,.
nMuertos ++;
J
l.l0
5. Cadenas de Caracteres en C
Considere ef siguiente aneglo:
i;, .
carcter se denomina
l:
*,/
programarc
24
@ Copyright tBM Corp. 2002
Los materiares dercurso no pueden
r"proorcidos
o en su totaldad sin el previo permiso
"i escrito de en parte
fBM.
o
o
o
o
o
a
/* Declaracin de variables */
char rexro [1000]
inti=0,noTo=O;
/* Obtener Ia entrada del usuario de la palabra
prj-ntf (', f ngresar un palabra grande : \n" ) ;
scanf (tt?s", texto);
o
o
O
o
o
o
o
o
o
o
o
o
o
o
cin con C
,.
o
o
o
o
o
o
o
o
o
Introduccin a la
*,/
noTo++,.
t = + 2;
]
e1 se
i++;
l
la librera srring. h.
Los
Funcin
Descripcin
o
o
a
strlen
o
o
o
o
o
o
,a
TI
J
,o
sErcpy
strcat
.t
Unidad
l: Programar
con
Arreglos
25
strcmp
Toma
I vr,r dos
L(JD uduenas
caOenas como parmetros, y las comp_o_
Tro
t" primera
cadena es ms pequea
que la segunda.
Retoma o siambas son iguafes.
o,:'l'1tlTgra cadenaes ms grande que
,T segunda. (se usan
fa
fas. regtas iigijfriIIa
comparar lag dos cadenas)
I*::::..j.:i
3:::
Unidad
l:
Programa
26
de tBM.
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
lntroduccin a la
ramacin con C
Resumen
Ahora que ha completado esta Unidad, usted debe ser apaz de:
.
.
.
o
.
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
i
'o
o
o
'
Aneglos
2T
Gua detEstudiante
a) 11
b) 10
c)9
d) 12
'omo
Es vlida la declaracin
2)
a) Verdadero
b) Falso
3)
int
x [o]
a)0
inr
LL.J
;?
b)1
c)2
d)
+)
inr
2s.
Es mnecto
a) Verdadero
b) Falso
5)
r
a) Tercer
b) Segundo
c) Cuarto
d) Primer
al
'
6)
inr x[3j;
x [3] = 25;
28
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
O
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
8)
Introduccin a la
Qu es un aneglo unidimensional?
Una coleccin de datos, todos pertenecientes al mismo tipo, localizados uno
seguido delotro
a)
b)
c)
d)
9)
a)
b)
l0)
[k++] = k++;
Falso
Considere la declaracin
xlk * 1 t l-21 eS
a) Siempre vfida
int x [10]
est en elrango 0, 9
resulta en el rango 0,
i0
Aneglos
Respuestas a f a unidad
1)b
2)b
3)b
4)a
l:
tc
6)d
7)a
8)a
e)b
l0)
Unidad
l:
Prog.am
30
@
o
o
o
o
o
o
o
o
o
o
o
o
o
o
O
o
o
ttl
Gua del Estudiante
t-
l'*
.
.
.
Explicar la importancia
problemas
.
.
.
solucin de
enC
Ol
ol
ol
o
o
o
o
o
o
o
o
o
o
o
o
o
a
d
el
.ti
Volumen 3: Tipos de Datos Estruc{urados en C
'
@ Copyright IBM
Corp.2002
3l
studiante
1. Introduccin
se estudi' que en las situaciones donde rgggleren
mlsmo tipo se usa un aneglo unidimension"l.-irsemltiples efementos de datos del
como ejempfo, las catificaciones
de mltiples estudiantes, lo cuales pueden
,,"pr"rnt"rse en un anegfo unidimensional.
Los anegfos unidimensionafes in rt"r"r
u""tores usados en fas matemticas.
En c, una anegfo unidimension"ir"
decrara "'lo" rig;",
int notas tl.oo j ;
se aprendi a cmo.dectarar
Programar con Aneglos. gn
usar.
Sneglos unidimensionafes en fa unidad 1
unidad,
dimensionales, para ser precisos"tJ
";iar como usar arregros murtiareglos bidimensionales.
";
q;";;uiere
;;
la
1956
1960
1987
24
4 Septiembre
4 Junio
1960
1.9BT
Unidad 2: A,.reS
@ Copyright tBM Corp.2O02
Los materiales del curso no pueden
r"p.Orcidos en parte
o en su totalidad sin el previo permiso
"r escrito de lBM.
of
o
o
o
o
o
o
o
o
o
o
o
a
o
o
o
o
o
o
o
I
I
o
o
o
o
O
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
O
Charaqter
Figura
2.1
: Arreglo Tridimensional
Volumen 3:
TlposOe@
Unidad 2: Anegtos
@
MulOimesiiles
93
.f
o
o
o
o
o
o
o
O
O
o
o
o
a
o
o
o
o
o
O
o
o
o
o
o
o
o
o
o
a
o
o
o
o
o
o
O
o
o
Chragter
Figura
2.1 :
Arreglo Tridimensional
loar
numb []-01
tral
o
o
o
O
o
o
Volumen 3: Tipos
de@
tablal0l tol = 1 rablaiol tl.l = 2 tabl t0l t2l = 3 rabla tol t3l 4
=
tabla t1l tgl = s r,abla t1l t1l = 6
tabla t]-l t2l = Z rabla t1l t3l = 8
E,abla t2l tol = 9 abla I2l tll
= 10 tablat2J l2J = 11 tabtai2l t3l = L2
Los.aneglos bidimensionales se pueden inicializar de muchas maneras.
Considere la
siguiente declaracin e inicalizacin:
{t,2,3,4}
{s,6,'I ,B},
{s, ro ,7r,L2}
),
{L,z,z},
{+,s,e},
{z,a,s}
I
l,
li,
u
@
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
O
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
macion con C
'
fita 1.
'
.
o
Vofumen 3:
TiposOeffi
los
for (I=0;1<10;1++)
prinrf ("gd ', rabla ikl tll
printf (..\n" ) ;
);
10532
52257
32 57
99
.
.
.
Paso 3: mientras (no se hayan verificado todos los elementos && no hay
desiguald entre a y aid i
if
(k != i)
if (aki == aik)
incrementar k, i;
e1 se
Unidad 2: Arreglos M
@ Copyright tBM Corp.2O02
Los materiales delcurso nio pueden sr reproducidos
en parte
o en su totalidad sin el previo permiso esoito
de lBM.
36
lr
o I'
o
o
o
o
O
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
O
o
o
o
o
o
o
?
?
I
main O {
go_on;
clo
l_a
matriz entre \
columna ?d\n' , k, 1)
scanf (n?dn, &matriz tkl t1l ) ;
,.
l
/" nI bucLe verifica si es una matriz simtri ca * /
go_on=VERDADERO;k=6;
while (k <= n && go_on == VERDADERO)
1=0;
tr
T
Volumen 3: Tipos Oe
Oat@
macin con C
Incrementar k, i;
?,
Introduccin a la
37
go_on = FALSO;
''|
k++;
)
est.ndar *,/
if (go_on == VERDADERO)
print.f ( "La matrz
es
simtrica\n");
nO
es simtrica\n");
el- se
-i
^ ITtdtriZ
'.ts C rI tttuq
/t rLr
I
t
*,/
x
j
matrices:
10 20
567
30
25
2
1
3021
354
234
Paso 1: lngresar m,
r,
gaipos;e D;ios
Estructurados en C
38
o7
o
o
o
o
o
o
o
o
o
O
o
a
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
.
r
.
paso 2: Ingresar la
matnz a de orden m x n
paso 3: Ingresar la
matrizg de orden n x p
paso 4: rniciafizar todos
ros erementos de c de orden m
paso S: para todo
i
p en
para todo j de
formar Cij = IA. * Bkj for.k
= O,
-_ n_1
*"?:t*:rdn
for
U,.
]
Los estudiantes puede n realizar ef seguimiento
der segmento de programa anterior
con afgunas matrices de ejemplo. par
em")iL"0" usar las matces dadas en
elejemplo.
nx
all
a12
a21
a31
a22
a32
a13
a23
a33
una mat,-.
VolumenS:npos@
encabe zad.o * /
Unidadz:nnffites
. .
@Copyright tBCl;rrp.2002
, ^_ _- .
Los
materafes def curso no pueden ser
reproducidos totaf
o parcialmente sln elpermlso preo
de lBM.
""'"rito
39
Estudiante
()
printf("fngresar
1 y 100\n',);
scanf (utdu,&num),.
) while (num < r ll num > 1oo);
de
1a mat,riz
Unidad 2: Arreg
40
@ Copyright tBM Corp.2002
^_materates delcurs
no pueden
,Los
o
o
o
o
o
o
Ejemplo
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
a
o
!
!
o
p
o
o
o
amacron con C
es Trangurar superior
12 24 36 48
0 11 22 .33
009998
00065
r:fit#Xi$"nllotoices
12 24 36
Xr' 11 22
xr, gg
x^, Xn,
Y
-'31
x,.
48
33
gg
65
#define VERDADERO 1
#define FALSO O
#define ROir 4
#define col, 4
main
aqul */
()
/* DecLaracin de Variables */
int matrizlROWl [COL], !, k, i, j;
int go_on,.
k=1; go_on = vERDADERo;
o
o
ntroduccin a la pr
Vofumen g:
Tp
Unidadz:nn@tes
@
"Jrito
41
printf("rngresar
coLumna ?d\u,k,1) ;
*d \
/* nI
bucLe
verifica si
for(i=t;i<ROW;i++)
es triangular superior */
l_a maEriz
for(j=0,-j<i; j++) {
if (marriz Ii] tjl !=
o)
go_on = FALSO,.
]
/* rmprimir a la salida
superj.or */
if (go-on == VERDADERO)
prinEf ( "Es Triangular Superior\n
e1 se
printf
r'No
"
,.
es Triangular Superior\n,,
/* La funcin
*/
all
a13 a14
a23 a24
a33 a34
a43 aU
a12
a22
a32
2
a21
a31
a41
Se debe verificar si
Unidad 2: Arreglos
t,
42
@
a
o
o
o
*.
o
o
o
o
o
o
a $
o *
o k
a
o i
o
o tt
o
oI
oI
oi
o
o
o
o
a
a
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
all = a14
422=
a23
Introduccn a la
a33=
a32
a44=
amacin con C
a41
Elsiguiente segmento
de programa freva
a cabo esta tarea.
El cdigo C inicia
aqu...
,/* rnclui
i: *:Fl:"'::':ilii,i:::cabezad' runciones
#incrude .::il;""j;;";;;:"*i"'""
#define VERDADERO 1
#define FALSO 0
!'
/* La funcin
main
()
maj-n
se inicia agui */
,/* Declaracin
inr i , j ,x,r, n"_jj, 11""ot""
j,nt arregLo_matriz
tal Ul ;
,/* Obtener de us
for(i=0 ;i<4;r**r'"tto
",
los elementos de la
matriz * /
);
,.
for(j=o;j<4 ;j++)
I
unidad2@1".
_.
@ Copyright lillvl
,l-os
_
C.arp.2002
^_ materiales
det ctl
ser reproducidos total
o parciafmenl" ,nTll^o-pueden
er permiso previo
escrito "l'nr.-*,
43
Printf("\n");
)
L = n -1;
go_on = vERDADERO;
whiLe (k <= n-1 && go_on) {
if (arreglo_marriz tkl tkj
k++,'
'l
--.
)
e
1se
go_on = FALSO;
)
printf("La Diagonal y
no son iguales \n',),.
1a
Diagonal en Cruz \
Unidad 2: Arreglos
@ Copyright tBM Corp. 2002
Los materiales del curso nb pueden sr reproducidos
en parte
o en su totalidad sin el previo permiso escrito de
fBM.
44
of
o
o
o
a
o
o
o
o
o
a
a
o
o
o
o
o
a
o
o
o
o
o
o
o
o
o
o
o
o
Resumen
Ahora que ha completado esta unidad, usted debe ser capaz de:
.
r
'
.
'
'
Definiraneglosmulti-dimensionales
Describir fa naturaleza y uso de los arregfos bidimensionales
Explicar
la
importancia
problemas
de
Discutir
la
implementacin
bidimensionales en C
de los
algoritmos
o
o
o
a
o
o
a
o
o
O
o
o
o
o
l)
Un aneglomulti-dimensionaltiene
c)
xnx
p?
b) Aneglobidimensionaf
c) Areglo tridimensionaf
d) Un aneglo en generaf
3)
un
a) 22
b) 20
c)9
d) 12
4) Cmo se
accede
nombre [25] Ieo1 , 2
a) nombre
tj l
como char
til
5)
b)
nombre
c)
d)
nombre
[k]
nombre
tzsl
gs1
7)
inr a[4j;
inr a LAJ [4) ;
inr a aJ lal al ;
inr a l4'J t4l La) la) ;
a)
b) Fatso
46
8)
lntroduccin a la p
macin con C
d)
9)
x tot tol
Para un aneglo definido como fl_oar
uso inconecto?
pt3l t3l ,
a) P tol tol
b) p t1l t3l
c) p t1l t1l
d) pLrl L2l
l0)
a)
b) Un aneglo bidimensional
c) Un aneglo unidimensional
d) Un aneglo de 0 dimensiones
inr
Unidad 2: Aneglos
Multi0imensionales
4T
ayb
od
T)b
8)d
e)b
10)
Unidad 2: ArreSlos
48
@ Copyrght tBM Corp.2OO2
Los materiales del curso n-o pueden
slr reproOucdos en parte
o en su totaldad sin el previo permiso
escrito de lBM.
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
Introduccin a la p
'
.
.
'
q
q
q
a
t?
?
t?
t?
O
i
b
p
.O
o
o
Volumen S:
np
, -_
tos
materiales del cufao no pueden'ser reproducidos
total
parcialmente
o
enegtos
49
Ejercicios de Laboratorios
l) Escribir un programa 9l c que tome 10 enteros positivos como entrada
y los
imprima. El programa debe aneglar
que todos los nmeros
impares aparecen en.er tope se-guido
"i"""glo'Ji"iror*"
de tdo;lo nor"i..-";;("; er mismo
orden en cuaf aparecieron orginlmente). este
aiiegfo ordenado de esta forma
debe tambin imprimirse' se puede ,r"r t-"ngo p"r
resotver
probtema.
2) considere una mariz cuadrada de orden n x rL Etorden n se daefcomo
entrada.
Escribir un programa que toma como entrada la
matnz misma y encuentra la suma
de todos los elementos en el borde.
Los elementos del borde son aquelfos que estn
en la primeray
columnas' Pueden usar multipies estructuras iterativas para la ltima filas y
sotuconar este
problema.
slo una
50
olt
o
o
o
o
o
o
o
o
oj*
o
o
o
o
o
o
o
amacin con
Unidad 4: Estructuras
Objetivos de Aprend izaje
Alfinal de esta unidad, usted ser capaz de:
.
'
.
'
programas en C
travs
o
o
o
O
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
t
o
t
?
Io
Unidad 4:
Estructuras 5i
l.
ntroduccin
co[1o inr,
char ! rloat, asf mmo estructuras de datos como arglos. Se traoao
n situaciones
para solucionar problemas que requeran que se usase
slo uno de estos tipos de
datos o estructuras de datos. Esto porque lo que se estaba discutiendo
eian problemas
de tipo simple.
of
o
o
o
o
o
o
o
o
o
oo
o
o
o
o
o
o
o
o
o
O
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
ramacin con C
1 .
*ie*ro-Z;
m]-errlDro_n;
),
Aqu, la palabra
de 1a estructura>
significado.
struct fecha
Lnt' o].a;
int. mes,.
int anio;
];
Esta es algo que ya se ha visto antes. Esta define una estructura llamad fecha con
los miembfos dia, mes, y anio, todos los cuales en este caso, son enteros. Sin
embargo, no se puede poner int dia = 28 o una defincin de estructura.
Nota: Lo anterior slo define una estructur:a. Ninguna variable est declarada all. para
?
?
p
p
p
o
.'
53
nacimiento. dia
jubilacion- anio
Esto implica que erameso se hace usuarmente como sigue:
variable. miembro
Unavez que se ha accedido a los miembros individuales usando eloperador
(punto),
se puede hacer uso de los miembros de la estructura talccrno lo dict
el tipo de dato del
miembro.
definirlas.
Volumen 3
il
@ Copyright tBM Corp.2002
Los materiales del curso no pueden sr reproducidos
en parte
o en su totalidad sin el previo permiso escrito de lBM.
It
o
o
o
o
o
struct fraccion_mixta
oi
Or
ol
o
o
o
o
o
a
a
o
o
o
o
tT
lo
io
rt
b
p
Ir
p
1nE parte_entera;
int numerador,.
int denominador,.
I
l.
I
)a,B;
A y B son variables de un tipo de
una estructura que
permte representar ftaccione's
es
o
o
o
Or
co-
o
o
o
o
o
a
o
a
Introduccin a la programacin
parte_ent.era,.
int numerador;
int denominador;
1nE.
)e,B;
Note que se ha omitido <nombre estructura>,
el cuaf es opcional. Las variables
creadas A y B, tienen ras mismas propiedade,
Jlnni"on anterior.
il;
primer
sLruct nombre
'
)miNombre,.
cadauno
En esta estructura-s-e
tiene un espacio de 20 caracteres.par_a el primer y el segundo
nombre y otro espacio
de 45 cracterer para el apeffido. se puede
cmbiar estos
valores si la apticacin fo requiriere.
ote que esta eiiructura tiene miembros,
todos los
cuales son anegfos de tipo char. Por general,
lo
las estructuras pueden tenermiembros
de diferentes tipos, etlos tambin puedn
ser'"rgo-"ir1"res
se mostr en ef
"omo
Volumena:npos@
55
. __
Q CopyrighilBM Corp.2002
ros
materiares der curso no pueden'ser reproducidos
o parcialmente sin ef permlso previo
"rt
total
ito de lBM.
ejemplo anterior.
nombre
*r*o*ta,
) p,
e;
Note que una estructura se usa dentro de otra en este ejemplo. La estructura nombre
se usa dentro de la estructura direccion correo. Para acceder al prmer carcter
p,
p. miNombre.primer [0]
Si se requiere imprmir la direccin de coreo en ta varlable p, se puede usar el siguiente
segmento de programa:
/ll
\
tr\.
I,
56
of
o
o
o
o
o
o
o
o
o
O,
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
O
O
a
o
I
a
"
Introduccin a la p
ramacron co:
struct estudiante {
struct. nombre nombre_estudiante
char num_id [9] ;
struct fecha nacimiento,.
float peso;
float altura;
int iq,t
)filosofia [100] ;
Ul" estrucfura puede contener cualquier nmero de membros, los cuales son
estructuras en s mismas. Es tambin posibte tener varios
niveles de estructuras
anidadas dentro de una estructura. Por ejemplo, to siguiente
sera una declaracn
vlida de una estructura:
struct externo
Volumen3:TiposOe@
@ Copyright tBM Corp. 2002
Los materiales delcurso no pueden ser.reproducldos total
o parcialmente sln el permlso prevlo escrito de lBM.
57
struct nivel,l {
struct niveL2 {
struct nivel3
int k,.
-,
r,
].n Oe
nivel3,
se debe hacer lo
siguiente:
o.11.12.13.k
Note que el nmero de operadores que
se usan es tanto como el de definiciones de
estructuras' B una buena prctica de programacOn
evtar definiciones de estructuras
con anidamiento muy profundos.
continuacin:
en
Tiposeffi
58
@
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
" 1"-i;.::":",
a.denominador =
'
r%= (4*1+3)
/4__7/4
es4.Porlotanto,
A + B= (z + 7) / q= r4/4.Elt+/+debeconvertirseauna
es el numerador como
denominador.
mdulo
el
.
o
.
.
r
o
59
o
o
)x,v,z;
int u, v,
mcm, mcd,.
\nn ) ;
doi
scanf ( u ?d u , &A. parte_enEera ) ;
) while (A.part.e_entera .= 0);
f
60
@ Copyright tBM
Corp. 2002
escrito de lBM.
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
IO
do{
o,
scanf'
de
,.
A. denominador,.
]
else {
X.numerador = A.parte_entera;
X.denominador = 1;
I
l
Volumen 3: Tipos de Datos gitruaulaOos en C
@ Copyright tBM Corp. 2002
Los materiates del curso no pueden sr reproducldos total
o parcalmente sln lpermlso prevo escrito de lBM.
61
else {
Y.numerador = B.part.e_entera;
Y.denominador = 1;
]
/*
/*
/*
/*
/*
X e Y */
MCM(u,v) = (u * v) / MCD (u.v) * /
Se guiere determinar e.l MCM de X.denominado y */
Y. denomi.nador * /
Buscar el MCD de los dos */
Determinar eI
MCM de
*,/
e1 se
?u;
v;
mcd
mcd
= u;
a'l ca
62
o Tt
o .t
o
o
o
o*
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
else i
/*imprimir Ia fraccin mixta C a la salida est.ndar*/
printf (',E1 result.ado es ?d y Zd / ?d\n,,, \ C.parte_entera,
C.numerador,
denominador)
C.
]
)
10
Curso 2
Curso 3
Curso 4
63
5
Curso 6
Curso
A
E
18
=7.33
o
'
o
.
Volumen 3:
TiposOeffi
@ Copyright tBM Corp.2002
Los materiafes dercurs n-o pueden sr relrooucidos
en parte
o en su totalidad sin el previo permiso escrito
de lBM.
1os
64
:r
e)'
o
o
/* Declaracin de Variables
ir
o,-
ort
acl-
f.
rI
num'
double pn;
o,
e
C
o
o
o.
o"
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
O
o
o
I
o
o
o
scanf (r*d",&n_es:),'
) while (n_est < 1 ll n_esc >
1OO)
f l,,t-o]o.
d,al--q
{
r:
Y;
k + l-);
,/* Obtener 1a ent.rada del usuar:c cer ::c:c 'r'
printf ( " Ingresar e1 NOID (max t ca:c:eres ) : \n" )
scanf ( u?sn, 1ist.a IkJ . noid) ;
/* Obtener como entrada de1 usuaric ej :,::-.-::e -,,
printf ("Ingresar el nombre (me:1o: a 5C,
caracteres) : t,) ;
scanf ("?"u, lista Ik] .nombre) ;
,/* Obtener como entrada del- usua::c :=:a .:::: oe los
cursos */
,.
for(j=O;j.6t1++){
f f lush (stdi-n) ;
printf("Ingresar
Ia nota iei el Curso \
[A-E]: ?d\h",1+I);
do{
scanf (rr?cr', &1ista [k] .grados Ij] ) ;
] while (toupper (lista [k] . grados t j I ) < ,A, \
| | toupper (lista lkl . grados tj l ) > 'E' ) ;
t
65
P LI
;";';s
Volumen
arfip
66
>.
,,".
o
o
o
o
o
o
o f
o '
o i
o
o
.'
o
oi
I
Ot
ol
e
o
o
o
a
o
a
o
o
o
o
o
o
o
o
o
o
o
o
o
decfaracin:
anio
que es equivafente
anj_o A, B, miNacimiento;
Se puede usar el
anio,
continuacin
estructuras:
variables tambin:
ro siguiente:
typedef struct
con
miamhra
mlemro Z;
o
a
o
o
o
o
o
o
o
macin con C
miembro_n;
) nuevo-tipo,.
Se puede usar este mtodo para definir un nuevo tipo, tal como se muestra
continuacin:
Estruct[EdG]d
67
oilF
o 't'
o
o
O,.,
Ol
o'
o
o
O*
o
o
o
o
o
o
o
o
o
a
o
Se definen tres variables a, b, y c, las cuales son uniones. En la unin, se han definido
tres variables x, y y z (cada una de un tipo difererente). Cuando se considera la variable
a, debe entender que es una estructura con miembros x, y y z. En una unin, sin
embargo, fos miembros x, y y z de la variable a comparten el mismo espacio de
memoria. Tambin, note que un inr ocupa ms mernoria que un char, y un float
ocupa ms memoria que un int. Existen muchas cosas de mantenimiento que deben
hacerse cuando se usan uniones, pero todo esto es tomado en cuenta por el
compilador
Los miembros de una unin pueden ser de cualquier tipo de datos, aneglos o
estructuras. Se pueden tambin usar uniones con aneglos. Al usar el 'operador punto'
@mo en las estructuras se hace referencia a cualquier miembro de la unin. Se
iuede
realizar lo siguiente para hacer referencia a un miembro de una unin:
a.x
b.z
Por lo tanto, una unin en C es bastarlte semejante a una estructura. El uso de unin
depende de s ef ahorro de espacio es vital para la aplicacin.
o
O
o
o
o
a
o
o
o
o
o
a
o
o
O
o
o
O
o
o
o
o
o
69
Resumen
Ahora que ha comptetado esta unidad, usted debe ser capaz
de:
Explicar cmo declarar estructuras en C
.
o
o
.
Volumens'ripoffi
@ Copyright tBM Corp.2002
Los materiales delcurso no pueden ser reproducidos en parte
o en su totalidad sin el previo permiso esctito de lBM.
70
ol
o
o
a
o
o
o
o
a
o
l)
lr
Jt
b) strucr {
int x;
float y;
Ia,b;
C) strucr {
int a;
float y;
) -, b,'
o
'
o
o
o
o
d)
2)
o
3)
Verdadero
Falso
pueden ser parte de una estructura.
Constantes de cadena
Variables enteras
a)
b)
c) Constantes enteras
d) Constantes carcter
4) Cules de los siguientes tipos de datos son vldos dentro de una declaracin de
unin?
o
o
o
o
a)
b)
o
o
o
o
o
o
o
a) srrucr {
int x;
float y;
o
o
5)
o
o
a
a
a) a, b, cyd
b) a, byc
c) ayb
d) Slo a
a
l-t
!tIt
.l
T
tr
ft
71
Copyright lBMCorp.2002
inE x;
float y;
) a,
b,-
Es vfida la asignacin a.
a)
b)
7)
Verdadero
Falso
t.ypedef struct
int x;
float y;
) rnipropia;
a)
b)
8)
x = a.y;?
Verdadero
Falso
a) struct
b) union
c) rypedef
d) Ninguna de las anteriores
9)
l0)
Oaffi
72
@
o
o
o
o
o
o
o
o
a
c)
union u
int x,float y,.
char z;
amacin con C
{
d)
O
O
a
o
o
o
o
o
o
o
o
o
a
o
o
o
o
o
o
o
o
o
o
o
a
a
o
o
o
a
o
o
o
o
o
o
o
73
l) byc
2)b
3)b
4)c
5)b
6)a
7)a
8)c
e) byd
l0) d
74
lntroduccin a la Pr
q
o
ramaclon cc-
o
a
o
o
o
o
o
o
.
.
.
problemas
Usar estructuras en una situcin de soluin de
de estructuras
Desanollar algoritmos para un problema que involucra el uso
que usa estructuras
Escribir un programa en C para implementar una algoritmo
o
o
o
O
o
o
O
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
O
UnlOaO S: taUoratorio de
Estructuras
75
Ejercicios de Laboratorios
l) considere la estructura de una ftaccin mixta, que se da a continuacin.
st.rucE fraccion_mezclada
int parte_entera,.
int numerador;
int denomi-nador,.
I
tt
flTulrrJf;r."
2)
Unidad S:
76
. .
de tBM.
anl-xF
I-I--I
rI:-t
r-xtt-
Introduccin a la
Programacin con
TAT
-m
-
ItI
(p
--
Volumen 4: Funciones en
Informacin de Pubticacin
Microsoft
Marcas Registradas
IBM @ es una marca registrada de lntemational Business Machines Corporation.
Microsoft Corporation
Red Hat
propio riesgo.
No deben removerse las pginas en blanco que puedan aparecer al final de cada
unidad y entre dos unidades. stas han sido insertadas intencionalmente..
ot}
o'=
O,.
o
o
o :a
oli
oj
ol
Or
I
o;
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
3
T
ir
t?
t]
ta
lt
t
.
Gua del
Estudiante
Contenidos
Unidad
l:
Funciones
Objetivos de Aprendizaje
1. Introduccin
2. Programar Funciones en C
4. Clases de Almacenamiento
20
25
Resumen
26
Unidad
l:
Exmen de Autoevaluacin
27
29
3l
Objetivos de Aprendizaje
31
Ejerccios de Laboratorios
32
Unidad 3: Recursin
Objetivos de Aprendizaje
33
1. Introduction
35
48
Resumen
49
50
52
53
Ejercicios de Laboratorios
T
or
ori
o
o
o
oi
oi
o
o
O
o
o
o
o
o
o
Gua del
Estudiante
Unidad 1: Funciones
Objetivos de Aprend izaje
Alfinalde esta unidad, usted se capaz de:
.
.
.
.
.
.
cmo se usan
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
r
ro
Volumen 4: Funciones en C
Unidad 1: Funciones en
@ Copyright IBM
Corp.2002
1. Introduccin
En el Volumen
Estructuras de Control en C, se esfudiaron los pos de datos
estructurados y se aprendi acerca de los aneglos y estructuras. En eita unidad, se
discutir la necesidad y el uso de las funciones enln programa en c.
Una funcin es un programa autocontenido que lleva a cabo una tarea especfica. Un
programa en C es realmente una colercin de una o ms funciones. La main ( es,
)
en efecto, una funcin. Todos los prograrnas en C deben tener una funcin main. La
ejecucin de un programa c inicia con ra ejecucin de fa funcin main.
Una funcn toma cero o ms entradas (tambin denominadas parmetros), lleva a cabo
una tarea especfica y retorna un solo valor como resultado. En esta unidad, se estar
usando las palabras'entradas' y'parmetros' indistntamente.
o
.
.
o
printf
scanf
toupper
sqrt
Considere la funcin main ( ) . sta usualmente no tiene ninguna entrada sobre la cual
trab$ar. La funcin
que se ha usado anteriormente, toma una o ms
entradas. Una de las cosas comunes entre main O yprintf O es que ambos llevan a
cabo una tarea especfica y retoma un valor nico como salida (Se aprender acerca de
esto ms adelante en la
,
printf,
unidad).
.
.
Unidad 1: Funcones
Volumen 4: Funciones en
@
?r
OF
oi$
o'
o
Q*
:
:t
!
2. Programar Funciones en C
C permite a los programadores definir sus propias funciones para llevar a cabo una
tarea bien definida. Esto se conoce como funciones definidas por el usuario. Algunas de
las caractersticas de C con relacin a las funciones son:
.
.
.
.
.
r'{
a'
O*
o
o
o
a
o
o
o
o
o
o
o
o
o
o
p
o
o
Pero permanece la pregunta, Por qu. se deben usar las funciones? Las funciones
tienen numerosas ventajas. Algunas de ellas son:
Ayudan
o
o
a
o
o
o
o
o
o
a
o
o
o
o
.
.
Una vez entendida el por qu las funciones son necesarias, se va a continuacin a dar
una definicin de funciones y aprender a usarlas en fa resolucin de problemas.
.
.
Encabezado de la funcin
Cuerpo de la funcin
.
.
.
Un conjunto de argumentos (dato pasado como una entrada a una funcin) que
estn separados por comas.
Volumen 4: Funciones en C
Unklad 1: Funciones en
asume que todas las funciones retoman inr pot defecto. Sin embargo, nunca se debe
omitir, ya que esto se considera un estilo teribfe de programacn. Los argumentos en
el encabezado de la funcin son x e y, estos se denomin an atgumenftos formales. Se
les llama as porque estos representian los identificadores de las entradas transferidas
desde el programa que hace la llamada a la funcin llamada. Tambin se les conoce
como parmetros, en este aso, parmetros formales. Los identificadores x e y en el
encabezado se consideran 'locales', y no so reconocidos por aquellos que estn fuera
de la funcin.
El cuerpo de la funcin es el conjunto de sentencias encenadas entre llaves { }. Este
conjunto de entencas define la tarea que lleva a cabo la funcin. El cuerpo de la
funcin, como cualquier otro grupo de sentencias compuesta, puede contener
cualquiera de los siguientes tipos de sentencias:
o
.
o
.
Sentencias de asignacin
Sentenciascompuestas
Llamadas a funciones
Cualquier sentencia vfida
rerurn s
return
al siguiente:
return (expresin),.
Esta contiene la palabra reservad rerurn seguido por una expresin opcional. El valor
de la expresin se retoma a la parte que lo invoca del programa. Dado que una
expresin puede resultar en un solo valor, una funcin puede tambin retornar slo un
valor. Si la expresin se omite, la sentencia return no transfiere ningn valor al
programa que lo llama. Slamente transfiere el control al programa que lo invoc.
Algunas funciones se definen como void.
void nombreFuncionO i
sent.encias,.
return,.
)
A pesar que las funciones con tipo void no necesitan tener la sentencia return
explcitamente, se mantiene por dos razones:
Unidad 1: Funciones
Volumen 4: Funciones en
o
O
Gua delEstudiante
o
o
o
o
sentencias;
retrurn,.
1
a'
else if (x t z) {
sentencias;
ral-rrrn.
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
O
return
En todos los programas en este curso, la funcin main tiene el tipo de retorno void y
no se usa explcitamente la sentencia return. Se puede, sn embargo, aadir la
sentencia durante la ejecucin en un computador. La sentenca return causa que el
programa que llama inicie la ejecucin a partr de la sentencia que sigue
inmediatamente despus a la llamada de la funcin. El cuerpo de una funcin puede
tener una o ms sentencias
{
t
el-se
rl.!1rn
lrrl
\I
' '
'
se enne una funcin llamada max que retorna uo int como resultado.
El cuerpo de la funcin es bastante simple, dado que slo verifica cul de las variables
es mayor y retoma el valor.
o
o
i
,
II
t
Volumen 4: Funciones en C
Unidad 1: Funciones en
Gufa delEstudiante
int. eslmpar(int. x) {
if(xt2!=O)
return (1);
e
/*
veRoADERo
si es impar */
1se
ral-rrrh
/* rar,so si no es impar */
/n\
.
\v I t
FP1-rrr .
f\
on\
ul/
'A'
- 'a'
return (in
.a,
'B'
3-
while (x l= 0 && y t= 0)
if (x r= y)
Unidad
l:
a
>
:
{
:
Funciones
Volumen 4: Funciones en
oF
o,'
O;
'
o
o
x = xZy;
q.
else
q:
y = y*x;
a:
if (x == 0)
return (y) ;
a;
a
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
/*y es
mcd*,/
/*v
m*
e1 se
return (x) ;
ac
mcd
(x,y)
Como se observa, estia es una funcin muy compacta. La funcin explota el hecho de
que el MCM de dos enteros es el producto de los dos nmeros enteros dividido entre su
MCD. Se defini previamente una funcin llamada mcd. Simplemente se usa esa
funcin aqu. En el ejemplo anterior, la funcin mcd apare@ en la expresin:
(
(x " y) /
mcd
(*,y)
/* variables locales */
if (x == o ll x == 1)
return (1);
else {
/* I es e1 resultado */
o
o
o
to
i
)
Volumen 4: Funciones en C
Unidad
l:
Funciones en
?
o
o
4
t
iIler
Una funcin que no retoma nada puede aparecer como una sentencia independiente,
como por ejemplo un printf (. . . ).
Ejempfo 1.7: Generar Nmeros primos
El probfema aqu es aceptar un nmero entero positivo grande NUM, y generar
todos los
nmeros prmos entre2 y NUM. Et siguiente algoritmo resuelve ese probiema:
o
.
o
prinE k;
#include <stdio.h>
#define VERDADERO 1
#define FALSO O
= VERDADERO;
Volumen 4: Funciones en
CI
F
%
Introduccin a la Programacin
c:^ ,
-.-
'lr
x-1r
fl&
^t
e1 se
*.** t
,
(continuar
if
I*
return
tt
-I
== VERDADERO)
(VERDADERO);
e1 se
q;
return(FALSO);
o
o
o
o
/* La
main
f rrn
()
i n
m i n
amni aza
* I/
att
{
inf
rrh
o
O
oot
scanf (u?du,&num),'
/*Yerifcar gue e1 nmero ingresado es
positivo o no */
if (num<=0 | | num>32?6?) {
print.f("Ingresar un nmero menor \
o
o
o
o
o
o
qve
32767
\n" ) ;
(primo(i)
==
ra|-rrrn
l1 I
");
VERDADERO)
printf ( *3d\t", i)
-LI
tI
-l
rt
tl
-IE
-t
T
II
E
t
o
Volumen 4: Funciones en C
Unidad
l:
Funciones en
p"lndror"
#i.nclude <stdio.h>
#define VERDADERO 1
#define
FALSO
ar'
k++)
l:
Funciones
I
{
Volumen 4: Funciones en
lO
or
o
o;
o
o
o.
oi
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
continuar =
o
o
o
o
o
o
o
o
o
o
o
/rr\
n 9 oc r\'^r
,,6
?2767\n",num);
else
o
o
o
o
o
o
FALSO;
,.
if (conLinuar == VERDADERO)
printf ("?d es un palindrome \n",num),else
printf(utd no es un palindrom\ri",num);
)/*rin de1 else*/
)/*ri-tr del main*/
El cdigo C termina aqui
Volumen 4: Funciones en C
Unidad 1: Funciones en
C l1
#include <stdio-h>
#define VERDADERO 1
#define FAISO 0
,.
Unidad 1: Funciones
Volumen 4: Funciones en
@
12
:r
o
Gua del
Estudiante
)) t,/*Pi
:tt
o
o
o
o
o
o
o
O
o
o
?
1se
Aal
ss
En este ejemplo se har uso de fas dos funciones ya disponibles para escribir un
programa que verifique por los nmeros primos que son tambin palndromes.
El cdigo C comienza aqu...
tt
?
main O {
ot
:F*/ /
r
else
#include <stdio.h>
#define VERDADERO 1
#define FALSO O
//
n de na I i ndrome*
vrrre
main (void)
Ia *
o
o
o
o
o
o
o
o
inE num,.
printf("Ingresar
o
Volumen 4: Funciones en C
l: Funciones en C 13
oot
scanf ( n?du,
] while
(num <=
&num) ;
9 |
num>32767) ;
como
FALSO)
palindrome (num) ==
VERDADERO)
int primo(inr x) {
int,k=2,
continuar,.
continuar = VERDADERO;
while (k .= x-1 && continuar == VERDADERO)
if (x?k==0)
continuar = FALSO;
e
1se
k++;
)
if
(conclnuar == VERDADERO)
return (VERDADERO);
e1 se
return
(FALSO) ;
Volumen 4: Funciones en
14
OF
o
o
o
o
o
or-gr-tro++;
guardar = guardar / to
o:
t)
o
o
o,
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
a
o
o
o
o
o
I)
b
else
continuar = FALSO,'
)/*rna of else*/
return (continuar);
)/*rin de Ia funcin palindrome*/
El cdigo C termina aqu
Existe otro enfoque para resolver problemas, denominado enfoque top4own (de anibahacia abajo). En este mtodo, la funcin main O aparece delante de todas las otras
Volumen 4: Funciones fl 'C
Unidad 1: Funciones en
15
Aqu
el
funcin.
nombre-funcion es el identificador, es decir, el nombre
de la funcin. Los efementos
dentro de los parntesis definen los argum;r
sus tipos.
inE
sum
int , int
,.
A continuacin se
,resuelve un problema
definidos) antes concluir la unidad.
g,|,!::Sfficonsiste
'
.
'
r,*,"
el
"i,noioru..
"or
se escribir un programa en c que genere e imprima fracciones
mixtas que satisfagan
l:
Funciones
Vofumen 4: Funciones en
t6
a
a F
IE
t*
o It
o
o
o
vlida.
sus
componentes (parte entera, numerador y denominador) son primos y palndromes. Si
todas estas condiciones se satisfacen entonces se tiene que imprimir la fraccin mixta,
sino se debe proceder a formar la prxima fraccin mixta candidata.
a
o
o
o
.
.
.
o
a
o
o
o
Step
1: void main ( ) {
oj
oi
i
i
oi
Or
o
o
o
o
o
o
o
o
o
o
o
o
I
t
di
dt
.
.
validar
palindrome
Unidad
l:
Funciones en
17
Introduccin a la programacin
con C
] /" r'in
mainO
de
La funcin validar_fm */
int i, j,
k,.
sc,rucE {
inL parte_completa
j-nt numerador ;
int. denominador
)
for
,.
4,.
(i = 100; <= 999, i++)
{
for(j = rOO; j <= 999; j++)
{
for(k = 100; k <= 999. k++)
{
A.parte_completa = j;
/* Formar A fuera de i, J, k
A.numerador = jA.denominador = k,.
/* verificar
si A es vaLidar fm */
)/* r'in
),.
l:
Funciones
Volumen 4: Funciones en
estrito de IBM
lg
o
o
o
o
o
o
o
o
o
o
o
o
o
llF
Gua del
Estudiante
Introduccin a la programacin co
It
o
o
o
o
o
o
o
o
J/*nin
tt
?
e
*/I
continuar =
FALSO;
-.
continuar =
VERDADERO) {
FALSO;
else
k++,'
)
if (continuar == VERDADERO)
return (VERDADERO);
else
return
t
Volumen 4: Funciones n C
It
if
else
o
o
o
o
o
o
o
o
o
a
o
de]
(fALSO) ;
Unidad
f:
Funciones en
19
anteriormente.
l.l0
4. Gfases de Almacenamento
En C, una variable se declara como sigue:
<tipo-de-dato> nombre-variable;
Junto con la declaracin.de tipo de dato d una variable, se puede tambin
especificar
una clase de almacenamiento en la declaracin. Las clases de almacenamiento
se usan
en C para definir la visibilidad y el tiempo de vida de las variables. La visbilidad
de una
variable se conoce como alcance de una variable. La clase de almacenamiento
ayuda a
entender cmo C trata las variables declaradas dentro y fuera de una funcin.
almacenamiento:
. Automatic
. Stat.ic
. External
e RegisLer
4.1. La Clase de Afmacenamiento
automatic
inr f1O i
int. i;
f 1oat. f
,.
sent.encial;
sentencia2;
senEencian,.
Unidad
l:
Funciones
Volumen 4: Funciones en
20
:r
of
Gua del
o
o
Iri
:tt
III
?i
o iF
.li
oli
oioi
oi
o
oi
ol
o
o
o
o
o
o
a
a
o
o
o
o
o
o
o
o
o
Estudiante
nvi nc t rE1
O);
'|
Unidad 1: Funciones en
C 2l
i.
external
external.
int f1O;
char f2 O ;
/* Declaracin de una variable external * /
int k;
/* La funcin main j-nicia aqu */
void mainO {
int q;
,/* Variable loca1 de main
/* puede usar sol-o k declarado fuera * /
) *7
/* La funcin f2 finaliza
aqul */
Volumen 4: Funciones en
@
22
of
o
o
o
o
o,
o'
o
o
O,*
o
o
o
O
o
o
o
o
o.
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
?
Gua del
Estudiante
Se declar tambin una variable k en la funcin rz. sta es una variable local. En este
punto, dos variables con el mismo nombre k son visible para f2. Recuerde que la
variable local, altener el mismo nombre que una variable external, siempre sobrescribe
fa variable external. Por lo tanto, la k visible en f2 es la local y no la variable extenal
k.
A fas varables external se les conoce tambin como variables globates (globa|. The
espacio asignado a estas variables permanece durante una ejecucin del programa.
Cualquier cambio que se le haga a una variable extemal ser visible a todas las otras
partes delprograma donde sea visible.
int .
extern
Elcdigo
G inicia aqu...
/* Archivo1-.c */
int k,'
int m;
void mainO {
/* Archivo2.c* /
int k;
int j;
extern int m;
/* Ias dos funciones declaradas en ste archivo
int f1O {
)
i
t
tf
t
I
int n;
Volumen 4: Funciones en C
Unidad
l:
Funciones en C 23
int f2O i
l
,/* Archivo3.h */
/* ros prototipos de funciones estn en ste archivo */
inr f1O;
inr f2 O;
El cdigo C finaliza aqu
extern.
stat.ic int j ;
/* sIo es visible en eI Archivo2.c */
Esto est en el Archivo2. c. Este es un concepto
mportante en programacin,
regisrer
Las variables
se
automatic.
regist.er int i;
Unidad 1: Funcionei
Volumen 4: Funciones en
Z4
o
o
o
o
Gua del
o
o I
o
o
o
o
o
o
o
o
o
o
o
t.
Estudiante
.
.
.
sraric.
Slo la variables auromaric se pueden declarar como regisrer.
Slo las variables local se pueden declarar como variables
/* Error */
sistema.
El espacio para las varables
datos delproceso.
sraric ! exrernal
o
o
O
o
o
o
o
o
o
a
o
a
o
o
o
o
e
a
t
t;
q;
Volumen 4: Funcionesren C
Unidad
l:
Funciones en C 25
Resumen
Ahora que ha compretado esta unidad, usted
debe ser capaz de:
Explicar la naturaleza y uso de las funciones
.
'
o
.
r
.
Unidad 1: Funciones
Volumen 4: Funcionei en
@
C 2A
o
o
o
o
o
o
o
o *t
o *t.
o $
o 'rta
o
o
o
Unidad
o
o
l: Exmen de Autoevaluacin
2.
Verdadero
Falso
3.
O
I
I
I
4.
:t
formales
c)
Parmetros de prototipos
d)
Parmetrosnormalizados
a) Verdadero
b) Falso
iI
actuales
o
o
o
o
o
o
o
o
o
o
o
en C
a) Parmetros
b) Parmetros
o
o }}
o
o
o
o
5.
es
a)
b)
6.
7.
Verdadero
Falso
b)
c)
d)
()
Volumen 4: Funciones en C
Unidad'l: Funciones en C 27
lntroduccn a la programacin
con C
8.
b) Parmetros actuales
c) Variables globales
d) Variables locafes
9.
c)
t
Unidad
Cero o ms sentencias
return
l:
Funciores
"tros
rorma es
I
deb
e coin cid r
exa cta m e n te co n
Volumen 4: Funciones en
estrito de IBM
ZA
rt
o
o
o
o
o
o
o
o
o
o
o
ol
ol
oi
oi
ol
ol
I
1)a
2)d
3)b
4)b
5)a
6)d
7)d
8)b
9)c
10)
q
ol
q
q
q
.l
e
o
ef
e
q
Volumen 4: Funciones en C
Unidad 1: Funciones en
C 29
Unidad 1: Funciones
Volumen 4: Funciones en
30
o
o
o
o
o
o
o
o
o
J$.
o l*
o t..
o
d:
'
Emplear funciones
.definidas por el usuario para modulanzar los programas
alcanzar una estructura simple
'
.
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
?
o
o
a
It
5
T
*
,f
O
Volumen 4: Funciones r C
C gl
Ejercicios de Laboratorios
1' Escribir un programa en c que imprima una tabla de enteros decimals
desde
r
hasta w (esa es la entrada) junto con su equivalente
en Nmero Romano. Escribir
una funcin que tome un entero decimal como entrada
en Nmero Romano y su entero decimal en un ii;. e imprima el equivalente
se listan a continuacin
los enteros decimafes especficos y su equivarente
en Romano:
2'
10
50
100
500
1000
Volumen 4: Funciones en
32
o ttr:t
o
o
o
o
o ,
o .TT
o is.+
o
o i
o
I
oi
Gua del
Estudiante
Unidad 3: Recursin
Objetivos de Aprend izaje
Af final de esta unidad, Ud. ser eapaz
.
o
o
.
de:'
Explicar qu es recursion
Discutir las diferentes condiciones que deben ser satisfechas para que las
funciones recursivas trabajen correctamente
Describir cmo una funcin recursiva trabaja cuando se ejecuta
Definir el rolde la pila en la ejecucin de ras funciones recursivas
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
tI
p
p
tI.
1. lntroduction
I-
En fa Unidad
Funciones de este vofumen se discuti cmo los programadores
pueden definir sr-s funciones e invocarlas desde
Cr"ri"r parte de programa c. En
esta unidad, se aprender acerca de un tipo especit oe funcionun
ilamadas funcin
recursiva.
La pafabra 'recursin' se origina de la,raz latina.'re',.Que.
significa 7egresaf,y
latin
significa.'conei. La palabra recursion iittrnte .ignr"-;.*",el sufijo
-'currere',
haca
gtr{s', o'que suceda. otravez, especiafmente en un intervalo especfico,. En
el
contexto
de la programacin de computadoras, la palabra 'recursin'se
rfere ,n" funcion que
es capaz de llamarse as misma.
"
En las unidades anteriores, se estudiaron diferentes tipos de
funciones. Se aprendi a
cmo escribir estas funciones y cmo usarlas e invocarias.
sea er sigue;te mpro:
int miRecursion(int x)
miRecursion (x-1)
,.
Volumen 4: Funcones en
@
CU
o
o
o
o
o
o 'a
o ',f
o
o ,,;
o It
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
d;;i
Factoral de
En generaf,
5 = Sx4x3x2x
1 = 120
nJ =
pdrn-r
factoriar,
matemtica,
es
sin > 0)
5!
=
=
=
=
=
=
=
Sx4l
Sx4x3!
5x4x3x2l
5x4x3x2x1l
5x4x3x2x1 x}l
5x4x3x2x1 x1
Sx4x3x2x1
no
ser reproducidos total
o parcialmente sin el permiso previo escrito de IBM
\)
decir.
if
qi
(n==0)
return
1;
else
return factorial(n-1)
* n:
Ahora, si
ejecuta:
el factoriar se invoca
aon
"i
siguiente:
'
1.
= 3, 2 y
return factorial(2) * 3;
return factoriaL(1) * 2;
reLurn fact.orial (0) * L;
Este es el mismo que retomar
return 1 * 1 * 2 * 3;
La funcin anterior termina conectamente. Dado que
se tiene el caso base cuando n =
o' elfactorial retorna como 1. La condicin base
rry
importante, ya que perm'te que
un algoritmo termine apropiadamente.
"i
Qu suceder si se invoca esta funcin con un parmetro que no es
mayor o iguaf a 0,
por ejemplo -3? En esta situacin, no existe
un iaso base vlido, por lo tanto la funcin
Unidad 3: Recursin
Volumen 4: Funciones en
@
g6
o
o
o
o
o
o
o
o
?
Gua del Estudiante
factorial ser invocada indefinidamente con los parmetros -3, -4, -5, y
as
sucesivamente. La funcin recursiva no terminar. Sin embargo, a partir
de un tiempo,
fa funcin amenzar a usar mucha memoria y finalmente se
tga.
Fin del Ejempto 3.1
o
o
oo'
MCD(x,y)
o
o
o
o
o
o
o
o
o
o
o
o
o
o
MCD(x-y,y)
six>=y
=
=x
MCD(x,y-x)
six<y
siy=9
six=0
L6)
=
=
=
=
(L2,76-72)
MCD (I2-4,4)
MCD (B-4,4 )
MCD (4-4,4)
MCD
=
=
int
x, int y)
(x==s
if
{
. reEurn y;
mcd(inE
else if (y == o) i
return x;
Volumen
b
b
I
o
a
o
o
o
o
o
o
o
o
o
,r
Introduccin a fa
else if
(x >= y
reEurn
) else
mcd
(x-y, y)
,-
]
)
se fortalecer
frbonacci (ro
spg retomar55.
Es
Unidad 3: Recursin
Volumen 4: Funciones en
3g
ors
o
o
o
o
o
o
o
a
ort
o
a
Gua delEstudiante
o
o
o
a
o
o
o
o
o
o
o
o
o
o
o
a
o
o
o
o
o
a
p
t?
r"drnils
I
2
4
I
Ef probfema es asombrosament"
se necesita es arregrar un
conjunto de nmeros (en ste caso
I"9" alloue
"nq1?:g
ls enteros.l
sien
una matriz 3x3 taf que los
efementos en las filas, column". y
las..diagonales-iurren et mismo nmero. pero
estrategia para resofverlo parece'oir'clE;;;;grir.
fa
Existen estrategias, pero el
asuma que no se tiene acceso a ellos.
]or b tando se quiere resorver el
il3[13[t!:
reproducidos total
de IBM
"rlrto
234567 89
1234567
9B
1,2345687
\23456897
r23456978
123456987
987 654327
987
65432t
el factorial de nueve
(9!)' No es un nmero pequeo para ser manejado por
cualquier persona sin una
computadora. Ahora, imagine que s-e tienen qr"'g"n"rar
cuadrados mgicos de un
orden mayor, como por
ejempro 4x4, sxs o incrusive'1024x1024.
Volumen 4: Funciones en
qin
a
o
o
o
o
o
O
o
a
o
o
a
int arreglo[s0] i
o
o
o
o
o
o
o
o
o
o
o
o
a
o
permutar (n+1)
else
printf ( "?d?d?d\n", \
arreglo It], arreglo [2],arreg1o t3l
)
Aqu, arreglo tl es un arreglo de enteros, que contiene los valores permutados. para
empezar con esto, se debe invocar a la funcin permutar, con
el valor
permutar(1) -La siguiente secuenca de 3 dgitos ser generada oando de 1 como
se nvoque
fa funcin recursva como permutar ( 1) |
1_II ,1_L2 ,1_I3 , L2!,122 ,1,23 ,1_3L , 132 ,I33
2r1, , 212 , 2I3 ,227_ ,222 , 223 , 23:- , 232 ,233
3a1
,312,
L3 , 32J.,322
,
,
void permutar(int n) {
inti;
for (i=1; i<=9. i++)
arregLo [n] = ;
if (n<9)
permular (n+t_) ;
el-se
Q.
esMagico (arreglo)
I
)
{
Volumen 4
Losmateda."?"?SlljFli'3,[.?,&?o,l*uooostotal
o parcialmente sin el permso previo escrito de IBM
);
return,.
a
a
a
o
inr i
for (i=1; i<=3; i++)
arreglo [n] = i;
if (n<3)
es
o
o
ef
la
printf
)
la
as, lo imprime.
[]
else
,.
esMagico (arreglo)
usado[i]
,-
= 0;
recurn..
)
funcin.
Volumen 4: Funciones en
@
C 4t
:F
oii
o
o
O'l
^I
-r
-fr
oif
ol:
oi:
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
O
o
o
5
t;L
l-
f.
L
lo
o
o
o
a
o
o
o
o
lntroduccin a la Proqramacic c:
menos de15.
Cuando se llena los valores para cualquier fila, se debe verificar si la suma
de cada fila
es 15. Si no es as, se puede descartr. Cuando se tienen los primero ar*
nmeros
generados, por ejemplo, se necesita rerificar si la suma de la fila
es 15, cuando el
Volumen
@
ir*
A(1,1),
3.4
#;::t
"0";o
regtas:
Undad 3: Recursin
'
Volumen 4: Funciones en
de IBM
44
olt
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
a
o
I
,
t
I
l?
D
i
tt
|l
t7
p
o
Gua del
.
.
Estudiante
c.i
La pregunta es si se puede hacer este tipo de transferencia para todos los valores de n.
Se va ver si se tiene una solucn vlida p?ra n=3. Los siguientes son los movimientos
posibles:
o
.
.
.
o
.
.
Volumen 4: Funciones en
'
Unidad 3: Recursin en
@
Copyright IBMCnlrp.2002
45
;.
'
o
o
'
Esto es, se tiene que transferr n-l discos desde la ctavija B (la
clavija temporal) para
permitir la transferencia del mayor de los discos
desde la clavija A a la clavija C. En
otras palabras, hacer el trabajo de transferir n discos, primero
debe hacerse la subactividad de transferir n-1 discos. Aqu es donde se necesita
una recursin para
solucionar el problema.
'
temporal = ( 6
desde
, 2 y 3. La suma
de estos nmeros
la estrategia
'
'
Tranferif
(n
- l)
Unidad 3: Recursin
Volumen 4: Funciones en
46
o
o
o
a
q
q
o
o
o
o
o
a
o
o
o
o
o
o
o
o
o
Para mover n discos desde la clavija desde a la clavija hasta, primero debe
verificarse si n = 1. Si es as la solucin es trivial y es un solo movimiento. Si no,
descomponer el problema en tres sub-problemas y solucionarlos en secuencia como
sigue:
o
.
.
Mover
n-
temporal
Mover 1 disco desde la clavija desde hasta la clavija hasta
Mover n - i- discos desde la clavija temporal hasta la clavija hasta
1 discos desde la clavija desde a la clavija
#include <stdio.h>
void t.ransferir(int
n, j,nt desde, int hasca/ ;
void transferir(int
n, int desde. int hasta) {
int temporal;
,/*Cuando e1 nmero de disco es uno*/
t
if (n == 1)
printf (r'Mover el disco tope de J_a clavija ?d \
a 1a clavi j a ?d \n" , desde, hasta) ;
else {
,/*Cuando e1 nmero de disco es ms de uno */
temporal = 6 - desde - hasta,.
/* Llamar a 1a funcin transferencia */
transferir (n-1, desde, temporal) ;
printf (,'Mover eI disco Eope de Ia clavija td \
hasta la clavija ?d \nu,desde, hasta),.
/*Llamar a l-a funcin transferencia */
transf erir (n- 1, temporal, hasta)
o
o
o
o
o
O
O
o
o
o
o
o
o
o
,.
b
b
b
b
!o
o
es:e:s:.:
Volumen 4:
@ Copyright IBM @rp.2002
Los materiales del curso no pusdn ser reproducidos total
o parcialmente sin el permiso previo escrito de IBM
else
r(1)
T
(n)
=1
=
2*T
- 2
(n-1) +
paran>1
1. De esta
relacn,
se ve que se requiere 2o -
Unidad 3: Recursin
Volumen 4: Funciones en
@
48
o|'
o
o
o
o
o
o
o
o
o
q
o
Gua del
Estudiante
Resumen
Ahora que ha completado esta Unidad, usted debe ser capaz de:
Explicar la recursin
Discutir las varias condciones que necesitan ser satisfechas para que las
funciones recursivas trabajen conetamete
Describir cmo una funcin recursiva trabaja cuando se ejecuta
Definir el rol de la pila en la ejecucin de funciones recursivas
.
o
o
.
o
o
O
o
o
o
o
o
o
o
o
o
o
o
o
o
O
o
o
o
a
o
O
o
?
o
'
2) El retorno de funciones
a)
b)
Verdadero
Falso
el varor
{
.
else
n..
b)
Un Heap
c)
Un rbol
d)
b)
Falso
b)
c)
d)
Unidad 3: Recursin
Volumen 4: Funciones en
@
SO
del
o f
o
o
o
o
o
o
o
o
a
Gua del
7)
8)
o
o
o
o
o
o
o
o
o
o
o
o
c)
d)
9)
Falso
b)
Una funcin recursiva no necesita un caso base para estar bien definida y es
@paz de terminar por s misma.
a) Verdadero
b)
o
o
o
Estudiante
Serie de Fibonacci
Sumatoria de una serie desde 0 hasta el infinito
b)
Falso
10) Indique que sucede cuando se ilama a una funcin recursiva
d)
o
a
o
a
a
a
lntroduccin a la programacin
con C
1. a
2.a
3.b
4.a
5.b
6.d
7.b
8. ayb
9.b
10. a
Unidad 3: Recursin
Volumen 4: Funciores en
".'"rito
52
o
O
o
o
o
o
o
a
o
o
.if
o
ol'
.
.
Ol
oi''
o
oi
oi
Ol
$
d:
dd:
a
a
o
a
a
Volumen 4: Funciones
@ Copyright IBM C$p.2002
Los materiales del curso no pueden ser reproducidos total
o parcialmente sin el permlso previo escrito de IBM
Ejercicios de Laboratorios
1.
Escribir una funcin usando recursin para imprimir los nmeros desde
n hasta 0.
n es un entero positivo que es obtiene como entrada.
2.
Escribir una funcin recursiva que imprima una lnea que contenga exactamente
n asteriscos, n se da como entrada.
3.
Volumen 4: Funciones en
54
oF
o
o
o
o
o
O"
o
o
o
o
o
o
a
o
o
o
o
o
o
o
o
o
o
o
o
o
o
---r-
I--n-
rI-1r-nt-E
---tr<F
-r
Introduccin a la
Programacin con
Vofumen 5: Punteros
enc
o
o
o
o
o
o
o
o
o
o
;o
b
b
lo
lo
,o
o
o
Informacin de Publicacin
2O0O
y Microsoft Powerpoint
Marcas Registradas
Windows
Microsoft Corporation
Red Hat
propio riesgo.
reservados.
t,
ot
o'
O,'
Introduccin a la
o
o
Contenidos
Oir
oif
oi
ol
oi
ol,
o
o
I
Unidad 1: Punteros
Objetivos de Aprendizajes
l.
Fundamentos de Punteros
Resumen
12
13
l5
o
o
17
Ejercicios de Laboratorio
18
o
o
o
17
19
Objetivos de Aprendizaje
19
o'
1. Introducccin
20
o
o
o
o
o
o
o
o
2. Aritmtca de Drecciones
20
3. Puntero a Puntero
25
4. Aneglo de Punteros
26
o
o
o
o
o
o
5. Puntero a Estructura
Resumen
Unidad 3:Examen de Autoevaluacin
36
?4.
39
Ejercicios de Laboratorio
40
I
lD
p
p
!o
lo
lo
fo
lo
lo
I
Volumen 5: Punteros en C
Unidad
Copyright tBM Gorp.2002
Los materiales del curso no pueden ser reproducidos total
o parcialmente sin el permiso previo escrito de lBM.
@
l: Punteros
rt
oF
o:
.t
O'
Unidad 1: Punteros
o
Oi
q
d
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
)
Objetivos de Aprendizajes
Al finafizar esta unidad, usted ser capaz de:
.
Definir los punteros y describir su rol en la resolucin de problemas
.
'
.
'
'
memoria y referencias
de
Discutir
referencias
por
i'olumen 5: Punteros en
Unidad 1:
Punteros 1
Introduccin a la programacin
con
Fundamentos de punteros
'
'
v t#n" ii",
Para entender er concepto de punteros,
se discute que sucede cuando
declara en un programa.
int x = 5; s
'
.
.
variable
(Nombre de la
direccin)
----------->
----------+
Direccin de la
variable
(Direccin de 1a
variabl-e)
A continua",u,
435s8
Grrica para
::,ffintacin
int x -
Valor en fa
posi cin
(Contenido de
1a variable)
s;
("?d1r" , x) ;
Printf """t;:::
Losmateria,".8"?:llJf
ll,,F,[.""",ii;??:_,;::::,''Pterd-Ez
"rtto
de lBM.
o V
o t
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
p
lD
Valor de x, gue
cq
l.l.
sentencias:
var_nombre = &x;
y = *var_nombre;
La primera sentencia coloca la dreccin de x (o el puntero
de la posicin de x) en la
var_nombre. La sengunda sentencia y = *var_nombre busca el valor
de x, el cual
es 5 / usando *var_nombre y lo asigna a y.
una variable puntero debe ser decfarada antes de que sea usada.
En general, una
declaracin de puntero se hace como sigue:
tipo-de-dato *variable3uncero,.
consideracin, y la
es el nombre de la variable puntero que se est declarando. Note
que.se debe preceder el nombre de la variabie puntero
con un carcter
Las
siguientes son afgunas dectaraciones vtidas oe puntros:-
variableiuntero
*.
inL *nombre_var;
float *temp;
Unidad
Copyright tBM Corp.2002
Los materiafes der curso no pueden ser reproducrdos total
o parcialmente sin el permiso previo escrito de IBM
@
l: Punteros
char
*pva1,.
int x, y,.
int *nombre_var = &x,.
En este caso, se le asigna la direccin de
x a fa variable nombre
var. En este
-;
ejemplo, se han decfarado dos variabres
enteras
;
i" ;ri,L puntero
nombre-war apuntando a una cantidad entera.
" ;,tam-bn
puede
se
tener la siguiente
declaracin, tat como se hizo con otras variables
en C:
int x, y;
int *nombre_var;
nombre_var = &x. /* se Le asigna la
direcci_n
de
x */
var
coo e{
Printf ( "?d1' , a) ;
prinLf("tf",
2 * sgrt(a / d));
y = facrorial (100);
Y = factorj-al (2 * a) ;
cuando un argumento se pasa como una referencia
(es decir, cuando un puntero se
pasa a una funcn), fa direccin
del elemento oe o"io s" pasa a fa funcin y
no su
vr rrvqv
l. r ul tt
Volumen 5: pGros-en
Lo
C7-
o
o
o
o
o
o
o
o
o
o
o
o
o
o
Ejemplo
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
O'
oi
ol
o,l
o
oi
ot
I,
I.
l
I
t,
l.l:
La funcin
*n
*a.
l.i
; t;;
Volumen 5: punteros en C
Unidad
Copyright IBM Corp.2002
Los materiales derorrso no pueen'seiiproducidos
totat
o parcialmente sin ef permlso previo escrito de IBM
@
It
l: Punteros
ramacn con C
void
main
como sigue:
O i
es ?d\n,,, \
tamao */
int
(int *vector) i
.
lnt sum = O, k;
/" nr bucle carcula ra suma de los nmeros impares *7
/* de 1os elementos de un arreglo*/
for (k = 0; k < 100; k++)
/* verifica si e1 elemento des impar o no */
if (vecrorlkl Z 2 != O)
sum = sum + vector [k]
return (sum),.
sum_impar
,.
j,
a
a
o
o
o
o
o
o
a
o
o
o
o
a
o
o
o;
o:
o
o
o
o
o
O
o
O
o
o
o
a
o
o
O
p
p
l.
o
o
o
ramacin con C
()
1)
ch,.
scanf
sr-:nf
O no requiere el
"oro
3"'elemento
caj a [1]
&caja [2]
imo elemento
&caja
(i+1)moefemento
ccajalil
Ii -1]
o
o
(caja + r)
(caja + 2)
(caja+i-1)
(caja + i)
ccaja[i] ycaja + i-
Notequelaexpresincaja + ivaasertratadacomouna
Unidad
l: Punteros
ff:tr3J:tr"i}yfl::h-*Jil"'gT,'il;1f"?,f
llama
ff :,T;i3 jffi fl #i,x,:J:,:nn#,,1;#:;"";l"hasta"i,t,;;mento,o
k++,.
/* nI controf
fi':t"'l;f"Xifl:J
Ef
(-t)
ffiff:contr
num),.
Lo
escrito de lBM.
a
o
o
Gua del
Estudiante
o
O
O
a
a
a
o
a
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
else
int
busgueda
*ni:
lin|-
-*J
int k
whi ]e (k < tam)
if
inl-
'
f-qlltr
--
in
rlu
-'.-\
tlull,/
(*(caja + k) == num)
return (k) ;
/*num encontrado en k
ef se
k++;
o
o
o
a
o
o
o
a
o
o
o
o
o
ret.urn (-1) ;
o
o
/*
num no encontrado * /
]
El cdigo C finaliza aqu
Fin del Ejemplo 1.4
En el ejemplo anterior, se ha pasado elaneglo como argumento a la funcih busqueda.
La direccin del primer elemento del aneglo se pasa a la funcin, la cual es aceptada
como un puntero en la funcin.
Volumen 5: Punteros en C
Unidad
Corp.2002
Los materiales del curso no puden sr reproducidos total
o parcalmente sn elpermso previo escrito de IBM
'
@ Copyright IBM
l: Punteros
int
Considere
caja t1001 como la entrada. Se debe escribir y usar una funcin una
funcin llamada intercambiar, la cuat anegla el anegb d elementos en orden
inverso. Un algoritmo simple para esto es conlderar el primet elemento (tope) y et
ltimo elemento (base), y intercambiar sus contenidos. Entonces se mueve'at'primo
elemento desde ef tope y al elemento previo a la base y se intercambia sus contenidos.
El proceso contina hasta que la mitad del aneglo se haya recorrido. El siguiente
programa realiza esa la tarea:
#include <stdio.h>
void reverse(int *caja, int n);
void swap (int *x, int *y);
mainO {
i-nt ca j a [100] , k, n;
/* Leer el Eamao deI arreglo */
printf ('t rngresar e1 tamao de1 arreglo [1, 100] \n',
qot
scanf ( u?du, en) ;
) whiJ-e (n < 1 ll n > 1oo);
*,/
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
t?
Estudiante
Gua del
COpe++;
base - -
{
+
,-
,.
)
rtrtr.
int
temp,.
temP
*P,'
*p = *q;
*q = temp,'
return;
p almacenado en temp
l-nn t- cn i n
de q movido a p */
/* Contenido ue
^^ temp (p) a q */
*
//
(1^f
a
vvruvqv
i Aa
de
,/ *
o
o
o
o
o
o
o
Volumen 5: Punteros' en C
Unidad
11
Resumen
Ahora que ha completado esta unidad, usted ser capaz de:
Definir punteros, y describir su rol en la resolucin de problemas
Discutir los conceptos fundamentales de punteros, variables, posiciones
de
memorias y referencias
Explicar cmo hacer declaraciones de punteros
Dscutir el uso de punteros para pasar parmetros a funciones por
referencia
Explicar funciones que pueden recbr arreglos unidiemensionaies como
argumentos a travs de punteros.
.
'
'
a
o
amacion con
1)
a) int *arreglo
b) int arregto []
c) int arreglo
rf
v5
f'E
2)
arreqro?
a)
b)
c) Los valores enteros que constituyen el arreglo
d) La direccin del primer elemento del arreglo
4)
d)
b) f loat *xi
c) float *x =
5)
d)
3;
6)
loat?
,.
d)
a)
b)
loat, char
Falso
o
o
o
o
o
o
o
o
o
o
.iI
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
Introduccin a la p
\/oJumen 5: Punteros en C
Unidad
Copyright tBM Corp. 2002
Los materiales del c{.rrso no pueden ser reproducidos total
o parcialmente sln el permiso previo escrito de IBM
@
l: Punteros 13
7)
un aneglo se pasa
b) (*a + j,
c) *(a + jr
d) (*a + *j)
10)
Para la declaracin
la referencia _
inL
t1001 e
inr j,
la expresin *
(a + j )
es equivalente a
a) a Ij -rl
b) a [j +1]
c)a
d) aijl
Pun t'eros
;"
-en
ol
of
olF
oljr
o
ol,
oli
oltlr
ol:
ol,
ol
oi
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
Gua del
Estudiante
Introduccin a la program
Respuestas a la unidad
a: ,- ,-- -
l: Examen de Autoevaluacin
1) ayb
2)d
3)b
4)b
5) ayc
6)a
7)c
8)a
9)c
10)
o
o
o
o
a
o
o
o
o
o
a
?
?
o
tI
ti
?
o
Unidad 1:
Copyright IBM Corp.2002
Los materiales delcurso no pueden ser reproducidos total
o parcialmente sin el permiso previo escrito de IBM
.1
Punteros
15
o ?
o ,f
o
o
o
o
o
o
o
o
o
o
Gua del
Estudiante
Introduccin a la programacrn
cc-
.
.
o
o
o
o
o
o
o
o
o
o
o
a
o
o
o
o
o
o
o
o
o
o
Volumen 5: Punteros en C
17
Ejercicios de Laboratorio
1)
dado el nmero de
o1
o
o
o
o
o
o
o
o
o
o
O
o
a
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
a
a
o
Volumen 5: Punteros en C
Unidad 3: Punteros
Copyright tBM Corp. 2002
Los materiales delcurso no pueden ser reproducidos total
o parcialmente sin el permiso previo esoito de IBM
@
Avanzados lg
Introduccin a la programacin
con
l. lntroducccin
Los punteros
:oL importantes en cualquier esfuerz o pararesolver problemas, tal como
se estudi en la
unidad 1 - Punteros. qh est uai, se
aprender un poco ms acerca
de los punteros y sus usos. Para recalcar,
ru pr"'o edrar
para cuafquier
tipo de dato' se t'b"..g.Y9 c provee
tipos de datos estndar como inr, floar
o char.
Le da adems la posibitiaad af programador
de decfarar tipos oe oatoi'definidos por
el
usuario' Estos se definen con fa ayuda
de estiuctuig.v oe_ rlpedefs. Dado que
los
definidos por er rsuario estn prritior,
c p"irit" ar punteros
pr;i;;
:ffi"ir"r"ftos
;; ;;;
j.
2. Aritmtica de Direcciones
se sabe que un tipo de dato es un.coniunto
sore e//os. Considere la siguient eclaracin:de valores ms las operaciones definidas
int *ptr;
ptr
es
Jecfarar ro ,igun1.
inf
*'iF?.
LL/LL,
. char *cpLr,.
float *fptr,.
Estas tres variables punteros son diferentes
en naturale za, an cuando ellas todas
almacenan la direccin.de una pson
p"r"
r"roi.
la aritmtica de
direcciones' el tipo. de.dato at qle el puntero
".rl est asocado esentender
significante. Este es el
qL,e invorucra
:11Hff"".:i"Yr?$*T or" se usa en er crcuro de ta
"*pi"riJn
"Lr
'-
A
t
.F
of
o:f
o
o
O
o,l
oj
a
o
o
O
Introduccin a la P
Direccin
de Memoria
de la
Posicin
o
a
o
o
1028
1030
1032
a
a
a
1034
1036
o
o
o
o
o
o
o
o
a
o
o
o
t
t
p
lp
lp
o
o
1038
1040
1M2
1044
1046
ptr
e{emento de arreglo. Se puede
ptr
arreglo Y
apuntan al primer
usar
cualquiera de las siguientes cuatro formas para acceder a los elementos d arreqLo:
Ambos
o drr91o [i]
o *(arreglo + i)
. ptr [i]
. *(ptr + i)
Unidad 3: Punterc
@ Copyright tBM Crirp. 2002
Avanzados
21
pEr + 4 * sizeof(tipo_de_dato)
si el tipo de dato.es. un integer, y se asume. q*
oo, bytes (se asumir esto para
por et sisiema oprativo p.r" ud" entero, d
ta
;?r"",:",ff r5"HHoJ"Lln "rnados
PCr+4t'2
prr + B
De este modo, si a pcr se re ha asignado
Esto es equivafente
fl[::':ffi:
;:."3J:sresa
ar ejempro
q," r";f
"orprender
Ya se ha visto que
ptr + 10;
apunta al 10'o efemento despus de ptr.
Da.do euo arrg1o alarnacena la
direccin de
su primer elemento, arreglo + i retorna
ef mismo varoi que prr + i. sin embargo,
existe una diferencia entre los dos, fo cuat
se aprendern en la prxima seccin. para
obtener el elemento en arreglo + i
! prr + i S debe usar er operador de
desreferencia *' Asse indicar * (arregl0
+ i) y * (prr + i) respectivamente.
arregl0
y
son diferentes formas de expresar *(arresl0
+ i) y *(ptr *
respectivamente. As, cuando se dice
er compirador est reafmente
realizando el siguiente cfculo:
i)'
til ptrtil
ptrtii,
"(ptr + i * sizeof(tipo_de_dato))
En ef ejemplo, ptr [4i ef elemento en
fa q.rinta poscin es recuperado usando la
frmula .(ptr + 4. 2) que es so. Aqu,
arreglo
contiene
Lo28 + 4 * zda.1o36, y *(1036) oa ei elemento la direccin Lo2B.por lo que
que est almacenado
en esa
dreccin de memoria, el cul es so.
Nota: usando el operador de desreferencia de
ta direccin se obtiene ef etemento de
esa posicin.
Losmateria,""?"?3llJ"nil,,i[3",ir";??33,,oo,",oostotar
o parcialmente sin el permiso previo escrito
de lBM.
o
o
o
o
o
o
o
o ltt:tl
o
o lrlf
o
o
o
o'
o
o
o
o
o
o
o
o
o
o
o
a
o
o
o
o
o
o
o
o
Introduccin a la
ramacin con
Ya que ptr es una variable puntero, a sta se le puede reasignar nuevos valores.
Se
puede mover hacia ariba o haca abajo en el areglo. Sin embargo, se debe
tener
cudado de no acceder a elementos ms afl de los lmites delareglya que C no
tiene
un mecansmo incorporado para la verificacin de los lmites del angl. Eiprogramador
debe ser, por lo tanto, muy cuidadoso. Tome por ejemplo, las siguierit,es delaracones:
ptr=ptr_4;
"(Ptr=*(Ptr)+10;
Se asignar dentro de ptr el valor 1024, y un valor r-0 ser sumado alelemento en
esa
posicn' Sin embargo, 7024 no est dentro de los lmites del areglo que
se ha
declarado, el cual comenza a partir de roze. Ms an, con este uso nconecto de la
resta en
se pudo haber modificado el valor de alguna otra variable que no se
debera modificar. A pesar de que los punteros son extremadamente tiles en certas
stuaciones, estos pueden ser una pesadilla para el programador si se usan
incorrectamente.
ptr
Para entender las operacones de resta cuando dos variables punteros estn
t
I
i
P
\/olumen 5: Punteros en C
Direccin
de
Memoria
de la
Posicn
1028
1030
1032
1034
1036
1038
10i0
1042
1044
1M6
Figure 3.2: Dos Variabfes punteros
rir"
ffi?il:i:
arreglo _
,-
?33,,
escrito de lBM.
:F
?lf
ril
o1
.ll
:il
3. Puntero a Puntero
:t
oll
Para recalcar, un variable puntero es una variable que contiene la direccin de otra
variable. La variable puntero en s msma puede apuntar a otro puntero, implicando que
se puede tener un puntero a un puntero.
Sea la declaracin de algunas variables:
ol*
rtr
olt
oll
o
o
o
o
o
o
o
o
O"
o,
10
508
Figura 3.3: Dreccin y Gontenido de una Variable puntero
Y=&x;
y se asume que y est almacenda en memoria en la posicin L024. La posicin de
memoria de x e y S rTruStran en la Figura 3.4, despus de la sentencia y = &x; S
ejecuta.
o
o
o
o
o
o
o
o
508
s08
!024
Z = 6rY;
Se asume que z est asignada en.memoria pn la posicn
memoria de x, y \ z Se muestran en la Figura 3.5.
o
a
10
a
a
a
508
Io
t?
10
508
L024
r024
33 08
de
printf (*&d, , x) ;
?
?
?
?
o
printf 1"Zd"l'"y)
.'
Introduccin a la
Printf("?d" , **z)
4. Arreglo de Punteros
En C, se puede tener un aneglo cuyos efementos son todos punteros. Cada uno de
qslo! punteros, por q'emplo, puede a su vez apuntar a un arreglo unidimensional. La
definicin de tal aneglo de punteros apuntando'al msmo tipo de"anegio unioimensional
es realmente la definicin de un arreglo bidimensional.
Un aneglo multi-dimensional puede ser descrito como un arreglo arreglo de punteros.
Tambin se puede definir como un n'ico puntero apuntado ,n grpo de arreglos
almacenados en posiciones de memoria contiguas.
Un areglo bidimensional se puede definiir como un arreglo unidimensional de punteros
con la siguiente definicin:
un arreglo de bidimensional
'
'
anteriormente.
o
o
o
o
o
o rl
o il
o
o
o
o
o
o
o
o
o
O
o
o
o
o
o
o
o
o
o
o
a
o
o
o
o
o
o
o
?
O
I
?
?
I)
ff
p
P
Gua del
Estudiante
*(x[3] +
6)
[:]
*(xlil
+ j)
fo siguiente:
Volumen 5: Punteros en C
rirr"r.
siguiente:
'
'
/* Archivos de cabecera */
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define
TAMANO 4
oF
o
oi*
Introduccin a la
stringsIi]
= (char *) mal1oc( ( strlen(stri-ng)
+ 6 + 1 ) * sizeof(char) );
strcpy(strings [i], strlng) ;
a
O,;3
ol;
o
)
nrintf
o
o
o
o
o
o
o
o
o
o
a
o
o
o
e1
e1 se
o
o
o
o
o
o
o
a
a
o
o
Oil
/rr\-nt.
\
\r
rr4!!
Oi
macin con
,-
. int strl-en(const char *)! Una funcin que toma un puntero a una
cadena, y retoma la longitud de la cadena.
. char * strcpy(char *, const char *): una funcin que toma dos
cadenas y copia la segunda cadena dentro de la primera cadena.
strcmp (const char
const char *) : una funcin que toma dos
cadenas y retoma 0 siambas denas son iguales, < o si la primera cadena es
menor que la segunda y, > 0 si la primera cadena es mayor que lat segunda.
char strcat (char * const char *): Una fUncin que toma dos
cadenas y concatena (une) las dos cadenas agregando la segunda cadena a la
primera.
o int
.
*,
Volumen 5: Punteros en C
29
const char*.
Aqu:
sizeof (char)
strlen(string)
o str]en (string)
o
til .
");'
fngrese 4 strings:
String 1: green
Unidad 3: Pu
or
oi
ot
o'
o
e
.f
.f
e
a
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
String 2: ye11ow
String 3: blue
Ql- rinn
1.
dra
St.ring 1 green
String 1 green
String 1 green
String 2 yellow
at-rinn
? l.r'l rro
veY
String 4 green
5. Puntero a Estructura
Se puede tambin tener punteros apuntando a estructuras. Suponga que se tiene la
siguiente estructura:
struct persona {
char nombrel45l;
int edad,.
f loat. peso,-
);
Se puede crear una varable e inicializarla como sigue:
!t,
65.5);
ar<^
* ct- r
sptr
spt.r = &estudiante;
Usando esta variable puntero a una estructura llamada sprr, se puede acceder a c;,da
componente individualde la estructura como se muestra a continuacin:
sptr-
>nombre
sptsr- >edad
spEr- >peso
\/clumen 5: Punteros en C
3l
lntroduccin a la
cin con C
Ga delEstudiante
p*t
*a
;;;
Fl"#lJ;
a.tr Encontrar
,; ogr;"nto; dependiendo
ta
.
r
o
.
sigue ar programa:
/* Archivos de Cabecera */
#incLude <stdio.h>
#include <math.h>
umen
@ Copyright tBM Corp.20O2
,t-os
__
^_ materiales
del curso no pueOen'seiieproducidos
total
o parcialmente sin el permiso previo
O" lg^r.
"r"rito
teros en C
o
o
o
o
o
o
o
o
o
o
o
o
o
Gua del
o t,
o
o
o
o
o
o'
Programe::- :_-
o
o
o
o
o
o
o
o
o
o
Introduccin a la
o
o
o
o
o
o
o
o
o
o
o
o
o
o
Estudiante
'
Unidad 3: Punteros
Avanzados
33
F.
("fpcr) (i)
La
funcin que se pasa como un argumento
debe satisfacr dos condiciones para que sea
aceptada como un argumento para grenerarTabla.,Las
condiciones Son:
La funcin debe tomar un entero como un
argumento
La funcin debe retomar un entero.
cualquier funcin que satisfaga las dos condicones
anteriores puede ser pasada como
un argumento a generarTabla.
o
.
,-", ;
;";,",
['
;i
3"? lllJin
F[."".j'" ?:3,'"J
o parcalmente sin elpermso previo
"? escrito
",
de" lBM.
P u n te
ror-6-E
o
o
o
o
o
o
o
o
o
o
o
o
o
oi
o
Gua del
Estudiante
Resumen
Ahora que ha completado esta unidad, usted ser capaz de:
Explicar la aritmica de direcciones
Describir un puntero a puntero y un arreglo de punteros
Discutir cmo declarar y usar punteros con estructuras
.
.
.
.
o,
o
o
o
a
a
a
o
o
o
o
o
e
O
Volumen 5: Punteros en C
Unidad 3: Punteros
Avanzados
35
4.4,5.s};
b)1
c)2
d)3
4) fptr2 = fptrl
a) Verdadero
b) Falso
6)
dato.
a) Verdadero
b) Falso
++
==
d)o
:!
B)
c)
d)
9)
En la declaracin
Qu es pcr?
a) Un puntero a funcin
b) Un puntero a puntero
c) Una funcin
d) Ninguna de las anteriores
:H
oll
ql
$
d
10)
En la declaracin
int * (*ptr)
(int "
Qu s prr?
a) Un puntero a puntero
b) Un puntero a una funcin
c) Declaracininvlida
d) Ninguna de las anteriores
o
o
o
o
o
o
o
?
o
Volumen 5: Punteros en C
37
c _
2)b
3)d
4)a
5)a
6)a
7)d
8)d
9)c
10)
pu nte
."" ; ;";",",
lll# ['
?3;,"J"",
;,
?"?
3*g"j',"?
o parcialmente sin ef permiso previo escrito de lBM.
ros-ETre
o --
o - rE
r
o PC
o
o fr
o
o
o
o
o
o
o
o
o
o
o
o
o
a
o
o
o
amacin con
o
o
o
o
Introduccin a la
Avanzados
Objetivos de Aprend izaje
Al finalizar esta unidad, usted ser capaz de:
Trabajar con diferentes tipos de punteros
Usar punteros en la solucin de problemas
.
.
I
I
I
i
j
I
:
o
o
o
a
a
q
T
T
?
?
?
o
F
?
?
7
Volumen 5: Punteros en C
rarnacin con C
Ejercicios de Laboratorio
1) Considere fa siguiente estructura definida
tlpedef struct {
int dd, mm, yy;
a continuacion:
rncna;
rlpedef struct {
int idno,.
char nombre [+o]
,.
.ucuA ddn,.
float salario;
int dependientes,.
) rutr,raoo;
a)
b)
:il"jff".X]f!Si?ff;.
c)
'"nrul""
enor si er-nero
teros
anzados
"r"rito
de
:t
oil
.l
ol.
.lt
-E
rF
oE
of
otf
olr
.l
ol
oi
E-r-1-hI5
ry-ntI
---5Ir -R
---!I<F,
ntroduccin a la
Programacin con C
f
-*
--n
o;
ol
o
Ol
o
o
o
o
o
o
o
o
o
o
Volumen 6: Tpicos
Avanzados
I
{
nformacin de publicacin
producida usando Microsoft
,t;X3:?:t,l"*:.t'oo
Marcas Registradas
IBM @ es una marca registrada
de fnternational Business Machines
corporation.
y nombres oe servicos pueden
ser marcas comerciales o
;in:"#i?Hff;Tlitg::
Microsoft Corporation
Red Hat
Edicin Septiembre de
2OO2
,,
il;;;ffi;
5:,f,rfl""":#[j".:18ili0"
eii",
nn soo
inr,i,t"o",
iienconatmente.
o
o
o
Introduccin a la programacin
con C
o
a
o
a
o lfff
o
o
o
o
?l
I'
p
I
o hr
o
a
o
o
o
o
o
o
o
o
o
o
a
I
I
I
t?
tI
It
I
p
lo
lo
lo
'o
a
o
Contenidos
Unidad 1: Manejo de Archivo en C
1
Objetivos de Aprendizaje
i.
Introduccin
2. UsarArchivos de Datos en C
3. Archivos de Texto y Binarios
2
14
15
18
19
Autoevaruacin
21
22
22
Ejercicios de Laboratorio
23
25
25
1. Introduccin
26
2. Enumeraciones
26
28
4. Macros
30
Resumen
36
39
40
Autoevatuacin
41
42
42
43
"scrito
^l
!F
o
o
o
o
o;
oi
o
o
o
o
o
o
o
a
a
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
a
o
o
o
l. Introduccin
Algunas aplicaciones. requieren que los datos estn disponibles
para varias ejecuciones
del programa. Ejemptos de estas'aplcaciones son:
Datos sobre empfeados, requeridos por apJicaciones de
nmina de pago.
Datos sobre cuentas delclente, requeridos por los programas
bancarios.
Los datos que se usan en las variables de los programa
duran solamente el tiempo de
duracin del programa. Los datos, almacenado. e la F{AM,
se pieroen ,n" u". que el
programa termina a menos que explcitamente se
coloquen en to dispositivos de
almacenamiento secundario. sin embargo, en los dispositivos
de almacenamiento
secundario mm9 discos y cintas, los datoJse almacenan permanentemente
en la forma
de archivos de dafos- En esta unidad se va consderar slo
archivos de disco cuando
se haga referencia a los dispositivos de almacenamiento secundario.
Los datos que se
mantienen en el dispositivo de almacenamiento secundario
son permanentes, a menos
que sean borados por ef usuario.
'
o
Muchos
.lenguajes de programacin clasifican los archivos de datos como archivos
secuenciales
y archivos de acceso directo o acceso aleatorio. c ofrece dos
tipos
o
'
o
.
Archivos de texto.
Archivos de datos sin formato
i"i"
l:
Manejo Oe Archivo en C
utilizar
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
lf
Una de las primera cosas que hay que hacer con los archivos de datos
orientados a
flujo es crear un rea de buffer laimcenamiento temporal). Un rea
de buffer es un
lugar en memoria que se usa para transferir datos desde la memoria
a los dispositivos
de almacenamiento s.ecundario y vceversa. El rea de buffer es la asociacin
entre el
archivo de datos en el dispositivo de almacenamiento icundario y progiama
et
que usa
los datos. Crear un rea de buffer ayuda a que la transferencia de
informacin entre el
dispositivo de almacenamiento secudario y elprograma sea ms
rpida.
t"
I
t
I
t
I
rigr",
f3tr
.
.
o
archivos.
de
o
o
agregar
oi
Dara
creado.
Abre
un
lectura/escritura. Si el archivo no
un nuevo arcfjvo ser creado.
Tabla
l.l:
para
"i"t"
Tipos de Archivo
[:[,/lff,:;
Ejemplo
l.l:
S?5;";X,:ffifn#o,
c. considere
.:tt""u
Unidad 1: Manejo
Oe Rrcnvo
enT
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
Or
ot
r
Gua del Estudiante
termina aqu */
l.i
fopen Noexitoso
un fopen no
#define NULL
de1 archivo\n',),.
else
ol
Losmateriar"r?"?SL"['3[r"""f""??31,*roo"stotal
o parcialmente sin elpermiso previo escrito de IBM
exitoso.
Introduccin a la programacin
con C
*,/
como se menciol
ef Ejemplo
1.1 cuando se intenta abrir
-la
un archivo usando un
fopen que no es exitoso,
".1
funcin retorna
u"roi
NuLL.
se verifica si ef vator
retornado por la funcin fopen
es un valor uur,r,."ls" ," definido
aqu el NULL como 0.
un mensaje de error apropiado o"o"^-g:r:g-a1,usuario."si
ef archivo es exitoso se
puede proceder a hacer lci quJ
se queria con el archivo de"or|.
datoi. p"r"'ror, ropen
no ser exitoso si et
!;;f;'"
archivo'mencionado no r"
o si el archivo est daado. Es
que existan otras razon"t poi
tas cuats"n"ni
abrir el archivo no se tenga
"ii"i""t"r
"rrilri"
\n"),.
else i
/* eerrar el archi.vo *,/
fclose (pUr)
Unidad t : rv,raneoEni-EnE
Volumen 6: TpicosTvanzados
Copyrght tBM Corp. 2002
Los materates def
no pueden ser reproducidos total
"Lrso
o parcialmente sin
elpermiso previo estrto de
@
IBM
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
f3rr
'
.
Creacin indirecta
travs de un programa
.
.
getchar
putc
#include <stdi,o.
h>
o
o
o
o
if(myrext == NULL)
printf (,'Error aI abrir e1 archivo\n,,);
else {
if.
se puede usar cualquiera de los dos mtodos. Al flnal, son los programadores
quienes
deciden culde los mtodos desean emplear.
o
o
o
o
o
o
o
,t7
imprimirlo */
ch = getc (myTexE) ;
while(ch != EOF)
I
t
purchar (ch)
ch =
get.c (myText) ;
,.
)
)
/* La funcin
mai_n
termina aqu */
aqu */
int ch,.
,/" abrir el archivo */
myText = fopen(,'mystory.dat",,,w,,
if (myText == rULL)
Unidad 1: Manejo e Archivo en C
@ Copyright
);
tBM Corp.2002
o
o
o
o
o
o
printf
("Error en 1a creacin\n,') ;
e.l.se t
printf(rfngrese un texto a ser \
almacenado dentro del archivo\n,,)
ch = getchar|;
while( ch l= '\nr )
ch = toupper (ch)
putc(ch, myText);
ch = getcharO;
o
o
)
t
o
O
q
q
q
I
t
,.
o
o
o
o
o
o
o
o
o
o
o
a
o
o
purci
,.
myrexr.
escribr caracteres,
lste
r :
Losmateriar",S"?ff x,*1i,3,[r1"fl;??3l,oa,"ioo,,o*r
o parcialmente sin elpermiso previo esctito de
IBM
se
realiza usando
#include <stdio.h>
#incLude <cLype. h>
/* La funcin main se inicia aqu*/
mainO i
Ff LE * t.ext ;
/* abrr un archivo *,/
text = fopen("myText.dat",,,Y,,)
if (rext == NULL)
Pri,ntf ('rError a1 abrir\rr )
else {
ch = n"c(rxr);
while (ch ! = EoF) {
/* vetifica los espacios en blancos,
tabulaciones y caracteres de nueva l-nea *,/
,.
if (ch-=' , ll ch=='\, ll \
ch=='\n'
nspace++,.
if
ch = fgetc(text)
,.
/* cerrar e1 archivo */
fclose (Cext)
,.
nspace, nchar)
CaracLeres = ?d\n", \
,.
Unidad
l:
Manejo de
Arci;n
C
@ Copyright tBM
Corp. 2002
Los materiales del curso no pueden ser reproducidos
total
o parcialmente sin el permso previo escrito de IBM
ra
o F
o il,
o
o
o
o
o
o
I
o
o
o
o
o
o
o
o
o
Gua del
float
I
I
notas [6]
/* notas de 5 cursos */
;
Suponga datos para un mximo de 100 .estudiantes que deben ser ledos desde el
teclado y escritas en el disco. Se asume el final de la entrada cuando el usuario ingrese
el carcter $ en la primera posicin del idno. Esto es ms realista que tomar enormes
cantdades de datos como entrada desde el teclado. En este ejemplo, se crea un rea
de buffer con una variable puntero, como mark3rr. Entonces se abre un archivo
lfamado history.dat refirndose al archivo de datos de notas. Existe una asociacin
creada entre el archivo history.dar ! la variable puntero in_mark3rr. El archivo de
dato se abre para escritura. Note que se escribe los datos al ahivo?e datos usando la
funcin fprintf. La sintaxis de la funcin rprinrr es similar a la funcin printf, lO
nica diferencia notable es el uso de la variable puntero de flujo como el primer
argumento en la func fprinrf . La cadena de formato usa las mismas caracteristcas
de la funci prinrf .
El cdigo C inicia aqu...
a
e
o
o
o
o
o
o
o
struct lista_notas t
char idno [9] ;
char nombre [+5] ;
Estudiante
typedef struct {
char idno [9]
char nombre [45] ;
f loat notas [6]
,.
,.
r,rsra_HorAS;
in_stud ISIZE]
int j,k;
l,
It
, orumen 6:
@ Copyright IBM Corp. 2002
Los materiales delcurso no pueden ser reproducidos total
o parcialmente sin elpermiso previo escrito de IBM
un
fflush(srdin);
Printf ( "fngresar Nombre\n" ),.
scanf ( u *, u, in_stud [kj . nombre),.
printf("fngresar las noLas de Ios 6 cursos\n,,);
for(j=0;j.6;i++)i
do{
l
k++,.
)
,.
/* Abrir archivo
modo lectura */
out_mark__ptr = fopen ( r'hi-story. dat rr , rrr'r ) .
olt
o
o
o
o
ol
ol
(out-mark3tr, "tf,, , \
&out_srud [k] - noras ij I ) ;
f scanf
Ol
oi
k++,'
o!
/* cerrar archivo */
(out_mark_ptr ) ;
for (k = 0; k . SIZE; k++) {
printf ("\n?s: ?s\n,',
out_stud [k] . idno, out_stud [k] .nombre) ;
printf ( "Notas en los cursos: \n,,) ;
for (j = 0; J . 6; j++)
printf (*26.2f \n", out_st.ud Ik] .notas ij I ) ;
f c lose
o
o
o
a
o
o
o
o
o
3
o
o
o
a
o
o
o
o
?
a
?
I
I
I
b
I
p
l
p
fo
l.
p
lo
almacenarDatos O ;
recuperarDat.os O ;
)
Nota: Cuando se abrieron los archivos no se verfic por NULL. Se requiere que se
incluya una verificacin por NULL cuando se ejecute este programa en la
computadora.
Fin del Ejempto 1.6
Resulta obvio que usar archvos de datos no es slo leer y escrbir archivos
de texto. Se
necesita procesar datos en un archvo de datos, actuali2ar valores que
requieren ser
modiflcados y hacer muchas otras tareas relaconadas. Generalmenie
un archivo de
datos tiene que ser ledo as como se tene que escribir en t. Escribir
un archvo de
datos puede tomar la forma de registros siendo aadidos, regstros
siendo bonados,
c,3ntenido de regstros siendo cambiados o registros siendo
anghdos. riiiguiente es
-1 mtodo pa.a realizar esta actividad:
.
'
'
Tener dos archivos diferentes, uno para entrada y el otro para salida.
Una vez que todo esto se ha hecho, bonar el archivo de entrada vejo y
Gua del
Es::: a^::
o
o
3.
.
.
.
i;"*
";;"t
delarchivo.
floae.
Unidad 1: Manejo
Oe Rrcfivo
en C
Los
l4
o
,
il
o
o
o
o
a
il
oI
ol
o,
Or
oi
oi
a
o
El.lenguaje C provee una amplia variedad de formas para representar los datos dentro
del programa. Los datos pueden ser almacenados en estructuras de datos complejas
como aneglos, estructuras o uniones. El alcance de los elementos de estos pbs'de
datos est limitado al del programa; estas entidades no existen ms all de la ejcucin
def programa. Puede tenerse un requerimiento de que estos datos sean persistentes
entres dos ejecucones del programa para el cual C provee una solucin a travs de una
facilidad para manipular tipos de datos sin formato.
ot
Los archivos de datos sin formato se llaman as porque contienen algn texto sin
formato. No se pueden abrir y ver con un editor de texto.
ol
q
q
q
o
?
?
?
! fwrite
.
.
'
.
STA .NOTAS )
, mark3tr)
en la
que es entrada.
/* structura in_sLudent */
typedef struct {
char idno [9] ;
char nombre [45]
f loat notas [5]
,/* notas de los 6 cursos */
,.
,.
r,rsra_norAs,.
para obLener dat.os del usuario y almacenarro
'/* Funcin
en un
*,/
archivo
void almacenarDatos O {
FfLE *in_mark3tr;
LISTA_NOTAS
inr j
in_srud ISIZE)
k,.
for(j=o;j.6;j++){
do{
k++,.
)
k++)
I, in_mark3Lr),.
/* cerrar archivo *,/
f cLose (in_mark3tr)
;
(NOTAS_LIST)
, \
tBM Corp.20O2
Los materiales delcurso no pueOen'seiiproducdos
totat
o parcialmente sin el permso previo es;rito
de IBM
ar
o
o
o
o
o
o
o
o
o
o
FfLE *out_markjtr,.
LISTA_NOTASout_stud ISIZE]
int j, k;
/* Abrir archivo modo lectura */
out_markStr = fopen ( t'history. daE,', r'rb', ),.
/* Leer todos los datos de1 estudiante del archivo*,/
k = 0;
while (k < SIZE) {
fread(&out_scudIk], sizeof (NOTAS LIST), 1,
out_mark3tr) ;
o
o
o
o
k++,'
]
o
o
/* cerrar archivo */
close (out_mark_ptr) ;
for (k = 0; k < SfZE,' k++)
f
printf
"\n?s: ?s\n",
o
o
);
o
o
o
o
o
o
o
o
o
o
:-
/* La funcin main
mainO {
almacenarDatos
comienza
(
antt
* /
);
recuperarDatos O ;
)
.-eda
es entrada.
:.
Ejemplo 1.7
b
b
fo
t-
p
!o
Gua
c:
;_.:_::_:_
Resumen
Ahora que ha compretado esta unidad,
usted debe ser capaz de:
Reconocer reas de sotucin de problemas
que requieran la necesidad de leer y
escribir datos en dispositivos de armacenamiento
secundario
Discutir cmo manipufar archivos de
datos en C
Discutir los
manejar arcnvos rJntaoos a flujo en
liiofos para
c
iunciones'de ribrer qr"
reer y escribr
'
.
'
' ffffJgd'r;ffi:r
enT
@ Copyrighr
"vro"n ^'"r""r,
tBM Corp.2002
tos materiales def curso no pueden ser reproducidos
totaf
o parcialmente sin ef permiso prevo estrito
de IBM
o
o
o
o
o
o
Unidad
o
o li
o li
o
o F
o F
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
1)
o
o
o
ol
O,
q
q
q
2)
gets (miString) ;
scanf ( *?s., &mistring) ;
getc (miString) ;
fscanf (fp, ..?s,,, emiString)
a) ctype.h
b) stdio.h
c) siri ncr l
d) stdlib.h
3)
Uno de los mayores problemas de los archivos de datos es que los programadores
tienen que manejar los buffers.
a) Verdadero
b) Fafso
a) Verdadero
b) Falso
a)
b)
Verdadero
Falso
c)
Un puntero se crea para apuntar al primer carcter que pueda ser ledo dentro
en elarchivo
d)
{
@ Copyright tBM Corp. 2002
Los materiares dercurso no pueden ser reproducidos totar
o parciafmente sin elpermfso previo escrito de tBM
Exmen de Autoevaluacin
d
q
ramacin con
Asuma que se desea ingresar como entrada una cadena de caracteres (string) y
llevarlo a un aneglo lfamado char miString [so; , Cut de las siguiee
funciones ser la ms adecuada pqra este propsito?
a)
b)
c)
d)
l:
Introduccin a la
de datos con
a) fscanf
b) fprinrf
c) fread
d) fwrire
8)
a) fscanf
b) fprinrf
c) fread
d) fwrire
10)
eE
o
o
o
o
o
o
o
o
Ot
o
o
o
o
o
a
o
o
e)b
10) a
o
o
o
o
o
a
a
a
o
o
o
o
o
o
o
o
o
o
o
G,; a
ce !s:_: =-
r
.
.
-!-
o
o
o
o
o
o
Ejercicios de Laboratorio
1) Considere un archivo de texto que contiene oraciones en ef idioma espaol. Los
o
o
a
o
o
o
oi
o
oi
o.
oi
oi
ol
2)
o
o
a
a
a
o
?
e
t
?
?
e,^ C 23
@ Copyright IBM Corp. 2002
Los materiales del curso no pueden ser reproducldos total
o parcialmente sin el peniriso previo escrito de IBM
o?
o
o
o
o
o
o
o
o
o
o
o'
o
o
o
o
o
o
o
o
.
.
o
.
o
o
o
a
a
o
o
o
o
o
o
o
o
o
'. :l-umen 6:
Avanzados
rc
"
l. lntroduccin
2. Enumeraciones
Existen muchas entidades en un
sistema dado, fas cuares pueden contener
uno de un
conjunto posibfe de vafores. Por ejemplo,
la
puede tener er varor azul,
verde' amari11o, rojo y as sucesivamente.
"tiJJcoror
similarmente. la entidad flor puede
contener el valor rosa' girasol,
y
as
para caprurar estas
sucesivamente.
entidades definidas por utr*io y
sus posibfes vafores, ei rengua.le c provee
un
mtodo poderoso a travs de la enumeracin.
considere fos siguientes casostipo de dato booleano puede ser
un usuario puede pon"o" ii un
o fafso.
,no'0" ras ifiuiI piezas de vestinverdadero
jeans, pantarn,
curtivar no'""" v
una de ras sisuietes: rosa, lirios,
lirio
liilSiij:":',:il:".r"':,:ij:::",
'oio
"n
varores en un
un programa
La sintaxis es fa siguente:
enum nombre_del_enumerado
I::""*:
r'""r"#Slracin
undad3'caract@
fl0r.
ot
o
a
o
o
o
o
o
o
o
o
o
o
o
o
a
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
amacin con C
} a1ice, jessica,
};
Esto asigna 3 rosa, a 1irio, 9 a margarita, 10 narciso y - aclavel.
Es posible para dos constantes enumeradas tener el mismo vafor entero asignado. Las
variables enumeradas se pueden usar de la misma forma como las variablesLnteras en
trminos de operaciones realizadas sobre elfas y escribir la sentencias de asignacin.
Sin embargo, las constantes enumeradas no pueden ser ledas como entrada o
mostradas como salida.
,-
Elcdigo C comienza
aqu...
= anchor,.
if (miHijo == closeup)
el,se
t
t.
b
o
o
l
argc
".s;-t;;;r.
es un variable entera
.];ilrff
3#::nrra
unidadg'cara@
"rtrito
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
.--
parametron
Argumentos
Valores
argc
argv [0J
argv [1]
argv [2]
miProg
colgat.e
anchor
/* Archivo de cabecera */
#include <stdio.h>
/* La funcin main comj-enza aqw */
mai-n(int argc, char *argv[] ) {
int k;
printf (,,E1 valor de argc es ?d\n", argc);
for (k = 0; k . argc; k++)
o
o
o
o
o
o
O
o
o
nvi-+/rr^-gv
?d es ?s\n,',
k, argv[k]);
argumentos.
Iq
,t
En el caso anteror, los parmetros son asignados a los argumentos como se muestra
en la Tabla 3.1.
o
o
En este ejemplo se ilustra el uso de argc y argv en una aplicacin tpica que
copia un
archivo a otro. Sin. embargo, no se escribira h lgica
as
sentncaJ-lue hacen
1
'ealrnente fa copia) sino que simplemente se plesenta la estructura para pasar
alumentos a travs de la lnea de comandos. Hay que recalcar que en un SO como
Ur:ix. se puede decir lo siguiente:
studiante
cp archivol archivo2
se debe tener la posibitidad de leer los dos nombres
de archivo como argumentos.
siguiente fragmento de programa
hace eso:
/* Archivo de cabecera */
#include <stdio.h>
/* La funcin main inicia agu ,t/
main ( int argrc, char *argv []
) {
,/* buffers para dos archivos */
FfLE *in_fi1e, *out_fiLe,.
,/* Abre un archivo para lectura */
in_f i1e = fopen (argv If ] , ,,r,')
if (in_fite == NULL)
printf("Ocurrio un error abriendo e1 archivo\n,,);
,.
eJ.se
/* cerrar e1 archivo */
fclose (in_fi1e) ;
)
4. Macros
se us anteriormente la siguiente sentenca para
definir constantes
#define pf 3.14
ffii5,tgX,toto
Unidad3,Carac@
El
ot
o
o
o
o
o
oi
o,
o;
o;
o
o
o
o
O
o
o
o
o
o
o
o
Una vez presentadas, es importante notar las ventajas de las macros con respecto a las
funciones. Las macros proveen una mejor velocdad de ejecucin en comparacin con
las funciones. El costo adicional de las llamadas a una funcin con respecto al manejo
de la pila, la lfamada y el retomo no estn presentes en las macros. Sin embargo las
macros incrementan el tamao del codigo objeto. Cuando se usan las macros, los
programadores deben decidir entre el tamao del ejecutable y la velocidad de ejecucin.
Las referencias a macros ene tambin ciertas desventajas. Sin embargo, se necesita
entender las macros bien antes de discutir las desventajas. Vase a continuacin
algunos ejemplos del uso de las macros.
Ejemplo 3.5: Una Macro para elRraa de un Crculo
Elcdigo
o
o
o
o
o
o
I
I
G inicia aqu...
/* Archivo de cabecera */
#include <sLdio.h>
#define area de1 circulo 3.141 * radi-o * radio
oo(
area_deI_circulo
deC3l
Avanzados
I
Y
o
o
o
o
o
o
A continuacin se escribe una macro que calcula el MCD de dos enteros positivos.
La
macro
presenta
se
/* Archivo de cabecera */
#include <stdio.h>
/* Una macro mu1t.i-lnea para MCD */
#define MCD while (x l= 0 && y l= 0) \
if(xt=y)x=x*y;\
elsey=y?x;\
if (x == g respuesta = y; \
else respuesta = x,.
/* La funcin main se inicia aqui */
main O {
int x, y, respuesta,a,b;
/* La entrada x y y aqu */
do{
)whi1e(x<1 I I
x>32767)
,,) ;
do{
)whi1e(y<1 | I
[1-32 7671
");
?d", &y) ;
y>32767);
"
a=X;
h-r'. t
"-l
MCD
printf("McD de ?d y ?d es ?d :
,,
, a,b, respuesta)
Colo se puede
a
a
o
o
a
o
Gua del
Estudiante
/* Archivo de Cabecera * /
#include <stdio.h>
/* Maero multi-1lnea para MCD */
/* La funcin main inicia aqu */
main O {
int x, y, respuesta,uin,
/* entrada x y y aqti */
o
o
o
o
oot
o
o
oot
o
o
o
o
o
o
printf
o
o
o
o
");
if (x>=y) x=xZy;
elsey=yZx;
if (x == 0) respuesta = y,else respuesta = x,printf ( UMCD de ?d y ?d es ?;d : ,' , a, b, :espues:a
if(x==0&&y==0)
printf ("\n Ambos enteros ingresados son O,')
o
o
("
scanf (r?d'r,&y);
)whi1e (y<1 | I y>32767) ;
a=x;
b=y;
whil_e (x l= 0 && y != 0)
o
o
o
o
o
o
o
o
a
a
o
a
o
o
lntroduccin a la programacin mn
,.
)'
/*
La funcin
finaliza aqui * /
'eferencia por las sentencias contenidas dentro de una definicin de macro. Una
cefinicin de macro puede tambin contener argumentos encerados dentro de
3arntesis, como se muestra a continuacn:
#define MCD(var_x, var_y) while (var_x != 0 && var_y != O)
if (var_x >= var_y) var_x = var_x t var_y,. \
T
@ Copyright IBM Corp. 2002
Los materiales del qrso no pueden ser reproducidos total
o parcialmente sln el permso previo escrito de IBM
IEs:,;: _::
MCD
programas
o
r
#if
#elif
#e1se
#endif
#ifdef
#ifndef
#1ine
j4
ot
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
a
a
q
a
)o
o #undef
El preprocesador incluye los siguientes tres operadores especales:
defined
of
.##
Estas directivas pueden aparecer eh cualquer fugar. Sin embargo, se usan
generalmente comienzo de un programa, por complacin condconal del codigo. El uso
ms comn es tener una sentencia de salda amplia e'l el caso del modo dpuracin
(debug) y una salida compacta en el caso del modo release ( versn).
A continuacin se discuten las directivas del preprocesador.
#ifdef ! #endif
i f def nombre_de_la_macro
ms
sentencias
#endif
5.2.#indef y #else
. #ifndef
#ifdef.
en la estructura de control
if -else en C.
#ifndef DEBUG
/* c6dgo para proveer salida amplia */
#efse
de
#if
exp
'''otumen 6: T
@ Copyright IBM CorP.2002
Los materiales delcurso no pueden ser reproducidos total
o parcialmente sin el permiso previo escrito de IBM
, E5rUCrenie
/* sentencias (s) * /
#endif
5.4.#etif
La directiva #elif se puede usar para
verificar mltipres condiciones en secuenca
(reduce el nmero de #endif
s).
La forma generalse da a continuacin:
#if expl
/* sentencia (s) *7
#elif exp2
/* sentecias (s *7
#endif
Dispositivo de
Ratn
Digito I
Digito 0
CD ROM
Digito 3
Digito 2
;:frJfi::ti
larconclusin de la presencia de
tos dispositivos ctaramente se necesita
ta
ii
A
unidad 3'
i!' fl:,ffiff;".31j","
OR
exctusivo oe
o"
mano;;;it
catacte@
"rtrto
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
a
= 37 = 0000 0000 0010 0101
b
= 88 = 0000 0000 0101 O11O
a & b = O4 = 0000 0000 0000 0100
Ef operador de manejo de bits oR ( l) se usa para cambiar los bts.
aIb=
119
o1l_1
oo11
. x << : desplaza
los bits o
x,
desplazados.
>> z desplaza los bits en
desplazados.
x,
z posiciones a la derecha
. x
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o-
El operador unaro
o,
x
= 0010 0110 1011 0111
x << 3 = 0011 0101 1011 1000
por ejemp,o,
Jn;;"#.";;.
,;';;:,suma
a 1-bit.
Introduccin a la programacin
con C
X=X>>1r.
x =x I
Lt
set,.
return
x,.
Unidad3:
Caracte@
Volumen 6: Tpco-Avanzados 3g
Copyright tBM Corp.2002
Los materales delcurso no pueden
ser reproducidos totaf
o parcialmente sin et permiso previo
estrito de IBM
@
UJ
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
Introduccin a la
Resumen
Ahora que ha completado esta unida, usted debe ser capaz de:
o Declarar y usar las enumeraciaciones en C
. Describir los argumentos de la lnea de comandos
. Definir las macros y usarlas en los programas
. Dscutr las funcones del Preprocesador de C
o
o
o
O
o
o
o
o
o
o
o
o
o
o
o
o
a
o
o
o
o
o
O
dil tduur r t!
-::
d)
2)
a) Verdadero
b) Fatso
3)
a)
b)
4)
Fatso
a) Verdadero
b) Fatso
5)
b)
6)
7)
Fatso
b)
Fatso
a)
b)
Fatso
puntero a un buffer?
Palabra clave
Funciones
Macro
Ninguna de las anteriores
Las macros pueden definirse y utilizarse en forma
recursiva.
Verdadero
a)
b)
c)
d)
e)
a)
b) Falso
10)
a)
b)
Unidad
Falso
: CaractersticailEffi
nateGT
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
F
>
i
?
D,
E!t
.
E
E
x
tfE
,--
lntroduccin a la P
e)b
10)
o
o
o
o
o
o
o
o
o
o
a
o
O
o
o
o
o
o
o
o
o
o
a
o
o
o
o
macin
co'
'
'
;;#",
$i5T,::5:JH"argoritmos
;f;ilJo::5"ntt 'n
en c usando
"r"rqri"r"
de ras caractersticas
Unidad 4: Laborao
Los_materiaj",?"i:.?1#llF.[.:?'g":?ll*u",oostotar
fl
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
b)
'
.
c)
.
r
Nmero de palabras
Nmero de sentencias
o
o
o
o
o
o
a
o
o
o
o
o
o
o
o
o
o
o
o
o
o
ramacin con C
Ejercicios de Laboratoro
1) Escribir un programa compreto en c que haga las siguientes tareas:
a) Tomar un archivo de texto como entrada que puede contener una novela
o
o
o
o
o
Introduccin a la