IBM Introduccion a La Programacion en C

I fntroducción a fa Programación con (Código det Curso Cy320) Versión 3.0 I I I I I I Sumario del Curso I ;(c

Views 152 Downloads 6 File size 58MB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

I

fntroducción a fa Programación con

(Código det Curso Cy320) Versión 3.0

I

I

I I I

I

Sumario del Curso

I

;(c

f

I

;

BM lT Education Services Worldwide Certified Material f

Información de la Publicación Esta pubfícación ha sido producida usando Microsoft Word 20OO y Microsoft powerpoint 2O00 para Windows.

Marcas Comerciales IBM @ es una marca comercial registrada 'de tnternational Business Machines

Corporation.

Otras compañías, productos y nombres de servicios pueden ser marcas comerciales o marcas de servicios de otros.

Edición Junio 2005 La información contenida en este documento no ha sido sometida a ninguna prueba formal de IBM y es distribuida básicamente "como es" sin ninguna garántía ya sea expresa o implícita. El uso de esta información o ia implementación de cualquiera de estas técnicas es responsabifidad del comprador y dependerá de la habilidad de éste para su evaluación e integración en el ambiente operacional del cliente. A pesar de que cada tema ha sido revisado por IBM para su exactitud en una situación específica,'no hay garantía de obtener el mismo resultado o uno similar a éste en otra situación. Los clientes que intenten adaptar estas técnicas a sus propios ambientes lo hacen bajo su

propio riesgo.

Copyright International Business Machines Gorporation, 2005. All rights reserved. Este documento no puede ser reproducido en su totalidad o en parte sin el previo permiso escrito de lBM.

I

o a o

I

o o o o o o o o o o o o o o

o O

o o

O ,i

or o o

I

o o

o o o o o o oi ol, olr

ucción a la programación con C

I

Nombre def Curso lntroducción a la programación con C

Duración La duración de este curso es de 74 horas.

Propósito Ef propósito de- este curso es ayudar al estudiante a desanollar habilidades para programar con c para este fin, e.ste cu.rso proporciona información detallada acerca de los diferentes elementos de c. El objetívo o¿rifo á. brindarle una sólida base de los conceptos y fa programación con c. El curso comienza con una introducción a los conceptos básicos de computación, el concepto de algoritmos a través de una .desde definición de un programa hasta los de lenguajes oe frogramación y compiladores.

y

A través del curso, el estudiante se familiariza conel uso de importantes construcciones de c, tales como fos diferentes tipos de la sentencia if, la construcción switch, la función s-canf, etc' Además, aprende el uso de construcciones iterativas para la solución de problemas y podrá usar las construcciones iterativas como la sentencia for y la sentencia while. También se introduce el concepto de arreglos en c, y se aprende a usar los diferentes tipos de aneglos para resolver problemas. el curso, se aprende acerca de las estructuras y uniones Á medida que progresa en C. Se introducen los conceptos de funciones, recursión, punteros, mánejo de archivos, manejo de los argumentos de línea de comandos, así como se estúdia acerca oe ios tipo, de dato enumerados y también como usar rnacros. Junto con las sesiones de teoría, se tienen sesiones de laboratorios, donde se podrá practicar todo lo 9!e se aprende en el salón oe ctase y aRnar las habilidades en el uso de C.

Prerrequisitos Para poder entender los conceptos tratados en este curso, se debe tener conocimiento acerca de sistemas operativos, y conocer acerca de un sistema operativo como Linux es esenciar para rograr un mejor aprovechamiento der curso.

oll oll -fr Ii I, -.ta

dlutl

.f-

¡I ,I

I

Copyright tBM Corp. 2005 Los materiales del cr¡rso no puedbn ser reprcducidos en pafte o en su totaridad sin erprevio permiso escrito o" rgla.

Introducción a la Programación con

C

ei Curso

Objetivos del Curso Al final de este curso Ud. será capaz de:

a o a a

o a

o o O

a

a

Obtener una visión general de los conceptos básicos de las computadoras, ta :s como un programa, lenguajes de programación, compiladores, afgoritmos, etc Usar los diferentes tipos de sentencias i f en el esfr¡erzo de resolver probJernas Emplear la construcción swirch para esóribir programas c. Escribir programas usando las funciones printf y scanf de c. Resolver problemas usando el concepto de arreglos. Emplear el concepto de estructuras en la solución de problemas. Definir el tipo de dato enumeración y usarlo en el esfuerzo de resolver problemas. Definir recursión en C" Definir el concepto de una unión y us.arlo para resolver problemas en c. Trabajar con directivas del preprocesador en C. Trabajar con el concepto del manejo de archivos en C. Manipular argumentos la línea de comandos en los programas c.

Agenda Cada unidad de este curso es de 2 horas de duración.

@

Copyright tBM Corp. 2005

Los materiales delcurso no pueden ser reproducidos en parte o en su totalidad sin el previo permiso escrito de

o o o o o o o o o o o o o o o o

o o

o o o o o

d (o o o o o o o o o

o O

o

o o o o o o

Sumario del Curso

lntroducción a la

Contenido del Curso Volumen Unidad

l: Fundamentos de C

l: Introducción

a ta programación

Objetivos de Aprendizaje 1. Introducción

2. ¿ Qué son Algoritmos? 3. Tipos de Algoritmos 4. Organización Elemental de la Computadora 5. ¿eué es un programa de Computadora? 6. ¿por qué se Necesita un Lenguaje de programación? 7. Compiladores Resumen

Unidad 1. Examen deAutoevaluación Respuestas a ra unidad 1: Examen de Autoevaruación

unidad 2: Laboratorio de rntroducción a ra programación Objetivos de Aprendizaje Eje16i6ie5 de Laboratorio

Unidad 3: Programación en C _ Los primeros pasos Obleiivos de Aprendizaje i inti-oducclón 2 La Evolución de C 3 Pnmeros pasos para Escribír un programa en C ¿ lr,1ás Acerca de Declaraciones 5. Más Acerca de los Operadores 6 Compilación de programas hechos en lenguaje C Resumen Unidad 3: Examen de Autoevaluación Respuestas a ra unidad 3: Examen de Autoevaruación

Unidad 4: Construir Fundamentos Sólidos en C Objetivos de Aprendizaje 1. lntroducción 2. Aceptar Entradas del Usuario 3. ldentificadores de Variables 4. Palabras Claves en C 5. Tipos de Datos Básicos en C 6. Constantes en C 7. Operadores Aritméticos

,o

a

@ Copyright tBM Corp. 2005 Los materiales del curso no puedbn iLr reprocucidos en parte o en su totaridad sin ef .previo permiso escritode rBM.

mación con C

*rr::e_g{re 8. Operadores Compuestos de Asignación 9. Conversión Explícita de Tipos 10. Conversión lmplícita de Tipos Resumen

a

Unidad 4: Examen de Autoevaluación Respuestas a ra unidad 4: Examen de Autoevaruación

Unidad S: Laboratorio de programación en C Objetivos de Aprendizaje Ejercicios de Laboratorio Ejercicio Opcional

Volumen 2: Estructuras de Controt en Unidad l: Estructuras de Controt de Decisión

C

Objetivos de Aprendizaje 1. Introducción

2. Construcción if Simple 3. La Construcción if_et-se 4. La Construcción if Anidado 5. Expresiones y Operadores Lógicos 6. Operador Temario

.

y Relacionales

f

Las Diferentes Formas de Sentencias i 8. La Estructura switch ... case Resumen Unidad 1: Examen de Autoevaluación Respuestas a ra unidad 1: Examen de Autoevaruación 7

unidad 2: Laboratorio de Estructuras de control de Decisión Objetivos de Aprendizaje Ejercicios de Laboratorio

Unidad 3: Construcciones lterativas Objetivos de Aprendizaje 1. lntroducción

2.

Construcción lterativa white Resumen Unidad 3: Examen de Autoevaluación Respuestas a Ía unidad 3: Examen de Autoevaruación

Unidad 4: Laboratorio Construcciones fterativas Objetivos de Aprendizaje Ejercicíos de Laboratorio

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

o

I

o a

:f o o O

o o a o o o o o

o o o o o

a

:(o !\ rv

o o o o O

o o o o o O

o o o o!

Sumario delCurso

Introducción a la

Unidad S: Más Construcc¡ones lterativas Objetivos de Aprendizaje 1. Introducción

2'

Resolución de Problemas Usando Otras Construcciones lteratrvas Más acerca de la Sentencia for Safir de un Bucle prematuramente

3. 4. 5. Uso de la Función ncorporada ptw 1¡ 6. La palabra Reservada continue 7. La Estructura de la Sentencia do_white f

Resumen Unidad 5: Examen de Autoevaluación Respuestas a ra unídad 5: Examen de Autoevaruación

unidad 6: Laboratorio Más construcciones tterativas Objetivos de Aprendizaje Ejercicios de Laboratorio

volumen 3: Tipos de Datos Estructurados en c Unidad l: Programación con Arregfos Objetivos de Aprendizaje 1. Introducción 2. Declarar un Arreglo en C 3. Inicializar un Arreglo 4. Desarroilar y programar Argoritmos con Anegros 5. Cadenas de Caracteres en C Resumen Unidad 1: Examen de Autoevaluación Respuestas a ra unidad 1. Examen de Autoevaruación

Unidad 2: Arreglos Multidimensionales Objetivos de Aprendizale 1. Introducción 2. Resorver probiemas con Anegros Bidimensionares Resumen Unidad 2: Examen de Autoevaluación Respuestas a ra unidad 2: Examen de Autoevatuación

unidad 3: Laboratorio de programación con Arregtos Objetivos de Aprendizaje Ejercicios de Laboratorio

¡ l\.f x'E

x

a -

t

o

amación con

@ Copyright tBM Corp.2005 Los materiales dglarrso no puedbn ser reproducidos en parte o en su totaridad sin el previo permiso escrito oe rgir.

C

lntroducción a la Sumario del Curso

Unidad 4: Estructuras Objetivos de Aprendizaje 1. f ntroducción 2. Definición y Uso de Estructuras 3' Tipos de Datos Definidos por ef usuario 4. Uniones Unidad 4: Examen de Autoevaluación Respuestas a ta Unidad 4: Examen de Autoevaruación Unidad S: Laboratorio de Estructuras

(

i

Objetivos de Aprendizaje Ejercicios de Laboratorio

Vof ume Unidad

l:

n 4: Funciones en C Funciones

Objetivos de Aprendizaje 1. Introducción 2. programar Funciones

C

3' Definición y Uso de Funciones en 4. Clases de Almacenamiento

ra sorucíón

de probremas

S. Archivos de Encabezamiento (header)

Resumen Unidad 1: Examen de Autoevaluación spuestas a la Unidad 1:Examen de Autoevafuación

Unidad 2: Laboratorio de Funciones Objetivos de Aprendizaje Ejercicios de Laboratorio

Unidad 3: Recursión Objetivos de Aprendizaje 1. lntroducción 2. Escribir Funciones Recursivas 3. Recursión vs. lteración Resumen Unidad 3: Examen de Autoevafuación Respuestas a la Unidad 3: Examen de Autoevaluación

Unidad 4: Laboratorio de Recursión Objetivos de Aprendizaje Ejercicios de Laboratorio

@ Copyright tBM Corp. 2O0S Los materiales del curso no pueOen ser reproducidos en parte o en su totarídad sin erjrévio p"-*'ro escrito de rBM.

v

I a o

Sumario delCurso

I

I

o o o o

Volumen 5: punteros en

Objetivos de Aprendizaje Introducción 2. Fundamentos de punteros . 3. uso de punteros para pasar Argumentos a ras Funciones Resumen Unidad 1:Examen de Autoevaluación Respuestas a ra unidad 1: Examen de Autoevaruación

l.

o o o o o a o o

Unidad 2: Laboratorio de punteros Objetivos de Aprendizaje Ejercicios de Laboratorio

Unidad 3: Punteros Avanzados

o o o o o o o a o o a o o o

Unidad 3:Examen de Autoevaluación Respuestas a ra unidad 3:Examen de Autoevaruación

unidad 4: Laboratorio de punteros Avanzados Objetivos de Aprendizaje Ejercicios de Laboratono

Vof

oi

d q e

ot-

I'

o

umen O: Tópicos Avanzados en C

Unidad 1: Manejo de Archivos en C

Or

-'tr .T T'

5. Puntero a Estructura 6. Puntero a una Función Resumen

o

t¡-

Objetivos de Aprendizaje 1. Introducción 2. Aritmética de Direcciones 3. Puntero a puntero 4. Arreglo de punteros

/0

o

^tE

C

Unidad 1: Punteros

I I

dx .-l !

fntroducción a la programación con C



Objetivos de Aprendizaje 1. Introducción. 2. Uso de Archivos de Datos en C 3. Archivos de Texto y Binarios 4. Manipular Archivos de Datos sin Formatos Resumen Unidad 1: Examen de Autoevaluación

@ Copyright tBM Corp. 2OOs Los materiales del curso no pueObnér reproducidos en parte o en su totafidad sin e[ previo penniso escrftó J" rafrr.

7

¡o dei

Respuestas a fa unidad 1: Examen de Autoevafuación

Unidad 2: Laboratorio de Manejo de Archivos en G Objetivos de Aprendizaje Ejercicios de Laboratorio

Unidad 3: Garacterísücas Adicionafes en G Objetivos de Aprendizaje 1. Introducción 2. Enumeraciones 3. Argumentos de ra Línea de comandos para ra función main0 4. Directivas def preprocesador

5. Operadores

de Manejo de Bits

Resumen Unidad 3: Examen de Autoevaluación Respuestas a ra unidad 3: Examen de Autoevaruación

unidad 4: Laboratorio de características Adiciones de c Objetivos de Aprendizaje Ejercicios de Laboratorio

@ Copyright tBM Corp. 2005 Los materiales deióulso no puedén ser.reproduc¡dos en parte o en su totaridad sin previo permiso er

"r"rito-o-JrgM.

Curso

oi a a

Sumario del Curso

o0 o

(Nota: La duración de cada Unidad es de 2 horas)

ol

Volumen

ol ol

Unidad

I

ol ol

o1

ol

I

o1

ol oj

ol ol

o/ ./

o/

:i( rl 0 ol oi ol

o .l o o q ? ó ¿ I

? ? ? ? ? ¡_^ K(lL I,U

l:

l: Fundamentos de C

Introducción a la programación

Esta unidad proporciona una introduccól q computación a través de conceptos tales como algoritmos, organización elemental ? de ta corñputadora y qué es un programa de También se discute acerca de tos rengua¡es oe'piogr;ación y et rot der

::ilffii"?:'

unidad 2: Laboratorio de Introducción a ra programacion Esta unidad está diseñada para reforzar la idea de argoritmos presentada en la unidad 1 fntroducción a la compuiación. Los ejercicio.-J" raboratorio presentados requieren que se escriban argoritmos simpres pára iesorv"ipioor",'as específicos.

unidad 3: programación en c

- Los primeros

pasos

En la primera parte, se discute la evolución del lengule de programación c y el método para escribir a partir de algoritmos programas en c. r-os erémentá.'o¿.¡"os de un programa en C también se establece.

Unidad 4: Construir Fundamentos Sólidos en C Algunos de los elementos básicos que van a construir un fundamento sófido en c se discuten tales co.mo. variables, expresiones arítméticas, sentencias de asignación y tipos de datos primitivos. tambien, se da una introducción de cómo aceptar entradas del usuario a través de la función scanf. Unidad S: Laboratorio de programación en C Esta unidad trata acerca de la solución de problemas a través programas básicos en c los conceptos aprendidos en las unidades anteriormente, especiatmente ta ¿?',f:li:

Vof ume n

2: Estructuras de Controf en C

Unidad 1: Estructuras de Control de Decisión En esta unidad' el concepto fundamental que se cubre es la necesidad de verificar condiciones v ra toma de decisión basada u; ;;ndiJ;;; i#i"s;ffi," ñbremas. Las facilidades de c que se estudian aquí prr, imptementación que involucran el control de decisién "yrááia'ia if, sentencias de algoritmos ion l"'."nt"n"¡"

operadores relacionales, operadores fógicor y construcción switch de C.

if

"*prr¡on"r

anidadas, relacionales. Se introduce la

unidad 2: Laboratorio de Estructuras de contror de Decisión

5ffit¿i::'¿:o

se proveen ejercicios que invotucran estructuras básicas de controt de

¡:'\-

It í? t)

o

ramación con C

Descripción de Unidades

O

Or

Introducción a la

@ Copyright fBM Com. 2005 Los materiates dglix¡rso no pueoén ser reproctucidos en parte o en su totatidad sin er prwio perm¡so escrttóí" lgM.

Introducción a la

mación con C

Sumano del Curso

Unidad 3: Construcc¡ones tterativas

Ef tema centraf de esta unidad es el rol de la iteración en la solución de problemas y arsoritmos.

::*,,ñ"ffi""#?'i::J"J-* !n

se oiscute v-r.-a-,"n

".,"

unidad

unidad 4: Laboratorio de construcc¡ones rterativas se proporciona¡ problemas simples. que C que necesitan iteraciones uJanOo requieren la implementacién de programas la construccün whit_e, esto para conceptos

ta ra

en

reforzar los

los conceptos aprendidos en h U;ú;3. Unidad S: Más Construcciones fterativas

El tema

central de' esta unidad reso]ver problemas con estructuras anidadas' Se ifustran la sentencia ^es iterativas for de c y ras sentencias break y continue. discute y usa la construcción se do_whi1e.

unidad 6: Laboratorio de Más construcciones fterativas

Ef énfasis de esta unidad es en la impfementación de.programas compretos en resolver probfemas específicos usando las estiuciuras ¡terativas de la unidad 5.

c

para

volumen 3: Tipos de Datos Estructurados en c Unidad l: programar con Arregtos se discute en esta unidad la técnica de desanolrar arg_oritmos Er énfasis ró constituve ra programaciónque emprean en c con ;1,'Íilil:,il3l3i.

arregros arresros

Unidad 2: Arreglos Muttidimensionales se ilustra el uso de arreglos multidim_ensionales

varios ejempfos. En los elemplos rá

,""n

Unidad 3: Laboratorio de Arreglos

m;ggJ:t:#:

lT,$:?:1;;;]e

(arreglos bidimensionales) a través de problemas con matrices.

nrooramación con arresros en

c

a través de un

Unidad 4: Estructuras Esta unidad discute el uso de las estructuras y uniones en c. se presentan para decrarar estructuras y ros métodos a usarros para resofver problemas específicos.

Unidad 5: Laboratorio de Estructuras Basado en las bases. conceptuafes desanolfadas

ejercicios de faboratorio que

ieil;;;";

en la unidad 4, esta unidad provee escribir programas con estructuras.

@ Copyright tBM Corp. 2005 Los materiates detcló9 n9 pr"Oán en parte o en su totalidad sin el previo "ur reproducidos f"rmiso escrito de lBM.

10

I o o o

Volume n 4: Funciones

o1

o o o o

a'a

o o

en C

Unidad l: Funciones Esta unidad- introduce la naturale-za y ef uso de ras funciones en probfemas' se discuten fa sorución de arjuüs.runc'ioner-in"oipor"das ejemplos se ilustra cómo de ó.-A través de varios d;fi;;r runc¡ones o"r']r""f"r¡o_ y a usarros en ra sorución de

o o o o o o o o o o o o o

ogramac¡ón con C

i#:5#::rJf,:'"#,#",i::,;!:*"::lf m;if

p""¡nio,o"-c-i",","o,"o-I"n"¡,.

Unidad 2: Laboratorio de Funciones

,t;iT:'i:Í"t[J;,i"?T:1['J;rlaboratorio

que requieran escribir runciones especíricas

Unidad 3: Recursión Esta unidad discute fa naturale za general de la recursión y su rof en la solución de r"ínü¡en,-.u'¡ru,t,." 5i?l'33?;"1,.?t3:|,il;n"a;f:[i:3'5f"T'"XJi,,"o. er métoJo

Unidad 4: Laboratorio de Recursión Esta unidad provee ejercicios j.:^_,1?::qtorios que requieren escribir funciones recursivas en c y usarras para résorver probremas simpres.

Volumen S: punteros en Unidad l: punteros

C

Esta unidad introdu.ce los conceptos fundamentares detrás de ta natura reza yer uso de fos punteros en c. frustra ros puntero, un J-p""o de argumentos a funciones especiarmente pasar arregfos a funciones como una referencia.

;-;;'d;

o o

Unidad 2: Laboratorio de punteros

o o o

A través der uso d,ufg: conceptos tT,g:r:"jares de punteros u,l, aprendidos en ra Unidad u, oo o d e pa s a r á rs I :H :'J' u m e nto s a ff,J*J ff"

o o o o o o o o o o

"

"

:#:',

ff

trSIll j:: *:,;

Unidad 3: punteros Avanzados se discuten afgunas de fas facilidades avanzadas der uso de ros punteros operacione. d" como o"nn¡, usar arregro de punteros, puntero v punteros ?:l!eros, a estructuras y paso de fuócione.

.orJJffientos

a punteros, a otras funciones.

Unidad 4: Laboratorio de punteros Avanzados A través del uso de fundamentafes de fo-s punteros -l"oootorios .fos conceptos unidad 3' fos elercicios aprendidos en ra o" p"-ñ"i- refo.zar ,élóáá argumentos a funciones de pasar

"l

como punterás y usarros dentro de tas mismas.

fll

J

o

O

o o

@ Copyright tBM Corp.2005 Los materíales def a1s9 no p*Oánér,reproducidos en parte o en su totafidad sin eiírevlo-üimiso escrito de-rBM

11

Introducción a fa

ramación con C

Sumario dei Curso

umen 6: Tópicos Avanzados en Unidad l: Manejo de Archivos en C Vof

C

Esta unidad detalfa los métodos para usar ros dispositivos de atmacenamiento J*J" io"^p.giáráslramo¡en se o¡scut" ,¿tooo para t ;;";; en c. eJpéóm""rente. se discuten fos "l archivos de

secundario para leer y escribir definir archivos oe dátos

i?:"":,;^i',Tilffi ll5J,:?il?gff

Unidad 2: Laboratorio de Manejo"?:y"#;;;''lio,",i",o";;;;iil.queayudan de Arch¡vos en C En esta unidad se proporciona unos pocos probremas reracionados archivos de datos para reforzar ar manejo de la báse conceptuaf aprendida en ra unidad 1. Unidad 3: Características Adicionales de C Esta unidad es una cofección de tópicos como el tipo de dato manejar argumentos de fa tínea enumerado, cómo dL comandos y el uso de las macros. además unas pocas directivas son díscuten ál póro.esa.dor y sus usos. unidad 4: Laboratorio de características Adicionafes de c Esta- unidad provee un solo problema que imprica er uso de numerosos recnrcas y facifidades de c aprendidos conceptos, para obtener un programa que trabaia.

?1

I I

I

@ Copyright IBM Corp. 2005 Los materiales dei óriro no pu"o5n-"L, reproducidos en parte o en su totalídad sin er prevíop*i"o escrito de

rBM.

o o o o

.'a

ntroducción a la Programación en C f

O

o

(Código del Curso: Cy32O) Versión 3.0)

ol Ol o

ol

Guía del Estudiante

o o

oj o

oj oi oi o1

oi o1

oi

),1 r'>.

Fundamentos de C

:'((E ri '"o o o o

o .{

a q

BM fT Education Services Worldwide Certified Material f

Información de la publicación

rt8ái!::j",ff;?:#:

producida utilizando Microsoft word 2000 y Microsoft powerpoini

(

Marcas Registradas IBM @ es una marca registrada de lnternationaf Business Mactrines corporation. otras compañías y nombres de productos y servicios pueden ser marcas regrstradas marcas de servicio de otros.

o

Marcas comerciares de otras compañías son mostradas a cont¡nuación Windows Microsoft Corporation Red Hat Linux

Red Hat

Edición Junio 2005

no ha s,:: s:^.::i:a :ijlt:T":jg? :"T"nid:.,"n este documento ,;;-;t';" ;;-; -.." -. "^' : :'-'i a Et uso de esta infornración o la i_. -==_u_.=;:^::f::?técnicas ?.implícita. = ,-__ estas es responsabiridad der cornprador y oeoe.os:a r5 para su evatuación e integración en cada tema ha sido revisado por rBM"ipara "ro,!'ñ" "oirl-.;r;;:=.: ::-:,==

su exactrtud en una S.,,2^.

nra^i^ -:^^-^ propío riesgo.

;.,;;¿;i;1.

copyright International Business Machines corporation, 2005. All rights reserved. ser reproducido en su totaridad o en parte sin er previo ;:n*t":ffX.".:iJ,il:de fnstrucciones especiales para la impresión de este curso. No deben removerse.las páginas en bla.nco que puedan aparecer en el final de cada unidad y entre dos unidades.-Estas han sido insertádas intencionalmente.

I

o o o o o o o o o o o o o

Guía def Estudiante lntroducción a la programación

Unidad

/

Introducción a la programación

1. 2. ¿eué son Algoritmos? 3. Tipos de Algoritmos 4. Organización Elementaf de la Computadora 5. ¿eué es un programa de Computadora? 6 ¿por qué se Necesita un Lenguaje de programación? 7. Compifadores

1

2 2

4 5 x

o

Resumen Unidad 1: Examen de Autoevafuación Respuestas a ra unidad l: Examen de Autoevaruación unidad 2: Laboratorio de Introducción a fa programación Objetivos de Aprendizaje Ejercicios de Laboratorio Unidad 3: programación en C Los primeros pasos

O

oi oi

Contenido

Objetivos de Aprendizaje Introducción

o o o o o o o

o ot o o' ol

i:

@

.lf :

10 11

IJ

l5 15

16

17

Objetivos de Aprendizaje lntroducción La Evofución de C prímeros pasos para

1. 2. 3. programa en Escribír C 4. Más Acerca de Declaraciones un 5. Más Acerca de fos Operadores 6. Compifación de programas Hechos en

1 IT

.1

18 18

¿3

24

Lenguaje C

Resumen Unidad 3: Examen de Autoevatuación Respuestas a fa Unidad 3: Examen de Autoevafuación Unidad 4: Construir Fundamentos Sólidos en C Objetivos de Aprendizaje Introducción Aceptar Entradas del Usuario ldentificadores de Variables palabras Claves en C Tipos de Datos Básicos en C Constantes en C OperadoresAritméticos Operadores Compuestos de Asignación Conversión Expficita de Tipos 10. Conversión lmplícita de Tipos

28 24

ól 34

35

1. 2. 3. 4. 5. 6. 7. 8. 9.

36 36 36 41

42 43 44 47 48 49 50

@ Copyright tBM Corp. 2004 Los materiales delcurso no pueden sár reproOucidos en parte o en su totalidad sin el previo permisó'escrito de

IBM

Introgucción a la prograrnación con C

Resumen Unidad 4: Examen de Autoevaluación Respuestas a ra unidad 4: Examen de Autoevaruación Unidad 5: Laboratorio de programación en C Objetivos de Aprendizaje Ejercicios de Laboratorio Ejercicios Opcional

I

G

AA

c5 c,A

56

?

.l

@ Copyright IBM Corp. 2005 Los materiares dercurso no pueden ser reproducidos en parte o en su totalidad sin el previo permiso escrito de lBM.

lo lo lo lo

Guía del Estudlante

ol o

o o o o

ol o O

Ol

o Ol

lntroducción a la programación con

Unidad 1: f ntroducción a ta Programación Objetivos de Aprend izaje Al final de esta unidad, Ud. será capaz de:. . Definir el término algoritmo.

. . ' ' .

Discutir los diferentes tipos de algoritmos. Describir fa organización de una computadora. Definir ra necesidad de construir programas para una computadora. Discutir ros diferentes níveres de ros renguajes de programación. Definir qué es un compilador y describir su rol.

oi ol r1

ol o/

q

!'o

t

q

t

? o +

t? ?

I

I

p p lr b l:

p ,Ivt

tnr

tr ft I

Votumen@

Unidadt:lnt@

@ popyright fBM Com. 2005 Los materiares dercursó ró pueáen sái rlprooucioos en parte o en su totalidad sin el previo permisoes*ito de.f BM

C

fntroducción a la

l.

lntroducción

Los problemas a. resofver por medio de una computadora pueden variaroesde los n::s simpfes a los más compleios. En su nivel más simpfe, fos problemas pueden ser tan senciflos computaciona,es como encontrar el promedio de un conjunto de números 3 calcular el interés simple generado por alguna a"uo"- por otra parte pueden ser tar compfejos corno encontrar una solucion á un cán¡unto de ecuaciones oiferenciares simultáneas' la multipticacíón de una matrizo contar ra frecuencia de una parabra en un texto' A un nivel mucho más especializado, rt¿orput"dora puede resorver probremas como reconocer las huellas digitales o la vo,zJ" ,n ino¡oiduo, simurar s¡tuaciones en un juego de guena o jugar un partldo de ajedrez de alta caridad. una computadora es una herramienta poderosa que es capaz de hacer varias tareas simurtáneamente. sin embargo, es sóro una ,a!rin" y no posee ra capacidad de pensar' solamente puede implementar instrucciones que le ha dado el usuario o programador' De allí que programador el no puede darle a ra compt¡tadora que sean ambiguas por naturaleza. instruccjones Todar É";;l;l"ion", deben fi"n defrnirJas y sin ambigüedades. De aquíse origina er concepto de argor:itmo. ""i

2. ¿Que son Atgoritmos?

un matemátíco persa lfamado Abu Jafar Mohammed lbn Musa Al Khwarizmi desarrolló este método en.el siglo ll DC y demostró su efec{ividad. cuando ros franceses conocieron su método, se referían a éste como ef método de Al Khwarizmio como un la palabra fue transformadaa ro que se conoce como un lfr";il"Posteriormente,

.

A continuación se discuten algunos ejemplos de algoritmos. 1.1 Ejemplos de Afgoritmos

;ffiffItrender Ejempfo

y entender los algoritmos y

su

naturarezase presentan los siguientes

l.l

Dados tres números diferentes A, B, c obtener er mayor de eros: Paso l: Obtener los tres números A, B, C. Paso 2: si A > B es cierto, er mayor es A. En caso contrario er mayor es B. Paso 3: Si er mayor encontrado en er paso 2 es menor que c entonces er mayor ahora es c' En caso contrario et r"yorátünido en el paso 2 se conserva. Fin de Ejempto

l.l

Unidad

r,r"Oor""

Volumen

t: funGmEntos

Copyright fBM Corp. 2005 Los materiales del curso no pueden só, reproOucidos en parte o en su totarídad sin er previo permiso escrito oe rgül-"@

Oe

Cl

(

I o o a o o o o a o O

¡

o O

o o o o

o o o o

J@

o o a o o a

o o a o

o o

I

o a

t

a

'l {y p

b .,

aL.

T

t'o

GuÍa del Estudiante

I

Introducción a la programación

Ejempto 1.2

6ei

6.

Suponga que se tienen que determinar si un número entero dado es pnmo entero no negativo es primo o no. Un si es divisible solamente entre y I sí mismo. por lo tanto, para determinar si un número n es primo, se oeoe frobar la divisibifidad de n para todos los números entre 1 y n. Ef algoritmo para esto es como sigue: Paso l: Obtener ef entero n corr.to entrada. Paso ur";o:::' éste es divisible poi t" variabre j, ra cuaf armacena varores entre 't .si Paso t, < n_1), entonces er entero n'o €S primo,

1ffiT;;i,ffi:,"l Jrffi j

Fin de Ejempfo 1.2 Ejempto 1.3

suponga que se tienen que encontrar las raíces de la ecuación de segundo grado * c : o, donde ros coeficientes

ax2 + bx

.,

;t ; r"" varores de entrada.

Ef algoritmo para resolver éste problema es como sigue.

Paso l: obtener como entrada fos varores de ros coeficientes, a, b, y c. Paso 2: Calcular discriminante = b2 _ 4ac Paso 3: Sier discriminante < 0, ras raíces son imaginarias. parar. paso 4: Si eldiscriminante = 0, las raíces son iguales, raizj. : raiz2 _ _b / 2a- pafar Paso S: De otro modo, las raíces son:

Fin de Ejempto 1.3 Ejempto 1.4

-¡ + sqr.t (discriminante ) / 2a y -D - sqrt(drscriminante) / 2a

Asuma que se debe contar ef número de ocurrencias de tas vocales en el texto de un documento' El proceso para resolver este problema es bastante sencillo. carácter a la vez en el texto y Tome un verifique si es una vocaf. si fo es, unton"", ,antenga un contador de esa vocal en iarticufar, en caso contrario salte ese carácter. continúe

;;' ;; ; r" re vi s a d o E, a,s o rit m o p a ra :1' : :il?,ffj *,.'ñ " Paso 1: lnicializaf contA, contE. contr, conto y contU a cero. Paso 2: Leer ef primer

[1iill". :,* :x'¿x:l.

carácter deltexto. Paso 3: Repetir ros siguientes pasos hasta tegar af finar det texto. si er carácter = A ó a entonces incrementar en uño contA. si er carácter = E ó e entonces incrementar en uDo conrE. sier carácter = | ó i entonces incrementar en uno contr.

votumen@ :

Unidad

l

@ Copyright fBM Corp. 20OS . ros materiafes dercurso no pueoen sái Éprooucioos en parte o en su totafidad sin elprevio.permisó escrito de IBM

caráder = O ó o entonces incrementar en uño conto. Si ef carácter = U ó u entonces incrementar en uno contu. Si el

Caso contrario saltar el carácter Leer el siguiente carácter.

Paso 4: Mostrar el contenido d€ contA, contE, cont- r Fin del Ejempto 1.4

_

contO y contU.

Los ejemplos presentados ilustran que los afgoriimos involucran cómputos aritméticos, o diferencia d; dos cantidades, flevando a cabo condicionalmente un conjunto de.pasos, y la repetición de fa ejecuc¡on oe un conjunto en una condición. A cónt¡nuac¡án se aprenderán tos diferentes tipos i::¿:firff:ados

verificación por igualdad

3. Tipos de Atgoritmos En la vida real se encuentran diferentes tipos de algoritmos. una clasificación simple ayuoa a comprender la naturaleza subyacente oe tos afgoritmos y los problemas para los que son tipos de más adecuados. Esta cfasificación también permite escoger un método apropiado para evaluar la valide z y laeficiencia del atgoritmo.

En generar, ros afgoritmos se crasifican en tres tipos: Algoritmos Finitos Determinísticos. Algoritmos Finitos no Determinísticos. Algoritmoslnfinitos.

. . .

A continuación se expfica brevemente cada uno de ros tipos de aigoritmos 3.1 Afgoritmos Finitos Determinísticos Estos son algoritmos que terminan en una cantidad de tiempo finíta. pueden tomar un tiempo largo en terminar la tarea asignada, pero terminarán definitivamente en un tiempo finito' Estos algoritmos siempre dan un resuftado que depende únicamente de la entrada' En otras pafabras, pr"áu determinar el resultado exacto sí se conocen ras entradas' La mayoría de algoritmos "" que se encuentran en la vida realpertenecen a esta categoría' Encontrar tas raíces de una ecuación cuadrática, determinar todos números primos entre I y I miflón los y encontrar la inversa de una matriz cuadrada son todos ejemplos de algoritmos

3.2

finitos beterminísticos.

Algoritmos Finitos No Determinísticos

Estos son algoritmos que terminan en una cantidad finita de o entradas, ef resultado del alsoritmotiempo. sin embargo, para

;n":|jf,i:o3"ot

puede no ser único y

considere un algoritmo para generar un número aleatorio- Existe un método matemático probado llamado el generadár congruente multiplicativo, el cual es una función de la forma xt = (aX'-' ) mod m donde 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 sór reproducidos en parte o en su totafidad sin el previo permiso escrito de lBM.

C

¡ o

t

Guia del Estudiante

o

lntroducción a la programación con C

ol o

algoritmo en este caso es no determinístico ya que al ejecutar el algoritmo el resultado casi nunca es el mismo. Sin embargo, este sirve para el propósito del algoritmo, ya que se supone que genera números aleatorios.

O

3.3 Afgoritmoslnfinitos

o a o a o o o o o o o

Los algoritmos infinitos son aquetlos que no terminan, ya sea porque una condición de termínacíón no fue especificada o porque la condición no fue satisfecha para ef conjunto de datos de entradas dado. Usualmente ios algoritmos infinitos son aquellos donde las condiciones de terminacíón no están especificaáas apropíadamente.

o o o o

a t:t3 o o o O

o o o o o o o

o ó

? o 5

sin

embargo, también existen algoritmos infinitos útiles. La tarea de monitorear ta temperatura en un reactor nuclear es un algoritmo infinito, claramente, esta tarea es continua y debe seguir mientras el reactor esté trabajando. La tarea se mantiene ejecutándose a menos que haya un estímuro externo que to detenga.

otro ejemplo de un algoritmo infiníto es fa tarea de enumerar todos dígitos decimales del número pi. se sabe que elmétodo para carcur"r un ,n número infinito de dígitos en su parte no entera. Este"inJr!;;;;rliá es especialmente út¡l para los matemáticos. A continuación se discute que es una computadora.

4. orga nización Efemental de la computadora ',

una computadora es un dispositivo electrónico que ayuda a la resolución de problemas computacionales a través de un algorítmo, describiendo sin ambigüedades los pasos involucrados' Los computadores se usan para una gran variedad de propósitos y se cfasifican en diferentes categorías. analógicor, digit"fur, personales, servidores,

supercomputadoras. etc.

un sistema de computadora moderno consiste de un sistema interconectado de procesadores, memorías y dispositivos de entrada / safida. A continuación se discute una organización elemental de una computador, denominado sr'sfem a simple orientado

a bus.

La unídad central de Procesamiento (cPU) es el componente vitaf de la computadora. su función es ejecutar las instrucciones almacenadá, la memoria principal: las obtiene, las examina y ejecuta una clespués "n de la otra.

La cPU consiste de varias partes importantes. Tiene una unidad de control que es responsable de traer las instrucciones de la memoria principal y determinar el tipo de instrucción' La unidad Aritmético Lógica (ALU) t"p"= realizar operaciones antméticas y lógicas. La cPU posee también ", unas de pocas localidades de almacenamiento temporal de alta velocidad llamados 'registros'. Los registros se usan para almacenar resultados intermedios y tos datos necesarios para llevar a cabo las instrucciones.

Volumen

$o It

? o

o

l: fun¿arneñtoGE

Unidad t:lñtroOucc¡oñ aGFroqra,r€:rc

@ Copyright fBM Corp. 2005 Los materiales def cursó n-o pueden ser iepioouc¡oos en parte o en su totalidad sin'el previo permiso escrfto de lBM.

-:

Introducción a la programación con

C

Gufa del Estudiante

Toda la comunicación entre estas entidades se lleva a cabo a través del bus del

sistema' Un bus es un conjunto de cables paralelos a través del cual todas las señales y los datos se transmiten entre varias entidades. Esto se muestra en la Figur a 1.1. Unidad

Oispositrvo

Central de Procesamiento

De

Salida

Bus delSistema

Figura 1.i: Bus de la Computadora Una computadora requiere de dos entradas para funcionar. un algoritmo, un conjunto de instrucciones que especifican las tareas a realizar, y los datos que necesita el algoritmo. El algoritmo y los datos requeridos por éste sé almacenan en la memoria principaljunto con los resultados generados. La palabra 'principal o primaria" se usa para referirse a la memoria reconocida como volátil, el dispositivo pierde el contenido cuando se apaga,

distinguiéndola

de los otros dispositivos de

almacenamiento,

almacenar instrucciones y datos de forma semi-permanente.

los que

permiten

Se discuten a continuación otros dispositivos de almacenamiento conocidos como dispositivos de almacenamiento secundario.

Los dispositivos de almacenamiento secundarios pueden almacenar instrucciones es decir, algoritmos y datos por un largo período de tiempo. De cierta forma, se les puede considerar también como dispositivos de entrada / salida. Algunos dispositivos de almacenamiento secundarios más usados comúnmente son los discos duros, discos flexibles, CD ROMs, DVDs y cintas.

0

La memoria primaría es relativamente más costosa y por lo tanto limitada en tamaño. Aunque la palabra, 'memoria" evoca imágenes de "cápacidad de recuerdo", ,,capacidad de autoconciencia", 'ser creativon, en este contexto memoria esencialmente significa almacenamiento. Los resultados obtenidos al ejecutar una tarea en una computadora están disponibles al usuario a través de dispositivos de salida. Un dispositivo de salida ayuda a leer los datos resultados de la memoria principal. Los dispositivos de salida que pueden conectarse a una computadora son de diferentes formas y capacidades. Algunos de los dispositivos de salida más utilizados son: el VDU (Visual Display Unit), impresoras,

plotters y dispositivos de sonido.

Unidad 2:Laboratorio de Introducc¡On aGFrogramacion

I I

tl ¡l

tl

t

Volumen 1: Fundamentos de C 6

@ Copyright IBM Corp. 2005 Los materiales dercurso no pueden ser reproducidos en parte o en su totalidad sin el previo permiso escrito de lBM.

o

I

o o a o o o o o o o o o o o o o

o o o o o o o o

GuÍa del Estudiante

I

lntroducción a la

se presenta una visión

muy simpte de cómo un sistema de computador flff:::'"ciÓn ' Los datos e instrucciones para llevar a cabo una tarea deben estar disponibles al computador' Estos son provistos ya por fos dispositivos dl entraoa, cuando los ingresa, o por fas uÁidades'de "". armac"n"r¡"nto secundarios

;iH:il"

' o

como

La cPU envía una

:'ina"J::liento

a la ""i:l^ para entidad. -apropiada, dispositivo de entrada o secundario, que estén disponibre r"f inrirr"ciones y datos

La entidad' dispositivo de entrada o almacenamiento secundario, los envía a través del bus a la memoria principal.

' h*:#.entonces lee fas instrucciones en una secuencia bien definida de la ' La cPU ejecuta las instrucciones usando la ALU y los registros, y envía los ' '

resultados a la memoria principal a travás J"iorr. Los resuftados que estén disponibfes en la memoria principal se envían a los dispositivos de safida vía el b.us. una señal a la memoría principal para que to envíe at dispositivo 5:

Sy":t"n

5. ¿Que es un programa de Computadora? Un programa de computador" de un algoritmo en un tenguaje apropíado para usar en una computádora. "t-f1,.1:presentación Por lo tanto, consiste de un conjunto de instrucciones que están bien definidas y sin ambigüedades. por ejemplo, un programa para dividir un número entre otro número consistá de una secuencia de instrucciones que le indican a fa computadora que realice la división. cuando se ingresan dos nÚmeros como entrada, la computadora lleva a cabo las instruccíones con la ayuda del programa y obtiene el resultado. Los programas de computadora se desarrollan para resolver problemas específicos. Estos programas también se les denomina software. Existen muchos tipos de programas de computadora' Algunos de ellos se escriben para ayudar a controrar el funcionamíento de un sistema de computadora y optimizar el uso de sus recursos. A estos se les denomina programas del sistem y Lr'personas que desarrollan éste tipo de programas se fes ilama programadores de sistemá. Existen programas que llevan a cabo la solución de un probtema en particular o un conjunto de problemas relacionados. se les denominan programas de aplicación. rJna gran mayoría de programas de computadora están dentro de esta óategoría. Los programas de aplicación van desde programas simples que calculan el factorial hasta aquelfos que resuefven un sistema complejo de ecuáciones diferenciales o que pueden jugar un juego de ajedrez.

"t",::,f#:ramas

Votumen@

de computadoras se escriben en un tenguaje de Unidad

@ Copyright tBM Corp. 2005 Los materiales detcurso no pueden sér re-p'ráoucioos en parte o en su totalidad sin ef previo permiso escrito de IBM:

programación

6. ¿Por gué se Necesita un Lenguaje de programaci ón? un afgoritmo debe poder ser tfevado a una computadora. un oronl"r, rearizaesto a través de un conjunto de instrucciones. Por

(

fo tanto, fas instrutc¡Jnes en el programa deben ser claras, bien definidas y sin ambigüedad. para poder ltevar las instrucciones, lensuaje que permita una comunicación ctara, bien definida y sin

;r1;3:.::::."

Los lenguajes naturales como el Inglés son muy semántica y tienden a ser try .otpticados'p"r" ricos en sintaxis (gramática) y ros desanolradores y para ros aprendices y usuarios' Más aún, fos fenguajes naturares tíenden a ser muy ambiguos debido al uso de "lenguaje figurativo'y-"áórica'. por ejempfo ra sentencia "arguien

:,'nt[,o"ilffiI"'

no suiere dec¡r literalmente que arsuien estiró

Á

p¡"r"; si no que

Los computadores son esencialmente dispositivos básicos gue pueden solamente tareas simples

realizar tales como adición, sustracción, multiplicación, división, etc. La manera como las instrucciones se comunica al computador, debe ser por fo tanto muy simple' Para permitir una comunicación bien definida, el lenguaje debe ser limitado en su sintaxis y semántica. Ef renguaje no debe ser ambiguo. Es por eso, que necesita un lenguaje de programación se de computadora con una sintaxis simple, semántica restringida y de natuialeza no ambigua. 6.1 Nivefes de Lenguajes Hay diversos niveles, de .lenguajes de programación. A continuación se presenta una breve descripcíón de los Oifeéntás niveles.

0

6.1.1 Lenguaje de Máquina En ef nível básico' una computadora necesita trabajarcon números binarios, ' y 1' es decir, 0 Las instrucciones que se escriben en forma binaria se dicen que están en lenguaje de máquina' El lenguaie de máquina constituyá un conjunto de instrucciones implantadas en la computadora en forma binaria (una cadena de 0,s y .1,s). Los circuitos son capaces de rlevar a cabo estas instrucciones en ffilputadora

;f:Í:::i:rfl""

6.1.2 Lenguaje Ensamblador claramente, er uso de fenguaje de máquina es bueno para fos computadores, pero tedioso para los humanos. Los humanos trabajan más fácitmente con símbolos. lugar de pensar en 1000101001010100 En como una instrucción de adicíón, la clave es usar ef símbolo 'add'' similarmente, se pueden usar símboros como ,,sub' para 'mul" para la multiplicación, restar, etc. un lenguaje basado en un símbolo o un nemotécnico para cada instrucción de lenguaje de máquina se llama tenguaje ensamblador. emoargo, escribir programas usando sin instruccion", tárr rimpres como add, sub, mul, move, etc. también puede ser muy tedioso. Unidad 2:Laborator¡o

O

Volumen 1: Fundamentos de C

Copyríght tBM Corp. 2005 Los materiales delcurso no pueden ser reproducidos en parte o en su totalidad sin el previo permiso escrito de lBM. @

B

?

O

a o o :ü

o o a o o' o o o o O

o o o q o o i

3o

o o o o o

t t

a o.{ o

t e

;*

O ¡

f

? u I

I E

l .',v

ción a la programación con C

6.1.3

Lenguajes de Atto Nivel

Los lenguaies de alto nivef son necesarios para poder expresar las instrucciones de una manera más simple en comparación con los lenguajes de máquina y ensamblador, Los programas de computadoras se escriben usualmente en un lenguaje de afto nivel cuyo conjunto de instrucciones es más compatible con los lenguajes natlrales. La sintaxis y semántica del lenguaje de alto nivel deben ser tal que contribuyan a especificar instrucciones bien definidas que no sean anibiguas.

se han desarrollado un gran número de lenguales de alto nivel. Literalmente son cientos de estos lenguajes. Algunos de ellos son muy populares, mientras que otros no. La mayoría de los lenguaies de alto nvel son lenguajes de propósito general como c, Pascal' FORTRAN. c++. Java. etc. Estos pueoei ,Árrru para escribir programas

una amplia varieoaC de aplicaciones. Los lenguajes de a/to nlvel penenecen a una de las dos siguientes categorías:

para

6.1.4

Lenguaje de programación Orientado a Objetos El software orrentaoc a objetos es ac€rca.de objetos. un objeto es un "dispositivo,,, que recibe y envia mensales Los objetos realmente contienen un código, una secuencia de instrucciones de computador. y los datos, la información sobré io, qru opera las Instrucclones Generalnrente. el código y los datos embargc en lcs lenguajes de programación orientados se mantienen separados. sin están fusionaics en un obleto. El,l" los lengua¡es a objetos, el código y los datos oe programación orientados a ob.letos que g3zan de popuJaridad están C++ y.láua]--

6.1.5

Lenguaje procedimentaf

Es un leng;a.ie donde el programador da.a la computadora una secuencia de pasos segurccs unc ce otro para oblener la safida d"r""i". Los lenguajes procedimentales mas populares incluyen Basic, pascal C. v

7. Compifadores una computadc¡ra solamente puede ejecutar instrucciones en lenguaje máquina. si un programa se na escrito

en c, las instrucciones no podrán ser llevadas a cabo fácilmente por los circuitos electrónicos de la computadora. Las instrucciones escritas en el

ienguale c deben ser traducidas en una secuencia de ínstrucciones en el lenguaje máquina de la computadora. La entidad que realiza esta traducción de un fenguaje de alto nivel a lenguaje máquina se llama compitador. Un compilador es un programa de computadora que toma como entrada un programa escrrto en un lenguaje de alto nivel como y C lo traduce a un conjunto de instrucciones en el lenguaje de máquina de la computadora.

l#ffi81 -:>t@-> rl

Prog¡ama E¡eculabte

Compiladt¡r

Figura 1.2. programa Convertido a Lenguaje de Máquina. Máqr

Volumenr@

Unidadt:lñt@ @

Copyright fBM Corp. 2005

Los materiales dercuqo no pueden sór'reproducidos en parte - 'o en su totafidad sin elprevio permiso escrito

de lBM.

lntroducción a la programación con C

Guia del Estudrarie

Resumen Ahora que ha completada esta unidad, Ud. debe ser capaz de: . Definir el término algoritmo.

. . . o .

Discutir los diferentes tipos de algoritmos. Describir la organización. de una computadora.

i

Definir la necesidad de escribir programas en una computadora. Discutir los diferentes niveles de los lenguajes de programación.

ilfr

Definir qué es un compilador y describir su rol.

:i ; I ;

I

a.

.l I

unroao ;¿:Laboratorio de Introducción a la programación

Volumen 1: Fundamentos de C 10

Copyright tBM Corp. 2005 Los matenales dercurso nb pueden sár reproducidos en parte o en su totalidad sin el previo permiso escrito de lBM. @

.) -

o o o o

Guía del Estudiante

o0

Unidad 1)

o o o o o o o o o o o o a o o

o o ),A _i (3 O'.o O

o o o o o o o o O

o a o o o O

a O

a

l: Examen de Autoevatuación

¿Cuál de las siguientes es la función principal de la computadora? a) Resolver problemas no computacionales. b) Resolver problemas que son imposibles para los humanos de resolver. c) Resolver una variedad de probremas computacionares. d) Todas las anteriores.

2) ¿Cuál de fos siguientes

es un proceso paso a paso bien-definido para resolver un problema, enunciado de una manera clara y no ambigua? a) Método. b) Algoritmo. c) TecnologÍa. d) Programa.

3) Un algoritmo desarrollado para encontrar entre 1 y 1 millón es un ejemplo de: a) Un algoritmo infinito. b) Un algoritmo finito determinístico. c) Un algoritmo no determinístico. d) Ambas (b) y (c)

todos los números primos que existen

4) Un algoritmo usado en un sistema de computadora para monitorear los signos vitales de un paciente en la Unidad de Cuidados lntensivos (como presión sanguínea y pulso) es un ejemplo de: a) Un algoritmo infinito. b) Un algoritmo finito, determinístico. c) Un algoritmo no determinístico. d) Ambos (b) y (c) 6\

¿cuáles de las siguientes entidades usualmente contíene ra cpu? a) La memoria primaria, el bus y la Unidad de Control. b) Solamente la Unidad Aritmético Lógica (ALU). c) La Unidad de Controt y la ALU. d) La Unidad de Control, ALU y algunos registros.

o/ ¿Por qué a fa memoria principal de una computadora se le llama almacenamiento vof átil? a) Pierde los contenidos almacenados cuando se apaga la fuente de poder. b) Retiene los contenidos afmacenados aún despu¿s áe apagar ta fuente poder. c) Es sumamente sensible a fluctuaciones de fuente de poder etéctrico. de d) Ninguna de las anteriores.

o_

0

Introducción a la

Volumen

l: funOameñtosE

Unidadl:lntroOu@

@ Copyright tBM Corp. 2005 Los materiales dercurbo no pueden'ér reproducidos en parte o en su tótalidad sin elprevio permiso escrito de lBM.

Introduccíón a la programación con C

7)

8)

Gufa delEstudiante

Un disco duro puede ser clasificado como a) Un dispositivo solamente de entrada. b) Un dispositivo sofamente de salida. c) Ambos, como dispositivo de entrada y de sáfida. d) Ninguno de los anteriores.

¿cuál de los siguientes es la entidad en un sistema de computadora que permite ra entre ta CpU, ta ,"',oii"'-'prir"ri" tos dispositivos de $[ttr3r",,,::,

y

a) El almacenamiento secundarío. b) La Unidad de Control.

c) d)

Ef bus del sistema. Ambos (b) y (c).

9)

¿cuáles de los siguientes son algunas de las características principales lenguaje de programación de computadoras? a) No son ambiguos. b) Sintaxis y semántica restringida. c) Sintaxis y semántica no restringida. d) Ambos (a) y (b).

de

un

10) ¿Qué es un compilador? a) un dispositivo, de hardware que traduce un programa de computadora escrito en lenguaje de alto nivel a ,n lenguaje máquina. b) un programa que traduce "n un programa de computadora escrito en un lenguaje

0

de alto nivel a lenguaje de máquina.

c) un ser humano que actúa como intermediario d)

entre el usuario de una computadora y la compütadora mismo. un método de describir el lenguaje de programación de computadora a los usuarios potenciales.

Unidad 2:Laboratorio Oe

tnt@

Volumen 1: Fundamehtos Oe C

@ Copyríght IBM Corp. 2005 Los rnateriales delcurso no pueden ser reproducidos en parte o en su totalidad sin el previo permiso escrito de lBM.

lZ

v

Guía del Estudiante

Respuestas a la Unidad 1)c 2)b 3)b 4)a s)d 6)a 7)c 8)c e)d

Introducción a la programación con

i: Exarnen de Autoevatuación -

r0) b

Volumen 1: Fundamentos Oe C @ Copyright tBM Corp .2OOs Los materiafes der óurso n-o pueden sér reproducidos en parte o en su totalidad sin elpróvío permiso"escrito de lBM.

C

Estudiante

Página dejada intencionalmente en blanco...

)

Unidad 2:Laboratorio

Volumen

i:

Fundamentos de C 14

@ Copyríght tBM Corp. 2005 Los materiales def curso no pueden ser reproducidos en parte o en su totalidad sin elprevio permiso escrito

de lBM.

v

oI a':

Guía del Estudiante

o o

-L, t-

o o o o

(,

ramación con C

unida d 2: Laboratorio de f ntroducción a fa Programación Objetivos de Aprend izaje Af final de esta unidad, Ud. será capaz de: . Resolver problemas sistemáticamente.

o o o

. .

o o o o o o o o o o

.

Escribir algoritmos para una tarea dada. Aplicar diferentes afgoritmos a distintos tipos de problemas esfuerzos en su resolución. Generar un aigoritmo para una subtarea repetitiva.

que

j(, t-,.

.\

I

o o o

c o

I

a

o a a

o o o o o

a

(t-l I'

o

o o o

Volumen

l:

Fundamentos OeC

Unidadt:lntroducc@

@ Copyright tBM Corp. 2005 Los materiales detcurso no pueden sár reprooucidos en partb o en su totafidad sin el previo peimiso escrito de lBM.

requieran

Guia del Estudíante

trJercfcios de Laboratorio Ejercicios 1) Expficar paso a paso' ef proceso

2) Escribi*n

para preparar café en una cafetera eréctrica jnoieue gu.e a.un granjero cómo transportar un robo, "'g:1lT-o una cabra en el oote, y sin deiar a, ,obo

I#,i"iJi:il'i:n,i"*";i':#1,ff 3)

4)

ff,fi;:: fts

ff:il,ff,.i:x1""x1;iln:,;ffifñ':i:',4;,il:x:"

ff#;ff:i,t'"

oe oárechal

"ot

para

senellT:::r^:!,*

iJrl"lqueffos

6

que son isuafes s¡

por ejempro, ros números 121, 4334 y

sus edades, ra edad promed oy 1

y,2ooo'sue sean paríndromes

sJ¡""n

151151

o"lJir",;il?

son todos

o"ru.h,

o

parÍndromes.

J

Unidad

r'r"Oo

Volumenl:@ tBM Corp. 2005 ,^ los materiales delcu oensutot"r¡0"¿'!?ÍJ,"rij|,3"J"itr j:Tlj.:ili"",,E[rl"n" @

Copyright

v

lr!

ro, lo lo lo

Guía def Estudiante

ol o

o o

o o o o o o o o o o

Introducción a la proqramación con C

Unidad 3: Programación en C Los Primeros pasos Objetivos de Aprend izaje Alfinal de esta unidad, Ud. será capaz

. ' '

de:

Describir la evolución de C. Discutir cómo escribir algoritmos en C para resolver problemas simples. Explícar los díferentes componentes de un programa simpre en c.

o o o o

Ío

o o o o o o o o o

o o o o o io fo ItL TU

fo fo

I

o o

Volumen 1: Fundamentos ¿erc

Unidad 3:Progra

@ Copyright tBM Corp. 2005 Los materiates derburso no pueden sér reproducidos en parte o en su totalidad sin el previo permiso escrito de lBM.

Introducción a la

f.

ramación con C

Guía del Estuo

lntroducción

s^:.

Esta unidad presenta una introducción a ra programación usando er renguaje programación c' Es muy ce importante desarrollar sólioas teln¡cas-iu"orogr"racrón, ya que son las bases para convertirse en buenos ingenieros de software. Er renguaje de programación contribuye a ese que tiene v. una buena estructura de programación y proporciona .propót¡i" los fundamentos ,otr" los cuales otros renguajes tares como c++ y Java pueden aprenderseEs también un fenguaje que se usa ampriamente en ra comunidad de programadores, además de ser er renguaje construyen los sistemas opÁrativos con er que se más popufares.

2. La Evolución de C Ef lenguaie de programación c Dennis

fue diseñado y desarroilado por Brian Kemighan y Ritchie en los Laboratorios Bell Researci en er ano rc72.Fue momento cuando se desarroilaban riberado en un cientos oe reüuales de programación. A menudo' estos lenguajes de programación se desarrollaban para su uso en conjunto específico de aplicaciones. un El lenguaje ronrnnru ejemplo' fue desarrollado para rronmüa'inerurt"tion) por aplicaciones científicas v'0" ¡"é"ru er¡a. El fenguaje coBol (common Business orie¡ted Lenguage) fue desarrofrado para comerciales y de negocios apricaciones También se reafLarán'esfuezos para JeJarroilar renguajes de programación que sirvieran como lenguajes de propósito genera rango de aplicaciones' uno I para un amprio de los primeroi concertados en esta dirección el desarrollo del lenguaje ALGOL fue "rrr"oás (ALGOrithmic r-anguage). ALGOL nunca popular fuera del ambiente rfegó a ser académico y";;; ;;";;"riado abstracto. Ef Lenguaje de ProgramaciÓn c.ombinado (cPL) fue desarrollado para reoucir ra abstracción de ALGoL y nacerlo Útif sin embargo, ef lenguaje cpl resuftante tuvo demasiados problemas, eia dirícir o" resurtaba dirícir desarrorar .o'f,',1:::ni,-:':ff:istlas' "pr"no"r v

i,l

Martin Richards' en la Universidad de cambridge, intentó reducir fas características der lenguaje cpl a soro unas pocaiy útires. Éri; fr;';"mado BcpL (Basic cpl). pero resultó ser demasiado simple y sin'mucho poder. Ar mismo momento Ken Thomson en AT&T trabaiaba en una simplificación de cpl y oesarroiló el renguaje B. También permaneció sin uso hasta que Dennis Ritchie características oe B y BCpL, y desarrolló C, con sus propias "oroiná-r"s adiciones al lenguaje. Hoy en día' Ia especificación de las características de c, su sintaxis y semántica ras proporciona el American National standards rnstítute c iÁtus,l es un fenguaje de nivel medio con estructuras de alto nivel comparabres intfuso 1e mejores) a tas que dispone Pascaf y FoRTRAN' y caracterisi¡cas de bajo niver que ayudan que toman ventaja de las a escribir programas caracierísticas a nivel de máquina.

Unidad a,O

Volument:f@ @ Copyright fBM Corp. 2005 Los materiales delcurso no pueden ser reproOucidos en parte o en su totalidad sin elprevio permisó escrito de tBM.

v

o o o o a o o o o o o o o

't GuÍa del Estudiante

0

o o

O

o

3. Primeros pasos para Escribir un programa en

c

Los pasos básicos para escribir un programa de computadora en c son los siguientes: Paso l: Leer y entender el contexto del problema gue requiere una solución mediante un programa de computadora. Paso 2: Desarroilar un argoritmo para resorver probrema. ef Paso 3: Verificar el algoritmo para su r¡alidez. Paso 4: Convertir el algoritmo a fenguaje C Paso s: probar y verifícar er programa c para su vafidez. Nota: El paso 4 requiere el conocimiento de las estructuras de un programa en c, es decír, los elementos der renguaje, su sintaxis y semánticas.

Para poder desarrollar un programa en lenguaje c, ro primero es crear un archivo denominado archivo fuente con extensión ".c" én cuatquier editor de texto conocido. 3.1 Estructura de un programa:

O

o o o o o o o o o o o o

Introducción a la programación ccn C

cuando se escribe el programa se recomienda usar er siguiente formato: 1 f]amadas a bibfiotecas 2 dec-Iaración de funcicnes (prototipos de funciones) 3 decl-aración de varj-ai:,es giobales

(0

4 mainOi 5 dec,laración cle.._a:iabl-es focales 6 senl_encias 1j 8 definicrór Ce i::.:_::.:-.

Cualquier aplicación hecha en lenguaie C debe constar de una función principal denominada ri,ai:-. que será la primeia en ser llamada. En la estructura anterior elmain comprende desde la linea 4 a la línea 7. 3.2 Variables y Sentencias: La manera más simple o'e almacenar los datos es en una entidad llamada variable. Las variables son nombres que se les dan a las focalidades donde un elemento de dato puede almacenarse. puede en la memoria principal ser útil pensar en estas localidades de memoria como un conjunlo de casillas que pueden contener algún dato. Todas estas casillas se deben poder referenciar de forma única. por tanto, a éstas se les dan etiquetas simbólicas que se denominan nombres de variables. un nombre de una variable solamente se refiere a una localidad en fa menioria donde algún dato está almacenado. La sintaxis del lenguaje de programación los nombres de variabres. Estoi se ristan

c impone atgunas reglas en la construcción de a contínuación:

variables siempre deben empezar con una retra, ' *"t.l":?t:t3,: esto incruve ye al caráGler " " es buena páéirrJ¿;;;."r[r*

;.::l:,TbT,

variabfes que empiecenion letras

Volumen faFundamenGrdeE

.prádicab"

m¡n,:rórii

fá:;;

Unidad 3:Program

@ Copyright tBM Com. 2005 Los materiares det cúrsó n-o pueoen céi reproducidos eñ parte o en su totalidad sin el preVio permiso escrÍto de IBM'

ol

lntroducción a la programación con C

Gufa del Estudiaüe

un nombre de variable puede estar formadopor una secuencia de fetras arfabeto y/o dígitos de 0 af g y/o

'

def car¿ctei "_" (subrayado). El estándar ANSI c establece que fa variable puede ser de cuarqu.ier rongitrrd, como por ejemplo abu jafar_mbh"rr"á_ior_i"rá"[xn""*rr,= ,, pero sdo fos primeros 31 caracteré soñ sü"m""i¡""; No se permiten comas niespacios en un nombre de variable.

er

' '

h;?$s:;:

símbofos especiafes, otro sue no sea er carácrer de subrayado, en un

La manera de informa r a la computadora que ,, ,n" variable es a través de una sentencia de declaraciÓn' Las locafidades ", pueden de memoria armacenar enteros tal como 15' números reafes por ejemplo 34.24 | ."r".t"r"s por ejempro ras retras def alfabeto' Las sentencias de declaración ayudan adefinir ro que se puede armacenar en o" variable' En el caso, de querer almacenar un entero, se

iü[:tot"

decrara como

irrt

num;

;:;?::n:,:J:ilada

ÉffjnlT|.."

en

c

que indica se está haciendo una decraración.

El símbolo de ; se usa como separador de sentencias, también conocido como delímitador de sentencia. si existen múrtiples sentencias, se le debe informar compirador donde termina una al sentencia y empie za otra. se ha creado una varíable lfamada num. un varor se armacena en num a través

::i:JÍí":":n:::::Z:::,

de

una resra simpre para rormar ra sentencia de asisnación

= El símbolo = €s €l operador de asignación. La entidad a la izquierda del : es cualquíer nombre de variabre, tar r.,t. La entidad a fa derecha der : es cuarquier expresión aritmética - Así "oro que para almacenar por ejemplo 15 en nLm, se escribe ra sentencia de la siguiente manera: n''ñ

Ejemplo

:

_:

Y Li

3.r

Extraer fos Dígitos Individuares de un Entero de Dos Dígitos considere un entero positivo de dos dígitos num. Los dígitos individuales del número se deben extraer y mostrar como resultado. Para lograr entender la naturaleza del.afgoritmo requerido para la solucíón problema' considere el entero positivo de este oe áos dígitos 25. se sabe que er dígito de fa izquierda es 2 y el dígito de fa ierecha es s. ¿cimo sL extraen ?, 2s dividido entre da el cociente 2' se observa entonces 10 que para cualquier entero positivo de dos dígitos, la división entre '10 ¡esulta en el dígito de la izquieiJa. El resto de fa misma división entonces conesponde al dígito de fa-derecha. cuando se divide 25 entre 10, el residuo Unidad S:e

Votument@ @ Copyright tBM Corp. 2005 Los materiales del curso no pueden ser reproducidos en parte o en su totalidad sin elprevio permiso escr¡to de lBM.

I

í¡r

.l

il: ei

$

o o o o o o O

o o o Ol o o

o'

o !i

oi ot ol oi al ol

)r ? o o o o o o o

o o o o o o a o o o a

u, fil l\lu

o o o o

Guía del Estudiante

0

Introducción a la

es 5' Por fo tanto, para cualquier número entero positívo de dos dígitos, el residuo de una división entre 10 da el dígito de la derecha. Por lo tanto el algorítmo puede escríbirse como sigue: Paso l: Sea num elentero positivo de dos dígitos. Paso 2: El dígito más a la izquierda de num es elcociente de la división entre 10. Paso 3: El dígíto más a la derecha de :rum es el residuo de la división entre 10. Paso .f: Mostrar er dígito más a ra izquierda y er dígito más a ra derecha. Ahora se presenta el algoritmo escrito de una forma compacta, orientado a un cierto valor para num:

Paso l: num = 25. Paso 2: Dígito más a la izguierda num / 10. = Paso 3: Dígíto más a ra derecha residuo de = num / i0. Paso 4: Mostrar er dígito más a ra.izquierda y er dígito más

a ra derecha. A continuación se estructura elconjunto de sentencias en c para ef algoritmo anterior. El código C comienza aquí...

I /* Se incluye 1a J-ibrería predefinida (stdio-h) +/ 2 #inc_lude 3 /* La funcj-ón principal- se inicia aqui */ 4 mainO{ 5 int num,6 int digito_izguiefdo,7 int dlgito_derecho,. 8 / * La varia-b1e se inici-ali-za con er valor 25 * / 9 num = 25; 10 /* EI dígito rzquierdo se extrae */ ii org:to__izquie:cio : nuli. / _A; E! ,'dígito derecho se extrae _/ -2 :-:---._l=::::r: ::.._:¡. - r..i:. _-,-10,. -: ,¿- ,.- Los digitos son enviados a la sal-i_d.a estándar +/ ::::::: í";r cr qtac :-zg.r:e:ic es ?d\n,,, digito_izqu'erdo),. -5 ::-:^:: ("a1 c:qric cierecio es ?d\n,,, digito derecho) ; :: El código C finaliza aquí... Fin de Ejemplo 3.1

¡Felicitacionesl, se ha desanollado el primer programa en c. Existe un número importante de lecciones por aprender a partir oe ios primeros pasos que se han dado aquí' Para resolver un problema, se debe desarrollar primero un algor¡tmo. se puede escribir el algoritmo de manera que empfee términos y sintax¡s similares a c Posteriormente se tiene que verif¡car si el algoritmo está correcto o no. A continuación se convierte el algoritmo a un programa en -c. Este programa cons¡ste de una función Volumen

l: punOaméñióffi

3:Programac¡Onffi

@ Gopyright tBM Corp.2OOs Los materiares dercurso nb pueden'sér reproducidos en parte o en su totalidad sin el previo permiso eiscrfto de IBM'.

main gue se inicia llevando a cabo tas instrucciones dentro de elfa. En la función main, las sentencias en C están encerrada entre tfaves {}.

En el programa existen dos partes diferentes: una parte de declaración y una parte ejecutabfe' En elejemplo la parte decfarativa consta

int num,. int digito_izguierdo,. int digito_derecho;

o!|", siguientes sentencias:

Esto indica que tres variabres enteras ,amáoas nlun, digito_izguÍerdo y digito-derecho se usan en este programa. La comput"o"r"-á.ü.;"espacios oe almacenamiento

;iliJ,"ñ

a

en la memoria principal para estas variables cuando fa función main trabajar' se puede pensar que ellas son corno casiilas en

fa memoria

num

digito_i zquierdo

La otra parte de la función main COmPUtadorA cicnr

::fi 3l'?':'i

la parte ejecutable. Esta consiste de las ";::'":'r;"r'?:

es

rfa on

":f :::i^ :" ^ :: i

digito derecho

:^"11 i :¡"

p

Éf *ni""'", # ffi ;";"' :'' ", . l'3'J', n'3

* ", h; l, ;

;ffi;:

num

ü

"1,'"i'"

"il

25

En este punto, ras^rocafidades digito_izguierdo y digito derecho no tienen vafores en etos- si se trata de mostrar er contenid, d" la función en esta etapa, la computadora mostrará argún varor sin sígnificado para este

ér;;il;;#"

:;T::

La ejecución de la siguiente sentencia es como sigue: digito_izquierdo : num ,/10; Esto asigna 25/ic, que es z

alavariable

¡¡u,,

Cr

g: to_i zquierdo

diqito _r zquierdo . digito derecho

La ejecución de la siguiente sentencia es como sigue: digito_cie:echo : num _ (num/10) *10,. Esto asigna el residuo : a la variable

digito

num ¿5

Unidad 3:prog

digrto_i zguierdo

derecho.

digito_derecho

2

5

Volumen

l:

funOámEñtos oe

@ Copyright tBM Corp. 2OO5 Los materiafes del curso no pueden ser reproducidos en parte o en su totafidad sin elprevio permiso escrito de lBM.

C

zZ

f,

f

oH aii

Guía del Estudiante

O

o o

s:_lni_f ("El- dig:-to izguierdo

0 i,

EJ-

oj oi

Ahora se puede mejorar el programa recién escrito si se aprende un poco más sobre C y sus capacidades' Para comenzar se aprenderá un poco más acerca de las sentencias de declaración.

ol

o o o o o o

o o O

o o O

@

o a o o

,.

El digito derecho es 5 Todas fas sentencias en la función main se han ejecutado y el programa termina.

ot o

O

2

Muestra el mensaje

oJ

o o o o o

digito izquierdo es

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

I

o,,, O'*0 o o o a

,.

¿Qué sucede con la siguiente sentencia?

ol ol

q a

es ?d\n,,, digrto_izquierdo)

Muestra el siguiente mensaje.

1||

O'

o

Introducción a la p

4. Más Acerca de Declaraciones Cuando se declaran múltiples variables enteras, no se necesita declararlas separadamente. se puede combinar su declaración en

muestra a continuación:

_..: :::::./ c:!r- r!c_izquierdo,

una sola sentencia como se

digito_derecho;

En otras palabras, se pueden declarar variables en una sola sentencia con la lista de variables separadas por comas. El int especifica que una variable entera se está declarando se asigna espacio de almacenamiento de manera que los enteros se puedan almacenar alf i. En estas variables se puede asignar cualquier entero válido. Es válido asignar --:, -2-:: 1,* -901 a una variabre decraradá corT.ro inr. Tratar cje asignar un no entero, por ejemplo 3- 141 o er caráctere, se asignará 3 ó 65 (cÓdigo ASCII para el carácter a) a la variable. A parte de las variables enreras se pueden definir otros tipos de datos, como una variable de número real o una variable de prnio ílcrante tal como se muestra a continuación: _---;a; pi, saf ario,. Esta deciaración crea dos variables de punto flotante que pueden almacenar números reales cie la forma 3.747 o -0. o0o2s6. Los datos son truncados cuando a una variable entera se fe asigna un valor real. ¿Pero qué sucede si se hace lo siguiente? pt = 2; En éste caso, la constante entera z seráconvertida a la forma flotante 2.0 y asignada a la variable pi. Es de saber que esta locatidad asignada un l" rurJ; una casilla

",

más grande que lo requerido para una variable entera. se han explicado los tipos de datos y float. El lenguaje c provee otro tipo de dato llamado char Este permite almacenar caracteres constantes como las letras del alfabeto A- zó á'Z,losdígitos 0 - gyalgunos caracteresespeciales como G, $, z &, etc. Las variables char se declaran de la siguiente forma:

-

int

#,

,

Volumen 1:

FundameñtosE

Unidad 3:Programa

@ Copyright tBM Corp. 2005 Los materiales detcuqo no puéden sár reproducidos en larte o en su totalidad sin el previo permiso escrlto de lBM.

Introducción a la

cnar vocal, consonante; Las siguientes asignaciones son vál¡das.

,a,; voca]: consonante = 'et; vocaf : consonante,.

.

(

Nota: Las constantes caracteres están dentro de comif{as s¡mples. se !e asignó la fetra e (una vocal) a la variable consonante. Esto dado que no existe signíficado alguno en el nombre de la variable, "" "orr""io más que su tipo. solamente actúa etiqueta para poder referenciar a una locafidad de memoría. sin embargo,como una programador debe escoger un buen un nombre de variabfe que;;;r;; ,';,-o=offio para er cual adecuado tramar r" u"r¡"ire sananci" v-ér"roar alrí fas ;:,fi:JiJil'::';r*:"es "

5. Más Acerca de fos Operadores Hay que reóordar que para haflar el residuo de fa división de num entre 10, se usó la siguiente expresión: num

- (num ,210)*

10

y no se utilizó la siguiente expresión: num _ (num,/10)fO

;';il3:n:i::ffilrXff::: operador debe ser una parte expricita de ra expresíón No Los paréntesis o en fa expresión aritmética anterior indica que la expresión que se encuentra en su interior se evaluará primero. c ofrece un amprio conjunto de operadores para hacer la programación más sencilra. por ejempro er operador móduro ' se denota a través del símboló g y éste se usa paia ootener er residuo de una división hacer uso de éste operador móduro directamente tar como se muestra

::tffir::#:de

num

fr-- rr

r))

?

se lee num móduro

10

10, y

devuerve er residuo de ra división entera de num entre 10 Er primer programa en c presentado puede ser ahora reescrito basado en la discusión anterior acerca de declaraciones y operadores.

'

El código C comienza aquí...

1 2 3 4 5 6 '7 8

#include mainO i

/* Declaración de varial¡les en una so]-a línea *,/ int num, digito_izquierdo, digito_derecho; /* La variable n.¡m se inici-ait=.'"".-";';:. de 2s */ num : 25; /* El dígito j_zquierdo se extrae */ digito_izqurerdo = num / :aO;

Unidad S:ero

votumenl@ @ Copyright tBM Corp. 2005 Los materiafes del curso no pueden sár reproducidos en parte o en su totalidad sin el previo permiso escrito de lBM.

v

o o o o o o o o o a o o o o o o o o

o o o o o o 0 o o

c o o o o o o o o o o o o o

o^ de a

o o o

Guia dei Estudiante

I

f

ntroducción a Ia pr

i * Er digi-to derecho se extrae utir-i-zando e1 operador módu ro 3.g,ac_ie:echo -. :t lr¡i : i0,. E1 díg'i-to izq'ierdo se muestra en la salida -| estandar ./ -t ') "* Drr-ntr ("r:1 drgito izquierdo es td\n", ciigi.rc rzguierdo) r? /* Er dígito derecho se muestra en Ia sariá. estándar *,/ !4 ^-i*-r (/rrrl ¡-1 orgrto derecho es ?C\n',, digito derecnol },rlrrL.i_ ^-l

*

/

*!

,.

_5

..

I

Ef código C termina aquí...

Nota: Los comentarios se escriben entre /* y */,y ef compiladorde.C los ignora. Los comentarios se usan para mejo rar la legibilidad del programa. Es una buena práctica escr¡b¡r comentarios para explicar programa, el ro cual también sirve como una documentación del programa. sin embargo, evite usar comentarios triviales tales como. ,/* Asigrnar 25 a nu-n. -,/ num : 25; . /* Añarlir 1 a num */ num : nUm + 1; Estos comentarios no añaden valor. A continuación se presentan otros ejemplos. Nota: Es ímportante resaltar que todo mensaje dirigido a la salida estándar en un código en c trabaja con el alfabeto inglés lo que imprica que no se pueden incluir vocales acentuadas, fa letra ,ñ', entre otros.

Ejemplo 3.2: Invertir ros Dígitos de un Entero de Dos Dígitos Asuma que se desea tomar como entrada un entero de dos dígitos, invertir los dígitos que lo componen y mostrar el resultado. Por ejemplo, si la entrada es gg, entonces el resultado será 68. Er algoritmo para este probfema es muy senciilo. Paso l: lngresar un número entero de dos dígitos num. Paso 2: Ertraer el oiqiro_izquierdo. Paso 3: Extraer el oigito cie¡ecno. Paso 4: usando el concepto de peso posicional de enteros decimales, se puede formar

num_.invertido como sigue:

num_invertido = digito_derecho *

1O + digito rzquierdo: Paso 5: Mostrar el valor de num_inverti-do. Esto es precisamente un algoritmo que necesita ser convertido a C, también usa algunos pasos ya discutidos anteriormente. Er programa en c se muestra a continuación:

Volumen

l:

fuñ¿Eñ-entos de C

Unidad 3:Prog

@ Copyright tBM Corp. 2005 Los materiales delcurso no pueden sér reproducidos en parte o en su totalidad sin el previo permíso escrito de lBM.

lntroducción alaP

Gula del Estudiante

El código C comienza aquí...

r /* Este progr:-a invierte los dígritos de un número de d.os d-íqitos usando eJ- operador módulo *,/ 2 #incl-ude 3 nain O { 4 /* Sentencias de Dec].aració¡n */ 5 int num, digito_izguierdo, digito_derecho. num invertico,. 6 /* Sentencias de Asigmación */ = 89,. digito_izquierdo : num / num

1 8

J_O;

ve-su.lO: nUm 810; 10 /* EI nú,oero con 1os d.ígitos invertidos es calculado *,/ 11 num_invertido : digito_derecho-10 - drgito_izquierdo; I2 printf ( "El dato original es %d\n", num) 13 printf ("E1 dato invertido es %d\n",:t:;:, i:verticio) ; +^ ^.i ^i

9

i^-^^L

,.

L4

I

El código C finaliza aquí...

Fin de Ejemplo 3.2 Ejemplo 3.3: lnvertir un Número Entero de Tres Dígitos El problema consiste en ¡nvertir los dígitos de un número entero positivo de tres dígitos dado y mostrar ef resultado. Lo primero es tomar algunos ejemplos para v¡sualizar si se

puede desarrollar una lóg¡ca del algoritmo.

Considere el número 134. Para exfraer el dígito más a la izquierda, se divide el número entre 100. Esto es,134/100 y se obtiene 1 que es el dígito más a la izquierda. El residuo de la división entre 100 es 34. Estos dos dígitos 3 y 4 son los dos dígitos más a Ia derecha- En el ejemplo anterior se aprendió a extraer los dígitos individuales de un número entero de dos dígitos. Una vez que se tienen todos los dígitos individuales sean digito-izquierdo, digrito_medio y diqito_derecho, se puede invertir el número usando los pesos posiciónales.

Á

q,

El algoritmo que resuelve el probrema se muestra a continuación:

Paso l: Dado como entrada el número de tres dígitos num. Paso 2: El dígito más a la izquierda es digiro_i_zguierdo

:

num/100. temp diqito-j-zquierdo ? 100. Con esto se obtienen los dos dígitos más a la derecha y se almacenan en remp. Paso 4: digito_medio : temp,/10. Paso 5: digito_derecho : temp % 10. Paso 6: num_invertido : digito derecho * 100 + digito mecio * 10

Paso 3:

+ digito_izquierdo.

Paso 7: Mostrar num. Paso 8: Mostrar num invertido. Unidad S:erog

Volumen

'1:

Fundamentos de

O Copyright tBM Corp. 20OS Los materiales del curso nb pueden sér reproducidos en parte o en su totalidad sin el previo permiso escrito de fBM.

C

26

\\

v

of a o o

oi o o o o

o a o

o o o o o o o o

o o

o3 o" o o o o o o o o o

O

o o o o o o

q

J

c o o o

Guía del Estudiante

-._._

Introducción a la programación con C

Siempre que un programa tenga una sentencia larga, la línea se puede dividir en múltiples líneas. Cada línea de la sentencia multilinea se termina con el carácter de diagonal inversa (\). Esta declaración o expresión larga escrita en múltiples líneas. terminada con un diagonal inversa, se trata como una sentencia compuesta. Esta facilidad permite escribir un programa bien formateado. El programa en C se muestra a continuación: El código de C comienza aquí ... 1 #include 2 mainO{ 3 int nurn, dtg-ito_rzoui erdc, Crcito_riedlo,. 4 int digrto_de:echo, temp, nun inver:r¡cic,. 5 num : 734; 6 /* E1 dígito más a 1a izquierda se extrae */ 7 : nu¡n / 100,. digito_izqurerdo 8 /* Los dos dígrtos más a Ia derecha se extraen * / 9 temp : num ? iOO; I0 /* E1 dígito del medio se extrae */ 11 dig'ito_medjo - -renp,/ iC,. 72 /* EI dígito más a la derecha se extrae * / 13 digito_de::echo : i_enp ?. ,C; 14 /* El- número inverti-do se calcula. se usa eI carácter de diagronal inversa Para sel)arar las s!-gruientes sentencias en dos 1íneas */

15 I6 I1 !8 rg l

num-invertido : irg---c_cie:ec:-: - rco + dlgito medio * + digito_izquiercic; printf ("El dai,c c:::qr:.a1 es : !,o\rr,", ium) ; prtntf ("El dalo i::r-:::ii: :s : r.d.,..", num invertido) ;

10

Ef código C finaliza aquí...

Se recomienda ir a través de cada sentencla del programa en secuencia para diferentes entradas, asignándole diferentes valores a ia variable num y observar cómo el programa se comporta para diferentes valores. ¿Se puede pensar en otro algoritmo para realizar la misma tarea?.

Fin del Ejemplo 3.3

Antes de seguir con otros ejemplos, se expl¡ca cómo convert¡r el programa C código que entienda la máquina.

Volumen 1: Fundamentos de C

Unidad 3:Programac¡ón en

C-Lm

@ Copyright tBM Corp. 2005 Los materiales delcurso no pueden ier reproducidos en parte o en su totalidad sin elprevio permiso escrito de lBM.

a

un

6- compilación de programas Hechos en Lenguaje

c

En Linux la compilación se hace usando programa ef cc, que genera un archivo a.out si el programa compita sin errores. El compil"áoriá ces cc, y toma el nombre del archivo del programa en c como un argumento. La extensión que se usa para los archivos que contienen un programa en c eJ.c. A continuación se presenta el siguiente ejemplo: cc nombrearchivo. c

I

;

El archivo a'out que genera cc es el archivo ejegutabte y puede ejecutarse como otros programas en el sistema Linux. Para más infórmación ái"r." oeí comp¡rador, use las páginas man de Linux.

Ejempfo 3'4: Convertir la Temperatura de Grados Fahrenheit a Grados celsius Escribir un programa que tome un número que representa grados Fahrenheit, lo convierte a grados celsius y lo imprime. sea la entrada la variáble fahrenheir que representa el número en grados Fahrenheit,. Se puede convertír el número dado de grados Fahrenheit a grados cersius usando ra siguiente fórmura:

cel-sius : 5 * (fahrenheir _ 32 ) /

g

El algoritmo en sí mismo es simple y por tanto se escribirá directamente el programa c. Ef código C comienza aquí...

1 #incl_ude 2 tnt ma-i-n (voj_d) { 3 float ceJ-sius, fahrenhe:t; 4 /* Iemp,eratura en Fahrenheit */ 5 fahrenheit : 9g.1; 6 ,/* Te¡¡>eratura en Celsj-us */ '7 celsius : 5* (fah:-enhei-- - 32)/9; B /t Se muestran 1os datos por 1a saf-irt: estándar */ 9 p:lrti ("La .-er..e:¿ru:a if Fahrenheit es. eguivalente a ?f \ 10 cersius\n,,, fah:e::heit, cef sius),. 11 l Ef código C termina aquí...

En este ejemplo, se. utilizó el tipo de dato float por primera vez. Este tipo de dato puede almacenar valores decimales ráales. En la sentL""á pirtr se nota que en la cadena de formato contiene un o/of, el cual indica que un tipo float será impreso. siempre que se desee imprimir un tipo de dato float, se debe usar o/of en ra cadená o" io-"to del printf. Nota: El código anterior usa 'int main (void), en sustitución de ,main o , debido a que son equivalentes' Es importante mencionar que la función pr¡n"ip"i por defecto devuelve un entero y no está definida para recibir argumento arguno. Fin de Ejempfo 3.4

Unidad 3:Prog

Volumen

i.

Fundamentos dEE-28

Copyright tBM Corp. 2005 Los materiales del curso no pueden sór reproducidos en parte o en su totalídad sin el previo permiso escrito de f BM. @

c

o o o o o

Guía dei Estudiante

Introducción a la programación ccn C

O

Ejemplo 3.S: Calcular el Área de una Circulo Dado el Radio El siguiente programa en c calcula el área de un círculo dado el radio. El algoritmo es simple, ya que se conoce la fórmula para calcular el área dado el radio del circulo. El área de un círculo vienedado porlafórmula, Area rf . Donde Tres aproximadamente = 3'14159 y r es el radio de la circunferencia. El programa puede escribirse como sigue: El código en C comienza aquí...

o o o

1 #inc]ude 2 inr main (void) { 3 f -l oa! area / raot 4 r:ad ío : 32 . 15:

o o a

3

o o

5 6

o,.

at:ea : 3.14159 * ¡ac-: printf ( "para e-l :ad:c

/j

O

.,

, :-cic,. : , = r area es :

o o

El código C termina aqui... Fin de Ejempto 3.S

O

Ejemplo 3.6: Cafcutar ef Interés Simple de un Monto Dado Escribir un programa en C que calcule la cantidad a pagar del monto principal para un número de años específicos a una tasa de interés dada. Se asume que las variables se llaman: interes_a_paE,ar, itir:::.r-pa_1 , tiempo y tasa.

o

f:

o o

Se sabe que:

rnteres

:0 o

a-paja:

=::_.

- tiempo * tasa/100

El programa que realtza los cáiculos es ef siguiente: El código C comienza aquí...

o

c

o o o o o o ? a

i

P P

p p

t lh llLt rtf

b

b O

:

t¿

15

-::- :

':

El interés a pagar es calcu1 ad.o */ ' :.:e:-es_a_paga: : principal * tiempo * tasa /IOO; Los detalles del i_nterés a ¡>agar se muestra.r +/ p:r-ntf ("Principal-: %C\n", principal) ; prrntf ("Numero de anios: ?d\n,,, tiempo) prrntf ( "Tasa de interes: ?f \n", tasa) printf("\nCantidad de intereses a pagar: Bf\n,,, \ interes_a_pagar) ,.

,.

1'1

,.

Volumen 1: FundameñtosE C

Unidad 3:Programac¡O

@ Copyright tBM Corp. 2005 Los materÍales dercurso no pueden sér reproducidos en parte o en su totalidad sin el previo perm¡so escrito de lBM.

Gufa del Estudiante

Ef código C finafiza aquí...

Para la cadena de impresión de la sentencia printf , se usa zd o zf de acuerdo ar orden y af tipo de variables que se está imprimiendo. n-quí, la primera variable a imprimir es principal, que es un int, luego tiempo, que también es un int. cuando tasa y interes-a-pagiar se van a imprimir, se usa zf yaque ambos son dertipo f toat. Fin de Ejempto 3.6

I

i

;

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

int (notación decimalcon signo) int (notación decimat coñi@orcctaf

hexadecimal)

zx,

int (notación octal sin signo) int (notación hexadecimal sin signo) irt (notación decimal sin signo)

zx

?f ?e

o

?;E Zq

?G

Á¡'.F

-

^

,_:i5-:

;-

fabla 3.1: Cadenas de Formato para ¡>rrntf y scanf Ef uso de secuencias de caracteres de escape se muestra en raTabra 3.2

i

I .l I

\b

Carácter de alerta (timbre

I

Retroceso

(Bactspacj

Retomo de carro Tabulador horizontal

Tabla 3.2: Secuencias de Escape Unidad a:erog

Volumen

i:

Fundan¡entos OECJO

@ Copyright tBM Corp. 2005 Los materiares dercursó rib pueden sái üprooucidos en parte o en su totalidad sin elprevio permiso escr¡to de lBM.

c

O O Guia oel Estud¡ante

o o

.l a

Ahora que ha completada esta unidad, Ud. debe ser capaz de. . Establecer la evolución de C.

. .

Discutir cómo escribir algoritmos en C para solucionar problemas simples. Explicar las diferentes componentes de un programa C simple.

.\--

-).vtr\ \

\

r-. l':

\,.\J

'\--

-

\

\.

1 ,

..-.)\

*+

\'.r ).r

:\1

'*.-¡'-\

O^ .R ?v

o o

.. "\.. .

--: \i

-\ r,- J

!;l)

\.

\-\\r

\

---:--_,

c o

,

_\')-.s')

\-- \ *-.> l\

. \-_ti\

--f)

.

\. i' y. Paso 3: Si es cierto, entonces mostrar

unidadl.esttuffi

x como el máximo, Volumen 2: Estructuras Oe Control e-n-C

@ Copyright tBM Corp. 2005 Los materíales del curso no pueden ser reproducidos en parte o en su total¡dad sin el previo permiso escr¡to de lBM.

I

,)

.I

:l II

:T lt off O lt .h{ ^fr olt tt¡ !t

-G_uía

oel Estudiante

.lf

Para comenzar' se discutirá la sintaxis y semántica cje una construcción La forma general de fa construcción r ¡ simple se da a continuación:

ol ol

ti(x

ol

oj o o o

>

r,)

La palabra reservada es

ot

o o o o o o o a o o o o o o o o o

srmple en c.

En este caso sentencial es una sola sentencia c, la cúal se llama sentencra,,simple,,. De manera de verificar si x es mayor que pueoe . se usar la siguienle sentencia: -i

ol

o,u

if

:f (sl la conciición es i,=::l:tr.:a. sentenc: - _,.

:F

Orrs

C

Paso 4: En caso contrar¡o, mostrar v como el máximo Este es uno cie los métodos para resoiver este prcblema. Existrrán múltiptes soluciones pai-a muchos de los problemas que se van a presentar. Los que aqui se drscuten los más simpres que faciritan .orn[rut"r son ros objetivos cier aprendizaje.

ofi

o a o o o o

Introduccion a la proqramación con

l:[:.::f

if

y ia conc.icion que se Verifrca es -,: > 1",. También se re una expresión relacionai siempre resutta en

r:i:,:"*,"cionat a >: ),

:,;#;l"":?flj:

construcción

r:

oara escribir

rn prosrama en c que impremente

El código C comienza aquí... j *:nc-Lucie

2 nainí)

I

3

:

,

;t)

)

x es nayo:r aI valor de y ;.. 1r:_

^-

;^

9Á'-rt

hóñA_É¿.v-

Yue -!^

eI walor d. y

es: ?d\,n", ),) ; igrral al val-or

Volumen 2: Estructuras ¿e Controten C

Unidad

d.e y

l:Estructurffi

@ Copyright fBM Corp. 2O0S Los materiafes delcurso no pueden sór reproducidos en parte o en su totalidad sin el previo permiso escrito de IBM

*

/

er

Note que las dos entradas se tomaron usando una sola sentencía scanf. El formato de cadena *d sd implica que se esperan dos enteros decimafes. Los dos valores de entrada se leen en x e y respectivamente.

A continuación, se

I

realiza un seguimiento de la ejecución de este programa con considere que ros varores de entrada de xey ::tJü""jT:"3;""J[:*XÍ,:"'"'pro

printf (',Las entradas son: 3d y ?d\n ,, x, y) , i La sentencia anterior imprimírá el siguiente mensaje:

Las entradas son 72 y 24 Af ejecutar la sentencía if (x sentencia siguiente (la sentencia printf) no se ejecuta. cuando se e,ecuta las sentencia if (x < y) , ésta resulta VERDADERA, como resultado la

sentenCia, printf ( "El máximo presenta a continuación:

El- maximo vat or es:

va-lor

es

:

?d

\::,,, i,)

siguiente

; se ejeCuta. La salida se

24

si se dan ros varores de x

y = r2, der programa que ra primera if (* t y) retornará falso. El siguiente ":: ,::es< evidente _... se ejecuta y conduce sentencia ir (x conduce a verdadero y se ejecuta ra v) :#"il,""5"15i,j1 sentencía

printf ("Los numercs scn iguales\;:,,)

,.

c

Esto resulta en la siguiente salida:

Los numeros son iguales

:::$ffi::fil"rtos Fin del Ejempto

que se hicieron ilegaron a ros resultados correctos y er prosrama

l.i

Ejemplo 1.2: Determinar si una persona es de mayor de edad Una tienda que expende licores está interesada en determinar si sus clientes cumplen o superan la mayoría de edad (21 años), para evitar nacer una venta ilegal. El algoritmo para resolver el problema se muestra a continuación: Paso l: lngresar la edad def cfiente. Paso 2: si ra edad es mayor o iguar a 2r, entonces ra persona es mayor de edad. Paso 3: si ra edad es menor a 2r, entonces ra persona no es mayor de edad.

El programa

c

que ímplementa este algoritmo se da a continuación.

unidad 1: Estructura oe coñtr' oEEeál¡on

Volumen 2: Estructuras ¿e ContróienC_J

@ Copyright tBM Corp. 20OS Los materiales delcurso no pueden ser reproducidos en parte o en su totalidad sin el previo permiso escrito de lBM.

o o

Guía del Estudiante

o o o

El código C comienza aquí...

a,

o o o o o o o o oI o o o o o o o

I

Introducción a la proqrama3ton con

IE \v

*_;.C_:Cie

-

.i*eu::_C.:t)

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

^*r-_ _.. f.

\ :_ --,',--

I

o

o ,_, o o o o o o o o o o o o

,_

',a

:on f a niayo::ia cie edad\:,,)

:2i

,.

Ef código C finaliza aguí...

Fin del ejempto 1.2 se puede escrib¡r más de una sentencia en una m¡sma separadas por el carácter ";"' si se desea eiecutar más de una sentenc¡a que línea siguen a la senienc¡a if, se deben encerrar todas estas sentencias entre llaves 1 r. La desventaja de éste método eS que si eciad esto usando la construcción if _else.

3. La Construcción

if-else

La forma generar de ra sentencia

rf (condición)

if-erse

se o,a a continuación.

{

sentencian; j c l y) I1 /* \/erifi-car si x es mayor qoe z * / 18 íf (x > z) 19 27

22 23

^+ € [| rtr1 vrrrrLr ¡.-L va-Lor maxl_mo eS: gd\n,,, x)

^ri

20

e-lse

,.

,/* Sino z tiene e1 máximo val:or */ i]rrrrL- (..L^ \,a_Lor maximo es: gd\n,,, z); ñY;--i/rt-¡

g: ^^ ^t >e

Verificar q¡ue y es mayor que z - i i: ty > z) pr::l:: i "E- _,.¿ --: ;:]:x::.1 €s :

24

25 26 21

.:

d\n,,, y)

,.

EI>=

28

)q / *

rf (z > y) La waria.ble z ti_ene eI náximo val_or -,/ ñ-¡ ^e!-r-__

I :_

-.-:tO:

;aX.;:,:

:S:

?d\::,,,

Z) ;

El código C finatiza aquí...

i:ilüil:"8:

;iJff:?fi:ado

er máx,mo varor entre ros dos números insresados,

Fin del Ejempto 1.4

se ha usado una nueva estructura en estos ejempros. se usó un if.

sentencia

Esto se llama construcc¡ón

correlacionar cada

erse

if

an¡dado.

con su correspondiente

if(x>z) *! r / r.ra ^*i rnLr ( '.L-L ValOr |Jr

if

i:

dentro de otra

es bastante craro,

maXimO eS: gd\n,,, X)

,.

está emparejado con:

else

printf La primera sentenc¡a i

if (x >

(

"Ef valor maximo es: 8d\n", z);

f

y)

está emparejada con: el-se

if

(y>z)

Unidadl:Estrrct@

Volumen 2: Estructuras Oe Cor¡trolGn C

@ Copyright tBM Corp. 2005 Los materíales del curso rio pueden sér reproduc¡dos en parte o en su totalidad sin el previo permiso escrito de lBM.

T

o\

o O

Guía del Esi-iCiante

o o

;:"$.:il?,"t;:

O

o o o o o o o o o o o o o o o

es una construcción

claridad.

ii v

Ejempro r's: Determinar si un Núm"ro ,nru.o de Tres Dígitos es patíndrome considere la entrada de un número entero positívo de tres dígitos. si éste es un paríndrome se debe determinar ú. ;r;i;;rome es una parabra o un. número que se ree de ra misma forma de derecha t¿íJ"rü como de derecha a izquierda. por ejem pro, 121 y er arsoriñ!1ra oetermínarr¡ ,n :iiff:r?alíndromes dado es [aríndrome es "nt"ro Paso l: lngrese un entero positivo de 3 dígitos num. Paso 2: Ertraer el digito izquierdo Paso 3: Si

y el derecho.

rzc;_€::_, = d=recho entonces

El código C comienza aquí... I #l:rl- - j= .s-_t_. .-2 main O i 3

a

o o o o o

anterior

En el programa anterior, se pudo entender er emparejamiento de ros rf_erse, ,JJ o" ,olno,ión por r" ü"t", es esenciar 'lgrlas' ya que permite ?:::',"T:"1::: i:ff'?X'ffiT"0?;;:#;' proporcion" una fáciL lámprension rnryo¡.

O

q

,11H,,;"n oT'.."1.J0,"

i a¡re ^!

1,

(&

or

oi

.i ol of ol OI

((J

*.-* .iJji./

p::nLt(,, ^- i ^+.

_:J_:=_,

J:,

num es un palíndrome.

j=:+::.c-;

/

I._,1_,es;: _:.:_j: ::::c erte::c de 3 diqitos:\n,,),. 5 scarf(',?d,,,A:-:r., ; 6 /* yeríficar - que e-! er :rú¡e¡c .tume.c de entrada es posa -) .., vo * / :-, :"= ' lr(num ¿=?ll I

-ri-- -.'

,

lc

j,,,

lar1vd,:.c,.

i

I :

' i :--- .^:' '::::' :.,,,:._:

posil i vo, numero \

;

]

11 ,/* Verificar qrre g4 a:.*ts:(j núme-c ingresado es a-- el de 3 dígitos */ 1,2 else 13 if (num 999) { 1,/ p::-.--: (,,D¿:c Ld-(J 'ncorrecto' ingrese un numero \ i5 -----..t de 3 cigiros\n ,,);

\6] 77 else { 18 7* Mostrar 1 os datos ing-resado5 * / 19 prrntf (,,La entraia es: gd\n,,,num),. 2a 1* Se extrae eI dígito izquierde */ 2i :zquie:do=num / 1OO; 22 1* Se extrae e1 dígito derecho *,/ derecho:numg10,.

VolumenZ,@

Unidadl:

gstruc@

@ Copyright tBM Corp. 2005 Los materiales delcurso no pueden ,ái r"'prooucidos en parte o én su totalidad sin elprevio p"irirJ escrito de lBM.

Introducción a la programación con

24 / * verificar derecho *./ za 26 21

30

Guía del Estudiante

que er d.ígito izquierd.o extraído es ign:ar aI dígito

i-f (izquierdo :: ierecho ) ,/* Entonces.el número es palindrorre */ prrntf("8d es un numero palindrome\n",num);

28

29

C

el-se

/* Entonces este número no es palíndromer */ ::t;rtf ("?d no es. un nulnero palindrome\n,,,

JI

num) ;

I

32

)

El código C finaliza aquí...

Se recomienda que se real¡ce la traza del programa anterior para dos conjuntos de entradas diferentes.Es recomendable intentar la{raza con los valóres gi3 v sss. Fin del Ejemplo 1.5

5. Expresiones y operadores Lógicos y Relacionales Se sabe que la parte crucial de la sentencia if es la condición y que ella es cualquier

expresiÓn relacional que conduce a verdadero o falso. Las expreé iones relacionales son

aquellas que se forman con una combinación de identificadores, constantes y expresiones aritméticas, todas enlazadas a través de un conjunto de operadores relacionales. Los siguientes. por ejemplo. son todas expresiones relacionales válidas:

A>10 (a-25) :.nLc ¡,,af or es: ici\:t,,, -'rm?', . ^-i-*a,rf-i

.rl

l

El código C finaliza aquí... El operador ternar¡o es equivalente a una stmple sentenc¡a el siguiente ejemplo:

I I

if,

tal como se muesrra en

,/* Verificar qrre eI nú¡oero 1 es mayor que el número -/ 2 if (nunt>nun2) i / * Sí e1 número 1 es rnayor que eI número 2 - -i ri,*r :-. ( L_ ñ,aX:mO varci es: '::,i:r',,

I I

l

efse

/

O,

o

{

* Sí el número 1 no es raayor que eJ- nú¡ero2 - ,/ p:i¡.tf ("El maxirn: valc: e.'.: :d\¡,,, ¡run2 )

,.

]

O

o o c o o o o o o o o o o o o o o o o o o 5 o o o o

I

Fin del Ejempto 1.6

Ejempto 1.7 Cantar los Días en un Mes

El usuario ingresa un nú,'nero entero entre 1 y 12 que significa er mes. Aquí 1 representa Enerc 2 r=presenta Febrero y asi suies¡vamente hasta llegar a Diciembre. El problema co¡srst= 3-: esc¡ib¡r un programa que tome esta entrada y muestre el número oe cías oe ese mes en particular. Asuma que el mes de Febrero tlene sólo 2g dias Para a'/u'ai a resci\'ai este algoritmo recuerde la frase usada en la escuela: "Treinta días iienen Septiembre, Abril, Junio y Noviembre; todos los demás (excepto Febrero) tienen 31 días, Usando esta rima, se puede escrib¡r un programa para encontrar la cantidad de días de un mes Daoo que el algoritmo es sencillo sé va a escribir directamente el programa. El código C comienza aquí...

-

#'nc-uie

¿

jrllc_-l

/ \ { I

r J

3 /' se declaran 1as variables días del mes "/ int mes, dias; 4

Volumen 2: Estructuras de ControGn C

para almacenar eI mes y er número de

Unídad 1: Estructura ¿e Controt OeEec¡sio^

@ Copyright tBM Corp.2005 Los materiales del curso no pueden sór reproducidos en parte o en su totalidad sin el previo permiso escrito de lBM.

Introducción a _ la_ programación . con C

_

:_

Gufa del Estudiante

5 /* se acepta er valor del mes por parte del usua-río */ 6 printf ("Ingrrese el mes, gue se encuentre entre I y 12 :,,) ; 1 scanf("gd'/ &mes); 8 ,/* Verificar Ia va1idez de ]-a entrada */ 9 if (mes >: 1 && mes Esto sucede porque si la condicíón evalúa a vERDADERo, el computador ejecuta una sentencia nufa simbolizada por ef carácter ,;, que sigue a la condición (x > y). En cualquier caso, la sentencia printf se ejecuta. Si la condición evalúa a FALS9, la sentencia nula se salta y la sentencia printf se ejecuta de todos modos.

El lenguaje c es un gran lenguaje, pero tiene características que usuario se mantenga alerta todo el tiempo. Usar scanf("o/od,,, requieren que el nurn) en vez

scanf("%d', &num) es otro enor común que cometen ros progÉrnu¿lü A continuaciÓn se estudiará otra estructura condicional, la estructura switch

8. La Estructur€l

switch

de

- case.

case

una construcciÓn anidada j-: ... er se puede ser difícil de entender. c provee otra construcción, la cual permite escribir programas cuando un número de condiciones alternas debe ser validada. Esta construcción se le denomina switch... case, y su sintaxis es la siguiente. swrtch ii'a¡_a:- = .'

'

a= c:

--: j::.-_=:-l-:S,.

_ ,. ;_^ -_==.-,

. C1S+'.-:

-:.':

:;=:;, "." ca

se

va r cr:-:

sen:enc:as,. brea k,. dof

:rrl

¡.

sentencias,. break; )

si la sentencia break no está presente la ejecución fluye rógicamente siguientes del próximo case, lo cual comúnmente no se desea. a las sentencias A continuación se explican con un ejemplo esta construcción para entenderla. Ejemplo 1.9: lmprimir los Días de la Semana Escribir un programa que tome como entrada un valor entre y 1 7 e imprima el dÍa de la semana que coresponde al número que se ingresó. 1 denota Lt oi" r-ln"s, 2 Martes, y así sucesivamente. si la entrada no es válida sé debe mostrar un mensaie. El código C comienza aquí...

1 #i-nclude

Unidad 1: Estructura de Control de Decisión

Volumen 2: Estructuras de Controlen

@ Copyright tBM Corp. 2005 Los materiales dercurso no pueden ser reproducidos en oarte o en su totalidad sin el previo permiso escrito de lBM.

C

1g

e

o o o o o

Guía del Estudiante _ a:_

E /* Verificar .inúmero entre 1 v 7 En caso contrario lndica aJ- usuario*.que el númeroe,eté es. j-nválido

oi oi

9

:I o O

a o o o o q o q o ? ? o I

ói

? aut a

l\J I

,t.

p D

sv

se

j *_o/ - \ Ir ^

/nr1ñ \rru1L,

¡ f ¡b

10

oi

o a o o o o o

-.

^-l-!-/rr-

ol ol

O

/r:

atrr

Aceptar e.l- número r por parte del usua:.-o / crue represent.a cie Ia semana . / -_f rr_l ( _n::esar un \-e.c: e:.:-+ : .. 7 cue:dentl:iq.re urr &num dia ) ; -s canf ( " Ed ",

ol ol

a o

IntroCucción a ia proqrarnáción co¡ r-

ñrr ñ- < lJ_ ar¡ L !

-¡:1 && Cla : _ Áe mes < = _. !6-:._-, > 0, i Aquí el día ingresado puede ser wáIrcio, se verifrca si g] mes 30 días *,/ if((mes:! llriLes (cia dl -v-rrrsr + r it.

.l-¡^^

para el estudiante zd: \n". \

/* Obtener la entrada del usuari-o del noid */ .:'itaf ("Ingresar el NOID (max 8 caracteres) : \n,') s:a¡:f ("tr",lista Ik] .noid) ; '- Obtener como entrada del usuario e1 nombre ::t:-: j 1,'f rgresar e-l nombre (menor a 50 caracteres) -

,.

.

rr\.

entrada del usuario cada uno de 1os 6 cursos */

com

^h!^-^-.

I

: o; ) < 6; j++){ :f

lush (stdin

)

,-

p:rntf ("i:rEresar .la nota de1 el_.. \.r =:\nil ^-, gv

Cul:so

l-a-tr1

\

\. , irl J,tt,

1 {

scanf (,,?c", &lista Ik] - g.rados t j l t' ¡¡n- le (:oupper (Iista I k] . grados t j I ) i :oupDe: (lista I k] . grados tj I ) > 'E' );

entradas realizadas para todos 1os estudiantes el Promecii o de Notas para todos 1os estudiantes ; :'- < :t eS:; k-+) { :

Promedio de Notas ¡>ara e1 estudj-ante k estudiante ?d\n',, k+1 ); tr^_:l¡t^:_ia¡

_-

t,-r

i^l uel

J;

= C; i < 6: i-+\f rtt ¡:ir¡j ( "?c\n", toupper (Iista Ik] .yraqw)tJ.l *--i^^ f I1 )); :-: (:oupper (lista Ik] . grados t j I ) num:num*30,. erse if (toupper(l-ista Ik] .grados ijl ) rRrl num: num + 24,. e-lse if (toupper (t_ista Ik] . grados t j I ) vJ num:num+18; el-se if (toupper(l-istaIk] .grados tjl )'D' ) Unidad 4: Estructuras

Volumen 3: Tipos de

Oatoffi

Copyright tBM Corp. 20OS Los materíales dercurso no pueden ser reproducidos en parte o en su totalidad sin el previo permiso escrito de lBM. @

Q.

o o o o o o o o o o o o

:e

o o o o'a o o o o o o o o o o o o o o o o

t ?t t A),

I I

I

o p i

Introducción a ia

^t

--..

)

- Calcular e1 promedio de NoLas de1 estudíante */ pri = (double) num / Ig.O; - Imprimir los detalJ-es de1 estudiante */ - fraprimir eI noid del esLud,iante /

prantf ("E-I ncid def estudiante es: gs\t,,, - Imprimir el- nombre del estudiante *,/ prrntf ("Ef nombr:e ciel estudiante es: \ ?s\t',, r i.au ik] .nor,b¡e); - Im-orimir el pN de] estudi-ante -/

o o o o o o O

Esi:Ciante

L_r.:Lr-- t/ lr-:Jl

__1\ o=_L

€s:Jc:¿r,:+

listaIk].ncrd)

;

es: lE\:_tr,, Fn);

i

El código C finatiza aquí...

La estructura de registro cel estudiante es bastante clara. stempre que fueron necesarias. como se pudo notar:

se hicieron las validaciones

se aceptó soro ras retras A hasta

' '

ra E para ras carificaciones. Para calcular el Promedio de Notas, se usaron los 'números mág¡cos' 30,24, 1g, 12 y 6' Éstas son las notas asoc¡adas con las respectivas cafificaciones de la A a la E, multiplicados por3 unidades (ejempro: 30= io * 3,24=g"3etc.,¡.

'

Dado que, num es de tipo entero, antes de calcular el gpa, se convierte al t¡po f -loat.

Este ejemplo ilustra el uso de estructuras su declpración y sus usos en un programa.

Fin del Ejempfo 4.g

Volumen3:Tipo@ .

Unidad 4:

@ Copyright tBM Corp. 2005 Los materiares der curso no pueden ser reproducidos total o parcialmente sin el permiso previo escrito de lBM.

Estructuras 6i

l.t.dr""ió" l" P. "

el Estudiante

3. Tipos de Datos Definidos por er usuario C permite al usuario definir sus propios tipos de datos. La sentencia

typedef

permite

a los usuarios definir nuevos tipos de datos que son equivalentes a los tipos de datos existentes. un nuevo tipo de dato puede ser definido como sigue:

t¡,pedef tipo_ex. stente nuevo_tipo;

tipo-existente se refiere a cualquier tip'o de dato estándar como int, char, otros tipos de datos definidos por el usuario previamente que estén disponibles. Ef nombre del nuevo tipo de dato definido porel usuario es nuevo-rrpo, siguiendo Aquí,

fl-oat u

las reglas para formar identificadores. Esto ás sólo un nombre nuevo dado a un tipo de dato previamente definido. No existen diferencias fundamentales entre el nuevo tipo de dato o el definido previamente o el tipo de dato estándar. sea la siguiente declaración: *r¡¡aÁ¿t

:--

c--_

- ,

La declaración anterior define un nuevo tipo de dato flamado a r-nt. Con esto, se pueden declarar variables como sigue:

anio

que es equivalente

anio A, a, :-*.],:.:-::.:::::c,. Se puede usar el

t\ipeieí

anterior y declarar las siguientes variables también:

-l-

En este caso se declara x arreglo de enteros.

y:

como arreglos del tipo

. se pueden también decrarar equivaientemente

typedef inr anio.:, anio X, y,.

anio,

gu€ son realmente un

C; rc siguiente.

_;

A continuación se presenta cómo se usa la sentencra ;,.,p.1e: con estructuras.

tlpedef strucc

{

m i oml-. -.

miemb::c_2;

;, ^-"-^ -.

)

nuevo-t ipo,.

Se puede usar este método para definir un nuevo tipo:

typedef struct { char noid[9]; char nombre [4 O] ; int a-ltura,. Unidad 4: Estructuras

Volumen 3: Tipos Oe

Dato@

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

(0.

o o o o

I

o o o o o o o o o o O

o o o o o o o o o o o o o o o o

3 - ;a cel Estudiante

i_ .u oa ? ó I

?

::^

C

Las variables se pueden declarar como sigue:

regi st-o_cie_estudiante alumni, est_pt:i m€:_a:t : Es recomendable hacer uso de la sentenciá

Permite definiciones

'

estructuras.

'

No se necesita escribir

y

struct

Asignar un nomcre

'

,,,..

l_

;

rypedef por las sigu¡entes razones:

declaraciones concisas

se referencia a una estructura

de varra¡les basados en

nombre-estruc¡-r::ra

reoetir1as vpces cuando

a una estructura, que sugiera su propósito,

declaraciones más legibles.

hace

ras

se llego al final de la drscusión acerca de las estructuras. Es imporlante notar aquí que una variable de estructura puede ser pasada y retornada a una función tal como cualquier otro tipo de dato estándar.

4. Uniones Las uniones son similares a las estructuras. Af igual que las estructuras, éstas contienen miembros cuyos tipos de dato pueden ser diferenies. En una unión, los mrembros comparten el mismo espacio en memoria. La razón principal para el uso de una unión es ahorrar espacio en memoria. Esto es especialmente ¿i¡t si, en una apticacion, sólo uno de los miembros se usa bajo una condición. Los valores no tienen que ser asignados a todos los miembros al mismo tiempo. rrni Áurrr v_:

ñ^ñ^-^ -tulLJj

j=e- :^ irLr

- a_

erJ:)ro_

J;

La manera de crear variables y usarlas es de la misma forma que Considere por ejemplo, la siguiente definición de unión:

en strucr.

uni on {

j.nt x,' float y,. char z;

o

o o o o o o

Introduccicn a ia Prcci-anracr¡:

l-

h

^.

se definen tres variables a, b, y c, fas cuales son uniones. En la unión, se han definido tres variables x, y y z (cada una de un tipo difererente). Cuando a' debe entender que es una estructura con miembros x, y yse considera la variable z. En una unión, sin embargo, los miembros x, y y z de la variable a comparten el mismo espacio de oru. un i¡rf ocupa más memoria que uñ char, un floar 3:::r:.^taT^:;^1"1: 'ránl"nñ;i,í ocupa más memor¡a que ur int. Existen muchas tareas o" que deben

!

Volumen 3:

Unidad 4: Corp. 2005 .tos materiales @delCopyright tBM pueden

curso no ser reproducidos total o parcialmente sin elpermiso previo escrito de lBM.

Estructuras

Og

lntroducción a la

Gufa del Estudiante

hacerse cuando se usan uniones, pero todo esto es tomado en cuenta

por

el

Los miembros de una unión pueden ser de cualquier tipo de datos, arreglos

o

compilador.

estructuras. Se pueden también usar uniones con arreglos. Al usar el 'operadorlunto, como en las estructuras se hace referencia a cualquier miembro de la unión. Se puede realizar lo siguiente para hacer referencia a un miembro de una unión:

e

fl

,l

.t

b.z Por lo tanto, una unión en C es bastante semejante a una estructura. El uso de unión depende de sí ef ahorro de espacio es vital para la aplicación

o

Unidad 4: Estructuras

Volumen 3: Tipos de Datos Estructurados en

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

C

6¿

o o o o q o o o o o

3.:ra

::l

Estuclante

lntroducción a la Proorarna:i:-

Resu rnen Ahora que ha compretado esta unidad, usted debe ser capaz de: . Explicar cómo declarar estructuras en C.

' ' '

o o o o o o o o o o o o o o o o o o o o o o o o o o

Discutir el uso de las estructuras en la solución de problemas

programas en C. Describir er uso de tener tipos de daios definidos por el usuario. Definir uníones y explicar cómo su uso difiere del de las estructuras.

a

través de

ol

o

Volumen 3: Tipos ¿e Oatos gstructurados en C

Unidad 4: Estructuras- 65

Copyright

@ tBM Corp. t::l?!yuo"n' r"i2005 Los materia tes del iáórod ucidos tora "u elpermiso o parcialmente sin p*uü de lBM.

""[rito

I

lntroducción a la prógramación con C

Guía del Estudiante

Unidad 4: Examen de Autoevaf uación 1) ¿Cuáles de las siguientes son una deflnición correcta de una estructura? a) struct { int struct; float

y;

t; ' b) struct { int x; float y; ) et

C) struct

{

i n+L a f,tt

float l¡ ) st

r.

y;

F.

d) Todas fas anteriores.

2)

Al igual que los arreglos, las estructuras no pueden contener múltíples elementos de datos de diferentes tipos. a) Verdadero.

b) 3)

Falso.

pueden ser parte de una estructura. Constantes de cadena. Variables enteras.

a) b) c) Constantes enteras. d) Constantescarácter.

4) ¿Cuáles de los siguientes tipos de datos son válidos dentro de una declaracjón de unton'1

a) Tipos de datos primitivos. b) Tipos de datos definidos por el usuario. c) Ambos (a) y (b). d) Ninguna de las anteriores . .

Unidad 4: Estructuras

Volumen3:

TiposOeOáffi

@ Copyright tBM Corp. 2005 Los materiales def curso no pueden ser reproducidos en parte o en su totafidad sin el previo permiso escrito de lBM.

o o o o o

o o o o o o o a o o o o o o o o o o o o o o o o o a o o o O

o o

Gu,¿ :e_!studiante

-{)

Introducción e

l¿

Programación con C

considere que se accede a una variabre estructurada esie caso, ¿cuáles de los sigurenies identificadores como ¡..b. c.c se reíieren

a

estructuras?

lor.

a) a/ b, cyd b) a. byc c) a yb d) Sólo a 6)

Considere la siguiente definición de una estructura.

s:ruct

{

I nr

float i¡

y,.

h.

¿Es válida la asignación a. a) Verdadero.

b)

x = u.\,, ?

Falso.

La siguiente es una definión várida de un tipo estructura

7)

tyoedef struct

{

i ni- w.

float .|

a) b) 8)

mr Prop.i a

y,. ,.

Verdadero. Falso.

Los tipos de dato definidos por el usuario se definen usando la palabra reservaoa de C. ^\ struct d)

b) -rn i ón c) typedef d) Ninguna de las anteriores.



¿cuáres de ros siguientes es un uso correcto de typedef?

D) :'.'pecie: :.ca: n:\-ar; c) :','pede: f loat char miVar,. ul .{\

-,,^^r^€ __r'j-r€ae

^}a-v nombre taOl ; I crtqL

O

o o o

o-J o o o

Volumen S: frpos ae Oatos

EstructuEd[$T _

UnioaoZlEsiffiEs-

Copyright IBM Corp. 2005

. . ^L-¿^,^ L* T:::l?:s-detcubdno o parcnlmente sin @

pueden ser reproducidos tota|

elperñriso previo escrito ¡;lé-M."-'

En

varrables cje

oz

Introduccíón a la pro'gramación con

l0)

C

Guía del Estudiante

¿cuáles de los siguientes es una definición correcta de una unión? ^\ untoni d)

int x; float y; char z; J

rr .

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

d) Todas las anteriores

Unidad 4: Estructuras

Volumen 3: Tipos de Datos Eatrü¿turados en

Copyright tBM Corp. 2005 Los materiales delcurso no pueden ser reproducidos en parte o en su totalidad sin el previo perrn¡so escrito de lBM. @

C

6g

e

o o o o o o o o o O

a o o o o o o o o o o o o o o o o a o o o o o o a o a a o o

ot

o'-

o O

o

Guía del Estud¡ante

lntroducción a la ProgramaciÓn co¡

Respuestas a la unidad 4: Examen de Autoevatuación 1) b y c 2)b 3)b 4)c

s)b

6)a 7)a 8)c e) byd r0) d

Volumen 3: Tipos de Datos Estructurados en C

Unidad 4:

Copyright tBM Corp. 2005 delcurso no pueden ser reproducidos total o parcialmente sin el permiso previo escrito de tBM. @

Los. materiales

Estructuras

69

C

Introduccíón a la programación con C

Gufa del Estudiante

a

Página dejada intencionalmente en blanco...

0)

Unidad ¿: eltructuras

Volumen g:

@ Copyright tBM Corp. 2005 Los materiales delcurso no pueden ser reproducidos en parte o en su totafidad sin elprevio permisó escr¡to de lBM.

a o o o

GuÍa oei Estudiante

O

o

:cn

UnidaC 5: Laboratorio de Estructuras

0'

a o o o

Introducción a la Prooran-iación

Objetivos de Aprend izaje Al final de esta unidad, usted será capaz cje.

. . .

Usar estructuras en una situción de solución de problemas.

Desarrollar algoritmos para un probléma que involucra el uso de estructuras. Escribir un programa en C para impfementar una algoritmo que usa estructuras.

O

o o o

o O

a o o o a ¡ O

o O

o o o o o o o o a o o o o

or ,OJ o o o

Volumen 3: Tipos de Datos Estruclurados en C

Unidad 5: Laboratorio de

@ Copyright IBM Corp. 2005 Los materiales del curso no pueden ser reproducidos total o parcialmente sin elpermiso previo escrito de lBM.

Estructuras

71

C

Introducc¡ón a la programación con C

Guía delEstudiante

Ejercicios de Laboratorio 1)

considere ra estructura de una fracción mixta, que se da a continuación. struct fraccion_mezciada i int parte_ent era int numerador; int denominador:

0

,.

It

li,ilr,j."r

fracciones mixtas

e

y B que son ras entradas suministradas por er

Escriba un programa que caicule: ¡ La resta deAmenos (A B¡ asignándola a la fracción mixta c. La multiplicación de a por (A B) asignándola a la fracción mixta n. respectivamente, y muéstrelas. . lmprima las fracciones.

g

e

*

Declarar una estructura que consista de tres miembros:

. Número del libro (un entero). . Código del fibro (un areglo de g caracteres) . Precio del libro (un valor f ioar).

.

Escriba un programa que tome como entrada 10 líbros y muestre los detalles de los mismos. 5)

0,)

Establecer un fistado de suscriptores de una revista. Los datos de entrada de cada suscriptor son:

. Nombre. . Cédula. . Mes de inscripción. . Año de inscripción. Realizar la búsqueda de cada suscriptor por nombre, Iuego del ingreso de toda la información.

I :

I

f

Unidad 5: Laboratorio de Estructuras

Vofumen 3: Tipos de Datos estructuraOos en C

Losmateriar"rd"?"c,o,3JXtJii,t"T":"9;Í"??3or",o"senparre

Fr! ,

¡=t_\N Ysv.lu5

o en su totalidad sin el previo permiso escr¡to Oe

tánli

Z e

O

o o a o o o O

o o o o

o o a o o o o o o o o o o' o o

E-ry---n-

¡------------

--nr-

-

a:I

rt_@

Introducción a la Programación con C

(Código del Curso: Cy320) Versión 2.0

Guía det Estudiante

Vofumen 3: Tipos de Datos Estructurados en C

I

a o o a o a o o

I ¡

IBM Learning Services Worfdwide Certified Material

Información de Publicación Esta pubficación ha sido producida usando Microsoft Word 2000 para Windows.

2OOO

y Microsoft powerpoint

Marcas Registradas IBM @ es una marca registrada de Intemational Btrsiness Machines Corporation.

Otras compañías, productos y nombres de servícíos pueden ser marcas comercíales o marcas de servicio de otros.

Marcas Registradas de otras compañías como se muestra Windows

Microsoft Corporation

Red Hat Linux

Red Hat

Edición Septiembre de 2002 La información contenida en este documento no ha sido someüda a ninguna prueba formal de IBM y es distribuida básicamente "como es" sin ninguna g"rátf" i" ."" expresa o implícita. El uso de esta información o la implementación Ol cualquiera de estas técnicas es responsabilidad def comprador y dependerá de la habilidad de éste para su evaluación e integración en el ambiente operacional del cliente. A pesar de que cada tema ha sido revisado por IBM para su exactitud en una situación específica,'no h.ay garantía de obtener el mismo resultado o uno similar a éste en otra sitlación. Los clientes que intenten adaptar estas técnicas a sus propios ambientes lo hacen bajo su propio riesgo.

Gopyright International Business Machines Corporation,

derechos

reservados.

ZOO2.

.

Todos los

Este documento no puede ser reproducido en su totatidad o en parte sin el previo permiso escrito de lBM. lnstrucciones especiales para la impresión de éste curso

No deben removerse las páginas en blanco que puedan aparecer al final de cada

unidad y entre dos unidades. Éstas han sido insertadas intencionalmente.

o o o o o o o o o o o o o o o o o o o o

o o o o o O

o o o o o o o o o o o o o o o o o o o o

Contenido Unidad

l:

programar con Arregfos

Objetivos de Aprendizaje

l. lntroducción

I

2

2. Declarar un Aneglo en C 3. Inicializar un Aneglo

J

4

4. Desanoffar y programarAfgoritmos con Aneglos 5. Cadenas de Caracteres en C Resumen

q

24

27

Unidad 1: Examen de Autoevafuación Respuestas a fa Unidad l: Examen

28

de Autoevafuación

30

Unidad 2: Arreglos Mufti-Dimensionales Objetivos de Aprendizaje

31 31

1. Introducción

32

2. Resolver problemas con Arreglos Bidimensionales Resumen

33

45

Unidad 2: Exámen de Autoevaluación Respuestas a fa Unidad 2: Examen de Autoevaluación Unidad 3: Lab. programar con Arregfos Objetivos de Aprendizaje Ejercicios de Laboratorios

Unidad 4: Estructuras Objetivos de Aprendizaje 1. Introducción

2. Defrnir y Usar Estructuras 3. Tipos de Datos Definídos por ef Usuario 4. Uniones Unidad 4: Examen de Autoevatuación Respuestas a la Unidad 4: Examen de Autoevaluacíón Unidad S: Laboratorio de Estructuras

46 48 49

49 50

5l 51

52 53 67 68 71

74 75

Objetivos de Aprend2aje Ejercicios de Laboratorios

75 76

o o o o o o o o o o o o

o o o o o o o o o o o o o o o o

Guía del Estudiante

fntroducción a la

ramación con

Unidad 1: Programar con Arreglos Objetivos de Aprend izdle Alfinalde esta unidad, usted será capaz

' ¡ ' . ' .

de: Expficar ef concepto de anegros en ra sorución de probremas Definir qué es un anegto

Describir cómo acceder a un eremento de un anegro Explicar cómo usar los aneglos en algoritmos

Desanoilar argoritmos para probfemas que requieren er uso de aneglos Explicar cómo convertir algoritmos en programas C.

o o o o o o o

o o o O

o o o o o o o

Volumen3:Tipos¿@

Unidad

t:

erogramar

uos materiales del curso no pueden ser reproducldos toüat o parciafmente sin elpermiso previo es'crito

de fBM.

coñ@;

r

C

l. Introducción En las unidades anteriores se estudiaron los.tipos de datos simples, tas estructuras de las construcciones iterativás. Esta unidao or'crt" lorl¡p"fá" 0"t"", 3íH:l#:ffJ':iu¿l Muchas aplicaciones requieren el uso de múltipleg elementos de datos que tienen una característica en común. Argunos ejempros.orrnó. ron,

o . '

Las carificaciones obtenidas por ros estudiantes en una crase. Los nombres de los empleados en una compañía.

La artura y peso de todos ros pacientes admiüdos en un hospitar. Hasta ahora, el único método que conoce para almacenar tas calificaciones es en una variable' como por g'emplo, notas. pero,' ¿úmo se almacenan las calificaciones de 100 estudiantes?' una forma de hacerlo ei.tener 100.variabfes, como por ejemplo: notasl, notas2 notas3. Sin embargo, sería más simple referirse a rn" colección de calificaciones con un sofo iJentificaooi llamado notas, y aún ser capaz de poder referirse a ras carificaciones de un estudiante en particular.

!

Esto se hace usando una estructura llamada aneglo. Técnicamente, los aneglos son estructuras en memoria que ayudan a almacenaimúrtipler élérénioriá datos que tienen una característica común. un aneglo rá ü iár"runc¡a con-un ,Ln nombre, aungue puede tener múltiples elementos de áatos. Los efementos de ¿"iol'¡no¡uiduales pueden ser de cualquier tipo, tal como enteros, flotantes o caracteres. pero dentro del arreglo, todos fos elementos de datos deben r"i d" un iolo tipo. si r" t¡"*n un arreglo de 50 efementos, todos eilos deben ser de un mismo tipo, por ejempto int. No se tener los primeros 20 elementos de tipo de dato int y et rósto de eilos de tipo :[:"J Los arreglos son un almacén de múltiples elementos de datos. Las dos formas en las cuales los arregfos se pueden hacer jon:

o

Una sola dimensión La Figura

i.1 ilustra un aneglo unidimensional.

.12 .24 ol

.65 of Figura

Unidad

l:

Programar

l.l: Arregto de Unidimensional

*

2 @

Copyright tBM Corp.2002

Los materíafes del curso no pueden sér reproducidos en parte o en su totalidad sin el previo permiso escrito de lBM.

o o o o o o o o o o o o

Guía del Estudiante

.

Introducción a la Programación con C

Dos dimensiones La Figura 1.2 muestra un arreglo bidimensional.

12

-5

u

u

5

65

7

88

q

8

32

66

O

o o o o o o o o o o o o O

o o o o o o o o o o o o o o o o

o b

o o

Figura 1.2: Arreglo Bidimensional

Conocemos acerca de vectores. Un vector no es más que un arreglo unidimensional. Por otro lado, un aneglo bidimensional se denomina matnz en matemáticas. La dimensión tambien se denomina el orden de un areglo.

En el aregfo unidimensional que se muestra en ta Figura 1.1, el orden es 5. En el gneglo bidimensional que se muestra en la Figura 1.2, el orden es 4 x 3, es decir, 4 filas y 3 columnas.

2. Declarar un Arreglo en C En esta unidad, se va a aprender solamente acerca de los aneglos unidimensionales. Se puede declarar un aneglo unidimensional de la siguiente formá: int-

¡ [ql

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

24 2

65 7

n)); /* Ingresar eI proximo > 0 * / printf("fngresar un enetero > 0\n"); do{

O

o o o o o o

a a o o o

o o o o o o o

o o o o o o o o o o o o o o o o o

Introducción a la Programación con C

scanf (u?du, CProximo) ) while (proximo 'E' ) ; t

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

{

Volumen 3: Tipos de Datos Estructurados €n C @ Copyright IBM Corp.2002 Los materiales del curso no pueden ser reproducldos total o parcialmente sin el perm¡so previo escrito de lBM.

65

Guía del Estudiante

,/* Calcular el n.o* printf ( "Calif icación deL est.udiant.e ?d\n,,, k) num = 0,. for(j=O;j=y

= =x

MCD(x,y-x)

six !2 MCD(8,4) ya que 12 > 4 MCD(4,4) ya gue B > 4 MCD (0,4) = 4 l{CD (1-2

= =

Este resultado coincide con el que se obtuvo anteriormente. A continuación se escribirá una función recursiva en c que calcula el MCD de dos enteros positivos.

El código C incia aquí...

int

x, int y) (x==s¡ if { . reEurn y;

mcd(inE

{

)

t

else if (y == o) i return x;

t

Volumen

¡.

b b I

@ Copyright tBM Corp.2002 Los materiales del curco no pueden ser reprodi.rcldos total o parciafmente sin el permiso previo escrito de IBM

a

o

a

Todos han estudiado el MCD en los cursos de matemáticas de la escuela. Cada uno, quizás conozca como cafcular el MCD de dos enteros positivos. srpongá ;ue se debe encontrar el uco (L2 ,76). Cualquiera sea el método que se use, se puede facilmente determinar que el McD (l-2, 16 = 4. Uno de los métooos más simple" el divísor de cada uno de tos enteros. Los divisores de 12 son 1,2,3,4,6y ", "nurerar 12. Los divisores de 16 son-1, 2,1,8_y 16. A partir de estos se puede observar que los divísores comunes de 12 y 16 son 1, 4. Por lo tanto, 4 es et MCD. Pero, existe un método que .? .y no requiere enumerar los divisores de cada uno de los números. Esto se origína de la siguiente definición recursiva:

o a o o o o o o o o o

,r

Introducción a fa

-

Introducción a la programación con C

Guía del Estudiante

)

else if

(x >= y¡ reEurn

) else

{

mcd

(x-y, y)

,-

{

reE.urn mcd (x, y-x)

;

] )

El código C finaliza aquí

Nota: La verificación y=9

! x=0 s¡rve como los casos base de la recursión. Así que, mientras no haya varores negativos, ef argoritmo terminará. Fin del Ejempto 3.2

se fortalecerá

er entendrmiento de la recursion con otro ejempro.

Ejemplo 3-3: Encontrar ros Términos en ra serie de Fibonacci La serie de Fibonacci es una serie infinita interesante de números que sigue la forma: 1, 1, 2,3, 5, g, 13,21, 34, 55, y así sucesivamente

si se observa el patrón cuidadosamente se dará cuenta que los primeros dos números de la serie de Fibonacci son 1y próxímo Ef númeroes siempre la suma de los dos 1. números anteriores' A continuaó¡ón, se'es cribirá una función recursivá én ó qr" retorna el n'n número de Fibonacci. por ejemplo, f ibonacci (o ) debe retornar g, f ibonacci (e) debe retomar 21,y

frbonacci (ro¡

La siguiente es la función recursiva para retornar autoexplica.

¿spg retomar55.

el número nth de Fibonacci.

Es

El código C inicia aquí...

int fibonacci (int n) { if (n 100); /* Ieer e1 arreglo mismo */ for (k = O; k < tam; ki+) i printf("fngresar 1os elementos de1 arreqlo\ ?d\n", k) ; scanf ( "?du, ccaja Ik] ) ;

o O O

a a

a o a o

o

)

/* Leer el número a ser buscado */ printf ("Ingresar e1 número gue a buscar\n"),. scanf(n?d", &num);/* Invocar busqueda e imprimir eI resultado *,/ if (busgueda(caja, tam, num) -= -1) printf("?d no fue encontrado en eI arreglo\ \ft,,, num) ;

a

o o o o o

o o o o o o o o o o

Introducción a la Prooramación con C

else

printf("*d fue encontrado en e1 arreglo\ \n", num) ; )

int

busgueda

*n¡i:

lin|-

-*J

int k whi ]e (k < tam) if

inl-

'

f-qlltr --

in¡ r¡lu

-'.-\ tlul¡l,/

I

1

{

(*(caja + k) == num) return (k) ; /*num encontrado en k

*

f

ef se k++;

O

]

o o o a o o o a o o o o o

ret.urn (-1) ;

o o

*

/*

num no encontrado * /

] El código C finaliza aquí Fin del Ejemplo 1.4 En el ejemplo anterior, se ha pasado elaneglo como argumento a la funcióh busqueda. La dirección del primer elemento del aneglo se pasa a la función, la cual es aceptada como un puntero en la función.

Volumen 5: Punteros en C

Unidad Corp.2002 Los materiales del curso no pu€den s€r reproducidos total o parc¡almente s¡n elperm¡so previo escrito de IBM

'

@ Copyright IBM

l: Punteros

I

Introducción a la Programación con

C

Guía del Estudiante

Ejemplo 1.5: ltercambiar los Elementos de un Arreglo

int

Considere caja t1001 como la entrada. Se debe escribir y usar una función una función llamada intercambiar, la cuat anegla el anegb dé elementos en orden inverso. Un algoritmo simple para esto es conl¡derar el primet elemento (tope) y et último elemento (base), y intercambiar sus contenidos. Entonces se mueve'at'próimo elemento desde ef tope y al elemento previo a la base y se intercambia sus contenidos. El proceso continúa hasta que la mitad del aneglo se haya recorrido. El siguiente programa realiza esa la tarea:

Elcódigo C inicia aquí...

#include void reverse(int *caja, int n); void swap (int *x, int *y); mainO { i-nt ca j a [100] , k, n; /* Leer el Eamaño deI arreglo */ printf ('t rngresar e1 tamaño de1 arreglo [1, 100] \n', qot scanf ( u?du, en) ; ) whiJ-e (n < 1 ll n > 1oo);

/* Ieer el arreglo mismo */ for(k=0;k Volumen 5: Punteros eh C

Unidad 3: Punterc @ Copyright tBM Crirp. 2002

Los materiales del curso no pueden ser reproducldos totat o parcialmente sin el permiso previo escr¡to de IBM

Avanzados

21

Guia del Esiucian:e

2.2. Usar el Operador de Adición con punteros En fa primera operación, la dirección. en la variable puntero se torna, y se mueve por e/ número representado por un opeándo entero. consioere ro síguiente: ptr + 4; Ef valor retornado es otra dirección, 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 opérativo p.r" ud" entero, d ta ;?r"",:",ff r5"HHoJ"Lln "rúnados PCr+4t'2

á prr + B De este modo, si a pcr se re ha asignado Esto es equivafente

ra dirección roze, Ia expresión ptr +4 resurtará en 103e, donde ef 5ro eremento está disponibre. Note que ro:e _ 1028 eS ocho bytes, y dado que cada entero ocupa dos bytes, el número actual de elementos pasado es sófo cuatro' Esta es la razón porque de dato asociado con una variable puntero es importante. "t-iipo

2.3. Usar ef Operador de Resta con punteros La segunda operaCióñ, _ 0 si la primera cadena es mayor que lat segunda. char strcat (char * const char *): Una fUnción que toma dos cadenas y concatena (une) las dos cadenas agregando la segunda cadena a la primera.

o int .

*,

*

,

Volumen 5: Punteros en C

Unidad 3: Punteros Avanzados Copyright IBM Corp.2002 Los materiales det crlrso no pueden ser reproducidos total o parcialmente sin el perm¡so prev¡o escrito de IBM @

29

C

Note que algunas de estas funciones toma const char ". Esto implica que el puntero se declara como una constante, de manera que ningún cambio se háce al parámetro en la función' Tome por ejemplo, la función donde la primera cadena es sobrescrita por la segunda cadena. La primera =a..-py caOeña debe ser modificada, mientras la segunda no debe- De acuerdo a esto, se ven los parámetros en la petición char*,

const char*.

cuando se declara un aneglo de punteros, fa'memoria se reserva sólo para el arreglo. Cada elemento del aneglo es un puntero y por tanto debe tipicamente estar apuntado a otras posiciones de memoria. Esta posiciónes de memoria no son reservadas cuando se declara char *strings ITAMANO] ; . En. el e.Jgmplo anterior, se introdujo una característica significativa de C, llamada asignaciÓn dinámica de memoria. Normalm"ni",-iá memo-ria se ásigna cuando el programa se compila. Pgro la asignación dinámíca de memoria posponé la asignación de memoria al tiempo de ejecución. La ventaja de esta facilida'd l"-posibilidad de crear espacio para las cadenas de caracters. En este ejemplo, "r se tiene espacio tanto como se necesita' De manera que se declara una cadena simple de 100 caracteres, se lee cada cadena por turno en éste, se calcufa ta fongitud o'e la cadena y se asigna memoria basado en el tamaño a través de la siguiente función: voi-d *mal loc (int, tamano) ;

Aquí:

o

tamano es el espacio requerido, el cual se obtiene por

sizeof (char)

strlen(string)

*

.

o str]en (string) o

retorna la longitud y se multiplica por el tamaño del carácter, elcual es 1 byte. mal-loc es la función que asigna memoria dinámicamente. Retorna void *,y se ha convertido ? char *, ya que cada eremento de strings es un puntero a carácter' mall-oc se puede usar similarmente con todos los otros punteros en C.

una vez que la memoria requerida es asignada a través de marloc, se usa simplemente fa función srrcpy para copiar er string a strings Existe otra función, la cual es útil para liberar memoria dinámicamente. Esta eJ void f ree (void Esta función libera el espacio de memoria asígnado por ma1loc de manera que pueda ser asignado nuevamente. Aunque no se ha áplicado esta función en el ejemplo, es muy útil en ef desarrollo de aplicaciones try gr"nbes. Es una bueni piJctica liberar memoria que no requiera elprograma.

til .

");'

Finalmente, se compara la primera cadena con todos las otras cadenas y se muestra el resultado. La comparación se hace lexícográficamente, fo cuaf significa'que ta palabra es menor que ya a!9, que el segundo carácter p viene 9P9 antJs de f án el alfabeto. Este es el mismo métodb que se usá en los diccionaiios. La satiáá áér piágrrra es ta siguiente:

fngrese 4 strings: String 1: green Unidad 3: Pu

Los materia,"" 8"?lÍlJinll,'3.[f,",íi;??33,o0,"¡oos total o parcialmente sin el permiso prevío escrito de tBM.

or oi ot o' o

e .f .f e

a o o o o o o o o o o o o o o o o o o o o o o o o o

o o

o o o o o o o

o o

Guía del Estudiante

Introducción a la Prooramación con C

String 2: ye11ow String 3: blue Ql- rinn

1.

dréañ

St.ring 1 green String 1 green String 1 green

String 2 yellow at-rinn

? l.r'l rro

ve¿¿¿¡Y

String 4 green

Los strings después de 1a concatenación son: green color yellow color blue color green color Fin del Ejemplo 3.1

5. Puntero a Estructura Se puede también tener punteros apuntando a estructuras. Suponga que se tiene la siguiente estructura: struct persona { char nombrel45l; int edad,. f loat. peso,-

); Se puede crear una var¡able e inicializarla como sigue:

struct persona estudiante = {".lack",

!t,

65.5);

Se puede también definir un puntero a esta estructura: ql- rrlcl.

ñarnombre

sptsr- >edad spEr- >peso

Se ha accedido a los miembros indíviduales de una estructura usando el operador =echa - >. Se puede pasar el puntero a una estructura o una función como un larámetro, así que dentro de la función se puede acceder y usar cada uno de los -iembros de la estructura.

\/clumen 5: Punteros en C

Unidad 3: Punteros Avanzados Copyright IBM Corp. 2002 Los materiales delcurso no pueden ser reproducidos total o parcialmente sin el permiso previo escrito de IBM @

3l

lntroducción a la

ción con C

Gúa delEstudiante

6. Puntero a una Función una función en c no es una variabF;jl:targo,, se como tar. Es posibre definir punteros a una función, a óuai'ór"0" ser coloéda entrata arregtos, paiaol a funciones retomar de las funciones' er y uso-trpico o" ,n una función radica en et hecho de que una función misma p,áá" ser pasada como un " argumento a otra funcjón. situación se present" t'"náá Tal funcíón, r"rlriJá corno ra primera tareas usando función, reariza función. r-a primeiá-i;..¿; iicesita *otra .ono."i er nomore de ra segunda función para usarfa oentro ¿e eila. Áh;o,'!¡ r, ."g;.J;;;;ión cada vez, ¿cómo manipufa ra primera -eses diferente runcün' ásto? üna rorma construcción switch -.. case tener una e invocar fa segunda función ,."r"uáni"l para realizar esto es recibir La forma ideal fa función en si m¡Jm"-aoro un. argumento, de esta la primera función ilvoca ta segunoa función rár" tr*és de ra variabrerecibidaforma, como de función. A continuac¡on, se ánieüer¿ " mejor :[;;?r1t"nto través de un

p*tá

*a

;;ü;

Fl"#lJ;

a.tr Encontrar

ta Raíz cuadrada de un Número usando punreros a

suponga que se tienen cuatro funciones, que existen independientemente realiza diferentes y cada una o"penJi"noo dá a ta.r, como encontrar ra cuadrada de un entero -cálculos. raíz dado dé éniraoa, "nir"or, la.iz cuo¡cade un dado de "nóoni*'ü ;:.:X?,.?.:THX1,,?.[H:1"'. "nt"'.o dado de ánt,.ou ", pi¡'ál ;; "ñt"ro entero dado

;

Hay además otra función que crea una tabla de dos columnas, columna es ef número serial y ta-slgunda column" ti"* ros varores donde ra primera asociados. Estos valores se generan oepenoienoá oá tipo o" uurin""Iion qr" necesite veríficación puede ser para la raíz ser hecha; ra cuadrada, la raíz.ao¡"", etc. Esta función a función recibirá ser lfamada como

,; ogr;"nto; dependiendo

ta

en cuat tabla se genere.

Los siguientes son ros prototipos de ras cuatro funciones:

. r o .

rnt raizCuadrada (inL) ; . inE raizCubica (int; int esprimo(int); int espaLi-ndrome (int) ; Ef siguiente es el programa completo. una expficación def uso de fos punteros funcíón' basado en el piogra*;;;;; continuacíón, ,.

sigue ar programa:

Ef código C inicia aquí...

/* Archivos de Cabecera */ #incLude

#include

umen @ Copyright tBM Corp.20O2 ,t-os __ ¡ ^_ materiales del curso no pueOen'seiieproducidos total o parcialmente sin el permiso previo O" lg^r.

"r"rito

teros en C

a

o o o o o o o o o o o o o

Guía del

O

o t, o o o o

o o'

Programe::- :_-

/* Prototipo de la función raizCuadrada */ int raizCuadrada(int x) ; /* La función principal comi-enza aquí */ main0 { /* Se 1lama da 1a función generarTabla con argumento raizCuadrada * / generarTabla ( rai zCuadrada)

;

)

/* La función principal termina aqui*/

o

o o o o o o o o o o

Introducción a la

/* Prototipo para 1a función generarTabla "/ void generarTabla (inc (*fprr) (int) );

o o o o o o o o o o o o o o

Estudiante

/* La función generarTabla i-nicia aguí */ void generarTabla(inE (*fptr) (int)) { int i; for (i = f ; i = ,A, && \ toupper (ch) 32757); printf ( "El area del circufo es = ?f\n,', \ area_del_circulo)

;

;

)

/* La función main fina:..iza aqul */ El código C finaliza aquí es una macro que define una expresión : . r¿r * radio * proceso radi-o. Durante el de compilación, aree del_circulo se sustituye por la expresión 3.141- * radio * radio. Aquí

area_deI_circulo

Fin del Ejemplo 3.5 Consídere un caso, donde un grupo de sentencias realiza un trabajo. El conjunto de expresiones se pudo escribir en más de una línea. ¿Cómo se hace para representar los

I

deC3l

Avanzados

I Y

o

C

expresión o un grupo de expresiones mmo un solo identificador. La funcionalidad provista por las macros es la misma que las funciones en C, aunque la forma en que el comp¡lador las maneja es un poco diferente a la forma como maneja las funciones. Cuando la macro es referenciada, la referencia se reemplaza por definición completa de la macro. De otra forma las funciones y las macros tienen la misma funcionalidad.

o

o o o o o o

Introducción a la Programación con

@ CoPYright IBM CorP. 2002

Los materiales delqJr5o no pueden ser reproducidos total o parcialmente sin el permíso previo escrito de IBM

Introducción a la programación con

C

Guía del Estu6;e^:=

mismos con una macro? En este caso, cada línea de la macro debe terminar con ej carácter barra oblicua (slash). Ejemplo 3.6: Macros Multi-línea

A continuación se escribe una macro que calcula el MCD de dos enteros positivos. La macro presenta se

a continuación. Note que la macro requiere múltiples líne'as.

Ef código C inicia aquí...

/* Archivo de cabecera */ #include /* Una macro mu1t.i-línea para MCD */ #define MCD while (x l= 0 && y l= 0) \ if(xt=y)x=x*y;\ elsey=y?x;\ if (x == g¡ respuesta = y; \ else respuesta = x,. /* La función main se inicia aqui */ main O { int x, y, respuesta,a,b; /* La entrada x y y aquí */ do{

printf (,'\n Ingresar un entero [1-32't671 : scanf ( "?d", &x¡

)whi1e(x32767)

,,) ;

;

;

do{

pri.ntf ("\n fngresar otro enLero scanf

)whi1e(y32767); "

a=X; h-r'. t "-l MCD

printf("McD de ?d y ?d es ?d :

,,

, a,b, respuesta)

;

/* La función principal finalíza aquí */ El códígo C finaliza aquí

Colo se puede

ver en la macro, tas múltiples líneas finalizan con el carácter \, excepto la última línea. Esta se trata como una sentenc¡a compuesta. También note que en la función main, se ha escrito MCD sin la coma. cuando ef compilador lee esta referencia de macro, esta referencia se sust¡tuye con elcuerpo de la macro.

Unidad 3: Característícas Adicionales Oe C Volumen 6: Tópicos Avanzados 32 @ Copyright tBM Corp.2002 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el permiso previo escrito de IBM

.

a a o

o a o

Guía del

Estudiante

El código C inicia aquí...

/* Archivo de Cabecera * / #include /* Maero multi-1lnea para MCD */ /* La función main inicia aquí */ main O { int x, y, respuesta,uin, /* entrada x y y aqti */

o o ¡

o

o o

oot

printf("\n fngrese un entero 17-327671: "); scanf ( rtd", cx) ; )whi1e (x3276'7) ;

o

o o

oot

o o o o o o

printf

I

o o

I

o o

\n fngresar otro entero 17-32767J:

");

if (x>=y) x=xZy; elsey=yZx; if (x == 0) respuesta = y,else respuesta = x,printf ( UMCD de ?d y ?d es ?;d : ,' , a, b, :espues:a if(x==0&&y==0) printf ("\n Ambos enteros ingresados son O,')

o

o o

("

scanf (r?d'r,&y); )whi1e (y32767) ; a=x; b=y; whil_e (x l= 0 && y != 0)

I

o o o o o o o ¡ o a a o a o o

lntroducción a la programación mn

)

;

,.

)' /*

La función

finaliza aqui * /

El código C finaliza aquí Fin del Ejemplo 3.6 Una referenc¡a a una macro dentro de una programa señala al comprilador reemplazar la

'eferencia por las sentencias contenidas dentro de una definición de macro. Una cefinición de macro puede también contener argumentos encerados dentro de 3aréntesis, como se muestra a continuac¡ón: #define MCD(var_x, var_y) while (var_x != 0 && var_y != O) if (var_x >= var_y) var_x = var_x t var_y,. \

else var_! = var_! t var_x; \ if (var_x == 0) var_reEpuesta = var_y; \ .:,:-fgn6:

T @ Copyright IBM Corp. 2002 Los materiales del q¡rso no pueden ser reproducidos total o parcialmente sln el perm¡so previo escrito de IBM

\

C

IEs:,;: ¿_::

el,se var_respuesta = var_x; En este caso, la referencia a la macro se asemeja a la llamada a la función, como (x y) .

MCD

Ahora' que se ha entendido bien et concepto de macros, se verán las dificultades de usar macros dentro de los programas. conbcer tanto Jas desventajasl venta¡as de las macros' ayuda al programador a decidir la conveniencia de usarfas dentro de los

programas

El uso de fos paréntesis 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) Síse usa este como raizcuadrada (x+1 , y+2) se debería tomar

sqrr((x+1)*(x+1) + (y+2)* (y+z)) Pero por la sustítución 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 modificación en el uso de los paréntesis va a rectificar el efecto secundario ináeseado en este caso. Este efecto secundario ocure principalmente cuando se pasan aigLmentos a tas macros. También se consídera el ejempfo 3.6 del MCD usanob macroJ si un programador quiere usar recursión' bs macros son una mala selección ya qr" no pueden llamarse así mismas recursivamente. sustituir todas las funcíones en un programa con macros no será posibre por sus limitaciones inherentes. Las macros, a diferencia de las funciones, verifica sólo el nÚmero de argumentos pasados, no sus tipos, lo cual que las validaciones de -- implica ' las entradas errores se hace mejor en las fr;;iár;r.

5. Directivas det preprocesador El pre-procesamiento es. ef paso, quef precede a la compilación. Existen ciertas directivas, lfamadas át prwistas rn c, 1", cuales pueden controlar lirggtivas el código objeto producido. La siguiéíte "orplitaáo4, es una tista de estas directivas: . . o o ¡ o r

#if #elif

#e1se

#endif

#ifdef #ifndef #1ine

Unídad 3: Característ¡cal nOicionZlesle C

Volumen 6: Tópicos Avanzados Copyright tBM Corp. 2002 Los materiales del curso no pueden ser reproducidos total o parcíalmente sin el permiso previo escrito de IBM @

j4

ot o o o o

o o o o o o o o o o o o o o o o o o o o o o o o o o o o o

o o o o o a a

q a )o

I

Guía del Estudiante

Introducción a la Programación con C

o #undef El preprocesador incluye los siguientes tres operadores espec¡ales:

¡ defined of

.## Estas directivas pueden aparecer eh cualqu¡er fugar. Sin embargo, se usan generalmente comienzo de un programa, por comp¡lación cond¡cíonal del codigo. El uso más común es tener una sentencia de sal¡da amplia e'l el caso del modo dépuración (debug) y una salida compacta en el caso del modo release ( versíón). A continuación se discuten las directivas del preprocesador.

5.1. #ifdef y #endif

o #ifdef significa'sí definido' (if difined). o #ifdef hace que un bloque de codigo se procese si el nombre de la macro está definido.

Elsiguiente es fa forma general de #

#ifdef ! #endif

:

i f def nombre_de_la_macro

,/* secuencia de una o

más

sentencias

*

/

#endif 5.2.#iÍndef y #else

. #ifndef #ifdef.

signífica 'si no definido' (if not cbfined). Exactamente opuesto a

o #else es similar al else

en la estructura de control

if -else en C.

#ifndef DEBUG /* c6dígo para proveer salida amplia */ #efse

/* código para proveer una salida compacta */ #endif s.3. #¡f La directiva #if se puede usar para probar si el valor de cero o no.

de

una expresión es d¡st¡nto

Lo siguiente es la forma general:

#if

exp

'''otumen 6: T @ Copyright IBM CorP.2002 Los materiales delcurso no pueden ser reproducidos total o parcialmente sin el permiso previo escrito de IBM

Introduccíón a la programacíón con C

, E5rUCrenie

/* sentencias (s) * / #endif 5.4.#etif La directiva #elif se puede usar para verificar múltipres condiciones en secuencía (reduce el número de #endif s). La forma generalse da a continuación:

#if expl /* sentencia (s) *7 #elif exp2 /* sentecias (s¡ *7 #endif

6. Operac¡ones de Manejo de Bits Se va a estudiar el. siguiente ejemplo para considere una unídado"n"to*"ii'ia'cuat entender ros operadores de mane;o de bits. pueoe ériái*n".tado a cuatro orspositrvos de hardware. usando un enterá rirnpr" qr" de. cuatro dígitos. se puede representar la existencia o no de "onririe de narowar-e. estos dispositivás s, er dígito co'espondiente al dispositivo de hardwar" r ertá indica ra presen'a dispositivo, y 0 indica la ausencia de un Jel dt:spositivo.", Los dispositivos y ras posiciones de ros dígitos se muestran en ra Taóra 3.2. Teclado

Dispositivo de

Ratón

Puerto serial para rmpresora

Digito I

Digito 0

CD ROM

Digito 3

Digito 2

Tabla 3.2: Posiciones de los Dígitos y de tos Dispositivos

;:frJfi::ti

larconclusión de la presencia de tos dispositivos ctaramente se necesita ta

La manipulación de bit es una de las características únicas.d" c. Esto se puede aplicar sofamente a operadores integrares;;;" char y inr, con signo o sin signo.

Operadores Lógicos de Manejo deBit Los siguientes son ros operadores rógicos de manejo de bits:

ii

¡ A unidad 3'

i!' fl:,ffiff;".ñ31j","

OR

exctusivo oe

*

o" mané¡o;;;it

catacte@

Volumen 6: Tópicos 4vanzados 36 Copyrighr tBM Corp.2002 Los materiafes det cuiso no pueden ser reproOucíOos total o parcíalmente sin el permíso previo de fBM @

"rtr¡to

o o o

o o o o o o o o o o

o o o

t

o o o o o

o

Guía del Estudiante

Introducción a la Programación con

El operador de manejo de bits AND (&) se usa frecuentemente para enmascarar un conjunto de bits. Sea elsiguiente ejemplo.

a = 37 = 0000 0000 0010 0101 b = 88 = 0000 0000 0101 O11O a & b = O4 = 0000 0000 0000 0100 Ef operador de manejo de bits oR ( l) se usa para cambiar los bíts.

aIb=

119

=

oooo oooo 0111

o1l_1

El operador de manejo de bits oR exclusivo (^) coloca un I en cada posición donde sus operandos tienen bits diferentes y 0 donde los operandos son los mismos.

a ^ b = 115 = oooo oooo 0111 Operadores de Desplazamiento de Bits

oo11

Los siguientes son los operadores de desplazamiento de bits: o - desplazamiento a la derecha

Los operadores de ésplazam¡ento > desplazan al operando, a la izquierda y derecha, el número de posiciones de bits dado por ef operando de la derecha, el cual debe ser pos¡t¡vo. Por ejemplo:

. x > z desplaza los bits en desplazados.

x,

z posiciones a la derecha

. x

o o o o o o o o o o o o

6.1. Operadores de Manejo de Bits - Complemento

o o

Los siguientes son los operadores de complemento de bits: - el comlemento de uno (unario)

o-

El operador unar¡o

o,

y

asigna 0 a los bits

x = 0010 0110 1011 0111 x

i ?

D,

E!t

ñ. E

E x

tfE

,--

E

Guía del Estudiante

lntroducción a la P

Respuestas a la unidad 3: Examen de Autoevaluación 1)b 2)b 3)a 4)b 5)a 6)a 7)a 8)d

e)b 10)

b

o o o o o o o o o o a o O

o o o o o o o o o a o o o o

mación

@ Copyright tBM Corp. 2002 Los materiales delc{¡rso no pueden ser reproducidos total o parcialmente sin el permiso previo escrito de IBM

co'

C

unidad 4: Laboratorio de características Adicionales de C Objetivos de Aprend izaje Al finatde esta unidad, usted será capaz de: o Leer una descripción compr"j" probfema y entender sus implicaciones ¡ usar algoritmos para todas ias0,"-:1 forma oe compte;idad considerándo todas las técn icas de programa cíón prenoiáas a ;";á

' '

;;#",

$i5T,::5:JH"argoritmos

;f;ilJo::5"ntt 'n

en c usando

"r"rqri"r"

de ras características

prosrama completamente runcionar que resuerve el

I

i

I

I

I

I

I

I

I

I

I

I

I

(

I

I

I

I

I

I

{

I

I

I

I

Unidad 4: Labora¡o

{

Los_materiaj",?"i:.?1#llF.[.:?'g":?ll*u",oostotar

I

o parcialmente sin el permiso previo escrito cte IBM

I

I

fl

O

o o o o

o o o

t

Guía del Estudiante

O

o o o o o o o o

b)

completa en español, con las normas de puntüación permitidas. Modificar elcontenido del archivo de texto y crear un archivo separado con las slguientes características :

Todas tas palabras af inic¡o de la sentencía deben estar en mayúsculas. Los espacios en blanco deben ser removidos. También imprimir las estadísticas deltexto, como se menciona a continuación: . Número de caracteres

' .

c)

. r

Número de palabras Número de sentencias

o o o o o o a o o o o o o o o o o o o o o

ramación con C

Ejercicios de Laborator¡o 1) Escribir un programa compreto en c que haga las siguientes tareas: a) Tomar un archivo de texto como entrada que puede contener una novela

o o o o o

Introducción a la

.

@ Copyríght tBM Corp. 2002 Los materíales delcurso no pueden ser reproducidos total o parcialmente sin elpermiso previo escrito de IBM