Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Programacin con
(Cdigo det Curso Cy320)
Versin 3.0
I
I
I
I
Sumario del Curso
;(c
f
BM lT Education Services
f
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.
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
Agenda
Cada unidad de este curso es de 2 horas de duracin.
: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
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
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
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
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
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.
?1
.'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
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
o 2. eu son Algoritmos? 2
o 3. Tipos de Algoritmos 2
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
Resumen
I
.l
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.
"
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
Unidad
Central de Oispositrvo
Procesamiento De
Salida
Bus delSistema
t
Unidad 2:Laboratorio de IntroduccOn aGFrogramacion
Volumen 1: Fundamentos de C 6
' 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
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
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
Volumen 1: Fundamentos Oe C
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
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:
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
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
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
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
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 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
o
lntroduccin alaP Gula del Estudiante
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 ;
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
p \
1'1 interes_a_pagar)
p ,.
t lh
llLt Volumen 1: FundametosE C
rtf Unidad 3:ProgramacO
?f ?e ?;E Zq ?G '.F -
^
,_:i5-: ;-
Retomo de carro
Tabulador horizontal
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
0;
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
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 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
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
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
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 _.
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
@
Unidad 4:Construir Fundamentos Slidos
!,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\
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
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
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
{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.
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.
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.
Volum en 2: Estructuras
de Control en C
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
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
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
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.
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\;:,,) ,.
-: ^*r--
_ _.. --,',--
\ :_ c_ : ::.-, + :.-:-.:
oI I
f. ^
,_
o ',a
:on f a niayo::ia cie edad\:,,)
o :2i ,.
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.
of -;-!a/tf--
!'-11-ul \ l- rL=..-1ll- \a_:cr es: e^^l\'l
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
;
o r,rtnrr("E1 va.for de z es: td\n,,, z);
n-i-+/?rrr
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) ;
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
{
32 )
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
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-'.
-7
/* Se muestran ]-os nmeros ingresados por el usuario */
8 printf("Los numeros dados son: Bd y Bd\n",ituml,num2);
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
22 1
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.
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
Gula det.Estudiante
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_!__-. ^ ^-,
^- ^^ |
]
^^
^t >c
sa
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
t if (x > y) ;
t Printf ("x es mayor gue y',) ;
li
p
lr
t Volumen 2: Estructuras eEntrot enT Unidad
' a= c: --:
j::.-_=:-l-:S,.
;_^ _ ,.
-_==.-,
. C1S+'.-: -:.':
:;=:;, "."
ca se va r cr:-:
sen:enc:as,.
brea k,.
dof :rrl .
sentencias,.
break;
)
o _ a:_
atrr /r: -.
urr
ol E /* Verificar
-s canf ( " Ed ",
.inmero
&num dia ) ;
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 )
o ; f /^..*
*r \lluliL
:r
--c
^ :: _,
? e-lse if".r.a
(num_i.a :: 2)
,-
? .
ef se -f (num-dia := 1)
printf ( "El 7 es Domi_ngo\n") ,.
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:
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 \
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
tntroduccin a la prosiramacin con C Gufa del Estudiante
I
Introduccin a la Programacin con C Gufa del Estudiante
I
Ejercicios de Laboratorio
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
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.
11
121
1331
14641
a,
I? ('ul
@ Copyright tBM Corp.200s
Los materia tes det*:l:"j:::d:l
Unidad 4:
ser irooucidos
Estructural 47
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.
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
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
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
_:.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
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/
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
;;;;;,._._:=,..,
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- -^;^- /
-
]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
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
{
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
72 ix, Y, Z; I
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
o )l nrrmo-:^i-- - r Y'=
grlL=-Gt
o
- =
Y nnmi-=^--
o 5q )
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 :,:,/* 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...
r- n
D 4
E 2
o Curso 4 A
.r Curso 5 A
o Uurso ti E
-
^h!^-^-. com entrada del usuario cada uno de 1os 6 cursos */
: o; ) < 6; j++){
:f lush (stdin ) ,-
^-,
gv 1
{
J;
= C; i < 6: i-+\f
rtt
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 *,/
;
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
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,.
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
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
C) struct {
i n+L a
f,tt r.
float y;
l
) st
F.
a I nr
o float y,.
i h.
o
o Es vlida la asignacin a. x = u.\,, ?
o a) Verdadero.
o b) Falso.
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
b) union{
int x,.
float y,.
st:ucr jech z;
0)
Unidad : eltructuras
Volumen g:
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
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
I
f
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.
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
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 24
o 2
o
65
o
o 7 <_ f r1
d^ Ll J
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;
Unidad t: p
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 )
Unidad f : Progra
Unidad l: program
Unidad l: Program
12
o )
o k++,.
o ] while (k .= (n_r ;
o if (encontrado != 1)
o print.f ( " ?d no f ue encontrado\n * , numb)
o
,.
)
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) )
Unidad l: pro
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
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 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;
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
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...
)
/* fcremenEar el nmero de personas ejecuEadas */
nMuertos ++;
J
)
/* La funcin main termina aqu ,r/
El cdigo C termina aqu
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: 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
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
Unidad 2: A,.reS
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
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,
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 .
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
Unidad 2: Arreglos M
36
o
go_on = FALSO;
''|
.
)
k++;
)
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
,
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 ]
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
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;
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
)
/* 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 */
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 *
o k #define VERDADERO 1
#define FALSO 0
a !'
oI 2
,/* Declaracin
",
r
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");
)
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
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
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".
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.
Volumen g,
52
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
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
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.
) 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]
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,.
I r ^ t t
I L; // -,
r, ].n Oe f" aecfatacin de La estructura 2
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
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.
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) ;
do{
o scanf (u?du, &B.denomirador),.
o ) while (B.denominador <= O)
o ,.
/* 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 */
?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;
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;
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'
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 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 arfip
66
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
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
inE x;
float y;
) a, b,-
. 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
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
--
Volumen 4: Funciones en
c
Marcas Registradas
su
propio riesgo. {
No deben removerse las pginas en blanco que puedan aparecer al final de cada
unidad y entre dos unidades. stas han sido insertadas intencionalmente..
ot}
o'=
O,. 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
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). ,
?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 . 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
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
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.
while (x l= 0 && y t= 0) {
:
if (x r= y) ?
{
:
Unidad l: Funciones Volumen 4: Funciones en C 6
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
lntroduccin a la Programacin con C
Gua del Estudiante
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 (. . . ).
'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
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
o )
o else {
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
)) 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) ; '
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.
oot
scanf ( n?du, &num) ;
] while (num <= 9 | num>32767) ;
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 i
if (validar_fm (A) )
oi I
l
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 *,/
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.
-.
I
else
? return (fALSO) ;
e
t
Volumen 4: Funciones n C Unidad f: Funciones en C 19
It
lntroduccin a la Programacin con C
Gua del Estudiante
4. Gfases de Almacenamento
En C, una variable se declara como sigue:
<tipo-de-dato> nombre-variable;
sent.encial;
sentencia2;
senEencian,.
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
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;
int f2O i
l
,/* Archivo3.h */
/* ros prototipos de funciones estn en ste archivo */
inr f1O;
inr f2 O;
El cdigo C finaliza aqu
)
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
Resumen
Ahora que ha compretado esta unidad, usted
debe ser capaz de:
. Explicar la naturaleza y uso de las funciones
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 ()
iI
Volumen 4: Funciones en C Unidad'l: Funciones en C 27
:t
lntroduccn a la programacin
con C
Gua del Estudiante
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
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
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
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)
?
\)
Introduccin a la programacin con C
Gua del Estudiante
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
Unidad 3: Recursin
Volumen 4: Funciones en C g6
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) ;
]
)
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.
Unidad 3: Recursin
Volumen 4: Funciones en C 3g
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
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.
Unidad 3: Recursin
Volumen 4: Funciones en C qin
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
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.
o 4 5 6
a
7
o 8 a
1 5 I
2 6 7
3 4 8
' 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) ,.
)
else {
/*Llamar Ia. funcin tra:tsfe::: .
transferir (n, 1, 3 ) ;
)
) /*Fin de la funcin main*,/
El cdigo C termina aqu
Unidad 3: Recursin
Volumen 4: Funciones en C 48
l
Introduccin a la programacin con C
Gua del Estudianie
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
o
o
o
o
O
o
a
o
a
a
a
Unidad 3: Recursin
Volumen 4: Funciores en C 52
@ Copyright IBM Corp.2O02
, __
uos materiales del curso no pueden ser reproducidos
total
o parcialmente sin elpermiso previo
de IBM
".'"rito
o F
O
o Gua del Estudiante Introduccin a la Programacin con C
o
o
o Unidad 4: Laboratorio de Recursin
o
o Objetivos de Aprend izaje
a
Al finalde esta unidad, usted ser capaz de:
o .
.if
o .
Solucionar problemas usando la recursin como una tcnica
Desanolfar funciones recursivas en C para solucionar problemas especficos
ol'
o
Ol-
oi''
o
oi
oi
Ol
$
d:
d-
d:
a
a
o
a
a
Volumen 4: Funciones
Ejercicios de Laboratorios
1. Escribir una funcin usando recursin para imprimir los nmeros desde
n hasta 0.
n es un entero positivo que es obtiene como entrada.
2. Escribir una funcin recursiva que imprima una lnea que contenga exactamente
n asteriscos, n se da como entrada.
3. Escribr una funcin recursiva que acepte un entero positivo pasado
parmetro y devuelva un entero'con dos ocurrencias d cada
como un
dibti;;'rr0".
si oor ejemplo, el nmero 123 es dado como entrada, la salida debe ser
112233.
Informacin de Publicacin
I
Esta publicacin ha sido producida usando Mcrosoft Word 2O0O y Microsoft Powerpoint I
Marcas Registradas I
I
Marcas Registradas de otras compaas como se muestra
I
formal de IBM y es distribuida bsicamente "como es" sin ninguna garanta ya sea I
cada tema ha sido revisado por IBM para su exactitud en una situacin especfica, no I
hay garanta de obtener el mismo resultado o uno simifar a ste en otra situacjn. Los I
clientes que intenten adaptar estas tcnicas a sus propios ambientes lo hacen bajo su
propio riesgo. I
reservados. I
t,
ot
o' Gua del Estudiante
O,' Introduccin a la
o
o Contenidos
Oir Unidad 1: Punteros
oif Objetivos de Aprendizajes
oi l. Fundamentos de Punteros
1
2
ol 2. Usar Punteros para Pasar Argumentos a Funciones
oi 4
I
Resumen
ol, 12
Unidad 1:Examen de Autoevaluacin
o 13
o Respuestas a la Unidad 1: Examen de Autoevaluacin l5
o Unidad 2: Laboratorios de punteros 17
o Objetivos de Aprendzaje 17
O Ejercicios de Laboratorio 18
o Unidad 3: Punteros Avanzados 19
o Objetivos de Aprendizaje
o 19
1. Introducccin
o' 20
2. Aritmtca de Drecciones
o 20
o 3. Puntero a Puntero 25
o 4. Aneglo de Punteros 26
o 5. Puntero a Estructura
o 6. Puntero a una Funcn
o Resumen
o Unidad 3:Examen de Autoevaluacin 36
o Respuestas a la Unidad 3. Examen de A_ltoevaluacin ?4.
o
Unidad 4: Laboratorio de Punteros Avanzados
o
o Objetivos de Aprendizaje 39
o Ejercicios de Laboratorio 40
o
o
I
lD
p
p
p
!o
lo Volumen 5: Punteros en C Unidad l: Punteros i
lo @ Copyright tBM Gorp.2002
Los materiales del curso no pueden ser reproducidos total
fo o parcialmente sin el permiso previo escrito de lBM.
lo
I
lo
o
rt
oF
o:
.t Gua del Estudiante
lntroduccin a la Programacin con C
O'
o Unidad 1: Punteros
Oi
q Objetivos de Aprendizajes
d
t .
Al finafizar esta unidad, usted ser capaz de:
.
o Definir los punteros y describir su rol en la resolucin de 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
o i'olumen 5: Punteros en c
o . @ Copyright tBM Corp. 2002
Unidad 1: Punteros 1
o Los materiales del curso pueden
no oueden ser reproducidos
reo total
o parcialmente sin elpermiso previo escrito de lBM.
o
o
)
Introduccin a la programacin
con
L Fundamentos de punteros
En el vofumen anterior, se estudiaron
fas funciones en c. En este volumen se
uno de los conceptos ms importanies discutir
de C, OJ prnteios.
un puntero es una variable en c que
representa una direccin de un efemento
en la memoria' un puntero de datos
dato inc' un elemento f l-oat,
"prtJ
un oirecqo memora donde un efemento de
un.elemento char,"n un arregfo
pueden encontrar. Los punteros o una estructura se
son importanter-;;;,
.Son tifes para crear aplicaciones.
se pueden usar para pasar argumentos a funciones
por referencia.
' son tiles para acceder a elementos individuales
de estructuras de datos tales
como anegros, estructuras y tpos de datos
definidos por er ,rruro.
-
' se pueden usar para realizar asignacin dinmica de
reseryar tanta memoria como lo requr=era memoria, es decir,
la estructura de datos , en vezde estar
timitado por anegtos de dimensoni
v t#n" ii",
Para entender er concepto de punteros,
declara en un programa.
se discute que sucede cuando int x = 5; s
Este soficita at compilador de C que
haga lo sguiente:
' Asignar (o realmente reservar) memoria para
almacenar el entero.
. Asociar ef nombre x con la posicn de memora.
. Almacenar elvafor entero 5 en esa posicin.
La Figura 1'1 brinda una representacn
grficade qu
X = 5; ' se proveen dos formas en las cuales la variable,sucede con la declaracin inr
referenciados con uno de eilos especificaoos contenidos y la direccin son
en parntesis.
Nombre de la
variable
-----------> x
(Nombre de la
direccin)
----------+ Valor en fa
5 posi cin
Direccin de la
variable (Contenido de
(Direccin de 1a 435s8 1a variable)
variabl-e)
-
Grrica para int x - s;
A continua",u, ::,ffintacin
Printf """t;:::
("?d1r" , x) ;
se imprime elvaror s. Vase etsiguiente
segmento de codigo:
Print.f ("?u1', &x);
Losmateria,".8"?:llJf ll,,F,[.""",ii;??:_,;::::,''Pterd-Ez
o parcialmente sin el permiso previo
de lBM.
"rtto
o V
o t
Gua del Estudiante
o lntroduccin a la Programacin con C
o
o Figura 1.2: Relacn entre var_nombre y x
o
o l.l. Acceder a Valores Usando punteros
o Se puede acceder al valor de la variable x usando el operador
de indireccin. El * se
usa como operador de indireccin en C. Tambin se le denomina
o 'desreferencia'. El operador de indireccin provee
operador de
o el valor de ta variable x
indirectamente a travs de fa variable puntero, y no drectamente
a travs de la variable
o misma' Por lo tanto, se puede acceder af valor de x como *var
nombre. Ahora bien,
o si se escribe fa siguiente sentencia printf (,,?d1,, *r"r_ro*l;
, ," imprime s.
De manera que ambos x ! *var-no*bt" se refieren
o al mismo elemento de datos (es
decir, el contenido de la mismZ posicin de memoria). Considere
o sentencias:
fas siguientes
o var_nombre = &x;
o y = *var_nombre;
o La primera sentencia coloca la dreccin de x (o el puntero
de la posicin de x) en la
o var_nombre. La sengunda sentencia y = *var_nombre busca el valor
de x, el cual
es 5 / usando *var_nombre y lo asigna a y.
o una variable puntero debe ser decfarada antes de que sea usada.
o En general, una
declaracin de puntero se hace como sigue:
o tipo-de-dato *variable3uncero,.
o El tipo-de-dato se refiere al tipo de dato del objeto en consideracin, y la
I variableiuntero es el nombre de la variable puntero que se est declarando. Note
p que.se debe preceder el nombre de la variabie puntero *.
con un carcter Las
siguientes son afgunas dectaraciones vtidas oe puntros:-
lD inL *nombre_var;
p float *temp;
o
!
o
Gua del Estudianie
char *pva1,.
An cuando las declaraciones anteriores apuntan
variables punteros mismas sfo pueden a diferentes tipos de datos, las
contener direcciones.
una variable puntero en la mbma decraracin
ffiffij!,#cializar taf como se muestra a
int x, y,.
int *nombre_var = &x,.
En este caso, se le asigna la direccin de
x a fa variable nombre
-; var. En este
ejemplo, se han decfarado dos variabres
nombre-war apuntando a una cantidad entera.
enteras ;
" ;,tam-bni" ;ri,L puntero
declaracin, tat como se hizo con otras variables
se puede tener la siguiente
en C:
int x, y;
int *nombre_var;
nombre_var = &x. /* se Le asigna la
direcci_n de x */
Aqu, a nombre_var se le asigna la direccin
de x.
Nota: En la sentenca de asignacin, no se precede
a la variable
' v' rqvru nombre
rrutt'rrr var coo e{
CafCtef *. -
-
o
o
o Gua def Estudiante
lntroduccin a la Programacin con C
o valor' El contenido de la posicin (es decir, el elemento
de dato) se pueder acceder sin
o ninguna restriccin dentro de la ferncin. si se hace
cuatquier modificacin al elemento
o de dato (el contenilo. de la posicin de memoria usanoo
este puntero, los cambios
realizados sern reflejados tanto dentro de la funin
o llamando a fa funcin.'
como en el programa que est
o cuando un puntero se usa como un argumento, ofrece
ef acceso y la capacidad de
o alterar las variables gfobalmente desde dntro de
la funin. sin debe ser
cuidadoso cuando se pasan punteros coTo argumentos,
o ya "r"r!o,le
que son capaces de
modificar elementos de datos s la.funcion quJ lima.
o resultar en un efecto de ondas de cambios en otias
eso peo" veces
,1. der program "rgun",
o A continuacin se presentan algunos ejempfos para entender cmo trabajar
con
o punteros.
Volumen 5: punteros en C
Copyright IBM Corp.2002
@
Unidad l: Punteros s
Los materiales derorrso no pueen'seiiproducidos
totat
o parcialmente sin ef permlso previo escrito de IBM
It
ramacn con C
return (sum),.
)
k++,.
]
/* nI controf del programa se alcanza aqu cuando
el numb no se encontr * /
recurn (-1);
mainO {
{
a Gua del Estudiante Introduccin a la Prooramacin con C
o
o inr caja[100], k, tam, num;
o /* Leer el tamao del arreglo*/
printf ( "fngresar e1 tamao del arreglo [1, 100] \n', ) ;
O
oot
O
scanf (u?d", &tam) ;
a ) while (tam < r ll tam > 100);
a /* Ieer e1 arreglo mismo */
a for (k = O; k < tam; ki+) i
o printf("fngresar 1os elementos de1 arreqlo\
a ?d\n", k) ;
o scanf ( "?du, ccaja Ik] ) ;
o )
Considere int caja t1001 como la entrada. Se debe escribir y usar una funcin una
funcin llamada intercambiar, la cuat anegla el anegb d elementos en orden
inverso. Un algoritmo simple para esto es conlderar el primet elemento (tope) y et
ltimo elemento (base), y intercambiar sus contenidos. Entonces se mueve'at'primo
elemento desde ef tope y al elemento previo a la base y se intercambia sus contenidos.
El proceso contina hasta que la mitad del aneglo se haya recorrido. El siguiente
programa realiza esa la tarea:
-
o base - - ,.
o )
o rtrtr.
o )
o
o ,z* Funcin que cambia l-os walores */
void cambiar(int *p, int *q) {
o int temp,.
o temP = *P,' //
* (1^f a
vvruvqv p almacenado en temp
i Aa de
o *p = *q; ,/ *
l-nn t- cn i n de q movido a p */
o *q = temp,' /* Contenido ue ^^ temp (p) a q */
o return;
o )
o El cdigo G termina aqu
o
o
o
o
o
o
o
o
o
o
o
Resumen
Ahora que ha completado esta unidad, usted ser capaz de:
o Definir punteros, y describir su rol en la resolucin de problemas
Discutir los conceptos fundamentales de punteros, variables, posiciones
de
memorias y referencias
. Explicar cmo hacer declaraciones de punteros
' Dscutir el uso de punteros para pasar parmetros a funciones por
referencia
' Explicar funciones que pueden recbr arreglos unidiemensionaies como
argumentos a travs de punteros.
a
o Unidad l:Examen de Autoevaluacin
.iI 1) En el parmetro formalde una funcin, cmo se declara arreqro?
a) int *arreglo
rf
v5 b) int arregto []
c) int arreglo
f'E
:
d) Todas tas anteriores
q 2) Cuando se pasa un arreglo como argumento a una funcin que ha declarado una
O variable de puntero en el parmetro formal, fo que realmente se pasa es
a) a Ij -rl
b) a [j +1]
c)a
d) aijl
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
a
o
o
o
o
o
a
?
?
o
tI Volumen 5: Punteros ten C
.1 @ Copyright IBM Corp.2002
Unidad 1:
o
o Unidad 2: Laboratorios de Punteros
o
o Objetivos de Ap rend izaje
o
o Af finalizar esta unidad, usted ser capaz de:
Ejercicios de Laboratorio
1) Considere un anegfo unidimensional que contiene
un mximo de 1OO enteros.
Escribia tas siguientes funciones:
a) l-eer-entrada lee los valores del aneglo del usuario . dado el nmero de
elementos a ser ledos N.
b) ordenar-ascendente toma como entrada un puntero a un anegro,
ra
posicin de inicio y fin der anegro, y
ordena ros elementos en orden
ascendente.
C) ordenar_descendente tOma como entrada un puntero a un
posicin de inicio V fin del arreglo, y
arreglo, la
ordena /os ejernentos en orden
descendente.
d) imprimir-salida toma un puntero a un arreglo corno ent;-ada r;. e rmprime el
arreglo en la forma taf como est.
Escribir una funcifi main que tome como entrada (indica
rv ei nmero de elementos en
el arregfo), ingrese los valoies def areglo, imprima
el'arreglo origrnai. orcene la primera
mitad del arreglo en orden ascenden'te, la seguna
mo en orden descendente e
imprima el aneglo asiordenado.
l. lntroducccin
Los punteros
:oL importantes en cualquier esfuerz o pararesolver problemas, tal como
se estudi en la unidad 1 - Punteros. qh est uai, se
de los punteros y sus usos. Para recalcar, aprender un poco ms acerca
tipo de dato' se t'b"..g.Y9 c provee
ru pr"'o edrar pr;i;;
para cuafquier
tipos de datos estndar como inr, floar
Le da adems la posibitiaad af programador o char.
de decfarar tipos oe oatoi'definidos por
usuario' Estos se definen con fa ayuda el
de estiuctuig.v oe_ rlpedefs. Dado que
definidos por er rsuario estn prritior, los
:ffi"ir"r"ftos c p"irit" ar punteros a
Debido a que el puntero es otro tipo
de dato en c, se le debe permtir al programador
declarar un puntero de este tipo de dato.
A u""",'", n"a"r"rio pasar funciones como
argumentos a otras funciones. Esto
slo puede nacrse co n la ayuda de punteros,
j.
ff ,"5H,. il j,t;['fl: I I i,lli"il ; ;; ;;;
e s
"u
n oa o co n,
al
c o n p ra
r
" ",
"s,:
2. Aritmtica de Direcciones
se sabe que un tipo de dato es un.coniunto
sore e//os. Considere la siguient eclaracin:de valores ms las operaciones definidas
int *ptr;
Esto indica que ptr es
una variable que pertenece al tipo de
dato int *. inr * es del
tipo de dato puntero' La variable puntero
corresponda a una posicin en la mem
ptr puede contene.r cualquier varor que
oria I qr"'p"rt"nece al tipo de dato
fenguaje c permite sfo dos op"r""ion"s, entero. El
adiin y resta, sobre las variables punteros.
Lo importante acerca de los punteros
es que la variable puntero est asociada
tipo de dato. por lo tanto, se pueo con un
Jecfarar ro ,igun1.
inf *'iF?.
LL/LL,
. char *cpLr,.
float *fptr,.
Estas tres variables punteros son diferentes
almacenan la direccin.de una pson en naturale za, an cuando ellas todas
r"roi. p"r"
".rl est asocado esentender
direcciones' el tipo. de.dato at qle el puntero la aritmtica de
significante. Este es el
:11Hff"".:i"Yr?$*T or" se usa en er crcuro de ta qL,e invorucra
"*pi"riJn
La aritmtica de direccjones se usa para
mover el puntero a la prxima posicin
memora (donde la asignacin oe mlmoria en la
contig-es-runoamental), para acceder
elemento afmacenado en esa posicn. al
La aritmiica de drecciones normalmente
aplica cuando se usa con arreglos. La se
aritmtica de dircciones no se puede
tipos de datos como int o usar con
porque el contenido de la prxima posicin
"Lr
conoce' Tanto fos aneglos unidimesionales no se
como r-ooimensionales se almacenan
en posiciones de memoria contiguas.
A
t
.F
of
o:f Gua del Estudiante Introduccin a la P
I 1038
o 1040
o 1M2
o 1044
o 1046
o
o ptr
Figura 3.1: Direcciones de la Variable Puntero
o
o
Guia del Esiucian:e
2.2. Usar el Operador de Adicin con punteros
En fa primera operacin, la direccin.
en la variable puntero se torna, y se mueve por
nmero representado por un opendo e/
entero. consioere ro sguiente:
ptr + 4;
Ef valor retornado es otra direccin, ra
cuarse carcura como sigue:
pEr + 4 * sizeof(tipo_de_dato)
si el tipo de dato.es. un integer, y se asume. q*
oo, bytes (se asumir esto para
por et sisiema oprativo p.r" ud" entero, d
;?r"",:",ff r5"HHoJ"Lln "rnados ta
PCr+4t'2
prr + B
Esto es equivafente
De este modo, si a pcr se re ha asignado
ra direccin roze, Ia expresin ptr
resurtar en 103e, donde ef 5ro eremento
est disponibre. Note que ro:e _ 1028
+4
ocho bytes, y dado que cada entero ocupa dos bytes, eS
pasado es sfo cuatro' Esta es la el nmero actual de elementos
razn porque de dato asociado con una
variable puntero es importante. "t-iipo
2.3. Usar ef Operador de Resta con punteros
La segunda operaCi, <variable puntero> _
<operando enteror, trabaja Como el
caso anterior' excepto que resta ef nmero
de ovt"r,-y se posiciona en un elemento
antes de la variable punrero.
La tefcefa OpefaCin, <variabl-e1 puntero> _
ya que produce como resultado el nmero <variable2 puntero>, es diferente,
oe element, pr"r"ntes entre estos dos
valores punteros. una vez entendjdos r";-;;;,
bsicos de aritmtica de
fl[::':ffi: ;:."3J:sresa
ar ejempro q," r";f ;;;J" de enteros p"
"orprender
Ya se ha visto que
ptr + 10;
apunta al 10'o efemento despus de ptr.
Da.do euo arrg1o alarnacena la
su primer elemento, arreglo + i retorna direccin de
ef mismo varoi que prr + i. sin embargo,
existe una diferencia entre los dos, fo cuat
se aprendern en la prxima seccin. para
obtener el elemento en arreglo + i
desreferencia *' Asse indicar * (arregl0
! prr + i S debe usar er operador de
+ i) y * (prr + i) respectivamente.
arregl0 til ptrtil
y son diferentes formas de expresar *(arresl0
+ i) y *(ptr *
i)' respectivamente. As, cuando se dice
ptrtii,
er compirador est reafmente
realizando el siguiente cfculo:
"(ptr + i * sizeof(tipo_de_dato))
En ef ejemplo, ptr [4i ef elemento en
fa q.rinta poscin es recuperado usando la
frmula .(ptr + 4. 2) que es so. Aqu,
arreglo contiene
Lo28 + 4 * zda.1o36, y *(1036) oa ei elemento la direccin Lo2B.por lo que
que est almacenado en esa
dreccin de memoria, el cul es so.
Nota: usando el operador de desreferencia de
ta direccin se obtiene ef etemento de
esa posicin.
Losmateria,""?"?3llJ"nil,,i[3",ir";??33,,oo,",oostotar
o parcialmente sin el permiso previo escrito
de lBM.
o
o Gua del Estudiante Introduccin a la ramacin con
o C
)
i
P
Direccin
de
Memoria
de la
Posicn
. 1028
1030
1032
1034
1036
1038
10i0
1042
1044
1M6
Figure 3.2: Dos Variabfes punteros
La expresin ptrz _ prrl resultar
en un vafor entero equivalente al nmero
objetos presentes entre estas dos variables. de
Ef clcufo se realiza como sigue:
(ptr2 - ptrr) /sizeof (Lipo de
_dat.o)
Esto es iguat a (103g _ 1O2g)/2
= 10/2 =S
Esto significa que hay cinco objectos
enteros desde prrl pLr2. La suma
variables punteros no es significativa por de fas dos
razones obvias.
se present en fa seccin anterior
punteros' Hasta ahora se ha visto como se realiza la operacin de adicin usando
que usar el nombre del areglo cuando
operaciones aritmtca de direcciones es fo rro que se reatizan
usar ef nombre de una
varable puntero (la cual apunta al
reglo) para la
operacin de resla- no debe ser eiecutda rir"
operacin. sin embargo, la
con ef nombre del areglo. El compifador
reserva memoria para tn anegro, y er
espaco ocuaoo por r-Jrr"gro durante
ejecucin del orograma no debe alterarse. ra
Ef nombre'der aneglo contiene fa direccin
del primer efemen"to, er cur no
As' se puede decir que d valoilr!J"
,"r cambiado durante la ejecucin det programa.
oe L ireccion mntnio" el nomoi Je-r a'eglo,
una constante' y el-nombre del areglo
significa ui" piit"ro "nconstante. Restar un es
de a este puntero constante no tenra vator
"ti, v" {
resuttar en una ireccin que
con ra direccin usada en ra opeacion.
ffi?il:i: Sea por ejempro ra siguiente
arreglo _ 4
Esta resulta en una posicin que est
antes de roza, que no es parte detarreglo que
ha declarado, teniendo en cuenta se
!r ,"", resta en aneglos no tiene sentido.
Ahora se aprender como decfarar un puntero
a un puntero.
o1
.ll
:il Para recalcar, un variable puntero es una variable que contiene la direccin de otra
variable. La variable puntero en s msma puede apuntar a otro puntero, implicando que
rtr
:t
oll se puede tener un puntero a un puntero.
t?
I
o
printf 1"Zd"l'"y)
Se puede tambin obtener el mismo valor tambin a travs de z.
?
? Volumen 5: Punteros en C Unidad 3: Punteros Avanzados 25
.'
l
?
Copyright IBM Corp. 2002
@
Los materiales del curso no pueden ser reproducidos total
o parcialmente sin el permiso previo escrito de IBM
?
o
Introduccin a la Gua del Estudiante
Printf("?d" , **z) ;
C permite que esto sea extiendapara teer un puntero a un puntero a un punrero
puntero, y as sucesivamente sn imte. Pero esie tipo de definicin tiene
a un
muy po6 uso
prctco. Para la mayoria de las aplicaciones es suficiente saber cmo
usar un puntero
a un puntero.
4. Arreglo de Punteros
En C, se puede tener un aneglo cuyos efementos son todos punteros. Cada uno de
qslo! punteros, por q'emplo, puede a su vez apuntar a un arreglo unidimensional. La
definicin de tal aneglo de punteros apuntando'al msmo tipo de"anegio unioimensional
es realmente la definicin de un arreglo bidimensional.
Un aneglo multi-dimensional puede ser descrito como un arreglo arreglo de punteros.
Tambin se puede definir como un n'ico puntero apuntado ,n grpo de arreglos
almacenados en posiciones de memoria contiguas.
Un areglo bidimensional se puede definiir como un arreglo unidimensional de punteros
con la siguiente definicin:
tipo-de-dato *arreglo [c_exprJ ;
En ef Volumen 3,.Unidad 2 - Arreglos Multi-Dimensionales. un arreglo de bidimensional
se defini como sigue:
Cipo-de-dato arreglo Ic_expr1] [ c_expr2] ;
De alguna forma, las dos definiciones anteriores son equivalentes.
Nota:
' El tamao de un areglo es siempre una constante, representada por c_expr
anteriormente.
' Los subndces de un arreglo pueden ser de tipos integrales inr ! char. El tipo
de dato f loar no se puede usar como subndice de aireglos
Se puede extender la definicin del uso de punteros para arreglos mult-dimensionales
como:
tipo-de-dato *arreglo Ic_expr1] [ c'expr2].-.[ c_expr_1J ;
para un aneglo de n dimensiones. Note que tiene una dmensin menos.
Una definicin
de arreglo equvalente es como sigue:
E.ipo-de-dato *arreglo [c_expr1] [ c_expr2] -..[ c_expr) ;
Suponga que se necesita tener un aneglo bidimensional con cinco fllas y 25 columnas,
conteniendo enteros, se puede tener esto como:
int *x [5] ,.
#define TAMANO 4
o nrintf
rr4!!
/rr\-nt.
\ \r / ,
Unidad 3: Pu
o int esprimo(int);
. int espaLi-ndrome (int) ;
Ef siguiente es el programa completo.
funcn' basado en el piogra*;;;;; una expficacin def uso de fos punteros
continuacn, a
sigue ar programa:
Ef cdigo C inicia aqu...
/* Archivos de Cabecera */
#incLude <stdio.h>
#include <math.h>
umen teros en C
@ Copyright tBM Corp.20O2
,t-os __
^_ materiales del curso no pueOen'seiieproducidos
o parcialmente sin el permiso previo total
O" lg^r.
"r"rito
o
o
Gua del Estudiante Introduccin a la Programe::- :_-
o _
o )
o )
o )
o /* La funcin raizCuadrada termina agu */
o
o El cdigo C finaliza aqu
o
Hay dos funciones, main y generarTabla. generarTabla toma un argumento que
o es un puntero a una funcin. Se declara un puntero a una funcin como se muestra a
o continuacin:
o j-nt raizCuadrada(int); /* Funcin normal *,/
o int (*fptr) (int) ; /* Declaracin de un punte_ro
O a una funcin *,/
o t,
o Volumen 5: Punteros en C
' Unidad 3: Punteros Avanzados 33
o Copyright IBM Corp. 2002
@
o Los materiales delcurso no pueden ser reproducidos total
o parcialmente sin el pemso prevo escrito de IBM
o
o
o'
Powered by TCPDF (www.tcpdf.org)
lntroduccin a la programacin con
C Gua del Estudiante
fnt-r F.
-
/* Asignar 1a funcin a un puntero */
Para leer la dec]aracin de un puntero a
una funcin correctamente, es necesario tener
un entendimiento claro de la precedenca de operadores.
precedencia sobre *. Asi *fprr Los t l, tinen una mayor
se enceTa entre O paradarfe una mayor precedenca
sobre ( ) . Sea la siguiente declaracin:
int raizCuadrada (inC) ;
se lee 'raizCuadrada s una funcin la cual tor" ,n
entero como argumento y retorna
un entero'' Elnfasis es en 'es una funcin' primero. considere la
sguiente declaracin:
int *fptr (inr) ;
P u n te ror-6-E 3
,-", ; ;";,",3"? lllJin ['
F[."".j'" ?:3,'"J
o parcalmente sin elpermso previo
"? escrito ",
;i
de" lBM.
o
o Gua del Estudiante Introduccin a la programacin con C
o
o Resumen
o Ahora que ha completado esta unidad, usted ser capaz de:
o . Explicar la aritmica de direcciones
o . Describir un puntero a puntero y un arreglo de punteros
o . Discutir cmo declarar y usar punteros con estructuras
o . Explicar cmo pasar funciones como argumentos a otras funciones a travs de
o punteros.
o
o
o
o
oi
o
o,
o
o
o
a
a
a
o
o
o
o
o
e
O
a) 1.1
b)0
c) Error
d) Ninguna de las anteriores
2) f ++ S vlido.
a) Verdadero
b) Falso
3) fpt 12 - fprrl resulta en cul de los siguientes?
a)0
b)1
c)2
d)3
4) fptr2 = fptrl es una declaracin vlida.
a) Verdadero
b) Falso
5) ** es usado para desreferenciar el valor apuntado por un puntero a puntero.
a) Verdadero
b) Falso
6) Todos los elementos en un areglo pueden contener punteros del
mismo tpo de
dato.
a) Verdadero
b) Falso
7) Cules de los siguientes tienen la mayor precedencia?
a)*
b) ++
c) ==
d)o
Qu es pcr?
a) Un puntero a funcin
b) Un puntero a puntero
c) Una funcin
d) Ninguna de las anteriores
10) En la declaracin
:H int * (*ptr) (int "
oll
ql Qu s prr?
a) Un puntero a puntero
$ b) Un puntero a una funcin
c) Declaracininvlida
d
I d) Ninguna de las anteriores
I
o
o
o
o
o
o
o
?
o
o
I
pu nte ros-ETre
."" ; ;";",", ?"? lll# [' 3*g"j',"? ?3;,"J"", ;,
o parcialmente sin ef permiso previo escrito de lBM.
o --
o - rE
o PC
r Gua del Estudiante Introduccin a la amacin con C
o I
o fr i
Unida d 4: Laboratorio de punteros
o Avanzados
o
o
o Objetivos de Aprend izaje
o Al finalizar esta unidad, usted ser capaz de:
o . Trabajar con diferentes tipos de punteros
o . Usar punteros en la solucin de problemas
o
o
o
o I
I
o I
o i
o j
o I
:
o
o
a
o
o
o
o
o
o
a
a
q
I
T
T
?
?
?
o
F
Volumen 5: Punteros en C Unidad 4: Laboratoro de punteros Avarzados
? . @ Copyright tBM Corp. 2002
? Los materiales del curco no pueden ser reproducldos total
o parcialmente sin el permiso previo escrito de IBM
7
p
I
rarnacin con C
Gua del Estudiante
Ejercicios de Laboratorio
1) Considere fa siguiente estructura definida
a continuacion:
tlpedef struct {
int dd, mm, yy;
) rncna;
rlpedef struct {
int idno,.
char nombre [+o] ,.
.ucuA ddn,.
float salario;
int dependientes,.
) rutr,raoo;
a) Escribir una funcin que rea
fos_datos para 100 empreados.
usted puede
ffJil:'"Hti:[Xp-ara 5 a 1o empr"uoo.'!!ro traoaiar para cuarquier
b) Escribir una funcin para incrementar
ef sueldo de los empieados
una entrada der usuario. Las basados en
porcentaje de incremento entradas sern er-nmero der empreado
en el sueto -fu;; debe retomar y er
Debe mostra*n el nuevo
:il"jff".X]f!Si?ff;. de enor si er-nero
'"nrul"" de
c) Escribir una funcin que muestre
los detalles def empleado con
un formato.
teros anzados
r ^^ ___.
Copyrght tBM Corp.2002
@
tos materiales del q.lr so no pueden
ser reproducidos total
o parcialmente sin el permiso prevo
de lBM.
"r"rito
:t
oil
.l
ol.
.lt E-r- ntroduccin a la
f
rF
-E -* -1-h-
I- 5
--n Programacin con C
oE ry-ntI
---5Ir -R
(Codigo del Curso: Cy320)
otf
olr Gua del Estudiante
.l
ol
oi
o;
ol
o
Ol
o
o
o
o
o Volumen 6: Tpicos
o
o Avanzados
o
o
o
o
o
O
I
a
I
I
{
o b
Unidad 1: Exmen de Autoevaluacin
18
42
Objetivos de Aprendizaje
tI Ejercicios de Laboratorio
42
43
It
I
p
lo
lo
lo Lrdad 't: Manejo e ArcvoEnlC
V_olumen 6: Tpcos Rvanzados
@ Copyright IBM Corp. 2OO2 ii
'o ^
,Los
materiales delcurso no pueden ser reproducidos
o o parcialmente sin el permiso previo
de lBM.
totaf
a "scrito
o
^l
!F
o
o Gua del Estudiante
Introduccin a la Programacjn co- C
o
o Unidad 1: Manejo de Archivo en C
o;
oi Objetivos de Aprend izaje
o
o Al finalizar esta unidad, usted ser capaz de:
o Reconocer reas en ra.sorucin de probremas que
o requieren ra necesidad de
leer y escribir datos en dispostivos de almacenamiento
secundario.
o a Discutir cmo manejar archivos de datos en
C
a Discutir el mtodo de manejo de archivos orientado
o o Describir diferente ribreras de funciones que
a flujo en c
o archvos en disco.
ayudan crear, reer y a escribir
o
a
a
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
a Losmarerf ar"r?f S[""li,F*.?Jr,;?of
o l,oo,"oostotal
o parcialmente sin elpermiso previo es'oito
cle IBM
o
o
Introduccin a la progfamacin con C Gua del Estudiante
l. Introduccin
Algunas aplicaciones. requieren que los datos estn disponibles
para varias ejecuciones
del programa. Ejemptos de estas'aplcaciones son:
'
Datos sobre empfeados, requeridos por apJicaciones de
nmina de pago.
o
Datos sobre cuentas delclente, requeridos por los programas
bancarios.
Los datos que se usan en las variables de los programa
duran solamente el tiempo de
duracin del programa. Los datos, almacenado. e la F{AM,
se pieroen ,n" u". que el
programa termina a menos que explcitamente se
coloquen en to dispositivos de
almacenamiento secundario. sin embargo, en los dispositivos
de almacenamiento
secundario mm9 discos y cintas, los datoJse almacenan permanentemente
de archivos de dafos- En esta unidad se va consderar slo en la forma
archivos de disco cuando
se haga referencia a los dispositivos de almacenamiento secundario.
Los datos que se
mantienen en el dispositivo de almacenamiento secundario
son permanentes, a menos
que sean borados por ef usuario.
Muchos
.lenguajes de programacin clasifican los archivos de datos como archivos
secuenciales y archivos de acceso directo o acceso aleatorio. c ofrece dos
diferentes de archivos de datos. Estos son: tipos
Volumen
. @ Copyright tBM Corp..2002
Los materiales del curso no pueden ser reproducidos total
o parciafmente sln elpermiiso previo escrito de IBM
Abre un nuevo archivo Dara
escritura/lectura. Si un archivo con el
mismo nombre existe, sfe ser
bonado y un nuevo archivo ser
creado.
[:[,/lff,:; S?5;";X,:ffifn#o,
ejempros para entender los conceptos de
manejo
(ptrl ;
.:tt""u
Losmateriar"r?"?SL"['3[r"""f""??31,*roo"stotal
o parcialmente sin elpermiso previo escrito de IBM
o
Introduccin a la programacin
con C
Gua del Estudiante
]
/* La funcin main termina agul*/
El cdigo G termina aqu
if (pcr == NULL)
printf (',Error abriendo e1 \
archivo \n"),.
else i
/* eerrar el archi.vo *,/
fclose (pUr) ;
Unidad t : rv,raneoEni-EnE
Volumen 6: TpicosTvanzados
@Copyrght tBM Corp. 2002
Los materates def no pueden ser reproducidos total
"Lrso
o parcialmente sin elpermiso previo estrto de IBM
o
o
o
o /* La funcin main termina aqu ,t7
o El cdigo C termina aqu
o
o Note como en este mtodo se ha cofocado fopen
dentro de fa sentencia if.
La
o funcn fopen se eiecuta y retoma un valor, el cuaise
compara con NULL.
asigna buf f3rr
y fuego se
o
o se puede usar cualquiera de los dos mtodos. Al flnal, son los programadores
quienes
o deciden culde los mtodos desean emplear.
o Taf como se mencion anteriormente, un archivo
de datos debe ser primero creado
o antes de ser usado. A continuacin se aprender a
como crear los archivos de datos.
Los archivos de datos orientados a flujo se pueden
o crear de las siguientes formas:
o ' creacn directa del archivo usando un editor de
palabras
texto o un procesador de
o .
o
Creacin indirecta a travs de un programa
cuando se crea un archivo de datos a travs de un programa,
o se leen primero como entrada def usuario a travi eiiecuotir; generalmente tos datos
o s-'Lscrioen at
archivo de datos. se pueden usar tas siguientes funciones
de tibrera:
o . getchar
o . putc
o Ejemplo 1.3: Leer un Archivo de Texto y Mostrarto
o En este ejemplo se presenta cmo leer un archivo de
o texto desde un dispositivo
almacenamiento secundario y mostrar el texto. se
debe abrir un archivo de texto
o existente llamado mvstorv-dat n modo slo de
leciura. Entonces se debe leer
carder por carcter def archivo, mostrando cada
o carcter ror (fin de archivo).
carcter hasta que se encuentre un
o
o El cdigo C inicia aqu...
o #include <stdi,o. h>
o
o /* La funcin main se nicia aqul */
o main0 {
o FfLE *myText.; /* Area de buffer *,/
o char ch,.
o /* abrir e1 archivo *,/
myText = fopen("mystory-dat" ,,'r,,) i
o if(myrext == NULL)
o printf (,'Error aI abrir e1 archivo\n,,);
O else {
o
o /* Leer un carcter cada uno a la vez hasta alcanzar EoF e
o
o o{umen
imprimirlo */
ch = getc (myTexE) ;
while(ch != EOF)
I
t
purchar (ch) ;
ch = get.c (myText) ;
)
)
/* La funcin mai_n termina aqu */
El cdigo C termina aqu
o ch = getcharO;
o )
o t
t se imprimen.
Al final, los coni"otr"r de espacios y caracteres
r :
--=-
Losmateriar",S"?ff x,*1i,3,[r1"fl;??3l,oa,"ioo,,o*r
o parcialmente sin elpermiso previo esctito de
IBM
d
t
o I
Esto refueza el uso de la lectura de un carcter, por
funcin fserc.
ahora esto se realiza usando ra
else {
ch = n"c(rxr);
while (ch ! = EoF) {
/* vetifica los espacios en blancos,
tabulaciones y caracteres de nueva l-nea *,/
if (ch-=' , ll ch=='\, ll \
ch=='\n' )
nspace++,.
if (toupper (ch) >= ,A, && \
toupper (ch) <= ,2,)
nchar++,.
ch = fgetc(text) ,.
)
/* cerrar e1 archivo */
fclose (Cext) ,.
)
printf (', Espacios = ?d CaracLeres = ?d\n", \
nspace, nchar) ,.
)
/* La funcin main termina aqu */
El cdigo G termina aqu
) vo j-d almacenarDat.os ( ) {
I
I
FfLE *in mark3t.r,.
P LISTA_NOTAS in_stud ISIZE] ;
I int j,k;
l,
/* Abrir archivo para escritura *,/
It in_mark3tr = fopen( uhist,ory.datt',,,wn)
I ;
, orumen 6:
@ Copyright IBM Corp. 2002
Los materiales delcurso no pueden ser reproducidos total
o parcialmente sin elpermiso previo escrito de IBM
o
Introduccin a la programacin con C
Gua del Estudiante
/* Leer t.odos 1os daEos de 1os estudiantes de parte
de1 usuaro */
k = 0;
while (k < srzE) {
Print.f ( "fngresar fDNO\nr) ;
scanf ( n?ru, j-n_st.ud [k] . idno) ;
fflush(srdin);
-
Printf ( "fngresar Nombre\n" ),.
scanf ( u *, u, in_stud [kj . nombre),.
printf("fngresar las noLas de Ios 6 cursos\n,,);
for(j=0;j.6;i++)i
do{
print.f ("Notas de1 Curso No: ?d IO-100j \n,,, j+1);
scanf ("?f u, &in_stud tkl . notas I j ] ) ,.
)whi1e ( (in-stud [k] -noras tjl <0)' I | (in-sLud lkj .noras tj] ,1oo) ) ;
l
k++,.
)
for (k = O; k < SfZE,. k++) {
fPrintf (in_mark3tr, ', ?s\',, in_stud [k] . idno) ;
fPrintf (in_mark3Lr, ', ?s\', , in stud fkl nml-rra\.
for (j = O; j . 6; j++)
fprintf (in_mark3tr, ',?f \n,,,
in_srud [k] . noLas tj I ) ;
)
/* cerrar archivo *,/
fclose (in_mark ptr) ,.
I
/* Abrir archivo modo lectura */
I
out_mark__ptr = fopen ( r'hi-story. dat rr , rrr'r ) .
I
k = 0; I
{
Unidad 1; Manejo de Archvo en C
Volumen 6: Tpicos Avanzados 12 (
.
Los materiales
@ Copyright tBM Corp.2002
del curso no pueden ser reproducdos total I
o parcialmente sin elpermiso previo escrito de IBM
I
{
r
olt
o
o Gua def Estudiante
o fscanf (out_mark_ptr, "?s?s", out stud IkJ - idno, \
o out_stud [k] .nombre) ;
ol for (j = 0; j < 6; j++)
ol f scanf(out-mark3tr, "tf,, , \
Ol &out_srud [k] - noras ij I ) ;
oi k++,'
o! )
/* cerrar archivo */
o (out_mark_ptr ) ;
f c lose
o for (k = 0; k . SIZE; k++) {
o printf ("\n?s: ?s\n,',
o out_stud [k] . idno, out_stud [k] .nombre) ;
a printf ( "Notas en los cursos: \n,,) ;
o for (j = 0; J . 6; j++)
o printf (*26.2f \n", out_st.ud Ik] .notas ij I ) ;
o
o )
o
/* La funcin main inicia agu */
O mainfl {
3 almacenarDatos O ;
o recuperarDat.os O ;
o )
o /* La funcin main finaliza aqui */
a El cdigo C finaliza aqu
o
o Nota: Cuando se abrieron los archivos no se verfic por NULL. Se requiere que se
incluya una verificacin por NULL cuando se ejecute este programa en la
o computadora.
Fin del Ejempto 1.6
o
? Resulta obvio que usar archvos de datos no es slo leer y escrbir archivos
de texto. Se
a necesita procesar datos en un archvo de datos, actuali2ar valores que
requieren ser
modiflcados y hacer muchas otras tareas relaconadas. Generalmenie
? un archivo de
I datos tiene que ser ledo as como se tene que escribir en t. Escribir
datos puede tomar la forma de registros siendo aadidos, regstros
un archvo de
lo
o
Gua del Es::: a^::
Otro mtodo de hacer esto se da a continuacin:
o
Leer un registro desde el archivo.
o
Procesarlo y escribirlo de vuelta en el mismo archivo
reemplazando el registro.
Nota: Es difcf feer y escribir datos con formato, en
el mismo archivo de datos.
] r,rsra_norAs,.
'/* Funcin
archivo *,/
para obLener dat.os del usuario y almacenarro
en un
void almacenarDatos O {
FfLE *in_mark3tr;
LISTA_NOTAS in_srud ISIZE) ;
inr j , k,.
for (j = O; j . 6; j++)
I printf ("26.2f\n", out_studtkl .notas tjl );
O
o )
o /* La funcin main comienza antt * /
o mainO {
o almacenarDatos ( );
o recuperarDatos O ;
o )
Resumen
Ahora que ha compretado esta unidad,
usted debe ser capaz de:
' Reconocer reas de sotucin de problemas
que requieran la necesidad de leer y
escribir datos en dispositivos de armacenamiento
. Discutir cmo manipufar archivos de
datos en C
secundario
?
o
7) Cules de las siguientes se puede usar para leer y escribir archivos
formato? de datos con
a) fscanf
b) fprinrf
c) fread
d) fwrire
8) cules de los siguientes se puede usar'para leer y escribir archivos
formato? de datos sin
a) fscanf
b) fprinrf
c) fread
d) fwrire
9) En un archivo de texto, el carcter de nueva lnea es
a) Escrito como es o ledo como es
b) Traducido a los caracteres cn y r.r
c) Traducido slo alcarcter cR
d) Traducido slo alcarcter lp
10) En un archivo binario, elcarcterde nueva lnea
es
a) Escrito con es o fedo como es
b) Traducido a los caracteres cR y r,r
c) Traducido slo al carcter cR
d) Traducido slo al carcter r,,
?
?
e,^ C 23
@ Copyright IBM Corp. 2002
Los materiales del curso no pueden ser reproducldos total
o parcialmente sin el peniriso previo escrito de IBM
o?
o
o Gua del Estudiante Introduccin a la Proqramacjn con C
o
o unidad 3: caractersticas Adicionales de
o
o c
o
o Objetivos de Aprend izaje .
o
o Alfinalde esta unidad, usted ser capaz de:
o' . Declarar y usar enumeraciones en C
o . Describir los argumentos de la lnea de comandos
o Definir las macros y usarlas en los programas
o . Discutir algunas funcones del preprocesador de C
o
o
o
o
o
o
o
o
o
a
a
o
o
o
o
o
o
o
o
o
2. Enumeraciones
Existen muchas entidades en un
sistema dado, fas cuares pueden contener
conjunto posibfe de vafores. Por ejemplo, uno de un
la puede tener er varor azul,
verde' amari11o, rojo y as sucesivamente. "tiJJcoror
similarmente. la entidad flor puede
contener el valor rosa' girasol,
entidades definidas por utr*io y
lirio
y as sucesivamente. para caprurar estas
sus posibfes vafores, ei rengua.le c provee
mtodo poderoso a travs de la enumeracin. un
undad3'caract@
Volumen 6: Tpicos 4vanzados 26
@ Copyright tBM Corp.2002
Los materiales det curso no pueden ser
rproOuciOos total
o parcialmente sin el permiso previo
estrito de IBM
ot
o
a Gua del Estudante amacin con C
o Nota: El nombre-de1-enumerado specificado no siempre es requerdo.
o
Lo cualsignifica, que puede tambin ser escrito como sigue:
o enum { rosa, lirio, margarita, narci.so, c1ave1 } a1ice, jessica,
o shirley, stef f i,.
o Asa rosa se le asigna a o,liriose le asigna 1, margarita se le asigna 2 y as
o sucesvamente hasta alcanzar c1ave1, al cual se le asigna +. El usuario pede
o sobrescribir la asignacin automtica de los valores enteros para las constantes
o enumeradas. Por ejemplo, en una sentencia de asignacin, se puede escribir miembro
o
Basado en esto, se puede tener las siguientes sentencias vlidas en c:
o
o Elcdigo C comienza aqu... I
o
)
o el,se
o miHija = (pasta_de_dientes) ( (mipasta + miEsposa) t 2) ;
o switch (miHijo) {
o case colgate:
o case forhans:
I I
t
t
t.
h
@ Copyright IBM Corp.2002
p Los materiales del curso no pueden ser reproducldos total
b
l
o parcialmente sln el permiso previo escrito de IBM
o
o
Introduccin a la programacin con
C
Gua del Estudiante
El cdigo C finatiza aqu
I
Iq Ejemplo 3.4: argc, argv en un Aplicacin Tpica
,t En este ejemplo se ilustra el uso de argc y argv en una aplicacin tpica que
copia un
archivo a otro. Sin. embargo, no se escribira h lgica as sentncaJ-lue hacen
1
'ealrnente fa copia) sino que simplemente se plesenta la estructura para pasar
alumentos a travs de la lnea de comandos. Hay que recalcar que en un SO como
Ur:ix. se puede decir lo siguiente:
studiante
cp archivol archivo2
se debe tener la posibitidad de leer los dos nombres
de archivo como argumentos.
siguiente fragmento de programa hace eso:
El
/* Archivo de cabecera */
#include <stdio.h>
/* La funcin main inicia agu ,t/
main ( int argrc, char *argv []
) {
,/* buffers para dos archivos */
FfLE *in_fi1e, *out_fiLe,.
,/* Abre un archivo para lectura */
in_f i1e = fopen (argv If ] , ,,r,') ,.
if (in_fite == NULL)
printf("Ocurrio un error abriendo e1 archivo\n,,);
eJ.se {
out._f i1e = fopen (argv[2] , ,,wr,) ,.
if (our_fit-e == NULL)
printf ("Error en e1 archivo de salida\n,,),.
el-se i
/* copiar el archivo de entrada af
archivo de salida */
)
)
/* cerrar e1 archivo */
fclose (in_fi1e) ;
)
/* La funcin main termina aqu */
Ef cdigo C termina aqu
4. Macros
Unidad3,Carac@
Volumen 6: Tpicos Avanzados 30
Copyright tBM Corp.2002
@
Los materiales del curso no pueden ser reproducidos
total
o parcialmente sin elpermiso previo escrito de
IBM
ot
o
o Gua del Estudiante Introduccin a la Programacin con C
o scanf(ugfn, &radio);
o )while(radio < 0 ll radio > 32757);
o printf ( "El area del circufo es = ?f\n,', \
area_del_circulo) ;
o
o )
/* La funcin main fina:..iza aqul */
o
El cdigo C finaliza aqu
o
o Aqu area_deI_circulo es una macro que define una expresin : . rr * radio *
o radi-o. Durante el proceso de compilacin, aree del_circulo se sustituye por la
o expresin 3.141- * radio * radio.
Avanzados deC3l
@ CoPYright IBM CorP. 2002
I Los materiales delqJr5o no pueden ser reproducidos total
o parcialmente sin el permso previo escrito de IBM
Y
o
Introduccin a la programacin con C Gua del Estu6;e^:=
mismos con una macro? En este caso, cada lnea de la macro
debe terminar con ej
carcter barra oblicua (slash).
Ejemplo 3.6: Macros Multi-lnea
A continuacin se escribe una macro que calcula el MCD de dos enteros positivos.
La
macro sepresenta a continuacin. Note que la macro requiere mltiples lne'as.
Ef cdigo C inicia aqu...
/* Archivo de cabecera */
#include <stdio.h>
/* Una macro mu1t.i-lnea para MCD */
#define MCD while (x l= 0 && y l= 0) \
if(xt=y)x=x*y;\
elsey=y?x;\
if (x == g respuesta = y; \
else respuesta = x,.
)whi1e(x<1 I I x>32767) ;
do{
pri.ntf ("\n fngresar otro enLero [1-32 7671 ; ");
scanf 1 "?d", &y) ;
)whi1e(y<1 | I y>32767);
a=X;
h-r'. t
"-l
MCD
printf("McD de ?d y ?d es ?d : ,,
, a,b, respuesta) ;
Colo se puede ver en la macro, tas mltiples lneas finalizan con el carcter
\, excepto
la ltima lnea. Esta se trata como una sentenca compuesta.
Tambin note que en la
funcin main, se ha escrito MCD sin la coma. cuando ef compilador
lee esta referencia
de macro, esta referencia se susttuye con elcuerpo de la macro.
o
o )'
o /* La funcin finaliza aqui * /
o El cdigo C finaliza aqu
o Fin del Ejemplo 3.6
o
o Una referenca a una macro dentro de una programa seala al comprilador reemplazar la
'eferencia por las sentencias contenidas dentro de una definicin de macro. Una
cefinicin de macro puede tambin contener argumentos encerados dentro de
o 3arntesis, como se muestra a continuacn:
a #define MCD(var_x, var_y) while (var_x != 0 && var_y != O) \
a if (var_x >= var_y) var_x = var_x t var_y,. \
o else var_! = var_! t var_x; \
a if (var_x == 0) var_reEpuesta = var_y; \
o
o .:,:-fgn6: T
@ Copyright IBM Corp. 2002
o Los materiales del qrso no pueden ser reproducidos total
o o parcialmente sln el permso previo escrito de IBM
o
o
IEs:,;: _::
el,se var_respuesta = var_x;
En este caso, la referencia a la macro se asemeja
MCD(x y) . a la llamada a la funcin, como
Ahora' que se ha entendido bien et concepto de
macros, se vern las dificultades de
usar macros dentro de los programas. conbcer
tanto Jas desventajasl ventaas de las
macros' ayuda al programador a decidir la conveniencia
programas de usarfas dentro de los
El uso de fos parntesis dentro de fas macros puede
resultar en efectos secundarios
altamente indeseables. El siguiente es un excelente
ejempro del efecto secundario de
una macro:
#define raizcuadrada (x, y) sgrt (x*x + y*y)
Sse usa este como
raizcuadrada (x+1 , y+2)
se debera tomar
sqrr((x+1)*(x+1) + (y+2)* (y+z))
Pero por la susttucin de ra macro, se obtiene
ro siguiente:
sqrE (x+1*x+1 + y+2*y+2)
La cual no es lo que se desea. Realmente, ninguna
parntesis va a rectificar el efecto modificacin en el uso de los
secundario ineseado en este caso. Este efecto
secundario ocure principalmente cuando se pasan
aigLmentos a tas macros. Tambin
se consdera el ejempfo 3.6 del MCD usanob
macroJ si un programador quiere usar
recursin' bs macros son una mala seleccin ya
recursivamente.
qr" no pueden llamarse as mismas
sustituir todas las funcones en un programa con
macros no ser posibre por sus
limitaciones inherentes. Las macros, a diferencia
nmero de argumentos pasados, no sus
de las funciones, verifica slo el
las entradas errores se hace mejor en las
fr;;ir;r.
-- implica
tipos, lo cual ' que las validaciones de
o
o # i f def nombre_de_la_macro
o ,/* secuencia de una o ms sentencias * /
o
#endif
o
o 5.2.#indef y #else
o . #ifndef signfica 'si no definido' (if not cbfined). Exactamente opuesto a
o #ifdef.
o o #else es similar al else en la estructura de control if -else en C.
o #ifndef DEBUG
o /* c6dgo para proveer salida amplia */
o #efse
o /* cdigo para proveer una salida compacta */
o #endif
o s.3. #f
o
La directiva #if se puede usar para probar si el valor de una expresin es dstnto
o de cero o no.
o
o Lo siguiente es la forma general:
o #if exp
a
a
q '''otumen 6: T
@ Copyright IBM CorP.2002
Los materiales delcurso no pueden ser reproducidos total
a o parcialmente sin el permiso previo escrito de IBM
)o
I
Introduccn a la programacn con
C
, E5rUCrenie
/* sentencias (s) * /
#endif
5.4.#etif
ii
A i!' fl:,ffiff;".31j","
OR exctusivo oe
o" *
mano;;;it
o
Introduccin a la programacin
con C
Gua del Estudiante
6.2. Operacones de Manejo de
Bits: Un Ejemplo
Sea el siguiente segmento de codigo:
/* La funcin rotacin a 1a derecha se
:i:c:a aqu */
unsigned int rightrotate(unsignei i:t: >:, uisigned int n){
unsigned int set., i,.
printf ("Tamao td\nu,sizeci (u::signeC
int) * 8 _ 1);
for( i = 1,. i <= n; i++l {
seE= (xaf) * P 1\ - - Lt I
X=X>>1r.
x =x I set,.
)
return x,.
I
La funcin anterior torna-x, y el
nmero de posicones a ser desplazadas
realza la rotacin' La funn pueJe a la derecha, y
pequeo,talcomo:x=B yn a,2,3 ser probad a para un valor entero especfco y
= x=4 n=i_,2 x=2 n=:,.-..
Hay muchas formas prctcas relacionadas
cuales van ms all del alcance Oeesia
a las operaciones de manejo de bits, las
undad.
o
o Resumen
o Ahora que ha completado esta unida, usted debe ser capaz de:
o o Declarar y usar las enumeraciaciones en C
o . Describir los argumentos de la lnea de comandos
o . Definir las macros y usarlas en los programas
. Dscutr las funcones del Preprocesador de C
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
O
o
o
o
o
o
o
o
o
o
o
o
o
a
o
o
@ Copyright IBM Corp. 2002
o Los materiales delcurso no pueden ser reproducidos total
o o parcialmente sin el permiso previo escrito de IBM
o
O
Gua dei Esruc -::
o i
o ?
D,
Respuestas a la unidad 3: Examen de Autoevaluacin
E-
o !t
1)b
o .
E
2)b
o E
x
tf-
3)a
o E 4)b
o ,-- 5)a
o E 6)a
o 7)a
o 8)d
o e)b
o 10) b
o
o
o
o
o
o
o
o
o
o
o
o
a
o
O
o
o
o
o
o
o
o
o
o
a
o
o @ Copyright tBM Corp. 2002
Los materiales delc{rso no pueden ser reproducidos total
o o parcialmente sin el permiso previo escrito de IBM
o
unidad 4: Laboratorio de caractersticas
Adicionales de C
Objetivos de Aprend izaje
Al finatde esta unidad, usted ser
capaz de:
o Leer una descripcin compr"j"
usar algoritmos para todas ias0,"-:1 probfema y entender sus implicaciones
forma oe compte;idad considerndo
tcn icas de programa cn prenoias todas las
a ;"; ;;#",
' en c usando de ras caractersticas
$i5T,::5:JH"argoritmos "r"rqri"r"
' prosrama completamente runcionar
;f;ilJo::5"ntt 'n que resuerve el
I
I
Unidad 4: Laborao
{
Los_materiaj",?"i:.?1#llF.[.:?'g":?ll*u",oostotar I
fl
O
o
Gua del Estudiante
o Introduccin a la ramacin con C
o
o Ejercicios de Laboratoro
o 1) Escribir un programa compreto en c que haga las siguientes tareas:
o a) Tomar un archivo de texto como entrada que puede contener una novela
completa en espaol, con las normas de puntacin permitidas.
o b)
t Modificar elcontenido del archivo de texto y crear un archivo separado con las
slguientes caractersticas :
o ' Todas tas palabras af inico de la sentenca deben estar en maysculas.
o . Los espacios en blanco deben ser removidos.
o c) Tambin imprimir las estadsticas deltexto, como se menciona a continuacin:
o . Nmero de caracteres
o . Nmero de palabras
O r Nmero de sentencias
o
o
o
o
o
o
o
o
o
o
o
o
o
o
a
o
o
o
o
o
o
o
o
o
o
o
o . @ Copyrght tBM Corp. 2002
Los materales delcurso no pueden ser reproducidos total
o o parcialmente sin elpermiso previo escrito de IBM