Vous êtes sur la page 1sur 456

I fntroduccin a fa

Programacin con
(Cdigo det Curso Cy320)
Versin 3.0

I
I

I
I
Sumario del Curso
;(c
f

BM lT Education Services
f

Worldwide Certified Material


Informacin de la Publicacin
Esta pubfcacin ha sido producida usando Microsoft Word 20OO y Microsoft powerpoint I
2O00 para Windows.

Marcas Comerciales
IBM @ es una marca comercial registrada 'de tnternational Business Machines
Corporation.
Otras compaas, productos y nombres de servicios pueden ser marcas comerciales o
marcas de servicios de otros.

Edicin Junio 2005


La informacin contenida en este documento no ha sido sometida a ninguna prueba
formal de IBM y es distribuida bsicamente "como es" sin ninguna garnta ya sea
expresa o implcita. El uso de esta informacin o ia implementacin de cualquiera de
estas tcnicas es responsabifidad del comprador y depender de la habilidad de ste
para su evaluacin e integracin en el ambiente operacional del cliente. A pesar de que
cada tema ha sido revisado por IBM para su exactitud en una situacin especfica,'no
hay garanta de obtener el mismo resultado o uno similar a ste en otra situacin. Los
clientes que intenten adaptar estas tcnicas a sus propios ambientes lo hacen bajo su
propio riesgo.

Copyright International Business Machines Gorporation, 2005. All rights reserved.

Este documento no puede ser reproducido en su totalidad o en parte sin el previo


permiso escrito de lBM.
o
a
o uccin a la programacin con C
I Nombre def Curso
o
o
I lntroduccin a la programacin con C
o
Duracin
o
o La duracin de este curso es de 74 horas.
o
o Propsito
o Ef propsito de- este curso es ayudar al estudiante a desanollar
o habilidades para
programar con c y para este fin, e.ste cu.rso proporciona informacin
detallada acerca
o de los diferentes elementos de c. El objetvo orifo
. brindarle una slida base de los
conceptos y fa programacin con c. El curso comienza
o conceptos bsicos de computacin,
con una introduccin a los
o .desde
el concepto de algoritmos a travs de una
definicin de un programa hasta los de lenguajes oe frogramacin y compiladores.
o
A travs del curso, el estudiante se familiariza conel
o uso de importantes construcciones
de c, tales como fos diferentes tipos de la sentencia
o if, la construccin switch, la
funcin s-canf, etc' Adems, aprende el uso de construcciones
iterativas para la
O solucin de problemas y podr usar las construcciones
iterativas como la sentencia for
y la sentencia while. Tambin se introduce
o el concepto de arreglos en c, y se aprende
a usar los diferentes tipos de aneglos para resolver problemas.
o el curso, se aprende acerca de las estructuras y uniones medida que progresa
O ,i conceptos de funciones, recursin, punteros, mnejo
de
en C. Se introducen los
archivos, manejo de los
or argumentos de lnea de comandos, as como se
enumerados y tambin como usar rnacros.
estdia acerca oe ios tipo, de dato
o
o Junto con las sesiones de teora, se tienen sesiones
de laboratorios, donde se podr
I practicar todo lo 9!e se aprende en el saln
de C.
oe ctase y aRnar las habilidades en el uso
o
o Prerrequisitos
o
o Para poder entender los conceptos tratados en
este curso, se debe tener conocimiento
acerca de sistemas operativos, y conocer acerca
o es esenciar para rograr un mejor aprovechamiento
de un sistema operativo como Linux
o der curso.

o
o
oi
ol,
olr
oll
oll
-fr
-.ta
Ii I,

dlutl
.f-
I
I Copyright tBM Corp. 2005
Los materiales del crrso no puedbn ser reprcducidos
en pafte o en su totaridad sin erprevio permiso
,I
escrito o" rgla.
Introduccin a la Programacin con C ei Curso

Objetivos del Curso


Al final de este curso Ud. ser capaz de:

Obtener una visin general de los conceptos bsicos de las computadoras,


ta :s
como un programa, lenguajes de programacin, compiladores, afgoritmos,
etc
a Usar los diferentes tipos de sentencias i f en el esfrerzo de resolver probJernas
o Emplear la construccin swirch para esribir programas c.
a Escribir programas usando las funciones printf y scanf de c.
a Resolver problemas usando el concepto de arreglos.
o Emplear el concepto de estructuras en la solucin de problemas.
a Definir el tipo de dato enumeracin y usarlo en el esfuerzo de resolver
problemas.
o Definir recursin en C"
o Definir el concepto de una unin y us.arlo para resolver problemas
en c.
O Trabajar con directivas del preprocesador en C.
a Trabajar con el concepto del manejo de archivos en C.
a Manipular argumentos la lnea de comandos en los programas c.

Agenda
Cada unidad de este curso es de 2 horas de duracin.

@ Copyright tBM Corp. 2005


Los materiales delcurso no pueden ser reproducidos
en parte o en su totalidad sin el previo permiso escrito de
o
o
Sumario del Curso
o lntroduccin a la macin con C
o
o Contenido del Curso
o
o
Volumen l: Fundamentos de C
o Unidad l: Introduccin a ta programacin
o Objetivos de Aprendizaje
o 1. Introduccin
o 2. Qu son Algoritmos?
o 3. Tipos de Algoritmos
o 4. Organizacin Elemental de la Computadora
o 5. eu es un programa de Computadora?
o 6. por qu se Necesita un Lenguaje de programacin?
o 7. Compiladores
Resumen
o
Unidad 1. Examen deAutoevaluacin
o
Respuestas a ra unidad 1: Examen de Autoevaruacin
o
unidad 2: Laboratorio de rntroduccin a ra programacin
o
Objetivos de Aprendizaje
o
Eje16i6ie5 de Laboratorio
o
Unidad 3: Programacin en C _ Los primeros pasos
o
d (o Obleiivos de Aprendizaje
i inti-oduccln
o 2 La Evolucin de C
o 3 Pnmeros pasos para Escribr un programa en C
o lr,1s Acerca de Declaraciones
o 5. Ms Acerca de los Operadores
o 6 Compilacin de programas hechos en lenguaje C
o Resumen
o Unidad 3: Examen de Autoevaluacin
o Respuestas a ra unidad 3: Examen de Autoevaruacin
o Unidad 4: Construir Fundamentos Slidos en C
O Objetivos de Aprendizaje
o 1. lntroduccin
o 2. Aceptar Entradas del Usuario
o 3. ldentificadores de Variables
o 4. Palabras Claves en C
o 5. Tipos de Datos Bsicos en C
o 6. Constantes en C
o 7. Operadores Aritmticos
,o
a @ Copyright tBM Corp. 2005
Los materiales del curso no puedbn iLr reprocucidos
en parte o en su totaridad sin ef .previo permiso escritode
rBM.
*rr::e_g{re
8. Operadores Compuestos de Asignacin
9. Conversin Explcita de Tipos
10. Conversin lmplcita de Tipos
a
Resumen
Unidad 4: Examen de Autoevaluacin
Respuestas a ra unidad 4: Examen de Autoevaruacin
Unidad S: Laboratorio de programacin en C
Objetivos de Aprendizaje
Ejercicios de Laboratorio
Ejercicio Opcional

Volumen 2: Estructuras de Controt en C


Unidad l: Estructuras de Controt de Decisin
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 y Relacionales
6. Operador Temario
7 .
Las Diferentes Formas de Sentencias i f
8. La Estructura switch ... case
Resumen
Unidad 1: Examen de Autoevaluacin
Respuestas a ra unidad 1: Examen de Autoevaruacin
unidad 2: Laboratorio de Estructuras de control de
Decisin
Objetivos de Aprendizaje
Ejercicios de Laboratorio
Unidad 3: Construcciones lterativas
Objetivos de Aprendizaje
1. lntroduccin
2. Construccin lterativa white
Resumen
Unidad 3: Examen de Autoevaluacin
Respuestas a a unidad 3: Examen de Autoevaruacin
Unidad 4: Laboratorio Construcciones fterativas
Objetivos de Aprendizaje
Ejercicos de Laboratorio

@ Copyright tBM Corp. 2005


Los materiafes del curso no pueden ser reproducidos
en parte o en su totalidad sin el previo permiso escrito de lBM.
o
I
Sumario delCurso
o Introduccin a la amacin con C
a Unidad S: Ms Construccones lterativas

:f
o
Objetivos de Aprendizaje
1. Introduccin
2' Resolucin de Problemas Usando Otras Construcciones
lteratrvas
o 3. Ms acerca de la Sentencia for
O 4. Safir de un Bucle prematuramente
o 5. Uso de la Funcin ncorporada ptw 1
f

o 6. La palabra Reservada continue


a 7. La Estructura de la Sentencia do_white
o Resumen
o Unidad 5: Examen de Autoevaluacin
o Respuestas a ra undad 5: Examen de Autoevaruacin
o unidad 6: Laboratorio Ms construcciones tterativas
o Objetivos de Aprendizaje
o Ejercicios de Laboratorio

o volumen 3: Tipos de Datos Estructurados en c


o
o Unidad l: Programacin con Arregfos
o Objetivos de Aprendizaje
a
:(o
!\ rv
1. Introduccin
2. Declarar un Arreglo en C
o 3. Inicializar un Arreglo
o 4. Desarroilar y programar Argoritmos con Anegros
o 5. Cadenas de Caracteres en C
o Resumen

O Unidad 1: Examen de Autoevaluacin


Respuestas a ra unidad 1. Examen de Autoevaruacin
o
o Unidad 2: Arreglos Multidimensionales
o Objetivos de Aprendizale
o 1. Introduccin
o 2. Resorver probiemas con Anegros Bidimensionares
Resumen
O
Unidad 2: Examen de Autoevaluacin
o Respuestas a ra unidad 2: Examen de Autoevatuacin
o unidad 3: Laboratorio de programacin con Arregtos
o Objetivos de Aprendizaje
o! Ejercicios de Laboratorio

l\.f
'E
x-
x @ Copyright tBM Corp.2005
a
-
Los materiales dglarrso no puedbn ser reproducidos
en parte o en su totaridad sin el previo permiso escrito
t oe rgir.
o
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 i

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 n 4: Funciones en C


Unidad l: Funciones
Objetivos de Aprendizaje
1. Introduccin
2. programar Funciones C
3' Definicin y Uso de Funciones
en ra sorucn de probremas
4. Clases de Almacenamiento
S. Archivos de Encabezamiento
(header)
Resumen
Unidad 1: Examen de Autoevaluacin
spuestas a la Unidad 1:Examen
de Autoevafuacin
Unidad 2: Laboratorio de Funciones
Objetivos de Aprendizaje
Ejercicios de Laboratorio
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
Unidad 4: Laboratorio de Recursin
Objetivos de Aprendizaje
Ejercicios de Laboratorio

@ Copyright tBM Corp. 2O0S


Los materiales del curso no pueOen
v
en parte o en su totardad sin ser reproducidos
erjrvio p"-*'ro escrito de rBM.
I
a Sumario delCurso
fntroduccin a la programacin con C
o
I
o
o
I Volumen 5: punteros en
Unidad 1: Punteros
C

o Objetivos de Aprendizaje
o l.Introduccin
I 2. Fundamentos de punteros .
I 3. uso de punteros para pasar Argumentos a ras Funciones
o Resumen
o Unidad 1:Examen de Autoevaluacin
o Respuestas a ra unidad 1: Examen de Autoevaruacin
o Unidad 2: Laboratorio de punteros
o Objetivos de Aprendizaje
a Ejercicios de Laboratorio
o Unidad 3: Punteros Avanzados
o Objetivos de Aprendizaje
o 1. Introduccin
o 2. Aritmtica de Direcciones
o 3. Puntero a puntero
o 4. Arreglo de punteros
o /0 5. Puntero a Estructura
o 6. Puntero a una Funcin
o Resumen
o Unidad 3:Examen de Autoevaluacin
a Respuestas a ra unidad 3:Examen de Autoevaruacin
o unidad 4: Laboratorio de punteros Avanzados
o Objetivos de Aprendizaje
a Ejercicios de Laboratono
o
o Vof umen O: Tpicos Avanzados en C
o Unidad 1: Manejo de Archivos en C
o
Objetivos de Aprendizaje
Or
1. Introduccin.
oi
2. Uso de Archivos de Datos en C
d 3. Archivos de Texto y Binarios
q 4. Manipular Archivos de Datos sin Formatos
e Resumen
dx Unidad 1: Examen de Autoevaluacin
ot-
.-l !

^tE [
t- 7
@ Copyright tBM Corp. 2OOs
-'tr Los materiales del curso no pueObnr reproducidos
.T
T' en parte o en su totafidad sin e[ previo penniso
escrft J" rafrr.
I'

o
o dei Curso
Respuestas a fa unidad 1: Examen
de Autoevafuacin
Unidad 2: Laboratorio de Manejo de
Archivos en G
Objetivos de Aprendizaje
Ejercicios de Laboratorio
Unidad 3: Garacterscas Adicionafes
en G
Objetivos de Aprendizaje
1. Introduccin
2. Enumeraciones
3. Argumentos de ra Lnea de comandos para
ra funcin main0
4. Directivas def preprocesador
5. Operadores de Manejo de Bits
Resumen
Unidad 3: Examen de Autoevaluacin
Respuestas a ra unidad 3: Examen
de Autoevaruacin
unidad 4: Laboratorio de caractersticas
Adiciones de c
Objetivos de Aprendizaje
Ejercicios de Laboratorio

@ Copyright tBM Corp. 2005


Los materiales deiulso no puedn ser.reproducdos
en parte o en su totaridad sin previo permiso
er
"r"rito-o-JrgM.
oi
a Sumario del Curso
Introduccin a la
a ramacin con C

o0
O
Descripcin de Unidades
o (Nota: La duracin de cada Unidad
es de 2 horas)
Or
ol I
Volumen l: Fundamentos de C
ol Unidad l: Introduccin a la programacin
ol
ol Esta unidad proporciona una introduccl
como algoritmos, organizacin elemental ?
q computacin a travs de conceptos tales
ol ::ilffii"?:'
de ta corputadora y qu es un programa
Tambin se discute acerca de tos renguaes de
oe'piogr;acin y et rot der
o1
ol
I

unidad 2: Laboratorio de Introduccin a ra programacion


o1 Esta unidad est diseada para reforzar
la idea de argoritmos presentada en la unidad
ol 1 fntroduccin a la compuiacin. Los ejercicio.-J"
que se escriban argoritmos simpres raboratorio presentados requieren
oj pra iesorv"ipioor",'as especficos.

ol unidad 3: programacin en c
- Los primeros pasos
ol En la primera parte, se discute la evolucin
del lengule de programacin c y el mtodo
para escribir a partir de algoritmos programas
o/ programa en C tambin se establece. en c. r-os erment.'o."os de un
./
Unidad 4: Construir Fundamentos Slidos
o/ en C
Algunos de los elementos bsicos que
van a construir un fundamento sfido en
rl 0
:i( discuten tales co.mo. variables, expresiones c se
artmticas, sentencias de asignacin y
tipos de datos primitivos. tambien, se da
una introduccin de cmo aceptar entradas
ol del usuario a travs de la funcin scanf.
oi Unidad S: Laboratorio de programacin
en C
ol Esta unidad trata acerca de la solucin
de problemas a travs programas bsicos
o los conceptos aprendidos en las unidades
anteriormente,
en c
.l ?',f:li: especiatmente ta

o
o Vof ume n 2: Estructuras de Controf en C
q Unidad 1: Estructuras de Control de Decisin
? En esta unidad' el concepto fundamental que
se cubre es la necesidad de verificar
condiciones v ra toma de decisin
basada u; ;;ndiJ;;;
facilidades de c que se estudian
aqu prr,
i#i"s;ffi," bremas. Las
imptementacin
I
que involucran el control de decisin "yria'ia if, sentencias de algoritmos
ion l"'."nt"n""
? operadores relacionales, operadores
fgicor y
if
anidadas,
relacionales. Se introduce la
? construccin switch de C. "*prron"r
? unidad 2: Laboratorio de Estructuras de
contror de Decisin
? se proveen ejercicios que invotucran estructuras
? 5ffiti::':o bsicas de controt de
_^
K(lL
I,U
:'\-
@ Copyright fBM Com. 2005
It Los materiates dglixrso no pueon ser
reproctucidos
? en parte o en su totatidad sin er prwio permso
t) escrtt" lgM.

o
Introduccin a la macin con C
Sumano del Curso
Unidad 3: Construccones tterativas
Ef tema centraf de esta unidad
es el rol de la iteracin en la solucin
de problemas y
::*,,"ffi""#?'i::J"J-* !n
ta
arsoritmos. se oiscute v-r.-a-,"n unidad
".," ra

unidad 4: Laboratorio de construccones


rterativas
se proporciona problemas simples. que
C que necesitan iteraciones uJanOo requieren la implementacin de programas en
la construccn
- whit_e, esto para
conceptoslos conceptos aprendidos en reforzar los
h U;;3.
Unidad S: Ms Construcciones fterativas
El tema central de' esta unidad reso]ver problemas con estructuras
anidadas' Se ifustran la sentencia ^es iterativas
discute y usa la construccin
for de c y ras sentencias break y continue.
do_whi1e. se
unidad 6: Laboratorio de Ms construcciones
fterativas
Ef nfasis de esta unidad es
en la impfementacin de.programas
resolver probfemas especficos compretos en c para
usando las estiuciuras terativas
de la unidad 5.
volumen 3: Tipos de Datos Estructurados
en c
Unidad l: programar con Arregtos
se discute en esta unidad la tcnica
de desanolrar arg_oritmos
Er nfasis r constituve ra programacinque emprean arregros
;1,'ilil:,il3l3i. en c con arresros
Unidad 2: Arreglos Muttidimensionales
se ilustra el uso de arreglos multidim_ensionales
varios ejempfos. En los elemplos (arreglos bidimensionales) a
r ,""n travs de
problemas con matrices.
Unidad 3: Laboratorio de Arreglos

m;ggJ:t:#: lT,$:?:1;;;]e
nrooramacin con arresros en c 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.
Unidad 5: Laboratorio de Estructuras
Basado en las bases. conceptuafes
desanolfadas en la unidad 4, esta unidad provee
ejercicios de faboratorio que ieil;;;"; escribir programas con estructuras.

@ Copyright tBM Corp. 2005 10


Los materiates detcl9 n9 pr"On
en parte o en su totalidad sin el previo "ur reproducidos
f"rmiso escrito de lBM.
I
o
o ogramacn con C
o Volume n 4: Funciones
o1 en C
Unidad l: Funciones
o
o Esta unidad- introduce la naturale-za
probfemas' se discuten y ef uso de ras funciones en
arjus.runc'ioner-in"oipor"das fa sorucin de
o ejemplos se ilustra cmo de .-A travs de varios
d;fi;;r runcones o"r']r""f"ro_ y a
o usarros en ra sorucin de
o i#:5#::rJf,:'"#,#",i::,;!:*"::lf m;if p""nio,o"-c-i",","o,"o-I"n",.
o Unidad 2: Laboratorio de Funciones
o
que requieran escribir
o ,t;iT:'i:"t[J;,i"?T:1['J;rlaboratorio runciones especricas
o Unidad 3: Recursin
o Esta unidad discute fa naturale
za general de la recursin y su
o rof en la solucin de
o 5i?l'33?;"1,.?t3:|,il;n"a;f:[i:3'5f"T'"XJi,,"o. r"nen,-.u'ru,t,." er mtoJo
o Unidad 4: Laboratorio de Recursin
o Esta unidad provee ejercicios
j.:^_,1?::qtorios que requieren escribir funciones
recursivas en c y usarras para
o rsorver probremas simpres.
o Volumen S: punteros en
o C
a'a Unidad l: punteros
o Esta unidad introdu.ce los
conceptos fundamentares detrs
o fos punteros en c. frustra
;-;;'d;
ros puntero, un J-p""o
de ta natura reza yer uso de
especiarmente pasar arregfos de argumentos a funciones
o a funciones como una referencia.
o Unidad 2: Laboratorio de punteros
o A travs der uso d,ufg: conceptos
tT,g:r:"jares de punteros
o u,l, aprendidos en ra Unidad
o
I :H :'J'
" "
:#:',
ff,J*J ff
ff" trSIll j:: *:,; u, oo o d e pa s a r rs
u m e nto s a

o Unidad 3: punteros Avanzados


o se discuten afgunas de fas facilidades
operacione. d" avanzadas der uso de ros punteros
o punteros ?:l!eros, o"nn, v usar arregro de punteros, puntero
a estructuras y paso de fucione.
como
a punteros,
o .orJJffientos a otras funciones.
Unidad 4: Laboratorio de punteros
o Avanzados
o A travs del uso de
.fos conceptos
unidad 3' fos elercicios fundamentafes de fo-s punteros
-l"oootorios aprendidos en ra
o argumentos a funciones
o" p"-"i- refo.zar ,l de pasar
o
como punters y usarros dentro
de tas mismas. "l
o
o
fll
J
o @ Copyright tBM Corp.2005 11
Los materales def a1s9 no p*Onr,reproducidos
O en parte o en su totafidad sin
eirevlo-imiso escrito de-rBM
o
o
Introduccin a fa ramacin con C
Sumario dei Curso
Vof umen 6: Tpicos Avanzados
en C
Unidad l: Manejo de Archivos
en C
Esta unidad detalfa los mtodos para
secundario para leer y escribir usar ros dispositivos de atmacenamiento
J*J" io"^p.girslramoen se oscut"
t ;;";; en c. eJpm""rente. se discuten fos
definir archivos oe dtos ,tooo para
"l archivos de
i?:"":,;^i',Tilffi ll5J,:?il?gff
Unidad 2: Laboratorio de Manejo"?:y"#;;;''lio,",i",o";;;;iil.queayudan
de Archvos en C
En esta unidad se proporciona
unos pocos probremas reracionados
archivos de datos para reforzar
la bse conceptuaf aprendida ar manejo de
en ra unidad 1.
Unidad 3: Caractersticas Adicionales
de C
Esta unidad es una cofeccin de
tpicos como el tipo de dato
manejar argumentos de fa tnea enumerado, cmo
adems unas pocas directivas
dL comandos y el uso de las macros.
l pro.esa.dor y sus usos. son dscuten
unidad 4: Laboratorio de caractersticas
Adicionafes de c
Esta- unidad provee un solo problema
que imprica er uso de numerosos
recnrcas y facifidades de c aprendidos conceptos,
para obtener un programa que
trabaia.

?1

@ Copyright IBM Corp. 2005


Los materiales dei riro no pu"o5n-"L,
en parte o en su totaldad sin reproducidos
er prevop*i"o escrito de rBM.
o
o
o

.'a
o

O
ntroduccin a la
f

o Programacin en C
(Cdigo del Curso: Cy32O)
ol Versin 3.0)
Ol
o
ol Gua del Estudiante
o
o
oj
o
oj
oi
oi
o1
oi
o1
oi
),1 r'>.
:'((E
ri '"- Fundamentos de C
o
o
o
o
o
.{
a
q

BM fT Education Services
f

Worldwide Certified Material


Informacin de la publicacin
producida utilizando Microsoft word
rt8i!::j",ff;?:#: 2000 y Microsoft powerpoini
(

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. o

Marcas comerciares de otras compaas


son mostradas a contnuacin
Windows Microsoft Corporation
Red Hat Linux Red Hat

Edicin Junio 2005

:ijlt:T":jg? :"T"nid:.,"n este documento no ha s,:: s:^.::i:a


,;;-;t';" ;;-; -.." -. "^' : :'-'i a
==
Et uso de esta infornracin o la i_.
::f::?tcnicas
estas ?.implcita. -==_u_.=;:^-
es responsabiridad der cornprador y oeoe.os:a = ,-__
para su evatuacin e integracin en r5
"ro,!'" "oirl-.;r;;:=.: ::-:,-
cada tema ha sido revisado por rBM"ipara
su exactrtud en una S.,,2^.
I
propo
nra^i^
riesgo.
-:^^-^
;.,;;;i;1.

copyright International Business Machines corporation,


2005. All rights reserved.
ser reproducido en su totaridad o en parte
;:n*t":ffX.".:iJ,il:de sin er previo
fnstrucciones especiales para la impresin
de este curso.
No deben removerse.las pginas en bla.nco que
puedan aparecer en el final de cada
unidad y entre dos unidades.-Estas han
sido insertdas intencionalmente.
o
o
Gua def Estudiante
o lntroduccin a la programacin
o .lf :
o Contenido
o Unidad i: Introduccin a la programacin
o Objetivos de Aprendizaje
o 1. Introduccin 1

o 2. eu son Algoritmos? 2

o 3. Tipos de Algoritmos 2

o 4. Organizacin Elementaf de la Computadora 4

o
5. eu es un programa de Computadora? 5

o
6 por qu se Necesita un Lenguaje de programacin?
7. Compifadores x
o Resumen o
o Unidad 1: Examen de Autoevafuacin 10
o Respuestas a ra unidad l: 11
Examen de Autoevaruacin
o unidad 2: Laboratorio de Introduccin IJ
a fa programacin
o Objetivos de Aprendizaje l5
o Ejercicios de Laboratorio 15
o Unidad 3: programacin en
C Los primeros pasos
16
O Objetivos de Aprendizaje 17
o 1. lntroduccin
.11
IT

ot 2. La Evofucin de C 18
o @ 3. prmeros pasos 18
para
Escribr programa en
o' 4. Ms Acerca de Declaraciones un C

ol 5. Ms Acerca de fos Operadores 3

oi 6. Compifacin de programas Hechos en 24


/ Lenguaje C
Resumen 28
oi 24
Unidad 3: Examen de Autoevatuacin
Respuestas a fa Unidad l
3: Examen de Autoevafuacin
Unidad 4: Construir Fundamentos 34
Slidos en C
Objetivos de Aprendizaje 35
1. Introduccin 36
2. Aceptar Entradas del Usuario 36
3. ldentificadores de Variables 36
4. palabras Claves
en C
41
5. Tipos de Datos Bsicos
en C
42
6. Constantes en C 43
7. OperadoresAritmticos 44
8. Operadores Compuestos
de Asignacin
47
9. Conversin Expficita de Tipos 48
10. Conversin lmplcita de Tipos 49
50

@ Copyright tBM Corp.


Los materiales delcurso no pueden 2004
sr reproOucidos en parte
o en su totalidad sin el previo permis'escrito
deIBM
Introguccin a la prograrnacin con C

Resumen
I

Unidad 4: Examen de Autoevaluacin


Respuestas a ra unidad 4: Examen de Autoevaruacin
Unidad 5: Laboratorio de programacin en C
AA
G
c5
Objetivos de Aprendizaje
Ejercicios de Laboratorio c,A
Ejercicios Opcional
56

.l

@ Copyright IBM Corp. 2005


Los materiares dercurso no pueden ser reproducidos
en parte
o en su totalidad sin el previo permiso escrito de lBM.
lo
lo Gua del Estudlante
lo lntroduccin a la programacin con C
lo
ol
o
Unidad 1: f ntroduccin a ta
o
Programacin
o Objetivos de Aprend izaje
o
o Al final de esta unidad, Ud. ser capaz
de:.
ol . Definir el trmino algoritmo.
o . Discutir los diferentes tipos de algoritmos.
O
. Describir fa organizacin de una computadora.
' Definir ra necesidad de construir programas
Ol para una computadora.
o ' Discutir ros diferentes nveres de ros renguajes
de programacin.
Ol
. Definir qu es un compilador y describir
su rol.
oi
ol
r1
ol
o/
q
!'o
t
q
t
?
o
+
t?
?
I
p
I
p
lr
b
l:
p
,I-
vt Votumen@
tnr
Unidadt:lnt@
@ popyright fBM Com. 2005
tr Los materiares dercurs r pueen
si rlprooucioos en parte
o en su totalidad sin el previo permisoes*ito
ft de.f BM
I
fntroduccin a la

l. lntroduccin
Los problemas a. resofver por
medio de una computadora pueden (
simpfes a los ms compleios. variaroesde los n::s
En su nivel ms simpfe, fos problemas
pueden ser tan senciflos computaciona,es
como encontrar el promedio
calcular el inters simple generado de un conjunto de nmeros 3
por alguna a"uo"- por otra parte
compfejos corno encontrar una pueden ser tar
solucion un cnunto de
simultneas' la multipticacn ecuaciones oiferenciares
de una matrizo contar ra frecuencia
texto' A un nivel mucho ms especializado, de una parabra en un
como reconocer las huellas
rtorput"dora puede resorver probremas
digitales o la vo,zJ" ,n inooiduo,
juego de guena o jugar simurar stuaciones en un
un partldo de ajedrez de alta
caridad.
una computadora es una herramienta
poderosa que es capaz de
simurtneamente. sin embargo, hacer varias tareas
es sro una ,a!rin" y no posee
pensar' solamente puede implementar ra capacidad de
programador' De all que programador instrucciones que le ha dado el usuario o
el no puede darle a ra compttadora
que sean ambiguas por naturaleza. instruccjones
Todar ";;l;l"ion", deben
sin ambigedades. De aquse fi"n defrnirJas y
origina er concepto de argor:itmo. ""i
2. Que son Atgoritmos?
un matemtco persa lfamado Abu
Jafar Mohammed lbn Musa Al
este mtodo en.el siglo ll DC y Khwarizmi desarroll
demostr su efec{ividad. cuando
conocieron su mtodo, se referan ros franceses
a ste como ef mtodo de Al
Khwarizmio como un
la palabra fue transformadaa ro que
lfr";il"Posteriormente, se conoce como un
A continuacin se discuten algunos
ejemplos de algoritmos.
.
1.1 Ejemplos de Afgoritmos
y entender los algoritmos y
su naturarezase presentan los siguientes
;ffiffItrender
Ejempfo l.l
Dados tres nmeros diferentes
A, B, c obtener er mayor de eros:
Paso l: Obtener los tres nmeros
A, B, C.
Paso 2: si A > B es cierto,
er mayor es A. En caso contrario
Paso 3: Si er mayor encontrado er mayor es B.
en er paso 2 es menor que c entonces
ahora es c' En caso contrario er mayor
et r"yortnido en el paso 2
se conserva.
Fin de Ejempto l.l

Unidad r,r"Oor""
Volumen t: funGmEntos Oe Cl
@ Copyright fBM Corp. 2005
Los materiales del curso no pueden s, reproOucidos
o en su totardad sin er previo permiso en parte
escrito oe rgl-"-
I
o
Gua del Estudiante
o Introduccin a la programacin
6ei 6.
a Ejempto 1.2
o
o
I Suponga que se tienen que determinar
entero no negativo es primo
si un nmero entero dado es pnmo
o no. Un
si es divisible solamente entre y
o para determinar si un nmero
n es primo, se oeoe
I s mismo. por lo tanto,
los nmeros entre 1 y n. Ef frobar la divisibifidad de n para todos
o algoritmo para esto es como sigue:
a Paso l: Obtener ef entero n
corr.to entrada.
o Paso ur";o:::' ste es divisible poi t" variabre j,
O
't .si
ra cuaf armacena varores entre

1ffiT;;i,ffi:,"l Jrffi j
Paso t,
< n_1), entonces er entero n'o S primo,
o
Fin de Ejempfo 1.2
O
Ejempto 1.3
o
o suponga que se tienen que encontrar
las races de la ecuacin de segundo
o ax2 + bx * c : o, donde ros coeficientes .,
grado
;t ; r"" varores de entrada.
o Ef algoritmo para resolver ste problema
es como sigue.
o Paso l: obtener como entrada fos
varores de ros coeficientes, a,
o Paso 2: Calcular discriminante b, y c.
= b2 _ 4ac
o Paso 3: Sier discriminante <
paso 4: Si eldiscriminante
0, ras races son imaginarias. parar.
o = 0, las races son iguales,
raizj. : raiz2 _ _b / 2a- pafar
J@ Paso S: De otro modo, las races
o son:
o - + sqr.t (discriminante ) / 2a y
a -D - sqrt(drscriminante) / 2a
o Fin de Ejempto 1.3
o Ejempto 1.4
a Asuma que se debe contar ef
nmero de ocurrencias de tas
o documento' El proceso para resolver vocales en el texto de un
este problema es bastante sencillo.
o carcter a la vez en el texto y
verifique si es una vocaf. si fo
Tome un
es, unton"", ,antenga un
contador de esa vocal en
a iarticufar, en caso contrario salte ese carcter.
contine
o [1iill". :,* :x'x:l. ;;' ;; ; r" re vi s a d o E, a,s o rit m o p a ra
:1' : :il?,ffj *,.'
o Paso 1: lnicializaf contA, contE.
"

o contr, conto y contU a cero.


Paso 2: Leer ef primer
I carcter deltexto.
Paso 3: Repetir ros siguientes pasos
hasta tegar af finar det texto.
o si er carcter = A a entonces incrementar
a en uo contA.
t si er carcter = E e entonces incrementar
en uDo conrE.
a sier carcter = | i entonces incrementar
en uno contr.
'l
{y votumen@
Unidad l
p
b . :
ros
@ Copyright fBM Corp. 20OS
materiafes dercurso no pueoen
.,
aL.
si prooucioos en parte
o en su totafidad sin elprevio.permis
T escrito de IBM
t'o
Si el carder = O o entonces incrementar
en uo conto.
Si ef carcter = U u entonces incrementar
en uno contu.
Caso contrario saltar el carcter C
Leer el siguiente carcter.
Paso 4: Mostrar el contenido d
contA, contE, cont- r _
contO y contU.
Fin del Ejempto 1.4
Los ejemplos presentados ilustran
que los afgoriimos involucran cmputos
verificacin por igualdad o diferencia d; dos cantidades, flevando
aritmticos,
condicionalmente un conjunto
de.pasos, y la repeticin de fa ejecucon
a cabo
en una condicin. A cntnuacn se oe un conjunto
i:::firff:ados aprendern tos diferentes tipos

3. Tipos de Atgoritmos
En la vida real se encuentran diferentes
tipos de algoritmos. una clasificacin
ayuoa a comprender la naturaleza simple
subyacente oe tos afgoritmos y los
problemas para los que son tipos de
ms adecuados. Esta cfasificacin tambin
escoger un mtodo apropiado para permite
evaluar la valide z y laeficiencia del
atgoritmo.
En generar, ros afgoritmos se crasifican
en tres tipos:
. Algoritmos Finitos Determinsticos.
. Algoritmos Finitos no Determinsticos.
. Algoritmoslnfinitos.
A continuacin se expfica brevemente
cada uno de ros tipos de aigoritmos
3.1 Afgoritmos Finitos Determinsticos
Estos son algoritmos que terminan
en una cantidad de tiempo finta. pueden
tiempo largo en terminar la tarea tomar un
asignada, pero terminarn definitivamente
tiempo finito' Estos algoritmos
siempre dan un resuftado que depende
en un
entrada' En otras pafabras, nicamente de la
pr"u determinar el resultado exacto
""
entradas' La mayora de algoritmos s se conocen ras
que se encuentran en la vida realpertenecen
categora' Encontrar tas races de a esta
una ecuacin cuadrtica, determinar todos
nmeros primos entre I y I mifln los
y encontrar la inversa de una matriz
todos ejemplos de algoritmos cuadrada son
finitos beterminsticos.
3.2 Algoritmos Finitos No Determinsticos
Estos son algoritmos que terminan
en una cantidad finita de
o entradas, ef resultado del alsoritmotiempo. sin embargo, para
puede no ser nico y
;n":|jf,i:o3"ot
considere un algoritmo para generar
un nmero aleatorio- Existe un mtodo
probado llamado el generadr matemtico
congruente multiplicativo, el cual es
forma xt = (aX'-' ) mod m donde una funcin de la
a y m son constantes que siguen ciertas regras.
El
Unidad r'a"Oor",o
Volumen i: Fundarnentos de C 4
@ Copyright tBM Corp. 2005
Los materiares der curso no pueden
sr reproducidos en parte
o en su totafidad sin el previo permiso
escrito de lBM.

o
t Guia del Estudiante
lntroduccin a la programacin con C
o
ol
o
algoritmo en este caso es no determinstico ya que
al ejecutar el algoritmo el resultado
casi nunca es el mismo. Sin embargo, este sirve para
se supone que genera nmeros aleatorios.
el propsito del algoritmo, ya que

O 3.3 Afgoritmoslnfinitos
o Los algoritmos infinitos son aquetlos que no terminan,
ya sea porque una condicin de
a termnacn no fue especificada o porque la condicin
no fue satisfecha para ef conjunto
o de datos de entradas dado. Usualmente ios algoritmos
infinitos son aquellos donde las
condiciones de terminacn no estn especificaas
a apropadamente.
o sin embargo, tambin existen algoritmos infinitos tiles.
La tarea de monitorear ta
o temperatura en un reactor nuclear es un algoritmo
infinito, claramente, esta tarea es
continua y debe seguir mientras el reactor est
o ejecutndose a menos que haya un estmuro externo
trabajando. La tarea se mantiene
que to detenga.
o
otro ejemplo de un algoritmo infinto es fa tarea de enumerar
o del nmero pi. se sabe que elmtodo para carcur"r
todos dgitos decimales
o un ,n nmero
infinito de dgitos en su parte no entera. Este"inJr!;;;;rli
es especialmente tl para los
o matemticos.
o A continuacin se discute que es una computadora.
o
o 4. orga nizacin Efemental de la computadora
o una computadora es un dispositivo electrnico que
ayuda a la resolucin de problemas
a ', computacionales a travs de un algortmo, describiendo
t:t3
sin ambigedades los pasos
involucrados' Los computadores se usan para
una gran variedad de propsitos y se
cfasifican en diferentes categoras. analgicor,
o digit"fur, personales, servidores,
supercomputadoras. etc.
o un sistema de computadora moderno consiste de un sistema
o procesadores, memoras y dispositivos interconectado de
de entrada / safida. A continuacin se discute
O una organizacin elemental de una computador,
denominado sr'sfem a simple orientado
o a bus.
o La undad central de Procesamiento (cPU)
es el componente vitaf de la computadora.
o su funcin es ejecutar las instrucciones almacenad,
la memoria principal: las
o obtiene, las examina y ejecuta una clespus
de la otra. "n
o La cPU consiste de varias partes importantes.
Tiene una unidad de control que es
o responsable de traer las instrucciones de la
memoria principal y determinar el tipo de
o instruccin' La unidad Aritmtico Lgica (ALU)
", unas de
antmticas y lgicas. La cPU posee tambin
t"p"= realizar operaciones
o almacenamiento temporal de alta velocidad
pocas localidades de
llamados 'registros'. Los registros se usan
para almacenar resultados intermedios y tos
datos necesarios para llevar a cabo las
? instrucciones.
o
5
Volumen l: funarnetoGE Unidad t:ltroOucco aGFroqra,r:rc -:
$o
It @ Copyright fBM Corp. 2005
Los materiales def curs n-o pueden ser iepiooucoos
? o en su totalidad sin'el previo permiso escrfto de
en parte
o lBM.

o
Introduccin a la programacin con C Gufa del Estudiante

Toda la comunicacin entre estas entidades se lleva a cabo a travs


del bus del
sistema' Un bus es un conjunto de cables paralelos a travs
del cual todas las seales y
los datos se transmiten entre varias entidades. Esto se muestra
en la Figur a 1.1.

Unidad
Central de Oispositrvo
Procesamiento De
Salida

Bus delSistema

Figura 1.i: Bus de la Computadora


Una computadora requiere de dos entradas para funcionar. un
algoritmo, un conjunto de
instrucciones que especifican las tareas a realizar, y los datos que
necesita el algoritmo.
El algoritmo y los datos requeridos por ste s almacenan en la
memoria principaljunto
con los resultados generados. La palabra 'principal o primaria" se
usa para referirse a la
memoria reconocida como voltil, el dispositivo pierde el contenido
cuando se apaga,
distinguindola de los otros dispositivos de almacenamiento, los que permiten
almacenar instrucciones y datos de forma semi-permanente.
Se discuten a continuacin otros dispositivos de almacenamiento conocidos
como
dispositivosde almacenamiento secundario.
Los dispositivos de almacenamiento secundarios pueden almacenar instrucciones
decir, algoritmos y datos por un largo perodo de tiempo. De cierta
es
forma, se les puede
0
considerar tambin como dispositivos de entrada / salida. Algunos
dispositivos de
almacenamiento secundarios ms usados comnmente son los
discos duros, discos
flexibles, CD ROMs, DVDs y cintas.
La memoria primara es relativamente ms costosa y por lo tanto
limitada en tamao.
Aunque la palabra, 'memoria" evoca imgenes de "cpacidad de
recuerdo", ,,capacidad
de autoconciencia", 'ser creativon, en este contexto memoria esencialmente
significa
almacenamiento.
Los resultados obtenidos al ejecutar una tarea en una computadora
estn disponibles al I
usuario a travs de dispositivos de salida. Un dispositivo de salida
ayuda a leer los I
datos resultados de la memoria principal. Los dispositivos de salida que pueden
conectarse a una computadora son de diferentes formas y capacidades.
dispositivos de salida ms utilizados son: el VDU (Visual Display
Algunos de los tl
Unit), impresoras, l
plotters y dispositivos de sonido.
tl

t
Unidad 2:Laboratorio de IntroduccOn aGFrogramacion
Volumen 1: Fundamentos de C 6

@ Copyright IBM Corp. 2005


Los materiales dercurso no pueden ser reproducidos en parte
o en su totalidad sin el previo permiso escrito de lBM.
o
I Gua del Estudiante
o lntroduccin a la
o se presenta una visin
a
o
I flff:::'"cin muy simpte de cmo un sistema de
computador

' Los datos e instrucciones para llevar a cabo una tarea deben estar disponibles al
o computador' Estos son provistos ya
por fos dispositivos dl entraoa,
o "".
los ingresa, o por fas uidades'de
armac"n"r"nto secundarios
cuando
;iH:il" como
o
o
' La cPU enva una a la
""i:l^ para entidad. -apropiada, dispositivo de entrada o
secundario, que estn disponibre r"f inrirr"ciones y datos
o :'ina"J::liento
o o La entidad' dispositivo de entrada o almacenamiento
travs del bus a la memoria principal. secundario, los enva a
o
o ' h*:#.entonces lee fas instrucciones en una secuencia bien definida de la
o ' La cPU ejecuta las instrucciones usando la ALU y los registros, y enva los
o resultados a la memoria principal
a travs J"iorr.
o ' Los resuftados que estn disponibfes
dispositivos de safida va el b.us.
en la memoria principal se envan
a los
o
o ' una seal a la memora principal para que
5: Sy":t"n to enve at dispositivo
o
o 5. Que es un programa de Computadora?
o Un programa de computador"
de un algoritmo en un tenguaje
o apropado para usar en una computdora.
"t-f1,.1:presentacin
Por lo tanto, consiste de un conjunto
o instrucciones que estn bien definidas de
y sin ambigedades. por ejemplo,
para dividir un nmero entre un programa
o otro nmero consist de una secuencia
que le indican a fa computadora que de instrucciones
o nmeros como entrada, la computadora
realice la divisin. cuando se ingresan
dos
lleva a cabo las instruccones con
programa y obtiene el resultado. la ayuda del

Los programas de computadora se desarrollan


para resolver problemas especficos.
Estos programas tambin se les denomina
programas de computadora'
software. Existen muchos tipos de
Algunos de ellos se escriben para ayudar
funcionamento de un sistema a controrar el
de computadora y optimizar el uso de sus
estos se les denomina programas recursos. A
del sistem y Lr'personas que desarrollan
de programas se fes ilama programadores ste tipo
de sistem.
Existen programas que llevan a
cabo la solucin de un probtema en particular
conjunto de problemas relacionados. o un
se les denominan programas de aplicacin. rJna
gran mayora de programas de computadora
programas de aplicacin van estn dentro de esta ategora. Los
desde programas simples que calculan
aquelfos que resuefven un sistema el factorial hasta
complejo de ecuciones diferenciales
jugar un juego de ajedrez. o que pueden

de computadoras se escriben en un tenguaje


de programacin
"t",::,f#:ramas
Votumen@ Unidad

@ Copyright tBM Corp. 2005


Los materiales detcurso no pueden
sr re-p'roucioos en parte
o en su totalidad sin ef previo permiso
escrito de IBM:
6. Por gu se Necesita un Lenguaje
de programaci n?
un afgoritmo debe poder ser tfevado
a una computadora. un oronl"r, rearizaesto (
travs de un conjunto de instrucciones. a
Por fo tanto, fas instrutcJnes en el programa
deben ser claras, bien definidas y
sin ambigedad. para poder ltevar
las instrucciones,
lensuaje que permita una comunicacin
;r1;3:.::::." ctara, bien definida y sin

Los lenguajes naturales como el Ingls


son muy
semntica y tienden a ser try .otpticados'p"r" ricos en sintaxis (gramtica) y
aprendices y usuarios' Ms an, fos ros desanolradores y para ros
fenguajes naturares tenden a ser
debido al uso de "lenguaje figurativo'y-"rica'. por muy ambiguos
ejempfo ra sentencia "arguien
no suiere decr literalmente que arsuien
:,'nt[,o"ilffiI"' estir p"r"; si no que
Los computadores son esencialmente
dispositivos bsicos gue pueden
solamente tareas simples realizar
tales como adicin, sustraccin, multiplicacin,
La manera como las instrucciones se divisin, etc.
comunica al computador, debe ser por
muy simple' Para permitir una comunicacin fo tanto
bien definida, el lenguaje debe ser
en su sintaxis y semntica. Ef renguaje limitado
no debe ser ambiguo. Es por eso, que
necesita un lenguaje de programacin se
semntica restringida y de natuialeza
de computadora con una sintaxis simple,
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.
6.1.1 Lenguaje de Mquina 0
En ef nvel bsico' una computadora
' y 1' necesita trabajarcon nmeros binarios,
Las instrucciones que se escriben es decir, 0
en forma binaria se dicen que estn
de mquina' El lenguaie de mquina en lenguaje
constituy un conjunto de instrucciones
implantadas en la computadora
en forma binaria (una cadena de 0,s y .1,s).
Los circuitos
son capaces de rlevar a cabo estas
;f::::i:rfl"" ffilputadora instrucciones en

6.1.2 Lenguaje Ensamblador


claramente, er uso de fenguaje de
mquina es bueno para fos computadores,
tedioso para los humanos. Los humanos pero
trabajan ms fcitmente con smbolos.
lugar de pensar en 1000101001010100 En
como una instruccin de adicn, la
usar ef smbolo 'add'' similarmente, clave es
'mul" para la multiplicacin, se pueden usar smboros como ,,sub' para
restar,
etc. un lenguaje basado en un smbolo
para cada instruccin de lenguaje o un nemotcnico
de mquina se llama tenguaje ensamblador.
emoargo, escribir programas usando sin
instruccion", trr rimpres como add,
move, etc. tambin puede ser
muy tedioso.
sub, mul,

Unidad 2:Laboratoro O
Volumen 1: Fundamentos de C
B
@Copyrght tBM Corp. 2005
Los materiales delcurso no pueden
?
ser reproducidos en parte
o en su totalidad sin el previo permiso
escrito de lBM.
O
a
o cin a la programacin con C
o 6.1.3 Lenguajes de Atto Nivel
Los lenguaies de alto nivef son necesarios para poder
: manera ms simple en comparacin con los lenguajes
expresar las instrucciones de una
o de mquina y ensamblador, Los
programas de computadoras se escriben
usualmente en un lenguaje de afto nivel cuyo
o conjunto de instrucciones es ms compatible con
los lenguajes natlrales. La sintaxis y
a semntica del lenguaje de alto nivel deben ser
tal que contribuyan a especificar
instrucciones bien definidas que no sean anibiguas.
o
o' se han desarrollado un gran nmero de lenguales de
alto nivel. Literalmente son cientos
o de estos lenguajes. Algunos de ellos son muy populares,
mientras que otros no. La
mayora de los lenguaies de alto nvel son lenguajes
o Pascal' FORTRAN. c++. Java. etc. Estos pueoei
de propsito general como c,
o ,rrru para escribir programas para
una amplia varieoaC de aplicaciones.
o Los lenguajes de a/to nlvel penenecen a una
de las dos siguientes categoras:
O
o 6.1.4 Lenguaje de programacin Orientado a Objetos
o El software orrentaoc a objetos es acrca.de
objetos. un objeto es un "dispositivo,,, que
recibe y envia mensales Los objetos realmente
o instrucciones de computador. y los datos,
contienen un cdigo, una secuencia de
q
i
la informacin sobr io, qru opera las
Instrucclones Generalnrente. el cdigo y los
embargc en lcs lenguajes de programacin orientados se mantienen separados. sin
datos
o
o estn fusionaics en un obleto. El,l" los lenguaes a objetos, el cdigo y los datos
ob.letos que g3zan de popuJaridad estn
oe programacin orientados a
C++ y.lua]--
3o 6.1.5 Lenguaje procedimentaf
o Es un leng;a.ie donde el programador da.a la
computadora una secuencia de pasos
o segurccs unc ce otro para oblener la safida
d"r""i". Los lenguajes procedimentales
mas populares incluyen Basic, pascal C.
o v
o 7. Compifadores
o una computadcra solamente puede ejecutar instrucciones
t programa se na escrito
en lenguaje mquina. si un
en c, las instrucciones no podrn ser llevadas
t por los circuitos electrnicos de la computadora.
ienguale c deben ser traducidas en una
a cabo fcilmente
Las instrucciones escritas en el
a secuencia de nstrucciones en el lenguaje
mquina de la computadora. La entidad que
o.{ realiza esta traduccin de un fenguaje de
alto nivel a lenguaje mquina se llama compitador.
o
te
Un compilador es un programa de computadora
escrrto en un lenguaje de alto nivel como
y
que toma como entrada un programa
C lo traduce a un conjunto de instrucciones
;* en el lenguaje de mquina de la computadora.
O

f
?
u
l#ffi81 -:>t@->
rl
Compiladtr

Figura 1.2. programa Convertido a Lenguaje


Progama
Eeculabte
de Mquina.
Mqr
I
Volumenr@
I
E

Unidadt:lt@
l
.'- @ Copyright fBM Corp. 2005
Los materiales dercuqo no pueden sr'reproducidos
en parte
- '-
,v o en su totafidad sin elprevio permiso escrito
de lBM.
lntroduccin a la programacin con C
Guia del Estudrarie

Resumen
Ahora que ha completada esta unidad, Ud. debe ser capaz
de:
. Definir el trmino algoritmo.
. Discutir los diferentes tipos de algoritmos.
.
.
Describir la organizacin. de una computadora.
Definir la necesidad de escribir programas en una computadora.
i
o Discutir los diferentes niveles de los lenguajes de programacin. ilfr
. Definir qu es un compilador y describir su rol.
:i
;

a.

.l
I

unroao ;:Laboratorio de Introduccin a la programacin


Volumen 1: Fundamentos de C 10
.)
@ Copyright tBM Corp. 2005 -
Los matenales dercurso nb pueden sr reproducidos en parte
o en su totalidad sin el previo permiso escrito de lBM.
o
o
Gua del Estudiante
o Introduccin a la
o
o0 Unidad l: Examen de Autoevatuacin
o 1) Cul de las siguientes es la funcin principal de la computadora?
o a) Resolver problemas no computacionales.
b) Resolver problemas que son imposibles para los humanos de resolver.
o c) Resolver una variedad de probremas computacionares.
o d) Todas las anteriores.
o
o 2) Cul de fos siguienteses un proceso paso a paso bien-definido para resolver
problema, enunciado de una manera clara y no un
o ambigua?
o a) Mtodo.
b) Algoritmo.
o c) Tecnologa.
o d) Programa.
o
o 3) Un algoritmo desarrollado para encontrar todos los nmeros primos que existen
a entre 1 y 1 milln es un ejemplo de:
o a) Un algoritmo infinito.
b) Un algoritmo finito determinstico.
o c) Un algoritmo no determinstico.
o d) Ambas (b) y (c)
o
),A
_i (3
4) Un algoritmo usado en un sistema de computadora para
monitorear los signos
O'.- vitales de un paciente en la Unidad de Cuidados lntensivos
(como presin
sangunea y pulso) es un ejemplo de:
o a) Un algoritmo infinito.
O b) Un algoritmo finito, determinstico.
o c) Un algoritmo no determinstico.
o d) Ambos (b) y (c)
o
6\
o cules de las siguientes entidades usualmente contene ra cpu?
o a) La memoria primaria, el bus y la Unidad de Control.
o b) Solamente la Unidad Aritmtico Lgica (ALU).
c) La Unidad de Controt y la ALU.
o d) La Unidad de Control, ALU y algunos registros.
o
O o/ Por qu a fa memoria principal de una computadora
se le llama almacenamiento
o vof til?

a a) Pierde los contenidos almacenados cuando se apaga la fuente de poder.


o b) Retiene los contenidos afmacenados an despus e apagar ta fuente poder.
c) Es sumamente sensible a fluctuaciones de fuente de poder etctrico. de
o d) Ninguna de las anteriores.
o
o_
0
O
Volumen l: funOametosE Unidadl:lntroOu@
@ Copyright tBM Corp. 2005
a Los materiales dercurbo no pueden'r reproducidos
en parte
o en su ttalidad sin elprevio permiso escrito de lBM.
O
a
Introduccn a la programacin
con C
Gufa delEstudiante
7) Un disco duro puede ser clasificado
como
a) Un dispositivo solamente de entrada.
b) Un dispositivo sofamente de salida.
c) Ambos, como dispositivo de entrada y de sfida.
d) Ninguno de los anteriores.
8) cul de los siguientes es la entidad en un sistema de
computadora que permite ra
entre ta CpU, ta ,"',oii"'-'prir"ri" y
tos dispositivos de
$[ttr3r",,,::,
a) El almacenamiento secundaro.
b) La Unidad de Control.
c) Ef bus del sistema.
d) Ambos (b) y (c).

9) cules de los siguientes son algunas de las caractersticas


lenguaje de programacin de computadoras? principales de un
a) No son ambiguos.
b) Sintaxis y semntica restringida.
c) Sintaxis y semntica no restringida.
d) Ambos (a) y (b).
10) Qu es un compilador?
a) un dispositivo, de hardware que traduce un programa
lenguaje de alto nivel a ,n de computadora escrito en
lenguaje mquina.
b) un programa que traduce "n un programa de computadora escrito
de alto nivel a lenguaje de mquina. en un lenguaje
0
c) un ser humano que acta como intermediario
computadora y la comptadora mismo. entre el usuario de una
d) un mtodo de describir el lenguaje de programacin
usuarios potenciales. de computadora a los

Unidad 2:Laboratorio Oe tnt@ Volumen 1: Fundamehtos Oe C lZ


@ Copyrght IBM Corp. 2005
Los rnateriales delcurso no pueden ser reproducidos
v
o en su totalidad sin el previo permiso en parte
escrito de lBM.
Gua del Estudiante
Introduccin a la programacin con C

Respuestas a la Unidad i: Exarnen de Autoevatuacin


1)c
2)b
3)b
4)a -
s)d
6)a
7)c
8)c
e)d
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

Pgina dejada intencionalmente


en blanco...

Unidad 2:Laboratorio
Volumen i: Fundamentos de C 14
@ Copyrght tBM Corp. 2005
Los materiales def curso no pueden
v
ser reproducidos en parte
o en su totalidad sin elprevio permiso
escrito
de lBM.
oI
a':
Gua del Estudiante
o ramacin con C
o
-L,
t-
(,
unida d 2: Laboratorio de f ntroduccin a
o fa Programacin
o
o Objetivos de Aprend izaje
o
Af final de esta unidad, Ud. ser capaz de:
o
o . Resolver problemas sistemticamente.
o . Escribir algoritmos para una tarea dada.
. Aplicar diferentes afgoritmos a distintos tipos de problemas
o esfuerzos en su resolucin.
que requieran
o . Generar un aigoritmo para una subtarea repetitiva.
o
o
o
o
o
o
o
o
j(,
t-,. .\

I
o
o
o
c
o
I
a
o
a
a
o
o
o
o
o
a
(t-l
I' Volumen l: Fundamentos OeC Unidadt:lntroducc@
o @ Copyright tBM Corp. 2005
o Los materiales detcurso no pueden sr reprooucidos
o en su totafidad sin el previo peimiso escrito
en partb
o de lBM.

o
Guia del Estudante
Ejercicios
trJercfcios de Laboratorio
1) Expficar paso a paso' ef proceso
para preparar caf
en una cafetera erctrica
2) Escribi*n
"'g:1lT-o gu.e jnoieue a.un granjero cmo transportar un robo,
6
I#,i"iJi:il'i:n,i"*";i':#1,ff ff,fi;:: fts una cabra
en el oote, y sin deiar a, ,obo
3)
ff:il,ff,.i:x1""x1;iln:,;ffif':i:',4;,il:x:" sus edades, ra edad promed
oy
4)
ff#;ff:i,t'" para senellT:::r^:!,* 1 y,2ooo'sue sean parndromes
que son isuafes s
oe orechal iJrl"lqueffos sJ""n o"lJir",;il? o"ru.h, o
"ot
por ejempro, ros nmeros
121, 4334 y 151151 son todos parndromes.

Unidad r'r"Oo
Volumenl:@
,^
los
@
materiales delcu
Copyright
tBM Corp. 2005 v
oensutot"r0"'!?J,"rij|,3"J"itr j:Tlj.:ili"",,E[rl"n"
lr!
ro,
lo Gua def Estudiante
Introduccin a la proqramacin con C
lo
lo
ol Unidad 3: Programacin en C
o
o
Los Primeros pasos
o Objetivos de Aprend izaje
o
Alfinal de esta unidad, Ud. ser capaz
o de:
o . Describir la evolucin de C.
' Discutir cmo escribir algoritmos en C para resolver problemas
o simples.
' Explcar los dferentes componentes de un programa simpre
o 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
io
fo
ItL Volumen 1: Fundamentos erc
TU Unidad 3:Progra

fo @ Copyright tBM Corp. 2005


fo Los materiates derburso no pueden sr reproducidos
en parte
I o en su totalidad sin el previo permiso escrito de lBM.
o
o
Introduccin a la ramacin con C
Gua del Estuo s^:.
f. lntroduccin
Esta unidad presenta una introduccin
programacin c' Es muy a ra programacin usando er renguaje
importante desarrollar slioas ce
que son las bases para telncas-iu"orogr"racrn, ya
convertirse en buenos ingenieros
programacin contribuye de software. Er renguaje de
programacin y proporciona
a ese v. que tiene una buena estructura de
.propti"
los fundamentos
como c++ y Java pueden aprenderse- ,otr" los cuales otros renguajes tares
Es tambin un fenguaje que
en ra comunidad de programadores, se usa ampriamente
adems de ser er renguaje
construyen los sistemas oprativos con er que se
ms popufares.
2. La Evolucin de C
Ef lenguaie de programacin
Dennis
c fue diseado y desarroilado por
Brian Kemighan y
Ritchie en los Laboratorios
Bell Researci en er ano rc72.Fue
momento cuando se desarroilaban riberado en un
cientos oe reuales de programacin.
A menudo' estos lenguajes de programacin
conjunto especfico de aplicaciones. se desarrollaban para su uso en
El lenguaje ronrnnru un
ejemplo' fue desarrollado para rronma'inerurt"tion) por
aplicaciones cientficas
coBol (common Business orieted v'0" ""ru era. El fenguaje
Lenguage) fue desarrofrado para
comerciales y de negocios apricaciones
Tambin se reafLarn'esfuezos
de programacin que sirvieran para JeJarroilar renguajes
como lenguajes de propsito genera
rango de aplicaciones' uno
de los primeroi
I para un amprio
el desarrollo del lenguaje ALGOL concertados en esta direccin
"rrr"os
(ALGOrithmic r-anguage). ALGOL nunca
fue
popular fuera del ambiente rfeg a ser
acadmico y";;; ;;";;"riado
Programacin c.ombinado (cPL)
y nacerlo tif sin embargo, fue desarrollado para reoucir
ef lenguaje cpl resuftante tuvo
abstracto. Ef Lenguaje de
ra abstraccin de ALGoL i,l
demasiados problemas,
eia dircir o"
.o'f,',1:::ni,-:':ff:istlas' "pr"no"r v
resurtaba dircir desarrorar
Martin Richards' en la Universidad
de cambridge, intent reducir
lenguaje cpl a soro unas pocaiy fas caractersticas der
tires. ri; fr;';"mado BcpL
result ser demasiado simple (Basic cpl). pero
y sin'mucho poder. Ar mismo
AT&T trabaiaba en una simplificacin momento Ken Thomson en
permaneci sin uso hasta que de cpl y oesarroil el renguaje B. Tambin
Dennis Ritchie
y desarroll C, con sus propias caractersticas oe B y BCpL,
"oroin-r"s
adiciones al lenguaje.
Hoy en da' Ia especificacin
de las caractersticas de c, su
proporciona el American sintaxis y semntica ras
National standards rnsttute
medio con estructuras de alto itus,l c es un fenguaje de nivel
nivel comparabres intfuso
Pascaf y FoRTRAN' y caracterisicas 1e mejores) a tas que dispone
que toman ventaja de las de bajo niver que ayudan a escribir programas
caraciersticas a nivel de mquina.

Unidad a,O
Volument:f@
@ Copyright fBM Corp.
Los materiales delcurso no pueden 2005 v
ser reproOucidos en parte
o en su totalidad sin elprevio permis
escrito de tBM.
o 't
o
Gua del Estudiante
o Introduccin a la programacin ccn C
o 3. Primeros pasos para Escribir un programa
a 0 en c
Los pasos bsicos para escribir un programa
o de computadora en c son los siguientes:
Paso l: Leer y entender el contexto del problema
o gue requiere una solucin
mediante un programa de computadora.
o Paso 2: Desarroilar un argoritmo para resorver probrema.
o ef
Paso 3: Verificar el algoritmo para su ralidez.
o Paso 4: Convertir el algoritmo a fenguaje C
o Paso s: probar y verifcar er programa c para
su vafidez.
o Nota: El paso 4 requiere el conocimiento de las
estructuras de un programa en c, es
o decr, los elementos der renguaje, su sintaxis y
semnticas.
o Para poder desarrollar un programa en lenguaje
o denominado archivo fuente con extensin ".c"
c, ro primero es crear un archivo
n cuatquier editor de texto conocido.
O 3.1 Estructura de un programa:
o cuando se escribe el programa se recomienda usar
o 1 f]amadas a bibfiotecas
er siguiente formato:

o 2 dec-Iaracin de funcicnes (prototipos de funciones)


o 3 decl-aracin de varj-ai:,es giobales
o 4 mainOi
o 5 dec,laracin cle.._a:iabl-es focales
6 senl_encias
o (0 1j
o 8 definicrr Ce i::.:_::.:-.
o Cualquier aplicacin hecha en lenguaie C debe
constar de una funcin principal
o denominada ri,ai:-. que ser la primeia en
ser llamada. En la estructura anterior elmain
o comprende desde la linea 4 a la lnea 7.
o 3.2 Variables y Sentencias:
O La manera ms simple o'e almacenar los datos
es en una entidad llamada variable.
o Las variables son nombres que se les dan a
las focalidades
donde un elemento de dato puede almacenarse. puede en la memoria principal
localidades de memoria como un conjunlo
ser til pensar en estas
de casillas que pueden contener algn dato.
Todas estas casillas se deben poder referenciar
de forma nica. por tanto, a stas se
les dan etiquetas simblicas que se denominan
nombres de variables. un nombre de
una variable solamente se refiere a una localidad
en fa menioria donde algn dato est
almacenado.
La sintaxis del lenguaje de programacin
c impone atgunas reglas en la construccin de
los nombres de variabres. Estoi se ristan
a contnuacin:
' *"t.l":?t:t3,:
carGler " "
variables siempre deben empezar con una retra,
esto incruve
ye al
;.::l:,TbT, es buena
variabfes que empiecenion letras
pirrJ;;;."r[r*
.prdicab" ol
mn,:rrii f:;;
Volumen faFundamenGrdeE
Unidad 3:Program

@ Copyright tBM Com. 2005


Los materiares det crs n-o pueoen ci reproducidos
e parte
o en su totalidad sin el preVio permiso escrto
de IBM'
lntroduccin a la programacin
con C
Gufa del Estudiae
' un nombre de variable puede estar formado-
arfabeto y/o dgitos de 0 af g y/o
por una secuencia de fetras def
carctei "_" (subrayado).
er
' El estndar ANSI c establece que fa
variable puede ser de cuarqu.ier
como por ejemplo abu jafar_mbh"rr"_ior_i"r"[xn""*rr,= rongitrrd,
fos primeros 31 caracter so ,, pero sdo
s"m""i"";
' No se permiten comas niespacios
en un nombre de variable.
smbofos especiafes, otro
h;?$s:;: sue no sea er carcrer de subrayado, en un

La manera de informa r a la computadora


que ,, ,n" variable es a travs de una
sentencia de declaracin' Las locafidades ", pueden
de memoria armacenar enteros tal
como 15' nmeros reafes por ejemplo
34.24 | ."r".t"r"s por ejempro ras
alfabeto' Las sentencias de declaracin retras def
ayudan adefinir ro que se puede
o" variable' En el caso, de querer almacenar un entero, armacenar en
i[:tot" se decrara como
irrt num;

en c que indica se est haciendo una


ffjnlT|.." ;:;?::n:,:J:ilada decraracin.

El smbolo de ; se usa como separador


de sentencias, tambin conocido como
delmitador de sentencia. si existen
mrtiples sentencias, se le debe informar
compirador donde termina una al
sentencia y empie za otra.
se ha creado una varable lfamada num.
un varor se armacena en num a travs
de
una resra simpre para rormar ra sentencia
::i:J":":n:::::Z:::, de asisnacin
<nombre de l_a variab]-e>
= <expresin>
El smbolo = s l operador de
asignacin. La entidad a la izquierda
nombre de variabre, tar del : es cualquer
r.,t. La entidad a fa derecha der : es cuarquier
expresin aritmtica - As "oro
que para almacenar por ejemplo
sentencia de la siguiente manera: 15 en nLm, se escribe ra
n'' : _:
Y
Li
Ejemplo 3.r
Extraer fos Dgitos Individuares
de un Entero de Dos Dgitos
I
r
considere un entero positivo de dos .l
dgitos num. Los dgitos individuales il:
deben extraer y mostrar como resultado. del nmero se ei
$
Para lograr entender la naturaleza
del.afgoritmo requerido para la solucn
problema' considere el entero positivo de este
oe os dgitos 25. se sabe que er dgito
izquierda es 2 y el dgito de fa ierecha de fa
es s. cimo sL extraen ?, 2s dividido
da el cociente 2' se observa entonces entre 10
que para cualquier entero positivo
la divisin entre '10 esulta en el dgito de dos dgitos,
de la izquieiJa. El resto de fa misma
entonces conesponde al dgito de divisin
fa-derecha. cuando se divide 25
entre 10, el residuo

Unidad S:e
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.
o
o Gua del Estudiante
o Introduccin a la
o es 5' Por fo tanto, para cualquier nmero entero positvo
de dos dgitos, el residuo de
o 0 una divisin entre 10 da el dgito de la derecha.
o Por lo tanto el algortmo puede escrbirse como
sigue:
O Paso l: Sea num elentero positivo de dos dgitos.
o Paso 2: El dgito ms a la izquierda de num
es elcociente de la divisin entre 10.
o Paso 3: El dgto ms a la derecha de :rum es
el residuo de la divisin entre 10.
o Paso .f: Mostrar er dgito ms a ra izquierda y
er dgito ms a ra derecha.
Ol Ahora se presenta el algoritmo escrito de una forma
compacta, orientado a un cierto
o valor para num:
o Paso l: num = 25.
o' Paso 2: Dgito ms a la izguierda num / 10.
=
o Paso 3: Dgto ms a ra derecha residuo de
= num / i0.
!i Paso 4: Mostrar er dgito ms a ra.izquierda y
er dgito ms
a ra derecha.
oi A continuacin se estructura elconjunto de sentencias
en c para ef algoritmo anterior.
ot El cdigo C comienza aqu...
ol I /* Se incluye 1a J-ibrera predefinida (stdio-h) +/
oi 2 #inc_lude <stdio. h>
al 3 /* La funcj-n principal- se inicia aqui */
4 mainO{
ol 5 int num,-
)r ? 6 int digito_izguiefdo,-
o 7 int dlgito_derecho,.
o 8 / * La varia-b1e se inici-ali-za con er valor
25 * /
9 num = 25;
o 10 /* EI dgito rzquierdo se extrae */
o ii org:to__izquie:cio : nuli. / _A;
o -2 ,'- E! dgito derecho se extrae _/
o -: :-:---._l=::::r: ::.._:. - r..i:. _-,-10,.
,- ,.- Los digitos son enviados a la sal-i_d.a
o estndar +/
::::::: ";r cr qtac :-zg.r:e:ic es ?d\n,,, digito_izqu'erdo),.
-5
o ::-:^:: ("a1 c:qric cierecio es ?d\n,,, digito
:: derecho) ;
o
o El cdigo C finaliza aqu...
o Fin de Ejemplo 3.1
o
Felicitacionesl, se ha desanollado el primer programa en
o importante de lecciones por aprender a partir
c. Existe un nmero
a oe ios primeros pasos que se han dado
aqu' Para resolver un problema, se debe desarrollar
primero un algortmo. se puede
o escribir el algoritmo de manera que empfee
trminos y sintaxs similares a c
o Posteriormente se tiene que verifcar si el algoritmo
est correcto o no. A continuacin
o se convierte el algoritmo a un programa en -c.
Este programa consste de una funcin
a
u, fil
l\lu
Volumen l: punOamiffi 3:ProgramacOnffi
o @ Gopyright tBM Corp.2OOs

o Los materiares dercurso nb pueden'sr reproducidos


o en su totalidad sin el previo permiso eiscrfto
en parte
o de IBM'.

o
main gue se inicia llevando a cabo tas
instrucciones dentro de elfa. En la funcin
las sentencias en C estn encerrada main,
entre tfaves {}.
En el programa existen dos partes
diferentes: una parte de declaracin y
ejecutabfe' En elejemplo la parte una parte
decfarativa consta o!|", siguientes sentencias:
int num,.
int digito_izguierdo,.
int digito_derecho;
Esto indica que tres variabres enteras
,amoas nlun, digito_izguerdo
digito-derecho se usan en este programa. y
almacenamiento
La comput"o"r"-..;"espacios oe
en la memoria principal para estas
variables cuando fa funcin main
a trabajar' se puede pensar que ellas
son corno casiilas en
;iliJ," fa memoria
num digito_i zquierdo digito derecho

La otra parte de la funcin main es la parte ejecutable. Esta consiste de las


";::'":'r;"r'?:
f *ni""'",
COmPUtadorA cicnr rfa on
* ", h; l, ; # ffi ;";"' :'' ", . l'3'J', n'3
":f :::i^ :" ^ :: i
p
::fi 3l'?':'i :^"11 i :"
num
;ffi;:
"1,'"i'" "il
25
En este punto, ras^rocafidades digito_izguierdo
vafores en etos- si se trata de
y digito derecho no tienen f,
mostrar er contenid, d"
en esta etapa, la computadora mostrar r;;il;;#"
la funcin
argn varor sin sgnificado para este
:;T::
La ejecucin de la siguiente sentencia
es como sigue:
digito_izquierdo : num ,/10;
Esto asigna 25/ic, que es z alavariable diqito _r zquierdo .
u,, Cr g: to_i zquierdo digito derecho

La ejecucin de la siguiente sentencia


es como sigue:
digito_cie:echo : num _ (num/10) *10,.
Esto asigna el residuo : a la variable
digito derecho.
num digrto_i zguierdo digito_derecho
5
2
5

Unidad 3:prog
Volumen l: funOmEtos oe C zZ
@ Copyright tBM Corp. 2OO5
Los materiafes del curso no pueden
ser reproducidos en parte
o en su totafidad sin elprevio permiso
escrito de lBM.
oH
aii
O
f Gua del Estudiante
Introduccin a la p
o s:_lni_f ("El- dig:-to izguierdo es ?d\n,,, digrto_izquierdo) ,.

o 0
i,
1|| Muestra el siguiente mensaje.
O' EJ- digito izquierdo es
oj Qu sucede con la siguiente sentencia?
2

oi printf ("Ef digrito derecho es td\n,,, di-gito derecho)


ol ,.

ol Muestra el mensaje
I

oJ El digito derecho es 5
ot Todas fas sentencias en la funcin main se han ejecutado y
el programa termina.
o Ahora se puede mejorar el programa recin escrito si se
aprende un poco ms sobre C
ol y sus capacidades' Para comenzar se aprender
un poco ms acerca de las sentencias
o de declaracin.

o 4. Ms Acerca de Declaraciones
o Cuando se declaran mltiples variables enteras, no se
o necesita declararlas
separadamente. se puede combinar su declaracin en una sola sentencia como se
o muestra a continuacin:
o _..: :::::./ c:!r- r!c_izquierdo, digito_derecho;
q En otras palabras, se pueden declarar variables en
una sola sentencia con la lista de
a variables separadas por comas. El int especifica que
una variable entera se est
o,,, declarando se asigna espacio de almacenamiento de manera que
O'*0 puedan almacenar alf i. En estas variables se puede
los enteros se
asignar cualquier entero vlido. Es
vlido asignar --:, -2-:: 1,* -901 a una variabre
o decrarad corT.ro inr.
o Tratar cje asignar un no entero, por ejemplo 3- 141
o er carctere, se asignar 3 65
(cdigo ASCII para el carcter a) a la variable.
o pueden definir otros tipos de datos, como
A parte de las variables enreras se
a una variable de nmero real o una variable de
prnio lcrante tal como se muestra a continuacin:
o _---;a; pi, saf ario,.
o
Esta deciaracin crea dos variables de punto flotante que
o reales cie la forma 3.747 o -0. o0o2s6. Los datos
pueden almacenar nmeros
o variable entera se fe asigna un valor real.
son truncados cuando a una
o Pero qu sucede si se hace lo siguiente?
pt = 2;
O
En ste caso, la constante entera z serconvertida
o a la forma flotante 2.0 y asignada a
la variable pi. Es de saber que esta locatidad asignada
o un l" rurJ; una casilla
ms grande que lo requerido para una variable entera. ",
O
se han explicado los tipos de datos int
y float. El lenguaje c provee otro tipo de
o -
dato llamado char Este permite almacenar caracteres
constantes como las letras del
o alfabeto A- z 'Z,losdgitos 0 - gyalgunos caracteresespeciales
O z, &, etc. Las variables char se declaran de la siguiente forma:
como G, $, #,
o
Volumen 1: FundametosE
@ Unidad 3:Programa
o @ Copyright tBM Corp. 2005
a Los materiales detcuqo no puden sr reproducidos
o en su totalidad sin el previo permiso escrlto de
en larte
o lBM.

o
Introduccin a la

cnar vocal, consonante;


Las siguientes asignaciones
son vldas.
voca]: ,a,; (
consonante = 'et;
. vocaf : consonante,.
Nota: Las constantes caracteres estn
dentro de comif{as smples. se
e (una vocal) a la variable consonante. !e asign la fetra
Esto dado que no
alguno en el nombre de la variable, "" "orr""io existe signficado
ms que su tipo. solamente acta
etiqueta para poder referenciar
a una locafidad de memora. sin embargo,como una
programador debe escoger
un nombre de variabfe que;;;r;; un buen
,';,-o=offio para er cual
adecuado tramar r" u"r"ire
;:,fi:JiJil'::';r*:"es " sananci" v-r"roar alr fas
5. Ms Acerca de fos Operadores
Hay que reordar que para haflar
el residuo de fa divisin de num entre
siguiente expresin: 10, se us la
num - (num ,210)* 10
y no se utiliz la siguiente expresin:
num _ (num,/10)fO

;';il3:n:i::ffilrXff::: operador debe ser una parte expricita de ra expresn No


Los parntesis o en fa expresin fr-- rr
aritmtica anterior indica que la
encuentra en su interior se evaluar
primero. c ofrece un amprio
expresin que se r))
operadores para hacer la programacin conjunto de
ms sencilra. por ejempro er operador
' se denota a travs del smbol g y mduro
ste se usa paia ootener er residuo
hacer
de una divisin
uso de ste operador mduro directamente
::tffir::#:de tar como se muestra

num ? 10
se lee num mduro 10, y
devuerve er residuo de ra divisin
10 'Er primer programa en c presentado entera de num entre
puede ser ahora reescrito basado
discusin anterior acerca de declaraciones en la
y operadores.
El cdigo C comienza aqu...
1 #include <stdio.h>
2 mainO i
3 /* Declaracin de varialles en una
4 so]-a lnea *,/
int num, digito_izquierdo, digito_derecho;
5 /* La variable n.m se inici-ait=.'"".-";';:.
6 num : 25; de 2s */
'7 /* El dgito j_zquierdo se extrae */
8 digito_izqurerdo = num / :aO;
Unidad S:ero
votumenl@
@ Copyright tBM Corp. 2005
Los materiafes del curso no pueden
v
sr reproducidos en parte
o en su totalidad sin el previo permiso
escrito de lBM.
o
o
Guia dei Estudiante
o f ntroduccin a Ia pr

o i * Er digi-to derecho se extrae utir-i-zando e1


operador mdu ro
I
* /
o 3.g,ac_ie:echo -. :t lri : i0,.
-| E1 dg'i-to izq'ierdo se muestra en la salida
o -t ') "* estandar ./
Drr-ntr ("r:1 drgito izquierdo es td\n", ciigi.rc
^-l
*!

o r? /* Er dgito rzguierdo) ,.
derecho se muestra en Ia sari. estndar *,/
o !4 },rlrrL.i_
^-i*-r (/rrrl -1 orgrto derecho es ?C\n',, digito derecnol
..
_5
o I

a Ef cdigo C termina aqu...


o Nota: Los comentarios se escriben entre
/* y */,y ef compiladorde.C los ignora.
o Los comentarios se usan para mejo rar la legibilidad
del programa. Es una buena
o prctica escrbr comentarios para explicar programa,
el ro cual tambin sirve como una
o documentacin del programa. sin embargo,
evite usar comentarios triviales tales como.
o ,/* Asigrnar 25 a nu-n. -,/
o num : 25;
.
/* Aarlir 1 a num */
o num : nUm + 1;
o Estos comentarios no aaden valor. A continuacin
o se presentan otros ejemplos.
o Nota: Es mportante resaltar que todo mensaje dirigido
a la salida estndar en un
cdigo en c trabaja con el alfabeto ingls lo que
o vocales acentuadas, fa letra ,', entre otros.
imprica que no se pueden incluir
o Ejemplo 3.2: Invertir ros Dgitos de un Entero de
o Dos Dgitos
o 0 Asuma que se desea tomar como entrada un
que lo componen y mostrar el resultado. Por
entero de dos dgitos, invertir los dgitos
o ejemplo, si la entrada es gg, entonces el
resultado ser 68. Er algoritmo para este probfema
o es muy senciilo.
Paso l: lngresar un nmero entero de dos dgitos
c Paso 2: Ertraer el oiqiro_izquierdo.
num.
o Paso 3: Extraer el oigito cieecno.
o Paso 4: usando el concepto de peso posicional
o de enteros decimales, se puede
formar num_.invertido como sigue:
o num_invertido = digito_derecho *
o 1O + digito rzquierdo:
Paso 5: Mostrar el valor de num_inverti-do.
o
o Esto es precisamente un algoritmo que necesita
ser convertido a C, tambin usa
algunos pasos ya discutidos anteriormente. Er programa
o continuacin:
en c se muestra a
o
o
o
o
o
o^ Volumen l: fuE-entos de C
de Unidad 3:Prog

a @ Copyright tBM Corp. 2005


o Los materiales delcurso no pueden sr reproducidos
o en su totalidad sin el previo permso escrito
en parte
o de lBM.

o
lntroduccin alaP Gula del Estudiante

El cdigo C comienza aqu...


r /* Este progr:-a invierte los dgritos de un nmero de d.os d-qitos
usando eJ- operador mdulo *,/
2 #incl-ude <stdio. h>
3 nain O {
4 /* Sentencias de Dec].aracin */
5 int num, digito_izguierdo, digito_derecho. num invertico,.
6 /* Sentencias de Asigmacin */
1 num = 89,.
8 digito_izquierdo : num / J_O;
9 ve-su.lO: nUm 810;
^.i ^i
+^ i^-^^L

10 /* EI n,oero con 1os d.gitos invertidos es calculado *,/


11 num_invertido : digito_derecho-10 - drgito_izquierdo;
I2 printf ( "El dato original es %d\n", num) ,.

13 printf ("E1 dato invertido es %d\n",:t:;:, i:verticio) ;


L4 I

El cdigo C finaliza aqu...


Fin de Ejemplo 3.2
Ejemplo 3.3: lnvertir un Nmero Entero de Tres Dgitos
El problema consiste en nvertir los dgitos de un nmero entero positivo de tres dgitos
dado y mostrar ef resultado. Lo primero es tomar algunos ejemplos para vsualizar si se
puede desarrollar una lgca del algoritmo.
Considere el nmero 134. Para exfraer el dgito ms a la izquierda, se divide el nmero

entre 100. Esto es,134/100 y se obtiene 1 que es el dgito ms a la izquierda. El residuo


q,
de la divisin entre 100 es 34. Estos dos dgitos 3 y 4 son los dos dgitos ms a Ia
derecha- En el ejemplo anterior se aprendi a extraer los dgitos individuales de un
nmero entero de dos dgitos. Una vez que se tienen todos los dgitos individuales sean
digito-izquierdo, digrito_medio y diqito_derecho, se puede invertir el
nmero usando los pesos posicinales.
El algoritmo que resuelve el probrema se muestra a continuacin:
Paso l: Dado como entrada el nmero de tres dgitos num.
Paso 2: El dgito ms a la izquierda es digiro_i_zguierdo num/100. :
Paso 3: 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
+ digito_izquierdo.
Paso 7: Mostrar num.
Paso 8: Mostrar num invertido.

Unidad S:erog
Volumen '1: Fundamentos de C 26 \\
O Copyright tBM Corp. 20OS
v
Los materiales del curso nb pueden sr reproducidos
en parte
o en su totalidad sin el previo permiso escrito
de fBM.
of
a Gua del Estudiante Introduccin a la programacin con C
o -._._
o Siempre que un programa tenga una sentencia larga, la lnea se puede dividir
oi
o
mltiples lneas. Cada lnea de la sentencia multilinea se termina con el carcter
en
de
diagonal inversa (\). Esta declaracin o expresin larga escrita en mltiples lneas.
terminada con un diagonal inversa, se trata como una sentencia compuesta.
o Esta
facilidad permite escribir un programa bien formateado. El programa en C se muestra
a
o continuacin:
o El cdigo de C comienza aqu ...
o 1 #include <stdio. h>
a 2 mainO{
o 3 int nurn, dtg-ito_rzoui erdc, Crcito_riedlo,.
4 int digrto_de:echo, temp, nun inver:rcic,.
o 5 num : 734;
o 6 /* E1 dgito ms a 1a izquierda se extrae */
o 7 digito_izqurerdo : nun / 100,.
o 8 /* Los dos dgrtos ms a Ia derecha se extraen * /
o 9 temp : num ? iOO;
I0 /* E1 dgito del medio se extrae */
o 11 dig'ito_medjo - -renp,/ iC,.
o 72 /* EI dgito ms a la derecha se extrae * /
o 13 digito_de::echo : i_enp ?. ,C;
o 14 /* El- nmero inverti-do se calcula. se usa eI carcter de diagronal
o inversa Para sel)arar las s!-gruientes sentencias en dos 1neas */
o3 15 num-invertido : irg---c_cie:ec:-: - rco + dlgito medio * 10
o" I6
I1
+ digito_izquiercic;
printf ("El dai,c c:::qr:.a1 es : !,o\rr,", ium) ;
o !8 prtntf ("El dalo i::r-:::ii: :s : r.d.,..", num invertido) ;
o rg l
o Ef cdigo C finaliza aqu...
o Se recomienda ir a travs de cada sentencla del programa en secuencia para diferentes
o entradas, asignndole diferentes valores a ia variable num y observar cmo el programa
o se comporta para diferentes valores. Se puede pensar en otro algoritmo para realizar
o la misma tarea?.
o Fin del Ejemplo 3.3
o Antes de seguir con otros ejemplos, se explca cmo convertr el programa C a un
O cdigo que entienda la mquina.
o
o
o
o
o
o
q Volumen 1: Fundamentos de C
J Unidad 3:Programacn en C-Lm
c @ Copyright tBM Corp. 2005
Los materiales delcurso no pueden ier reproducidos en parte
o o en su totalidad sin elprevio permiso escrito de lBM.
o
o
6- compilacin de programas Hechos
en Lenguaje
En Linux la compilacin se hace usando programa
c
del programa en c como un argumento. La
ef
el programa compita sin errores. El compil"ori
ces
cc, que genera un archivo a.out si
cc, y toma el nombre del archivo
extensin que se usa para los archivos que
I
contienen un programa en c eJ.c. A continuacin ;

se presenta el siguiente ejemplo:


cc nombrearchivo. c
El archivo a'out que genera cc es el archivo
ejegutabte y puede ejecutarse como otros
programas en el sistema Linux. Para
ms infrmacin i"r." oe comprador,
pginas man de Linux. use las
Ejempfo 3'4: Convertir la Temperatura de Grados
Fahrenheit a Grados celsius
Escribir un programa que tome un nmero que
representa grados Fahrenheit, lo
convierte a grados celsius y lo imprime.
sea la entrada la varible fahrenheir que
representa el nmero en grados Fahrenheit,.
Se puede convertr el nmero dado de
grados Fahrenheit a grados cersius
usando ra siguiente frmura:
cel-sius : 5 * (fahrenheir _ 32 ) / g

El algoritmo en s mismo es simple y por tanto


se escribir directamente el programa c.
Ef cdigo C comienza aqu...
1 #incl_ude <stdlo. h>
2 tnt ma-i-n (voj_d) {
3 float ceJ-sius, fahrenhe:t;
4 /* Iemp,eratura en Fahrenheit */
5 fahrenheit : 9g.1;
6 ,/* Te>eratura en Celsj-us */
'7 celsius : 5* (fah:-enhei-- - 32)/9;
B /t Se muestran 1os datos por 1a saf-irt: estndar */
9 p:lrti ("La .-er..e:ru:a if Fahrenheit es.
10 eguivalente a ?f \
cersius\n,,, fah:e::heit, cef sius),.
11 l
Ef cdigo C termina aqu...
En este ejemplo, se. utiliz el tipo de dato float por
primera vez. Este tipo de dato puede
almacenar valores decimales rales. En la
formato contiene un o/of, el cual indica que
sentL"" pirtr se nota que en la cadena de
un tipo float ser impreso. siempre que se
desee imprimir un tipo de dato float, se debe
usar o/of en ra caden o" io-"to del printf.
Nota: El cdigo anterior usa 'int main (void),
en sustitucin de ,main o , debido a
que son equivalentes' Es importante mencionar
que la funcin prn"ip"i por defecto
devuelve un entero y no est definida para
recibir argumento arguno.
Fin de Ejempfo 3.4

Unidad 3:Prog
Volumen i. Fundamentos dEE-28
@ Copyright tBM Corp. 2005 c
Los materiales del curso no pueden sr reproducidos
en parte
o en su totaldad sin el previo permiso
escrito de f BM.
o
o
Gua dei Estudiante
o Introduccin a la programacin ccn C

o Ejemplo 3.S: Calcular el rea de una Circulo Dado el Radio


o 3 El siguiente programa en c calcula el rea de un crculo
dado el radio. El algoritmo es
o simple, ya que se conoce la frmula para calcular el rea
dado el radio del circulo. El
o rea de un crculo vienedado porlafrmula, Area rf .
= Donde Tres aproximadamente
3'14159 y r es el radio de la circunferencia. El programa puede
a escribirse como sigue:
O El cdigo en C comienza aqu...
o 1 #inc]ude <stdio. h>
2 inr main (void) {
o 3 f -l oa! area / raot o,.
o 4 r:ad o : 32 . 15:
o 5 at:ea : 3.14159 * ac-: , :-cic,.
o 6 printf ( "para e-l :ad:c .,
: , = r area es :
/j
O
El cdigo C termina aqui...
o
Fin de Ejempto 3.S
o
O Ejemplo 3.6: Cafcutar ef Inters Simple de un Monto Dado
o Escribir un programa en C que calcule la cantidad a pagar
del monto principal para un
f: nmero de aos especficos a una tasa de inters dada.
Se asume que las variables se
llaman: interes_a_paE,ar, itir:::.r-pa_1 , tiempo y
o tasa.
o Se sabe que:
rnteres a-paja: =::_. - tiempo * tasa/100
:0
o
El programa que realtza los ciculos es ef siguiente:
El cdigo C comienza aqu...
o
c
o
o
o
o
o
o : -::- : ':
El inters a pagar es calcu1 ad.o */
? ' :.:e:-es_a_paga: : principal * tiempo *
tasa /IOO;
a
i
P t
Los detalles del i_nters a >agar se muestra.r +/
p:r-ntf ("Principal-: %C\n", principal) ;
prrntf ("Numero de anios: ?d\n,,, tiempo) ,.
15 prrntf ( "Tasa de interes: ?f \n", tasa)
P printf("\nCantidad de intereses a pagar: Bf\n,,,
,.

p \
1'1 interes_a_pagar)
p ,.

t lh
llLt Volumen 1: FundametosE C
rtf Unidad 3:ProgramacO

b @ Copyright tBM Corp. 2005


b Los materales dercurso no pueden sr reproducidos
en parte
o en su totalidad sin el previo permso escrito de lBM.
O
Gufa del Estudiante
Ef cdigo C finafiza aqu...
Para la cadena de impresin
de la sentencia printf , se usa zd o
orden y af tipo de variables que zf de acuerdo ar
es principal, que es un int,
se est imprimiendo. n-qu, la primera
luego tiempo, que tambin es
interes-a-pagiar se van a imprimir, se usa un
variable a imprimir
int. cuando tasa y
zf yaque ambos son dertipo f toat.
I ;
i

Fin de Ejempto 3.6


El uso de ros caracteres de cadena
de formato se.muestra en ra Tabra
3.1.
Cadena de Formato

int (notacin decimalcon signo)


int (notacin decimat coi@orcctaf o
hexadecimal)
int (notacin octal sin signo)
zx, zx int (notacin hexadecimal sin signo)
irt (notacin decimal sin signo)

?f ?e ?;E Zq ?G '.F -
^

,_:i5-: ;-

fabla 3.1: Cadenas de Formato para


>rrntf y scanf i
Ef uso de secuencias de caracteres
de escape se muestra en raTabra
3.2
I
.l
I

Carcter de alerta (timbre


\b I Retroceso (Bactspacj

Retomo de carro
Tabulador horizontal

Tabla 3.2: Secuencias de Escape

Unidad a:erog
Volumen i: Fundanentos OECJO
@ Copyright tBM Corp. 2005
Los materiares dercurs rib pueden
c
si prooucidos en parte
o en su totalidad sin elprevio permiso
escrto de lBM.
O
O
Guia oel Estudante
o lntroduccin a la Prooramacin con C

o
.l
a
Resumen
Ahora que ha completada esta unidad, Ud. debe ser capaz de.
a . Establecer la evolucin de C.
a . Discutir cmo escribir algoritmos en C para solucionar problemas simples.
o . Explicar las diferentes componentes de un programa C simple.
o
o
.\--
o -).vtr\
a \
'\-- -

o \ r-. l': \

o \,.\J \.
o 1 , ..-.)\
o
o *+ \'.r ).r
o
a
a
o :\1
\. _\')-.s')
O^ '*.-'-\ \-\\r

.R
?v
o ---:--_, \ \-- \ *-.> l\

o
c .. "\.. --: \i !;l) , . \-_ti\ --f) \. i'<--- \ \ r9-
. " j'.\ -l
-\ --.
o . r,- J

O
o
o
O
o
t
f

Ip
b
I
I
p
lt s, Voiumen 'l: Fundamentos de C
r,rL! Unidad 3:Programacn en C - Los Primeros pasos 3.1
-tE

p @ Copyright tBM Corp. 2005


t Los materiales delcurso no pueden ser reproducdos en parte
o en su totalidad sin el previo permiso escrito de lBM.
IL
Introduccin a la programacin con C Gufa delEstudiante

Unidad 3: Examen de Autoevaluacin


1) Cada lnea de cualquier sentencia multilnea en un cierto
cdigo se termina con el
carcter de diagonal (/).
a) Verdadero.
b) Falso.
2) Asumiendo que a' b y c son todas variabtes declaradas del tipo
las siguientes expresiones aritmticas son conettas?
int, Cules de
a) b+I-723*a/c
b) a++b
c) a (b+c)
d) b/a

3) cules de las siguientes sentencias de asignacin son vlidas?


a)x:x-1;
b)a+b:a-b;
c) (a) :b+7;
d) x : y * y * y;
4) A quin se le acredita el desanollo del lenguaje C?
a) Martin Richards.
b) Bll Martin.
c) Dennis Ritchie. 0l
d) Ken Thomson.
5) En qu ao fue desarroltado el lenguaje C?
a) 1970.
b) 1971.
c) 1972.
d) 1983.

6) un nombre de variabre en renguaje c no puede empezar con


a) Un dgito 0 de g.
b) Una letra del alfabeto en minscula.
c) Una letra del alfabeto en mayscula.
d) Un carcter especial como S o % o &.

Unidad3:Programacffi Volumen 1: Fundamentos de C a2


@ Copyright IBM Corp. 2005
e
Los materiales der curso no pueden ser reproducidos en parte
o en su totalidad sin el previo permiso escrito de lBM.
I
o
a ;- : cei Estudlante Introduccin a la Proqramacin con C

o - de los siguientes tipos de parntesis se permiten en una expresn aritmtica?


lr "cual
:t
ov b) Il
o c) o
a a) Ninguna de los anteriores.
o
8) Cul de los siguientes smbolos se usa para separar las sentencias en un programa
o en C?
o a) Punto (.).
o b) Punto y coma (;).
a c) Dos puntos (:).
o d) Ambas (a) y (b)
a
9) Cul de los siguientes no es un tipo de dato vlido en C?
o a) int
O
b) float
o c) char
o d) text
o
a 10) sea x una variable entera. cul ser el resultado de la asignacin r/3?
a a) 0.33
a b) 0.30
!tv
IJ' c)0
d) Un valor indefinido
o
o
o
o
a
o
o
o
o
o
o
a
o
a
o
o
o
e0 Volumen 1: Fundamentos de C Unidad 3:Programacin en C - Los Primeros pasos 33
o @ Copyright IBM Corp. 2005
o Los materiales delcurso no pueden ser reproducidos en parte
o en su totalidad sin el previo permiso escrito de lBM.
o
o
Introduccin a la Programacin con C

Respuestas a la unidad 3: Examen de Autoevatuacin


1)b
2) ayd
3) ayd
4)c
5)c
6) ayd
7)c
8)b
e)d
l0) c

0;

Unidad 3:ProgramacOn effi Volumen 1: Fundamentos de C a

@ Copyright tBM Corp. 2O0S


e
Los materiales del curso no pueden ser reproducidos en parte
o en su totalidad sin el previo permiso escrito de lBM.
o
O
o -:-r cl Estudiante Introduccin a la Proqramacin con C

o
o0 Unida d 4: Construir Fundan'lentos
o Slidos en C
o
o Objetivos de Aprend izaje
o
o Al final de esta unidad, Ud. ser capaz de.
o ' Explicar cmo escribir programas que tomen una entrada simple usando la
o funcin scanf.
o a Discutir las reglas que rigen fa creacin de nombres de variabies.
o a Discutir las propiedades de algunos de los tipos de datos primitivos pre-
definidos.en C.
o a Describir las propiedades y usos de varios operadores aritmticos.
o a Describir la jerarqua de las operaciones o precedencia de operadores en una
o expresin aritmtica.
o
o
o
o
o
a.
cr
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
a
o
Volumen 1: Fundamentos de C Unidad 4:Construir Fundamentos Slidos en C 35
@ Copyright IBM Corp. 2005
o Los materiales delcurso no pueden ser reproducidos en parte
o en su totalidad sin el previo permiso escrito de lBM.
o
o
lntroduccin a fa
acin con C
Gula del Estudiante
l. f ntroduccin
En la unidad 3: Programar
enc - Los Primerosp^1os,
los datos de entrada
estaan drsponibfes p;;;;;i se escribieron programas
programa donde
asignacin' Esto no es a travs de una sentencia
ioear, y" qr" tiene varias'lmiacon;.';;; de
ejempro, se desea
:i T['i:"1 :'?ffi[
versin ejecutabfe o" "T
:: "^:#*: oir".J",5i ri e n e q u e e d ta
t itij:.,'f
",", compifarfos
rcesarios, ". y oot.n"i r i

progt"r; ,nl
. nuevamente.
2. Aceptar Entradas def
Usuaro
En la tJnidad 3: Programar
los datos de entrada
en c - los Primerospasos, se
estaoan'olponiotes p"rt"t escribieron programas
programa donde
asignacin' Esto no es a travs de una sentencia
ioear, ya que tiene varias de
ejecutar el programa rimitaciones. si, por elempfo,
con un cnjunto o" u"ior".-iu se desea
0",o, diferents, se tiene que
editar
il,.3ii ;1I.1,,:T:';"
Lo que realmente se necesita
?":;" *: :l*: iff s a ros,
"::e pr,.r o, y obte
"o, ner un a

e o s e e m e n to s . ; ;
p ro p o rc i o n

";; ;l;':J :fi i lli; i,ff" ","ffir"li" [1 "ril" Tffi:


I r

::'""ffi; ilT,j;jx:u:: Ljjff d se nd n o,"r,


a a p re
; ::, i:*:id
e r

Existen muchas
"0,
funcones incorporadas
como la func.,
:Jfi ,fff ?i.J?'Jilffff ::g:,,g*i;#::::i".i',li;,J,1;'i:: jju:'?i"j
#inc_l-ude <stCro. h>
Esta sentencia es esencial
en el n de compitacin def programa.
' una directiva ar compilador de atomento En realidad es
estndar oe r
una de , rr*'1"::Trf,!:ilJ:g:n'"'a que constituye ta tibrera
a esta fibrera s printf.
De las funciones propias
de la librera stdio.h existe
una que permite obtener
;::'i1til::::il:'"";ff: ra r,n"on scanr
's,"'"on"idera un escenario donde
ra
se
variable flamada num
se puede en una
"r'"""narro
scanf (',9d,,, &num) ,. ";.:[?1""f:j#:H"
"n;uv
cuando esta funcin,se
ejecuta, se espera que
vez que ef vafor se obtiene er usuario
oi,tr"ro, urtJ r ;;;."" ingrese un entero vfido. una
num' La cadena de caracte;";;;;"ada en ra variabre entera ffamada
formato' ca indica que en comifras en et scanr
se ,ama cadena de
'ubcacin'de fa variaole entero decimar ,, ;;;;';.
un
La funcin scanr requiere
''t* en-.,i"?or", o" r"nur"-q*ue ra
pueoa atmacenar er
i"*io,''"i'] varor
n""" ustamenle esto, pasa en
iii&1it;9;,iJ"l,tilmm*"' '"
.':;::"H:;T::i[U*:":,*,Ti:,SilTH"';lTiJ,J,;tifu
la

i;:T_"j: j
Unidad '
Vofumen l, punOamentos
e C 36
O Copyright IBM Corp.
Los materales delcu 2005
oensu,o,",,o"o'!?li,"r?J,:ff
trJ:tJ3j,i3i""',El,l,n"
o
o
Gua del Estudiante Introduccin a la Programacin con
o C

o Ahora, asuma que se desea leer la entrada del usuario en dos variables pesc ! e.r:j
o0 donde eiai S de tipo de dato rnr- f pe-sc s :-.,:-,. Se debe usar las siguientes
o sentencias:
o scanf ( " gd", &edad) ;
scanf ( ,'% f ',, &peso )
o o/of
,.

Note que se usa para leer peso ya que es de tipo float. En esta unidad, se discute
o cmo obtener las entradas del usuario. Se aqumir que todas las entradas del usuario
o para los programas son vlidas. Las valdaciones de las entradas del usuario se discute
o en el Volumen 2, Unidad 1 - Estructura de Control de Decisin.
o Considere el siguiente ejemplo:
o El cdigo C comienza aqu...
o 1 f tn:lucie <s-_ i_ . h>
o -)
-
t -- \
t-11,r)
-- 1

o 3 in: e':ut:a,-
1 i - Se tona eI valor de 1a variable como entrada del usuario -
o 5 sca.-i i"?C", &altura) ,.
z

o /- Se impr:-me dicho walor en J-a salida estndar */


o 7 c:-:,:j ("?d\n", altura);
o Ei
o El cdigo C termina aqu...
o Este programa espera por la entrada del usuario cuando se ejecuta. No se le indica a
los usuarios si ellos deben ingresar un tipo de dato entero, flotante o carcter. Tampoco
3a se le ofrece una indicacin (promptl de que ingrese una entrada apropiada. Sin
embargo es buena prctica de programacin indicar a los usuarios que Ingresen un
o valor corresponCrente a lo que espera el programa.
o
Considere el siguiente cdigo. Cuando el programa se ejecuta, se le indica al usuario
o que Ingrese un valor mediante la primera sentencia prinrf que se ejecuta. De esta
o forma el usuario puede ingresar la entrada que el programa requiere. La salida
o mcstrada es ciai-amente til y no simplemente un nmero.
o El cdigo C comienza aqu...
o =_
_ ^ --: ' : -_ :_ _. :-:
o
o =____-l

o /- Se le rndrca al usuario que hacer "/


o a:':-i: 1".;E:ese su altura en cent j_metros\n',);
o /* Obtener eI valor de Ia variab]-e cono entrada de1 e1 usuario
I tt9Atl
qenf
&aftura);
o
o 8 /* rnprinir el walor de l-a variable a 1a sarida estndar */
9 printf ("La al-tura en centimetros es ?cl \n". l-_ura)
o 10 )
,.

o El cdigo C termina aqu...


o
dl Volumen 1: Fundamentos de C Unidad 4:Construir Fundamentos Slidos en C 37

o @ Copyright IBM Corp. 2005


o Los materiales delcurso no pueden ser reproducidos en parte
o en su totalidad sin el previo permiso escrito de lBM.
o
o
Introduccn a la programacin con C Gufa del Estudiante

-Ejempto 4.1: Extraer los


Versin Revisada.
EI primer programa desarollado fue tomar un
entero positivo de dos dgitos, extraer el
dgito ms a la izquierda y el dgito ms a la derecha
e imprimirlos. El nmero de entero
de dos dgitos estaba disponible para el programa a
travs de una sentencia de
asignacin de la forma num :
25.
Se puede mejorar el programa tomando la entrada
del usuario.
El cdigo C comienza aqu...
1 #inc_l-ude <stdio. h>
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 *,/
rr
'1 ?
prrnti
^-r --r (/ 'r"El dtgito izqu_:-ei-do es:
?d\n,,, digito_izguierdo) ;
74 printf ("Fl drg:to deecho es: %d\n,,, digito derecho)
,.
t5 I -
El cdigo C termina aqu
Fin de Ejempto 4.i
De igual forma, se pueden mejorar todos los programas
'
escritos en la lJnidad 3:
Programar en c - Los Primeros Pasos. Estos e;emptos
son revisados y se presenta el
programa modificado de algunos de esos
cdigos a contnuacin. Muchos de estos
programas son auto explcativos.
Ejempfo 4'2: convertir la Temperatura de Grados
Fahrenheit a Grados celsius
El cdigo C comienza aqu...
I #include <stiio. h>
2 mainO {
3 float ce_Ls:._s, f ahre:r.l-^e-:,.
4 /* Indj-car a1 usuarj-o que j_ngrrese 1os rtatos -,2
5 printf ("rngrese 1a temperatura en grados Fahrenhei-t\n,,);
6 /* obtener e1 valor de 1a varj-alle como entrada de
7 usuari-o */
scanf ( "?f", &fahrenhej_t) ;
8 /* r-a temperatura en grados celsius es calcurada, */
9 celsius = 5"(fahrenheit _ 32)/9;
10 * La tem.peratura en grados CeJ-sius y Fahrenh
et *
11 printf('La temperatura %f Fahrenheit es : Ef /
en cersius\n,,
unidad' constru@ Volumen Fundamentos de C ?n

. O Copyright IBM Corp. 2005


Los materiales del curso no pueden
ser reproducidos en parte
o en su totalidad sin el previo permiso
escrito de lBM.
o
o
Gua del Estudiante
o Introduccin a la programacin con C
o !.: fahrenheit, cer,sjus :

o 0
o El cdigo C termina aqu
o Fin de Ejemplo 4.2
o Ejemplo 4.3: calcular el rea de un crculo Dado el Radio
a El cdigo C comienza aqu...
o 1 #rncl-ude <stdio. h>
o 2 marnO {
o 3 f loat area, radi o,.

o 4 Indicar aJ. usuario que l_ngrese 1os datos */


O 5 printf ("Increse e_L raC. c ie -l-a ci rcunf eencla\n,,) ;
6 obtener el valor de Ia vanable como entrada del usuario * /
o 7 scanf ("%f',,,iradio);
o 8 /* Calcular e1 rea del crc1o -/
a 9 area : 3. 11159 * rad.io - :acii_c,.
o 10 /* Se muestra el radio de entrada y rea cal_culada */
o 11 crlntf ("\n El radio ingresacio es: n.r,,,:aCl-o);
O 72 Prlntf ( " \n El area es : .: " , are) :
t< |
o
El cdigo C termina aqu
o
o Fin de Ejemplo 4,3
a 0 fE bmplo 4.4: Calcufar ef Inters Simple de un Monto Dado.
o El cdigo G comienza aqu...
O, j #inclucie <stdic. h>
o -)
.tta--:
-_
I * / I
1
I
1

o
oi
oi l

ol
q a:-:.:i1"I:.::ese e :.*::.::: 1;: a::.3.\n"),.
ol
ol ::-<: ce ' ::-;=:es, como val_or rea.l-\n" ) ;
-.:=::j (,'r-:,,, :aSa.
.l ,/ - ClcuLo de1 inters
,.

a pagar + /
q ::tte:es_a_pagar : mon:o * :.t_emDo * tasa / IO0;
I? /- Los detalles de1 inters se muestran en 1a salida estnd.ar */
printf("Tota1 de] interes sobre el_ Monto gd Anios \
%d Tasa de fnteres %f es %f \n,,, monto,
? tiempo, tasa, interes_a_pagar),.
\
?
Volumen 1: Fundamentos de C Unidad 4:Construir Fundamentos Slidos en C

@ Copyright tBM Corp.2005


Los materiales dercurso rio pueden sr reproducidos en parte
o en su totalidad sin el previo permiso escrito de lBM.
fntroduccin a la programacin
con C
Gufa del Estudiante
Ef cdigo C termina aqu

usuario v fa entrada det usuario


;fiff;:'::A:' hace que er prosrama sea ms
Fin de Ejempto 4.4
A continuacin se presentan algunos
conceptos fundamenta,res como
variables, constantes, operadores nonrbres de
y expresiones con un poco
ms de detare.
Ejempto 4.S: preguntas f ndiscretas.
con este programa se pretende inte'ogar
indiscretamente a un grupo de personas
sobre interrogantes de gran
importancia urtrdrti"" y social
El cdigo C comienza aqu...
1 #inc.lude <stdio. h>
2 mainO i
3 int edad;
4 f-loat sueldo;
5 /* Ind.icar al usuario que ingrese
1os datos */
u
A pr.LDtr
^-; ! ("Confiesa
/ r'^
t.u edad y sue-l_do actua-l_ \n,,),.
7 scanf ("?d ?f ,,, &edad, &sue_ldo)
;
B /* ros datos adquiridos ,,or teclados
son mostrad.os por pantar_la _/
("Su edad es: zd, y su
:, Jprintf suerdo: ?.1f do_lares \,:r,,, etr= j, s-^e-dc)
;
El cdigo C termina aqu
En el cdigo anterior fa funcin
La variable edad usa una cadena
scanf se usa con dstntos tipos de variaores
a ra
de,ro.mato "2"'v'"""r do o/of. Especficamente vez.
0
sueldo el ltimo printf permite en el
establecer decimares del nmero flotante
desean ser mostrados, es "r"nto"
sro se mortrrri ,n nico decimar.
"ttu
Al introducir dos o ms datos, "*o
(el carcter de nueva tnea
stos,*1"::1"r separados por caracteres
se .onriour" como un carcter de espaciado
de espaciado).
Los caracteres consecutivos que
limitar el nmero de los
no sean espaciados componen un
dato. Es posible
especiricanoo ,n" lngtud mxima
dato puede estar compuesto ""t""tJlr
por menos caracteres de fos q.ue para ese dato. Er
no se leern los caractet". qr" especifique ra rongitud y
ms ari-JJ"n"
cuenta que en este caso los "ttn sobrant", pru"n rongitud. Hay que tener en
caracieres
errnea para er siguiente o"to. gn ser interpretados de manera
l" siguiente instruccin:
scanf ( "?3d ?3d ?3d", &a, &b, &c)
;
Si se ingresan los datos: 1 2
3 fas asignaciones son: a=1,
b=2, c=3.
si se ingre sa 123 456 7gg ras asignaciones
son: a=123,b=456, c=7gg
si se ingre sa 1234s67g9 ras asignaciones
son: a=123,b=456, c=Tgg

Unidad : Con
Volumen 1: Fundamentos de C
40
@ Copyright tBM Corp. 2005
Los materares der curso ro pueden
e
sr ieprooucidos en parte
o en su totalidad sin elprevio permis
escrito de lBM.
o
o
Gua del Estudiante
o Introduccin a la Programacio con C

o Si seintroduce1234 56T8glasasignacionesson a=123,b=4,c=S6T y los otros dos


o0 dgitos restantes (B y 9) se ignoran, a no ser que se lean a continuacin en otra
sentencia scanf
o .

o Fin de Ejemplo 4.5


o 3. ldentificadores de Variables
o Como se aprendi en la lJnidad 3: Programpr en C Los Primeros pasos, existen
o ciertas reglas para los nombres de las variables
-
.

o Los nombres que se le dan a los elementos de programacin de C como constantes,


o variables y funciones se llaman identificadores. Cuando se crea un nombre para una
o variable, se tiene un identificador de variable. Observe la siguiente declaracin:
o rnt L emp,.
o Esto implica que temp es una variable entera ! temo es un identificador de variable. Los
o identificadores pueden usar caracteres. del alfabeto en mayscula as como en
o minscula. Sin embargo, los programadores generalmente usan letras minsculas para
o los identificadores de las variables. Por otra parte, la siguiente declaracin crea dos
identificadores distintos:
o
int temp, Temp;
o
o Los identificadores pueden empezar tambin con el carcter subrayado a Sin
embargo, esta no es una prctica comn. Unas cuantas recomendaciones se dan a
o continuacin para ayudar a escoger el nombre ms apropiado para una variable.
^-
_'((l Escoja nombres de variables que reflejen fa naturaleza de su uso. Los identificadores
o\z
sal-ario-basico, ded_imp, cuentaLelf tal vez revelen sus usos inherentes al
O reflejar salario bsico, deduccin de impuestos y cuenta de telfono. Sin embargo. Los
o nombres de identificadores no tienen ningn otro significado son slo nombres.
o Por ejemplo, se puede almacenar el peso de una persona en un identificador llamado
o ganancia, pero esto no tiene mucho sentido. Se debe evitar el uso de nombres de
O variables como xl2pq34, zxyplz, o el nombre de una mascota, que no reflejen el
o uso apropiado. Algunas implementaciones de C permiten slo ocho caracteres,
o mientras otras implementaciones permiten 31 caracteres. Es importante desarrollar el
hbito de formar nombres de identificadores que no sean muy cortos ni muy largos y
o que sean significativos.
o
Los identificadores de variables no pueden ser iguales a las palabras reservadas de C
o como lnt, float o main. De hecho, las palabras reservadas en C estn en letras
o minsculas. No se puede declarar fi-oat como un identificador. Pero se puede declarar
o lo siguiente:
O l-oat Float;
f
o Tambin se puede tener un identificador tlamado rt-oat. Sin embargo, esto crea
o confusin- Por tanto, es mejor evitar el uso de estas palabras. Los siguientes nombres
o son identificadores vlidos para variables:
o/^
Volumen 1: Fundamentos de C Unidad 4:Construir Fundamentos Slidos en
v C 41
o @ Copyright IBM Corp. 2005
o Los materiales del curso no pueden ser reproducidos en parte
o en su totalidad sin el previo permiso escrito de lBM.
o
Introduccin a la programacin con C Gufa delEstudiante

A J s.v

KZOZ q: I : rr nrrf
bill_1 SAMPLE
Los siguientes nombres no son identificadores vlidos para variables:
9c1oud No comienza con una letra.
salary$ lncluye un carcter especial..
by-pass lncluye un carcfer no permitdo _.

first name lncluye un espacio.


Considere los siguientes nombres de identificadores:
int administrador_memoria, administracion_memorra,.
Se pueden originar varios problemas con estos nombres de identificadores,
aunque de
acuerdo con las reglas para formar los nombres de identificadores,
estos son
perfectamente vlidos. Si se ejecuta el programa en una
mquina cuyo compilador
acepta slo los primeros ocho caracteres del identificador como significativos,
ambos
identificadores tendr el mismo nombre y por tanto no sern tratados
corno distintos. Es
aconsejable que los nombres de los identificadores sean los suficientemente
largos para
que sean significativos y lo suficientemente cortos para evitar problemas.
A continuacin se aprender acerca de los tipos de datos bsicos en c.
4. Palabras Claves en C
En C, como en cualquier otro lenguaje, existen una serie de palabras
que el usuario no puede utilizar como identificadores (nombres de cfave (keywords)
variables ylo de
. funciones). Estas palabras sirven para indicar al computador que realice una
tarea muy
determinada, desde evaluar una comparacin hasta definir el tipo
de una variable, y
tienen un especial significado para el compilador. El C es un lenguaje
muy conciso, con
muchas menos palabras clave que otros lenguajes. A continuac-n-s" psenta
la lista
de las 32 palabras clave del ANS!,C, algunos compiladores aaden otras palabras
clave, propias de cada uno de ellos. Es imprtante evitrlas como identificadores:
doub-l-e int struct
x-^ - r- ^t ^^
saE long switch
enum rct
!v!:ro q1-uL!
r fLyPsusr
rrna-l^r
cnar extern return union
con st I Vq L short unsigned
nn!.i
vv.u-tUC n'.^ for signed void
UgIdUIL
^^a-,-l+ goao sizeof vol_atile
do if static whil_e

Unidad 4: Construir Fundamentos Siidos en C Volumen 1: Fundamentos de C 42

@Copyright tBM Corp. 2005


e
Los materiales dercurso no pueden ser reproducidos en parte
o en su totalidad sin el previo permiso escrito de lBM.
o
o
o Gua del Estudiante Introduccin a la programacin con C
o
arl 5. Tipos de Datos Bsicos en CO
o Antes de continuar se debe entender qu es un tipo de dato. Generalmente,
cuando se
o le pregunta a un estudiante qu es un tipo de dato, la respuesta ser ,un int,, ,un
o -char'o'un float'- Sin embargo, esto no explica nada acerca del trmino tipo de dato.
Entender el trmino ser de gran utlidad. Un tipo de dato se define
o como un conjunto
de valores y operaciones definidas para las var[ables de ese tipo en particular.
o Los tipos de datos bsicos en C son int, f loat, char y double.
o int es un tipo de
dato y define el conjunto de valores que una variable del tipo inr puede
almacenar, y
o tambin el conjunto de operaciones que se pueden usar con tos operandos
enteros.
o fl-oat es un tipo de dato dado que define un conjunto de valores, aunque estos no
o pueden serenumeracos como en int, y las operaciones
definidas para esetipo. para
o f]oat, las operaciones definidas son +, , *, /. Sin embargo % noest definida.
o Cada uno de los tipos de datos bsicos se almacena en forma diferente
en la memoria
o de la computadora. Los requerimientos tipicos de memoria para los tipos de
datos
bsicos en C se presentan en la Tabla 4.1. Sin embargo, el nmero de
o asignados para los tipos de datos especficos puede variar de un modelo
bytes realmente
o computadora a otra.
de
o c provee el operador sizeof que permite determinar el tamao
O de cada tipo de dato
que es soportado por el hardware subyacente.
o
o^ ,^ Tipo de Dato Descripcin Requerimientos
tt'

o
J
ll
\ n InI
C)
Entero
tpicos de Memoria
2 bytes
) {f
xi Float \
o l (l
Nmero de Punto Flotante 4 bytes
O Double Nmero de punto flotante de
\P \-l dobie precisin
B bytes

o (.\r
/.1r.^. 4
vrrd
o a) Carcter simple 1 byte

o 4.r: Tipo de Datos y Espacio Requerido en Memoria


Tabra

o Los caracteres se representan a nivel de mquina como un entero. para


hace) esto. fas
o computadoras utilizan el cdigo ASC|l, que tiene un entero estndar
asociado para cada
uno de los caracteres en el rango de la a-2, A-Z-, o-g y todos los caracteres
o como $, oA, * y &. En un solo byte una computadora puede almacenar
especiales
a rango de -128 a +127 - Debido a que todos los cdigos son
nmeros en un
enteros positivos, se pueden
o representar 256 caracteres usando un byte. Los valores utilizados
van desde 0 hasta
o 255' A-z (maysculas) estn representados desde 05 al g0 mientras que
a-z
o (minsculas) estn representados desde 97 al 122. En
cualquier libro de texto de C
o encontrar el cdigo ASclt completo que usa una computadora
moderna.
o
o
o
t
o
Volumen l: Fundamentos de C

@
Unidad 4:Construir Fundamentos Slidos

Copyright tBM Corp.2005


en C 3

a Los materiales del curso no pueden sr reproducidos en parte


o en su totalidad sin el previo permiso escrito de lBM.
o
o
Introduccin a la progranlacin con C Gufa gel Estudiante
5.1 Calificadores de Tipos de Datos
Los tipos de datos bsicos pueden modificarse usando
calificadores de dato.s. Los
calificadores de tipo de datos son short, long, sigrned
y unsi.gned. Las variables
enteras pueden ser calificadas como short int, long
int,
unsiqned int- Estas variabfes tambin se pueden escribir comosigned int o
unsiqned para referirse de forma automtica a enteros. Generalmente,
short, longr o
menos memoria que slo int, mientras que rong requiere
short requiere
int ' Todos estos son dependientes del compilaoor y debenms memoria que slo
ser verificados por el
programador' Un unsigned int utiliza el mismo
espacio de memoria que inr pero
permite almacenar el doble de nmeros.
El calificador unsigrned puede ser agregado a short int
! lonq .r-nr como
unsiqned short int o unsigned lonqr ii:. Algunos compiladores
permiten
que long se pueda usarcomo un calificadorcon
itoat y double como long ffoat
y rong doubre - El significado de estas declaraciones es
siempre dependiente del
compilador que se use.
Diversos compiladores de c tratan a estos calificadores
como tipos de datos diferentes,
por ejemplo long f f oat puede ser lo mismo que
double. y longr doub-l_e puede
ser lo mismo que double o incluso un tamao mucno mayor
principiante debe estar siempre atento a que estas
al double. un
cosas son posibles.
A continuacin se muestran algunos de los beneflcios de
los calificadores de datos:
Si en un programa se requiere alta precisin para nmeros
puede usar el calificador long. As, deciarar de puntos flotantes, se
una variable de tipo double ser diferente de
declarar sta como un long double. Para nmeros de punto
proporciona mejor precisin. flotan long double o
En ciertas aplicaciones, el tamao del programay la memoria
que ste requiere deben
mantenerse al mnimo. si el programa fue a eietutarse
en reloes de pulsera u hornos
microondas inclusive, la memoria definitivamente es
escenarios, los calificadores short se usan para optimizar
muy pequea. En estos
ta memoria disponible.
6. Constantes en C
Existen cinco tipos de constantes en C. Estas son:
o Constante enteras.
. Constante de punto.flotante.
. Constante de carcter.
. Constante de cadena.
.' Constante de enumeracin.
A continuacin se discuten los primeras cuatro tip.os de constantes.
El ltimo tipo de
constante, los enumerados, se exprica en el vorumen
Adicionales de C.
6 tJnidad 3: Caractersticas

Unidad 4: Construir funffi Volumen 1: Fundamentos de C 44


@ Copyright tBM Corp. 2005
Los materiales delcurso no pueden ser reproducidos
en parte
o en su totalidad sin el previo permiso escrito de lBM.
or
tl'
Gua del Estudiante Introduccin a la Proqramacin con C
ol
e 6.1 Constantes Enteras

!,c
I
I
Una constante entera es un nmero de valor entero. Este consiste de una secuencia de
dgitos precedido por un signo + o -.
a I Estos pueden ser escritos en tres sistemas numeracin diferentes.
q . Decimal (base 10)
q . Octal (base 8)
q . Hexadecimal (base 16).
a El sistema decimal permite los dgitos de 0 a 9 y opcionalmente precedido de un signo +
o o -. El sistema octal permite los dgitos de o a 7 donde O es siempre el primer dgito. El
o sistema hexadecimal permite los dgitos o a 9 y las letras A, B, c, D, E y r, empezando
o con 0x y 0X.
o Algunas de las constantes decimales vlidas son.
o 9 4518 -234, 0
O
Las siguientes son constantes decimales invlidas
o
1)? Las constantes decimales no pueden empezar con 0.
O
o Contiene una coma.
2?S
o Contiene un carcter esoecial.
o 23- 4 Contiene un guin.
Una constante octal pertenece a la base 8, donde los dgitos 0 y 7 son vlidos. para que
:0 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
o constantes vlidos de constantes octales son:
o t:ZL= -) 01 011
O .

o o Una constante hexacjecimal (base 16) debe empezar con 0x ox y puede ser cualquier
o 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.
o
O Algunas constantes enteras hexadecimal vlidas son:
o 0x723 CXa2b4C9 OxFACE 0x.
o El tamao de un nmero dpende de la computadora que se use. Por lo general, se
a puede tener un rango que va desde 0 a algn valor mximo predefinido, basado en el
o nmero de bytes que se usa para almacenar los enteros. En computadoras que usan 2
a bytes para almacenar constantes enteras, el rango de los nmeros que se pueden
representar es desde -32768 a +32767. Mientras ms bits estn disponibles para
o almacenamiento, un mayor rango de nmeros puede ser representado.
O
a
o
),
Volumen 1: Fundamentos de C Unidad 4:Construir Fundamentos Slidos en C 5
'a0
o @ Copyright IBM Corp. 2005
a Los materiales delcurso no pueden ber reproducidos en parte
o en su totalidad sin elprevio permiso escrito de lBM.
o
Introduccin a la programacin
con C
Gula del Estudiante
. 6.2 Constantes de punto Flotante
una constante de punto flotante es un nmero I
decimal (') o un exponente o ambos.
0.0
1.0
en base 10 que contienen un punto
Algunas constantes de punto flotante vtidas
son: I
0.3
1256.43
+25

-3.003
t
Adems se puede usar la notacin exponenciaf
como sigue: .;
qt- 1

a a

^
U. ^^-
UUJqC4.
cuando se usa la notacin r, implica que el punto
posiciones a la derecha, s el becimal debe moverse tantas
exponente es positivl o l" izquierda
s es negativo.
Asque, <r--r significa que S 4 x ,g-3 que "
es 0.004.
Tambin, 2 .3E4 significa 2 .3 x I o4 que es 23000. 0.
Nota: r puede estar en mayscula o
minscula. Los exponentes son constantes
en forma decimal y no puede ser un enteras
nmero real. porejemplo, es jnvlido
10.34
6.3 Constantes de Carcter '3.2.

es vudrqurEr
vo cuafquier udracler
carcter encerrado entre comilfas simples.
A los caracteres se fes asigna un nico cdigo Or
(American Standard Code for fnformation
numrico llamado cdigo as.rl
cction ASCtI
Interchrng"l. +
'Los siguientes ejempros son constantes
de carcter vridos:
")zc
)x\

En un programa en c, estos caracteres


se incluyen en comiflas simples,.como ,a,y,*,
cada tipo de dato del tipo cnar puede afmacenar solamente un carcter en un
instante de tiempo.
-'
6.4 Constantes de Cadenas
@consistedeceroomscarcterencerradosencomi|fas
dobles Los siguentes ejerpro, ,on de cadena vridas:
hola "onstantes
nombre
ES
a
Nota: 'a' es diferente d9 ""., en er primer
caso es el carct er a, yen ef segundo es
caoena a' se aprender ms acerca ra
de las cadenas Ln c un el volumen 3 unidad
Programar con Arreglos. 1:

Unidad 4: Construir Funoamentos


Slidos!n C Volumen l: Fundanentos de C 46
@ Copyright tBM Corp. 2005
Los materiales del curso no pueden
sr reproducidos en parte
o en su totalidad sin el previo permiso
escrito de lBM.
o Cuando se usan con operandos enteros, todos los operadores anteriores retornan un
o resultado entero.
a C)r
operador % es vlido slo cuando ambos operandos son enteros. Cuando uno de los
o O>)*-t
- I/
operandos es un fJ-oat, el resultado ser tambin un ft-oar. Adems, cuando se usa el
o operador /, se debe tener mucho cuidado de asegurar que an a/b, b no sea cero. Si se
o intenta dividir entre cero, el programa no funcionar. Si uno o ambos operandos son
o negativos, entonces el uso de los operadores anteriores resuftar en valores cuyos
a signos sern determinados por las reglas del lgebra. Cuando uno de los operandos es
o negatrvo, el resultado del operador % no est claro.
o La mayora de ios compiladores de C hacen que el residuo tenga el mismo signo que el
a primer operando. -ts t debe ser cuidadosamente interpretado. En la mayora de los
o1 compiladores el residuo ser -:.

o- ^A.
/'Una expresin aritmtica es una combinacin de identificadores, constantes y
operadores aritmticos, que opcionalmente tienen parntesis. Considere la expresin
o ' 5*a - 5+b.
o
o Qu evala esto?
o - (5a) - (5b) o

o -5 (a-5b)
O 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
o de los operadores. Esto se da en laTabla 4.2.
a
o Prioridad Operadores Descripcin
o,_ Primero "/o/o Multiplicacin, divisin, mdulo
a Segundo +- Adicin. resta
Tercero
o Asignacin

o Tabla 4.2: Prioridad de los Operadores Aritmticos

o Cuando las expresiones tiene operadores de la misma prioridad, digamos * y /, la


evaluacin es de izquierda a derecha. Porejemplo, si la expresin s a*b - c/d, a*b
O
ser evaluada antes Que c/d. Los parntesis sobrepasan todas las prioridades en las
o
o Volumen 1: Fundamentos de,C Unidad 4:Construir Fundamentos Slidos en
o0 C 47

a @ Copyright IBM Corp. 2005


Los materiales delcurso no pueden ser reproducidos en parte
a o en su totalidad sin el previo permiso eScrito de lBM.
a
o
Introduccin a la
con C
Gufa delEstudiante
expresones' sin embargo, dentro de parntesis, las prioridades
:Hi::r;, ln::: 1':':: :::.^"1$ ;:"i; "',
,los mencionadas
fi "jfi ji"J3l:: e n cuvo ca s o, a exp
res i n
;t"::3tr1;::,ffi J[1il?;:;Hy:g[*l";ilL"J:#?:ff :
Ejempto 4.6
Considere fa evaluacln de fa
siguiente expresin.
k:5*10+_*3_75/e_g_2
se muestra fa secuencia en ra que
ros operadores son evafuados:
50 + 7 * 3 _ 15 / q + B _ z * eva-l_uado
50+2t-fi/4.8_2 * eva.l_uado
50+2I-3+B_2
71 _ 3 + B _ 2 ,/ evaluado
68+g-Z * eval-uado
to _ 2
-a - evaluado
/4
+ eval_uado
k le es asignado - eva-l_uado
71 : evaluado
Fin de Ejempto 4.6
Ejempto 4.7
Para Ia siguiente ecuacin cuadrtica:
ax2+ bx + c: O

Se determinan las races usando


la formula:
-b + square root (b? _ 4ac) / 2a o)
-b - sguare root (b2 _ 4ac) / 2a
' suponga que se traducen en
sentencias de asignacin en fenguaje
c.
= -b + sqrt(b * b - 4-a*c) / (2*a)
::::i : _b _ sqrt(b - _
Lootz ;
b 1*a*c) / (2*a) ;
Verifique la validez de esto.
Fin de Ejemplo 4.7

8' Operadores compuestos de


Asgnacin
c proporciona unos operadores com.puestos
como atajos al escribir las declaraciones de asignacin, que pueden ser utirizados
compuesto consiste generalmente
oe asig;frn. un opr"ooi de asignacin
de un operador aritmtica binario y
asignacin simple' Este ejecuta un operador de
operacin de un operador binario en ambos
y da el resultado de esa operacin
at operando izquierdo. T";
;irffi:fft precedencia
La decfaracin x
= X + 2 es equivalente a X+= 2. LaTabla
los operadores compuestos 4.3 muestra fa fista de
de asignacin ms usados.

Unidad : Co
Votumen t: runGmEnG?e c 4t
, -^ _- . .
los
@ Copyright tBM Corp. 2OOs
materiales del curso no pueden ser reproOucidos
o en su totalidad sin elprevio en parte
p"rri.o escto de lBM.
t
o Gua del Estudiante Introduccin a la programacin con C
o
a Operador Propsito
o0 )i-
Ejemplo
l
Salida

o Suma/Asignacin _l

O
Resta/Asignacin
x- t0
5
o
o Multiplicacin/Asignacin 50
o
o Divisin/Asignacin

o z: Mdulo/Asignacin
1\ - 1t t

o C

a Tabla 4.3: Operadores Compuestos de Asignacin


o A continuacin se ilustra el uso de estos operadores compuestos de asignacin con un
o ejemplo.
o Ejemplo 4.8
o A continuacin se escribe un programa, que acepta un valor entero por parte def usuario
o y muestra el cuadrado del nmero dado.
o El cdigo C comienza aqu...
a 1 #include <stCio. h>
o 2 mairr O {

or0 3 int num,'


o- 1-
5
: rin-t/rrTnnrpq:
r_
scanf ("?d",&num),'
-'u ./ - r'\
/ |

o 6 /- Calcular el cuadrado de1 n-mero dado * /


a 7 num*=num;
o e /* El cuadrado se nuestra en la salida estandar */
9 pr:.nif ("Ef cuad::adc es: ii\n", num) ;
o _',t
'}

o
o =l cdigo C termina aqu
Fin de Ejemplo 4.8
o
o 9. Conversin Explicita de Tipos
o Considere las siguientes declaraciones:
o i,nt x;
a float y;
o Que sucede con la expresin aritmtica (x - y) z r0? La expresin (x - y)
a devuelve un resultado de punto flotante dado que y es un ft-oat. Si uno de los
o operandos no es un entero, el operador % no ser vlido. Existen ocasiones donde
o estas son ineludibles, y ? debe ser aplicado. En ese caso, se debe convertir
o explcitamente el punto flotante a un entero. Esto se hace a travs de lo que se
o.
Volumen 1: Fundamentos de C Unidad 4:Construir Fundamentos Slidos en C 9

a @ Copyright IBM Corp. 2005


Los materiales delcurso no pueden ser reproducidos en parte
lr o en su totalidad sin el previo permiso escrito de lBM.
o
o
lntroduccin a la programacin con C Gufa del Estudiante

denomina operacin de conversin (casting). Se indica explcitamente


al complador que
el operando en cuestin debe ser convertido a otro tipo de
dato. pqr ejemplo:
((int) (x - y) ) ? 10
Esto evaluar la expresin conectamente. (x y) al evaluarse retorna un valor de
punto flotante. Este valor se convierte en un inr a
travs de (int) . Es importante
que el tipo de dato al que se esta convirtiendo est entre parntesis
( ) - El valor de
punto flotante es entonces convertido en un valor int,
sobre el cual se ejecuta el
operador mdulo. Ser ncorrecto s se hubiese scrito la expresin
sin tos parntesis
Para (int) (x - y) , como se muestra a continuacin:
(int) ((x _ y) ? 10)
El compilador anojar un error, ya que la conversin de tipo se
aplica a G_y)zro, y el
cual es de cualquier modcl una formacin inconecta de ra expresin.

{t\(\ trJO-
10. Conversin lmptcita de Tipos
El lenguaje C realiza una conversin automtca de un tipo de
dato a otro. Esto se llama
conversin implcita de tipo (Automatic type coercion). Mientras que
la conversin de
tipo es explcita, el compilador ejecuta implcitamente conversin
de tipos. La evafuacin
de (x-y) evala a un valor f l-cat es una conversin implcita realizada por el
compilador.
:_nt i, j ,.

ffoat f;
clrr h.
I
t
L
:

-
l|t).
l AAA
!VJV.-: ^.
c
| - r.

L _ L.

ch : t,.
Todas las sentencias anteriores son asignaciones vlidas
en c.
' La sentencia = : asigna 1000 a j truncando la porcin decimal de la
constante de punto flotante.
e f = i esvlida ya :se leasigna 100.0 porelcompilador.
' Interesante es, ch i es tambin vlido. i es 100 y cuando se asigna a ch,
ch es ahora 'd ' dado que el valor ASCII de o es 100.
Una buena prctica de programacin sugiere que el programador
haga siempre una
conversin explcita en lugar de dejar al compilador haga conversn
implcita. El
resultado obtenido en los dos casos es el mismo. La conversin
explicita de tipos es
considerada una buena prctica de programacin por las siguientes
razones:
' Se requiere que el programador haga explicito el tipo de dato
por lo tanto est conciente der cambio de tipo de dato.
a ser convertido, y
o Facifita la lectura del program a para otros.

Unidad 4: Construir Fundamentos SOtol eE Volumen 1: Fundamentos de C 50


@ Copyright tBM Corp. 2005
Los materiales der curso no pueden ser reproducidos en parte
o en su totalidad sin el previo permiso escrito de lBM.
o
o Gua del Estudiante Introduccin a la proqramacin con
o C

o Resumen
o
Ahora que ha completada esta unidad, Ud. debe ser capaz de..
o
o ' Explicar cmo escribir programas que tomen una simple entrada usando la
funcin scanf.
o Discutir las reglas que gobiernan la creacin de nombres de variables
o '
a Examinar las propiedades de los tipos de datos primitivos predefinos de G.
o a Describir las propiedades y el uso de los diferentes operadores aritmticos.
o a Describir la jerarqua de las operaciones o ra precedencia de los operadores en
las expresiones aritmticas.

Volumen 1: Fundamentos de C Unidad 4:Construir Fundamentos Slidos en C 51


@ Copyright tBM Corp. 2005
Los materiales del curso no pueden ser reproducidos en parte
o en su totalidad sin el previo permiso escrito de lBM.
lntroduccin a la

Unidad 4: Examen de Autoevatuacin


1) cul de las siguientes sentencias
de asignacin es invlida en c?
ai
x = x + 1;
b) y=y+1:
c) float=pi"r*r;
d) P=24.5"alb
2) curde ras siguientes es una asignacin ur" para
a) c = 'c'; char c; ?
b) c ='cat';
c) c = "cat",
d) c = "c';

:."'rff:$"":;;:t"ff:,':s nombres de variabtes senera error de compiracin en un


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.

una variabte, dectarada en c


:XT;:r:i'il:ffi"?r"0"
" a) como char namei
Ocho.
b) Cualquier longitud.
c) Uno.
d) Dos.

6) cules de ros siguientes no


son constantes de carc.ter vtidas?
a) "a"
b) "Bill"
\ ^l
vta
d) '8ill"

Unidad: Constr@ Volumen 1: Fundamentos de C


52
@ Copyright tBM Corp. 2005
Los materiales del curso no pueden
sr reproOucidos en parte
o en su totalidad sin el previo permis
escrto de f
BM.
o
o
- lntroduccin a la programacion con C
o
o 7) En la expresin, 25*d + (>:*2.3+2) / ( (x-y) i (c+d).2.3) cul porcin ser
o0 ejecutada primero?
a) 25"d
o
o b) x"2
c) x-y
o d) c+d
o
o B) x es una variable entera. Qu almacear la asignacin x :
si 9/2?
o a)0
o b) 4
o c) 4.5
o d)5
o 9)Qualmacenarlaasignacina t5 + 3 z 5?
o a) 15
o b)3
o c)0
o d) 18
o
10) Cul de los siguientes no es un calificador de tipo de datos?
o
o a) int
)r; b) short
{{it c) long
o- d) signed
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
eo Volumen 1: Fundamentos de C Unidad 4:Construir Fundamentos Slidos

@ Copyright IBM Corp. 2005


en C 53

o Los materiales del curso no pueden ser reproducidos en parte


o en su totalidad sin el previo permiso escrito de lBM.
o
Introdurcin a la PrograTacin con C

Respuestas a la unidad 4: Examen de Autoevaf uacin


1)c
2)a
3) b, cye
4) ayb
5)c
6) a,byd
7)c
8)b
e)d
10) a

unidad4, con"tru@ Volumen 1: Fundamentos de C

@ Copyright tBM Corp. 2005


a,
Los materales delcurso no pueden ser reproducidos
en parte
o en su totalidad sin el previo permiso escrito de lBM.
o
o
Gua del Estudiante
o Introduccin
___ a la prooramacin con C
o
o unidad 5: Laboratoro de programacin
o0
o enc
o Objetivos de Aprend izaje
o
o Alfinal de esta unidad, Ud. ser capaz de:
O . Trabajar con las construcciones bsicas de C.
o . Escribir programas para problemas simples.
o . Trabajar con las sentencias de asignacin a travs oe operadores
o
o
o
o
o
o
o
o
o
O,
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
Volumen 1: Fundamentos de C Unidad 5: Laboratorio de programacin n
3 C 55
o @ Copyright tBM Corp. 2005
o Los materiales dercurs.o no pueden ser reproducidos en parte
o en su totalidad sin el previo permiso escrito de tBM
o
a
lntroduccin alaP Gula del Estudiante

Ejercicios de Laboratorio
1) Escribir un programa en C que tome un enrero negativo lo convierta en un entero
positivo y lo muestre.
2) Dada la velocidad de un tren en kilmetros por hora, escrjba un programa que
muestre la velocidad en millas por hora. (1 mitla es equivalente a 1600 metros.
3) Escriba un programa que tome como entrad,a dos enteros en las variables xe y,
intercambie su contenido y los muestre.

Ejercicio Opcional
4) Dado cualquier nmero entero positivo X, encontrar si su cuadrado termina en el
mismo dgito que el nmero X.
Por ejemplo: 5 cuyo cuadrado es 25.

Unidad 5: Laboratorio de programaCn en C Volumen 1: Fundamentos de C

@ Copyright tBM Corp. 2005


Los materiales delcurso no pueden ser reproducidos en parte
o en su totalidad.sin el previo permiso escrito de lBM.
0 lntroduccin a la
Programacin con C
(Codigo del Curso: CY320)
Versin 3.0)

Guia del Estudiante

Volum en 2: Estructuras
de Control en C

IBM lT Education Services


Worldwide Certified Materia I
lnformacin de la pubficacin
producida utirizando Microsoft
5;i;:?j",i,ilff:: word 2ooo y Microsoft powerpoint
I
Marcas Registradas
IBM @ es una marca registrada
de Internationaf Business Machines
corporation.
oe roJuctos v seryici, Luo"n ser marcas
351'":"#p"ililJJ}:*:: resisrradas o

de otras compaas son mostradas


ffil::"merciafes a continuacin:
corporation
Red Hat Linux H:T"rt"",-

Edicin Junio 2005

La informacin contenida en este documento


formal de IBM y es distribuida bsicamente 'comono ha sido sometrda a ninguna prueba
expresa o implcita' El uso de esta es", sin ninguna garanta ya
informaci" r, imprement-".ion d sea
estas tcnicas es responsabifidad cuatquiera de
del comprrooiy o"pender de la habilidad
para su evaluacin e integracin de ste
en el ambiente oieraoionar del criente.
cada tema ha sido revisado por IBM para pesar de que
su
hay garanta de obtener el mismo resuftado "r"itltrd en una situacrn especfica, no
o uno simirar a ste en otra srtuacin.
adaptar ests tcncas . ;;; Los
rpo, ambientes lo nr.un bajo su
;1fil,ff,*l"intenten
' copyright Internationaf Business Machines
corporation, 2oo5.Alf rights reserved.

ser reproducido en su torafidad o en parre


;:nfr"$:,?r".:igil:de sin er previo

Instrucciones especiales para la


impresin de este curso.
No deben rernoverse las pginas
en blanco que puedan aparecer en el
unidad y entre dos unidads.'estas final de cada
nan sido nsertas intencionarmente.
:r
ol Guia def Estudiante
Intrcduccin a la Droorarracin con C
ol
Contenido
:l o Unidad l: Estructura de Control de Decisin
ol Objetivos de Aprendizaje
1

of 1. Introduccin
1

rf 2. Construccin rf Simple
.-)
z-

OI
ol 3. La Construccin : i_et se 5
of 4. La Contruccn r: Anidado '7

ol 5 Expresiones y operadores Lgicos y Reracionares


q 6. Operador Ternario
IU
1a
.l 7. Las Diferentes Formas de Sentencias rf
tz

q 8. La Estructur? sw :c ... case


o
q t
Resumen
d
d Unidad 1: Examen de Autoevaluacin 1
LA

a Respuestas a ra unidad 1. Examen de Autoevaruacion

t? unidad 2: Laboratorio Estructuras de contror de Decisin


Objetivos de Aprendizaje

to

29
?n Ejercicio de Laboratorio ?n
Unidad 3: Construcciones lterativas
21

o Objetivos de Aprendizare
a 1 .Introduccin
J
o 2. Construccin lterativs i..,:. _ _ e

o Resumen
o Unidad 3: Examen de Autoevaluacin q1
a Respuestas a ra Unidad 3. Examen de Autoevaruacin
o Unidad 4: Laboratorio de Construcciones lterativas
o CE

a Objetivos de Aprendizale
I Ejercicios de Laboratorio
56
o Unidad 5: Ms Construcciones lterativas
57
o Objetivos de Aprendizaje
o 1. Introduccin
o 2' Resolucin de Problemas Usando otras Construcciones
5g
o lterativas5g
o 3. Ms acerca de la Sentencia for 65
H
\\v
o Losmateria,::_qe:;"#X'Jil,?Y":Tj;,l??3.,cidosenparte
o o en su totalidad sin el previo permiso escrito de
lBM.
o
I
lntroduccin.a la ramacin con C
Gua del Estudiante
4. Salir de un Bucle prematuramente
5. Uso de fa Funcin fncorporada
pow (
o3
)
6. La palabra Reservada continue
o

7. ov
La Estructura de la Sentencia
do_whi-te
69
Resumen
Unidad 5: Examen de Autoevaluacin 73

Respuestas a la Unidad 5: 74
Examen de Autoevaluacin
Unidad 6: Laboratorio Ms Construcciones 76
fterativas
Objetivos de Aprendizaje 77

Ejercicios de Laboratorio 77
78

@ Copyright f BM Corp. 2005


Los materiales del curso no pueden
sr reproducidos en parte
o en su totalidad sin el previo p"rrir
escrito de
f BM.
o
o
Gua del Estudrante
o introduccin a la proqramacin con C

o
oI Unidad 'l: Estructura de Control de
o Decisin
o
O Objetivos de Aprend izaje
o AI finalizar esta unidad, Ud. ser capaz de:
o
o ' Definir la necesidad de decisiones en los algoritmos y en los programas de
computadoras.
o
' Desarrollar algoritmos que requieran tomar decisiones basadas en
o especficas.
condiciones
o . Discutir las diferentes formas de la sentencia r i.
O
' Expficar las expresiones relacionales, expresiones lgicas y la precedencia
o los operadores lgicos.
de
o . Explicar el operador ternario.
o . Discutir la construccin' switch ... case.
o
o
o
o
?
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o Volumen 2: Estructuras de Controlen C
)
Unidad 1: Estructura de Controlde Decisin j
o @ Copyright tBM Corp. 2005
o Los materiales dercurso no pueden ser reproducdos en parte
o en su totalidad sin el previo permiso escrito de lBM.
o
o
Introduccin a la Programacin
con c Gufa der Estudiante

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
tomaron para aprender a programar fueron se
tiles-para fortalecer las bases para
una base sfida no es suficiente pa resorver probremasla
5:3,T,[X?"Jr:ffiH.1rso,
as complejidades surgen cuando se tienen qru
I
ciertas condiciones se verifiquen y se tomen ,"rotuer problemas que requieren que
problemas computacionales generalmente decisiones de acuerdo a stas. Los
requieren que el usuario tome acciones
especficas' basadas en si una cierta condicin
mostrar el mayor de dos nmeros enteros
se satisface o no. ptr eempfo, para
A y B, se debe primero verirrcar la condicin
antes de que se pueda llegar a la conclusin.
otro ejemplo' consiste en verificar si un estudante
Para descifrar la intenogante es necesario que es de sexo femenino o mascurino.
er arumno proporcione su sexo como
dato de entrada y ste pase por una condicin
nterrogante. ' que
Yve determne la [
vstsrrrrrrs li' respuesta a esa

En esta unidad' se aprender a resolver problemas


que requieren que
condiciones sean venficadas y que las
decis"J;; se tomen estn basadas enciertas eilas.
Adems se aprender el uso de una construccin
muy til en c, ilamaJa sentencia if
la cual permite convertir los algoritmos que ,
requieren estructuras de control de decisn
en programas' La sentencia r est disponibfe para usarse
las estructuras de if simple y de if en diferentes formas, desde
-ei-se, hasta las estructuras de if mltipfes y de
if anidados' cada una de estas estructuras ayuda a darre
requieren control de decisin en su contexto. sentido a los problemas que
,)
'Tambin se estudiarn con ms detalle los
operadores relacionales, las expresiones
relacionares, ros operadores rgicos y
ras expresones rgicas.

2. Construccin if Simpfe
El control de decisin abarca desde verificar
condiciones muy smples hasta estructuras
muy complejas' se entendern las estructuras
de contror o oecison ta ayuda de
algunos ejempros. cada ejempro prantea
resuelve el problema y provee las entradas
un probrema, sugiere un"on argoritmo que
necesarias en funcin de las diferentes
formas de la sentencia if que se requieren para
escribir er programa en c.
Ejemplo l.l: Encontrar el Mximo de Dos Enteros
Dados dos nmeros enteros x e y.
El problema consiste. en escribir un programa que
tome como entrada dos. enteros y muestre
cal de los dos tiene el valor mximo.
solucin es directa y er argoritro j"r, La
este probrema se da a continuacin:
Paso l: Tomar como entrada x e y.
Paso 2:Verificar sx > y.
Paso 3: Si es cierto, entonces mostrar
x como el mximo,
unidadl.esttuffi Volumen 2: Estructuras Oe Control e-n-C
I
@ Copyright tBM Corp. 2005
Los materales del curso no pueden
ser reproducidos en parte
o en su totaldad sin el previo permiso
escrto de lBM.
.I
:l
II
:T
tt
!t -G_ua
oel Estudiante
Introduccion a la proqramacin con
lt C
off Paso 4: En caso contraro, mostrar
v como el mximo
O lt Este es uno cie los mtodos para resoiver
.h{
^fr pai-a muchos de los problemas que este prcblema. Existrrn mltiptes soluciones
se van a presentar. Los que aqui se drscuten
olt los ms simpres que faciritan .orn[rut"r
ros objetivos cier aprendizaje.
son
ofi
.lf Para comenzar' se discutir la sintaxis y
La forma general de fa construccin
semntica cje una construccin
r simple se da a continuacin:
if srmple en c.

:f (sl la conciicin es i,=::l:tr.:a.


:F sentenc: - _,.
ol En este caso sentencial es una sola sentencia
ol De manera de verificar si x es mayor que
c, la cal se llama sentencra,,simple,,.
. se pueoe usar la siguienle sentencia:
ol ti(x >
-i
r,)
ol
ot La palabra reservada es if y ia conc.icion que se Verifrca es
r:i:,:"*,"cionat a >: ), -,: > 1",. Tambin se re
o l:[:.::f una expresin relacionai siempre resutta
en
a
o construccin r: oara escribir rn prosrama en c que impremente
o :,;#;l"":?flj: er

o El cdigo C comienza aqu...


o j *:nc-Lucie <s:c: c. n>
Orrs 2 nain) I
o,u 3

o
o :
o
o , ;t) )
o x es nayo:r aI valor de y
o
o ;.. 9'-rt

a 1r:_ ^- ;^
_.v-
hA-
Yue
-!^
eI walor d. y * /
o
o es: ?d\,n", ),) ;
igrral al val-or d.e y
o
o
o
o
o
o
o
oj Volumen 2: Estructuras e Controten
C Unidad l:Estructurffi
o @ Copyright fBM Corp. 2O0S
o Los materiafes delcurso no pueden
sr reproducidos en parte
o en su totalidad sin el previo permiso
o escrito de IBM
Note que las dos entradas se tomaron
usando una sola sentenca scanf. El formato
cadena *d sd implica que se esperan de
dos enteros decimafes. Los dos valores de
entrada se leen en x e y respectivamente.

A continuacin, se
I
realiza un seguimiento de la ejecucin
de este programa con
considere que ros varores de entrada de
::tJ""jT:"3;""J[:*X,:"'"'pro xey
printf (',Las entradas son: 3d y ?d\n ,, x, y)
, i
La sentencia anterior imprimr el siguiente
mensaje:
Las entradas son 72 y 24
Af ejecutar la sentenca if (x
sentencia siguiente (la sentencia printf)
no se ejecuta. cuando se e,ecuta las
sentencia if (x < y) , sta resulta VERDADERA,
sentenCia, printf ( "El mximo
como resultado la siguiente
va-lor es : ?d \::,,, i,) ; se ejeCuta. La salida se
presenta a continuacin:
El- maximo vat or es: 24
si se dan ros varores de x y = r2, der programa
sentencaif (* t y) retornar falso. El siguiente ":: ,::es< evidente que ra primera
_... se ejecuta y conduce
sentencia ir (x v) conduce a verdadero y se ejecuta ra
:#"il,""5"15i,j1
printf ("Los numercs scn iguales\;:,,) ,.

Esto resulta en la siguiente salida:


Los numeros son iguales
c
que se hicieron ilegaron a ros resultados
:::$ffi::fil"rtos correctos y er prosrama

Fin del Ejempto l.i


Ejemplo 1.2: Determinar si una persona
es de mayor de edad
Una tienda que expende licores est
interesada en determinar si sus clientes
superan la mayora de edad (21 aos), para cumplen o
para resolver el problema se evitar nacer una venta ilegal. El algoritmo
muestra a continuacin:
Paso l: lngresar la edad def cfiente.
Paso 2: si ra edad es mayor o iguar
a 2r, entonces ra persona es mayor de
edad.
Paso 3: si ra edad es menor a 2r, entonces
ra persona no es mayor de edad.
El programa c que mplementa este algoritmo se
da a continuacin.

unidad 1: Estructura oe cotr' oEEelon


Volumen 2: Estructuras e ContrienC_J

@ Copyright tBM Corp. 20OS


Los materiales delcurso no pueden ser
reproducidos en parte
o en su totalidad sin el previo permiso
escrito de lBM.
o
o
Gua del Estudiante
o Introduccin a la proqrama3ton con C
o El cdigo C comienza aqu...
o a,
IE
\v .i*eu::_C.:t)
o -
2 nain O {
*_;.C_:Cie

o : l:,-_ e:a 1,.


o - / * Aceptar Ia e,ciad de1 Clien
o te * /
. ::-:,-_:,"_-:.::e.c: _a edad d:_ c-.-
o 6 sca:i,,?C,,,&ecad),.
o 7 /* Verifi_car si 1a ed.ad del cl_rente
o E ri (e:ad
es mayor o ign:al a 2l airos *
/
>: 2i,
o I

-: ^*r--
_ _.. --,',--
\ :_ c_ : ::.-, + :.-:-.:
oI I
f. ^
,_

o ',a
:on f a niayo::ia cie edad\:,,)
o :2i ,.

o Ef cdigo C finaliza agu...


o
o Fin del ejempto 1.2
o se puede escribr ms de una sentencia en una msma
o ";"' si se desea eiecutar ms de una sentenca que lnea separadas por el carcter
siguen a la senienca if, se
deben encerrar todas estas sentencias entre
o eS que si eciad
llaves 1 r. La desventaja de ste mtodo
o ,_, esto usando la construccin if _else.
o
o 3. La Construccin if-else
o La forma generar de ra sentencia if-erse se o,a a continuacin.
o rf (condicin) {
o senLe: i:aJ,.
o
o j
sentencian;
o c l <c I
o sentencial;
o
o -centenc1an,.
l
o
O si la condicin es verdadera,entonces el conjunto de sentencas dentro
llamadas sentencias "compuestas", de las {},
o sentencias compuestas dentro de las
sern ejectadas. si sta es falsa, entonces
las
{ } que siguen al et_se sern ejecutadas.
o
o A continuacin se muestran argunas construcciones
vridas de if_erse:
o
o
Io "(|
Volumen 2: Estructuras Oe ControiE
C Unidad l: Estructura Oe ControlOe Oec,sn S

@ Copyright tBM Corp. 2005


o Los materiafes delcurso no pueden sr reproCucidos
en parte
o en su totalidad sin el previo permiso escrito
o de lBM.
o
Introduccin a la programacin con C
Gula del Estudiante
if(a > 0){
Printf ( "Positivo\n") ;
)
else i
printf ( "No Positivo\nl') ;
)
if (disc < 0){
printf ( "Las raices son imaginarias\") ;
)

else {
pr intf (',las raices no son imaginarras\n,, );
]
A continuacin se ilustra el uso de estas construcciones a travs
de un ejemplo.
Nota 1: El cero no es ni positivo ni negativo. En los ejemplos
postvos
se esperan nmeroq
como entrada, por lo tanto el ce no ser considerado una
entrada vlida.
Nota 2: En el ejemplo anterior el uso d llaves es innecesario
debido a que cada
condicin al ser verdadera ejecuta una sora sentencia.

Ejemplo 1.3: Encontrar et Mximo entre Dos Enteros


- Revisado
se puede escribir un programa en c que sea ms conciso para este problema
usando
la construccin if-er-se. El programa es auto explicativo.

Paso 1: Ingresar dos nmeros enteros.


Paso 2: Verificar si un nmero es igual a otro.
Paso 3: Si no son iguales verificar si el primer nmero ingresado
segundo.
es mayor que es
o
Paso 4 : Si la condicin a evaluar en el paso 3 es faisa entonces
el segundo nmero
ingresado es mayor que el primero.
Al momento de ser determinado el mximo vafor entre ios dos nmeros
ingresados,
dicho dato debe ser mostrado.
El programa C comienza aqu...
1 #inc-l-ude <stdi-o. h>
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 Volumen 2: Estructuras de Controlen C 6

@ Copyright IBM Corp. 2005


Los materiales dercurso no pueden ser reproducidos en parte
o en su totafidad sn el previo permiso escrito de lBM.
:F
OI Gua Cel Esiudiante
__ Introduccin a tlproglgr"cin cor: C
ol Verrfi-car si el valor de x es mayor que e1 de y , ,.
o l(
of ': ix > _\'/

of -;-!a/tf--
!'-11-ul \ l- rL=..-1ll- \a_:cr es: e^^l\'l

ol ,/- Verificar si e1 valor dexes que el de Y ",t

of ^t ^^

r
ol" P-::-_: :_ ].=::_:.-a i-;_::

ol aqu...
ol
ol
ol 4. La Contruccin if Anidado
rl Ejemplo l'4: Buscar el Mximo de Tres Nmeros
ol cuando se plantea el problema de determinar
Enteros sin usar otra variable
ol es pensar en utilizar una variable auxiliar
ei mximo entre tres nmero, lo comn
oue permit"
ol primeras variables y luego ese resuftado
compararlo "h"""nar
con el
el mximo entre la dos
tercer dato de entrada. El
oi siguiente cdigo busca rsolver el planreamiento
sin usar otra variable a travs del uso
de una construccin if anidado:
ol Paso l: Ingresartres nmeros entei-os.
el Paso 2:Verificar si los tres nmeros son iguales.
ol
j'c Paso 3: si no son iguales verificar si el primer
segundo.
Paso 4: si la condicin a evaluar en e] paso
nmero ingresado es mayor que es

3 es verdadera, entonces se verifica si


a el primer nmero ingresado es_mayor que et tercero.
Si es as ef valor
o mximo es el primer ciato cao'o. si n es
as er mximo valor es el tercero.
o Paso 5: si fa condicn a evaluar en el paso
3 es farsa, entonces se verifica si el
segundo nmero ingresaoo es mayor que
o valor es el segundo ciato ciaio. Si n es
el tercero. Si es as el mximo
o El cdigo C comienza aqu... "" "i
mximo valor es el tercero.
o
o i incl-ude <stdlc. h>
marn O
a inj
{
v t " Lt
o Y t -.

r::intf ( "rngresar tres e:---eros separados por


o scanf ('?d 3d td,',&x, &y,&z);
espac-ios: \n,,) ;
o ,/* Mostrar e1 valor de ros tres nmeros
o enteros */
rrl-nrr ("EI va1or de x es: ?ci\n,,, x);
E t arrl

o PI -r-nEr ( "81 valor de y es: ?d\n,,, y)


^eiFrC
t.rr1

;
o r,rtnrr("E1 va.for de z es: td\n,,, z);
n-i-+/?rrr

o /* Primero verificar si x es igrral. que y *,/


o if (x :: y)
o-, Volumen 2: Estructlras Oe ControGnT
J Unidad 1: Estructura Oe Coffi
a @ Copyright tBM Corp. 2005
Los materiales delcurso no pueden sr
o reproducidos en parte
o en su totalidad sin el previo permiso
escrito de lBM.
o
t
f ntroduccin a la pro
I Estudiante
72 * Cuando x es igrral. . y se verifica
si x es igrua! z */
13 if (x := ,1
1A
prj-ntf ("Los numeros dados son iquates\n,,),.
15 ,/* Verificar qlu.e x es
mayor que y */
16 if(x>y)
I1 /* \/erifi-car si x es mayor qoe z *
/
18 f (x > z)
19 ^+ [| rtr1
vrrrrLr
^ri .-L va-Lor maxl_mo eS: gd\n,,, x)
,.
20 e-lse
27 ,/* Sino z tiene e1 mximo val:or */
22
i]rrrrL- (..L^ \,a_Lor maximo es: gd\n,,, z);
Y;--i/rt-

23 g: ^^
^t >e
24 Verificar que y es mayor que z - i
25 i: ty > z)
26 pr::l:: i "E- _,. --: ;:]:x::.1 s : .:
d\n,,, y) ,.
21 EI>=

28 rf (z > y)
)q / * La waria.ble z ti_ene eI nximo val_or -,/
- ^-
e!-r-__ I :_ -.-:tO: ;aX.;:,: :S: ?d\::,,, Z) ;

El cdigo C finatiza aqu...

er mx,mo varor entre ros dos nmeros insresados,


i:ilil:"8: ;iJff:?fi:ado o\
Fin del Ejempto 1.4

se ha usado una nueva estructura en estos ejempros.


if.
sentencia
se us un i: dentro de otra
Esto se llama construccn if andado.
correlacionar cada erse con su correspondiente if es bastante craro,
if(x>z)
^*i rnLr
|Jr ( '.L-L ValOr
*! r / r.ra
maXimO eS: gd\n,,, X) ,.

est emparejado con:


else
printf ( "Ef valor maximo es: 8d\n", z);
La primera sentenca i f
if (x > y)
est emparejada con:
el-se
if (y>z)

Unidadl:Estrrct@ Volumen 2: Estructuras Oe CortrolGn


C T
@ Copyright tBM Corp. 2005
Los materales del curso rio pueden
sr reproducdos en parte
o en su totalidad sin el previo permiso
escrito de lBM.
o
O
Gua del Esi-iCiante
o
o
O ;:"$.:il?,"t;: ,11H,,;"n oT'.."1.J0,"
anterior es una construccin ii
o En el programa anterior, se pudo
o entender er emparejamiento
de ros rf_erse,
,JJ o" ,olno,in por r" "t",
o i:ff'?X'ffiT"0?;;:#;'
proporcion"
?:::',"T:"1:::
'lgrlas' ya que permite es esenciar
o rnryo. claridad. una fciL lmprension v
o Ejempro r's: Determinar si
un Nm"ro ,nru.o de Tres
o Dgitos es patndrome
considere la entrada de un nmero
entero positvo de tres dgitos.
o si ste es un parndrome
. ;r;i;;rome es una parabra se debe determinar
misma forma de derecha tJ"r o un. nmero que se ree de ra
o como de derecha a izquierda. por
ejem pro, 121 y
er arsori!1ra oetermnarr
o :iiff:r?alndromes ,n dado es [arndrome es
o "nt"ro
Paso l: lngrese un entero positivo
de 3 dgitos num.
o Paso 2: Ertraer el digito izquierdo
y el derecho.
o Paso 3: Si rzc;_::_, = d=recho entonces
o El cdigo C comienza aqu...
num es un palndrome.

o I #l:rl- - j= .s-_t_. .--


o 2 main O i
O 3 i *.-*
are
^! .iJji./
a 1, ^- i ^+.
p::nLt(,, /
_:J_:=_, J:, j=:+::.c-;

q (& 5
I._,1_,es;: _:.:_j: ::::c erte::c
scarf(',?d,,,A:-:r., ;
de 3 diqitos:\n,,),.
o 6 /* yerficar - que e-!er :rec
.tume.c de entrada es posa
o -)
' :-,
lr(num :"=
=?ll .., vo * /

o I -ri-- -.'
j,,,
i I
' i :--- .^:' '::::' posil i vo, numero \
o , l- -
ar1vd,:.c,. : :.,,,:._: ;
o lc ]
or 11 ,/* Verificar qrre g4 a:.*ts:(j
a-- el nme-c ingresado es
de 3 dgitos */
oi 1,2 else
.i
ol
13
1,/
if (num <: 99 I I :run >999)
p::-.--: (,,D:c
{

Ld-(J 'ncorrecto' ingrese


i5 -----..t un numero \
of de 3 cigiros\n ,,);
\6]
ol 77 else {
OI 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,.
((J VolumenZ,@
Unidadl: gstruc@
@ Copyright tBM Corp.
Los materiales delcurso 2005
no pueden ,i r"'prooucidos
o n su totalidad sin elprevio en parte
p"irirJ escrito de lBM.
Introduccin a la programacin con C Gua del Estudiante
24 / * verificar que er d.gito izquierd.o extrado es ign:ar aI dgito
derecho *./
za i-f (izquierdo :: ierecho )
26 ,/* Entonces.el nmero es palindrorre */
21 prrntf("8d es un numero palindrome\n",num);
28 el-se
29 /* Entonces este nmero no es palndromer */
30 ::t;rtf ("?d no es. un nulnero palindrome\n,,, num) ;
JI I

32 )

El cdigo C finaliza aqu...


Se recomienda que se realce la traza del programa anterior para dos
conjuntos de
entradas diferentes.Es recomendable intentar la{raza con los valres gi3
v sss.
Fin del Ejemplo 1.5

5. Expresiones y operadores Lgicos y Relacionales


Se sabe que la parte crucial de la sentencia if es la condicin y que
ella es cualquier
expresin relacional que conduce a verdadero o falso. Las expre
iones relacionales son
aquellas que se forman con una combinacin de identificadores,
constantes y
expresiones aritmticas, todas enlazadas a travs de un
conjunto de operadores
relacionales. Los siguientes. por ejemplo. son todas expresiones relacionales
vlidas:
A>10
(a-25) <= max
o
. b<=0
(b*b -2.a) < (c.e)/2
5.1 Operadores Relacionales

Algunos de los operadores relacicnales que se pueden usar para formar


expresrones
relacionales son:
Menor que.
Menor o igual que.
Mayor que.
Mayor o igual que.
Todos estos operadores pertenecen al mismo grupo de precedencia que
es menor que
los operadores unarios y aritmticos. La asoctividad de la evaluacin
es de izquierda
a derecha. Los operadores relacionales se usan para formar expresiones
relacionales.
Las expresiones relacionales siempre producen un valor de verdadero
o falso, tal como
se mencion al comienzo de la unidad. En C, las expresiones relacionales producen
1
para verdadero y 0 para falso.

Unidad '1: Estructura de Control de DecisiOn Volumen 2: Estructuras de Controlen C


@Copyright tBM Corp. 2005
1O
?
Los materiales der curso no pugden ser reproducidos en parte
o en su totalidad sin el preio permiso escrito de lBM.
o
O Gua del Estudiante
o lntroduccin a la pi-ogramacr^
cc C

o 5.2 Operadores de !guatdad


I o >e pueden usar ios siguientes operadores
de igualo'acl en expresiones reiacronales.
o lgual a
a r= No igual a
O Effos pertenecen de precedencia separado por debajo
I relacionales' Esto ".'n.-g'uoc
signifi-ca qr" un-rna expresin que de los operadores
invorucra operadores relacionales
o como operadores de igualdad, los
operadores relacionares se evaran
precedencia' La asociatividad con una rr.rre
a de los operadores es de izquierd"
ejemplos vfldos del uso de los operadores "ru"ha. ntgunos
oe iguaiJal pr"runtan" a continuacin:
""
o a-

o 5.3 ExpresionesLgicas
o
O I Las expresiones relacionales conectadas
expresiones lgicas que sr3mpre producen por operadores fgicos se oenominan
o I retorna una expresin logica un varor-Je verdad".- o rtro.
realmente un eniero: er valor de Er varo qus
o
". ei valor O.
representa por el valor 1 y also por verdadero se
o I
5.4 Operadores Lgiccs
o
o i il:rr:'i:r,:rt;f:r::?j;. oceraoores tgicos, lamados
.l
o 6; Y (AND)
conectores tsicos, tos

1,0 r O (CR)
a NO INCT)
o isicos para combinar expresiones
o ;:#::? :::'r'".'";fl:j::' rsicas Arsunos
a l _ : :: :._i: !,
..,
.:
o' '- :- :, ; :,-::.: l: _-,
, ^ ?, 2 l: 0)
o El operador lgico a a retorna
el valo
o verdaderos, sio retorna er
varor o. ;ff :'i".l?H g:X?,ff1H;:ri?il;:"J
d valor de FALSo (rarsr) slo
si ambos operandos son farso, sino retorna
o ::i::l#,'"'L:i,"#,"':iilU:*:j:,n" n,"u" r,'0" operadores en ra'ERDADER.
rabra 1 1,
o
a Categora Operadores
Unarios Asociatividad
++- Derecha e izati"rrl
Aritmetica (multiplicacin,
orvtstn, mdulo) */z lzquierda a derecha
Aritmtica (aOciOn,iuOJEon)
I +- lzquierda a derecha
----
lzquerda a derecha

VolumenZ: gstr@ Unidadl:Estructuffi


@ Copyright tBM Corp. 2005
Los materiales delcurso no pueden
sr reproOrcidos en parte
o en su totafidad sin el previo permiso
escrito de tBM
Introduccin a la Gua del Estudiante

lgualdad lzquierda a derecha


Y (and) lgico && lzguierda a derecha
O (or) lgico lzquierda a derecha
No (not) lgico lzquierda a derecha

Tabla Ll: Jerarqua de Operadores

A continuacin se aprender acerca de un operador que tiene tres trminos, llamado


operador ternario.

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
ternarios. Si la condicin evala a verdadero entonces la sentencia despus del signo
de interrogacin (?) se ejecuta, s no la sentencia despus de los dos puntos (:) se
elecuta.
_\ a. 3:_'! e::]a:]e:C: --OnlrC,n Va-lOr FaISO;
Un ejemplo del uso del operador ternario es el siguiente:
(a::b) ? p::nti(" Ig.*a'e"',:." : ::_::::l"lic soi-i iguales\n,,);
El operador ternario tambin se puede usar en sentencias de asignacin como sigue:
o-au,

b:8;
y=1:::h\ 2 : . l-'.

La condicin a == b evala a falso y la sentencia despus del : se ejecuta. Por tanto, x


'toma el valor de 8. Los operadores ternarios permiten el uso conciso de una
construcci 1f -ef se simple.
Ejemplo 1.6: Usar el Operador Ternario
Es posible escribir un programa ms conciso en C para buscar el mxjmo de dos
nmeros usando el operador ternario. El programa que se presenta a continuacin es
autoexplicativo.
El cdigo G comienza aqu...
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);

Unidad 1: Estructura de Control de Decisin Volumen 2: Estructuras de Controlen C 12

@ Copyright IBM Corp. 2005


Los materiales del curso no pueden ser reproducidos en parte
o en su totalidad sin el previo permiso escrito de lBM.
o
o Gua del Estudianie
o lntroduccin a la prograinacjon :o: :
o 9 /* Yerjfrcar sr e_l nnero1 es mayor
maycr que sl ne:c2 entonces muestrao-"re el- nnero2, s el_ nnercl es
o r-nt.erroEa:ior (?), en caso contraric el mensa je despus ciel s- :rrc
Io o-!te est despus de l_os oos
o Puntos(:) -/
10 (nunl ) l-l,?) ? p::intf("Et ma>:,mc -,'arcr
o es: ?d\n"rrumi) :
r:rr1tI (''l r ,a>:.nLc ,,af or es: ici\:t,,, -'rm?', .
o .rl l
^-i-*a,rf-i

o
o El cdigo C finaliza aqu...
o I
El operador ternaro es equivalente a una stmple
o
I

el siguiente ejemplo:
sentenca if, tal como se muesrra en
o ,/* Verificar qrre eI noero 1 es mayor que el nmero -/
I
2
o I if (nunt>nun2) i
o / * S e1 nmero 1 es rnayor que eI nmero 2
o - -i ri,*r
:- -. ( L_ ,aX:mO varci es: '::,i:r',,
o l

o efse {
* S el nmero 1 no es raayor que
O, / eJ- nero2 - ,/
p:i.tf ("El maxirn: valc: e.'.: :d\,,, run2
o ) ,.

]
O
o Fin del Ejempto 1.6
o c Ejempto 1.7 Cantar los Das en un Mes
o
o El usuario ingresa un n,'nero entero entre 1 y 12 que
representa Enerc 2 r=presenta Febrero y asi significa er mes. Aqu 1
o suiesvamente hasta llegar a Diciembre.
El problema cosrst= 3-: escibr un programa que
o tome esta entrada y muestre el
nmero oe cas oe ese mes en particular. Asuma
que el mes de Febrero tlene slo 2g
o dias Para a'/u'ai a resci\'ai este algoritmo recuerde
la frase usada en la escuela:
o "Treinta das iienen Septiembre,
Abril, Junio y Noviembre; todos los dems (excepto
o Febrero) tienen 31 das,
o Usando esta rima, se puede escribr un programa
o un mes Daoo que el algoritmo es sencillo s
para encontrar la cantidad de das de
va a escribir directamente el programa.
o
o El cdigo C comienza aqu...
o - #'nc-uie <sri1o.h>
o rllc_-l
j- / \
{ I
r
J

o 3 /' se declaran 1as variables para almacenar eI mes y er nmero de


das del mes "/
o 4 int mes, dias;
o
o
o
5
o
I Volumen 2: Estructuras de ControGn C
Undad 1: Estructura e Controt OeEecsio^

@ Copyright tBM Corp.2005


Los materiales del curso no pueden sr reproducidos
o o en su totalidad sin el previo permiso escrito
en parte
de lBM.
o
o
_ la_ programacin
Introduccin a . con C _
:_ Gufa del Estudiante
5 /* se acepta er valor del mes por parte del
usua-ro */
6 printf ("Ingrrese el mes, gue se encuentre
entre I y 12 :,,) ;
1 scanf("gd'/ &mes);
C
8 ,/* Verificar Ia va1idez de ]-a entrada */
9 if (mes >: 1 && mes <: 72) t
10 /* A este punto .l-a entrarta
es vl_id.a *,/
11 if(ms5::9 ll mes:=4 il mes_:g ll mes=:11)
72 '/*.Treinta dias tiene septienbre,
Abril , Junio y Nowien-b re * /
13 :
dias 30;
1^
else
15 f (mes :: 2) /* Excepto Febrero *,/
i
t-6 dias : 28;
71 else ,/* Todos .]-os dons tienen 31 * /
18 dias : 31,.
I9 pr_r;-.-L: (,'E-l numero de d_ias en e-l-
I -
mes ?d es ?i\n,,,mes,
^- -
rJ'i :<l
20 ]
2! ^t ^^

22 prtr--,.' .'tr'r val_or ingresado no est


ti
^-l*-i
entre 1 y 72\n,,) ,.
21 I

22 1

El cdigo C finaliza aqu...

Fin del Ejemplo 1.7

'La recomendacin es realizar la traza del programa cudadosamente


entrada simples. con valores de

Ejempfo 1.8 convertir una letra Mayscula en


Mnscula y viceversa
El program a a realizar debe recb; corno entrada
u.na letra que puede ser minscula o
mayscula' cada letra posee una representacin
ASCrt fo que permite manrpular la
entrada y saber con exactitud cual letra ha sido
introducida por el usuario. Los pasos
para resolver el probiema se muestran
a continuacin:

Paso l:
Se lee una letra.
Paso 2: Segn el cdigo ASCII se calcula la diferencia
minscula y mayscula de cualquier letra, eso para la representacin
entre
numrco que permtir hacer la conversin. para
obtener el valor
todos los casos ese
nmero es 32.
Paso 3: Siendo a:91 , b:98 :!
--1aa y A:b5, 8:66, ..., Z:90 Sg
establecen las condicones oue permiten saber
si la letra introducida es
mayscula o minscula.

Unidad 1: Estructura de Controlde DeCIsn


Volumen 2: Estructuras de ConJrolenT-Z
@ Copyright tBM Corp. 2005
Los materiales del curso no pueden ser reproducidos
en parte
o en su totalidad sin el previo permiso escrito de
lBM.
o
o Guia Cer EstuCiante
o Inroduccior a la pro;-ama:rcn co
C

o ,l.A. Si es minscula' al vafor ASCII que


la representa se le resta la diferenca
calculada en el paso 2
o
':ii es ffia/scula, al vafor ASCII que
O la representa se le suma la diferenca
mencionada. Er resurtado obtenioo
o p"r" de ros casos representa
et cdigo ASCil de ta conversin ",l"rq;;
de ta tetra l",
o Paso 4' Se muestra en pantafla
la representacin de la letra solicitaca.
o El cdigo C comienza aqu...
o _:_ - _ .. -: . . :_ : . ; )
o -
=
l._ -

O
o
o
o :.'<l=:l_.,,,ra,',&cn);
o de direrenc:-a nu-u:'ca enrre rocia
lo"- ;.:::t: i) e-tto" minscura v
o
: :':=''-'A',)
o /" Er resultado entre cualquier
letra es 32 -/
i j (ch-\:97)&& (ch<=I22) ) /- s
o J
{ es mrnscu]a - /
cr-:d-if,. ,/* Se transforma en mayscula ,,/
o r^-f -
o err L! v_f ,

o ri ( icn>:65)&& (ch<:9C)&& (en::o::._;)


o
o
I l
ch+=iif ,-
i /, S es nayscu1 */
/, Se transforma en mi-nscu1a * /
o Jrrj,u.. '':u Core-Lat.i,a eS: ,:,,.:-,,,,::_i:,
o ;

o El cdigo C finafiza aqu...


o El cdigo anterior utiliza una
varable liamada enrro, cuyo
o concjcones estabfecidas en aporte ar ejercicro segn ras
los rf es impedir que arguna retra
o mnscula y maysculaala vez.
Existen otras formas de sentencias
sea considerada
o er pranteamiento especificado que o""rionaran if ms adecuadas
ifl:oi::"rver prescindir de dicha
o
o Fin def Ejempto LB
o A continuacn se expricarn ras
o diversas formas de sentencias if.
o
o
o
o
o
fi
;o !,
Volumen 2: Estructuras Oe ConiroGnT
Unidad l: gstru

@ Copyright tBM Corp.2005


fo Los materiares delcurso fro pueden
sr ieprooucidos en parte
!o
,O
o en su totalidad sin el previo permis
escrto de tBM..

o
Gula det.Estudiante

7. Las Diferentes Formas de sentencias ir


se han estudiado varias formas de la sentencia
se listan todas stas en las lneas siguientes:
if en esta unidad. para conveniencia I
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
j

4 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 f \vvrrqr!rvtt/
44 lrA I i ^ r
!\

. t t j
-^-:l l_!__-. ^ ^-,

--3- '-t ..- q=nren-


--l: r -

^- ^^ |

:-+ti-_a u:la qFntcnni:c.


.'

]
^^
^t >c
sa

E.- ecuta u:a sola sentencia,.


Es fcil cometer un error en la condicin de la
construccin
el operador incorrecto. Al observar el siguiente piojramaif, principalmente si se usa
afgunos de
escrito en c se reflejan
estos inconvenientes.

Unidad 1: Estructura e Control Oe DecsOn


Volumen 2: Estructuras de Conirol en C tO
@ Copyright tBM Corp. 2005
Los materiales del curso no pueden ser reproducidos
en parte
o en su totalidad sin el previo permiso escrito de lBM.
o
o Guia del Estudiante
lntroduccio:l a la p
o
o I

a ?
o
o
o
o
o s"cJ e-
o rS
tj-t

o prrtlL-
-Fi --: / lrrl
t L_L
o
o Ft cdigo C finaliza aqu...
o
o Fi pt-ograma anterior es un programa muy sencllo. se supone
postivo y verfca s es cero o difrenie de que toma un nmero
o tero. Es extremadamente simpre y a prmera
vrsta parece correcto. Asuma que se compla el programa
y se ejecuta.
o Se ingresa 2s y el programa muestra como salda
O. lo sigurente:
tr_1numer:o C es ciist j l-.o de :e:c
!r
a intentar pero con er vaior. 2so, o e inciusive
ol ::1,::g: -25. En cada caso, er programa
o El numero 0 es Crsin:c oe cero
o Note que la salida es la misma tambin para el
valor de entrada o. El problema con el
o pi-ograma anterior se debe a que se desea
escribir la primera condicin sigue:
o if (x:: C) "o1o
o En vez de esto, se escribi.
o rf (x: 0)
o Esta sentencia asigna el valor de 0 a x. De manera que
o astgnacin de 0 a x resulta en un valor falso
en la sentencia if, la
o sin importar el valor de entrada que
indique el usuario' Dado que la condicin del
ir evala a falso, fa porcn del etse de
o la sentencia i f siempre se ejecuta:
o et se
o Irrrnrr
^-l -- ( Lll numer ?d es distinto de ce:o\n",x);
a /\\r

o cons ;'ere a continuacin otro eror comn que


ros programadores comenten
o frecuentemente. Asuma que se desea escribir
er siguiente cdigo:
o if (x > y)
o printf ("x es mayor gue y,,);
o En rez de esto, escriben el siguiente cdigo:

t if (x > y) ;
t Printf ("x es mayor gue y',) ;
li
p
lr
t Volumen 2: Estructuras eEntrot enT Unidad

@ Copyright tBM Corp. 2005


l: Estructura de Control d OecOn Iz

t- Los materiales def cuTo no pueden ser reproducidos


en parte
io o en su totalidad sin el previo permiso escrito
de tBM.
o
o
Lasentenciaprintfseejecutasinimportarsisecump|e|acondicinx>
Esto sucede porque si la condicn evala a vERDADERo,
el computador ejecuta una
sentencia nufa simbolizada por ef carcter ,;, que sigue
cualquier caso, la sentencia printf se ejecuta. Si la
a la condicin (x > y). En e
condicin evala a FALS9, la
sentencia nula se salta y la sentencia printf se ejecuta
de todos modos.
El lenguaje c es un gran lenguaje, pero tiene caractersticas que
usuario se mantenga alerta todo el tiempo. Usar scanf("o/od,,, requieren que el
scanf("%d', &num) es otro enor comn que cometen ros progrnul nurn) en vez de

A continuacin se estudiar otra estructura condicional, la


estructura switch - case.
8. La Estructurl switch case
una construccin anidada j-: ... er se puede ser difcil de
entender. c provee otra
construccin, la cual permite escribir programas cuando
un nmero de condiciones
alternas debe ser validada. Esta construccin se le denomina
sintaxis es la siguiente.
switch... case, y su
swrtch ii'a_a:- = .'

' a= c: --:
j::.-_=:-l-:S,.
;_^ _ ,.
-_==.-,
. C1S+'.-: -:.':

:;=:;, "."

ca se va r cr:-:
sen:enc:as,.
brea k,.
dof :rrl .

sentencias,.
break;
)

si la sentencia break no est presente la ejecucin fluye rgicamente


siguientes del prximo case, lo cual comnmente no se desea. a las sentencias
explican con un ejemplo esta construccin para entenderla.
A continuacin se
Ejemplo 1.9: lmprimir los Das de la Semana
Escribir un programa que tome como entrada un valor entre y
1 7 e imprima el da de la
semana que coresponde al nmero que se ingres. 1
denota Lt oi" r-ln"s, 2 Martes, y
as sucesivamente. si la entrada no es vlida s debe mostrar
un mensaie.
El cdigo C comienza aqu...
1 #i-nclude <stdio. h>
2 mainO {

Unidad 1: Estructura de Control de Decisin Volumen 2: Estructuras de Controlen C 1g

@ Copyright tBM Corp. 2005


Los materiales dercurso no pueden ser reproducidos en
oarte
o en su totalidad sin el previo permiso escrito de lBM.
o
o Gua del Estudiante
o IntroCuccin a ia proqrarncin co r-

o _ a:_
atrr /r: -.

o Aceptar e.l- nmero r por parte del usua:.-o


ol cie Ia semana . / / crue represent.a

ol -_f rr_l ( _n::esar un \-e.c: e:.:-+ : .. 7 cue:dentl:iq.re


^-l-!-/rr-

urr

ol E /* Verificar
-s canf ( " Ed ",

.inmero
&num dia ) ;

ol lndica aJ- usuario*.que el nmeroe,et entre 1 v 7 En caso contrario


es. j-nvlido
se 1e

oi 9 sv f b /nr1
\rru1L,
j
*_o/ - \ Ir
^

oi 10 -<o rr - <
lJ_ ar L ! ES

oi l1
r2
a 13
: S

o ,1 .. -,ir++ ttt. j
P:rrrur \
O _5 hro: l .

o 16
i- r lrr L !
a 11 hro: i. .

o 18 yarrjLr
: /tt_.-
\ :_ .

o l^-^-r..

o ;; aq4 F. nvi-+
Prtru!
ttt-'
\ :_

o 2I lre a k,.

o 22 a:a: 1. nri
14
nj- : I tt--
L
-
\

23

:I
]ra l, -

24 -icf :, I -. n-r r:
25
o c L LLaLLZd el swi-tch
O 21 )

a El cdigo C finafiza aqu...


o
o En el cdigo anterior cuando se ntroduce algn
permtido, se despliega un mensaje que entero fuera del rango de valoi-es
o unldades del curso se estudtarn mejores
muestra el uso de una vafidacinl En prximas
formas de validacin que permrtan que el
o usuario se recupere de algn ingreso errado
de data.
q
o 5:;-:r:::"1u: =:''tch" cas avuda ar prosrama a cambiara ra porcin de cdiso
Lrurlue :-j:: :- : -,-ar-c: (varor es igual
a 1, 2,3 y as sucesivamente). Esto es
q equivalente a io siguienre:

o ; f /^..*
*r \lluliL
:r
--c
^ :: _,

f i ,,r- 1 es l-unes \n,, )


I

? e-lse if".r.a
(num_i.a :: 2)
,-

? P::intf ("41 2 es Martes\n"


o ) ,.

e-Lse :-f (rur, dla :: 3


i )

? .

aut a Volumen 2: Estructuras Oetonten


l\J
I
C Unidad 1: Estructura de Controf de Decis-

,t. @ Copyright tBM Corp.2005


p Los materiales del curso no pueden ser reproducidos
o en su totalidad sin el previo permiso escrto
en parte
D de lBM.
Introduccin a la programacin con C Gua del Estudiante

ef se -f (num-dia := 1)
printf ( "El 7 es Domi_ngo\n") ,.

Fin del Ejempto 1.9


La construccin switch case es una construccin sofisticada para situaciones
como se present en el ejempfo anterior donde mltiptes construcciones
La etiqueta case default se usa para imprimir un mensaje
if se usan.
cuando la entrada no es
vlda.

La construccin switch -.. case se puede usar slo para


condiciones de igualdad. No
se puede usar para una condicin, tal como if (day_num <:
10). La variable en la
construccin switch case puede ser cualquiei tipo de dato que puede ser
enumerada (datos alfanumricos), esto significa que los tipos de
datos ffoat y
doubl_e no son tipos de datos vlidos.
Ejemplo 1.10: verificar la validez de una Fecha de Entrada

Dada una fecha como entrada de la forma da, mes y ao. El programa tiene que
verificar si la fecha ingresada es correcta El algoritmo y t progr"r" c p"r" verificar
la validez de la fecha se dan a continuacin: "
Paso l:
lngresar la fecha como dia, mes. ani-c.
Paso 2: S (dia est entre 11-311, mes entre y ar_: > O)
t1_12)
Paso 3: Si (mes es [g, 4, 6,IIl y ef dia
vlida.
Paso 4: Si no, si (mes 2 y dia o
dia <: 29), entonces la fecha es vlida.
Paso5:Sino,si(meseS[I,3,5,J,B,l0,72]yd1a< ^
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 cdigo C comienza aqu...


1 #lnc]ude <stdio. h>
) marn O {
3 int dia/ mes, anio,. /* anj^o equivale a ao */
4 rnt f echaVal-ida;
5 /* Aeeptar eI da, mes y ao de parte deJ. usuar:,o */
6 printf ( "Ingresar el_ Dia (DD) : ,,) ;
7 scanf ("Bd", e dia),.
8 Printf ("fngresar el_ Mes (MM) : ',);
9 scanf (',?d,,, &mes) ;
10 pri-ntf ("fngrresar el- Anio (yyyy) : ,,);
Unidad 1: Estructura de ControlOe OecsOn Volumen 2: Estructuras de Controlen C 20
@ Copyright IBM Corp. 2005
Los materiales del curso no pueden ser reproducidos en parte
o en su totalidad sin el previo permiso escrito de lBM.
.lo
Gua del Estudiante
o Introduccn a la progi-amacin con C

I i "
-q can i Ic);
( !
C ", 6:

r) Venficar
que el da ingresado es rt icic r1-"1\
o Verificar ql:e e1 mes i_ngresado es walido (1--L2) *
/
o rf ((dia >:1 && Cla <: l-)ee (mes >: _ e mes <
= _. !6-:._-, > 0, i
o Aqu el da ingresado puede ser wIrcio, se
verifrca si g] mes
30 das *,/
o
if((mes:- ! llriLes
o (cia <: 30 ) )
o fechaValjca = _;
o '- Verificar si e1 ao es bisiesEo -,1
o
o .
=:
:-
- oo \

a li (me-s:: 2 ,!& an'c z 113 ::


o __= - -:
fechaValida:
o Veri-ficar si e]. mes tiene
a e-se
o rf ( (mes - ir r,r=-- -- j *=re::* , I nes
o 1i mes -:9
o =ur-:t-ll_lc
: r;

o
of
^t -^

iecra r,'a-L . c= : 2;
o
.I

I - 1^^'

a
o
a
?d es una echa ccr::ecaa\,r",
a d. a,
o i_:sCA/
o cas e 2: p:r::tf ("?d ?d ?d es ula recha incorreci_a\n",
dra, \
a
o brea k;
t soJc 3: printf("?d %d %d es una fecha incorrecta\n"
I
^ \
^j
anio);
O brea k,.

O ] /* Fin del switch */


o
o
o
a^ Volumen 2: Estructuras Oe CotroG-
IU Unidad 1: Estructura de Control O Decis-

O @ Copyright tBM Corp. 2005


Los materiales def curso no pueden sr reproducdos
o o en su totalidad sin el previo permiso escrito
en parte
de IBM
a
o
Powered by TCPDF (www.tcpdf.org)
Powered by TCPDF (www.tcpdf.org)
Powered by TCPDF (www.tcpdf.org)
Powered by TCPDF (www.tcpdf.org)
Powered by TCPDF (www.tcpdf.org)
Powered by TCPDF (www.tcpdf.org)
Powered by TCPDF (www.tcpdf.org)
ol
or Gure dei Estudiante
lnt-n^l riA^
"rr'uJuuuJIt a
l^ --^ -
^ la Hrol-3-iaJrf- lf
o 8)
.^

o Cul es la forma correcta de acceder a un elemento


Cel arreglo defrnroc cc:nc
char xf_:l f5l;?
OA a) x
oi b) xlll
a c) x l-11 | .b, l
o d) x [0] t0l
O
9) Para un arreglo definido como flDat
o ,! f 3l i 3l , cul de los siguientes es un
o uso ncorrecto?
a) ptol 6i
o b) ptli t3l
o c) ptll t1l
o d) ptrl 21
a
a i0) Qu define un arregfo declarado corno .:,-- three
Lil t2l t3) ;?
O a) Un arreglo tridimensional.
o b) Un arreglo bidimensional.
o c) Un arregio unidimensional.
a d) Un arreglo de O dimensiones.
o
o
o/
o\
o
o
O
o
o
o
o
o
o
o
a
o
o
e
ri
a
_l
Votumen
Unidad2:Rne@
*l @ Copyright tBM Corp. 2005
Los materales del curso no pueden ser reproducidos
t? o parcialmente sin ef permiso previo escrito
total
de lBM.

o
tntroduccin a la prosiramacin con C Gufa del Estudiante

Respuestas a la unidad 2: Examen de Autoevaf uacin


1t
2)c
bn6l---
3)b
aL \'t3"'--'='l!---\
:!
s) ayb) \ *
6)d
7)b
8)d
e)b
l0) a

Unidad 2: Arreglos Multi-Dimen;,onales

@ Copyright tBM Corp. 2005


O
Los materiales dercurso no pueden ser reproducidos en parte
o en su totafdad sin el previo permiso escrito de lBM.
o
o Cua del Estudiante
lntroducciol a le ?rocrraot3^ :: - ,-
O
I A unidad 3: Laboratorio de Arregtos
o D
o Objetivos de Aprend izaje
a
o Al final de esta unidad, usted ser capaz
de:
I ' Emplear tipos de datos estructurados en ra sorucin de probremas.
a . Usar areglos unidimensionales y
t .
bidmensionales.
Aplicar arreglos a problemas con matrices.
a ' fv4anipular los elementos de un
arreglo tanto para arreglos unidimensionales
o como arreglos multimensionales.
o
O
o
t
o
o
o
o
o
d
o
o
o
o
o
o
o
o
o
o
O
I
o
o.
O;
o
o!
.l Volumen S: T
Unidadg:@
q
q , - @ Copyright IBM Corp. 2005
Los materiales delcurso no pueden
ser reproducidos total
q o parcialmente sin etpeniriso previo
eicrto de lBM.
a
o
I

I
Introduccin a la Programacin con C Gufa del Estudiante
I

Ejercicios de Laboratorio
I

l) Escrbir un programa en C que tome 10 enteros positivos como entrada, los c


almacene en un aneglo y los imprima. El programa debe ordenar el arreglo de tal I

forma que todos los nmeros impares aparecen en el tope seguido de todos los I

nmeros pares (en el mismo orden en cual aparecieron orginalmLnte). Este arreglo
ordenado de esta forma debe tambin imprimirse. Se puede usar otro arreglo pra I

resolver el problema. I

2) Considere una matriz cuadrada de orden n x n. Escribir un programa que lea los
I

datos de dicha matriz (nmeros enteros) y encuentre la suma de todos los


elementos en el borde.

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) Desarrollar un algoritmo que clcule el tringulo de pascal. La disposicin de dicho


tringulo sugiere que cada nmero sea la suma de los dos que estn encima de l:

11
121
1331
14641
a,

Unidad 3: Laboratorio de Arreolos Volumen 3: Tipos de Datos Esi--rcturados en C 46

@ Copyright IBM Corp. 2005


Los materiales delcurso no pueden ser reproducidos en parte
o en su totalidad sin el previo permiso escrito de lBM.
o
o Gua del Estudiante
tntroduccn a la programac,r:
o -_
O
o A Unidad 4: Estructuras
o Objetivos de Aprend izaje
o
o Alfinal de esta unidad, usted ser
capaz de:
o . Explicar cmo declarar estructuras
en C.
o
o ' tas estructuras en ra sorucin de probremas
ff;*;j J;:." a travs de.
o o Describir er uso de ros tipos de
datos definidos por e usuario.
o ' Definir uniones y explicar cmo
sus usos difieren del de las estructuras
o
o
o
o
o
o
o
o
o
o (,
O
o
O
o
o
o
o
o
o
q
o
it
i
?
?
o
Volumen 3

I? ('ul
@ Copyright tBM Corp.200s
Los materia tes det*:l:"j:::d:l
Unidad 4:

ser irooucidos
Estructural 47

p o parcialmente sin et permiso previo ellrto toral


de lBM.

IfD
lntrodurcin a la Prograacin co! C Gufa del Estudiante

l. Introduccin
En las unidades anteriores, se discuti cmo declarar tipos de datos bsicos coro
inr,
char ! 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.

Sin embargo, en el mundo real, se deben tratar situaciones para la solucin de


problemas complejos en las cuales se tenga que manipular entidades que
son una
coleccin de elementos de datos, cada uno de un tipo d'iferente. por ejemplo,
en una
universidad donde el registro de un estudiante debe tener, entre otras cosas,
un nmero
de lD (un char), un nombre (un arreglo de cnar), peso (un floar) y ta altura (un
f loat). Los tipos de datos son todos diferentes, pero existe una agrupacin lgica que
es significativa - un registro de estudiante. Para manejartales situaciones, C pvee'un
tipo de dato llamado structure.

Las estructuras, como arreglos, son capaces de manejar mltiples elementos de


datos
usando un nico identificador que los agrupa a todos juntos. Mientras los arreglos
contienen mltiples elementos de datos, todos del mismo tipo, las estructuras contienen
mltiples elementos de datos, cada uno de los cuales puede ser de un tipo diferente
(en
una estructura, los mltiples elementos de datos pueden tambin ser del mismo
tipo. be
manera que, en una estructura, los elementos individuales pueden ser enteros,
cjrcter,
punto flotante o un arreglo. Los elementos de una estructura se denominan
miembros.
Sea una situacin que involucra manejar las fechas de nacimiento de un grupo
dado de
personas.

Hasta ahora, el mtodo conocido para hacer esto era declarar tres varjables
como sigue:
enteras. taf o
' int dia, mes, anio,.
int di-a_nacimiento, mes_nacimiento, anio_nacimiento;
Sln embargo, algunas situaciones pueden requerir que se manejen diferentes
tipos de
fechas, tal como fecha de ingreso al trabajo, fecha de graduaci, fecha de matrimonio
y fecha de la .ltima promocin. Est claro que cad uno de las fechas anteriores
involucra tres componentes da, mes y ao.
Esta es una de las reas en donde las estructuras se usan. Las estructuras permten
que elementos de datos que tenga una lgca comn pero que pueden
ser de diferentes
tipos, sean tratados cohesivamente. Conidere una situacin de solucin de problema
que requiera el manejo de cinco fechas diferentes: nacimiento, ingreso ai trabajo,
matrimonio, ltima promocin y jubilacin. Estas pueden ser manejadaJcomo
sigue:
intdia_nacimiento/ mes_nacimiento, anio_nacimiento,. .
rnt dia-ingreso-trabajo, mes_ ingreso_trabajo, anio_ingreso_trabajo,-
rnt dia_matrimonio/ mes_matrimonio, anio_matrimonio;
int dia_ultima_promocion, mes_ u_lti-ma promocion,
anio_ ultima_promocion;
int dia_jubi_Ia:rc:., mes_jubilacion, anio_jubilacion;
Unidad 4: Estructuras Volumen 3: Tipos de Datos EstruttuEdosEn C 4g

@ Copyright tBM Corp. 2005


Los materiales del curso no pueden ser reproducidos en parte
o en su totalidad sin el previo permiso escrito de lBM.
o
o Gui::e, :s:uCiante
o
o Las operaciones que se hacen con las fechas son todas comunes,
no r:nDci-i3
especfrcada, como por ejemplo 'Encontrar el nmero de das
cD a fecha ocurri ms temprano'. Las estructui"as ayudan a alcanzar
transcuridcs :r:

esta ccnesron
o
o 2. Definicin y Uso de Estructuras
o Se puede definir una estructura en C como sigue:
o struct <nombre de la e-s:t uc-tua)i
o nLJ-IIIDrC_1 ,.

O m-iemb::c_l;
o
o mi emb::o_..
o |;
o struct es una paiabra reservada mandatoria El trmino (nombr=
Aqu, la palabra
o de fa estructura> es cualquier.nombre (usando las reglas para la creacin de un
identificador) que identifique la estructura. cada uno de los
o miembros, tal como
m-embro-l o mj-embro-2 es una declaracn individual para los miembros
o estructura' Los miembros pueden ser de cualquier tipo de dato, incluyendo
de la
arreglos y
o estructuras en s mismas. En el contexto de estructuras, los
trminos definicin y
o declaracin se pueden usar por igual. Se puede decir que se
est definiendo
estructura o declarando una estructura sin ninguna diferenca especfica una
o signficado.
en el
o A continuacin se presentan algunos ejemplos.
e
JH
o Ejemplo 4.1: Definir una Estructura
o ^^L- r

O
,

lrrL ul-4,

o fnt mes;
o lnt ai-r-lo,'
j;
o
o Esta es algo que ya se ha visto antes. sta define una estructura
llamad con iecha
o los miembros dia, mes, y anio, todos los cuales en esre caso, son
enteros. Sin
o embargo, no se puede poner int dia : 28 en una definicin de estructura.

o Nota: Lo anterior slo define una estructura. Ninguna variable est declarada
all. para
o declarar variables, se puede usar la siguiente declaracin.
o sLruct fecha nacimjento, :ngreso_trabajo, jubilacion;
o Cuando se dice fecha, se est refiriendo alcomienzo de la posicin
de memoria de la
o estructura definida anteriormente. cuando se hace referencia
a las
o nacimiento, ingreso-traba jo.' jubil-acion, se est refiriendovariables tal como
a una estructura
completa que contiene tres miembros.,l,r" desea hacer referencia
o individuales de la estructura en cada variable, se hace lo siguiente:
a ros miembros
o
o Volumen 3: TPos Oe Oatos estructurados en C
b (0 @ Copyright tBM Corp. ZOOS
Unidad 4: Estructwas 9

o Los materiaf es del grT::1!lr"den'ser iproo


o o parcialmente sin et permiso previo
ucidos tora I
de lBM.
o "itrito
o
Gufa del Estudiante
nacimi-ento. dia
j ubilacron. anio
Esto implica que el acceso se hace como sigue:
variab-Ie . ni embro
I
Ua vez que se ha accedido a los membros individuales
usando el operador . (punto),
se puede hacer uso de los miembros de fa estructura tal como
lo dicta ef tipo de dato del
miembro.

El siguiente es un mtodo para declarar variables de


la estructura fecha:
s-L:ii:: :e:ha nacimiento, ingreso_trabajo, jubilaclon;
Las variables de un tipo de estructura individual pueden
tambin ser declaradas como
sigue:
strjc: <nombre estructura> variabJ_e_1,
var_iable_2, ..., variabJ-e_n,.
La estructura f echa y las variables individuales pueden
ser declaradas como sgue:
<1- - ^r e F^^L^
_sulO
l

rnt dia;
int mes,.
int anio;
Jnacimiento, ingreso_trabajo, jubilacion;
El siguiente es otra forma de definirlas. c),
stattc struct fecha{
'I nl. air .

int mes,-
int anio,.
lnacimiento, ingreso_-,rabajc, jubilacion;
Note que las definiciones anterores todas definen la
misma estructura y variables.
Fin del Ejempto 4.1

Unidad 4: Estructuras Volumen 3: Tipos de Oatosffi


@ Copyright tBM Corp. 2005
Los materiales dercurso no pueden sr reproducidos
en parte
o en su totalidad sin ef previo permiso escrito de lBM.
O
o Gua del Estudiante
inti-oduccin a la Proqrara:ron c:n C
O
Ejemplo 4-2: La Fraccin Mixta como una Estructura
O
s'..-J -'. ':.,
o . ..:. r. _x:_:
:t: pat:r_e_err: e:a,.
o _.

_:.1 numerador,.
o i nt cienomi nado:;
o IA R.
o A y B son variables de un tipo de una estructura que es fraccion mixta.
o permite representar fracciones mixtas como por ejemplo 1T
Esto
o en la estru"tri" 0""0"
parte-entera: 1, numerador: 3 v clenorninacjor: . Tambin se puede definir
o esto como sigue:
o _struc I

o int pat:re_eltera,.
O I ta nUirLe]:aCiOr;
o : :.; denorninacio..
o
o Note que se ha omitido <nombre estructura>, l cuaf es opconal.
Las variables
o creadas A y B, tienen las mismas propiedades que la definicin anteror.
o Fin del Ejempto 4.2
o Ejemplo 4.3: Nombres de personas
o
o Se sabe que generalmente los nombres de las personas se registran como prmer
nombre, segundo nombre y apelldo. Se puede definir una estructura
o con el primer nornbre, segundo nombre y apellido como miembros.
llamada nonLbre,
o
o struct nombre I

char pr:'mer [2A) ;


o char segundo [20] ;
o char apellido [_a 5 ] ;
o I mi-Nombre;
o
o
Note que los miembros son arreglos, y
cada uno de ellos puede ser de cualquier tipo y
tamao. Se puede acceder al apelfido de Ia
varable miNombre como
o i:::Nombre.apellido. ste es, sin embargo, un arreglo de caracteres. se debe
o acceder a fas partes individuales se usa miNombre.ape]tidoIk],
donde k es un
o enierode0a44.
q trn esta estructura se tiene un espacio de 20 caracteres para
el primer y el segundo
q ncmbre y otro espacio de 45 caracteres para el apellido. Se puede
cmbiar estos
d valores si la aplicacin fo requiriere. Note que esta esiructura
tiene miembros, todos los
cuales son arreglos de tipo char. Por lo general, las estructuras pueden
.l mtembros de diferentes tipos, ellos tambin pueden ser
tener
algo similares como se mostr
er: ei ejemplo anterior.
q Fin del Ejempto 4.3
q, Volumen3: TiposOeOffi
r\ I
) Unidad 4: Estructuras 51
-t
@ Copyright tBM Corp.2005

IJ Los materiales dercurso no pueden ser reproducidos total


o parcialmente sin elpermiso previo escrito de lBM.

I
Introduccin a la prgramacin con c Gufa del Estudiante
Ejemplo 4.4: ,-,
struct dir:eccion correo{
"ttlr"t nombre mrNombr,.
char primera_linea l25l ;
char segunda_f inea l-25) ;
char cafl e[25) ;
char area [30] ;
char ciudad L25l ;
char codigo_postal f 9l ;
char pais l20l;
]
) yt ^.
Y/

Note que una estructura se usa dentro de otra en este


ejemplo. La estructura nombre
se usa dentro de la estructura direccion-co.rreo. Para
acceder al primer carcter
defprimer nombre de p, se le debe referir como sque:
p. mrNombre. primer.[ O]

s se requiere imprimir la direccin de correo en la variabre p, S pude


usar el sguiente
segmento de programa:
El cdigo C comienza aqu...
-1 //* upllxrrr
Tn^-i-;- a- la salida estndar la direcci_n de correo de 1a
estructura */
L
) //, up!!ur_r
Tnn*i*i- eI primer nom.bre */
r prantf("%s",p.miNombre.primer);
1 /* Se imprime un espacio despus de1 primer nombre */ a
5 pr:_ntf(" ,,);
r'- fmprimi-r e1 segrrndo nombre a J-a sal.ida estndar *,/
:::ntf ( "8s ", p.miNombre. segundo),.
,'- Se imprirne un espaci_o despus d.e1 segnrnd.o
nonbre *,/
t\.._rflttrr\_

,'- fmprimir a la salida estnda.r e1 ape11i do +


/
-: :' : -_ : i " ? s \ n,,, p . m-iNombre . ape 1 t i cic ),.
/ r^.-er!
Tmn-i;- l-
J-a. prinera
n-i--
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 */


c: - a-:: , " ? *"',:t ", p. cal-.le ) ;
Lu,Lrur- e.t-
//* Tnn-ii ^1 rea a 1a salida estd.ar *,/
p::::: l "! ",:1", F. a:ea),.
'/- rnprimir el nom-bre de la cru.rad a 1a salid.a estnd.ar */
c:::::i i "?s\,:1", p. c:ucad ),.
Unidad 4: Estructuras Volumen3: TiposOe@
@ Copyright tBM Corp. 2005
Los materiales dercurso no pueden ser reproducidos en parte
o en su totalidad sin el previo permiso escrito de lBM.
O
o 3-': o'ei :sudiante
o IntroCucci:n le Proora-r2^r.F
J * 'sv'J" .^-
uw ^
rmprirnir eI cdrg'o pcstal de la
o ^ - ciudad a la sal:-da est.ar -

o '-!. ,/, Imprimir eI nomlre


ciel pais a la sa]-ida estndar
o 25 orntf (,,?s\n,,,p.pai5),.
o Ef cdigo C finaliza aqu...
o
Esto ilustra como trabaiar con estructuras
o imprimi cada membro e fa estructura
en una situacin de programacin. se
o especificador de formato ? s.
i. recci on -correo como cadena usando el
o Fin del Ejempfo 4.4
o
O Ejemplo 4.S: Registro de Estudiante
o struct estudiante {
o s:tartc: non::a nmbe_es1-ud-iane,.
o char nun_id i 9l ;
O struc: recna :,ac_mienio,.
f-loat pesc;
O
fl_oat altu:a;
o int iq;
o J frlosofia [100] ;
O
En esta estructura, se ha declarado una
o varable firosofia que es un arregro
elementos, cada uno de los cuales es de 100
un registro de estudiante definido anteriormente,
o con m'embros' se puede referir al ao
oe acmento v ar iq del primer estudante
o esta cfase como sgue: en
o fi_Iosofia I O] . naclmi entc. an.1 o
o fi-losoflal0l.rq
o una estructura puede contener cualquer nmero
de miembros, los cuafes son
o estructuras en s mismas. Es tambin posble
tenei varios niveles de estructuras
una estructura. por ejempfo, to siguiente
O :::::Xrrfl::,[?j" es una dectaracin vrida
o st_:-uct externo {
o struct :rivell {
o st-uct nlvel2 {
o struct nivel3{
o n'i- V -

o l-1 3; ll stn de declaraci-n


*/ de Ia estructura
o 3

a
]I2; /* Ein de dec]-aracin de La estrucrura 2 */
o
o Jf 1,. /* En de dec]-aracin de 1a estructura
L */
]ext; /* En de declaacin de -r-a estrrctura
exterz,a */
?
? I Volumen a: Tip

@CopyrightIBMCorp.2005
Unidad : EstruczuEl Sg

? ,^ _, . ..
t
b
Los matenales delcurso no pueden
ser reproducdos total
o parciafmente sin elpermiso previo escrito
de lBM.

o
I

I
lntroduccin a la prodramacin con C Gua del Estudante
I

En una declaracin tan profunda como la anterior, se deben tener


cuidado cuando se I
accede a un miembro de la estructu ra. Para acceder a la variable
k declarada en
struct nivel_3, se debe hacer lo siguiente:
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.
Un punto importante a resaltar de la declaracin anterior es que la
variable de la
defincin de la estructura ms interna se crea dentro de la
definicin de la estructura
principal. se han llamado estas como rr, 12 y r3.
Esto es porque no se pueden usar
las estructuras ms interna sin declarar una variable, y no hay forma que
declarar variables de las estructuras ms interna fuera de la definicin
se puedan
prirrcipal.
de la estructura

Fin del Ejempto 4.5


Ejemplo 4.6: Inicializar una Estructura
Considere la siguente estructura.
struc: jrac- : ::. :.:::-_ai
l_n rar:e_::-:e:a/.
'ln- - *-- i-v.

;;;;;,._._:=,..,
j;
se puede asignar valor a la variable en la
continuacin:
declaracin misma como muestra a a
struct :a,-_-r-.:._:...:.: :a a : lI,3,4j;
se crea una variabre a, como se muestra a continuacin.
a . parte_eni_ e:a = _
a. numeracior - l
:
s. lan-i
s!rvrrrlrqvL- -^;^- /
-

Esto es justamente una representacin de la fraccn mixta 1Ta.


Tambin se puede
declarar la variable de la estructura separadamente e inicializar
los valores a travs del
programas como sigue:
struct f::accior :L, >::a
1nt parte_e:teua;
int num.eradcr,'
'i nt denomi nador;

]a;
a.parte_entera = 1;
a..numerador : 3;
a.denominador : 4;
Fin del Ejempto 4.6
Unidad 4: Estructuras Volumen 3: TiposOe Offi
Copyright tBM Corp. 2005
@
o
Los materiales der curso no pueden ser reproducidos en parte
o en su totalidad sin el previo permiso escrito de lBM.
o
o Gua del Estudianre
lntroduccion a la programacin con C
o
Ejemplo 4.2: Sumar Dos Fracciones Mixtas
o
o Asuma' que se requiere tornar dos fracciones mixtas como
entrada, sumarlas y mostrar
o el resultado' sean las dos fracciones mixtas e : r% y
3 1% respectivamente. para
o sumarlas, se debe primero convertir ros nmeros
a la forma numer:ador/cienominado.
o 74: (4 * 1 + 3) / 4 : 1/4
a Esto es lo mismo que
o (cie;rominacior * par:e_entera
o + numeradc-) / denom:-nador
o con esto, se tienen ambos A y B como 1 / 4. EI denominador
es
comn, as que ef MCM
es4'Porrotanto' A + B= (7 + 1) / 4:74/1.Eri4/4debeconvertrrseauna
o fraccin mixta como 3 (el cual es pa.rte-entera
o como un cociente entero) y 2 (ef cual
como mduto de divisin). Et MCM permanece como
a ::-::,::i::.0o,
vervlllraug'!. el

o Ef siguiente es er argoritmo para sumar dos fracciones


a mrxtas:

or Paso l:
Declarar las fracciones mxtas A y B.
a Paso 2: lngresar ras dos fracciones mixtas positivas y varidarras.
o Paso 3: Covertir e a la forma de fraccin impropia x.
o Paso 4: Convertir e a la forma de fraccin impropia v.
o Paso 5: Encontrar el MCM de x y v -
o Paso 6: Formar Z: ( (l,t)CM ,/ X. denominadcr* X. nume-adc:
) +
o (MC!4/Y. cienoni nador* ) y. rumerador
) / MCM
o Paso 7: Convertir z en la fraccin mlxta c.
o Paso 8: lmprimir A, 3, y c.
a El programa en C, basado en el algoritmo anterior,
se desarrolla usando el refinamiento
o paso a paso.
o El cdigo C comienza aqu...
o
o #include <stdio. h>
) marn O
o J
{

/* Declaracin de Ias estructuras * /


o 1 srl-uct f raccion_mixta {
a : rnt parte_entera,.
o A
int numerador;
o 1
int denominador,.
o u )7\
)rt Dl

o o struct fraccj_on_impropia {
o 'tn
int numerador,.
o 1t int denominador;
a Volumen S: f
:l
?\t
Unidad 4: Eshucturas 55
I

? . @ Copyright tBM Corp. 2005


tos materiares dercurso no pueden ser reproducidos
I total
o parcialmente sin el permiso previo escrito de tBM.
o
o
Introduccin a la Progiamacin con C Gufa del Estudiante

72 ix, Y, Z; I

13 i-nt u, vt mcm/ mcd;


14 /* Obtener 1os clatos del usuario para 1a primera fraccin mixta A */ C
15 /* Obtener entrada del usuario para J-a parte entera de fracci */
16 printf ("rnoresar 1a primera parte entera de l_a fracc:-on \
I1 (posi-trvo) \n,');
18 do{
19 scanf ("8d", &A.parte_entera) ,.

20 )while (A.oarte_entera <: O);


2I /* Obtener de1 usuario el- nr:_oerador de 1a fraccin */
22 prin-,f ("Inqresar e1 primer numerador\n") ;
23 do{
24 SC.ri("2i", &A.numerador),.
25 )wh:1e (A.::umelador < 1),.
26 /+ Obtener entrada de1 usuario para eI denominador de la fraccin */
21 prlnt f ( " lngrr:esa: ef pr-imer denominador\n,,) ;
28 cio i
29 scanf ( t' %cjr', &A. denomj-nador)
,.

30 )while(A.ienom.inacjo: <: 0);


31 ,/* Obtener 1os datos de1 usuario para formar J-a segunda fraccin
mi-xta B* /
32 /* obtener entrada de1 usuario para parte entera de la fraccin */ 3
. 33 printf("fngresar ra seounda parte entera\n");
34 do{
35 scanf (,'Zd,', &B.parte_entera) ;
36 )whi1e (B.carte_en'.era <: 0),.
31 ,/* Obtener entrada de1 usuario para el nufierador de Ia fraccin */
38 printf ("Ingresar e!_ segundo numerador\n', ) ;.
39 doi
40 scanf("8d", &B.numerador);
4I )while (B.numerador < 1),.
42,/* obtener entrad: de1 usuario para e1 denominador de 1a fraccin */
43 prin*'f ("fngresar el segundo denominador\n") ,-

44 do {
45 scanf('8d", &B.denominador);
46 )whJ-]e (B.denominador <: 0);
47 /* convertir la primera fraccin mj-xta (A) a una fraccin inFropia
para formar X */
48 i(e.numerador !: A.denominador) {
Unidad 4: Estructuras Volumen 3: Tipos de Datos Estructurados en C 56

@ Copyright IBM Corp. 2005


O
Los materiales del curso ng pueden ser reproducidos en parte
o en su totalidad sin el previo permiso escrito de lBM.
o
o Guia oel Estudiante lntrodu:cin a la proqramacin cc: C
o !=i i .line:a.]ai
o ,1
- .:,.:.::--:_e:l:a:a - A. J::t!n r --r1,-r _ .:.-:rurne:at--:,.
:, i, . enOnrl:j-: - .-.. :_.. :tt::._:r:):.t:
o :, i
;

o c,) o!-4J!- caJ t

o )l nrrmo-:^i-- - r Y'=
grlL=-Gt

o
- =

Y nnmi-=^--

o 5q )
I

o 56 /* Conwertir 1a segrr:nda fraccin nixta (B) a u.na fraccin improria


o para formar y */
o 51 -i(3.nj:r,.:ajc: i

o 58 \_ r, ;n,:-=--
- :::a - 3. deomi nadot + 3. numei:acior:;
o 59 Y. cienoii:,ado --;^-.
6A I
o 6! -) ^^ (

o 62 vr.rislLc-c!J_
..- - --;^.-
o 63 Y. denonr nacior
o 64 )

O 65 /* Determi-nar e1 MGI cie X e y */


o 66 /* Mo"l(u,v) = (u * v) / MCD(u.v) -/
o 61 /* se quiere determrnar el MClc de X.denominador
Y Y-denoe.inador */
o 68 ,/* Buscar e1 MCD de los dos */
o 69 /* Calcu]-ar el MCD de 1os denomi_nadores d.e X e y
o 10 u : X.denominado:,.
o 17 v : y. cienom.j nado:,.
12 wh|le(u l: O && r, l: C)j
o 13 if (u >: v)
O
14 u: u ? v,.
o 15 efse
o 16 v: v ? u,.
o 11 i,f (u :: 0)
o 78 mcd : v,.
o 19 e-1s e
o tc mcd : ui
o J

o a2 ,/" Calcular e1 MCld de Ios denominadores de X e Y */


o t3 mcm : (X.denominador * y.denominador) / mcd;

o :,:,/* Calcu1a Z = X + y * /
,a Z.numerador : (mcm,/ X.denominador)* X.numerador + \
o
t (mcm /y. denominador) * y. numerador,.
o
tI t; Z. denominador : mcm;

Volumen3: TiposOeDffi
10 Unidad 4: Estructuras 57

b
I
@ Copyright tBM Corp. 2005
Los materiales delcurso no pueden ser reproducidos total
p o parcialmente sn elpermiso previo escrito de lBM.
I
o
lntroduccin a la Programacin con C
Gua del Estudrane
88 * convertir z a una fraccin mixta para formar c */
89 C.parte_entera : Z.numerador / Z.denominador;
90 C.numerador : Z.numerador \ Z.denominador..
9L C. denominador : Z. denominador,.
92 //* uulr&tr
Tnnrii, c Por salida estndar cuando resulte en noero ente''o */
93 /* l'{anejar casos especiales de una fraccin aqti */
94 if(C.numerador :: C.denominador) .
95 printf ("E_l resu-l-tado es gd\n,,, C.parte entera) ;
96 e_lse {
9- '/ - rmprimir la fraccin mixta c a ra salida estrdar *./
y p:_ntf (',El- resul_tado es %d y Zd / gd\n,,, \
99 C.parte_entera, C.numerador, C.denomrnador),.
1C0 i
iOi ' /* La funcin main termina aqui *,/
El cdigo C finaliza aqu...

Fin del Ejemplo 4.7

Este programa es un poco largo, pero bastante directo. Se ha refnado


cada uno de los
pasos en el aigoritmo en un conjunto de sentencias que
los implementan.
Ejemplo 4.8: calcular el promedio de Notas de los Estudiantes

Para re'forzar la comprensin del uso de estructuras en la solucin


consdere el ejemplo de calcular el Promedio de Notas de los
de problemas,
Estudiantes de una
e
clase
en particular de una universidad.
En una clase, asuma que hay un mximo de 100 estudiantes. Cada
estudiante est
regstrado en los msmos seis cursos en un semestre. Al final
del semestre, el instructor
asigna letras de calificaciones de la A a la E a cada uno de los
seis cursos de cada
estudiante. Cada uno de los seis cursos es de 3 unidades (horas
crdito). El promedio
de Notas de los Estudiantes se calcula en una escala de 10 puntos. para
aceresto, los
siguiente,s son las notas asociadas con cada uno de las calificaciones
en letras:
410
B q

r- n
D 4
E 2

Asuma que un estudiante obtiene las siguientes calificacones


en los seis cursos:
Curso 1 A
Curso 2 D
Curso 3 B
Unidad : Estructtras Volumen 3:Tipos de Datos Effi
@ Copyright tBM Corp. 2005
Los materiales der curso no pueden ser reproducidos en parte
o en su totalidad sin el previo permiso escrito de lBM.
o
o Gua del Estudiante
o lntroduccin a la I d toutut I uut l

o Curso 4 A
.r Curso 5 A
o Uurso ti E

o El Promedio de Notas del Estudiante se carcura como


sigue.
o (10 "3 + 4* 3+ I "3 + 10 * 3 + 1C " 3 + 2. 3) /(6 " 3)
o (30 + 12 + 24 + 30 + 30 + 6) / .18
o 132/18=7.33
o
Todo lo que se debe hacer es sumar la puntuacin de cada curso, multiplicarlo pcr 3
o (unidades del curso) y dividirlo por el nmero tctal de unidaoes.
o
o El siguiente es ef argoritmc para sorucicnar este probrema:
o Paso l: Declarar una estructure para el registro del estudiante.
o Paso 2: Declarar un arreglo de 1oc estudiantes para los registros.
a Paso 3: Ingresar y varidar ros datos dados por er usuario.
o Paso 4: Para todos los estudiantes.
o calcular el promedlo de Notas.
o imprimir el NoID, I{rmb:e, Gados y e1 p::omei,o cie Notas.
o A continuacin se escribe el program a para realizar esta tarea, aplicando refinamiendo
o paso a paso y usando cada uno de los pasos del algoritmo.

to EI cdigo C comienza aqui...


i*;iclude <stdlo.h>
o 2 *-nc-ude <ctype. h>
o 3 n,1n O {
o 4 /+ Declaraci-n de 1as estructuras */
o 5 ,/* Decrarar rrn arreglo de l"o0 estudiantes para Ios reg.i_stros
o 6 scruct reg_rstro_estucii ar:e {
o I char noid [ 9] ;
o 8 char nonrre[5C];
o 9 char grados [ 6] ;
o 10 float pn,.
11 ] llsta [ 100] ;
o
o I2 Decl-aracin de VarihJ.ss *7
o 13 int- n_est, k, ), num;
o '1 A
double pn;
o 15 obtener como entrada de1 usuaro e1 nmero de estucliantes * /
o L6 printf("fngresar el- numero de estudiantes < 100\n,,);
Oi
ol 0 Volumen 3: TiposOeffi Unidad 4: Estructuras 59

ol @ Copyright IBM Corp. 2005


Los materiales delcurso no pueden ser reproducidos total
ol o parcialmente sin el permiso previo escrito de lBM.
ol
al
scanf ( "td", &n_
lwhr.Le(n_est < 1 l/ n pqi \ 100);
Obtener las entradas acerca de todos ]-os estudiantes
I
cr(k : 0,. k < n esr,. k++) {
r \tttr^--^^^-
--i
-v-rrrsr frgtg>dl .l-^^
para el estudiante zd: \n". \
r + it.

/* Obtener la entrada del usuari-o del noid */


.:'itaf ("Ingresar el NOID (max 8 caracteres) : \n,')
,.

s:a:f ("tr",lista Ik] .noid) ;


'- Obtener como entrada del usuario e1 nombre
::t:-: j 1,'f rgresar e-l nombre (menor a 50 caracteres) . rr\.

-
^h!^-^-. com entrada del usuario cada uno de 1os 6 cursos */
: o; ) < 6; j++){
:f lush (stdin ) ,-

p:rntf ("i:rEresar .la nota de1 el- Cul:so l-a-tr1 \


_.. \.r
=:\nil , irl
J,tt,
\.

^-,
gv 1
{

scanf (,,?c", &lista Ik] - g.rados t j l t-


' n- le (:oupper (Iista I k] . grados t j I )
i :oupDe: (lista I k] . grados tj I ) > 'E' );

entradas realizadas para todos 1os estudiantes


el Promecii o de Notas para todos 1os estudiantes
; :'- < :t eS:; k-+) {
Promedio de Notas >ara e1 estudj-ante k
: tr^_:lt^:_ia
estudiante ?d\n',, k+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


Copyright tBM Corp. 20OS
@ Q.
Los materales dercurso no pueden ser reproducidos en parte
o en su totalidad sin el previo permiso escrito de lBM.
o
o :e Esi:Ciante
o Introduccin a ia

o
o ^t --..

o
o )
- Calcular e1 promedio de NoLas
de1 estudante */
o pri = (double) num / Ig.O;
o - Imprimir los detalJ-es de1 estudiante */
o - fraprimir eI noid del esLud,iante -
/
o prantf ("E-I ncid def estudiante es: gs\t,,, listaIk].ncrd)
o - Imprimir el- nombre del estudiante *,/
;

o prrntf ("Ef nombr:e ciel estudiante es: \


o ?s\t',, r i.au ik] .nor,be);
o - Im-orimir el pN de] estudi-ante -/
o L_r.:Lr-- t/ lr-:Jl __1\ o=_L s:Jc:r,:+ es: lE\:_tr,, Fn);
o i
o
O El cdigo C finatiza aqu...
o La estructura de registro cel estudiante es bastante
o stempre que fueron necesarias. como se pudo
clara. se hicieron las validaciones
notar:
o
' se acept soro ras retras A hasta
o'a ra E para ras carificaciones.

o ' Para calcular el Promedio de Notas, se usaron los 'nmeros


mgcos' 30,24, 1g,
12 y 6' stas son las notas asocadas con las respectivas
o la E, multiplicados por3 unidades (ejempro: 30=
cafificaciones de la A a
io * 3,24=g"3etc.,.
o ' Dado que, num es de tipo entero, antes de calcular
el gpa, se convierte al tpo
o f -loat.
o Este ejemplo ilustra el uso de estructuras su declpracin
y sus usos en un programa.
o
Fin del Ejempfo 4.g
o
o
o
o
o
o
o
o
o
o
t Volumen3:Tipo@
?t
A),

t . @ Copyright tBM Corp. 2005


Unidad 4: Estructuras 6i

I
I

I
Los materiares der curso no pueden ser reproducidos
total
o parcialmente sin el permiso previo escrito de lBM.
o
p
i
l.t.dr""i" l" P.
" el Estudiante

3. Tipos de Datos Definidos por er usuario


C permite al usuario definir sus propios tipos de datos. La
sentencia
los usuarios definir nuevos tipos de datos que son equivalentes a typedef permite
existentes. un nuevo tipo de dato puede ser definido como
a los tipos de datos
sigue:
t,pedef tipo_ex. stente nuevo_tipo;
Aqu,tipo-existente se refiere a cualquier tip'o de dato estndar como int,
fl-oat u char,
otros tipos de datos definidos por el usuario previamente que
estn
disponibles. Ef nombre del nuevo tipo de dato definido porel
usuario es nuevo-rrpo,
siguiendo las reglas para formar identificadores. Esto s slo un nombre
nuevo dado a
un tipo de dato previamente definido. No existen diferencias
fundamentales entre el
nuevo tipo de dato o el definido previamente o el tipo
de dato estndar. sea la siguiente
declaracin:
*rat :--
c--_ - ,

La declaracin anterior define un nuevo tipo de dato flamado


anio que es equivalente
a r-nt. Con esto, se pueden declarar variables como sigue:
anio A, a, :-*.],:.:-::.:::::c,.
Se puede usar el t\ipeie anterior y declarar las siguientes variables tambin:
-l-

En este caso se declara x y: como arreglos del tipo anio, gu son realmente un
arreglo de enteros.
C;
. se pueden tambin decrarar equivaientemente rc siguiente.
typedef inr anio.:, _;
anio X, y,.
A continuacin se presenta cmo se usa la sentencra
;,.,p.1e: con estructuras.
tlpedef strucc {
m i oml-. -.

miemb::c_2;

;, ^-"-^ -.
) nuevo-t ipo,.
Se puede usar este mtodo para definir un nuevo tipo:
typedef struct {
char noid[9];
char nombre [4 O] ;
int a-ltura,.

Unidad 4: Estructuras Volumen 3: Tipos Oe Dato@ (0.


Copyright IBM Corp. 2005
@
Los materiales del curso no pueden ser reproducidos en parte
o en su totalidad sin el previo permiso escrito de lBM.
o
o 3 - ;a cel Estudiante
o Introduccicn a ia Prcci-anracr: ::^ C

o
I
o Las variables se pueden declarar como sigue:
o regi st-o_cie_estudiante alumni, est_pt:i m:_a:t :
,,,.. l_ ;
o Es recomendable hacer uso de la sentenci
rypedef por las siguentes razones:
o
o ' Permite definiciones y declaraciones concisas de varrales basados en
estructuras.
o ' No se necesita escribir struct nombre-estruc-r::ra reoetir1as vpces cuando
o se referencia a una estructura
o ' Asignar un nomcre a una estructura, que sugiera su propsito, hace ras
o declaraciones ms legibles.
o se llego al final de la drscusin acerca de las estructuras. Es imporlante
notar aqu que
O una variable de estructura puede ser pasada y retornada a
una funcin tal como
cualquier otro tipo de dato estndar.
o
o 4. Uniones
o
o Las uniones son similares a las estructuras. Af igual que
las estructuras, stas contienen
miembros cuyos tipos de dato pueden ser diferenies.
o En una unin, los mrembros
comparten el mismo espacio en memoria. La razn principal
para el uso de una unin
o es ahorrar espacio en memoria. Esto es especialmente it si,
en una apticacion, slo
o uno de los miembros se usa bajo una condicin. Los valores
asignados a todos los miembros al mismo tiempo.
no tienen que ser
o rrni - ^^-^
urrr v_: e- :^
o -tulLJj j=- - a_

erJ:)ro_
o irLr

o J;
o La manera de crear variables y usarlas es de la misma forma que
o Considere por ejemplo, la siguiente definicin de unin:
en strucr.
o uni on {
o j.nt x,'
o float y,.
o char z;
o l- h ^.
o se definen tres variables a, b, y c, fas cuales son uniones.
o tres variables x, y y z (cada una de un tipo difererente).
En la unin, se han definido
Cuando
o a' debe entender que es una estructura con miembros x, y yse considera la variable
embargo, los miembros x, y y z de la variable
z. En una unin, sin
o a comparten el mismo espacio de
o oru. un irf ocupa ms memoria que u char, un floar !
i_ .u
oa
3:::r:.^taT^:;^1"1:
ocupa ms memora que ur int. Existen muchas tareas
Volumen 3:
o"
'rnl"n;i,
que deben
Unidad 4: Estructuras Og

? .tos materiales @delCopyright tBM Corp. 2005


curso no pueden

I
ser reproducidos total
o parcialmente sin elpermiso previo escrito de lBM.
?
lntroduccin a la Gufa del Estudiante

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, arreglos o
e
fl
estructuras. Se pueden tambin usar uniones con arreglos. Al usar el 'operadorlunto, ,l
.t
como en las estructuras se hace referencia a cualquier miembro de la unin. Se puede
realizar lo siguiente para hacer referencia a un miembro de una unin:

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 Volumen 3: Tipos de Datos Estructurados en C 6

@ Copyright tBM Corp. 2005


Los materiales del curso no pueden ser reproducidos en parte
o eR su totalidad sin el previo permiso escrito de lBM.
o
o 3.:ra ::l Estuclante
lntroduccin a la Proorarna:i:-
o
o Resu rnen
q
o Ahora que ha compretado esta unidad, usted
debe ser capaz de:
o . Explicar cmo declarar estructuras en C.
o ' Discutir el uso de las estructuras en la solucin
de problemas a travs de
o programas en C.
o ' Describir er uso de tener tipos de daios definidos
por el usuario.
o ' Definir unones y explicar cmo su uso difiere
del de las estructuras.
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
ol

Volumen 3: Tipos e Oatos gstructurados en C


o @ Copyright tBM Corp.
Unidad 4: Estructuras- 65

Los materia tes del t::l?!yuo"n' r"i2005


irod ucidos tora
"u elpermiso I
o parcialmente sin p*u de lBM.
""[rito
lntroduccin a la prgramacin con C
Gua del Estudiante

Unidad 4: Examen de Autoevaf uacin


1) Cules de las siguientes son una deflnicin correcta de una estructura?
a) struct {
int struct;
float y;
t;
' b) struct {
int x;
float y;
) et

C) struct {
i n+L a
f,tt r.

float y;
l
) st
F.

d) Todas fas anteriores.


2) Al igual que los arreglos, las estructuras no pueden contener mltples elementos
de datos de diferentes tipos.
a) Verdadero.
b) Falso.
3) pueden ser parte de una estructura.
a) Constantes de cadena.
b) Variables enteras.
c) Constantes enteras.
d) Constantescarcter.
4) Cules de los siguientes tipos de datos son vlidos dentro de una declaracjn de
unton'1
a) Tipos de datos primitivos.
b) Tipos de datos definidos por el usuario.
c) Ambos (a) y (b).
d) Ninguna de las anteriores . .

Unidad 4: Estructuras Volumen3: TiposOeOffi


@ Copyright tBM Corp. 2005
Los materiales def curso no pueden ser reproducidos en parte
o en su totafidad sin el previo permiso escrito de lBM.
o
o Gu, :e_!studiante
Introduccin e
o l Programacin con C

o -{) considere que se accede a una variabre estructurada


o esie caso, cules de los sigurenies identificadores como ..b. c.c lor. En
estructuras?
se reieren a varrables cje
o
o a) a/ b, cyd
o b) a. byc
o c) a yb
o d) Slo a
o 6) Considere la siguiente definicin de una estructura.
o s:ruct {

a I nr

o float y,.
i h.
o
o Es vlida la asignacin a. x = u.\,, ?
o a) Verdadero.
o b) Falso.

o 7) La siguiente es una definin vrida de un


tipo estructura
o tyoedef struct {

i ni- w.
o float y,.
o mr Prop.i a
o a)
.|

Verdadero.
,.

o b) Falso.
o
8) Los tipos de dato definidos por el usuario se
o de C.
definen usando la palabra reservaoa
o d)
^\ struct
o b) -rn i n
o c) typedef
o d) Ninguna de las anteriores.
a
o 9 cures de ros siguientes es un uso correcto de typedef?
o
o D) :'.'pecie: :.ca: n:\-ar;
O c) :','pede: f loat char miVar,.
o ul
.{\ -,,^^r^
__r'j-rae I crtqL
^}a-v nombre taOl ;
o
O
o
o Volumen S: frpos ae Oatos EstructuEd[$T
o UnioaoZlEsiffiEs- oz
o-J . . ^L-^,^
L* _
@ Copyright IBM Corp. 2005
o T:::l?:s-detcubdno
o parcnlmente sin
pueden ser reproducidos tota|
elperriso previo escrito ;l-M."-'
o
o
Introduccn a la pro'gramacin con C Gua del Estudiante

l0) cules de los siguientes es una definicin correcta de una unin?


^\ untoni
d)
int x;
float y;
char z;
J rr .

b) union{
int x,.
float y,.
st:ucr jech z;

d) Todas las anteriores

Unidad 4: Estructuras Volumen 3: Tipos de Datos Eatrturados en C 6g

@ Copyright tBM Corp. 2005


e
Los materiales delcurso no pueden ser reproducidos en parte
o en su totalidad sin el previo perrnso escrito de lBM.
o
o Gua del Estudante lntroduccin a la Programacin co C
o
o Respuestas a la unidad 4: Examen de Autoevatuacin
o
o 1) b y c
o 2)b
3)b
o 4)c
o s)b
O
6)a
a 7)a
o 8)c
o e) byd
o r0) d
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 Volumen 3: Tipos de Datos Estructurados en C Unidad 4: Estructuras 69

o'- Los. materiales


Copyright tBM Corp. 2005
@
delcurso no pueden ser reproducidos total
o o parcialmente sin el permiso previo escrito de tBM.
O
o
Introduccn a la programacin
con C
Gufa del Estudiante

Pgina dejada intencionalmente


en blanco...

0)

Unidad : eltructuras
Volumen g:

@ Copyright tBM Corp. 2005


Los materiales delcurso no pueden
ser reproducidos en parte
o en su totafidad sin elprevio permis
escrto de lBM.
a
o Gua oei Estudiante Introduccin a la Prooran-iacin :cn C
o
o UnidaC 5: Laboratorio de Estructuras
0'
a Objetivos de Aprend izaje
o
o Al final de esta unidad, usted ser capaz cje.
o . Usar estructuras en una situcin de solucin de problemas.
O . Desarrollar algoritmos para un problma que involucra el uso de estructuras.
o . Escribir un programa en C para impfementar una algoritmo que usa estructuras.
O
o
o
o
o
O
a
o
o
o
a

O
o
O
o
o
o
o
o
o
o
o
a
o
o
o
o
or
,OJ Volumen 3: Tipos de Datos Estruclurados en C Unidad 5: Laboratorio de Estructuras 71

@ Copyright IBM Corp. 2005


o Los materiales del curso no pueden ser reproducidos total
o o parcialmente sin elpermiso previo escrito de lBM.
o
Introduccn a la programacin con
C
Gua delEstudiante

Ejercicios de Laboratorio
1) considere ra estructura de una fraccin mixta, que
se da a continuacin. 0
struct fraccion_mezciada i
int parte_ent era ,.

int numerador;
int denominador:
It

fracciones mixtas e y B que son ras entradas suministradas por


li,ilr,j."r er

Escriba un programa que caicule:


g
La resta deAmenos (A B asignndola -
a la fraccin mixta c-
. La multiplicacin de a por (A B) asignndola
e *
respectivamente, y mustrelas.
a la fraccin mixta n.
. lmprima las fracciones.
Declarar una estructura que consista de
tres miembros:
. Nmero del libro (un entero).
. Cdigo del fibro (un areglo de g caracteres) .

. Precio del libro (un valor f ioar).


Escriba un programa que tome como entrada
10 lbros y muestre los detalles de
los mismos.
0,)
5) Establecer un fistado de suscriptores de
una revista. Los datos de entrada de cada
suscriptor son:
. Nombre.
. Cdula.
. Mes de inscripcin.
. Ao de inscripcin.
Realizar la bsqueda de cada suscriptor por
nombre, Iuego del ingreso de toda la
informacin. I
:

I
f

Unidad 5: Laboratorio de Estructuras


Vofumen 3: Tipos de Datos estructuraOos en
C Z
e
Losmateriar"rd"?"c,o,3JXtJii,t"T":"9;"??3or",o"senparre
Fr! , o en su totalidad sin el previo permiso
escrto Oe tnli
=t_\N Ysv.lu5
O
o
o
a
o Introduccin a la
o E-ry-
o ----
----
---n-
a:I
Programacin con C
------
- (Cdigo del Curso: Cy320)
O - rt_@ Versin 2.0
o --nr-

o Gua det Estudiante


o
o
o
o
a
o
o
o
o
o
o
o
o Vofumen 3: Tipos de
o
o' Datos Estructurados en C
o
o
I
a
o
o
a
o
a
o
o
I
IBM Learning Services
Worfdwide Certified Material
Informacin de Publicacin
Esta pubficacin ha sido producida usando Microsoft Word 2OOO y Microsoft powerpoint
2000 para Windows.

Marcas Registradas
IBM @ es una marca registrada de Intemational Btrsiness Machines Corporation.
Otras compaas, productos y nombres de servcos pueden ser marcas comercales o
marcas de servicio de otros.

Marcas Registradas de otras compaas como se muestra

Windows Microsoft Corporation

Red Hat Linux Red Hat

Edicin Septiembre de 2002

La informacin contenida en este documento no ha sido someda a ninguna prueba


formal de IBM y es distribuida bsicamente "como es" sin ninguna g"rtf"
expresa o implcita. El uso de esta informacin o la implementacin Ol cualquierai" .""
de
estas tcnicas es responsabilidad def comprador y depender de la habilidad de ste
para su evaluacin e integracin en el ambiente operacional del cliente. A pesar
de que
cada tema ha sido revisado por IBM para su exactitud en una situacin especfica,'no
h.ay garanta de obtener el mismo resultado o uno similar a ste en otra sitlacin.
Los
clientes que intenten adaptar estas tcnicas a sus propios ambientes lo hacen bajo su
propio riesgo.

Gopyright International Business Machines Corporation, ZOO2. Todos los


derechos reservados. .

Este documento no puede ser reproducido en su totatidad o en parte sin el previo


permiso escrito de lBM.

lnstrucciones especiales para la impresin de ste curso

No deben removerse las pginas en blanco que puedan aparecer al final de cada
unidad y entre dos unidades. stas han sido insertadas intencionalmente.
o
o
o
o
o Contenido
o Unidad l: programar con
Arregfos
o Objetivos de Aprendizaje
o l. lntroduccin I

o 2
2. Declarar un Aneglo en C
o J
o 3. Inicializar un Aneglo
4
o 4. Desanoffar y programarAfgoritmos
con Aneglos q
o 5. Cadenas de Caracteres en
C
24
o Resumen
o 27
Unidad 1: Examen de Autoevafuacin
o Respuestas a fa Unidad l: Examen
de Autoevafuacin
28
o Unidad 2: Arreglos Mufti-Dimensionales
30
o Objetivos de Aprendizaje
31
o 31
1. Introduccin
o 32
2. Resolver problemas con Arreglos
o Bidimensionales
33
o Resumen
45
o Unidad 2: Exmen de Autoevaluacin
46
o Respuestas a fa Unidad 2: Examen
de Autoevaluacin
o Unidad 3: Lab. programar con
Arregfos
48

O Objetivos de Aprendizaje
49
o Ejercicios de Laboratorios
49
o 50
Unidad 4: Estructuras
o 5l
o Objetivos de Aprendizaje
51
o 1. Introduccin
52
o 2. Defrnir y Usar Estructuras
53
o 3. Tipos de Datos Defindos por
ef Usuario
o 4. Uniones
67

o Unidad 4: Examen de Autoevatuacin


68
o Respuestas a la Unidad 4: Examen
71
o de Autoevaluacn
Unidad S: Laboratorio de Estructuras
74
o 75
Objetivos de Aprend2aje
o 75
o Ejercicios de Laboratorios
76
o
o
o
o
o
o
o
o
o Gua del Estudiante
fntroduccin a la ramacin con C
o
o Unidad 1: Programar con Arreglos
o
o Objetivos de Aprend izdle
o Alfinalde esta unidad, usted ser capaz
o de:

o ' Expficar ef concepto de anegros en ra sorucin


de probremas
o Definir qu es un anegto

o ' Describir cmo acceder a un eremento de


un anegro
o . Explicar cmo usar los aneglos en algoritmos

o ' Desanoilar argoritmos para probfemas que requieren


er uso de aneglos
o . Explicar cmo convertir algoritmos en programas
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 Volumen3:Tipos@
o Unidad t: erogramar co@; r

o uos materiales del curso no pueden ser reproducldos


o o parciafmente sin elpermiso previo es'crito
toat
de fBM.
o
o
l. Introduccin
En las unidades anteriores se estudiaron los.tipos
de datos simples, tas estructuras de
las construcciones iterativs. Esta unidao or'crt"
3H:l#:ffJ':iul lorlp"f" 0"t"",

Muchas aplicaciones requieren el uso de mltipleg


elementos de datos que tienen una
caracterstica en comn. Argunos ejempros.orrn.
ron,
o Las carificaciones obtenidas por ros estudiantes
en una crase.
. Los nombres de los empleados en una compaa.

' La artura y peso de todos ros pacientes admidos


en un hospitar.
Hasta ahora, el nico mtodo que conoce para
almacenar tas calificaciones es en una
variable' como por g'emplo, notas. pero,'
100 estudiantes?' una forma de hacerlo ei.tenermo se almacenan las calificaciones de
100.variabfes, como por ejemplo:
notasl, notas2 notas3. Sin embargo, sera ms simple
! referirse a rn" coleccin
de calificaciones con un sofo iJentificaooi llamado
notas, y an ser capaz de poder
referirse a ras carificaciones de un estudiante
en particular.
Esto se hace usando una estructura llamada
aneglo. Tcnicamente, los aneglos son
estructuras en memoria que ayudan a almacenaimrtipler
tienen una caracterstica comn. un aneglo lrniori datos que
aungue puede tener mltiples elementos de atos.
r ir"runca con-un ,Ln nombre,
Los efementos de "iol'nouiduales
pueden ser de cualquier tipo, tal como
enteros, flotantes o caracteres. pero dentro
arreglo, todos fos elementos de datos deben del
r"i d" un iolo tipo. si r" t"*n un arreglo
de 50 efementos, todos eilos deben ser de un mismo
tipo, por ejempto int. No se
tener los primeros 20 elementos de tipo de dato int y
et rsto de eilos de tipo
:[:"J
Los arreglos son un almacn de mltiples elementos
cuales los arregfos se pueden hacer jon:
de datos. Las dos formas en las

o Una sola dimensin


La Figura i.1 ilustra un aneglo unidimensional.
.12
.24
ol
.65
of
Figura l.l: Arregto de Unidimensional

Unidad l: Programar *
2
@ Copyright tBM Corp.2002
Los materafes del curso no pueden sr reproducidos
en parte
o en su totalidad sin el previo permiso escrito de
lBM.
o
o
o Gua del Estudiante Introduccin a la Programacin con C
o . Dos dimensiones
o
La Figura 1.2 muestra un arreglo bidimensional.
o
o
o 12 -5 u
o u 5 65
o q
o 7 88

o 8 32 66
O
o Figura 1.2: Arreglo Bidimensional
o
Conocemos acerca de vectores. Un vector no es ms que un arreglo unidimensional.
o Por otro lado, un aneglo bidimensional se denomina matnz en matemticas. La
o dimensin tambien se denomina el orden de un areglo.
o En el aregfo unidimensional que se muestra en ta Figura 1.1, el orden es 5. En el
o gneglo bidimensional que se muestra en la Figura 1.2, el orden es 4 x 3, es decir, 4
o filas y 3 columnas.
o
o 2. Declarar un Arreglo en C
o En esta unidad, se va a aprender solamente acerca de los aneglos unidimensionales.
o Se puede declarar un aneglo unidimensional de la siguiente form:
o int- [ql

O Esto resulta en la reserva de ubicaciones memoria, como se muestra en la Fiqura 1.3.


o
o 12

o 24
o 2
o
65
o
o 7 <_ f r1
d^ Ll J

o Figura 1.3: Ubicaciones en Memoria de un Arreglo


o a a [0] se refiere al primer elemento del areglo
o a 0 . . 4 se refieren a los subndices de un arreglo. Los subndices en el
o lenguaje C empiezan en o y terminan en n-t, donde n es el tamao del arreglo.
o En a [0] , a s el nombre delaneglo y 0 es elsubndice.
o a[0] cualquiera[k] donde 0 <= J a= 4 reportaunvalorentero.
o
o Volumen 3: Tipos de Datos Estructurados en C Unidad l: Programar con Aneglos 3
o
@ Copyright IBM Corp. 2002
o Los materiales del curso no pueden ser reproducldos total
b o parcialmente sin el permiso previo escrito de lBM.
o
o
Introduccjn a ta programacin
con C
Gua delEstudiante
. Ef ltimo efemento delarreglo
a es referido como a[a] -
Los aneglos se declaran como
tas variabfes de tipo
de tamao un
int, f loat o char, excepto que
:':fr:Xilg?iXffg:: lor "'p""i-Joor
oe tml" 0"i"" er nmero de

Los siguientes son atgunas decfaraciones


vfidas de anegfos:
int notas [100J ;
char linea [80] ;
float peso [20] ;
Es tif definir nombres simblicos para
el tamao de
(el valoi n,:t"ri*1. Er , ;;Jeoen.ros anegros, en vez de estos
fl:?,r1,mgicos' oennlr-nt,ibres simbricos
#define NSTUD 1OO
#define es una--directiva del prepocesador. una directiva
anteS d" qr" - del preprocesador
*ril"dor inicie er procesamientofe def
da
$m1:o|,"i|,":touaoor
En el Vofumen 6' Unidad 3 caractersticas
preprocesador y er compitador - Adicionaleld." c, se aprender
acerca del
de c. po' ar,oi, ."r"rn"u.b ;;#irri"rpre
aparezca NSTUD en ef programa que
ser sustituloo'pr e-r'varor de
100.
Nota: La sentencia #define no termina
con un punto y coma (;).
Se puede ahora hacer la siguiente
decfaracin:
int, notas INSTIIDJ ;
se declara un a'egro de tipo entero
lamado notas con 100 erementos.

3. Inicializar un Arregto
iniciarizar un anegfo a travs a"
f;;j#:s: "rign""ion.
taf como se h2o con 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,
ffif$|:)un
anesfo en el ;;;;ni"
de decrararro (normarmente praseanesros
puede

int num[5] = {tz, 24, 2, 6s, 7};

Unidad t: p

@ Copyright tBM Corp.2002


Los materiates del curso no pueden
sr reproOucidos en parte
o en su totalidad sin el previo permiso
escrito de lBM.
O
o
o Gua del Estudiante

a 4. Desarrollar y Programar Algoritmos con Arreglos


o
o Ahora que se conocen los fundamentos bsicos sobre los cuales la solucin de
o problemas con aneglos puede ser construida y desanollada. En esta seccin se
examinarn un conjunto de ejemplos de desarrollo y programacin de algoritmos
O usando aneglos.
a
Ejempfo 1.1: Almacenar un Arreglo con4,2,3...
O
o Escribir un segmento de programa para colocar en un arreglo 1,2,3...
o
En otras palabras, para un arreglo num que est declarado en el programa, se debe
o hacer que el primer elemento sea 1, el segundo elemento 2, y as suceivamente. Esto
o debe resultar en un arreglo que puede vsualizarse como es mostrado en la Fiqura 1.4.
o 1
o
o 3

o 4
5
o
o
o Figure 1.4: El Arreglo num
O
El sigiente segmento de programa fcilmente hacer esto.
o
o El cdigo C comienza aqu...
o /" nI archivo de encabezado con 1as funciones estnd.ar gue
o soportan */
o /*Ias operaciones de entrada y salida (stdio.h) se incluven */
#include <stdio. h>
a /* La funcin main se inicj-a aqui */
o maino {
o ,/* Decl-aracin de variab]-es */
o int k, num[100];
a /* nI bucle asigna 1 al primer elemento y asf sucesivamenLe */
o for (k=0; k <100; k++)
o numlkl = k + l-,'
o )

o /* La funcin main termina aquf */


a El cdigo C finaliza aqu...
O
o
o
O Volumen 3: Tipos de Datos Estructurados en C Unidad 1: Programar con Arreglos s
o @ Copyright IBM Corp.2002
O Los materiales del cufso no pueden ser reproducldos totat
o o parcialmente sin elpermiso prevlo escrito de tBM.
o
o
cuandok es 0, se reasigna 1 a num[0] .cuandok
es r-, se feasign? 2 num [r], y
Tarbin, se pudo iniciarizar usando num y
;::,:ffi:ivamente. usando ra siguiente

stat.ic int num trOO j = {_.};

:r?ff ?"'r?,:"f ;in,l:?,J'l!"i"!L:fl?,":[embarso, este no es un mtodo muy

Fin del Ejempto i.l


Ejemplo l-2: Leer ra Entrada der usuario Dentro der Arregro
feer ta entrada de un usuario en un
ff,Hlffinfl::"" arregro. Ef siguiente programa

El cdigo C inicia aqu...

de encabezado con 1as funciones esrndar


i#:.:fiiivo gue
,/*fas operaciones de entrada y salida (stsdio.h)
es inclui do */
#include <stdio.h>
/" La funcin main se inicia aqu */
mainfl {
,/* Declaracin de variab1es */
int k, num[10] ,.

,/*Obtener 10 enteros como entrada del


usuario para los elementos de un arreglo*
/
. f or (k = 6; k <t_O; k++)
{
printf("fngrese un valor entero para e1
\
elemenEo ?d: r! , k+1) ;
scanf ( tr?d", &num [k] );
l
)
/* La funcin main finaliza aqu */
El cdigo C finaliza aqu

El programa es bastante directo,


los valores de entrada se suministran del
num [0] num [1] , y as sucesivamente. teclado para
' Despus que el bucle termina, se tiene
aneglo con los vafores de entrada almacenados un
desde num [O] hasta num [9] .
Fin del Ejempto 1.2
uno de los requerimientos ms comunes.
en tas oper:aciones con anegtos es imprimir
et
rormas de imprimii;;;i". en eisiint!"rpro
ffifl: ,ffi:iii*:'erabres se

Unidad f : Progra

@ Copyright lBM Corp.2002


Los materiales delcurso no pueden s,,el-Or"idos
en parte
o en su totalidad sin ef previo permiso escrito
de lBM.
o
o Gua del Estudiante
o in con C
o Ejemplo 1.3: lmprimir un Arreglo
o Elsiguiente segmento de programa
o imprime ef contendo de un
a'egro.
o Ef cdigo C comienza aqu...

o ,/*Se incluye el archivo de encabezado


con las *,/
o ,/* funciones estandar que soportan
1as operacj_ones de *,/
o ,/* entrada y salida (stdi.h) */
o #include <stdio.h>
/* La funcin main inicia aqu *7
o main O {
o /* Declaracin de VariabLes */
o inr k, num[1OOJ;
o /* EI bucle inlcializa el contenido
o del arreglo */
for (k=O- k <100;.k++)
O numlkl = k + 1;
o /* EI bucle imprime el contenido del
arreglo */
o for (k=0; k <100; k++)
o printf ( rnum [?dJ = ?d\nu , k, num
tk] ) ;
o ) /* ru funcin main termina agu */
Ef cdigo C termina aqu
o
o El programa anterior imprme
fo siguiente:
O num[0J = 1
o num[1j = 2
O num[2j = 3
o
o
o
o num[99] = 100
o Nota: se us una construccin terat
iva paraimprimir el arregro.
o Fin det Ejempto f .3
o
o A continuacin se exprican argunas
operaciones simpfes en ros
afregros.
o Ejempro r'4: tmprimir ros Nmeros
rmpares de un Arregro
o
o En este eiempfo' se asume que
el arregfo contiene nmeros
enteros. se quiere que el
o 5,,f#iliJ$gT:j,:':""1quellos erementos que se;; ni'"ro. impares. Er sisuiente
o
o
Vofumen
o S:
Unidadt:@z
o @ Cooyright tBM Corp.2002
o Los materiales detqirso no pueden
ser reproducidos total
o parciafmente sln el permiso previo
o "ririto
de fBM.
o
O
Introduccin a ta programacin
con C
Gua del Estudiante
. Paso l:
Decfarar el aneglo num tlool .
. Paso 2: Leer la entrada en el arreglo
num.
. Paso 3: for(k = 0; k <100; k++)
if (num tkl * 2 != O)
printf (..Ed1,,, num tkl ) ;
,lJOoritrng. se verifica cada etemento det aneqto para determinar s es un
[f:f impar.
numero S es impar, se imprim, ;i.",.;"t, y se
efemento. del aneglo. El progr"r" que examina el prximo
implementa este algoritmo se muestra
continuacin: a

El cdigo C inicia aqu...

/*Se incluye el archivo de encabezado con fas *,/


'/* funciones estandar que soportan las operaciones d,e * /
/* entrada y salida (sEdio.h) */
#include <stdio.h>
/* La funcin mai-n se i.nicia acru */
main O {
,/* Dec]aracin de variabl_es */
int k, num[]-O0l ;
/" nl bucle inici-aliza el arregl0 con la entrada *,/
/* de]- usuario */
for (k = O; k <1OO; k++) {
printf (r'\nfngresar eL valor para ?d: ,,,k+1)
;
scanf ( u?du, &num [k] ),.
']
/" AI bucLe recorre el erreo.l^ -,a imprimir los */
/* nmeros impares */
printf (',La lista de los nmeros impares
es:\n,,),.
for (k = O; k <100,.k++)
if (num[k] Z 2 j= 0)
printf (', ?d1n , num [k] ) ;
]
/* La funcin main termina aou */
El cdigo C finaliza aqu

Nota: se tiene que verficar si un nmero dado es divsibfe


entonces se le consdera un nmero impar y entre 2. si lo no es,
debe imprimirse.
Fin de Ejempto 1.4

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.
Gua det Estudante
El cdigo C empieza aquf...
,/*se incluye er archi-vo de encabezado con ras */
'/* funciones es'andar q'ue soport.an J-as operaciones de * /
/* ent.rada y salj.da (stdio.h) */
#include <stdio.h>
/* La funcin main inicia agul */
mainO {
/* Este programa intercambia Ios elementos */
/* de un arreglo */
,/* Decl,aracin de 1as variables *,/
int var_num,k, Eop, bot, temp, num[100];
/* EI bucle obtiene el nmero de eLementos de1 *,/
arreglo ,, /
do {
printf (,,fngresar el 1mit,e de1 arreglo\n,,);
scanf ( tr ?d", &var_num) ;
) while (var_num < 1 ll var_num
> 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] ) ;
)
/* EI bucle imprime eI arreglo original */
printf ( "El Arreglo original es: \n,,) ;

f or ( k < = (var_num- l_ ) ,. k++ )


k= 0 ,.

Printf (',num[?d] = ?d\nu,k,numtkl );

/* S,I bucle intercambia e1 contenido del arregiro */


,/* fnicialzacin */
top = 9-
bot = var_num-1;
while (rop <= 5e {
,/* inEercambia num[t.op] con numlbotj */
remp - num [top] ;
num ltop] = DUrn [bot] ;
num lbot,J = Lemp.
top++; boE--,. /*t.omar eI sig,uienEe elemento */

Unidad I: Programar con Arr


10
@ Copyright tBM Corp.2002
Los materiales delcurso nb pueden sr reproducidos
en parte
o en su totalidad sin el previo permiso escrto de lBM.
o
o
Gua del Estudiante
o Introduccin a la p amacion con C
o
o /* EI bucle imprime el arreglo con l-os elementos */
o /* intercambiados *,/
o printf("81 Arreglo con 1os elementos \
intercambiados es \n,,) ;
o
for (k=0,. k <= (var_num_1) ,. k++
o printf (,'num
o [*d] ; ?d\n,,, k, num tkl );
]
o La funcin main termina aq) */
o Ef cdigo C termina aqu
o
o se recomienda a los estudiantes que reafcen el seguimento def prog*ma
con un
o rambin J"o"n-Larro con un "r"gr" que
;ffiffiffi:l:: :,,!fiff,lilentos' tensa
o
Fin det Ejempto 1.5
o
o A continuacin se presenta un ejemplo. de una operacn
o tcnica de Bsquea Lineal. rsii tcnica esu en areglos denominada
oiro de la categora generar de
afgoritmos llamados algoritmos de bsqueda.
o
o Ejemplo 1.6: Bsqueda Lineal de un Arreglo
o
Dado un arregfo de enteros num que contiene
o probfema es escribir un programa que
un nmero mximo de etementos n. Ef
indica ta presencia o la ausencia de una entrada
o var-num en un anegfo, buscndolo desde el comienzo
hasta el finat del areglo. Si el
o elemento se encuentra, se muestra ra posicn
en oonoe se encontr, si no se
encuentra se muestra un mensaje apropiado.
o
o La idea es recorer el arreglo desde
el comienzo y chequear cada elemento de num
o var-num' siwar-num existe en el aneglo num, se con
mlestra la posicin. Si se recore
o todo el arregfo y no se encuentra var-num,
a que se recone elarreglo completo
se rhuestra un mensaje apropiado. Debido
o denomina bsqueda lineaf .
en s@uencia desde el principio hasta elfinal,
se le
o
El siguiente es el algoritmo para focalizar
o de bsqueda fineal:
un elemento en un anegto usando el mtodo
o
o ' Paso l:
fngresar n er nmero de erementos en un
anegro
o o Paso 2:Leer ros n erementos y armacenarros
en eranegfo num
o o Paso 3: Leer el nmero a ser buscado var
num
o o Paso 4: x=o
o doi
o if (num [k] == var_num) {
o
o VolumenS:npos@ Unidad t: erogramar co A@f t
! , ^_ QCopyrighilBCorp.2002
t

o los materiales del curso no pueden'ser reproducldos


totaf
o o parcialmente sln el permiso previo es'crito
de fBM.
o
o
Introduccin a la programacin con C

imprimir J.a posicin ;-r elemento


__. qe.L
var_num como k;
break.'
)
else k++,.
) while (k <= (n-1) );
Paso 5: Si (k > (n- r)) imprimirvar-num
o fue encontrado en elaneglo.
El siguiente programa imprementa este argoritmo,
usando er bucre do_whi1e.
El cdigo C inicia aqu...
/*Se j_ncLuye e1 archivo de encabezado con iras */
,/* funciones estandar que soporEan 1as operaciones de */
z'* e:tiraia y sal j-da (stdio. h) * /
: :rcl_ude <stdio.h>
i, La funcin main inicia acru *./
nal:r O {
/* Este programa implementa la Bsqueda Lj-neaI */
/ * en un arreglo*/
/* Declaracin de Variabl_es *,/
int n, k, numb, a [100J ;
int encontrado = 0;
/'iL bucle obtiene el nmero de eremenLos en el arreglo */
do{
printf (',fngresar el- 1mite de1 arreglo\n,,);
scanf ( u?du, &n) ;
) while (n < 1 ll n > 100);
/* EI bucle inicial-iza el arreglo con la entrada */
/* suministrada por el usuario *,/

for (k=O- ._ (n_1),. laa {


printf ("fngresar elemento td\n",k+1),.
scanf(u?du,catkl);
)
/* Toma la entrada de1 usuario del nmero a buscar */
printf ("fngrese el nmero a ser buscado\n,,),.
scanf ( r' ?dtr , &numb) ;
,/*El, bucle realiza 1a bsgueda Lineal en el arregLo */
,/* e imprime si e1 nmero es encontrado o no t /
'L
- ^.
do{

Unidad l: Program
12

@ 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.
o
o
o acon con C
o if [k] == numb) {
(a

o printf(,?d localizado en 1a posicin


?d \
de1 arreglo \n,,, numb, k)
o encont.rado = 1;
,.

o )
o k++,.
o ] while (k .= (n_r ;
o if (encontrado != 1)
o print.f ( " ?d no f ue encontrado\n * , numb)
o
,.
)

o /" Ia funcin main termina aqu */


El cdigo C termina aqu
o
o Tambn' se puede implementar
la bsqueda fineaf usando ef
o for'La mayor parte der programa
qrjera, excep;o'ra
bucfe while o er bucre
ii_::
=;'""'ffi prcin que imprementa fa
a ;;
o |,1#:i:, i ffil' ;:,:J"T'Ifu m*ll*;
a una im pre m e ntcin de la

o El cdigo C inicia agu...


O ,/" Smbolos definidos para hacer e1
o cdigo legible */
#defi.ne VERDADERO 1
o #define FALSO O
o int encontrado = FALSO:
o /* No se ha encontrado el nme ro * /
o inr k = 9,.
o '/* Bsqueda l-lneal en un arreglo usando e1 bucr.e while */
whil-e ( ( !encontrado) && (k <=
o {
n_1) )
o ir- t numlJ<l == var_numl
o
o encont.rado = VERDADERO;
o ("io encontrado en la posicin
yrrrLi_
ei *!

o var_num, k) ; ?d\n,,, \
o )
o else
o t
k++,-

o I

if (!encontrado)
o printf ("td no fue encontrado\nr,,var
o Ef cdigo C finatiza aquf
_num);
o
o Volumen 3
o Unidadt:erog@ l3
o . @ Copyright tBM Corp.2002
Los materiales
o det arrso no pueOen'seiieprooucidos
o parcialmente sln,et peniso previo total
o de
"rito
lBM.

o
o
Ahora' se puede comparar et mtodo
de imptemenbc* anterior con
donde se usaba ta esfuctura do-whil.e. el otro mtodo
La implem;5J,, con la estructura
mucho ms legible,..y evita l" no
seiiten;'A- Este es un programa while eS
estructurado' A continuacin se prenta
"iuiaote muy
la implem"nt- rsando
ta estructura for.
Ef cdigo C inicia aqu...

= 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;
)
I
if (k > (n_1) )

printf ("?d no fue encontrado\_,,var


nrrm l .
Ef cdigo C finafiza aqu

Nota: Este segmento se compara con


l que tena fa eshuctura do-whi'e.
sentencia break para safir del bucle usa fa
tan pronto como el elemento
es encontrado.
Fin det Ejempto i.6

A continuacin se muestran y se di::rJg.n. otros ejempros que


van ms ail de ro
:f3i[1", l:,*j',"Tffi?l?*;:"tgl'i "'i,loZi'l] *rufn ,oor",as con
Ejemplo l-7: convertir un Nmero Decimar Entero a Ln Binario
Se va a escribir un programa que convierte
entrada a binario, y lo imprime. un entero decimal positivo dado como
Se va a poder entender
slstema de nmeros binarios.
"rt" ," domina el
""rplJ"riy,
se van a establecer unas pocas su.posiciones
aceptarn como entrada entros posiiivos para simpfificar ta materia. slo
se
positivo
qr" pr.io"i rpr"sentados ir
en 16 bits (2
|[??; |'.jrilr.- '; J;'qr"
sb peoe repiesenrar con 16 bits es
2,u-1,l

considere un entero posivo como


ef 84. Para convertirlo a binario,
2' El residuo' el cualeoe seru" se debe dividir entre
r, ser ertrf. " ntna dividiendo
" etociente

Unidad l: pro

@ Copyright tBM Corp.2002


Los materiales def curso no pueden
o en su totalidad sin el previo permiso en parte
"t.,eproOucidos
escrito de lBM.
tt;
a
o
Gua def Estudiante
o lntroduccin a la programacin cor C
o obtenido entre 2, exrrayendo
el residuo hasta que el
o muestra en la Figura 1.5. cocente mismo sea 0. Esto
es
o
o
o

E
o
o +-
o
o
o
+-
o
o
o Ef ltimo cocenk
Figure 1.5: Conversin de
Decimal a Binario @
o s1e1'qi''?:fr;j:!,,",i,",'i"**?:?lr1t-".;;:,ii:ffr:;,ff T;33;.Xtr
caso) debe ser rratado
*ro-"i it il=* ,,,irrr""[""
o .;;liiJ,io'qr"
g?,","*#??era, er i.:p, por sus ,;, en insfs).
equiiate ; u,!e escribe
como se muestra a
o
o 1010100

o
o ,:;l?".1i"r:: iJL",i,fJ':#:':,Ji:i"'"n,"rlo en 16 b*s, se re rerena con ceros a ra
o 0000000001010100
o Elsiguiente es un afgoritmo para
resolver er probrema anterior:
o . Paso l: fngresar el entero positivo
o var_num
o ' Paso 2:vatidar que var-num sea postivo y menor
o Paso 3: Guardar el valor de var que 32767
o . paso 4: t num en var- guardar
o = o
o Paso 5: mientras (var_num
o !- 0){
o binario [kJ = Vdr_ num ? 2;
Var-nm = V 11U,n
o )
/ z;
o o Paso 5: lmprimir
o binario desde la posicin 15 a la
O
Ef programa c que rearizaesta tarea se presenta
o a continuacn:
a Ef cdigo C inicia aqu...
a ,/*se incluye eJ. archivo de
o encabezado con las *
/* funciones estandar que soportan /
o ,/* entrada y salida (stdio.h) */ las operaciones de */
o
o Volumen 3
unidadt:n@rs
o
a . @ Cooyright tBM
Los materiafes det crso Corp.2002
no pueden l"ir"proorcidos
o o parcialmente sin elpermiso
prlr, totat
de lBM.
o "rlrt"
o
el Estudiante
#include <stdio.h>
/* La funcin main incia aqul */
mainO {
/* Este programa convierte un nmero decimal entero

i" ;::i:.::,:""::T: i,il,". .,


int. var_num, var_ guardar, k; .
inr binario tl_61 = io);
printf("fngresar un entero positivo menor
\
que o igual a 32267\n");
scanf ( ,,
?d,, , &var_num) ;
,/* validar Ia entrada suministrada por eI r, /
/* usuario en var_num */
if (var_num <= O ll var_num > 32767)
ntrnar(u?d est fuera de1 lmit\n,,,var_nlm) ;
else {
/* Se almacena una copia de 1a variabl_e var_num *,/
/* ya gue esta cambiar su val-or ms ade1ante */
guardar_var = var num;
k = 0;
,/* usado para acceder a1 elemento en e1 arregl0 binario *,/
,/* Este es eI proceso de convert.ir e1 nmero
/* decimal a binaro */
while(var_num != O) {
/* el residuo es extrado y almacenado */
/* en e1 arreglo */
binario [k++] = var_num ? 2;
var_num -_ var_num /2; ,/* cociente */
]'
/* Imprime e1 binario eguivalente al_ */
/* nmero enE.ero decimal *,/
printf (u El Binario equivalente de ?d es,', var_
g.uardar),.
for (k = rS; k >= 0; k__)
printf (u?t_du, binario tkl ) ;
)
)
/* La funcin main termina aqul */
El cdigo C termina aquf

Unidad l: Prograrnar
l6
@ 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.
o
o Gua del Estudiante
o Introduccin a la programacin con C

o se pudo' de hecho, enraer los residuos y almacenarlos


en el aneglo desde la posicin
o binario [15] hacia adelante. En este caso, se puede imprimir los
desde 0 hasta 1s' Algo que se debe notaraquies nmeros binarios
o se escribi ?rd, indicando que nT919
que, en la ltima sentencia prinrf
,
debe ser imfreso en un campo de r dgto de
o ancho. Esto es ro que se quiere "l
para dgitos onarios q" ,on 0 o 1.
O
Fin del Ejempto 1.7
o
o A continuacin se va a tomar como entrada un
nmero binario y convertirfo a decimal.
O Ejempfo 1.8: Convertir de Binario a un Entero
Decimal
o
O En este problema se acepta un nmero binario
como entrada en un aneglo binario
de 16 bits. se va a convertir esto a un entero decimar
o e imprimirfo.
o Para un nmero binario 1o1o1,su equivalente
entero decimal es elsiguiente:
o
1x2a + 0 xf + 1x22 +'0x21 + 1x20
o
o El algoritmo que realizaesto es:
o . Paso l: Declarar el arregfo binario [15]
o
o ' Paso 2: Ingresar dgitos binarios vidos en arregro
binario
. Paso3:num= o
O
o Paso 4: peso posicionarder dgito ms a ra
pesojosicionar _
o o PasoS:for(k=iS; k>0; k-){/-procesar
derecha 1
o e1 nmero desde r-a derecha */
DUrn = num + binario[k]* peso_posicional;
a peso3osicional = peso_posicional*2,.
o /* Forma e1 prximo peso posicional */
o ]
o ' Paso 6: rmprimir er decimar equivarente der
nmero binario
o Elsiguiente programa implementa el algorimo
o anterior:

o Elcdigo C inicia aqu...


o /*Se incluye e1 archivo de encabezado con las */
a '/* funciones estandar gue soportan 1as operaciones de */
a ,/* entrada y salida (sLdio.h) * /
o #include <stdio.h>
o /* La funcin main inicia aquf */
main O {
o
,/* Convertir un binario a decimal *,/
o ./* Declaracin de Variab].es */
O
o
a VolumenS:fipos@ Unidadt:erog@ tz
O @ Copyright tBM Corp.2002
a tos materiales del curso no pueden ser reproducldos totat
o parcialmerte sln el permlso prevlo escrfto de
a tBM.
o
o
Introduccin a la programacin con C Gua del Estudiante
int binariotl6l = {o};
int num = 0, k, peso3osj.cional ,.

/* EI bucl,e toma cada dfgito del nmero *./


,/* binario como enLrada del ueuario */
printf ("rngresar un nmero binario de 16 dfgi.tos
\n,,);
printf("\n El programa se mantendr \
aceptando entradas hasta gue \
todos los dlgit.os sean binarios\nn),.
for (k = 0,.k <=15; k++) {
/* Aceptar cada dgit.o como un char y restarLe */
/* el ASCIf de 0 *,/
do{
binario[k] = ( getcharO - ,0' ) ;
/* EI ciclo se ejecula mientra e1 d.igito */
/* sea binario *,/
) while (binariolkl != 0 && binario[kJ != 1);
)
/" SL peso posicional del dfglto ms a Ia */
/* derecha es L */
peso__posicional = 1;
/* No necesi.ta procesar el bit de signo_ binario [0] * /
/* Er bucle convierte er- nmero binario a decimal */
for(k=ts; k > 0; k--) {
/* procesar eI nmero desde la derecha */
num = num + binario [k] * peso posicional;
/* Formar el prximo peso posicionl */
pesoSosicional = pesojosicional *2,.

/* ZI bucle imprime el equivalenLe decimal *,/


/* del- nmero binario *,/
prj-ntf ( "E1 equivalente DecimaL de" ) ;
for(k = 0; k <= 15; k++)
printf ( u?du,binario [k] ) ;
Printsf ( " es ?d\n", num) ;
]
/* La funcin main termina agul */
El cdigo C termina aqu

Fin del Ejempfo 1.8

Unidad 1: Programar con Ane


18

@ Copyright tBM Corp.2002


Los materiales del curso no pueden ser reproducidos en parte
o en su totalidad sin el previo permso escrito de lBM.
o
o Gua del Estudiante
o
o Hasta ahora, en los. diferentes ejemplos slo se han usado
enteros. En el siguiente
a ejemplo, se ilustra el uso del tipo de dato carcter en areglos para
que involucran texto.
resolver problemas
o
a Ejemplo 1.9: Contar el Nmero de Vocales en un Texto
O Considere afgn texto en Espaol (mximo de 5000 caracteres) que
es ingresado por
ef usuario. Et final def texto se indica con ef smbolo $. El problema es escribir
un
o 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 El siguiente es elalgoritmo para resolver el problema:
o o Paso l:
fngresar el texto dentro de un aneglo flamado
o text
o Paso 2: lnicializar los contadores para cada vocal
a
o ' Paso 3: Inicalizar k en 0 y leer desde esa posicin en rexr
. Paso 4: Leer text [k]
o . paso 5: mientras (ten[k] != ,$')
o {
Verificar si cext [k] es una voca],.
o Si es verdadero, incrementar el contador
o vocal apropiado;
de

o x++;
o )
o o Paso 6: lmprimir los contadores de las vocales
o Basados en este afgoritmo, se puede escribir el siguiente progrcma
en c:
a El cdigo C inicia aqu...
o /* fncluir los archivcs de encabe zad.o * /
o /* se tienen las definiciones de ras funciones */
o /* usadas dentro de1 programa */
o #include <stdio.h>
o #include <ct1pe. h>
o /* La funcin main inj_cia agu */
o main0 {
o ,/* Declaracin de Variables *,/
I char text [S0Oj ;
t int k, cont.adorA, contadorE, contadorf, contadorO,
conLadorU;
o /* se ingresa er- texto suministrado por e1 usuario *,/
o /* en e1 arreglo */
o k = 0;
o printf("fngresar el t.exto terminando en e1 \
o
a Volumen 3: Tipos Oe@ Unidad l: Programar con Arregloi tg
o
o . @ Copyright tBM Corp.2OO2
Los materiales del curso no pueden ser reproducidos total
a o parcialmente sin elpermlso previo.escrito de lBM.

o
t
Introduccin a la programacin con C
l Estudiante
carcter $\nn);
scanf ( "t.u, &text tkl ) ;
while (Lext [k] ! = '$') {
scanf (ntcr, &text [++k] );
)
./* rnicializar los contadores de vocales * /
contadorA = 0;
contadorE = e;
contadorf = 0;
contadorO = e;
contadorU = e;

/* XI bucle cuenta e1 nmero de ocurrencias


,/* cada vocal en el, texto */
k = 0;
whiLe (text [k] ! = '$') {
if (toupper(text [k] ) 'A,)
contadorA++;
else if (toupper (text [k] ) 'E,)
contadorE++;
eLse if (toupper (text [k] ) 'f ,)
contadorl++;
else if (Eoupper (text tkl ) ,O | )
contadorO++,.
else if (toupper (text [k] ) ,U,)
contadorU++,.
k++,.
)

/* fmprimir eL contador de cada vocaL en el_ texto


printf("El nmero de ocurrencias de a es \
?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
20
@ 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.
o
o
Gua del Estudiante
o Introduccin a la Programacin con C

o )

o /* La funcin main finaliza aqu */


o El cdigo C finaliza aqu
o Se pudo tambin consderar usar un aneglo para almacenar los contadores. Los
o estudiantes pueden intentar escribir ese programa, y entender de que
forma sera una
o buena idea , y de que otras formas no lo ser.
o Fin del Ejempto 1.9
O
o A continuacin se aborda otro probfema que requiere el uso
de un arreglo
unidimensional. Ef enunciado del problema es, sin embargo,
o .
enunciados presentados hasta ahora, y no sugiere nada arca
difernt de los otros
del mtodo que debe
o ser adoptado. Este tipo de problema ocurre algunas veces en ta vida
real.
o Ejemplo 1.10: lmprimir la Secuencia def Problema del Anilo de Ejecucin
o
o Considere N personas condenadas. que_ estn esperando para
ser ejecutadas. El
o verdugo, abunido del mtodo de ejecucin decide seguir et mtooo
iresentado a
continuacin:
o
o l hace que todas las w personas condenadas se coloquen en crculo,
con un entero
o entre r y N exhibidos en su pecho. La persona con el nmero t est parada
al lado de ta
persona con ef nmero t. y todas las personas con los
o pecho estn en un crculo en la direccin de las agujas
nmeros 1, 2,
3.-. en su
o del reloj. El verdugo toma un
nmero aleatorio entre t y N, y llama a este elrndividuo. El
entonces dispara a esa
o persona cuyo nmero en ef pecho mincide con ste. l
selecciona otro nmero
o aleatorio mayor a cero tfamado el prximo. l cuenta el nmero prximo
de
personas vivas en direccin a las agujas, de refoj desde
o persona cuyo nmero en su pecho coincide con el nmero.
etrndividuoy ejecuta la
De esta *un"r",
o mantiene ejecutando a todas las personas. El problema consiste
en tomar como "u
o entrada los nmeros aleatorios elrndividuo y prximo, e imprimir
la secuencia
segn la cuallas personas son ejecutadas. .
o
o Esta claro que se debe mantener el estado de cada una de las personas
n como viva o
o muerta' Se tendr un aneglo tlamado lista que contendr el estado.
Inicialmente,
o 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.
o lista [k] indica el estado de una persona cuyo nmero en el pecho es k. ruma que
o
o Porejemplo si es 5, elrndividuo es 2 y prximo es 3, la
siguiente es una de las
posibles secuencias en la cuaf ellos sern ecutaOos.
o
o 2, 5, 4, t, 3

o Despus gue 5 es ejecutado, se cuentan las personas que todava


estn vivas, se tiene
que mover a 1 en forma circular. Lo siguente es el algoritmo para
o problema:
resolver este
o
o Volumen 3: Tipos de Datos E-tructu,,ados; C
Unidad l: Programar con Anegloi 21
o
ib @ Copyright tBM Corp. 2002
Los materiales der cufao no pueden ser reproducrdos totar
o parciafmente sln el permiso previo 6scrito d lBM.

o
o
lntroduccin a fa amacin con C
Gua del Estudante
Paso l: lista t1011 para 100 personas
Declarar un anegto
Paso 2:LeerN, ef nmero
de personas condenadas
Paso 3: Iniciafizar la fista desde
t hasta N como vrvo
Paso 4: fngresar elrndividuo
Paso 5: Validar que elrndividuo
est en el rango [1, N]
Paso 6: Ingresar proximo >
o
Paso 7: Ejecutar elrndividuo
Paso 8: lista[elrndividuo] = uuenro
Paso 9: lmprimir etrndividuo
Paso l0: Nmero de personas
ejecutadas nuuerros _
1
Paso l1: white (nMuerros <=
n) {
Localizar elfndividuo contando
Las /v^rrtds
-ss prximas personas vivas;
ejecuEar elrndividuo,.
Lisra [elrndividuo] = MITERTO.
imprimir elfndividuo,.
nlvluertos++,.
]
El siguiente programa impfementa
este algoritmo.
Ef cdigo C inicia aqu...

,/* fncluir los archivos de encabezado */


,/* que tienen Las definiciones de
1as funciones */
,/* usadas dentro del programa */
#include <stdio.h>
/* La funcin main inicia aqu *7
mainQ { .
/* Ejecucin por Contador ModuL ar */
/* Declaracin de VariabLes */
int l-ista [ror] ; /* No usar 1ist.a
int counE, n, eLfndividuo, k, proximo,[0J para nada * /
ntvfuertos,.
int. VfVO = 1, MUERTO = O j

j""::::;:: entrada der usuario er. nmero


:i." de personas
v;
/rLr
-!

( .lngresar eL nmero de personas
/
', -
condenadas:,,);
scanf ( utdu , &n) ;
if (n<=o) {
prinEf(nfngresar un nmero >
0 De condenadosrr) ;
Unidad f : progra
22
. Copyright tBM Corp.2002
@
Los materiales def curso no pueden
sr reprooucidos en parte
o en su totalidad sin el previo permiso
escrito Oe lBMl-"'
o
o Gua del Estudiante Introduccin a la Programacin con C
o
o
o
/* Inicialzar lista desde 1 a N como VfVO */
o for(k = 1; k <= n ,- k++)
o listalkl = vrvo;
o /* Ingresar ellndividuo y validar sf est
o entrelyN"/
o oo{
O printf("Ingresar 1a primera persona \
o a ser ejecutada comprendida [t, ?d]:",n);
o scanf ( "?d", &elfndividuo) ;
o ) while ((elrndividuo < t-) ll (elrndividuo > n));
o /* Ingresar eI proximo > 0 * /
printf("fngresar un enetero > 0\n");
o do{
o scanf (u?du, CProximo) ;
a ) while (proximo <= o);
a /* ejecuEar elfndividuo */
o lisLalellndividuol = MERTO;
o I
/* imnrimir
Lrt\E
L elTnrlirirrn */I

o printf ("La persona ejecutada es ?d\n',,ellndividuo)


o /* Nmero de ejecutados nMuertos -- I */
nMuertos = 1,.
o /* Localizar y ejecutar a todos 1os dems */
o while (nMuertos . n) i
o /* localizar elfndividuo contando prximo
o personas vivas */
o ^^rtF -
1 .

o while (count .= proxi'mo ) i


o ellndividuo++;
o if (ellndividuo > n)
o ellndividuo = 1; /* circul-ar*/
o if (1ista[ellndividuo] == vrVO)
counE++;
o
)
o /* e)ecutar ellndividuo */
o if (lista lellndividuo] == vrvO) {
o lista lellndividuo] = MUERTO;
o ,/* imprimir ellndividuo *,/
o printf ( I'La persona ej ecutada\
o
o Volumen 3: Tipos de Datos Estructurados en C Unidad l: Programar con Areglos 23

o @ Copyright IBM Corp.2002


o Los materiales del clrso no pueden ser reproducdos total
o parcialmente sln el permlso prvio escrito de lBM.
o
o
o
#Estudiante
es\nu, elfndividuo) ,.

)
/* fcremenEar el nmero de personas ejecuEadas */
nMuertos ++;
J

)
/* La funcin main termina aqu ,r/
El cdigo C termina aqu

Ntese que en el programa anterior,,


se han seguido fos pasos del algoritmo,
cada uno de fos pasos' Este mtodo refnando
es llama"d refinamento paso a paso
refinement)- Este es un mtodo muy (sfepwse
tir p"-i"rruer probtemas ya que
manejar eficazmente ta complejidad. ayuda a

Fin det Ejempto l.l0


5. Cadenas de Caracteres en C
Considere ef siguiente aneglo:
char nombre [30] ;
Este puede ser considerado corno una
caden a (string) en c. No existe
string explcito en c. Este puede ser directamente un tipo de dato
lro o escrito como sigue:
scanf (u?"r,, nombre);
printf (',?" ", nombre) ;
' Este no tiene que ser ledo o escrito carcter a carcter
?c)' una vez ledo usando ?s, la cadena (usando ef formato de cadena
se puede cceoer eremento por eremento
como nombre [i] ' cuando un aneglo
se fee usando er smbofo ?s, ef compilador
inserta un carcter al final para indicar
el fin de la cadena. Este carcter se denomina
carcter nu11, y se denota'como ,
i;, .

Ejemplo 1'11: contarel Nmero de


ocurrencias der patrn,to, en un Texto
Dado
Ef siguiente programa cuenta el nmero
de veces que el patrn 'to,se repite
en et texto

El cdigo C inicia aqu...

,/* fncluir los archivos de encabezado */


/* que Lienen 1as definiciones de Las funciones *,/
/* usadas dentro del programa */
#include <sEdio.h>
/* La funcin main inicia aquf *7
main O {

Unidad l: programarc
24
@ Copyright tBM Corp. 2002
Los materiares dercurso no pueden r"proorcidos
"i escrito de en parte
o en su totaldad sin el previo permiso
fBM.
o
o Gua del Estudiante Introduccin a la cin con C
o
o /* Declaracin de variables */
o char rexro [1000] ,.

a inti=0,noTo=O;
/* Obtener Ia entrada del usuario de la palabra *,/
O prj-ntf (', f ngresar un palabra grande : \n" ) ;
o scanf (tt?s", texto);
o
O /* nI bucl-e cuenta et nmero de veces gue Ia
o palabra 'to, ocurre en el texto */
o while (texto Ii] ! = ,\O') {
o if (toupper(texto[i] ) 'T' &&
o toupper(texto[i + 1]) =='O') {
noTo++,.
o t = + 2;
o ]
o e1 se
o i++;
o l
t
o /* tI nmero de ocurrencia de .to,, se imprime */
o printf("E1 nmero de \uto1u en e1 texto dado ?s es \ ?d\n,,,
texto, noTo) ,.
O
]
o /* La funcin main Lermina aqu */
o
Elcdigo C termina aqu
o
o Fin del Ejemplo 1.11
o Como no hubo necesdad de leer carcter a carcter en el programa anteror, se omt
o el bucle.
o
Existen muchas funciones disponibles para cadenas en la librera srring. h.
o siguientes son algunas de las funciones ms usadas:
Los
o
O Funcin Descripcin
o strlen Toma una cadena y retoma la longitud de ta misma.
o
a sErcpy Toma dos cadenas como parmetros, copia la
segunda cadena en la primera y retorna la primera
o cadena.
o
o strcat Toma dos cadenas como parmetros, las concatenan
y retoma la cadena concatenada.
o
o
o Volumen 3: Tipos de Datos Estruc'tunados en C Unidad l: Programar con Arreglos 25
,a .t @ Copyright IBM Qorp.2002
TI Los materiales delcurso no pueden ser reproducldos total
J o pardalmente sln el'permiso previoescritode lBM.
D
,o
o
Gua del Estudiante

strcmp Toma
I vr,r dos
L(JD uduenas
caOenas como parmetros, y las comp_o_
Tro
t" primera
I*::::..j.:i
que la segunda.
cadena es ms pequea
Retoma o siambas son iguafes.
o,:'l'1tlTgra cadenaes ms grande que
fa 3:::
,T segunda. (se usan
fas. regtas iigijfriIIa
comparar lag dos cadenas)

Unidad l: Programa
26
. @ Copyright fBM Corp. 2002
Los materiales delcurso no pueden
sr relroOucidos en parte
o en su totafidad sin el previo permiso
escrito
de tBM.

I
o
o Gua del Estudiante lntroduccin a la ramacin con C
o
o Resumen
o
o Ahora que ha completado esta Unidad, usted debe ser apaz de:
o . Explicar elconcepto de arreglos en la solucin de problemas
o . Definir un aneglo
o Describir cmo acceder a un elemenlo en un aneglo
o . Explicar cmo usar aneglos en algoritmos
o o Desarrollar afgoritmos para problemas que requieren el uso de arreglos
o . Explicar como convertir algoritmos a programas 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
Volumen 3: Tipos de Datos Estructurados en C
o Unidad 1: Programar con Aneglos 2T
o ' @ Copyright tBM Corp.2002
i Los materiales del crso no pueden ser rcproducldos total
'o o parcialmente sln el permlso prevlo escrlto de lBM.

o
o
Gua detEstudiante

Unidad l: Examen de Autoevaluacin


1) Cuntos elementos tiene un aneglo declarado inr x l7o) ;?
a) 11 'omo
b) 10
c)9
d) 12
2) Es vlida la declaracin int x [o] ;
a) Verdadero
b) Falso
3) Cuntos elementos tiene la declaracin inr x LL.J ;?
a)0
b)1
c)2
d) Nada, ya que la declaracin es invlida.
+) Asuma que un programa en C contiene #define LTMTTE
2s. Es mnecto
hacer la declaracin inr
x [LrMrTE] ; ?
a) Verdadero
b) Falso
5) Cuando se hace referencia a un elemento como x
[3] , realmente se est refiriendo
r
al
elemento.
a) Tercer
' b) Segundo
c) Cuarto
d) Primer
6) Cul es el resultado de la sentencia de asignacin en el siguiente segmento de
codigo?
inr x[3j;
x [3] = 25;
a) Se asigna 25 al tercer elemento de x
b) Se asigna 25 alsegundo elemento de x
c) Se asigna 25 a todos los tres elementos de x
d) Esto es invlido, ya que x [3 ] no existe
7) Es vfido el uso de un aneglo en la expresin x tz * k _ 1l _ 3 ;.
a) Verdadero
b) Falso

Unidad I: Programar con Aneglo


28
@ Copyright tBM Corp.2002
Los materiales der curso no pueden sr reproducidos en parte
o en su totalidad sin el previo permiso escrito de lBM.
o
o Guia del Estudiante Introduccin a la
o
o 8) Qu es un aneglo unidimensional?
o a) Una coleccin de datos, todos pertenecientes al mismo tipo, localizados uno
seguido delotro
o
o b) Una coleccin de datos, todos pertenecientes a multiples tipos de datos,
focalizados uno seguido delotro
o c) Una cofeccin de datos, pertenecientes al mismo tipo localizados sn un orden
o particular
o d) Una cofeccin de datos, todos pertenecientes a mltiples tipos de datos,
o localizados sin un orden particular
o 9) Es invlido el uso de la siguiente expresin x [k++] = k++;
o a) Verdadero
o b) Falso
o l0) Considere la declaracin int x [10] . En este caso, la referencia al aneglo como
xlk * 1 t l-21 eS
O
a) Siempre vfida
o b) vlida slo cuando ra expresin dentro delsubndice
o c) Nunca vlida
est en elrango 0, 9
o d) Vlda slo cuando la expresin dentro delsubndice
o resulta en el rango 0, i0
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o Volumen 3: Tipos de Datos gstruauraOos en C
Unidad 'l: Programar con Aneglos n
o @ Copyright tBM Corp. 2002
o Los materiales del curso no pueden ser reprcducidos total
o parcialmente sin el permlso previo escrito de lBM.
o
o
o
Introduccin a la programacin con C

Respuestas a f a unidad l: Examen de Autoevaf uacin


1)b
2)b
3)b
4)a
tc
6)d
7)a
8)a
e)b
l0) b

Unidad l: Prog.am
30
@ Copyright tBM Corp.2002
Los materiales dercurso no pueden sr reproducidos
en parte
o en su totafidad sin ef previo permiso escrito de fBM.
ttl
o
o
Gua del Estudiante
o Introduccin a la Programacin con C

o
o Unidad 2: Arreglos Mult-Dimensionales
o
o Objetivos de Aprendizaie
o Al finalde esta unidad, usted ser capaz de:
o
o . Definir qu son aneglos multi-dimensionales

o t-
l'*
. Describir la naturaleza y uso de los aneglos bidimensionales

o . Explicar la importancia de los anegfos bidimensionales en la solucin de


problemas
o . Describir el uso de los aneglos bidimensionales en los algoritmos
o . Explicar como declarar, inicialzar y emplear aneglos bidimensionales en C
O
. Discutir la implementacin de algoritmos que empleen aneglos bidimensionales
o enC
o
Ol
o
ol
ol
o
o
o
o
o
o
o
o
o
o
o
o
o
a
d
el
q
.ti
Volumen 3: Tipos de Datos Estruc{urados en C Unidad 2: Aneglos Multi-Dimenslonales 3l
' @ Copyright IBM Corp.2002
Los materiales delcurso no pueden serreproducldos total
o parcialmente sln elpermiso previo escrito:d lBM.

o
studiante

1. Introduccin
se estudi' que en las situaciones donde rgggleren
mlsmo tipo se usa un aneglo unidimension"l.-irsemltiples efementos de datos del
de mltiples estudiantes, lo cuales pueden como ejempfo, las catificaciones
,,"pr"rnt"rse en un anegfo unidimensional.
Los anegfos unidimensionafes in rt"r"r
En c, una anegfo unidimension"ir" u""tores usados en fas matemticas.
decrara "'lo" rig;",
;
int notas tl.oo j ;
un elemento individual de notas se puede
notas [kJ , donde k es un entero entre o y acceder usando un sofo subndice, como
ss.
se aprendi a cmo.dectarar y
usar.
Programar con Aneglos. gn Sneglos unidimensionafes en fa unidad 1
"; -
unidad,
dimensionales, para ser precisos"tJ ";iar como usar arregros murti-
areglos bidimensionales.
Los arreglos multi-dimensionafes se
unidimensionales, cada uno de effos .usan en situaciones donde varios a'eglos
oel msmo iipo, rJ uran para denotar
lgica y de significado *rr"io-.- Asuma una entidad
nacimiento de estudiantes de 'un
q;";;uiere armacenar fa fecha de
forma de lograrlo es teniendo tres
saln oe cralls ;; formato da, mes y ao. una
"i
aregfos unidmensionales
(En la implementacin se usar anium) . se puedenflamados aia, mes y ao
decrarar sigue:
int dia [100] , mes [100] , anium [1Oo]
;
"orf
Aftemativamente' se tiene un aneglo
flamado ddn, QU tiene mftiples dimensones
como sigue:
inr ddntlool i3l;
Esto significa gue la fecha de nacimiento
cada fila tiene ef da, mes y ano e de 100 estudiantes est registrada en fitas y
n-acmiento " ,;;;irdiante en particular
una de las tres columnas respectivamente. en cada

considere er siguiente ejempro de arregro


basado en ra cefinicin anterior:
24 I 1956
4 1960
-
A
6 1987
Las entradas en este aneglo implican
fo siguiente:
24 Agosto 1956
4 Septiembre 1960
4 Junio 1.9BT
como otro ejempfo, considere fa siguiente
decfaracin:
char paginat2:-l [70);

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 Gua del Estudiante
lntroducqin a la programacin con C
o Esto significa que una pgina tiene 25 lneas (filas),
o (cotumnas). por lo tanto, s se desea un libro
y 70 c,aracteres por lnea
de muchas pginas, se debe declarar
como sgue:
o
o char libro [350j 2sJ t7o) ;
o Este es un arregro tridimensionar y se representa
grficamente en ra Figura 2.1.
o
o
O
o
o
a
o
o
o
o
o
o I
o I

I
o I

o Charaqter
o Figura 2.1 : Arreglo Tridimensional
o La forma general de declaracin de un anegto
bidimensionalse da a continuacin:
o tipo_de_dato arreglo [exp1] [exp2] ;
O
o 2. Resolver probfemas con Arreglos Bidimensonates
o una de las primeras cosas que se debe aprendei cuando
se trata de emplear aneglos
o bidimensionales en la.resolucin de problemas
es a declararlos e iniciafzrlos. At igual
o :,T.^l:t aregfos unidimensionales, los aneglor or"nrionales se declaran como
stgue:
o . inr a [100] [1oo] ;
o o char textotZSl 96 -
o . floar numb [10] trel ;
o Ya se sabe que los aneglos unidimensionafes
o parte de la misma declaracin.
estticos pueden ser iniciafizados como

o Los aneglos estticos son aquellos aneglos que


o ncfuyendo la fucin rnaj_n.
se declaran dentro de una funcin,
o
o
o Volumen 3: TlposOe@ Unidad 2: Anegtos MulOimesiiles
o 93
Copyright tBM Crlrp.2002
o @
tos materiales del curso no pueden ser reproducidos total
o o parciafmente sin ef permiso previo escrito de lBM.
o
O
.f
o
o Gua del Estudiante
lntroduccin a la programacin con C
o Esto significa que una pgina tene 25 lneas (filas),
o (columnas). Por lo tanto, si se desea un fibro
y 70 c,aracteres por lnea
de muchas pginas, se debe declarar
como sigue:
o
o char tibro [350j f2s] t7o) ;
o Este es un aneglo tridimensional y se representa
grficamente en la Figura 2.1.
O
O
o
o
o
a
o
o
o
o
o
O
I
o I

I
o I

o Chragter
o Figura 2.1 : Arreglo Tridimensional
o La forma general de declaracin de un aneglo
bidimensionalse da a continuacn:
o Llpo_de_dato arreglo [exp1] [exp2] ;
o
o 2. Resolver Probfemas con Arregtos Bidimensonales
o una de las primeras cosas que se debe aprendei cuando
se trata de emplear aneglos
a bidimensionales en la.resolubin de problemas
es a declararlos e inicializrlos. Af igual
o :,i:.ft areglos unidimensionales, los aneglor r"nrionales se declaran como
stgue:
o . j-nL a [100] [100] ;
o o char texto tZSl 691 -
o . f loar numb []-01 tral ;
o Ya se sabe que los aneglos unidimensionafes
o parte de la misma declaracin.
estticos pueden ser iniciatizados como

O
Los aneglos estticos son aqueffos aneglos que
o incluyendo la fucin main.
se declaran dentro de una funcin,
o
o
o Volumen 3: Tipos de@ Unidad 2: Anegtos Mult-Omgales 33
o
@ Copyright tBM Crlrp.2002
O tos materiales del curso no pueden ser reproducidos totat
o o parcialmente sin elpermiso preo escrito de lBM.
o
o
lntroduccin a la programacin con C
Gua del Estudiante
Observe ef siguiente ejemplo:
int tablat3l I4l = if ,2,3,4,s,6,7,g,g, 10,11 ,72];
La declaracin anterior implica que el arregfo tabla tiene tres
filas, donde cada fila tiene
cuatro columnas. En C, el ftimo subndice se incrementa ms
rpidamente que ef
primero, por lo tanto, el subndice de la columna se increment
inicializacin sucede como sigue:
ms rpido. La

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:
int rabla t3l i4l = { {t,2,3,4} ,

{s,6,'I ,B},
)
{s, ro ,7r,L2}
),
La declaracn anterior iniciatiza el aneglo como la primera
dechracin. Encontramos
tres conjuntos de valores dentro de un pr de llaves. " par
de flaves denota valores
para una fila del aneglo tabla. En el ejemplo anterior,
la primera fila toma
de 1 a 4 para sus cofumnas, la segunda fila toma de 5'a 8'parasus cuatro los valores
la tercera fila toma los valores el 9 a 12 para sus coiumnas. por locolumnas, y
tanto, esta
decfaracin realiza la misma inicializacin como se mostr anteriormente.
Ahora considere el siguiente:
int tabla t3l t4l = { {L,z,z},
{+,s,e},
I
{z,a,s}
l,

La declaracin anterior tiene tres conjuntos de valores encenados


en i i. Los valores l_,
2 y 3 son asignados a las primeras tres columnas de la primera
fila, ."iLioo por un 0 en
la ltima cofumna. Una inicializacsn similar se realiza para
explicitamente se proporcionan valores para atgunas tolumnas
tas fitas 2"v li,
cuando
en una fila durante la
inicializacin de un aneglo, et resto de las col-rrnas en la
fila automticamente se
inicializa en 0.

Sise declara la tabta como:


int rablat3l t4l = {:-,2,3,4,s,6,7,8,91 ;
Los nueve valores sern asignados al anegfo en el sentido
de ta fila. Se consigue sto
un par de llaves en la declaracin anteriol. Como no existen tfaves
para indicar la inicializacin en el sentido de las
intemas (usadas
filas), los nueves valores son asignados
alaneglo, fifa despus de fila como sigue:

Unidad 2: Arreglos Mrlt-Dime


u
@ Copyright tBM Corp.2002
Los materiales def curso no pueden sr reproducidos en parte
o en su totalidad sin el previo permiso escrito de lBM.
o
o
Gua del Estudiante
o macion con C
o ' Los primeros cuatro valores ( aa) son asignados a las cuatro columnas de la
o fita 1.
o ' !'o: segundos cuatro valores (5 a S) son asignados a las cuatro cotumnas de la
lafila2.
o . El ltimo valor (g) es asignado a ra corumna 1 de ra fira
3.
o o Las columnas 2,3 y 4 de lafifa 3 se inicializan con 0.
o Sin embargo, se realiza mejor la inicializac-in de anegfos bidimensionales
grandes
o dentro del. programa y no en la etapa de blaracn.
contnuacin se presenta un
ejemplo elcual inicializa un aneglo bidimensionalen 0.
o
o inr rabla [100] tlool , k,I;
o for(k=O; k<100;k++)
for(1=0;1<100,'1++)
o tabla tkl tll = o;
o
Nojse que para los arreglos bidimensionales se requieren
O Existen dos bucles iterativs para acceder a cada elemento
dos variables subndices. .

o del aneglo bidimensonal.


Este tipo de formacin de construccin iteratva i,pi"" cuando se programa con
o anegfos bidimensionales. "r
o Se puede tambin iniciatizar el aneglo con los vafores de
entrada dados por el usuario.
o El siguiente segmento de programa-muestra cmo
un aneglo bidimension'"t ru le asigna
o entradas dadas por el usuario.
o ,/* Declaracj-n del ArregJ o */
o inr tabla[10] [10], k, l;
o /* Acceder a1 arreglo "/
o for(k=0,' k<10;k++) {
printf (..fngrese los valores de la Fila ?d\n,,,k),.
o for(1=0,. 1<10,. 1++) {
o printf (.'fngresar el_ valor de 1a fila ?d \
o columna ?d\n,, , k, 1) ;
o ,
/* Alamacenar elementos en el arregfo */
o scanf ( "?d", &Eabla tkl tll ) ;
o l
o )
o En este programa, el usuario se te pide que ingrese
los valores de una fila en particular.
o En el.caso de anegfos muy grands, este procedimiento
de leer valores de entrada del
usuario puede ser tedioso. En taf escenaiio, los valores
o almacenamiento secundario (como un disco) ar arregl.
se leen de un ispositivo oe
o Este aspecto ie cubierto
cuando se estudie el manejo de archivos en el volumen
6, Unidad 1 Manejo de -
o Archvos en C.
o
o
o
o Vofumen 3: TiposOeffi Unidad 2: Aneglos MultOme,nsonales 35
o @ Copyright tBM Corp. 2002
o los materiales del curco no pueden ser reproducidos total
o o parcialmente sin elpermiso preo escrito de tBM.

o
o
A continuacin, se presenta como imprimir-un.aneglo bidimensional. El siguiente
segmento de programa realiza esh tarea. Aqu, se asume que los valores
estn
disponibles en un arreglo de enteros rabla t10l tlol .

inr rabla[10] t1ol , k,I;


f or (k=0 ,'k<10 ,'k++) {
for (I=0;1<10;1++)
prinrf ("gd ', rabla ikl tll );
printf (..\n" ) ;
)

El bucle ms intemo tera sobre r


imprimiendo una fila de nmeros en una lnea. Una
vez que una fila es mpresa, un carcter de nueva lnea es impreso, as que prxima
la
fila ser impresa en una nueva lnea. Si el nmero de elemntos uri fila es muy
grande, ef conjunto completo, no ser impreso en una simple lnea. "nUna nueva tnea
sera generada automcamente en los casos. Usualmente en la pantalla, una
nueva
lnea ser generada despus que 80 caracteres se han imprimido. En unlmpresora
de
fnea, una nueva lnea podra ser generada despus de j32 caracteres.

Ejempfo 2.1: Yerificar si una Matrz es Simtrica

Una matrza de orden n x n es simtrica si ai = dik para todos los valores de k e i.


La siguiente matrz es simtrica:

10532
52257
32 57 99
' Aqu la clave es veriflcar
si a1 = aik para todos los elementos en la matrz.An si un
solo elemento que no est en la diagonal, no cumple que es verdadero que
aki = drk,
entonces la matnz no es smtrica. Por ejemplo, en el ejemplo anterior, si la
segunda
Tl,.Tl" {e la primera fila contiene u 10 en vez dp s, entonces la matriz no es
simtrica. El siguiente es el algoritmo para verificar si una matrizes simtrica:
. Paso 1: fngresar la matriz a
. Paso 2: x=o; i =o
. Paso 3: mientras (no se hayan verificado todos los elementos && no hay
desiguald entre a y aid i lr

if (k != i) {
if (aki == aik)
incrementar k, i;
e1 se

. Ocurre una desigualdad;

Unidad 2: Arreglos M
36

@ Copyright tBM Corp.2O02


Los materiales delcurso nio pueden sr reproducidos
en parte
o en su totalidad sin el previo permiso esoito
de lBM.
o I'
o Gua del Estudiante
o Introduccin a la macin con C
o Incrementar k, i;
o ]
O Note que no se estn comparando aki
== aik, cuando k e i son iguales.
o Cuando k e i son guales, este es un etemento de la
diagonat. Basados en el
algoritmo, el programa que realiza esta tarea puede
o ser desaollado como sgue:
o Ef cdigo C inicia aqu...
o ,/* Incluir 1os archivos de encabe zad,o * /
o /* que tienen las definiciones de 1as funciones */
o ,/* usadas dentro del programa */
o #include <stdio.h>
o #define VERDADERo 1
o #define FALSO O

o /* La funcin main se inicia asu */


main O {
o ,/* Declaracin de Variabl es * /
o int matriz[tooJ [1oo], n, k, 1, go_on;
o
o ,/* Obtener del usuario el orden de Ia matriz * /
o clo i
o print.f ("Ingresar e1 orden de l_a matriz entre \
o y
1 100\n");
o scanf ( u?du, cn) ;
o ) while (n < 1 ll n > 1oo);
o /* obtener de1 usuario 1os el-ementos de la matrz * /
o for(k=0; k< n;k++) {
o printf (,, Ingresar 1os. valores de la Fila ?d\n,,,k)
;
O for(1=0;1< n;J.++) {
o printf ("fngresar e1 valor fila ?d \
o columna ?d\n' , k, 1) ,.

o scanf (n?dn, &matriz tkl t1l ) ;


o
o l
I
/" nI bucLe verifica si es una matriz simtri ca * /
oI go_on=VERDADERO;k=6;
? while (k <= n && go_on == VERDADERO)
{
? 1=0;
?, while (1 <- n && go_on == VERDADERO)
{
tr if (k ! = 1 && marriz tkl t1l ! = marriz t1l tkl )
T
H Volumen 3: Tipos Oe Oat@ Unidad 2: Aneglos Mutti-Drnensionales 37
@ Copyright tBM C.orp.2002
Los matefiares del curso no pueden ser reproducdos
total
o parcialmente sln elpermiso preo escrto de lBM.

o
go_on = FALSO;
''|
.
)
k++;
)

,/* rmprimir si la matriz es s.imt.ri-ca o no a 1a sarida


est.ndar *,/
if (go_on == VERDADERO)
print.f ( "La matrz es simtrica\n");
el- se
-i '.ts C rI tttuq
/t rLr ^ ITtdtriZ nO es simtrica\n");
I
t
/* La funcin main termina acru *,/
El cdigo C termina aqu

Fin del Ejemplo 2.1

Ejemplo 2.2: Multiplicacin de Dos Matrices

Considere dos matrices A y e. La multiplicacin de estas dos matrices


es vlida slo si
el orden de ay B es de la forma m x x
ny n p respectvamente. Es decr, et nmero
de columnas de a debe ser igual al nmero de filas de e. La matrizresultante
c y debe
ser de orden m xp. La multiplcacin de matrces se defne taf que cada elemento de
Ci j para todo i, j
es como sigue:

cij = t A ik * Bkj para rodo k


El subndice se corre desde k hasta n en la sumatoria anterior.
Considere las siguientes
dos matrices: .

10 20 30 25 3021
567 2 354
1 234
El siguiente es la matriz resultante de la multiplicacin de las dos
matrices anterores:
310 420 310 210
144 182 61 53
Se puede ahora desanollar ef algoritmo para realizar fa muttiplicacin
de matrices.
o Paso 1: lngresar m, r, p el orden de las matrices A y B respectvamente

Unidad 2: Arreglos Multi-Dimensonales Volume gaipos;e D;ios Estructurados en C 38

@ Copyright tBM Corp. 2002


Los materiafes del curso no pueden ser reproducidos en parte
o en su totalidad sin el previo permiso escrito de lBM.

,
o7
o Gua del Estudiante
o lntroduccin a la programacron con C
o paso 2: Ingresar la
matnz a de orden m x n
o . paso 3: Ingresar la
matrizg de orden n x p
o r paso 4: rniciafizar todos
ros erementos de c de orden m
o . paso S: para todo
x p en o
i desde 0 hasta m_1
o para todo j de 0 hast.a p_1
o formar Cij = IA. * Bkj for.k
= O, -_ n_1
o o paso 6: lmprimir las
matrcesA, B, y c
O
se muestra er segmento de programa que
o *"?:t*:rdn hace ra murtipricacin de
a for (i=O; i < m,. i++){
o for (j=c; j . p; 7++)
o Dulild = U,.
{

o fo- (k=O; k -< n; k++)


o suma = suma + AIj_l ikl"Btkl
ijl;
o ctil ljl = suma,.
o )

o ]
o Los estudiantes puede n realizar ef seguimiento
der segmento de programa anterior
con afgunas matrices de ejemplo. par
o elejemplo.
em")iL"0" usar las matces dadas en
o
o Fin def Ejemplo 2.2
o Ejemplo 2.3: Cafcular laTrazade una
Matrix
o
o Latraza de una matnz se define slo pra
traza de a se define como fa suma
matrces cuadradas, de orden
n L nx
o siguiente matrizA, de orden 3 x 3.
de todos los elementos oe la diagonal.
considere la
o
o all a12 a13
o a21
o a22 a23

o a31 a32 a33


o Los efementos de fa diagonar estn
en negritas . La trazas a+ a22*
o elementos de fa diagonaj tenen elmismo
subndice corto a.
d33. Note que ros

o
Ef siguiente segmento de programa
o catcuta latrazade una mat,-.
o El cdigo C inicia aquL..
o ,/* fncluir 1os archivos de encabe zad.o * /
o
o VolumenS:npos@
Unidadz:nnffites 39
o
o , ^_ _- .
Los . . @Copyright tBCl;rrp.2002
materafes def curso no pueden ser
reproducidos totaf
o parcialmente sln elpermlso preo
o de lBM.
""'"rito
o
o
Estudiante
/* que t.ienen Las definiciones de Ias funciones */
,/* usadas dentro del programa */
#incLude <stdio.h>
/* La funcin main inicia aguf */
main ()

{
Declaracin de Variables .*/
int matriz [100] []_OOl , num,l, k, trace;

ObE.ener del- usuario el orden de 1a maLriz * /


do {
printf("fngresar el- orden de la mariz entre \
1 y 100\n',);
scanf (utdu,&num),.
) while (num < r ll num > 1oo);

,/* Obtener de1 usuario los elementos de la matriz *


/
for(k=9; k< num;k++) {
prinE.f (r'fngresar los valores para la Fila
?d\n",k);
for(1=0;1< num,. 1++) i
printf("fngresar el valor fila
?d col-umna ?d\' , k, 1) ;
scanf ( " ?dtr , &maEriz lkl t1l ) ;

/" sL bucle calcula fa traza de una matrz */


trace = 0;
for(k=O; k <= num-1,.k++) ,
crace = trace + matriz tkl tkl ;

,/* fmprimir en ta salida estndar Ia Eraza de 1a mat,riz


prj-ntf ('La traza es ?d\n,,, trace);
)
/* La funcin main finaltza aqul */
El cdigo C termina aqu

Fin del Ejempto 2.3

Unidad 2: Arreg
40

^_materates delcurs
,Los @ Copyright tBM Corp.2002
no pueden slr rejroOucidos en parte
o en su totalidad sin el previo permiso
escrito de lBM.
o 7
o Gua del Estudiante
o f ntroduccin a la pr amacron con C
o Ejemplo 2'4: Verificar si ra Matriz es Trangurar superior
o una matriz x es triangular superior
o si todos los elementos debajo de la diagonal
! ceros (usuafmente fa diagonal'y son
fos elementos-p";;;il" no son
o !
A continuacin se presenia un
matriz de 4 x4 de ejemplo.
estrictamente ceros).
o 12 24 36 48
o 0 11 22 .33
o
o 009998
o 00065
o r:fit#Xi$"nllotoices de matrices, los siguientes erementos
son cero en una matriz
o
o 12 24 36 48
o Xr' 11 22 33
o Y
-'31 xr, gg gg
o
o
x,. x^, Xn, 65
Note la forma en la cual fos subndces
o matriz anterior' Para cada nta,
proceden respecto a cada eremento en ra
o cofumna vara de 0 hasta fira-i'.
oese o hasta z, "on
eirr"nt r;g;";dd"irogr"*"
*
que ef subndice de ra
"nlientra
o rearizaesta tarea.
El cdigo G inicia aqu...
o
o ,/* fncluir 1os archivos de encabezado */
o /* que tenen las defini-ciones de las
funciones */
/* usadas dentro del programa */
o
#include <stdio.n>
o
o #define VERDADERO 1
o #define FALSO O
o #define ROir 4
o #define col, 4
o
o /* La funcin main se inicia aqul */
o main ()

o {

o /* DecLaracin de Variables */
int matrizlROWl [COL], !, k, i, j;
a int go_on,.
o k=1; go_on = vERDADERo;
O
o
Vofumen g:
o Tp
Unidadz:nn@tes
o @ Cooyright tBM Corp.2002
41

p Los materiafes del qrrsono pueden


b"ir"prodrcidos totat
o parcalmente sin etpermiso previo
o de lBM.
"Jrito
o
o
Gua del Estudiante
/* obcener del ,rrl",
for(k=O; k<4;k++) {
/*prntf ("fngresar e1 valor para La Fila ?d\r
,k);*/
for(1=0;I<4;1++) {
printf("rngresar el- valor fila *d \
coLumna ?d\u,k,1) ;
scanf ( utdu, &malriz tkl t1l ) ;

)
/* nI bucLe verifica si l_a maEriz es triangular superior */
for(i=t;i<ROW;i++) {
for(j=0,-j<i; j++) {
if (marriz Ii] tjl != o)
go_on = FALSO,.

]
/* rmprimir a la salida estndar si la matriz el triangular
superj.or */
if (go-on == VERDADERO)
prinEf ( "Es Triangular Superior\n )
" ,.

e1 se
printf ( r'No es Triangular Superior\n,, )
)
/* La funcin main Lermina aqu */

El cdigo C termina aqu

Fin del Ejempto 2.4


Ejempfo 2.S: Determinar si fos Elementos


de la Diagonal de una Matriz son fos
Mismos que fos Efementos de fa Diagonat en
Cruz.
Considere fa siguiente matnzA, de orden 4
x 4.
all a12 a13 a14
a21 a22 a23 a24
a31 a32 a33 a34
a41 2 a43 aU
Se debe verificar si

Unidad 2: Arreglos t,
42
@ Copyright tBM Corp.2002
Los materiales del curso no pueden sr reproOucidos
en parte
o en su totalidad sin el previo permiso escrito de
lBM.
a
o
F
Gua del Estudiante
o *.
Introduccn a la
o all = a14 422= a23
amacin con C

o a33= a32 a44= a41


Elsiguiente segmento
o de programa freva
a cabo esta tarea.
o El cdigo C inicia
aqu...
o ,/* rnclui
o
o
a $
f i: *:Fl:"'::':ilii,i:::cabezad' runciones
#incrude .::il;""j;;";;;:"*i"'""
* /

o *
o k #define VERDADERO 1
#define FALSO 0
a !'

o i /* La funcin maj-n se inicia agui */


o main ()
o tt {
o t

oI 2
,/* Declaracin
",
r

oI inr i , j ,x,r, n"_jj, 11""ot""


oi j,nt arregLo_matriz
tal Ul ;
o
o : ,/* Obtener de us los elementos de la
for(i=0 ;i<4;r**r'"tto matriz * /
o {
o for (j =o; j <4; j ++)
a i
a printf (,'fngresar Valor
para rr.rra td
o Columna ?d J
\ ,\n,,,i,j);
\
o ,."nf ( ,,9 n , &arreglo_matriz

o ] Iij t jt );
o printf ( " \n u, ,.

o
)
o
o /* MoeLrar 1os elementos
o for (i=0; i<4,. i++) de la matriz * /
o {
o for(j=o;j<4 ;j++)
o I
o printf (,,td1u, arreglo_m
acriztil fjl );
o
Uo,m"
o
o unidad2@1".
43
o ,l-os _ _.
^_ materiales
@ Copyright lillvl
det ctl
C.arp.2002
ser reproducidos total
o o parciafmenl" ,nTll^o-pueden
er permiso previo
escrito "l'nr.-*,
o
lntroduccin a la programacin con C Gua del Estudiante

I
Printf("\n");
)

/* gI ciclo verifica si los elementos de la diagonal y Ia


diagonal en cruz de l_a matriz son iguales o no */
k - 0;
n=4;
L = n -1;
go_on = vERDADERO;
whiLe (k <= n-1 && go_on) {
if (arreglo_marriz tkl tkj arreglo_maEriz Ikl t1l ) {
k++,'
'l
--.
)
e 1se
go_on = FALSO;
)

/* rmprimir si los element.os


diagonal cruzada son iguales o no de 1a diagonal_ y de la
a l"a salida estndar */
if (go_on == VERDADERO)
pri_ntf ("La Diagonal y 1a Diagonal en Cruz \
son iguales \n");
. eLse
printf("La Diagonal y 1a Diagonal en Cruz \
no son iguales \n',),.
)
/* La funcin main finai-iza aquf t,/
Ef cdigo C finaliza aqu

Fin del Ejempto 2.5

Unidad 2: Arreglos
44
@ 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.
of
o
o Gua del Estudiante lntroduccin a la Programacin con C
o
a Resumen
o Ahora que ha completado esta unidad, usted debe ser capaz de:
o . Definiraneglosmulti-dimensionales
o
o r Describir fa naturaleza y uso de los arregfos bidimensionales

o ' Explicar la importancia de los arreglos bidimensionales en la sofucin de


problemas
a . Describir el uso de fos aneglos bidimensionales en los algoritmos
a
o ' Explicar como declarar, inicializar y emplear arreglos bidimensionales en
C
' Discutir la implementacin de los algoritmos que emplean arreglos
o bidimensionales en C
o
o
o
a
o
o
o
o
o
o
o
o
o
o
o
o
O
o
o
o
a
o
o
a
o
o
O Volumen 3: Tipos Oe OatosEstructr,,adolend Unidad 2: Aneglos Multi-|)imensionales 45
o @ Copyright tBM Corp. 2002
o Los materiates del curao no pueden ser reproducidos total .

o o parcialmente sln elpermiso previo escrito de lBM.


o
Gua det Estudiante

Unidad 2: Exmen de Autoevatuacin


l) Un aneglomulti-dimensionaltiene
a) Exactamente dos dimensiones
b) Dos o ms dimensiones
c)Ambas (a) y (b)
2) Cmo se denomina un arreglo de orden m xnx p?
a) Aneglo unidimensional
b) Aneglobidimensionaf
c) Areglo tridimensionaf
d) Un aneglo en generaf
3) Cuntos enteros se pueden almacenar en un arreglo declarado corTro i_nr
xLsl aJ?
a) 22
b) 20
c)9
d) 12
4) Cmo se accede a un elemento de un aneglo declarado como char
nombre [25] Ieo1 , 2
a) nombre til
tj l
b) nombre
c) nombre [k]
d) nombre tzsl gs1
5) cules de fas siguientes declaraciones de arreglos no son vlidas?
a) inr all il;
b) int sala [-2] l,2l ; ,
c) char xt2sl [890] ;
d) Todas las anteriores
6) cul de los siguientes es un arreglo de cuatro dimensiones?
inr a[4j;
inr a LAJ [4) ;
inr a aJ lal al ;
inr a l4'J t4l La) la) ;
7) Un aneglo tridimensionalse asemeja a una lista.
a) Verdadero
b) Fatso

Unidad 2: Arregrlos M"


46
@ Copyright tBM Corp- 2002
Los materiales del curso no pueden sr reproducidos
en parte
o en su totafidad sin el previo permiso escrito de lBM.
Gua del Estudiante lntroduccin a la p macin con C

8) Cul es la forma correcta de acceder a un elemento del aneglo definido como


char x[3] [s];?
a)x
b) x [1]
c) x [-1] ['b']
d) x tot tol
9) Para un aneglo definido como fl_oar pt3l t3l , cul de los siguientes es un
uso inconecto?
a) P tol tol
b) p t1l t3l
c) p t1l t1l
d) pLrl L2l
l0) Qu define un aneglo declarado como inr rhree t"r) t2l Bl ;?
a) Un aneglo tridimensionaf
b) Un aneglo bidimensional
c) Un aneglo unidimensional
d) Un aneglo de 0 dimensiones

Volumen 3: Tipos de Datos gstruAulaos en i Unidad 2: Aneglos Multi0imensionales 4T

@ Copyright tBM Corp.2002


Los materiales del curso no pueden ser reproducidos total
o parcialmente sln el permiso previo escrlto de tBM..
Introduccin a la programacin con C
Gua del Estudiante

Respuestas a ta Unidad 2: Examen de Autoevaf uacin


l)b
2)c
3)b
4)a
t ayb
od
T)b
8)d
e)b
10) a

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 Gua del Estudiante
o Introduccin a la p

o unidad 3: Lab. programar con Arregros


o
o
o Objetivos de Aprend izaje
o Alfinalde esta unidad, usted ser capaz de:
o
o ' Emplear tipos de datos estructurados en
fa sotucin de problemas
. Usar anegfos unidimensionales y bidimensionales
o . Aplicar areglos a problemas con matrices
o
o ' Manipular los elementos de un areglo tanto para
como areglos multimensionales aneglos unidimensionales
o
o
o
o
o

q
q
q
a
t?
?
I
t?
t?
I
O
i
?
Volumen S: np
F Unidad 3: Lab. progrmar con enegtos 49
b , -_ @ Copyright IBM Corp.20O2
p tos materiales del cufao no pueden'ser reproducidos
total
o parcialmente sin el permlso previo escrito de lBM.
.O
o
o
Gua del Estudiante

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
"i"""glo'Ji"iror*"
impares aparecen en.er tope se-guido 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
Escribir un programa que toma como entrada la entrada.
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
problema. sotuconar este
3) considere ef problema de sumar los elementos der borde de una matnzcuadrada
del ejercicio anterior. Escribir un. programa que ro haga,
estructura iterativa para sumar ros eremtos oet usando slo una
r0".

Undad 3: Lab. programar


50
@ Copyright tBM Corp.2002
Los materiales der curso nb pueden sr reproducidos
en parte
o en su totafidad sn el previo permiso escrito de
lBM.
olt
o
o Guia del Estudiante
amacin con C
o
o Unidad 4: Estructuras
o
o Objetivos de Aprend izaje
o Alfinal de esta unidad, usted ser capaz de:
o
oj* . Explicar cmo declarar estructuras.en C
o ' Discutir ef uso de las estructuras en la solucin de probfemas
programas en C
a travs
o . Describir el uso de los tipos de datos definidos por el usuario
o
o ' Definir uniones y explicar cmo sus usos difieren del de las estructuras

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
o
t Volumen 3: Tipos de Datos gstructuraOos en C
Unidad 4: Estructuras 5i
@ Copyright tBM Corp. 2002
Los materiates del curso no greden ser reproducidos total
? o parcialmente sln el permiso previo escrito de lBM.

Io
lntroduccin a la Programacin con C
Gua del Estudiante

l. f ntroduccin
En fas undades anteriores, se discuti cmo dectarar tipos
de datos bsicosco[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.

Sin embargo, en el mundo real, se deben tratar situaciones para


problemas.complejos en las cuafes se tenga que manipular ta solucin de
entidades-que son una
colercin de elementos de datos, cada.uno"d"'r tip ot"ini.-pi-e]empto,
n una
universidad donde el registro de un estudiante debe tener,
entre otras cosas, un nmero
de lD (un crrar), un nombre (un areglo de char), peso (un
float) y la altura (un
float)' Los tipos de datos son todos diferentes, pero existe agrupaciilgica que es
significativa - un registro de estudiante. Para maejar tales
situaciones, c provee un
tipo de dato llamado structure

Las estructuras, cgmo aneglos, son capaces de manejar


muttiptes efementos de datos
usando un nico identificador que los agrupa a tods junto.
Mientras los a'eglos
contienen mltiples efementos de datos, toos del mismo iipo,
las estructuras contenen
mltipfes elementos de datos, cada uno de los cuafes puede
ser de un tipo diferente (en
una estructura, los mltiples elementos de datos pueben tambin
pero sta es una de las formas). De manera que, en ser el mismo tipo,
una estructura, los elementos
individuales pueden ser enteros, carcter, punto ilotante o un
areglo. Los elementos de
una estructura se denominan miembros. bea una situacin que
ivotuc manear tas
fechas de nacimiento de un grupo dado de personas.

Hasta ahora, el mtodo conocido para hacer esto era declarar


tres variables enteras, tal
como sigue:
int dia, mes, anio;
int dia_nacimiento, mes_nacimiento, anio_nacimiento,.
Sin embargo, afgunas situaciones pueden. requerir qu se
manejen diferentes tipos de
fechas, tal como fecha de ingreso al trabajo, flcha o graouacin,
fecha de matrimonio
y fecha de fa ttima promocin. Est cfro que cao uno de las
fechas anteriores
involucra tres componentes da, mes y ao.

Esta es una de las reas en donde tas estructuras se usan.


Las estructuras permiten
que elementos de datos que tenga una tgica
comn pero que pueden ser de diferentes
tipos, sean tratados cohesivamente. conidere una situacin
de sofucin e prootema
que requiera el manejo de cinco fechas diferentes nacimiento,
matrimonio, ltima promocin y jubilacin. Estas pueden - ingreso at trabajo,
ser manejadas como sigue:
int dia_nacimiento, mes_nacimiento, anio_nacimiento;
int dia_ingreso_Erabajo, mes_ ingruro_r.lo"io,
ani o_i ngre so_t raba j o ;
int. dia_matrimonio, mes_matrimonio, anio_matrimonio;

Volumen g,
52

. O Copyright tBM Corp.20O2


Los materiales delcurso no pueden
ser reproducidos en parte
o en su totaldad sin el previo permiso
escrito de lBM.
of
o
o Gua del Estudiante
ramacin con C
o int dia_ultima_promocion, mes_ ul-tima _promocion, anio
o ultima_promocion ;
o inr dia_jubilacion, mes_jubj.lacion, anio_jubi1acion,.
o Las operaciones que se hacen con las fechas son todas comunes, no importa fa
fecha
o especficada, como por ejemplo 'Encontrar el nmero de das transcunidos' o ,eu
fecha ocuni ms temprano'. Las estructuras ayudan a alcanzaresta cohesin.
o
o 2. Definir y Usar Estructuras'
o-
Se puede definir una estructura en C como sigue:
o
o struct <nombre de 1a estructura> {
mi cmtrrn 1 .
o *ie*ro-Z;
o
o m]-errlDro_n;
o ),
o Aqu, la palabra struct es una palabra reservada mandatoria. El trmino <nombre
o de 1a estructura> es cualquier nombre (usando las reglas para la creacin de un
o identificador) que identifique ta estructura. Cada uno de los miembros, tal
como
o miembro 1 o miembro 2 es una declaracin individual para los miembros de la
estructura Los miembros pueden ser de cualquier tip oe dato, incluyendo aneglos y
O estructuras en s mismas. En el contexto de estructuras, los trminos Oefinicln y
o declaracin se pueden usar por igual. Se puede decir que se est definiendo una
o estructura o declarando una estructura sin ninguna dferencia especifica en el
significado.
o
o A continuacin se presentan algunos ejemplos.
o Ejemplo 4.1: Definir una Estructura
o struct fecha {
o Lnt' o].a;
a

o int. mes,.
o int anio;
o ];
o Esta es algo que ya se ha visto antes. Esta define una estructura llamad fecha con
o los miembfos dia, mes, y anio, todos los cuales en este caso, son enteros. Sin
o embargo, no se puede poner int dia = 28 o una defincin de estructura.
o Nota: Lo anterior slo define una estructur:a. Ninguna variable est declarada all. para
o declarar variables, se puede usar la siguiente declaracin:
o struct fecha nacimiento, ingreso_t,rabajo, jubilacion;
t
i
? Volumen 3: Tipos de Datos EstruAulrados en C
53
? .'
p @ Copyright tBM Corp. 2002
Los materiales delcurao no pueden ser reproducldos total
p o parcialmente sln elpermiso previo escrfto de lBM.
p
o
Introduccin a la programacin con C Gua del Estudiante

Cuando se dice fecha, se est refiriendo al comienzo de posicin


ta de memoria de ta
estructura definida anteriormente. Cuando se hace referencia
a las variabtes tal como
nacimiento, ing.reso-trabajo, jubilacion, se est refiriendo a
plgleta que contiene tres miembros. Si se desea hacer referencia auna estructura
los miembros
individuales de la estructura en cada variabfe, se hace lo siguiente:
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
se puede hacer uso de los miembros de la estructura talccrno lo dict
.
(punto),
el tipo de dato del
miembro.

El siguiente es un mtodo para dectarar variables de la estructura


f echai
struct fecha nacimiento, ingreso_trabajo, jubilacion,.
Las variables de un tipo de estructura individuat pueden tambin
ser dectaradas como
sigue:
struct <nombre estructura> vari-able 1,
variate-1, -., variable_n,.
La estructura fecha y las variables individuales pueden ser declaradas
como sigue:
struct fecha {
lnt aia;
i-nt mes,-
i.nt anio;
] nacimiento, ingreso_Lrabajo, jubilacion,.
Elsiguiente es otra forma de definirlas.

stsatic struct fecha {


int dia,-
int mes;
int anio;
) nacimiento, ingreso_trabajo, jubilacion,.
Note que las definiciones anteriores todas definen la misma estructura
y variabfes.
Fin del Ejempto 4.i

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
Gua del Estudiante
o Introduccin a la programacin co- C

o Ejemplo 4.2: La Fraccin Mixta como


una Estructura
o struct fraccion_mixta {
o 1nE parte_entera;
o int numerador,.
o I
int denominador,.
o l.
)a,B;
o A y B son variables de un tipo de
I
una estructura que es fraccion mixta. Esto
permte representar ftaccione's
a mixtas como p"i
parte-entera = 1, rlume rador = 3 y denominador b 1% en la estructura donde
"i.,]rp
o esto como t'nl?,,". = . Tambin se puede definir
a t
o parte_ent.era,.
1nE.
o int numerador;
o int denominador;
Or )e,B;
oi Note que se ha omitido <nombre estructura>,
el cuaf es opcional. Las variables
Or creadas A y B, tienen ras mismas propiedade,
il;
Jlnni"on anterior.
ol Fin def Eemplo 4.2
o
o Ejemplo 4.3: Nombres de personas
o se sabe que generafmente los nombres de las personas
o nombre' segundo.nombre se registran como
y apelfdo. se puede oennirLna estructuia
primer
o con el primer nombre, segundo nombre y
apeilido como miembros.
llamad nombre,

a sLruct nombre {
a cnar primer 120) ;
o char segundo [20] ;
o char apellido [a5] , '
o )miNombre,.
o Note que los miembros son anegfos, y cadauno
t tamao' se pude acceder al apetlido de
miNombre-apellido. ste es, sin embargo,
de ellos puede ser de cuafquier tipo y
ra variable miNombre @rno
a acceder a las partes individuales se
un anegro de caracteres. se debe
t entero de o a +q .
usa miNombre.apellidolkl , donde k es un

tT 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
a
j
valores si la apticacin fo requiriere. cmbiar estos
ote que esta eiiructura tiene miembros,
cuales son anegfos de tipo char. Por general, todos los
lo lo las estructuras pueden tenermiembros
de diferentes tipos, etlos tambin puedn
io ser'"rgo-"ir1"res se mostr en ef
"omo
rt Volumena:npos@
b
p 55

. __
ros Q CopyrighilBM Corp.2002
Ir materiares der curso no pueden'ser reproducidos
total
p o parcialmente sin ef permlso previo
"rt
ito de lBM.
o
lntroduccn a la Programacin con C Gua del Estudiante

ejemplo anterior.

Fin del Ejemplo 4.3

Ejemplo 4.4: Lista de Direcciones de Correo


struct. direccion correo {
nombre *r*o*ta, .
"ttrrat
char primera_linea [25J ;
char segunda_linea l25J ;
char callel2S);
char area [30] ;
char ciudad [25] ;
char codj-go3ostal [9] ;
char pais [20] ,-

) 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
del primer nombre de p, se le debe referir como sigue:
p. miNombre.primer [0]

Si se requiere imprmir la direccin de coreo en ta varlable p, se puede usar el siguiente


segmento de programa:

Elcdigo C inicia aqu...


/* fmprj.mir a Ia saLida estndar 1a direccin de
correo de 1a estruct.ura */
/* Imprimir eI primer nombre *,/
printf ( " ?s, p.miNombre.primer),.
/" Se imprime un espacio despus del p?imer nombre */
nrinl. \', rr\.
f lll

/* Imprimir el segundo nombre a Ia salida estndar * /


printf (', ?" n, p. miNombre. segundo) ;
/* Se imprime un espacio despus de1 segundo nombre *,/
7ihf f /ll tr\.
\ I,

/* Imprimir a La salida estndar e1 ape11id,o */


printf ( "?s\no,p.miNombre. apellido) ,-

,/* Imprimir 1a Primera Lnea de l-a Dierccin


a la salida estndar * /
printf ( uts\nn,p.primera linea) ;
/* fmprimir 1a Seguna Lfnea de la Direccin a
la salida estndar */

Volumen 3: Tipos de Datos Estructurados en C 56

@ Copyright IBM Corp. 2002


Los materiales delcurso no pueden ser reproducidos en parte
o en su totaldad sin el previo permiso escrito de lBM.
of
o
Gua del Estudiante
o Introduccin a la p ramacron co:
o printf ( "?s1,,, p. segunda_linea) ;
o ,/* f mprimir 1a caf l-e a 1a saf ida estnd ar * /
o printf ( ', ?s1u , p. ca11e) ;
o ,/* fmprimir el rea a la salida estndar */
printf (', ?s1u, p. area) ;
o
,/* rmprimir e1 nombre de 1a ciudad a la salida est.ndar */
o printf (n?s1u,p. ciudad ) ;
o /* fmprimir e1 cdigo postal de la ciudad a
O,
" la sal_ida est.ndar *,/
o printf (,'?s1u, p. codigo3ostai) ;
o /* rmprimir eI nombre de1 pas a la salida estnd ar * /
o printf ( "?s1u,p.pais) ;
o Ef cdigo C finaliza aqui
o Esto ilustra como trabajar con estruturas en una situacin de programacin.
o mprimi cada miembro de la estructura direccion correo como
Se
cadena usando el
o especificador de formato ?s.
o Fin del Ejempto 4.4
o
o Ejemplo 4.5: Registro de Estudiante
o struct estudiante {
o struct. nombre nombre_estudiante ;
o char num_id [9] ;
o struct fecha nacimiento,.
o float peso;
o float altura;
o int iq,-
)filosofia [100] ; t
o
o En esta estructura, se ha dectarado una variable f ilosof ia
Que eS un arTeglo de 100
elementos, cada uno de los cuales es un registro de estudiante
o definido anteriormente,
con membros. Se puede referir al ao de nacimiento al iq del primer
o esta cfase como sigue:
! estudiante en

o filosof ia [0] . nacimiento. anio


o f j_1osof ia I01 . iq
O Ul" estrucfura puede contener cualquier nmero de membros, los cuales son
O estructuras en s mismas. Es tambin posibte tener varios
niveles de estructuras
a anidadas dentro de una estructura. Por ejemplo, to siguiente
vlida de una estructura:
sera una declaracn
o
t struct externo {

o
I Volumen3:TiposOe@ 57
@ Copyright tBM Corp. 2002
I Los materiales delcurso no pueden ser.reproducldos total
a o parcialmente sln el permlso prevlo escrito de lBM.

o
Gua del Estudiante
struct nivel,l {
struct niveL2 {
struct nivel3 {
int k,.

]r; //pin de la oe"r".]cin de 1a estrucrura 3

I r ^ t t
I L; // -,
r, ].n Oe f" aecfatacin de La estructura 2

i fr; // fin de 1a decl_aracin de Ia estructura 1


l / / pin de la decl-aracin de la estrucEura exEerna
En una decfaracin tan profunda
como fa anterior, se deben tener cuando se accede
un miembro de la estructura. Para acceder a la a
nivel3, se debe hacer lo
k decfarada
variable L vvv's'qvq en struct
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.

un punto importante a resaltar de la declaracin anterior


defincin de fa estructura ms intema se es que la variable de la
crea dentro de ra definicn de la estructura
principal. se han framado estas como
17, 12 y 1:. Esto porque no se pueden usar
las estructuras ms intema sin decfarar una variabre, es
declarar variables de las estructurai rrlnt"r"
y no hay_ forma que se puedan
principal.
f;;'oe ra definicin de ra estructura

Fin del Ejempto 4.5

Ejemplo 4.6: Inicializar una Estructura

Considere la siguiente estructura.


sEruct fracci_on mixta {
rnc parte_encerai
int numerador;
int denominador;
I
t;
Se puede asignar valor a la variabfe en la declaracin misma como muestra a
continuacin:
struct. fraccion_ mixta _ = {1,3,4};
Se crea una variable a, como se muestra
a continuacin.

Volumen 3: Tiposeffi
58
@ Copyright tBM Corp.2002
Los materiales del curso no pueden sir reproducidos
en parte
o en su totalidad sin el previo permiso escrito
de lBM.
o
o
Gua del Estudiante
o lntroduccin a la Proqramacin con C

o =
'
o " 1"-i;.::":",
o a.denominador = 4

o Esto es justamente una representacin de la fraccin mixta 1%. Tambin


se puede
o declarar la variable de la estructura separadamente e inicalizar los valores
programas como sigue: a travs del
o
o struct fraccion mi.xta { .
int partelr"t",
o int numerador,.
o int denominador;
o )";
o a-parce_entera = 1,.
o a.numerador = 3;
o a.denomi.nador = 4,.
o Fin del Ejempto 4.6
o
Ejemplo 4.7: Sumar Dos Fracciones Mixtas
o
o Asuma, que se requiere tomar dos fracciones mixtas como entrada, sumarlas
y mostrar
o el resultado. Sean las dos fracciones mixtas A = a3A y B
= 1% respectivamente. para
o sumarlas, se debe primero convertir los nmeros a la forma numerador/denominador.
o r%= (4*1+3) /4__7/4
o Esto es lo mismo que
o (denominador * parte_entera + numerador) denominador
o /
o Con esto, se tienen ambos A y B como 7 / 4. El denominador es comn, as que el MCM
o es4.Porlotanto, A + B= (z + 7) / q= r4/4.Elt+/+debeconvertirseauna
fraccin mixta como 3 (el cual es parte-entera.como un cociente
entero) y 2 (el cual
o es el numerador como mdulo de divisin). El MCM p"*"nu como el
o denominador.
o El siguiente es el algoritmo para sumar dos fracciones mixtas:
o
o . Paso 1: Declarar fas fracciones mixtas a y e
o o Paso 2: Ingresar las dos fracciones mixtas positivas y vatidarlas

o . Paso 3: Covertira a la forma de fraccin impropia x


o . Paso 4: Convertir e a la forma de ftaccin impropia v
o r Paso 5: Encontrar el MCM de x y v
o o Paso 6: Formar 2=((MCMtx.denominador*)x.numerador +
o (MCM/v.denominador)y. n um erador)/M CM
o
o Volumen 3: Tipos de Datos gitructuraos en C
59
o @ Copyright tBM Corp.2002
o Los materiales del curso no pueden ser reproducidos totat
o o parcialmente sln el permiso previo escrito de lBM.

o
Gufa del Estudiante
o Paso 7: Convertir z en ta fraccin mixta c
o Paso 8: lmprimir A, B, y c
El programa en C, basado en el afgoritmo anterior,
se desanolla usando el refinamiento
paso a paso.

El cdigo C inicia aqu...


/* se incJ-uye eI archivo de encaezado con r,as funciones
que */
,/* soport.an las operaciones de entrada y salida (stdio.h) */
#include <st.dio. h>

/* La funcin maj-n se inicia aqu */


main0 i
,/* Declaracin de las estructuras */
struct fraccion_mixca {
int parte_entera;
int numerador;
i-nt denomi.nador,.
)a,B,c;
struct. fraccion_impropia {
inE numerador;
int denominador;
)x,v,z;
int u, v, mcm, mcd,.

,/* Obtener los datos de1 usuario para la


primera fraccin mixta A */
/* obtener la enlrada del usuario para 1a parte entera
de la fracc1n * /

printf("rngresar J.a primera parte entera de la


(positivo) fracci_n
\nn ) ;
doi
scanf ( u ?d u , &A. parte_enEera ) ;
) while (A.part.e_entera .= 0);

/* Obtener del usuario eI numerador de la fracci n * /


printf ("Ingresar el primer numerador\n,,)
;
do{
scanf (nEdu, &A.numerador) ;
) while (A.numerador < L),.

Volumen S: f
60
. @ Copyright tBM
Los materiales delcurso no pueden
Corp. 2002
ser reproducidos en parte
o en su totalidad sin el prevo permiso
escrito de lBM.
o
o F
i Gua del Estudiante
o Introduccin a la Prooramacin con
o /* Obtener la enLrada de1 usuario para ef denominador
o de 1a fraccin * /
o printf ( t'Ingresar e1 primer denominador\n,') ;
o do{
o scanf (u?du, &A.denominador) ;

o ) while (A.denominador <= 91,


o ,/* Obtener los datos a"f ,rrrr".io para formar
o 1a segunda fraccin mixta B* /
o ,/* Obtener la entrada de1 usuario para la
o, I
parte ent.era de l_a fraccin * /
o print.f ("fngresar 1a segunda parte entera\n,r) ;
o do{
o ( " ?dil, &8. parte_entera),.
scanf'
o ) while (B.parte_enLera <= 0);
o /* obt.ener la entrada del usuario para e1 numerador
o de la fraccn * /
o printf ( "Ingresar e1 segundo numerador\n" ) ;
o do{
o scanf ( u?du, &B.numerador),.
o ) while (B.numerador < 1);
o
o /* obtener 1a entrada de1 usuario para eI denominador de
o Ia fraccin */
printf ("fngresar e1 segundo denominador\n,,)
o ,.

do{
o scanf (u?du, &B.denomirador),.
o ) while (B.denominador <= O)
o ,.

o /* Convertir 1a primera fraccin mixta (A)


o a una fraccin impropia para formar X * /
o if (A. numerador ! = A. denominador) {
o x-numerador = A.parte_entera 'r A.denominador + A.numerador;
o X. denomi-nador = A. denominador,.
o ]
else {
o
X.numerador = A.parte_entera;
o X.denominador = 1;
o I
l
o
o Volumen 3: Tipos de Datos gitruaulaOos en C
61
o
t @ Copyright tBM Corp. 2002
Los materiates del curso no pueden sr reproducldos total
IO o parcalmente sln lpermlso prevo escrito de lBM.
o
lntroduccin a la programacin con C Gua del Estudiante
/* Convertir la segunda fraccin mixta (B) a
una fraccin impropia para formar y * /
if (A.numerador != B.denominador) {
Y-numerador = B-part.e_entera * B.denominador + B.numerador,.
Y.denominador = B.denominador;
t
I
else {
Y.numerador = B.part.e_entera;
Y.denominador = 1;
]

/* Determinar eI X e Y */
MCM de
/* 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 */

/* Calcular el_ MCD de Los denominadores de X e y *,/


u = X.denominador;
v = Y.denominador;
while (u != 0 && w r= 0) {
if (u >= v)
U=U?
e1 se

?u;

mcd = v;
a'l ca

mcd = u;
]
,/* Calcular el MCM de los denominadores de X e y */
ftcm = (X.denominador * y-denominador) / mcd.;
/*CalcularZ=X+y*/
Z.numerador = (mcm / X.denominador)* X.numerador + \
(mcm /Y.denominador) * y.numerador;
Z.denominador = mcm;
/* Convertr Z a una fraccin mixta para formar C */
C.parte_entera = Z.numerador / Z.denominador,.
C.numerado = Z.numerador t Z.denominador;
C.denoninador = Z.denominador;

Volumen 3: Tipos de Datos estructuraOos en C


62

@ Copyright tBM Corp. 2002


Los materiales delcurso no pueden ser reproducidos en parte
o en su totalidad sin el prevo permso escrito de lBM.
o Tt
o .t
o Gua del Estudiante Introduccin a la Programacin con C
o ,/* rmprimir C en la salida estndar cuando resulte en un nmero
o entero *,/
o* /* Manejar casos especiales de una fraccin aqu */
if (C.numerador == C.denominador)
o print.f ('rEl resultado es td\n", C.parte entera) ;
o else i
o /*imprimir Ia fraccin mixta C a la salida est.ndar*/
o printf (',E1 result.ado es ?d y Zd / ?d\n,,, \ C.parte_entera,
o C.numerador, C. denominador) ;

o ]
o )
/* La funcin main termina agu */
o
El cdigo C termina aqu
o
o Fin del Ejempfo 4.7
o Este programa es un poco largo, pero bastante directo. Se ha refnado
o pasos en el algortmo en un conjunto de sentencias que
cada uno de los
los implementan.
o
Ejemplo 4-8: calcular el promedio de Notas de los Estudiantes
o
o Para reforzar la cmprensn del uso de estructuras en la solucin
de problemas,
o consdere el ejemplo de cafcular el Promedio de Notas de los
Estudiantes de una clase
en particular de una universidad
o
o En una clase, asuma que hay un mximo de 100 estudantes. cada
estudiante est
o registrado en los msmos seis cursos en un semestre. Alfinal
del semestre, el instructor
o asigna letras de cafificacones de la A
a la E para todos los seis cursos de cada
estudante. cada uno de los seis cursos es de 3 nidades (horas
o creoiio eipromedio
de Notas de los Estudiantes se calcula en una escala de 10 puntos. para
hacer esto, los
o siguientes son es la notas asociada con cada uno de las clalificaciones
en letras:
o A 10
o B 8
o C 6
o
D 4
o
E 2
o
o Asuma que un estudiante obtiene las siguientes calificacones
en los ses cursos:
o Curso 1 A
o Curso 2 D
o Curso 3 B
o Curso 4 A
o
o Volumen 3: Tipos de Datos estructuraOos en C
63
o @ Copyright tBM Corp. 2O02
o Los materiales del curso no pueden ser reproducldos total
o o pardafmente sln el permlso preo escrfto de lBM.
o
Gua det Estudiante
Curso5 A
Curso 6 E
Aqu, el Promedio de Notas derEstudiante se
carcura como sigue:
(10 "3 + 4" 3+ 8 " 3 + 10 *3 + 10 " 3 +2" 3)/(6 - 3)
(30 + lz + 24 +30 + 39 + 6) / 18
132 | 18 =7.33
Todo lo que se debe hacer es sumar fa puntuacin
(unidades del curso) y dividirlo por el nmero de cada curso, multiplicalo por 3
tota e unidades. El siguiente es el
algoritmo para solucbnar este prl"ma,
o Paso r: Decrarar una estructura para er registro
der estudiante
' Paso 2:Decrarar un anegro de 100 estudiantes para
fos registros
o Paso 3: Ingresar y vafidar ros datos dados por
ef usuario
. Paso 4: para todos los estudiantes
{
caleular el- promedio de Notas,.
imprimir el NOfD, Nombre, Grados y el promedio
de Notas;

A continuacin se escribe el program a para realizar


esta tarea, aplicando refinamiendo
paso a paso y usando cada uno de los pasos del algoritmo.
El cdigo C inicia aqui...
/* fncluir los archivos de encabezado requeridos
por el programa */
#include <stdio-h>
#include <ctype.h>

/* La funcin main se inicia aqui *i


mainO {
,/* Declaracin de las estructuras */
/* DecLarar un arreglo de L00 estudiantes para 1os
registros */
struct registro_estudiante {
char noid [9] ;
char nombre [50J ;
char grados [6] ;
float pn;
) i.isra [100] ;

Volumen 3: TiposOeffi
64
@ 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.
:r
e)' I Gua del Estudiante Introduccin a la Prooramacin con C
o /* Declaracin de Variables * /
o ir acl- f. i
rI num'

o,- double pn;

ort
o,
,/* Obt.ener como entrada de1 usuario el nmero de
esEudiantes * /
e printf("fngresar e1 nmero de estudiantes < 100\n',)
C do{
o scanf (r*d",&n_es:),'
o ) while (n_est < 1 ll n_esc > 1OO)

o.
o" ,/* Obtener del usuario l-as entracas ace:ca de todos
o los estudiantes */
o for (k = 0; k . n est; k++) {
nrin1. f l,,t-o]o. r d,al--q r: Y;
o k + l-);
=

o ,/* Obtener 1a ent.rada del usuar:c cer ::c:c 'r'


o printf ( " Ingresar e1 NOID (max t ca:c:eres ) : \n" ) ,.

o scanf ( u?sn, 1ist.a IkJ . noid) ;


o /* Obtener como entrada de1 usuaric ej :,::-.-::e -,,
o printf ("Ingresar el nombre (me:1o: a 5C,
o caracteres) : t,) ;
o scanf ("?"u, lista Ik] .nombre) ;
o ,/* Obtener como entrada del- usua::c :=:a .:::: oe los 6
cursos */
o for(j=O;j.6t1++){
o f f lush (stdi-n) ;
o printf("Ingresar Ia nota iei el Curso \
o [A-E]: ?d\h",1+I);
o do{
o scanf (rr?cr', &1ista [k] .grados Ij] ) ;
o ] while (toupper (lista [k] . grados t j I ) < ,A, \
o | | toupper (lista lkl . grados tj l ) > 'E' ) ;

o t
o ,/* Todas las entradas realizadas para todos
o 1os estudiantes */
o
o /* Calcular el Promedio de Notas para todos 1os estudiantes
O
for (k = 0; k < n_es; k++)
o {

! Volumen 3: Tipos de Datos Estructurados n C 65


o @ Copyright IBM Corp.2002
o Los materiales del curso no pueden ser reproducldos total
I
o o parcialmente sin el permso previo escrito de lBM.
o
o
Gua del Estudiante
,/* Calcular el n.o*
printf ( "Calif icacin deL est.udiant.e ?d\n,,, k)
,.
num = 0,.
for(j=O;j<6;j++)t
printf ("tc1u, Loupper(1ista[kJ .grados
tjj ) ) ;
if (Eoupper(1isra lkj .grados tj] ) == ,A,)
num = nu.m + 30,.
else if (Eoupper (lista [kJ . grados tj ] ) |B ,
)
num = num + 24;
else if (toupper (lista [k] . grados tj I ) ,C, )
num=num+18;
else if (Eoupper(lista [k] .grados tjl ) ,D,)
DUtn = num + 12,.
else if (toupper(lisEalkl -grados tjl ) ,E,)
num=num+6;
]

Calcular e1 promedio de Notas de1 estudiante */


P LI = (icuble) num / te.O;

,/ * f mprini- 1os det.al1es deI estudiant.e */


/* fmprirnir el noid del estudiante */
prrntf ('' Ei noid del estudiante es: \
?s\t", listalkj .:rcid.) ;
,/ * f primi r e1 nombre del estudiante *,/
printf (',r1 :romnre del est.udiante es:
\
?s\L", l-ista [k] .nor.re) ;
,/ * f mprimi r et pN del- esEudiante *,/

nrtntf (,,81 pN del est.udiant.e es: ?g\nu, pn);


,
)

/* La funcin main termina aqu */


El cdigo C termina aqu

La estructura de registro del estudiante es bastante


crara. siempre que se requrieron
validaciones stas fueron hechas. como se pudo
notar, se acept sofo las letras A
hasta la E para las cafificaciones. Para calcular
'nrneros mgcos'. 30, 24, 18, et promedio de Notas, se usaron fos
12 6. ;.
respectvas carificaciones de ta A a ra ,
t ;";';s
notias asocadas con fas
murtipt*d* g
i unoaes iei;;]o, 30 = 10
" 3, 24 = 8 * 3 etc.). Dado que, num es de'tipo entro, antes
convierte al tipo f loat.
w w'vq'qr
carcular c
er gpa, s -

Volumen arfip
66

. @ Copyright tBM Corp.2O02


Los materiales delcurs no pueden >. ,,".
en parte
",,efroOr"idos
o en su totalidad sin el previo permiso escrito de tBM.
o
o
Gua del Estudiante
o macin con C
o Este ejemplo lustra el uso de estructuras, declaracin y sus
usos en un programa.
o Fin del Ejempto 4.8
o
o f 3. Tipos de Datos Definidos por el Usuario
o ' .'
C permite al usuario definir sus propios tipos de datos. La sentencia rypedef
o i los usuarios definir nuevos tipos de datos.que son equivalentes ri iipos
permte a
o de datos
existentes. un nuevo tipo de dato puede ser definido como sigue: "
o typedef tipo-existente nuevo_tipo,.
o
oi Aqu,tipo-existente se refiere a cualquier tipo de dato estndar como int, char,
I float u otros tipos de datos definidos por ef usuario previamente que estn
Ot disponibles. El nombre del nuevo tipo de dato definido por el usuario
es nuevo-ripo,
ol siguiendo las reglas para formar identficadores. Esto es slo un nombre nuevo
dado a
e un tipo. de dato previamente definido. No existen diferencias fundamentales
entre el
nuevo tipo de dato o eldefinido previamente o ef tipo de dato estndar.
o decfaracin:
Note la siguiente
o t.>edef int anio;
o
La declaracin anterior define un nuevo tipo de dato llamado anio
a a int . Con esto, se pueden declarar variables como sique:
que es equivafente
o anj_o A, B, miNacimiento;
a
o Se puede usar el typedef anterior y declarar las siguientes variables tambin:
o anio X[50j, y[50];
o Este declaraxy Y como arreglos del tipo anio, los cuales son realmente un arreglo de
o enteros.
o se pueden tambin decrarar equivarentemente ro siguiente:
o typedef inr anio[50];
o anio X, y;
o
o A continuacin se presenta cmo se hace uso de la sentencia typedef con
estructuras:
o
typedef struct
o {
miamhra 1 .
o mlemro Z;
o
O miembro_n;
o ) nuevo-tipo,.
a Se puede usar este mtodo para definir un nuevo tipo, tal como se muestra
o continuacin:
a

o
o Volumen 3: Tipos e Datos Estruct[EdG]d 67
o @ Copyright tBM Corp.2002
o Los materiales del curso no pueden ser rcproducidos total
o parcialmente sin elpermiso previo escrito de lBM.
o
o
Powered by TCPDF (www.tcpdf.org)
oilF
o
o 't' Gua del Estudiante Introduccin a la Programacin con C

o Se definen tres variables a, b, y c, las cuales son uniones. En la unin, se han definido
o tres variables x, y y z (cada una de un tipo difererente). Cuando se considera la variable
O,., 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
Ol ,
memoria. Tambin, note que un inr ocupa ms mernoria que un char, y un float
o' ocupa ms memoria que un int. Existen muchas cosas de mantenimiento que deben
o hacerse cuando se usan uniones, pero todo esto es tomado en cuenta por el
compilador
o
O* Los miembros de una unin pueden ser de cualquier tipo de datos, aneglos o
t 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
o realizar lo siguiente para hacer referencia a un miembro de una unin:
iuede
o a.x
o b.z
o Por lo tanto, una unin en C es bastarlte semejante a una estructura. El uso de unin
o depende de s ef ahorro de espacio es vital para la aplicacin.
o
o
o
o
a
o
o
O
o
o
o
a
o
o
o
o
o
a
o
o
O
o
o
O Volumen 3: Tipos de Datos Estructurados en C 69
o @ Copyright tBM Corp.2002
o Los matedales del curao no pueden ser reproducidos total
o o parcialmente sin elpermiso previo escrito de lBM.
t.'
o
o
Introduccin a la programacin con C Gua del Estudiante

Resumen
Ahora que ha comptetado esta unidad, usted debe ser capaz
de:
. Explicar cmo declarar estructuras en C
o Discutir el uso de las estructuras en la solucin de problemas a travs de
programas en C
o Describir el uso de tener tipos de datos definidos por el usuario
. Definir uniones y explicar cmo su uso difiere del de las estructuras

Volumens'ripoffi 70

@ Copyright tBM Corp.2002


Los materiales delcurso no pueden ser reproducidos en parte
o en su totalidad sin el previo permiso esctito de lBM.
ol
o
o Gua del Estudiante Introduccin a la Programacin con C
a
o Unidad 4: Examen de Autoevaluacin
o l) Cules de las siguientes son una definicin correcta de una estructura?
o a) srrucr {
o int x;
a float y;
o lr
Jt

I b) strucr {
o int x;
o ' float y;
o Ia,b;
O
C) strucr {
int a;
o float y;
o ) -, b,'
o d) Todas las anteriores
o 2) Al igual que los areglos, las estructuras no pueden contener mltiples elementos
o de datos de diferentes tipos.
o a) Verdadero
o b) Falso
o 3) pueden ser parte de una estructura.
o a) Constantes de cadena
o b) Variables enteras
o c) Constantes enteras
o d) Constantes carcter
o 4) Cules de los siguientes tipos de datos son vldos dentro de una declaracin de
unin?
o
o a) Tipos de datos primitivos
o b) Tipos de datos definidos por el usuario
o c) Ambos (a) y (b)
o d) Ninguna de las anteriores
o 5) Considere que se accede a una variable estructurada como a. b. c . d tol En .
ste caso, cules de los sguientes identificadores se refieren a variables de
o estructuras?
o a) a, b, cyd
o b) a, byc
a c) ayb
a d) Slo a
al-t
!tIt 71

.l . @ Copyright lBMCorp.2002
Los materiales del c{rso no pueden ser reprcducidos total
T
tr
o parcialmente sin el permlso preo escrito de lBM.

ft
o
Introduccn a la programacn con C Gufa det Estudiante

O Considere fa siguiente definicin de una estructura.


qi-rrr-f (

inE x;
float y;
) a, b,-

Es vfida la asignacin a. x = a.y;?


a) Verdadero
b) Falso
7) La sguiente es una definin vrida de un tipo estructura
t.ypedef struct {
int x;
float y;
) rnipropia;
a) Verdadero
b) Falso
8) Los^tipos de dato definidos por el usuario se definen usando palabra
la reservada
de C:
a) struct
b) union
c) rypedef
d) Ninguna de las anteriores
9) cules de los siguientes es un uso conecto de tpedef ?
a) typedef miVar f loat;
b) typedef f1oat miVar;
c) tlpedef f loat char miVar,.
d) typedef char nombre [+07 ,

l0) cules de los siguientes es una definicin correcta de una unn?


a) union {
int. x,-
floaE y,.
char z;
).;
b) union {
int x,.
float. y;
struct fecha z;
)r;

Volumen 3: Tipos e Oaffi 72

@ 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.
o
o
o Gua del Estudiante
amacin con C
o c) union u {
o int x,-
o float y,.
o char z;
o I

a d) Todas las anteriores


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 r ciu"r-+lo 3: Tipos de Datos Estructurados en C
73
o
@ Copyright IBM Corp. 2002
o Los materiales del curso no pueden ser reproducldos total
o o prcialmente sin elpermiso previo escrito de tBM.
o
o
Introduccin a la programacn con C Gufa del Estudante

Respuestas a fa unidad 4: Examen de Autoevaluacin


l) byc
2)b
3)b
4)c
5)b
6)a
7)a
8)c
e) byd
l0) d

Volumen 3: Tipos de Datos gstructuraos en i 74

@ Copyright tBM Corp.2002


Los materiales del curso no pueden ser reproducidos en parte
o en su totalidad sin el previo permiso escrito de lBM. a
$

lntroduccin a la Pr ramaclon cc-


Gua del Estudiante
*
q
o unidad 5: Laboratorio de Estructuras
o
a Objetivos de APrend izaie
I
Al final de esta unidad, usted ser capaz de:
o
o . Usar estructuras en una situcin de soluin de
problemas

. de estructuras
o Desanollar algoritmos para un problema que involucra el uso
. que usa estructuras
o 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 UnlOaO S: taUoratorio de Estructuras 75
Vol"men 3:Tlpos de Datos Estructurados en C
o @ CoPYright IBM CorP' 2002
o Los materiales del crso no pueden ser reproducidos total
o o parcialmente sin el permiso previo escrito de IBM'

o
O
Gua del Estudante

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

Usted ya estudi ef algoritmo para sumar fracciones


mixtas. Considere dos
fracciones mixtase y B que son las entradas suministradas
por el usuario. Escriba
un programa que calcule la resta de a menos e (a _
B) , y la multipficacn de
B), asignndoras a tas fracciones mixtas c y o respectivamente,
flTulrrJf;r." y

2) Declarar una estructura, que consista de tres


miembros, un nmero del libro (un
entero), codigo del libro (un areglo de 8 caracteresiv
precio del libro (un valor
rloat)' Escriba .un programa qe tome como ent oaet i0
detalles de fos mismos. i
tbro. muestre tos

Unidad S:
76

,t-os . .
_, .
^^ materiales
@ Copyright tBM Corp.20o2
del curso no pueden sr reproducidos en parte
o en su totalidad sin el previo permiso
escrito
de tBM.
a-
Introduccin a la
nl-xF
I-I---
I TAT
Programacin con C
rI:-t
r-xtt-
(Codigo del Curso: CY320)
-m ItI (p
- Versin 2.0
--

Gua del Estudiante

Volumen 4: Funciones en
c

fBM Learning Services


Worldwide Certified Material
Informacin de Pubticacin

Esta publicacin ha sido producida usando Microsoft Vrrd 2000 y Microsoft


PowerPoint 2000 para Windows.

Marcas Registradas

IBM @ es una marca registrada de lntemational Business Machines Corporation.

Otras compaas, productos y nombres de servicos pueden ser marcas comerciales


o
marcas de servicio de otros.
Marcas Registradas de otras compaas como se muestra

Windows Microsoft Corporation


Red Hat Linux Red Hat

Edicin Septiembre de 2002

La informacin contenida en este documento no ha sdo sometida a ninguna prueba


formal de IBM y es distribuida bsicamente "como es" sin ninguna ganta y" s"a
expresa o implcita. El uso de esta informacin o fa implementain OL cuatquiera
de
estas tcnicas es responsabilidad del comprador y depender de la habilidad de
ste
para su evaluacin e integracin en el ambiente operacionat del cliente. A pesar
de que
cada tema ha sido revisado por IBM para su exactitud en una situacin especfica,'no i
h.ay garanta de obtener el mismo resultado o uno similar a ste en otra situacin.
Los
clientes que intenten adaptar estas tcnicas a sus propios ambientes lo hacen bajo I

su
propio riesgo. {

copyright International Business Machines corpora tion,2002. Todos los


derechos reservados.

Este documento no_pu_ede ser reproducido en su totalidad o en parte sin el previo


permiso escrito de lBM.

lnstrucciones especiales para la impresin de ste curso

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,. Gua del Estudiante lntroduccin a la programacin con C
o
o
o :a Contenidos
oli Unidad l: Funciones
oj t Objetivos de Aprendizaje 1
ol 1. Introduccin 2
Or .
I
2. Programar Funciones en C 3
o;
3. Definir y Usar Funciones en la Solucin de Problemas
o 3

o 4. Clases de Almacenamiento 20
o 5. Caractersticas de las Clases de Almacenamiento 25
o Resumen 26
o Unidad l: Exmen de Autoevaluacin 27
o Respuestas a la Unidad '1: Exmen de Autoevaluacin 29
o Unidad 2: Laboratorio de Funciones 3l
o Objetivos de Aprendizaje 31
o Ejerccios de Laboratorios 32
o
Unidad 3: Recursin
o
o Objetivos de Aprendizaje 33
o 1. Introduction u
o 2. Escribir Funciones Recursivas 35
o 3. Recursin vs. lteracin 48
o Resumen 49
o Unidad 3: Exmen de Autoevaluacin 50
o Respuestas a la Unidad 3: Exmen de Atoevaluacin 52
o
Unidad 4: Laboratorio de Recursin
o
o Objetivos de Aprendizaje 53
o Ejercicios de Laboratorios u
o
o
o
t
O
3
T
ir
t?
t]
ta
lt

o
T
or
ori Gua del Estudiante Introduccin a la Programacin con c
o
o
o Unidad 1: Funciones
oi
oi
o Objetivos de Aprend izaje
o Alfinalde esta unidad, usted se capaz de:
O . Explicar la naturaleza y usos de las funciones

o . Describir algunas funciones incorporadas de C, y cmo se usan


o . ldentificar las diferentes partes del encabezado de una funcin
o . Describir los diferentes tipos de argumentos
o . Definir los prototipos de funciones y sus usos
o . Explicar cmo usar las funciones para solucionar problemas
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 Volumen 4: Funciones en C Unidad 1: Funciones en C I
a
@ Copyright IBM Corp.2002
Los materiales delcurao rio pueden ser reproducidos total
r o parcialmente sln el permiso previo escrito de IBM
ro
o
Introduccin a la Programacin con C Gufa del Estudiante

1. Introduccin
En el Volumen 2 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.
El lenguaje C soporta algunas funcones incorporadas. Las funciones incorporadas son
aquellas que son parte de la librera estndar de C. Estas son diferentes a ls funciones
definidas por el usuario. Las funciones definidas por ef usuario son aquellas que son
diseadas y escritas por el programador para un uso especfico en las aplicaciones.
Las siguientes son algunas de las funciones incorporadas de C que se han visto y
usado en los volmenes anteriores:
o printf
. scanf
. toupper
o sqrt
Considere la funcin main ( ) . sta usualmente no tiene ninguna entrada sobre la cual
trab$ar. La funcin printf, 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 unidad). ,

Ahora se sabe que una funcin tiene las siguientes caractersticas:


. Tiene un nombre nico (un identificador)
. Trabaja con cero o ms entradas
Las funciones tambin se pueden invocar desde dentro de otras funciones. Esto se
conoce como llamar (calling) a una funcin y la funcin invocada desde otra funcin es
conocido como la funcin llamada (called).
La funcin ffamada ejecuta las sentencias que son parte de la funcin, ttevando a cabo
la tarea deseada. Luego la funcin retoma a la funbin que la invoc. La ejecucin se
reanuda en la sentencia que sigue inmediatamente despus a la tlamada de la funcn.

Unidad 1: Funcones Volumen 4: Funciones en C 2

@ Copyright lBM Corp.2002


Los materiales delcurso no pueden ser reproducidos total
o parcialmente sin el permiso previo escrito de IBM


?r
OF
oi$ Gua del Estudiante lntroduccin a la Programacin con C
o'
o
2. Programar Funciones en C
Q*
C permite a los programadores definir sus propias funciones para llevar a cabo una
:
:t
!
tarea bien definida. Esto se conoce como funciones definidas por el usuario. Algunas de
las caractersticas de C con relacin a las funciones son:
. Permite a los usuarios definir funcione.s definidas por el usuario.
r'{ .
a' .
Ofrece un mecanismo para pasar entradas a la funcin.
Ofrece un mecanismo para aceptar las entradas pasadas y luego procesarlas.
O*
o . Ofrece un mecanismo para retomar un solo valor como resultado.

o . Ofece un mecanismo para tomar en cuenta numerosas tareas intemas que


pueden estar involucradas en el proceso de invocar una funcin, transferir el
o control a la funcin, ejecutar la funcin y retomar a la funcin que la invoc
a Pero permanece la pregunta, Por qu. se deben usar las funciones? Las funciones
o tienen numerosas ventajas. Algunas de ellas son:
o . Permite desmmponer un programa grande en partes ms pequeas,
O manejables y autocontenidas. Esto se llama modularizacin. La modulanzactn
se puede lograr en C slo a travs de las funciones. Ellos proporcionan una
o claridad lgica a los programas al descomponer un programa grande en
o pequeas unidades.
a . Ayudan a evitar repetr la programacin de las mismas instrucciones que
o necesitan otros programas o partes de un programa.
o . Ayuda a los programadores a construir sus propios conjuntos de funciones en
una librera personalizada.
o
o . Permiten que porciones del programa que son dependientes de la mquina sean
separadas de las otras, para facilitar la portabilidad de los programas.
o
Una vez entendida el por qu las funciones son necesarias, se va a continuacin a dar
o una definicin de funciones y aprender a usarlas en fa resolucin de problemas.
a
o 3. Definir y Usar Funciones en la Solucin de Problemas
o
Primero se aprender en qu consiste una funcin, de manera que se pueda definir
o una funcn. Una funcin mntiene dos partes principales:
o . Encabezado de la funcin
O
. Cuerpo de la funcin
o
Una encabezado de funcn contiene lo siguiente:
o
o . Especficacin del tipo delvalor a ser retomado por la funcin.

o . Un nombre de funcin (siguiendo las reglas para crear un identificador).

o . Un conjunto de argumentos (dato pasado como una entrada a una funcin) que
estn separados por comas.
o
o Volumen 4: Funciones en C Unklad 1: Funciones en C 3
o
I

@ Copyright IBM Corp. 2002


Los materiales del q.rso no pueden ser repioduddc total
p o parcialmente sln elpermlso previo escrito de IBM
o
o
Introduccin a la Programacn con C Gufa del Estudante

El conjunto de argumentos en un encabezado de funcin es opconal. Cada argumento


es precedido por su declaracin de tipo.
tipo_de_dato nore_de_funcion (tipo arg1, 1po arg2 , ...)

Si una funcin no toma ninguna entrada, el eneabezado tendr un nombre de funcin


seguido por ( ) . Por ejemplo, considere el siguiente encabezado de funcln:
int max(inE x, int y) ;
Se pudo haber omitido d tipo de dato inr para el encabezado de funcin ya que C
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 Sentencias de asignacin
. Sentenciascompuestas
o Llamadas a funciones
. Cualquier sentencia vfida
El cuerpo puede contener cero o ms sentencias return. Las sentencia return
ayudan a pasar el valor del resultado nico al programa que hizo fa tlamada.
La forma generalde la sentenc rerurn s 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 C 4

@ Copyright IBM Corp. 2002


Los materiales del curso no pueden ser reproducidos total
o parcialmente sin el permiso previo escrito de tBM
o
O
o Gua delEstudiante Introduccin a la Prooramacin con C
O
o . La sentencia return se usa cuando hay mftiples condiciones verflcadas en
o una funcin y la funcin debe finafizar su ejecucin, cuando una de sus
o condiciones se satisface. El siguiente segmento de codigo ayudar a entender
o esto claramente:
void Nombre_de_la_Funcion(int x, int y, int z) {
if (*'") {
sentencias;
retrurn,.
1
)

a' else if (x t z) {
a sentencias;
a ral-rrrn.

O )

o
o .
)
Se considera una buena prctica de programacin insertar una sentencia
o return an cuando hay un solo punto de retomo en la funcn.
o En todos los programas en este curso, la funcin main tiene el tipo de retorno void y
o no se usa explcitamente la sentencia return. Se puede, sn embargo, aadir la
o sentencia durante la ejecucin en un computador. La sentenca return causa que el
o 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
o tener una o ms sentencias return. A continuacin se presentan algunos ejemplos.
o
o Ejemplo 1.1: Determinar el Mximo de Dos Nmeros Enteros
o int max(int x, int y) {
o j_f (x >= y)
o return (x) ; t
el-se
o rl.!1rn lrrl .
o \I
' '

o '
o se enne una funcin llamada max que retorna uo int como resultado.
o El cuerpo de la funcin es bastante simple, dado que slo verifica cul de las variables
o es mayor y retoma el valor.
o
Fin del Ejemplo 1.1
O
o
o
i
,
Volumen 4: Funciones en C Unidad 1: Funciones en C 5
)
@ Copyright IBM Corp. 2002

II
t
Los materiales del curso no pueden ser reproducidos total
o parcialmente sin elpermlso previo escrito de IBM

o
lntroduccin a la Programacin con C
Gufa delEstudiante

Ejempfo 1.2: Determinar si un Entero es lmpar


int. eslmpar(int. x) {
if(xt2!=O)
return (1); /* veRoADERo si es impar */
e 1se
ral-rrrh /n\ .
\v I t /* rar,so si no es impar */
)

Este programa slo verfca si ef residuo de la divisin entre


2es 0. S elresiduo no es 0
entonces ste es un nmero impar y se retoma un valor de verdadero.
que en
c el valor de 1 se considera VERDADERo y elvafor 0 FALSo. Esto es Recuerdelo que la funcin
antenor retoma.

Fin del Ejemplo i.2

Ejemplo 1.3: convertir un carcter de Minscura a Mayscura


cha: ::,:::_a_nay (char en) {
* -,-e.rfica si en est entre a y z */
:j le:: >= 'a' && en <= ,zt){
recurn (en - ra' + tAr) ;

FP1-rrr . f\ on\
ul/ .
, /* retorna en como est * /

]
La funcn trabaia basado en que a los caracteres se le
asignan cdigos nicos ASCll,
los cuales pueden tratados como nmeros. Si en.realmente eneLt
carcter .,,
entonces en - 'a'
ser cero, de este modo se retornar
+ return (in .a,
;
'A' ) retomar slo 'A' . S en tiene el carcter . B, , entonces el valor retomado ser
'A' + 1, l cual es 'B'
dado que los valores ASCII se dan para todo el alfabeto,
en
secuencia. Una vez dicho esto, recuerde que ya se ha usado un
funcin incorporada en
C.llamada toupper en el Volum en 2, lJnidad 3-
Construcciones lterativasque hace la
misma tarea.

Fin del Ejemplo 1.3

Ejempfo 1.4: Determinar er Mximo comn Divisor de Dos Enteros


int mcd(int x, j-nt. y) { a
>

while (x l= 0 && y t= 0) {
:

if (x r= y) ?

{
:
Unidad l: Funciones Volumen 4: Funciones en C 6

@ Copyright tBM Corp. 2002


Los materiales delcurso no pueden ser reproducidos total
o parcialmente sin el permiso previo escrito de IBM
oF
o,'
O; '
Gua del Estudiante Introduccin a la Programacin con C

o
o x = xZy;
q. else
q: y = y*x;
a: )
a if (x == 0)
return (y) ; /*y es mcd*,/
a
a; e1 se
return (x) ; /*v ac m* /
a
)
o
Fin del Ejemplo 1.4
o
o Ejemplo 1.5: Determinar el Mnimo Comn Mltiplo de Dos Enteros
o int mcm(inE x, int y) {
o return ( (x " y) / mcd (x,y) ) ;
o )

o Como se observa, estia es una funcin muy compacta. La funcin explota el hecho de
o que el MCM de dos enteros es el producto de los dos nmeros enteros dividido entre su
o 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:
o
o ( (x " y) / mcd (*,y) )

o La presencia de la funcin en la expresin implica que se invoca a la funcin y sta


I retorna el valor de la funcin a ese punto en la expresin. As, si mcd (x, y) retorna un
valot z, entonces mcd (x, y) ser remplazado con el valor z en la expresin.
o
o Fin del Ejemplo 1.5
o Ejemplo 1.6: Determinar el Factorial de un Entero
o
int factorial (int x)
o int k,fact;
{
/* variables locales */
o fact = 1;
o if (x == o ll x == 1)
o return (1); /* I es e1 resultado */
o else {
o for(k = 2; k <= x; k++)
o fact=fact*k;
o return (facE);
o
to
i
)
Volumen 4: Funciones en C Unidad l: Funciones en C 7

@ Copyright IBM Corp. 2002


Los materiales delcurso no pueden ser reproduddos total
? o parcialmente sin el permiso prevo escritode IBM 4
o t

o
lntroduccin a la Programacin con C
Gua del Estudiante

Este programa es autoexplicativo.

Fin del Ejempto 1.6

A continuacin se discute cmo invoca_ y usar las funcrones definidas por el usuario.
funcin puede ser invocada especifiando el nombre de la funcin 'seguida por
-Una la
lsta de argumentos separados por comas. Esto tambin se denomina una llamada
a ta
funcin o llamada a funcin. Si una funcin no requiere de argumentos, se puede
simplemente escribir el nombre de la funcin con O , como r.t f iIler
O . La llamada a
la funcbn puede suceder en una expresin simple o como parte de una expresin
compleja. Los argumentos en la llamada a la funcin se llaman argumento.s acfuales
parmetros actuales. Existe una corespondencia uno-a-uno de la ist y o
OLf tipo de loi
argumentos formales con los argumentos actuales. Et valor de cada prmetro
actuai
ser pasado como entrada a la funcin llamada a travs del corresponOi"nt" parmetro
formal.
Ya se ha hecho uso de una funcin, como se mostr anteriormente.
return ( (x * y) /mcd(x,y) ) ;
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 Paso 1: Deflnir una funcin primo ( int x) que verifica si x es primo o no
. Paso 2: lngresar y validar mrira
o Paso 3: for (todo k desde 2 a NUM)
if (primo (k) == VERDADERO)
prinE k; .
Basado en este algoritmo, se puede escribir et program a para generar los nmeros
primos entre z yNUM, como sigue:

El cdigo C incia aqu...


#include <stdio.h>
#define VERDADERO 1
#define FALSO O

/* verificar si un nmero dado es primo o no * /


int primo (inr x) {
inr k = 2, continuar;
continuar = VERDADERO;

Unidad 1: Funciones Volumen 4: Funciones en CI


@ Copyright IBM Corp.2002
Los materiales delcurso no pueden ser reproducidos total
o parcialmente sin elpermiso previo escrito de IBM
F
% Gua del Estudiante Introduccin a la Programacin c:^ ,
-.-
o while (k .= x-1 && contj-nuar == VERDADERO) t

'lr
^t
if (xBk==0)
x-1r cont.inuar = FALSO;
e1 se

fl& ,
t
*.** t

I*
if (continuar == VERDADERO)
return
tt
-I

e1 se
(VERDADERO);

q; return(FALSO);
o )
o /* La f rrn i n m i n amni aza att * I/

o main () {
o inf rrh i

o printf("Ingresar un nmero positivo \


o hasEa el cual se desea comprobar \
' si exisEen primos " ) ;
o
/* Aceptar fa enErada desde el usuario */
O oot
o scanf (u?du,&num),'
o /*Yerifcar gue e1 nmero ingresado es
o positivo o no */
o if (num<=0 | | num>32?6?) {
o print.f("Ingresar un nmero menor \
qve 32767 \n" ) ;
o
)
o
)whi1e (num<=0 | | num>32?67) ;
o
I prinEf ( "Los Nmeros Primos son: \n ");
o for ( = 2; i <= num; i++)
I f (primo(i) == VERDADERO)

t printf ( *3d\t", i) ;

-LI ra|-rrrn l1 I .

tI
-l
)
/* La funcin main termina agul */
rt
tl
El cdigo C termina aqu

-IE
-t
Volumen 4: Funciones en C Unidad l: Funciones en C
T 9

@ Copyright IBM Corp.2002


II Los materiales delcurso no pueden ser reproducldos total
o parcialmente sin elpermlso prevo escrito de IBM
E
t
o
lntroduccin a la Programacin con C
Gua del Estudiante

La funcin es fcil de entender. Simplemente evala s un nmero


dado de entrada es
qrimo o no y retoma por consiguiente vERDADERo o FALso. El programa main
implementa un bucfe para considerar cada uno de los enteros desde 2 a
u, y verifica
siestos son primos o no. sief nmero es primo, este se imprime.

Fin del Ejemplo t.Z

Ejemplo 1.8: Determinar si un Entero es un p"lndror"


Se va a escribir una funcin para determinar si un entero dado como entrada
es
palndrome. Se sabe que un entero positivo es un palndorme
si los dgtos def nmero
ledos de izquierda a derecha son tos mismo si se leen de derecha
a izq"uierO.
El cdigo C incia aqu...
#i.nclude <stdio.h>
#define VERDADERO 1
#define FALSO O

:-nt pal j-ndrome (int x) {


int izquierdo, derecho, digito, guardar, poswt,.
int k, continuar;
/* Contar el nmero de digitos en x */
digito = O;
guardar = x; /* tener una copia d,e x * /
while (guardar r= O) {
digito++;
guardar = guardar / tO;
1
I

/* Aqu digito es el- nmero fle dgitos */


/* Buscar el peso posicional a1 extraer el
dgito izquierdo como lOndigito_t *1
PU-WL = ar'
for (k = 1; k <= (digito - 1); k++)
poswt=poswt*10;

,/* aplicar e1 proceso de comparacin */


guardar = ; /* Tomar una copia d.e x */
cont.inuar = VERDADERO; I
while (guardar != 0 && cont.i-nuar == VERDADERO) {
/* Algito izquierdo *,/
izguierdo = guardar / poswt;

Unidad l: Funciones Volumen 4: Funciones en C lO

O Copyrght IBM Corp.2002


Los materiales del curso no pueden ser reproducidos total
o parcialmente sin elpermiso previo escrito de IBM
*
I
or
o
o; Gua del Estudiante Introduccin a la Programacin con C
o
o derecho = guardar Z L0; /* dgito derecho */
o. if (izguierdo == derecho) {
oi /* Nuevo x como izquierdo, derecho sacado*/
o guardar = (guardar t poswt) / i-0;
o poswE = poswt / l.oo;

o )/"rin de1 if *y'


else
o continuar = FALSO;
o )/*rin de1 else*,/
o return (continuar);
o /"Fn de la funcin palindrome */
o
o main (void) i
o int num, continuar;
o
o /* Tomar Ia entrada de parte de1 usuario * /
printf ( "fngresar un nmero entero positivo menor \
o qwe 32767:") ;
o scanf (u?du,&num),-
o
o /*verificar que eI nmero dado es posit.ivo o no */
o if (num<=o I I num>32767) {
o print.f("*d no es un nmero entero positivo ",num)
o nrintsf /rr\ n 9 oc r\'^r ,,6 ?2767\n",num);

o )

o else {

o /*fnvocar 1a funcin palindrome para werificar


si una entrada dada es palindrome o no * /
o continuar = palindrome (num) ,.

o
o if (conLinuar == VERDADERO)
o printf ("?d es un palindrome \n",num),-
o else
o printf(utd no es un palindrom\ri",num);
o )/*rin de1 else*/
o )/*ri-tr del main*/
o El cdigo C termina aqui

o
o
o Volumen 4: Funciones en C Unidad 1: Funciones en C l1
o
@ Copyright IBM Corp.2002
o Los materiales del curso no pueden ser reproducidos total
o o parcialmente sn elpermlso previo escrito de IBM
o
o
Introduccin a la Programacin con C
Gua del Estudiante

Para verificar si un entero es un palindrome, se tiene que extraer el


dgito ms a la
izquierda y verificar por igualdad con el dgito ms a la deiecha. Sin
embaigo, dado que
no se sabe cuntos dgitos tiene el enter dado, se requiere primero contr
el nmero
de dgitos usando ndigitos. Slo cuando se hace eso se puede extraer
el dgito ms
?)1,:..'i"rd."r. El peso posicional de este dgito es 10ndsit-r y'divdieno-ef nmero entre
'lu"-''"-' se obtiene el nmero ms a la
izquierda- Dividiendo el resto entre l0 se obene
el diqito ms a la izquierda. Si los dos dgitos cbinciden, entonces el nmero tiene la
posibifidad de ser un palndrome, de otro nlodo no. Para seguir
adelante, ie oeoe crear
un nuevo nmero descartando el actual dgito ms a la iz{uerda y el igto
ms a la
derecha. Para los pasos subsiguientes, el peso posicional se uru p"r"
el dgito
ms a la izquierda debe ser dividido entre 100 (iecordando que se han "i"", descartado dos
dgitos).

A continuacin se presenta otra solucin al problema at usar arreglos para encontrar


palndromes.

Elcdigo C inicia aqu...


#include <stdio-h>
#define VERDADERO 1
#define FAISO 0

int. palindrome (inr x) {


int array[100], i, j, digito, continuar;
digito = 0;
i = 0;
/* Extraer cada dgito y almacenarlo en un arreglo */
while (x != 0) {
digito++;
array[i++] =x?10;
x = X / iO; '
)/*rin de1 bucle */
continuar = rERDADERO,.
i = 0;
/*Comparar e1 primer dgito del arreglo con eI
ltimo dgito*/
for (j = digito - 1; (i < dgito/z) && continuar; ) {
if (array[i] t= arrayljl )
conE.inuar = FALSO;
i++ ; l-- ;
) /*rin del for*,/
reC.urn (continuar) ,.

Unidad 1: Funciones Volumen 4: Funciones en C 12

@ Copyright tBM Corp.2002


Los materiales del curso no pueden ser reproducidos total
o parcialmente sin el permiso prevo escrito de IBM
:r
o
Gua del Estudiante

)) t,/*Pi n de na I i ndrome*
vrrre //
Introduccin a la proqramacin con C

main (void)
:tt {
int. num, cont.inuar;
/* Tomar 1a entrada del usuario */
printf ("fngresar un nmero ent.ero positivo: r');
scanf ( t' ?d,r , &num) ; '

Ia * T ,/*Verificar si e1 nmero dado es positivo o no */


if(num > 0 && num<32258) {
I a /*fnvocar La funcin palndrome para verificar
o si una entrada dada es palndrome o no */
o conLinuar = palindrome (num);
o if (continuar == VERDADERO)
o printf ( " *d es un palindrome\n', , num) ;
1se
o e

printf ("*d no es palindrome\n",num)


o J/*r.;n
t r Aal
ss :F*/ /
r
;

o else
o printf("Ingresar un numero > 0 y < 32768\n ");
O ]/*Firr de 1a funcin main*,/
o El cdigo C termina aqu
o
o Compare este programa con el presentado en el Ejemplo 3.6 delVolumen 2, tnnidad 3
Construcciones lteratvas del Volum en 2. Ambs iesaltan el aspecto bueno de la -
o resolucin de problemas. Mentras en el primero caso se usaron slo lazos para llegar a
o la solucin, en este se usaron arregfos.
o End of Example 1.8
o
Ejemplo 1.9: Determinar que Nmeros primos son palndromes
O
o En este ejemplo se har uso de fas dos funciones ya disponibles para escribir un
o programa que verifique por los nmeros primos que son tambin palndromes.

? El cdigo C comienza aqu...


t
tt
#include <stdio.h>
#define VERDADERO 1
#define FALSO O
I
? main O {
ot inE num,.
printf("Ingresar un nmero positivo < 3276g2 n);
o
Volumen 4: Funciones en C Unidad l: Funciones en C 13
@ Copyright IBM Corp.2002
Los matsiales delcunso no pueden ser reprcducidos total
o parcialmente sln el permiso prevo escrito de IBM
lntroduccn a la Programacin con C
Gua del Estudiante

oot
scanf ( n?du, &num) ;
] while (num <= 9 | num>32767) ;

/* verifcar si e1 entero es un nmero primo asf como


tambin un pa1ndrome */
if (primo(num) == VERDAnERO &&
palindrome (num) == VERDADERO)
printf("td es tanto primo como palindrome\n,,,num);
else if (primo(num) == VERDADERO &&
palindrome (num) == FALSO)
printf("?d es primo, pero no un palindrome\n,,,num)
else if (primo(num) == FALSO &&
palindrome (num) == VERDADERO)
printf(u?d no es primo, pero es palindrome\n,,,num);
else
printf("?d no es pri-mo ni palindrome\n",num);
)
int primo(inr x) {
int,k=2, continuar,.
continuar = VERDADERO;
while (k .= x-1 && continuar == VERDADERO) t
if (x?k==0)
continuar = FALSO;
e 1se
k++;
)
if (conclnuar == VERDADERO)
return (VERDADERO);
e1 se
return (FALSO) ;
)
int palindrome (int x) {
int. izquierdo, derecho, digito, guardar, poswE.;
int k, continuar;
/* Contar el- nmero de dlgitos en x */
digito = o;
guardar = x; /* Hacer una copia de x */
while (guardar != O) {

Unidad 1: Funciones Volumen 4: Funciones en C 14

. @ Copyrght tBM Corp.2OO2


Los materiales del clrrso no pueden ser reproducidos total
o parcalmente sin el permiso previo escrito de tBM
OF
o
o Gua del Estudiante Introduccin a la Programacin con C
o
o or-gr-tro++;
o guardar = guardar / to
o: t)
o /* aqui digito es eI nmero de dgi-tos */
o /* Buscar e1 peso posicional a1 extraer e1 dgito
o izquierdo como londigito-l */
o, Poswt = 1,'
for (k = r; k .= (digito - 1); k++)
o poswt = poswt 't 10;
o /* Rea]-:-zar la proceso de comparacn */
o guardar = x; /* Hacet una coPia de x */
o continuar = VERDADERO;
o while (guardar ! = 0 &&. iontinuar == VERDADERO) {
o izguierdo = guardar / poswt; /* dgEo izgulerdo */
o derecho = guardar ? 10; /" digito derecho */
o if (izguierdo == derecho) {
o /* Nuevo x con izguierdo, derecho arrojado*/
guardar = (guardar ? poswt) / ao;
o poswt = poswt / LO1;
o
)/*rin de1 if*/
o else
o continuar = FALSO,'
o )/*rna of else*/
o return (continuar);
o )/*rin de Ia funcin palindrome*/
o El cdigo C termina aqu
o
o Este programa result muy simple ya que tenan dos funciones primo y
palindrome. Solamente se tuvo que verifcar ""
s un entero dado como entrada es
o primo y palndrome.
o
Fin del Ejemplo 1.9
o
o Hasta ahora todas las funciones defnidas por el programador precedbn a la funcin
a main O . Esto era para permitir que el compilador tuviera definida las funciones
o definidas por el programador mucho antes que de que la funcin main ( fuera )
accesada. En este mtodo, primero se desarrolla y se colocan las funciones que se
o necesitan y despus se enlazan. Esto se llama enfoque bottom-up (de abajo-haca
o anba) de solucin de problemas
o Existe otro enfoque para resolver problemas, denominado enfoque top4own (de aniba-
o hacia abajo). En este mtodo, la funcin main O aparece delante de todas las otras
t
I) Volumen 4: Funciones fl 'C

@ Copyright IBM CorP. 2002


Unidad 1: Funciones en C 15

Los materiales del curso no pueden ser reproducidos total


b o parcialmente sln elpermiso previo bscrito'de IBM
I
o
lntroduccin a la programacin con C
Gua del Estudiante

funciones definidas por el usuario. Mientras esto


es bueno para los desanolladores, no
permite que un compilador trabaje a menos
sea informado con antelacacin que tales
funciones definidas por el usuario van a ser
accesadas y que van a ser defindas
posteriormente' El compilador es informado
a travs de un prototipo de funcin.
Los prototipos de funcin se especifican af comenzo
antes de la funcin maino. Er 'prototipo de.un-irn de un programa en C, incfusive
se escribe en forma general
como sigue:
tipo-de_dat.o nombre_funcion (tipo1 arg7, tipo2
arg2,. . . ) ;
Aqu el tipo-de-dato es el tipo de dato del elemento retomado por
nombre-funcion es el identificador, es decir, el nombre ta
funcin.
de la funcin. Los efementos
dentro de los parntesis definen los argum;r
justamente nombres mudos (dummy t sus tipos.Los argumentos son
names) reconcidos dentro del prototipo. Estos
pueden ser omitidos, aunque no es recomendable:
inE sum ( int , int ) ,.

La sentencia anterior es aceptada, pero se recomienda


el uso de los nombres tambin,
tal como se muestra a continuacin:
int sum(int x, j-nt y),.
Tambin es recomendable usar los mismos nombres
de arg_umentos en el prototipo que
los nombres que sern usados en la lista de
los paameiros formales. Los tipos de datos
de los argumentos.fistados- en el prototipo deben'"n"or
con
el encabezado de la funcin (como parte de los parmetros aquellos que aparecen en
actuales en la llamada deben tamin formafes). Los parmetros
funciones no son obligatorios en c. sin embargo,
"oo".pon"r
,
estos. Los prototipos de
r""iln la verificacin d'e errores por
elcompilador.
A continuacin se
,resuelve un problema
definidos) antes concluir la unidad.
adicional (con prototipos de funciones

Ejempfo 1,10: Localizar Fracciones Mlxtas Extraas

g,|,!::Sfficonsiste en generar alguna fraccin r,*," extraa. Las propiedades que

' Todas elras estn formadas sro por enteros


de tres dgitos.
. Todas effas representan slo nmeros positivos.

' cada parte de la fraccin mixta, es decir, la parte entera,


denominador, son todos nmeros que son tanto primo,
el numerador y el
"i,noioru..
"or
se escribir un programa en c que genere e imprima fracciones
las propiedades anteriores. mixtas que satisfagan

se sabe que se tienen que formar todas las fracciones


mixtas que se puedan a partir de
enteros positivos de tres dgitos. Pero no todas
estas fracciones mixtas sern vfidas.
Por lo que, lo primero que se debe hacer es
verificar si la fraccin mixta formada es

Unidad l: Funciones
Vofumen 4: Funciones en C t6
@ Copyrght tBM Corp.2002
Los materiales del curso no pueden ser reproducidos
total
o parcialmente sin elpermiso previo escrito de tBM
a
a F
IE
t*
o It Gua del Estudiante Introduccin a la Programacin con C
o I
i

o vlida. Si la fraccin mixta es vlida, entonces se debe verificar si todos sus


o componentes (parte entera, numerador y denominador) son primos y palndromes. Si
a todas estas condiciones se satisfacen entonces se tiene que imprimir la fraccin mixta,
sino se debe proceder a formar la prxima fraccin mixta candidata.
o
o Claramente, se deben desanollar funciones para verificar lo siguiente:
o . Siuna funcin mixta es vlida.
o . Siun entero dado como entrada es un nmero primo
a . Siun entero dado como entrada es un palndrome
o
El siguiente es el algoritmo para calcular esto:
o
o . Step 1: void main ( ) {
for (i = 100; <= 999; i++)
,

o i

o I for(j = r00; j <= 999; j++)


for(k = 100; k <= 999; k++)
oj i
formarAcomoyl/k;
oi
i

if (validar_fm (A) )
oi I
l

if(Eodo i, j, y k son primos y palindromes)


Or ;
print A,'
o )
o . Paso 2: Definir una funcin llamada validar fm que determina s una fraccin
o mixta es vlida
o . Paso 3: Definir una funcin llamada primo
o . Paso 4: Definir una funcin llamada palindrome
o Basado en este algoritmo, se puede desanollar el siguiente programa en C:
o
El cdigo C comienza aqu...
o
o #include <stdi-o. h>
o #define VERDADERO 1
o #define FALSO 0
int validar_fm(inE num, int den);
o int. primo(int x) ;
o int palindrome (int x) ;
I int validar_fm(int num, int den) {
I /*Verifica e1 nmero de la fraccin mixta
t if (num < den)
q return (IIERDADERO) ;
di else
dt reEurn (FALSO);
Volumen 4: Funciones en C Unidad l: Funciones en C 17

@ Copyright IBM Corp. 2002


Los materiales del curso no pueden ser reproducidos total
o parcialmente sln el prmso previo escrito de lBM
Introduccin a la programacin
con C
Gua del Estudiante

] /" r'in de La funcin validar_fm */


mainO {
int i, j, k,.
sc,rucE {
inL parte_completa ,.

j-nt numerador ;
int. denominador
) 4,.
for (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 = j-
A.denominador = k,.
/* verificar si A es vaLidar fm */
if (validar_fm (A. numerador,A. denominador)
)
/* Verificar si es primo y pa1ndrome*/
if (primo (i) && palindrome (i) cc primo (j
)\
&& pal-indrome ( j ) &c primo (k)
&& \
palindrome (k) )
prinrf (.?d\r ?d\r td\n,,,
A.part.e_completa, \
A.numerador , A.denominador ),.
j/* rin del bucle for con k */
]/* rin del bucl.e for con j ,t/
] /* Fin del bucl-e for con i *,/
)/* r'in aet main *,/

int palindrome (int x) i


int izquierdo, derecho, digito, guardar,
poswt;
int k, continuar;
,/* Contar el nmero de dgitos en x */
digiLo = 0,.
guardar = ,- /* hacer una copia de x */
whil,e (guardar I = 0) i
digito++;
guardar = guardar / l-O;

Unidad l: Funciones
Volumen 4: Funciones en C lg
@ Copyright tBM Corp.2002
, ^_
Los materales del curso no pueden ser reproducidos
totaf
o parcalmente sn ef permiso prevo estrito de IBM
o llF
o
o Gua del Estudiante Introduccin a la programacin co c
o
o It
o I
/* Aqu digito es e1 nmero de dlgitos */
o /* Buscar e1 peso poscional al ext.raer el
o I
dlgito izguierdo como l0ndigito-t *7
o poswt = 1;
o for (k = r; k <: (digitso - 1),. k++)
poswt=poswt*10;
o fniciar e1 proceso de comparacin */
/*
o guardar = x; /* Tomar una copia de x */
o continuar = VERDADERO;
o whil-e (guardar ! = 0 && conLinuar == VERDADERO) {
o ,/* digito zquerdo */
o izguierdo = guardar / poswt;
o /* digito derecho *,/
o derecho=guardar?L0;
o if (izguierdo == derecho) {
d /* Nuevo x con izguierdo, derecho arroj ado* /
guardar = (guardar ? poswt) / lO;
o posh/t = poswt. / IOO;
o J/*nin
tt
de] if */I
o else
O continuar = FALSO;
o )/*Fin de1 else *,/
o return (continuar);
o )/*Pn de la funcin pa1ndrome */
L.
-.

o int primo (int x) {


o int. k = 2, continua,r,.
conLinuar = VERDADERO;
o .whi1e (k <= x-1 && continuar == VERDADERO) {
o if(xtk==0)
o continuar = FALSO;
o else
a k++,'
o )
if (continuar == VERDADERO)
? return (VERDADERO);

I
else
? return (fALSO) ;
e
t
Volumen 4: Funciones n C Unidad f: Funciones en C 19

@ Copyright IBM Corp.2002


Los materiales del curso no pueden ser reproducictos otat
o parcialmente sn ef permiso previo escrito de IBM

It
lntroduccin a la Programacin con C
Gua del Estudiante

El cdigo C termina aqu

No se escribieron las otras funciones primo y palindrome, ya que se escribieron


anteriormente.

Fin del Ejemplo l.l0


A continuacin se discute uno de los conceptos ms importantes cuando se
escribe un
programa que usa funciones, las clases de almacenamiento (storage
classes).

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.
Elformato de especificacin de una clase de almacenamiento es como sigue:
<clas+de-almacenamiento> <tipo-de-dato> nombre-variable;

Una clase de almacenamiento se usa para especficar al complador el tipo


de memora
que el programa necesita para sus variables. C tiene las siguientes
cjairo clases de
almacenamiento:
. Automatic
. Stat.ic
. External
e RegisLer

4.1. La Clase de Afmacenamiento automatic


Todas las variabfes declaradas dentro de una funcin, llamadas varables
/ocales (locat),
por defecto conesponde a la clase de almacenamiento automatic.
De otro modo, se
pueden declarar como sraric. Sea el siguiente ejemplo:
inr f1O i
int. i;
f 1oat. f ,.

sent.encial;
sentencia2;

senEencian,.

Unidad l: Funciones Volumen 4: Funciones en C 20

@ Copyright tBM Corp. 2002


Los materiales del curso no pueden ser reproducidos totat
o parcialmente sin el permiso previo escrito de IBM
:r
of Gua del Estudiante Introduccin a la Proqramacin con C
o
o I

Iri
III
:tt
En el ejemplo anterior, la variable i es una variable automatic. La palabra reservada
auto se puede usar opcionalmente, como auto int i. Cualquer declaracin dentro
de una funcn, donde no se especifica la clase de almacenamiento es, por defecto,
?i
o iF automatic. Las variables automatic declaradas dentro de una funcin obtienen el
.li espacio asignado slo cuando se invoca la funcin. El compilador fibera el espacio tan
pronto como la funcin retoma.
oli 4.2. La Clase de Almacenamiento srarc
oi-
oi La clase de almacenamiento static le informa al compilador que los valores
almacenados en las variables estn disponibles entre llamadas a funciones. Las
oi variables automatic pierden los datos cuando la funcin retorna, ya que el espacio
o asignado a las varibles se bera. Por ejemplo, si se declara una variable dentro de una
oi funcin como staric y se le asgna un valor 10, durante el curso de la ejecucin de la
funcin, el vafor 10 se retiene cuando la funcin se nvoca nuevamente. Cualquier
ol cambio que se haga durante esta invocacin ser retenido durante la prxma
o invocacin de la funcin. Un buen ejemplo de su uso es cuando se crean nmeros de
o identidad (secuencialmente) a travs de una funcin.
o /" BI archivo de encabezado con 1as fuciones estndar
que soportan 1a entrada y salida se incluye (stdio-h) */
o
#include <stdio.h>
a
/* Declaracin de funcin *,/
a int generarfdno O ;
o /* La funcin main inicia aqu */
o void mainfl {
o int i,-
o /" tI bucle inwoca 1a funcin generarld.no * /
o for (i = 1; i <= 10; i++)
nvi nc t rE1 r:to es *d\ntt , generarldno
o '|
r
O);
o
o /* La funcin main fj,na)-za aqui */
o /* La fucin generarfdno inicia aqul */
o int generarldno O {
o sEatic int idno = 0;
return ++idno,.
]
/* La funcin generarldno finaliza aqo */
Este es un uso simpfe de la clase de almacenamiento static en una funcin. Sin
embargo, en un esfuezo de programacin complejo, es muy importante el uso de la
clase de almacenamiento static. Las variables declaradas como sraric son

Volumen 4: Funciones en C Unidad 1: Funciones en C 2l


@ Copyright IBM Corp.2002
Los materiales det curao no pueden ser reproducidos total
o parcialmente sin elpermlso previo escrito de'lBM
Introduccin a la Programacin con C
Gua del Estudiante

inicializadas cuando la funcin se llama la primera vez.


Las llamadas subsecuentes a la
funcin no inicalizan la variable. As, cuando generarrdno (
1 en maino), la variable static idno es inicializada
) es ilamada (cuando es i
en 0. Es entonces inciementada y
retomada a la funcin que hizo la llamada. Cuando generarrdno (
nuevamente, no se realha nnguna inicalizacin. Ef valor
se invoca )
anterior de idno se retiene y
se incrementa para retomar et prximo valor dg i.
4.3. La Clase de Almacenamiento external
Las variables declaradas fuera de la funcin pertenecen a la
clase de almacenamiento
external. Estas varables son visibles a travs del program a, a partir del punto
que se
hace sus declaraciones. Cualquier cambio que se naga estos
valores afectan al resto
del programa. Vase elsiguiente ejemplo:
/* nr archivo de encabezado con las fuciones estndar
gue soportan la entrada y salida se incluye (stdio.h) */
#include <sLdio.h>
/* Declaracin de funciones */
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 ( ) *7
/* puede usar sol-o k declarado fuera * /
)
/* La funcin main inicia aqu */
/* Declaracin de variable external- */
int ji .
/* fmplementacin de las funcj-ones */
/* La funcin f1 inicia aqui */
void f1 O {
/* puede usar ambos k y j declarados fuera */
)
/* La funcin f1 finaliza aqu */
/* La funcin f2 inicia aqu */
char f2 O {
i,nt k,' /* varable local de f2 O */
,/* puede usar local k y exEernal j ,t/
)
/* La funcin f2 finaliza aqul */

Unidad 't: Funciones Volumen 4: Funciones en C 22

. @ Copyright tBM Corp.2002


Los materiales del curso no pueden ser reproducidos total
o parcalmente sin elpermiso previo escrito de IBM
of
o
o Gua del Estudiante lntroduccin a la Programacin con C
o
o En el ejemplo anterior, se declararon dos variables external k y j. k es visible main,
o, j
f 1 y f2. es visible slo en fry f2. Las variables extemal son visibles en funciones
j
slo desde el punto de su declaracin. est declarada justo antes de la funcin f 1, y
o' por lo tanto no es vsible en main. La misma regla tambin aplica para los prototipos de
funciones, ya que los prototipos de funciones conceptualmente son declaracin de
o funciones en un programa.
o Se declar tambin una variable k en la funcin rz. sta es una variable local. En este
O,* punto, dos variables con el mismo nombre k son visible para f2. Recuerde que la
o variable local, altener el mismo nombre que una variable external, siempre sobrescribe
o fa variable external. Por lo tanto, la k visible en f2 es la local y no la variable extenal
k.
o
A fas varables external se les conoce tambin como variables globates (globa|. The
o espacio asignado a estas variables permanece durante una ejecucin del programa.
O Cualquier cambio que se le haga a una variable extemal ser visible a todas las otras
o partes delprograma donde sea visible.
o C provee un mtodo para hacer visible a j
en main. Usando la palabra reservada
o extern como extern int .
j De este modo main puede hacer uso de j, la cual se
va a declarar posteriormente. La palabra reservada extern informa at compilador que
o j
aunque an no se ha declarado en main o antes de main, y eventualmente
o. encontrar una declaracin para ste. Esta caracterstica de C es bastante til en la
o resolucin de problemas grandes.
o Continuando con esta discusin, es importante sealar que generalmente un programa
o grande que resuelve un problema requiere de ms de un archivo C en los cuales se
escriben las funciones.
o
o Elcdigo G inicia aqu...

o /* Archivo1-.c */
o int k,'
o int m;
o void mainO { /* main escrita en un archivo separado */
o
)
o /* Archivo2.c* /
o int k;
o int j;
o extern int m;
o /* Ias dos funciones declaradas en ste archivo
? int f1O {
) i
)

o int n;

t Volumen 4: Funciones en C Unidad l: Funciones en C 23

@ Copyright IBM Corp. 2002


Los materiales delcurso no pueden ser reprcduddos total
tf o parcialmente sin elpermlso previo scrito de IBM
t
t
I
Introduccin a la programacin con C
Gua del Estudiante

int f2O i

l
,/* Archivo3.h */
/* ros prototipos de funciones estn en ste archivo */
inr f1O;
inr f2 O;
El cdigo C finaliza aqu

Existen tres archvos


declaraciones de k' Ambas.en el segmento de programa anterior. se observan dos
son dJctaracones vtidls ya que
el cual effas son definidas, muy parecido a la run'qre son locales al archivo en
se tienen variables locales
dentro de la funcin. ta varble j es visible slo
en las funciones definidas en
Archivo2 ' c, mientras que n es visible sto en f2 del Archivo2
. c. Sin embargo, la
variable m es visibre tanto en Archivo2. cas como
Archivol.c ya que se ha
usado la palabra reservada extern.
Para usar j en Archivol.c, se debe ste
dectarar rr Archivol.c como extern.
Se puede detener que una variable sea declarada como extern
respuesta es s' c provee fa pafabra reservada en otro archivo? La
detener que una variable sea declarada como
static que permite que al programador
exrern bn otro archvo. Esto se logra
como sigue:
stat.ic int j ; /* sIo es visible en eI Archivo2.c */
Esto est en el Archivo2. c. Este es un concepto
mportante en programacin,
llamado ocultamiento de informacn.
4.4. La Clase de Atmacenamiento regisrer
La clase de almacenamiento register asigna memoria
velocidad de la cPU. Esto es sl una soficitud en los registros de alta-
al compila_dor. El compilador asigna
memoria en los registros si tales r_e_oistrgs
;*se lponiotes
memoria' si no estn disponibles, estas variables para asignacin de
tratbn como variables
Las variables se
declaran normafmente como variabres register
slo cuando se
automatic.
requere computacones de alta velocidad.
inr f1 (register int a) {
regist.er int i;

)
El fragmento de codigo anterior muestra que
sfo las variables focal, tanto argumentos y
variables automatic, se pueden declarar como
variabres register.

Unidad 1: Funcionei
Volumen 4: Funciones en C Z4
@ Copyright tBM Corp.2002
Los materiales del curso no pueden ser reproducidos
total
o parcialmente sin el permiso previo escrito de IBM
o
o
o Gua del Estudiante lntroduccin a la Programacin con C
o
o
o I 5. Caractersticas de las Clases de Almacenamento
o t. Algunas de las caracterstcas de las clases de almacenamiento (storage classes) se
? muestran a continuacin:
o
o . sraric.
Slo las variables local se pueden declarar como variables

o . Slo la variables auromaric se pueden declarar como regisrer.


o . No se puede aplicar dos clases de almacenamientos a una sola declaracin.
o stat.ic register int i; /* Error */
o El espacio para variables auromaLic ! register sB asigna en la pila del
sistema.
o El espacio para las varables sraric ! exrernal se asigna en los segmentos de
o datos delproceso.
o
o
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

@ Copyright IBM Corp.2002


Los materiales del curso no pueden ser reproducidos total
o parcialmente sin elpermiso previo dscrito de IBM
Introduccin a la programacin con C
Gua del Estudiante

Resumen
Ahora que ha compretado esta unidad, usted
debe ser capaz de:
. Explicar la naturaleza y uso de las funciones

' Describir algunas funciones incorporadas de


sido usadas
c, y las formas en que ellas han
o ldentificar las diferentes partes del encabezado
de una funcn
. ldentificar los diferentes tipos de argumentos
r Definir prototipos de funciones y fistar sus usos
. Usar las funciones para solucionar problemas

Unidad 1: Funciones
Volumen 4: Funcionei en C 2A
@ Copyright tBM Corp.2002
Los materiales delcurso no pueden ser reproducidos
total
o parcalmente sin ef permiso previo escrito de IBM
o
o
o Gua del Estudiante Introduccin a la Programacin con C
o
o
o Unidad l: Exmen de Autoevaluacin
o 1. Eltipo de dato en elencabezado de una definicin de funcin es opcional.
o *t a) Verdadero
o *t. b) Falso
o $ 2. Cules de las siguentes es la caracterstica de la funcin definida por el usuario?
o 'rta a) Expresa la naturaleza de la tarea llevada a cabo por la funcin
o b) Satisface fas regfas para formar un identificador en C
o c) Esta aparece en el encabezado de la funcin
o d) Todas las anteriores
O 3. El encabezado de la funcin tiene una lista de identificadores y sus tipos definidos,
o separados por comas. Cmo se llaman estm parmetros?
o a) Parmetros actuales
O b) Parmetros formales
o c) Parmetros de prototipos
o }}I
d) Parmetrosnormalizados
o
I
I

I
4. Cuando se define una funcin, no es necesario declarar los nombres de los
argumentos en la lista de argumentos formales.
o :

a) Verdadero
o b) Falso
o 5. En la lista de argumentos formales, dentro de un prototipo de funcin, no es
o necesaro declarar los nombres de los argumentos.
o a) Verdadero
o b) Falso
o 6. Dnde debe estar localizada la definicin de funcin?
o a) Antes de la funcin main ( )
o b) Despus de la funcin main ()

o c) En un archivo fuente separado


o d) Ambos (a) y (b)
o 7. Dnde debe estar localizado el prototipo de funcin?
o a) Dentro de la funcin main ( )
o b) Como la primera sentencia dentro de la funcin main ( )
c) Justamente antes de la definicin de la funcin en s misma
d) Antes de todre las funciones, incluyendo la funcin main ( )

iI
Volumen 4: Funciones en C Unidad'l: Funciones en C 27

@ Copyright IBM Corp.2002


Los materiales del cuio no pueden ser reproducidos total
o parcialmente sin el permso previo scrito'de IBM

:t
lntroduccn a la programacin
con C
Gua del Estudiante

8. Cundo una funcin es invocada.


el conjunto de entradas se pasa
travs de la fista de variable, lln0" a la funcin a
a) Parmetros formales
b) Parmetros actuales
c) Variables globales
d) Variables locafes
9. Dentro der cuerpo de ta funcin,
es mandatorio tener
a) Exctamente una sentencia return
b) Af menos una sentenca return
c) Cero o ms sentencias return
t o
rorma es
5H ilil: ?ffi '#:i[:':.1;Jg:' "tros
I deb e coin cid r
exa cta m e n te co n

a) Verdadero
b) Falso

Unidad l: Funciores
Volumen 4: Funciones en C ZA
@ Copyright tBM Corp.2OO2
, _^ _
Los materafes del curso no pueden ser
reproducidos totaf
o parcialmente sin el permiso previo
estrito de IBM
rt
o
o
o Gua del Estudiante

o
o
o Respuestas a la Unidad 1: Exmen de Autoevaluacion
o 1)a
o 2)d
o 3)b
o 4)b
o 5)a
ol 6)d
ol 7)d
oi 8)b
oi I
9)c
ol 10) a
ol
q
ol
q
q
q
.l
e
o
ef
e
q

Volumen 4: Funciones en C Unidad 1: Funciones en C 29

@ Copyright IBM CorP.2002


Los materiales del curso no pueden ser reproducidos total
o parcialmente sln el permlso previo escrito de IBM
lntroduccin a la Programacin con C Gua del Estudiante

Pgino dejada intencionalmente en blanco...

Unidad 1: Funciones Volumen 4: Funciones en C 30

@ Copyright IBM CorP. 2002


Los materiales del curso no pueden ser reproducidos total
o parcialmente sin el permiso previo escrito de IBM
O
o
o Gua del Estudiante Introduccin a la Prooramacin con C
o
o
o Unidad 2: Laboratorio de Funciones
o
o
o Objetvos de Aprendizaje
o Alfinalde esta unidad, usted ser capaz d:
o l*
J$.
' Emplear funciones
.definidas por el usuario para modulanzar los programas
o t.. alcanzar una estructura simple
o ' Escribir funciones para flevar a cabo tareas especficas bien definidas
o . Usar funciones en la de resducin de problemas
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
?
o
o
a
t
It
5
Volumen 4: Funciones r C
T Unidad 2: Laboratorio de Funcores en C gl
* @ Copyright tBM Corp. 2002
Los materiales del curso no pueden ser reproducidos total
,f o parcialmente sln el permlso previo escrito de IBM
O
a
lntroduccin a la programacin con C
Gua del Estudiante

Ejercicios de Laboratorios
1' Escribir un programa en c que imprima una tabla de enteros decimals
hasta w (esa es la entrada) junto con su equivalente
desde r
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
los enteros decimafes especficos y su equivarente
se listan a continuacin
en Romano:
1 I

5 V

10 X

50 I

100 c
500 A

1000 m
2' Considere un texto como entrada en Ingls, d cual
termna en el smbolo $.
Escribir un programa que cuenta el nmero de vocales
consonantes que aparecen en el texto. Escribir dos
y el nmero de
funciones flamadaS esVocal
y esconsonante que tome un carcter como entrada y retome
vERDADERo o FALso apropiadamente. un valor

Unidad 2: Laboratorio de Funcores


Volumen 4: Funciones en C 32
@ Copyright IBM Corp.2002
Los materiales del curso no pueden ser reproducdos
total
o parcialmente sin el permiso previo escrito de tBM
o ttr:t
o
o Gua del Estudiante Introduccin a la programacin con C
o
o
o , Unidad 3: Recursin
o .TT
o is.+
o I
Objetivos de Aprend izaje
o i Af final de esta unidad, Ud. ser eapaz de:'
o . Explicar qu es recursion
oi o Discutir las diferentes condiciones que deben ser satisfechas para que las
funciones recursivas trabajen correctamente
o o Describir cmo una funcin recursiva trabaja cuando se ejecuta
o . 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
F
p
p
t
tI.
D

@ Copyright IBM Corp. 2002


Los materiales delcurso no pueden ser reproddos total
o parcialmerte sin elpermlso previo esctito de IBM
Introduccin a la programacin con C
Gua del Estudiante

1. lntroduction
En fa Unidad I-
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
-'currere',
significa.'conei. La palabra recursion iittrnte .ignr"-;.*",el sufijo
haca
gtr{s', o'que suceda. otravez, especiafmente en un intervalo especfico,. En
de la programacin de computadoras, la palabra 'recursin'se el contexto
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) ,.

)
Aqu, se ha definido una parte de una funcin llamada miRecursion.
Se puede notar
que fa misma funcin miRecursion es invocada desde
dentro del cuerpo de la
funcin definida.
1.1. Definicin

Una definicin apropiada de recursion ser 'una tcniba


algortmica donde una funcin,
de manera de acometer una tarea, se llama a s mismi con
valores modificados en sus
argumentos'.
En esta definicin, se tienen algunas palabras reservadas que definen
caractersticas de recursbn. Recursin es rdalmni una las
tcni que se
emplea para resolver ciertos problemas. En el contexto "iitri"" en C, ta
de escribir prg*r",
recursin implica una funcin en c que puede ser llamada
desde dnt del cuerpo de
la msma funcin- La funcin neceariamente debe realizar una tarea. simptemente
llamando cualquier funcin arbitraria dentro de s misma
no tendr un propsito till.
cuando una funcin se llama a s misma, fo hace con 'vafores
argumentos'. usuatmente, esto se manifiesta en ros pram; modificados de sus
travs de la framada. En er ejempro anterior, ta ilamada ;;]asados a
miRecursion(x-1)muestra
que sta es llamada 'con alguna parte de fa
tarea'como elargumento x_t.

Unidad g: Recursion
Volumen 4: Funcones en CU
. @ Copyright tBM Corp.2002
Los materiales del curso no pueden ser reproducidos total
o parcialmente sin el permiso previo escrito de tBM

t
o
o
F
o Gua del Estudiante
Introduccin a la Programacin con C
o
o De la definicin anterior, es claro que la recursn implica
o 'a un proceso repetitivo, el cual
es autoreferencado. La recursion se encuentra en la vida
o ',f usa implcitamente. r
oalia tar vel, inctusive se

o
o ,,; 2. Escribir Funciones Recursivas
o It A continuacin se discute como escribii funciones recursivas
en para resdver c
problemas' En esta unidad, se aprendern los
o funomentos de rapgramlcon usanoo
recursin' empezandg con ejemplos simples de funciones
o con la solucin de problemas complejos.
matemtis, y continuando
o Ejemplo 3.1: Calcular el Factoriat de un Enetero
o
o cafcular el factorial de.un entero es, q.uils., el ejemplo ms
usado para ensear el uso
o de la recursin a los principiantes. se irabajb d;;i
3 - construcciones lterativas. Sin embarg, por r"ron"i-du
en el volumen 2, unidad
"jemplo
o nuevo' Ef factoriaf es un trmino matemti que es definido
completitud, se revisar de
pr" tbr tos enteros
o positivos' Por definicin, ef factorial del entero
0 es 1. para todos los otros enteros
o positivos, ef factorialde n es el producto de todos
los enteros desde t hasta n. sea el
siguiente ejemplo:
o
o Factoral de 5 = Sx4x3x2x 1 = 120
En generaf,
o Factorialde n_(donde n > 0) = nx(n-i) x(n_2)x... x 1
o Se escribe elfactorial de n como n r (con'etsigno de
exclamacin) y se lee como
o n-factoriaf. As,
o
o
n! = nx(n-1) x(n-2) x... x 1 paratodos losvaloresden >0.
o El factorial se puede tambin definr usando induccin matemtica, es decir.
recursivamente, como sigue:
o
o nJ = r X (n-1) t (es decir, n murtiprcado pdrn-r factoriar, sin > 0)
o - t- (sin = 0)
o Esto es conecto y puede ser fcifmente verificado.
considere 5!, por ejempro:
o 5!
o = Sx4l
o = Sx4x3!
o = 5x4x3x2l
o = 5x4x3x2x1l
o = 5x4x3x2x1 x}l
o = 5x4x3x2x1 x1 (dado que 0! = I por definicin)
t = Sx4x3x2x1 (dado que I x 1 = 1 de cualquier modo)
?

.uos materiales @delcufso


Copyright tBM Corp.2}02
pueden
no ser reproducidos total
o parcialmente sin el permiso previo escrito de IBM

\)
Introduccin a la programacin con C
Gua del Estudiante

Una definicin formal recursva delfactorial de n


se da a continuacin;
= a qi _

if (n==0)
return 1;
else
return factorial(n-1) * n:
)
Esta es una funcin recursva, ya que factorial
se invoca desde dentro de la misma
funcin. Ahora, se verifica si esio trabaja a travs
de la trazadel programa
Asuma que se invoca factorial con el parmetro
if (n==o) , la condicin se hace vsRADERo ya que 0. cuando se hace ta verificacin
n es 0. De manera que el valor 1
(el cual es elfactoriar de 0) es retumado por
raroriar.
Ahora, si el factoriar se invoca aon parmetro 1, la siguiente sentencia se
ejecuta: "i
return factorial (n_1) _ n;
Esto significa que ef factorial (o) se invoca recursivamente. ya
que se sabe que el
factori-al- (0) retornar el vafor 1. Por lo que, la sentencia
siguiente:
a la larga har lo
return factorial- (0) * 1;
Estorealmenteesl * 1= l.porlotantot!
= 1.

' Ahora s se invoca factorial (3). Mientrasn > 0 (esto es para varores de n
t ), se tiene la sentencia: = 3, 2 y

ret.urn factorial (n_1) * n;


La sentencia anterior ser ejecutada recursivamente
cmo:
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
por ejemplo -3? En esta situacin, no existe mayor o iguaf a 0,
un iaso base vlido, por lo tanto la funcin

Unidad 3: Recursin
Volumen 4: Funciones en C g6

. @ Copyright tBM Corp.2002


Los materiales del curso no pueden ser reproducidos
total
o parcialmente sin elpermiso previo escrito de IBM
o ?
o
o Gua del Estudiante Introduccin a fa
o
o factorial ser invocada indefinidamente con los parmetros -3, -4, -5, y
o sucesivamente. La funcin recursiva no terminar. Sin embargo, a partir
as
de un tiempo,
o fa funcin amenzar a usar mucha memoria y finalmente se
tga.
o Fin del Ejempto 3.1
o
A continuacin se tratar de consoldar la comprensin de las funciones recursivas
o travs de otro ejemplo simpfe: Encontrar el MCD entre dos nmeros.
a
o
Ejempfo 3.2: Encontraret MCD Entre Dos Nmeros:
o-
o' Todos han estudiado el MCD en los cursos de matemticas de la escuela.
Cada uno,
o quizs conozca como cafcular el MCD de dos enteros positivos.
srpong ;ue se debe
encontrar el uco (L2 ,76). Cualquiera sea el mtodo que se use, se puede
a facilmente
o )
determinar que el McD (l-2, 16 = 4. Uno de los mtooos ms simple"
el
divsor de cada uno de tos enteros. Los divisores de 12 son 1,2,3,4,6y ", "nurerar
12. Los
o divisores de 16 son-1, 2,1,8_y 16. A partir de estos se puede observar que
los divsores
comunes de 12 y 16 son 1,
o .? .y
4. Por lo tanto, 4 es et MCD. Pero, existe un mtodo que
no requiere enumerar los divisores de cada uno de los nmeros. Esto se
o siguiente definicin recursiva:
origna de la

o
o MCD(x,y) = MCD(x-y,y) six>=y
o = MCD(x,y-x) six<y
o
o =x siy=9
o six=0
o A continuacn se verifica si la definicin es correcta.
o
t4cD (1_2 , L6) = (L2,76-72) ,4) ya que 16 > !2
o MCD l{CD (1-2
= MCD (I2-4,4) MCD(8,4) ya que 12 > 4
o MCD (B-4,4 )
= MCD(4,4) ya gue B > 4
o = MCD (4-4,4)
=
MCD (0,4) =
= 4
o Este resultado coincide con el que se obtuvo anteriormente. A
o continuacin se escribir
una funcin recursiva en c que calcula el MCD de dos enteros positivos.
o
El cdigo C incia aqu...
o
o int mcd(inE x, int y) {
o if (x==s {
o . reEurn y;
)
o
t else if (y == o) i
return x;
t
,r Volumen
.
b @ Copyright tBM Corp.2002
Los materiales del curco no pueden ser reprodi.rcldos total
b o parciafmente sin el permiso previo escrito de IBM
I
a

o -
Introduccin a la programacin con C
Gua del Estudiante

)
else if (x >= y {
reEurn mcd (x-y, y) ,-

) else {
reE.urn mcd (x, y-x) ;
]
)

El cdigo C finaliza aqu

Nota: La verificacin y=9 ! x=0 srve como los casos base de la recursin. As que,
mientras no haya varores negativos, ef argoritmo terminar.

Fin del Ejempto 3.2

se fortalecer er entendrmiento de la recursion con otro ejempro.

Ejemplo 3-3: Encontrar ros Trminos en ra serie de Fibonacci


La serie de Fibonacci es una serie infinita interesante
de nmeros que sigue la forma:
1, 1, 2,3, 5, g, 13,21, 34, 55, y as sucesivamente
si se observa el patrn cuidadosamente se dar cuenta que los primeros
dos nmeros
de la serie de Fibonacci son 1y Ef prxmo nmeroes
1. siempre la suma de los dos
nmeros anteriores' A continuan, se'es cribir una funcin recursiv n qr" retorna
el n'n nmero de Fibonacci. por ejemplo, f ibonacci (o ) debe retornar g,
f ibonacci (e) debe retomar 21,y frbonacci (ro spg retomar55.
La siguiente es la funcin recursiva para retornar el nmero nth de Fibonacci.
autoexplica. Es

El cdigo C inicia aqu...


int fibonacci (int n) {
if (n <= 2
return 1;
) else {
."rrrrn fibonacci (n-1) +fibonacci (n-2) ;
)
)

El cdigo C finafiza aqu

En esta funcin, se pude notar que s et parmetro de


entrada es menor o igual a 2, se
retoma 1' Esto es porgue los primeros dos trminos de
la serie de Fibonac.] ,on 1 y 1.
Si no' cuando n es mayor que 2, se invoca la funcin f ibonacci
recursivamente para

Unidad 3: Recursin
Volumen 4: Funciones en C 3g

. O Copyright tBM Corp.2002


Los materales del curso no pueden ser reproducidos total
o parcialmente sin el permiso previo escrito de IBM
ors
o
o Gua delEstudiante
lntroduccin a la programacin con
o C

o obtener los dos nmeros anteriores, es


o decir, f ibonacci (n_l_) y f ibonacci- (n_2)
y se retorna fa suma de esos dos
nmeros, fo cualsatisface la defincin.
o
Note cuan eregante es ra sofucin. sin
o embargo,
es realmente el mtodo ideaf para.solucionr'"ia pesaf de ra eregancia que ruce, no
a trminos de la serie de roonacc. Miekas
;rt"
bio"ra de la bsqueda de los
;i;*pto es para entender fas
ort funciones recursi-vas, es preferible construir
razn' es que la funcin iecursiva es ms
una sotun iterativa para et probfema.
La
o costosa en trm.inos.de tiempo de ejecucin,
dado que el nmero de veces qr" ror ,"gistior;eictvacin
a liberados es afto' una solucin iierativ",."nq*
p*0" "on?,iacenados
y
contenei.,,,.l sentencias
o pueda no lucir tan elegante como fa solucin
en trminos de tiempo de ejecucin.
r"drnils y
sin embargo, menos costoso
o
O Fin def Ejempto 3.3
o Existen muchos otros ejemplos dond
a elegante, pero es pobre en trminos de
una solucin recursiva a un problema puede
lucir
rendimient cuando se ejecuta como
o programa' En tales casos, una solucin
iterativ leJ" Jur. ,n" opcin ms apropiada.
un

o A continuacin se presenta el uso de la recursin


o en ta solucin de problemas ms
compfejos.
o Ejemplo 3-4: permutacin de Nmeros para
o construir un cuadrado Mgico
o El probfema aqu, es construir un cuadrado
de las filas, ras corumnas.y. ras oLwnatesmgico, de orden 3x3, en la cual las sumas
o ejempfo de un cuadrado magico oe oren
rn
-- '| to.
rvvsv iguares.
'\ La Figura 3.1 es un
;3.
o
o
o 4 8
o I 4

a I

o 2 7 o
o Figura 3.1: Cuadrado Mgico de Orden 3x3
o
El orden de 3x3 no es el nico cuadrado.
o mgicos de orden 4x4,5x5, etc., i cuales
mgico que existe, existen otras un cuadrados
sn nieresantes de construir. pero primero,
o se aprender como construir un cuadrado
mgico oe iJen gxs.
a
Ef probfema es asombrosament"
I conjunto de nmeros (en ste caso"nq1?:g I"9" alloue
ls enteros.l
se necesita es arregrar un
p efementos en las filas, column". y sien una matriz 3x3 taf que los
las..diagonales-iurren et mismo nmero. pero
estrategia para resofverlo parece'oir'clE;;;;grir. fa
t? Existen estrategias, pero el
asuma que no se tiene acceso a ellos.
p il3[13[t!: ]or b tando se quiere resorver el

,Los_materiafes edefQopyright tBM Corp. 2002


curso no pueden'ser reproducidos total
o parcialmenie sin elpermiso previo
de IBM
"rlrto
o
Introduccin a la programacin con C
Gua del Estudiante

suponga que se emplea un mtodo que genera todos los


nmeros posibles que pueden
ser arregfados en la matnz 3x3. Entonce, se puede
determinar si un cuadrado mgico
est formada o no-. En otras palabras, se desea una facilidad
por medio de la cual se
puedan encontrar todas las posibles permutacbnes
permutacin es ef aneglo de ciertas unidades
de un con;unto oe numeros. La
en todos posbles rdenes. La recursin
se puede usar para generar todas las permutacons'de nmer; q;. pueden ser
aneglados en fa matriz 3x3- lJna vez que un aneglo est listo
en la matrii- 3x3 se puede
siempre verificar si este forma un cuadrado mgi o no.

Cmo se usa la recursin para generar fas permutaciones de un conjunto


de nmeros
dados? Para hacer las cosas imples, pines en ra matriz
inidimensional de nueve elementos. Ahora'lo que se
3x3 tomo un arreglo
debe hacer g.n"r". todas las
posibles permutaciones de los nmeros del I
aig en ef aneglo de ",
nueve elementos. La
sguiente es la lista de las posibles permutaciones:
1 234567 89
1234567 9B
1,2345687 9
\23456897
r23456978
123456987

987 654327
987 65432t
Realmente, existen unas 362.880 permutaciones disponibles
para
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.

El primer paso es poder generar las permutaciones anteriores en un


unidimensional' una vez que la permutacin es generada, aneglo
que verifique si sta es un cuadrdo mgico. se debe tener una funcbn
se csita una funcin qr. tonvierta el
aneglo unidimensional (el cual es verifica-do para saber
si es un cuadrado mgico) y lo
imprima como una matriz de 3x3.

Para empezar, se tratar de generar la siguiente


secuencia de nmeros:
171 , J,1-2, 113 , I2t ,I22 ,1_23 ,I3I ,1-32
,1_33 ,
2l-L , 2t_2 ,21_3 ,221- ,222 ,223 ,231_,232
,233 ,
31,L ,3l.2 , 373 , 32L , 322 ,323
,33J- ,332 ,333
con la ayuda de una tcnica ietrativa, se puede hacer esto usando
un conjunto de tres
bucles, tal como se muestra a continuacin:
for (i = 1,. i<=3; i++)
for (j=1;j.=3;j++)

Unidad 3: Recursin
Volumen 4: Funciones en C qin

. @ Copyright tBM Corp.2002


Los materiales del curso no pueden ser reproducidos total
o parcialmente sin el permiso previo escrito de IBM
a
o
o Gua def Estudiante lntroduccin a la Programacin con C
o
o for (k=1; k <= 3; k++)
o printf ( "?dtd?d\rr,' , ,j, k) ;
O Asuma que la variabfe de nombre arreslo se dectara globalmente y
su declaracin
o como sgue:
es

a int arreglo[s0] i
o -
si ahora se desea tener una recursn, se puede hacer lo siguiente:
o void permutar(int n) i
a inr i
o for (i=1; i<=3; i++)
o arreglo [n] = i;
{

a if (n<3)
o permutar (n+1) ;
o else
o printf ( "?d?d?d\n", \
o arreglo It], arreglo [2],arreg1o t3l );
o
return,.
o
)
o
o 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
o el valor
permutar(1) -La siguiente secuenca de 3 dgitos ser generada oando de 1 como
o fa funcin recursva como permutar ( 1) |
se nvoque
o 1_II ,1_L2 ,1_I3 , L2!,122 ,1,23 ,1_3L , 132 ,I33
o 2r1, , 212 , 2I3 ,227_ ,222 , 223 , 23:- , 232 ,233
,

,
o 3a1 ,312, 3 L3 , 32J.,322 ,323 , 33I , 332,,333
a A contnuacin, se modificar para permitr la permutacin de los nmeros
o del 1 al 9 en
el arreglo de nueve elementos, se puede nacer uso de lo siguiente:
void permutar(int n) {
a inti;
a for (i=1; i<=9. i++) {
a arregLo [n] = ;
o if (n<9)
e el-se
permular (n+t_) ;

Q.
esMagico (arreglo)
, ;

t )
I

{
Volumen 4

Losmateda."?"?SlljFli'3,[.?,&?o,l*uooostotal
o parcialmente sin el permso previo escrito de IBM

a
lntroduccin a la programacin con C
Gua del Estudiante

En esta situacin, arreglo es un aneglo undimensionalcon


que ndebe ser declarado en el program. nueve elementos enteros
Todos lo que se na hecho de significativo en
ef codigo anterior es reemplazar la
sentencia con printf funcin la
esMagico (arreglo) . como antes,. la funcin permutar (
inicialmente con el parmetro de entrada 1. debe )
ser invocada

Cuando un conjunto permutado de nueve nnqeros est


disponible en arreglo, la
funcin esMagico(arreglo)se invoca con arreglo
funcin verifica si el equivlente 3x3 de este uo"l
como un parmetro. Esta
as, lo imprime.
i;*" un cuadrado mgico, y si es

l',::l!":99:
numeros ,l"venunrepeticiones.
resulta
probrema. En esta sorucin, una cierta permutacn
de ros
Es intil permuiar nfiguraci;-;;titvas de
nmeros y verifica si ellos forman un cuadrado mgico.
As que, de debe modificar ta
funcin anterior para. rechazar repeticrones de nmeros permutados.
formas de verificar estas repeticions. Ef siguiente Hay muchas
rn proceoimiento smple que usa
otro arreglo unidimensionar de nueve erementos "" usados
ilamado [] .
void permurar (int n) {
i:: ! :
fc:: (i=1; i<=9- i++)
/* Verificar si un nmero i es usado */
if (usadolil == o) {
usadolil = 1;
arreglo [n] = j-;
if (n.9)
permutar (n+1) ,.

else {
esMagico (arreglo) ,-

usado[i] = 0;

)
recurn..
)
nicialmente todos los elementos de este aneglo
f
se incializan en0, indicando que todos
los nmeros desde 1 al 9 no estn usados. Sr: usado[3]
es 0, implica que 3 no est
usado, I si usado [3] es 1, eglo implica que el nmero
3 ya est usado. As que, todo
lo que necesitan hacer es modfcar ia funcin anterior
taf que un nmero es verifcado
por el aneglo usado- [] antes que este se
use. Si un nmero es ahora usado, se debe
expfictamente inciafizar el correspondiente elemento
det aneglo en 1 dentro de ta
funcin.

un punto significativo a notar es la forma en que los valores


del areglo usado [] se
establecen. Se establece en I usado [] dentro de la
funcin cuando el nmero
Unidad 3: Recursin
Volumen 4: Funciones en C 4t
. @ Copyright tBM Corp.2002
Los materiales del curso no pueden ser reproducidos
total
o parcialmente sin ef permiso previo escrito de IBM
:F
oii Gua del Estudiante lntroduccin a la Proqramacic c: - _
o
o conespondiente va a ser usado. Siempre que fa funcin permutar
O'l se rnyc3
recursivamente, el valor de usado[] permanece en 1 para ta ejecucin
^I
-r de la funcin
-fr invocada recursivamente. Sin embargo en el retomo e ia funci permutar,
despus
oif de probar si ef areglo forma un cuadrado mgico, se le asigna a usado
[] nuevamente
0' Esto permite que se use el mismo nmero-para otras permutaciones. Ahora se sabe
O que para ef orden 3X3, exste un total dg ocho posibles cuadrados mgicos
ol: nmeros det 1 al9.
mn los
oi: Ahora se ha presentado el poder de usar la funcin recursiva en la permutacn
o conjunto de nmeros.
de un
o
En este ejemplo, se verifica una gran cantdad de anegfos permutados para
o determinar
si ellos forman un cuadrado mgco. En realidad, lJ nrayoria de ests pruebas son
o intilies.
considere elprimer aneglo ilustrado en la Figura 3.2.
o
o
2
o 1 3

o 4 5 6
a
7
o 8 a

o Figure 3.2: Es este un Arregto de Cuadrado Mgico?


o Este absofutamente no forma un cuadrado mgico, ya que la prmera fila
o misma
menos de15. se comienza permutando g-9, luego'7-g-g; oespueJ _7_a_gtotaliza y as
o sucesivamente, con el tope de la fifa siendo 1-2-3. Elte es igualmente obvio que
todas
estas permutacionel.y verificacones del arreglo para un cudrado mgico son
o ya que h configuracin de la primera ftla 1-2- n puede producir un cadrado intiles
mgico
o para cualquera del resto de las permutaciones. Inilusive cuando
se alcanza el tope de
o fa fila de tres nmeros 1-2-3, se permuta este a 1-3-2, y despus a
x2-1, r1_2 y 2_1_3.
Naturalmente, todas estas permutaciones no, producirn un cuadrado
o mgi para
cualquiera de las permutaciones de los nmeros en otras filas. por lo tanto,
se-tiene que
o modificar la funcin permurar ( )
para evitar estas permutaciones intiles que
o empiezan con una suma de fila particular que no sea 15.
o Cuando se llena los valores para cualquier fila, se debe verificar si la suma
de cada fila
o 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
o es 15, cuando el
nmero para el cuarta es generado. Si la suma es 15 se procede gen"ra.
a el nmero
o del cuarto elemento. Si no es as, se necesita regresar (llamado baktracking)
a la fila
o previa de tres nmeros y hacer otras permutacines hsta que
se ootnta la suma
como 15. Se necesita hacer esto para cada fila. Si se tiene l conjunto
O lor nueve
nmeros, talque la suma de cada fih sea 9, entonces todo lo que
tdne que racerse es
o verificar las sumas de las columnas y diagonalen la funcifl esMagico (
).
o
5
t;L Volumen

@ Copyright tBM Corp.2002


l-
f. Los materiales delcurso no pueden ser reproducidos total
o parcalmente sin elpermiso previo escrito de IBM
L
l-
o
Introduccin a la programacin con
C Guia del Estuc a:e

Despus de modificar la funcin, sn embargo,


en vez de alcanzar algo significar:e.
realmente se consigue ms ineficiencias.
La Figura 3'3, por ejempfo, iluska un perfecto
aneglo vlidode una matiu3x3 denvada
de la modificacin de la funcin.

1 5 I
2 6 7
3 4 8

Figure 3.3: Matriz de 3x3


Todas fas sumas de las filas son J5^. Pero,
ineficiencia dado.qu.e tiene el patrn 1-2-3,e|
la primera columna misma revela
tanto convrtie a
cuar no hace qr" l"
fas otrs permutaciones redundantes. por
ir*
sea ls, por lo
loda.s-
modificar an fa funcin permutar ( para lo tanto se necesita
empiezan con una suma particufar de cofmna
) evitar estos tipos de permutaciones que
as como la suma de fa flla que no es 15.
El truco es llenar. las filas y las cofumnas altemativamente.
familianzado con la notaci de matrices A esta altura ya se est
nsum-fr"
llenar' Una de tas formas es llenilas entradas ,".tene un aneglo de 3x3 para
en el siguiente orden:
d h matnz con el n,i-,iro permutado

A(1,1), ,2), A(1,3), A(2,r) , A(3,1), A(2,2), A(2,3), o(:


A(1
,2), A.,3)
Se necesita verificar la suma de la fila en A(1,3)
verifica fa suma de fa columna uno. Cuando
. Cuando se ltene en A(3,1), se
se liena A (2 , 3) , se verifica la suma de la
segunda fifa y cuando se,ena A(3,2)
se verifica ra suma de fa corumna dos. y
finalmente' cuando.se flena A(3,3), se verifica
que la suma de la tercera fila, tercera
columna as como las diagonales.

Fin def Ejemplo 3.4 I

Ahora que se ha aprenddo a crear un cuadrado


mgico con la ayuda de una funcin
modificada' se va a considerar un ftimo ejemplo
oer uio oe la recursin. se dscute
de los ejempfos ms famosos, er probrema uno
de fas Tones de Hanoi.
Ejemplo 3.S: Las Torres de Hanoi

El famoso problema de las Tones de Hanoi


involucra tres ctavijas, etiquetadas como
B y c y n discos de dim,etro 1,2,3,. . A,
. n. Er rompecabezas comienza con todos ros
apilados en una de las clavijs por orden de
tamao oecrecente o
#;::t hacia
"0";o
El probfema es mover todos fos n discos
desde
C (fa posicin finat) obsevando tas sijuientes .la claviiaA (posicin iniciaf) a la cfavija
'
regtas:
Undad 3: Recursin
Volumen 4: Funciones en C 44
@ Copyright IBM Corp.2OO2
Los materiales del curso no pueden ser reproducidos
total
o parcialmente sin elpermso previo escrito de IBM
olt
o
o Gua del Estudiante lntroduccin a la Programacin con C
o
o . Slo un disco puede ser movido a la vez.
o . Un disco grande nunca puede ser colocado encima de uno ms pequeo.
o
o El origen del rompecabezas se atribuye a W. RouseBall, un ingls escritor de
matemticas recreativas. Ahora se tratar de entender como este problema se puede
o resolver y donde encaja la recursin
o
El problema es que n discos enen que ser transferidos desde clavija A hasta la cfavija
o C siguendo ciertas reglas. Esto puede hacerse a travs de una serie de movimientos
o donde el disco tope de alguna clavija (A, B, or C) se coloca en el tope de alguna otra
o clavija. Sin embargo, se debe tener cuidado de no colocar un disco en el tope sobre un
disco ms pequeo en la clavija. Un movimiento puede ser especificado como una
o instruccin, de la siguiente forma:
o
Mover eldisco deltope de la clavja X a la clavija Y
o
o Dada una entrada n (el nmero de discos a ser manejados), se tiene qre generar los
o movimientos para transferir n discos desde fa posicin inicial en la clavija A al la
posicin finalen la clavija C.
o
o Existe un conjunto de movimientos fegales para lograr la transferencia deseada de los
o discos desde la clavija A a la clavija C para cada valor de n? Si se tienen dos clavijas,
por ejemplo, la clavija A y la clavija B (y no la clavija C como el destino final), no se
o puede resolver el problema, inclusive para valores tan pequeos como n=2. Esto es
o fcil de entender, ya que despus de mover un disco desde A hasta B, todo lo que
o puede hacerse, es mover el disco de regreso a A. Nada ms puede hacerse y eso no
ayuda a solucionar el problema.
o
o Se puede solucionar el problema con tres clavijas, A, B y C para n=2? Si, se puede.
o Se puede mover el disco ms pequeo desde la clavija A a la clavija B (la clavija
temporal intermedia). Luego, se puede mover el disco ms grande desde la clavija A a
o la clavija C (el destno finaf). El paso final es mover eldisco ms pequeo desde B hasta
o c.i
o
La pregunta es si se puede hacer este tipo de transferencia para todos los valores de n.
o Se va ver si se tiene una solucn vlida p?ra n=3. Los siguientes son los movimientos
o posibles:
o o Mover eldisco deltope de la clavija A (el disco ms pequeo) a ta clavija C
o . Mover eldisco deltope de la clavija A (ahora el medano) a la clavija B
a . Mover el disco del tope de la clavja C (el ms pequeo) a la clavija B
o . Mover el disco deltope de la clavija A (el ms grande) a la clavija C
I o Mover el disco deltope de h clavija B (el ms pequeo) a la clavija A
,
.
t
I .
Mover eldisco deltope de la clavija B (el de tamao medio) a la clavija C
Mover eldisco deltope de la clavija A (eldisco ms pequeo) a la clavija C

l? Volumen 4: Funciones en C Unidad 3: Recursin en C 45


D
i
tt ' @ Copyright IBMCnlrp.2002
|l Los materiales del curso no pueden ser reproddddos total
t7 o parcialmente sin elpermiso previo'esoito de IBM
p
o
lntroduccin a la programacin con C
Gua del Estudiante

El problema para n=3 eSt sotuconado. Ahora, @nsdere posibilidad


la de tener n=
discos en la clavija A. Al usar fos movimentos antes menciondos,
se puede resolver
tambin' Por lo tanto, se puede generalizar la idea antes mencionad
a para trabajar con
cuafquier nmero de discos ;.
Sin embargo las siguientes condiciones deben
satisfacerse:

' El disco ms grande en fa clavija A debe ser movido en el fondo


este es eldestino final.
de la clavija C,
o Esto es posible slo cuando todos los discos anteriores a f
son movdos fuera
de la clavija A
o Tambin, cuando et disco ms grande est libre para ser
movido, la clavija C
debe estar vaca de forma taf gu se mueva el discb mai gran"
o"ro" la clavija
A hasta la cfavija C
' Es importante notar que el disco ms grande ser movido desde
clavija C, como se mencion anterioniente, todos los otros discos
la clavija A a la
deben estar
en la clavija B (con ningn disco corocado sobre un disco ms pequeo
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 sub-
actividad de transferir n-1 discos. Aqu es donde se necesita
una recursin para
solucionar el problema.

Considere tres variable llamadas desde, hasta y temporat para


llegar a un algoritmo
que ayude a derivar una funcin en C. Las variables
desde, hasta y temporal se
refieren a las tres clavijas en cualquier momento. desde
se refiere ala clava desde,la
variable hasta se refiere a la clavlia hasta y remporat se
' refiere a la clavija que
afmacena el disco temporalmente. Los valores de desde y
hasta sern 1, 2, 3. De
la explicacin hasta ahora, se sabe que los vafores de temporat-
se pueden calcular a
partir de los valores de desde y hasta.

Supngase que las tres clavijas fueron. numeradas


es 6. Esto resulta en la siguiente relacin:
1 , 2 y 3. La suma de estos nmeros

desde + hasta + t.emporal = 6

Por fo tanto, temporal = ( 6 - desde - hasta) . se puede desarrollar la estrategia


recursiva.

Cuando n = r, la transferencia es comptetada en justamente


un movimiento, es decir,
mover un solo disco desde la clavija inicial a la cfavija final.

Cuando n r, la transferencia de n discos desde la ctavija A hasta la clavija C puede


'
hacerse con los siguientes movimientos:

' Tranferif (n - l)
discos desde la clavija A a ta ctavija B, usando la clavija C
como almacenamiento temporal.

Unidad 3: Recursin
Volumen 4: Funciones en C 46
@ Copyright tBM Corp. 2002
Los materiales del curso no pueden ser reproducidos total
o parcialmente sin ef permiso previo escrito de IBM
.
o
o Gua del Estudiante
o
o . Ahora la clavijaAtienesolo un solo disco, el mayorde todos. Move es:e:s:.:
a desde la clavija A a la clavija C.
q . Transferir (n - t) discos desde la clavija B a la clavija C, usando la clavija A
q como almacenamiento temporal.
o usando esta estrategia, se trata de obtener una compresin delalgortmo.
o
Sea n el nmero total de discos considerados. Sea desde la clavija inicial y hasta la
clavija final de descanso. La clavija temporal donde los discos descansan durante la
o transferencia es temporal, elcualse calcula como sigue:
o temporal = 6 - desde - hasta
o
Para mover n discos desde la clavija desde a la clavija hasta, primero debe
a verificarse si n = 1. Si es as la solucin es trivial y es un solo movimiento. Si no,
o descomponer el problema en tres sub-problemas y solucionarlos en secuencia como
o sigue:
o o Mover n- temporal
1 discos desde la clavija desde a la clavija
o . Mover 1 disco desde la clavija desde hasta la clavija hasta
o . Mover n - i- discos desde la clavija temporal hasta la clavija hasta
o El afgoritmo recursivo se describe en la siguiente funcin en C:
o
o El cdigo C inicia aqu...
o #include <stdio.h>
o void t.ransferir(int n, j,nt desde, int hasca/ ;
o void transferir(int n, int desde. int hasta) {
o int temporal;
o ,/*Cuando e1 nmero de disco es uno*/
if (n == 1) t
o printf (r'Mover el disco tope de J_a clavija ?d \
O
a 1a clavi j a ?d \n" , desde, hasta) ;
O else {
o ,/*Cuando e1 nmero de disco es ms de uno */
o temporal = 6 - desde - hasta,.
o /* Llamar a 1a funcin transferencia */
o transferir (n-1, desde, temporal) ;
o printf (,'Mover eI disco Eope de Ia clavija td \
o hasta la clavija ?d \nu,desde, hasta),.
o /*Llamar a l-a funcin transferencia */
transf erir (n- 1, temporal, hasta)
o ,.

b
b Volumen 4:
b
b @ Copyright IBM @rp.2002
Los materiales del curso no pusdn ser reproducidos total
b
!o
o parcialmente sin el permiso previo escrito de IBM

o
lntroduccin a la Programacin con C
Gua del Estudiante

l
El program main ( ) es bastante sencillo.
mainO I
l_nE n.-
,/*Obt.ener la entrada de parte ciel usua::j_o*/
printf("fngresar el nmero de d:sccs: ,, ;
scanf ( ugdo, &n) ,.

,/*Verif icar que nmero es Dcs: t i.,,c c :ta * r,


if (n<=o) {
printf (', Ingresar un nne-c Eos:::-,,c\..r,,) ;

)
else {
/*Llamar Ia. funcin tra:tsfe::: .
transferir (n, 1, 3 ) ;
)
) /*Fin de la funcin main*,/
El cdigo C termina aqu

Se puede analizar ahora cuan bien (o pobremente) trabaja la funcin.


Asuma Que r (n)
es el nmero de movimentos una transferencia genera para n discos
de entrada. La
siguiente relacn se cumple bien y puede verificrse desde la funcin que
se acaba de
escribir.
r(1) =1
T (n) = 2*T (n-1) + 1 paran>1
Por lo tanto, T (n) - 2 1. De esta relacn, se ve que se requiere 2o - 1
movmentos.

Fin del Ejempto 3.5

Despus de discutir la recursin con la ayuda de varios ejemplos,


se va a tratar de
entender la relacin entre recursin e iteracin.

3. Recursin vs. lteracin


Todas las soluciones recursivas pueden normalmente ser resueltas
usando iteraciones,
mientras al inverso no es verdadro. Un cdigo r".rrJuo compacto, fcil de escribir y
fcil de entender- El cdigo, sin embargo, no ahora tiempo "s ni espaci. pra problemas
sencillos como elfactoriaf, Fibonacci, etc., las soluciones lterativas
son ms econmicas
en trminos de espacio y tiempo.

Unidad 3: Recursin
Volumen 4: Funciones en C 48

. @ Copyright tBM Corp.2002


Los materiales del curso no pueden ser reproducidos total
o parcialmente sin el permiso previo escrito de IBM
o|'
o
o Gua del Estudiante lntroduccin a la Programacin con C
o
o
o Resumen
o Ahora que ha completado esta Unidad, usted debe ser capaz de:
o . Explicar la recursin
o o Discutir las varias condciones que necesitan ser satisfechas para que las
o funciones recursivas trabajen conetamete
q o 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
a
o
O
o
I
o
?
o

' @ Copyright IBM Corp. 2002


Los materiales del curso no pueden ser reproducidos total
o parcialmente sin elpermiso preo escrito de tBM

l
Introduccin a la programacin con C
Gua del Estudianie

Unidad 3: Exmen de Autoevaluacin


1) Recursin es una
a) Funcin que se invoca a s msma desde dentro de la misma funcin
b) Funcin que invoca a otra funcin
c) Funcin que invoca a la funcin mai.n
d) Funcin que no invoca a otra funcin
2) El retorno de funciones recursivas, cuando el trabajo est terminado, est
basado en ciertas condiciones.
a) Verdadero
b) Falso
3) Qu sucede con er siguiente segmento de cdigo, cuando el varor
argumento es -4? del
int factorial (inr n) {
if (n==0)
TaFrrr 1 .

else
return factoriat (n-1) * n..
)
a) La funcin recursiva retorna son ilamarse as misma
b) La funcin recursiva se ejecuta dentro de un bucle infinito
c) La funcin recursiva retoma el factorial de 4
d) Ninguna de las anterores
4) El estado de la funcin en la llamda recursiva se mantieneo
en
a) Una pila
b) Un Heap
c) Un rbol
d)
Ninguna de las anteriores
5) Las funciones recursivas son la forma ms eflciente
de resolver probfemas.
a) Verdadero
b) Falso
o/ La recursin en er programa puede ser eriminada teniendo
a) Bucles for ejecutando un bloque de cdigo
b) Bucles while ejecutando un bloque de cdigo
c) Bucles do while ejecutando un bfoque de cdigo
d) Todas las anteriores

Unidad 3: Recursin
Volumen 4: Funciones en C SO

. @ Copyright tBM Corp.2002


Los materiales del curso no pueden ser reproducdos total
o parcialmente sin el permiso previo escrito de fBM
o f
o
o Gua del Estudiante lntroduccin a la Programacin con C
o
o 7) Una funcin recursiva no necesita un caso base para estar bien definida y es
o @paz de terminar por s misma.
o a) Verdadero
o b) Falso
o 8) Cules de los siguientes problemas pueden solucionarse usando recursin?
a a) Tones de Hanoi
o b) Serie de Fibonacci
o c) Sumatoria de una serie desde 0 hasta el infinito
o d) Encontrar el mayor de dos nmeros
o 9) Recursin no es un proceso repetitivo.
o a) Verdadero
o b)Falso
o 10) Indique que sucede cuando se ilama a una funcin recursiva
o a) La funcin se llama a s misma con elvalor modificado de sus argumentos.
o b) lincrementa la eficiencia de un programa.
o c) Supera la limitacin del nmero de veces que un ciclo for invoca a una
funcin.
o
o d) El programa incremen