Vous êtes sur la page 1sur 39

Como usar este libro

Tal comose puede suponerporel titulo.esle libro ha sidodiseiiadode la1 fonna que usted
pueda aprender por sf mismo ellenguaje de programaci6n C en 21 dfas. Dentro de los
diversos lenguajes de programaci6.n disponibles. cada vez mas programadores
profesioraales escogen al C debido a su poder y flexibilidad. Por las razanes que
mencionamos en el Dia 1. usled no sehaequivlXadoa1 seleccionar at C comosu tenguaje
de programaci6n.

Pensamos que ha hecho una decisi6n atinada seleccionando este libro como su media
para aprender el C. Aunque hay muchas sabre C. creemos que esce Iibre presenta al C

en su secuencia mas 16gicay (aci! de aprender. Lohemos d.iseiiado pensando enqueusled


trabaje los capftulos en orden, diariamente. Los capftulos posteriores se apoyan en-el
material presentadoen los primeros. No suponemos que usted tengaexperiencia anterior
de programaci6n, aunque tenerla con otro lenguaje, como BASIC, puede ayudarle a que
el aprendizaje sea mAs nipido. Tampoco haceroos hip6tesis acerca de su computadora
o compilador. Este libm se ooncentra sabre el aprendizaje del C sfn Importar el
compilador.

Caracteristicas especiales de este


libro
Ellibro conliene algunas caracterlsticas especiales para ayudarle en su aprendizaje del
C. Cuadros de sintaxis Ie muestran c6mo USaf un concepto especffico del C. Cada cuadro
proporciona ejemJ1los concretos y unaex plicaci6n completa del comando 0 concepto del
C . Para ambientarse al estilo de los cuadros de sintaxis. vease el siguiente ejemplo. (No
trate de entender el malerial, ya que todavfa no ha Uegado a1 Dla 1.)

La funci6n printf()
l ihclude <stdio .h>
printf{ cadena de

~ormato(,argumentos,

.. . ] ) ;

printf [) es una funci6n que acepta una serle de argument os, donde a cada uno se Ie
aplica un especificadorde conversion en la cadena de formateo dada. pri n tf () imprime la infonnaci6n formateada en el dispositivo esljndar de salida, que, por 10 general.
es la pantalla. Cuando se usa pri nt f ( ) se necesila incluir el archivo de encabezado de
la entrada/salida est!ndar. STDIO.H.
.

La. i:adel1ll de [ormata es imprescindible. Sin e mbargo. los argulI1entos son opcioDales. Para cada atgumt:nto debe haber un especificador deconversi6n. La. tabla 7 .2lista
los especificadores de conversi6n mAs comunes. La cadena de formato tambien puede
comener secuencias de escape. La labia 7 .1 lista las mas usadas. A continuac i6n se
presenlan ejemplos de lIamadas a pri ntf () y su salida:

. Ejemplo 1

.inciude <stdio .h>


mainll

....

..~

printr( " oEste es un e jemplo de alqo irnpreso !O );

Despliega
oEste es un ejernplo de a l qo iITPreso!

Ejemplo2
pr i ntf( Esto imprime un c ar~cter, i c\ n un nUmero, \d\ n un punta !lotante,
\C o, 'z', 123, 456.789 );
Despllega
Esto i~p r ime un car6cter, Z
un nUJI'.ero, 123
un punto fl otante, 456. 789

Olra caracteristica de este libro son los cuadros de DEBEINO DEBEt los cuales dan
indicaciones sabre 10 que hay que barer y 10 que no hay que hacer.

Proporcionamos numerosos ejemplos con explicaciones para ayudarle a aprender l.a


manera de programar. Cada dfa termina con Wl3 secci6n. que contiene respuesras a
preguntas comunes relacionadas con el material del dia. Tambi6n hay un taller al fi nal
de cada dfa. EI taller contiene cuestionarios y ejercicios. EI cueslionario prueba su
conocimienlo de los conceplos que han side presentados en ese rna. Si desea revisar las
respuestas. 0 est! confundido. eSlas se encueotran en el andice G, "Respuestas".
Sin embargo, usted no aprenden1 C solamente leyendo el libro. Si quiere ser un
programador, tiene que escribir programas. A continuaci6n de cadajuego de preguntas
del cuest..ionario se encuentra un juego de ejercicios. Le recomendamos que trate de hacer
cada uno de ellos. Escribir c6digo de C es la mejor manera de aprender ellenguaje de
programaci6n C.
Consideramos que los ejerciciosde BUSQUEDA DE ERRORES son los mas benefi cos.
Estos son listados de c6digo que contienen problemas comunes. Es su tarea localizar y
com:gir los errores.
Conforme avance por el Jibro. a1gunas de las respuestas a los ejercicios tender;1n a
hacerse largas. Ocros ejercicios rienen varias respuestas posibles. A consecuencia de
esto, los U1timos capftulos tal vez no den respuestas para todos los ejercicios.

Haciendo un mejor libro


Nada es perfecto, pero nos esforzamos por alcanzar la perfecci6n. Esta edici6n bestSeller
liene algunas nuevas caracterfslicas que vale la pena tcner en cuenta. Si usled tiene
preguntas especfficas acerca de los diferentes compiladores de C. pase at a~ndlce H.
Ahf encontrar.1listados de [as principales caracterfsticas de los compiladores y sugerencias
para la instalaci6n. Esperamos que eslOIe sea de ayuda para elegir el compilador que se
adapte mejor a sus necesidades.
Un concepto del C que no fue tratado en la primera edici6n Cueron las uniones. Esta
edici6n tiene una secci6n adicional en eI capitulo 11, donde se detalJan las unianes.
Asegurese de resolver completamentc eI nuevo ejercicio en eI taller del capilulo 11 que
trala este lema.
Al final de cada semana usled cnconlrara "La rcvisi6n de la semana". Esta secci6n
contiene un amplio programa que usa varios de los conceptos crdlados durante la semana
anterior. Muchasde las lfneasdel programa tienen numeros a la izquierdade los numeros
de i.ft(ea. Estos numeros identifican el caprtulo donde se trala el tema de esa Imea. Si
cualquiera de los conceptos 10 confunde, regrese a -ese capitulo.
Aun cuando usted haya dominado los conceptos de C, cste libro sed una referencia
adecuada, y la tarjeta desprendible, en 13 parte inicial de este libro, es un recurso adicional
para usted. La tarjela, que contiene informaci6n por ambos lados, sc!"n1 un util material
de consulta de escritorio al estar escribiendo sus programas de C.

Convenciones usadas en este


libro
Elite libro usa diferentes tipos de letra para ayudarle a dis tinguir e ntre el c6digo de C y
el espal\ol norma] y a,identificarconceptos importantes. EI c6digo actual deC esti escrito
en un tipode lelra especial monoespaci ado. Placeholders. es decir. los lenninos usados
para representar 10 que de hecho se liene que ledear en e l c6digo. eslan escrilos en un
ripo cursi v o monoespaciado. Los lenninos nuevos 0 importantes eslan escri(Os en
cursivas.

) .' :

'"~"""X;iW<ft'?

c;9digofu,ente impreso en este libro eslJ. disponible tnlves.dec-"';.


Per~r Aitkitl (vease la fonna para ordenar el disco. en la parte finallie,. C:S~
libfo) _o JX.If; rUedio de CompuServe. Se pucde eocontratel c6digo en d fO{O
. . H:ill Computer PUblishing (pHCP). Para aecesarlo, tec1ee 9ri~~IIJS.

UtftMShlad d. GUINIIIJu.t:o
Biblioteca de 18 F.tM .E.E.

1'l'<lrSOll
EdUC<lcil"lII

---

MExIco ARGENTINA BRASIL COLOMBIA COSTA RICA. CHll.E


ESPANA. GUATEMALA. PERU PUERTO RICO VENEZUELA

Resumen del contenido


La semana 1 de un vtstazo
Comienzo .............. ..... .................................................................................. 3

2
3

Los componentes de u n programa C ........................................................... 21

Enunciados. expresiones y operadores ................................. ..................... 53

5
6
7

Control basico del programa .............. ........... .............. ......... .................... 11 5

Variables y conslantes nwnericas .................................................... ........... 35

Funciones: 10 basico ... ...................................................................... ........... 87


Entrada/salida basica ................ .... .... ..... ..... ............................................ 139

Revision de la semana I

159

La semana 1 de un vistazo
8
9
10
II
12
13
14

Arreglos num6ricos .. ........................................................................... ..... 169


Apuntadores ...... ...... .......................................................... ..... .

..... 189

Caracteres y cadenas ........................................................................... ..... 2 15


Estructuras ........... .................................................................... ............. ... 241
Alcance de las variables .............................. ............................................. 281
Mas sobre el control de programa ............................................ ................. 301
Trabajando con la pantalla, la impresora yel teclado ............. ................. 33 1
379

Revision de la semaoa 2:

La sema na 3 d e un vistazo
IS
16

M.1s sobre apuntadores ............................................................................. 39 1


Uso de archivos de disco ............................................. ..
........ 425

17
18
19

Manipulaci6n de cadenas ...................................................... ................... 463


C6mo oblener mas de las fundones.....................................
.......... 495
Exploraci6n de la biblioleca de funeiones .... ....... ..................................... 513

20

Otras fuociones ..................... ................ .. .................................................. 541


COmo aprovechar las direclivas del preprocesador y ml1s .......... ............. 563

21

Revision de la semana 3

'85

A~ndlces

Tabla de caracteres ASC U ........................... .............. .. ............................. 595


Palabras reservadas del C .................... ........................ ...... ....................... 599

. Precedencia de operadores en C .... .... ....................................................... 603

Notaci6n binaria y bexadecimaJ ..... ... ... .................................................. .. 605

Prototipos de funci6n y archivos de encabezado .........................

.. ... 619
Funciooes comunes eo orden alfa~tico ..................................... .
Respueslas ................. ..... ........ ........................................................ ........... 627
Puntos especfficos de los compiladores ................................................. .. 679
693

G
H

... .. 609

Contenido
1

La semana de un vistazo
1

Comienzo .... _................


3
Una breve historia del lenguaje C .... ............. ................ .............. .................... 4
, Por que usar C? ...................................................................... ........................ 4
Preparaci6n para la programaci60 .,' ............ ,' ................................................. 5
EJ cicio de desarrollo del proarama ...................... .......................................... 6
Creaci6n del c6digo Fuente ..... ................................ ........... .......... ............... 7
Compilaci6n del c6digo fuenee ................................................................... 8
Enlazarpara crear un archivo ejecutable .................................. ................. 9
Completando el cicio de desarrollo ................................................. ......... 10
EI primer prograJna en C .............. .................. ............................................... II
Tecleo y compi1aci6n de HELLO.C ... ...................................................... 12
Resumen .................................................................................. ......... ............. 15
Preguntas y respuestas ... ............................. ................................................... 16
Taller .......... ..................................................... .............................................. 17
Cuestionario ............. .. .............................. .............................. .......... .... ...... 17
Ejercicios .... .............................................................................................. 18

Los romponentes de un programa C ......

M _

....... _

. ....... .. ................................. M

. . . . . . . . . . . . . . . .N

....... N

. . . . . . . . . . . . . . . .. . . . . .

21

Un programa rorto en C ........... ....................... .............................................. 22


Los componentes de un programa .................... ............................................. 23
La funci6n nwin() (lfneas 5-18) ................................................................ 23
La di'rectiva #inc{une (lfnea 2) ................................... .. ......................... ... . 23
Definici6n de variables (Ifnea 3) .. ............................... ..... .................. .... 24
ProtOlipo de funci6n (Hnea 4) ......... ............................... ....... .................... 24
Enunciados del programa (l[neas 8, 9, 12, 13, 16, )7,23) ...... ................. 24
Defmici6n de funci6n (lfneas 21-24) ........................................................ 25
Comentllrios del progrdl1la (lfneas 1.7, II , 15. 20) ... ..... .......................... 26
Llaves (iineas 6. 18. 22. 24) ............... ....................................................... 27
Ejecuci6n del prognuna ............................................. ............................... 27
Una nota sobre la precisi6n ................................................ ... .................. . 27
Revisi6n de las partes de un programa ......... .. ..................... ............... ........... 28
Resumen ................ .............................. .......................................................... 30
Prcguntas y respuestas ............................................. .......... .... ........... ............. 30
Taller ......................................................................................... .................... 31
Cuestionario ............................................... ............................................... 31
Ejercicios ................................................. ................................................ . 32
3

Variables y constantes numericas .... _..

. . . . . . . . . . . . . . . ._

. . . ._

.......... _

....... _

. .......

35

Memoria de la computadora ....................................... .................... .............. . 36


Variables ....................................... ................................................................ 37

C en 21 dras
Nombres de variab le ................................................................. ............... 37
Tipos de variables numtricas ... ............................................................... 39
Dedarad6n de variables ........................................................................... 42
La palabra clave rypMe! ............................ ............................................... 43
Inicializad6n de variables nunY:ricas ...................................................... 43
Constanles ..................................................................................... ............... 44
Constanles Ii leraies ............................. ...... ............................
. .......... 44
Constantes simb6licas ............................................................................... 46
Resumen .................. _....... _................................................................. ........ 49
Preguntas Y respuestas .................................................................................. .50
Taller ................................ _ .......................................................................... .5 1
Cuestionario .............................................................................. ........... ..... .5 1
Ejercicios .................................................................................................. .52

Enundados, expresloDes 'I operadores _ ..... _....... _..... __ ....... _................ S3


Enunciados ........................ ................................................... ... ............. ..... .... . ............,. ',:
Enunciados )' e1 espacio en blanco ...................................... ..
Enunciados compueslOS ............... ............................. ................................ 55
Exprc.siones ............................................. ...................................................... 56
Ex prc.siones simples .................................................................................. 56
Expresiones com plejas ............................................................................ .. 56
_ Operadores ........ ........ .............................. ................................... ............. ...... 58
E1 operador de asignaci6n .......... ............................................................... 58
Operadores malematicos ..................... ....................................... ........... .58
PTecedenda de operadores)' los partnles is ................................ .............. 63
O rden para la evaluaci6n de sube~presioncs ..................
... ........ 6.5
-operadores rel ac ionales ..................................................
........... 6.5
EI enunciado if ............................................................................................... 67
Evaluaci6n de expresiones relacionales .............. .......................................... 72
Precede~ia de los operadores re ladon ales ............................................. 73
Operadores 16gicos ........................................................................................ 7.5
M:l.s sobre valores ciertolfalso ............................................
......... 7fi
Precedencia de los operadores 16gicos ..................................................... 77
-Cperadores de asignaci6n compuestos ..................................................... 79
EI operador condicional ............. ............................ ................................... 80
EI operador coma ...................................................................................... 80
Resumen .................................. .. .............. ............... ..... ............ ... ....... ......... 81
Preguntas)' res pueSlas ................................................................................. 82
Taller ............................. ......................................... .....................
......... 83
Cueslionariu ............... .......................................................................... ... 83
Ejercici05 ............... .............................................................. .......... ...... 84

Funciones; lobaslco ..................................................................................... 87

i.Qutes una funci6n? ................................................................................... 88


La defmici6n de una func i6n ................................................................... 88
La ilustraci6 n de una funci6n ................................................. ................. 89

La semana de un vistazo

167
Arreglos nurnf:ricos . _ . _ _ . _____ ... _....... _____ .. _.......... _................ 169

tQue es un IUTCglo? .................................................................. ................... 170


Aneglos de una sola dimensi6n ..................................... ......................... 170
Arreglos multidimensionalcs .................................................................. 175
Denorninaci6n y decl:uad6n de arreglos ............................................... ..... 176
Inicializac:i6n de arreglos ............................................... .... ..... ................ 178
T amafio mbimo del arteglo ............................ ....................................... 182
Resumen ...................................................................................................... 184
Preguntas y respuestas ...................................................... .... ....................... 185
T aller ........................................................................................................... 186
Cuestionario ...................................................................... ,..................... 186
Ejercicios ........................................................ ..... ... .......... ...................... 186

Apuntadores ............ __ ... _ ... _. ___ .............. _....... _....... _.................... 189
LQut es un apuntador? .......................................................... ...................... 190
La memoria de la computadora ............... ........................ ...... ................. 190
Creaci6n de un apuntador ................................................. ... .. ................. 191
Los apunladores y las variables simples ............. ............ .................... ........ 192
Dc:c1arn.ci6n de apuntadores ................................. ,.................................. 192
Inicializaci6n de apuntadores ................................................................. 192
U$O de apuntadores .................................... ................................ ............. 193
Los apuntadores y los tipos de variables ..................................................... 195
Los apumadores y los arregJos ................................................ .................... 197
El nombre del arreglo como un apuntador ............................................. 197
Almacenamiento de e1emeotos de arteglo .............................................. 198
Ari trn.!:lica de apuntadores ..................... .............................. .................... 200
Precauciones con los apuntadores .......................... ..................................... 204
NOlaci6n de su bindices de arreglo y apuntadores ....................................... 205
Paso de arreglos a funciones ....................................................................... 206
Resumen ...................................................................................................... 2 10
Pregunlas y respuestas ....................................... ....................... ................... 211
Taller .......................................................................................... .. ............... 2 11
Cuestionario ............................ ...................... ................... ...................... 2 12
Ejercicios ................................................................................................ 212

10

Carac:teres y cadenas .......................................... _....... _....... __ ..... _.......... 215

E1 tipo dedato char ..................................................................................... 216


Uso de variables de caracter .. ........ ............................................................. 217
Usode cadenas ....................................................................... .................... . 219
Aneglos de canlCteres ............................................................ :............... 219
Inicializaci6n de arreglos de caracleres .................................................. 220
Cadenas y apuntadores ................................................................................ 221
Cadenas sin arreglos ........................................ .................................. ;......... 22 1
Asignaci6n de espacio para la cadena en 1a compilaci6n ....................... 222
,,"vi

La Cunci6n malloc() ........................... __ ............. ____ ._ ......... .................... 222


DespJegado de cadenas y caracteres .......................................... ..... ...... ...... 227
La funci6n pU1S() ..................... .................. ......... ............ .......... .... 227
La funci6n prinif() ............................. ...................... ... ......... .... ............... 228
Lectura de cadenas desde el teclado ........................................................... 229
Entrada de cadenas con la funci6n g~ts() ... .......... ............... ................... 229
Entrada de cadenas con 1a funci6n scan/() .... ........................... ............. . 232
Resumen ............... .. ................. .. ....................... .................... .. ..................... 234
Preguntas y respuestas ........................................ .................................. ....... 235
Taller ......................... ........... ..................... ........... .. ........... ............ ... .......... . 236
Cueslionario ... ..... ................ ................................................... .. ............... 236
Ejercicios .......................................................................... ,....~ ................ 238
11

Estructuras ..............................................

. . . . . .. . . . . . . . .. H

241

ESlrucluras simples ..... .... ... .................... ..................................................... 242


Definici6n y declaraci6n de eslructuras ........................................ ......... 242
Acceso de los miembros de la eslructura .. ............. ....... ................ ....... .. 243
Estrucluras m4s compJejas ... ...... ........... ........... .... ................. .................... .. 245
EStrucluras que contienen estrucluras .................................................... 245
Estructuras que contienen arreglos ........ .................. ......... ......... ........ ..... 249
Arreglos de estructuras ............................... ........................................... ...... 251
Inicializaci6n de estructuras .... ....... ................................ ........... ....... ..... ...... 255
Estructuras y apuntadores ............... ...................... ............. ..... ............... ..... 257
Apuntadore$ como miembros de estructuras .......... ................................ 258
Apuntadores a estructutaS ................................................... ................. ... 260
Apuntadores y arreglos de estructuras ....................... ............................. 262
Paso de estructuras como argumentos a funciones ................ ............. .... 265
Uniones ........................................................................................................ 267
Definici6n, declaraci6n e inicializaci6n de uniones ...................... .... ..... 261
Acceso de miembros de la uni6n ..... ... ... ... .. .... ....... .. ..... ... ...... ............. .... 261
Listas encadenadas ..................................... ............. ..... ............................... 272
La organizaci6n de una lista encadenada .............. ................................. 273
La funci6n mnlloc() ............. ............ .. ..... ................... ............ ....... .......... 275
Implementaci6n de una lista encadenada ..................... .... .............. .. ..... . 275
typedefy las estructuras .............................. ......... .. ................ ........ ..... ........ 275
Resumen ........... ...... .. ............ ......... ............................................................. . 276
Preguntas y respuestas ............ .... ........................... ......................... ............ . 2n
Taller ...... ... ............................................................ ... .............. .... .... ............. 217
Cuestionario ........ .................... ............................. ................................... 278
Ejercicios ......... ......... ................... ...................................... .... ...:............. 278
12

Alcance de las variables ............................................................................ 281


i,Qu6 es el alcance7 ....................................... ............................. ................. 282
Una demostraci6n del aJcance ........ .......... ................... ........................... 282
J.Por que es importante el a1cance? ....................... ............... .............. ..... 284
xvii

C en 21 dfas

Variables enemas ....................................................................................... 284


A1cancc de las variables extemas ........................................................... 285
Cu.1ndo uw variables extemas ................................................ ............. . 285
La palabra clave e.xJem ................................................ 286
Variables locales ......................._............................ ..............
.............. 287
Variables estf.ticas VCI'$US automaticas .......................... .................. ....... 287
EI alcance de los padmetros de Ia funci6n ............................................ 290
Variables estiticas exlDDaS ................................ ..... ........... ................. ... 291
Variables de registIo ........................................................... ..... ..... ....... ... 29 1
Variables locales y 18 ftmci6n mmlf() ......................... ................................ 292
i.Qu6 clase de almacenamienoo se debe usar? ................. ............................ 293
. .... 294
Variables locales y bloques .................................. ................ ........ ..
. .... 295
Resumen .........................................................................................
Preguntas y respuestas .....................................
....... ..........
. .... 296
Taller ...............................................................
............. ...
. .... 297
Cuestionario ................................................
.... 297
Ejercicios ....................................................
......................
.. .. 298

13

Mas sobre el oontrol de PrograDISI ___ ... _..... _.... _.... _....._..301
Tenninaci6n an l~ipada de ciclos ...............,................................................ 302
EI enunciado brtak ................................................................................. 302
EI enunciado continw ............................................................................. 304
EI enunciado golo ...................................................... .................................. 306
Ciclos infinitos ............................................................................................. 309
EI enunciado SWilCh ..................................................................................... 312
Tenninaci6n del programa .......................................................................... 321
La funci6n t,Xit() ................................................... .................................. 321
La funci6n atex;t() (s6lo para el OOS) .................................................. . 322
Ejecuci6n de comandos del sistema operativo en un programa ................ . 325
Res umen ........... ........................................................................................... 327
Preguntas y respucstas ................................................................................ . 327
Taller .............................. .... ....................................................................... 328
Cuestionario ............ .......................................... ........ ........... .................. 328
Ejercicios ........................................................................................ ........ 328

14

Trabajando con la pantalla, la Impresora y elleclado .. _....... _ .............. 331


Los flujos y el C ......................................... ............................................... 332
i,Qu6 es exaclamente la Entrada/Salida de un programa? ...................... 332
i.Qut es un flujo? .................................................................................... 333
Flujos de lexto contra tlujos binarios ..................................... ................. 334
Los flujos predefinidos ........................................................................... 334
Funciones de fl ujo del C .................................................................... .......... 335
Un ejemplo .............................................................................................. 33::
Accptaodo eatrada del tlado .................................................... ................ 336
Entrada de caractc:res .............................................................................. 33f
Entrada fonnatcada ................................................................................. 35!

xviii

Salida a pantalla .......... ........... .................................................................... . 359


Salida de caracteres con putehar(), puteO 'I fpu re() .................... ........... 35~
Uso de puts() 'I fputs{) para la salida de fIujos ................................... .... 36 1
Uso de printj() y fprintj() para la salida fonnateada .................. ... ........ .. 362
Redirecci6 n de la entrada y la salida ........................................................... 369
CuAndo usarfprintf() ................................................................................... 371
Uso de stderr ... ........................................................................................ 371
Resumen ........ ........................................................................ ...................... 373
Preguntas y respuestas ..................... .................. ............... ......................... .. 374
Taller ........ ............... . ....... .......................................................................... 375
Cuestio nario ............................... ................ ..... .................. ...................... 375
Ejercicios ........................ ........... ................ ... ......... ...... ....................... .. 376

Revisi6n de la semana

379

La semana de un vistazo

389

15

1\.1is sobre apuntadortS ._ ....................... _........................._...................... 391


Apuntadores a apuntadores .. ............................................................. .......... 392
Apuntadores y arreglos de vadas dimensiones ........................................... 393
AfTeglos de apuntadores ...... ................................................................ ........ 402
Cadenas y apuntadores: una rev isi6n ...................... ........................ ........ 402
Arreglos de apu ntadores a char ................................... ....... ... ................. 403
Un ejemplo ................ ...................... ........................................................ 405
Apuntadores a funciones ............................................................................. 411
Declaraci6n de un apuntador a una funci6n ....................... .. .................. 411
lnicializaci6n y uso de un apun tador a una funci6n ......... ...................... 412
ResUinen ........................ .............................................................................. 421
Preguntas y respuestas ............. ....... ............... ................. ..... ............. ........... 421
Taller ................................................................................. .......................... 422
Cuestionario ........................ .................................................................... 422
Ejercicios ................................................................................................ 423

16

Uso de archivos de disco .............................................................._......... _ 425


Aujos y archivos de disco .................... ........... ................................ .......... 426
Tipos de archivos de disco .......................................................................... 426
Nombres de archivo .................................................................................... 427
Apenura de un archi vo para usarlo ................................... ... ....................... 427
Escritura y lectura de datos de archivo ........... .... ........................................ 431
Entrnda y saJida dearchivos fonnateados ........... ............. ...................... 431
Entrada y saJida de caracteres .......................................... ...................... 436
Entnldll y salida direclas de archivos ...................................................... 438
Bufet con arcnivos: cierre y vaciado de archivos .......................... ............. 441
Acceso de archivos secuencial contra aleatorio .......................................... 443
Las funcionesft~l/() y r~wind() .............................................................. 444
La fu n ci6nfse~k() ................................................................................... 446
Detecci6n del fin de archivo ....................................................................... 449

e en 21 dias
Funciones para manejo de archivos
............. 452
Borrada de un archivo ..........
...............
..... 452
Renombrado de un archivo ........
.............. 453 .
Copiado de un archivo ................
............. 454
Uso de archivos temporales ............. .............. .................. ............ ............. 457
Resumtm ................. ................................................................................... 459
Preguntas y respuestas .................... ......... .................................................... 459
Taller ....... ....................................... .......... .. ......... ........... ............................. 460
Cuestionario ........................................................................................... 460
Ejercicios .......... ............... ... .................. ................................................ 461

17

Manipulaci6n de cadenas ~ ." .................................. " ....... _..

..463

Longilud y almacenamienlOde cadenas .................................................... 464


Copia de cadenas ........ ................ .............................. ... ............................... 465
La funci6n strcpy() ............
................ .................... _.......... . 465
La funci6n stmcpy() ........ .......................
................................. 467
La fu nci6n strdup() ........... .. ............. .......
...... ........................... 468
Concatenaci6n de cadenas
....... ......................... 469
La func i6n slrcat()
.............. ....
......................................... 469
................
............................... 471
La funci6n stmcat() ...
Comparaci6n de cadenas
............. ....
......... ............................. 472
Comparaci6n de dos cadenas.. ...............
.................. .................. 473
Comparaci6n de dos cadenas: ignoraooo mayl1sculas y minusculas ...... 475
Comparaci6n parcial de cadenas ............................................................ 475
Busqueda en cacienas ...................... ......................... .................................... 476
La .funci6n slrchr() .................................................................................. 476
La funci6n slrrchr() ................................... .................................... ,........ 478
La funci6n strcspn() ........................... _...... ......... .................................... 478
La funci6n strspn() ............................ _.. ............. .......... .......................... 479
La funci6n slrpbrk() .......................................................... ...................... 480
La func i6n strstr() ................................... ................................................ 481
Conversi6n de cadenas ............................................... ................................. 482
Funciones diversas para cadenas ................................................................. 483
La funci6n strrev() ........................................... ....................................... 483
Las func iones strset() y stmsel() ............................................................ 484
Conversi6n de cadenas a numeros ........ ....
....... ......... 485
La funci6n atoi(). ..............................
.... 485
La fu nci6n atol() .... ,............ ............ .....
............ ........ 486
La fu nci6n aroft) .................. .............................
.................... 486
Fuociones de prueba de caracleres .............................................................. 487
Resumen .............. .......................... ........................................................ ...... 492
Preguntas y respuestas ....................................................................... ......... . 492
Taller ................................................................................................ .... ....... 493
Cuestionario ................................ ............... ................ ............................. 493
Ejercicios ........................ .............. ............. ......... ........ ....... ... ........ ... ....... 493

18

Como obteoer mas de las fundones ...................... _........_..._..... 495


Paso de apuntadores a fundo nes ................................................................. 496
Apunladores tipo void ...... ........................................................................... 500
Funciones con numero variable de argumenlos .......................................... 504
Funciones que regresan un apuntador ................................ .. ................... .... 507
Resumen ........ .................... ............................. .... ..... ... ........ ......................... 509
Pregunlas y respueslas ............. .............. ................ ...................... ................ 510
Taller .............................. ............................................................................. 5 10
Cuestionario .................. .......................................................................... 5 10
Ejercicios ...... .................................................. .. ...... ... ....... ...................... 5 11

19

Exploracion de la biblioteca de fundones

M . . . . . . ._

............... . _

....... _

. .. .. . . . .

S13

Funciones malematicas ....................................... ......... ......... ...................... 5 14


Funciones Irigonometricas .............................. ........... .... ......................... 5 14
Funciones exponenciales y IOgar1lmicas ................................................ 5 15
Funciones hiperb6licas ................................... ........................................ 5 15
Olras funciones matematicas .......................... .................. .... .................. 516
Manejo del tiempo ............. ........................................... ............. .... .............. 5 18
Represenlaci6n del tiempo ................................ ...................................... 518
Las fundones de tiempo ...... ..... ...................... ........... ... .......................... 518
Uso de las funciones de tiempo .............. .......
............................. S22
Funciones para eI manejo de errores ........................................................... S24
La funci6n assert() ............................................................................ ...... 524
EI archi vo de encabezado ERRNO.H ..................................................... 526
La funci6nperror() ................................................................................. 527
Bllsqueda y ordenamiento ................................................................. .......... 529
Busqueda con bsearch() ......................................................................... 529
Ordenalniento con qsort() ................................................................. .. .... 530
Dos demosuaciones de busqueda y ordenamiento ....... .......................... 531
ResulTlCn ...................... ........ ................. ............ ........................................... 537
Preguntas y respueslas ................ .......... .................... ................................... 537
Taller ............. .... .. ................. ......................... .............................................. 538
Cuestionllrio ......... ......... .. ........................................................................ 538
Ejercicios ............. .................................................. ................................. 538

20

Olras fundones ..... _................................ _.............. __............................... 541


Conversiones de tipe .................. .'....................... ............ ............................. 542
Conversiones autom:1ticas de ripe .......................................................... 542
Conversiones expUd tas con modificadores de tipe ............................... 543
Asignaci6n de espacio de almacenamiento en memoria ............................. 545
La funci6n malloc() ................................................................................ S46
La funci6n calloc() .................................................... ............................. 546
La fu nci6n realloc() ......................................... .... ......... ..... .. ................... 547
La funci6n/ree() ... ...... ............... .. ........... ............................ ............ ........ 549
Uso de argumentos de la Unea de comandos ......... .... ..... ............................ 551

Operaciones subre bits .....................


...... ... 554
Los operadores de desplazamiento
...... 554
Los operadorcs l6gicos a niveJ de bit .
....................
. .. ... . 555
Et operador de complemenlo .. ......
........................ .556
Campos de bilS en esuuclUras....
.. ..... 556
Resumen ... ...............
. .............................................................. ....... . 558
Preguntas y respueslas ................................................... .............. ............... 559
Taller ...................
. ........................
...... 560
CueSlionario ......
.. ...... 560
Ejercicios
...... 561
21

Como aprovecbar las directivas del preprocesador y mas .................... 563


Programaci6n con varios arc hivos fuenle .
..564
. 564
Ventajas de la programaci6n modular
Ttcllicas de la programaci6n mod ular
.. 564
Componenles de los m6dulos ............. ......................
.......... ....... 566
Variables extcmas y la programaci6n modular ......
........... 567
Usodean::hivos .OBJ .................................... ..........
.............. 568
EI preprocesador de C .......... .... ............................. ... ........
. ............. 569
La directiva del preprocesador IItk/ine ............. ............... .
. 569
La directiva lIinclude ....... ......... .... ..... ................ .. ........... ..
... 575
...... 576
Uso de iii/. #elif. #du YlI~ndif. .. ................... ...............
Uso de 1Iif. ..#endifpara ayudarse en la depuraci6n ... ...........
..577
C6mo eviw la inclusi6n multiple de archivos de encabcz.ado ....
. .. 578
La directiva Nundef ............................ .................
.. ................... .579
Macros predeflOidas ...
...................
................ 579
Resumen
........................
.................... ................................... ... 580
Pregunras y respueslaS
........................ ....... ... ........ ... ......................... 58 1
Taller ................
.... .... ... 58 1
Cuestionario ....
... .. ...................
... ... 5g I
Ejercicios .........
............. ............
... 582

Revision de Ja semana

58S

Aptndices

xxii

~ . . . . . . . . . . . . . . . . . . . . . . . . . 595

Tabla d e caracteres ASCII

Palabras reservadas del C ......................................................

Precedencia de operadores en C ........ _ ................ _....... _....... _................ 603

Notaci6n binaria y hexaded.mal_ ....... _....... _................ _....... _................ 605

Prototipos de fund6n y archivos de encabezado .................................... 609

. M . . . . .M _ . . . . "

. . . . . . .M . . . . . . . . . . . . . . . .

M ................

599

Funciones comunes en orden alfaWtico .................................................. 619

Respuestas ................................... _....... _................ _....... " ....... " ................ 627

Respuestas para elOra I "Comienzo" .................. .. .. ............ ..... ......... ........ 628
Cuestionario ...... ... .... ... ... ......... ................................................................ 628
Ejercicios .... .. ..... .. ... ... .... ........ .. .... ...... ...... ...... .................................. .. ... .. 628
Respuestas para elOra 2 "Los componentes de un programa C" ............... 629
Cuestionario ....... ....... .................... ...... .. .................................................. 629
Ejercicios ......................... .................................... ......... .................. .. ...... 630
Respuestas para elOra 3 "Variables y constantes numericas" ................... 631
Cuestionario .................. ...... .... .. ................. .... .......... .. ............... ..... ......... 631
Ejercicios ...... ... ............. .... ............................................................. ....... .. 6 32
.. .... 633
Respuestas para elOra 4 "Enunciados, expresiones y operadores"
Cuestionario ........ .. .... ....... ...................................................... ... .. .. .. .. .... .. 633
Ejercicios ...... .................... ..... ... ..... ............... ............... .... ....... .. ... ....... .. 634
Respuestas para el Oia 5 "Funciones: 10 basico" ........... ..... .... ............ ........ 637
Cuestionario ........ .. ..... ... ... ... .... .. .... ....... ...... ............................................. 637
Ejercicios . .. .......... ...... ... ...... .... .. .... .... ... ... .. ... .............. ............................. 637
Respuestas para el Dfa 6 "Control b4sico del programa" ........................... 641
~u estionario .......... .............. ........................ ............... ..... ... ......... ... .... .... . 641
Ejercicios ...................... .... .. .................. .. ............................ ............... ..... 642
Respuestas para el Ofa 7 "Entrada/salida basica" ....................................... 643
Cuestionario ............... ... ...................................................... ... ........ .... .... . 643
Ejercicios .................................. ............ ......................................... ......... 644
Respuestas para el Ofa 8 "Arreglos numericos" .. .. ........ ...... ... ... ................. 648
Cuestionario ................................................ ..... ....... ................................ 648
Ejercicios .. ........... ......... .................... ...................................................... 649
Respuestas para elOra 9 "Apuntadores" .. ... ... .. ... ..... .. ................................ 654
Cuestionario ..... .... ....................................... ......................... .. ..... ... ......... 654
Ejercicios .. .............. ... ... ................... .. .... ............ ...... ............ .................... 655
Respuestas para el O(a 10 "Caracteres y cadenas" ..................................... 656
Cuestionario ......... ...................................................... ............. ........... ... .. 656
Ejercicios .. ....................................................... ....... ........ , .. .. .. ............ ..... 658
Respuestas para el Oia II "Estructuras" ................................................... .. 658
Cuestionario .............................. .. ..... ..... .. .............. .. ................................ 658
Ejercicios .. ...... ....... ........... .. ...... .. .... .. .... ................ .. ................................ 659
Respuestas parael Ora 12 "Alcance de las variables" ... ............................. 661
Cuestionario ..... ..................................... ...... ..... ..... .. ...... .......................... 661
Ejercicios ........ ........ .. .... .... .. .... .... ... ............. ............... .... .................... ..... 662
Respuestas para el Oia 13 "Mas sobre el conlrOi del programa" ............ .... 666
Cuestionario ....
.... ... .. ... ............................................. 666
Ejercicios .......................... ... ... .. ...... .. .... .. .......... .... ......................... ..... ... . 667
Respuestas para el Dfa 14 ''Trabajando con la pantalla,
la impresora y el teclado" .............................. ..... ..... .. ...... ...... .................... 668
Cuestionario ..... ...... ... .... .... .. ...... ...... .................. ......... ......... ............. ... ... . 668
Ejercicios . .. .......... ...... ... ..... ............. .. .... ............................. ....... ......... ..... 669
Respuestas para el Ofa 15 "Mas sobre apuntadores" .................................. 669
Cuestionario ........................ ........................ .............. , ............ ........ ....... .. 669
Ejercicios ......... .......................................... ...... ..... ........ .. ........................ 670
xxiii

AI

las ,respueslas a todas las


"Respuestas". En los
se dan respuestas para lodos los ejerdcios,
muchas soluciones posibles. Le recomendamos
encarecidamenle qu e aproveche los ejercicios y revise sus
respueslas.
a~ndiceG,

D6nde andamos .
La primera semana trata el material bisico que se necesita para saber c6mo comprender el
C completamentc. En los diu 1, ''COnllcrn:o'', y 2, "Los componcntcs de un progrnma C",
usted aprendeni la manera de crear un programa C y reconocer los elementos bisicos de un
programasimple. EI dfa 3, "Variables y constantes num6ricas", complementa 10 tratadoen
los primeros dos di3s definiendo los tipos de variables. Et dia 4, "En unci ados, expresiones
y operadores", lorna las variables y afiade expresiones simples, para que, de esta fonna,
puedan seT creados nuevos valores. El dfa tambien proporciona informaci6n sobre la manera
de tomar decisiones y cambiar eI flujo del programa usando enunciados if. El dfa 5,
"Funciones: 10 basico", trala las funciones del C y la programaci6", estructurada. E1 dfa 6,

"Control basico del programa", presenta mas comandos que Ie pennitinin controlar el flujo
de los programas. La semana lermina en el dia 7, "Entrada/salida basica", con un anaJisis
sobre la impresi6n de infonnaci6n y una ayuda para hacer que los program as interacluen con
el teclado y la pantalla.
ESla es una gran cantidad de material para tratarla en solamente una semana, pero si se lorna
la informaci6n de un capfwlo par dia, no se debe tener problemas.

Comienzo
Bienvenido a iAprtnda C por usted mismo en Z I d(w! &te capllulo Ie da lOll mediOi p2ra
Ilegar a ser un programador de C eficiente. Hoy aprendera:

o Por qut e J C es la rnejor allemali va entre los lenguaje.s de programaci6n.


(J Los pasos en eI cid o de desarrollo de un programa.

o La manera de escribir, compilar y ejecutar el primer programa en C.


o Acerca de los mensajes de error generados por el compilador y el eolazador.

Una breve historia


dellenguaje C
Tal vez se pregunte cual ha sido el origen del Jenguaje C y de d6nde Ie vino su elegance
nombre. ~l C fuecreado por De";" INc b ;" en los laboraloriosde la Bell Telephone, en 1972.
Ellenguaje no fue creado porel gusto de hacerlo, sino para un fin especffico: el diseno del
siste ma operativo UNIX (el cual se usa en muchas minicomputadoras). Desde el principio,
el C IUvO como prop6sito ser util: pennitir a los prograrnadores atarcados que las cosas se
pudieran hacer.
Como eJ C es un Jenguaje rnuy podo::ww y flc:xiblc:, su uso so difuod.i6 rl.pidamenle mas alIa
de los laboratories Bell. los programadores de. tod~ el mundo ~mcnzaron a usarlo para
escribir todo (ipo de programas. Sin embargo, diferen tes organizaciones comenzaron a
utilizar muy pronto sus propias versiones del C, Y las pequei'ias diferencias entre las
implementaciones L"Omenzaron a dar problemas a los programadores. Para resolver este
problema, el American National Standards Institute (ANSI) fonn6 un comi tt en 1983 para
eslableceruna definici6n esuindardel C, que lleg6 a ser conocida como el C tstdndar ANSI.
Con uoas CUilntas excepciones, todos los compiladores de C modemos se adhieren a eSle
est!ndar.
Ahora, l.por que tlene esle nombre? Ellenguaje C se llama de eSla fanna debido a que su
\ predecesorfue lIamado 8 . EIlenguajeB fuedesarrollado por Ken Thompson tambien en los
laboratorios Bell. Tal vez se imagine C4cilmenle por qut Cue llamado B.

Por que usar C


En el mundo aclual de la programaci6n de cornputadoras, hay muchoslenguajes de alto nh'el
entre losquesepuede escoger, comoC, Pascal, BASIC y Modula. Todos tslos son lenguajes
excelenlCS, adecuados para la mayoria de las labores de programaci6n. No obstante, hay
varias razones poe las l:uaJe.s muchos profcsionales de la computaci6n ~ienten que el C se
encuentra a la cabeza de la !ista:
4

Q C es un lenguaje poderoso ):' flexible. 1.0 que se puede lograr con el C estA
limitado solamente por la imaginaci6n. Ellenguaje. por sf mismo, no Ie pone
Umites. EI C se usa para proyectos tan diversos como sistemas operativos.
procesadores de palabras. grMicos. hojas de c.ilculo y hasta compiladores para

otros Jenguajes.

Q E1 C es un lenguaje cornun, preferido por los programadores profesionales. Como


resultado, se tienen disponibles una amplia variedad de compiladores de C y
accesorios uliles.

o EI C es un Jenguaje transportable. Transpo rtabl~ significa que un programa en C


escrito para un sistema de computadora (por ejereplo, una PC de IBM) puede sef
compilado y ejeculado en otro sistema (tal vez en un sistema DEC VAX) con
pocas 0 oinguna modificaci6n. La transportabilidad es aumentada con el esuindar
ANSI para el C. el juego de reglas para los compiladores C que se meociooaron
anteriormenle.

o El C es un Jenguaje de poeas palabras, que contiene solamente unos cuanlos


terminos llamados palabras clave que son la base sobre la que est;1 construida la
funcionalidad dellenguaje. Tal vez piense usted que un lenguaje con mb palabras
clave (llamadas. algunas veces, palabras reservadas) pudiera ser mlis poderoso.
Esto no es cierto. Conforme programe en C, encontrar;1 que puede ser programado
para ejecurar cualquier tarea.

Q EI C es modular. EI ctXiigo de C puede (y debe) ser escrito en rutinas llamadas


/unciOlles. Estas funciones pueden ser reutilizadas en ooas aplicaciones 0
program as. Pasando informaci6n a las funciones, se puede crear ctXiigo util y
reutilil.3ble.
Como muestran estas caracterfsticas. el C es una allemativa excelente para seT el primer
Ienguaje de programaci6n. i.Que hay acerca de este nuevo lenguaje llamado C++ (pronunciado
CpJus pius) ? Tal vez ya hayaofdo acercadel C++ y de una nueva tecrucade programaci6n
Hamada programacion orjel1tada a objetos. Tal vez se pregunte cuales son las diferencias
entre C y C++, y si debe aprendeT por sf mismo C++ en vez de C.
iNo se preocupe! C++ es una versi6n mejorada del C. 10 que significa que el c++ contiene
todo 10 que tiene el C, y nuevos agregados para la programaci6n orientada a objetos. Si va
a aprender el C++. casi todo 10 que aprenda acerca del C todavfa sera aplicabJe al C++. AI
aprender C. no 5610 estar.!. aprendiendo el lenguaje de programaci6n actual m4s poderoso
y generalizado. sino tambien se estari preparando para la programaci6n orientada a objetos
del manana.

Comienzo

Preparacion para la programacion


Cuando $C tnlte de resolver un problema, se deben tomar cienos pasos. En primer lugar, el
problema debe ser definido . jSi no se sabe cual es el problema, no se puede enconuar una
soluci6n! Una vezque seconoceel problema, se puedepensarun plan paracomponerlo. Una
vel. que se bene un plan, por 10 genern.l se Ie puede implemenlar (acilmenle. Por ultimo,
una vel. que se implementa el plan, se deben probar los resullados para ver si eI problema
se rcsuelve. Esla misma 16giea lambien puede set aplieada a muchas otras cireas, incluida la
programaci6n.
Cuando se cree un programa en C (0 en sf un programa de computadora en cualquier
lengu.aje), $C debe seguir una secuencia de pasos similar:
I. Detenninar el objelivo del programa.
2. Dctenninar el metoda que se quiere Usaf para La escrilura del. programa.
3. Crear eJ programa para resolver el problema.
4. Ejecular el programa para ver los resultados.
Un ejemplo de un objetivo (v6lse el paso I) puede serescribirun procesadorde palabras 0
un programade base de dalOS. Unobjetivomucho mh simplees desplegarel nombrede uno
en la panlalla. Si no se tiene un objetivo. no se podni escribir un programa, por 10 que ya se
liene dado el primer paso.
EI segundo paso es detenninar el metoda que se quiere usar para la escrilura del programa.
i.Se neeesita un programa de computadora para resolver el problema? i.Que informaci6n
necesila ser registrada? "Que f6rmu las secin utilizadas? Duranteeste paso sedebe tratar de
determinar 10 que se necesita saber y en que orden debe ser implemenlada la soluci6n.
Como un ejemplo. supongamos que a1guien DOS pide escribir un programa para determinar
el ilea de un cfrculo. EI paso I est<1 completo, ya que $C sabe el objetivo: determinarel area
de un emulo. EI paso 2 eonsisteen detenninar loque se nccesila saber para calculareJ area.
En esleejemplo, supongamos que el usuario del programa proporcionari el radio del circulo.
para obtcncr la respucsta. Ahora se lienen las
Sabiendo esto, se puede apliear la f6nnula
piezas que se neeesitan, por 10 que se puede continua! a los pasos 3 y 4. que son llamados
"cicio de desarrollo del programa".

xr

EI cicIo de desarrollo
del programa
. El cicio de desarrollo del programa tiene sus propios pasos. En el primer paso se usa un editor
para crear un archivo de disco que eontiene el ctXfigo ~ntl!. En e1 segundo paso se compila
el c6d.igo (uente para crear un archivo objl!to. En ellercer paso se enlua el c6digocornpilado
6

(.pam crear un tlrchjy~ ejecutable. Por ultimo. el cuarto paso es ejecutar eI programa para ver

rsi funciona como se plane6 originalmente..

Dreaci6n del c6digo fuente


FJ c6digo fuenle es una serie de enunciados.o comandos usados para darle instrucciones a
lacompuladora de ql,lcejecute las tareas que se desean. Como sedijo anteriormenle, eI primer
paso en el cicio de desarrollo del programa es teclear el c6digo fuente con un editor. Por
ejemplo. a continuaci6n se presenta una !fnea de c6digo fuente de C;

printf('Hello, Mom !");


F.-;te enunciado Ie indica a la computadora que despliegue eI mensaje Hello.

Mom!

en la

pantalla. (Por ahora, n.o se preocupe sobre la manera en que funciona este enunciado.)

Uso de un editor
Algunos compiladores vienen con un editor que puede usarse para leclear el c6Wgo fuent e,
y otros n.o. Consulte los manuales del compilador para ver si el compilador viene con un
editor. En caso de n.o sec asf, se tienen disponiblcs rnuchos editores.
La mayorfa de los sistemas de c6mputo incluyen un programa que puede usarse como editor.
Si se esta utilizando un sistema UNIX, se pueden usarcomandos como ed, ex, edit. emacs

ovi. Si seesta usando Windowsde Microsoft. sedisponedel Notepad. Con DOS 5.0,se puede
usaf Edit. Y si se esta usando una versi6n de DOS anterior a la 5.0, se puede usar Edlin.
La mayorfa de los procesadores de palabras usan c6digos especiales para formalear sus

documentos. Estos c6digos no pueden sec lefdos correctamente por Olros pcogramas. El
American Standard Code for Information Interchange (ASCm ha especificado un formato
de texto estAndarque casi cualquier programa. incluyendo el C. puede usar. La mayorfa de
los procesadores de palabras, como WordPerfect. Display Write, Word y WordSlar. tienen
Ia capacidad de guardar archivos fuenteen fonnaloASC U (como un archivo de lexto, en vel
de un archivo de documento). Cuando se quiere guaniar un archivo de procesador de palabras como un archivo ASCII, seleccione la opci6n ASCU 0 lexto al momenta de guardarlo.

Si usted no quiere usar ninguno de estos edilores, puede comprar un editor diferente. Hay
paquetes tanto comerciaJes como de dominic publico que han sidodisenados especfficameme

para [eClear ctXiigo fuente.


Cuando se guarda un archivo fuente, se ie debe dar un nombre. i,C6mo debe ser llamado un
archivo fuente'? EI nombre que se Ie de aI archivo debe describir 10 que baee el programa.
Adem1s, cuando se guardan archivos fuente de programas C se Ie debe dar a1 archivo una
extensi6n .C. Aunque se Ie puede dar al archi vo fuente cualquier nombre y extensi6n que
se desee, se considera adecuado usar la extensi6n .C.

Comienzo

NO DEBE

DEBE

&te libro ttata el C estAndar ANSL SIlo sipifiCa tp-IIQ itnpona que compilador
de C Je use. siempre y C\laDIlo so
at ~ ~I. 81 apCndic.e H. "Puntos
~fficos de los compiladqm", ~ ''';''' ifttonnacioo ge.q6rica 801m
lOt~adores oW popaIUet, 4~~'J'

"fJ!'t

Compilacion del cOdigo fuente


Aunque uno puede ser capaz deeotcDder"cl c6digo fueole del C (jpor 10 menos despues de
leer estc libro usted sen capaz de hacedo!), Ja computadora no puede. Una computadora
requiere instrucciones digitales. 0 binarias, en 10 que es lIamado /cnguaje de mdquintl. Antes
de que un programa en C puedaejecut.atsecn unacomputadora, debe ser traducido del c6digo
ruente a Jenguaje de miquina. Esta traducci6n. el selu~ paso en el desarrollo del
~t cscj<x:utadu. por un prog:ram.a Uamadocpmp~. El Offipilador lomll cl an:::hlvo
del c6digo fucnte como entrada y produce unarcbivo en disco quecontiene las inslrucciones
de Jenguaje de miquina que correspooden a los enunciados del e6digo fuente. Las
instrucciones del lenguaje de miquina crudas por el compilador son Ilamadas cOdjgo
objeto. y eI archivo de disco que las oonticoe, archive objeto.

Cada compilaoor requiere que se usen sus propios comandos para crear el c6digo objelo.
Para compilar tfpicamente se usael comaDdoque pone en ejecuci6n el compilador seguido
del nombre de archivo del archi.vo fuente. Los siguieme5 son ejemplos de comandos dados
paracompilar un archivo fuente Uamado RADWS.C usando varios compiladores para DOS:

C de Microsoft

cI radius.c

Turbo C de Borland

IcC

C de Borland

bee radiU5.C

C de 2'.oc1ec

z.tc radius.c

radius.c

Para compilar RADIUS.C en una ~u.ina UNIX. use


cc udiul.c
Consulte el manual del compilador para detenninar el comando exaclO para su compilador.

Desputs de que se compile. se tiene un arehivo objeto. Si se ve una ]iSla de los archivos del
direcloriodoDde se hizo lacom piiaci6n, se debernencontrarun archivocon ei mismo nombre

que eI archi.vo fuente pero con una extensi6n .0Bl (e n vez de eXIensi6n .C). La eXIensi6n
.0Bl es reconocida como un arehi.vo objelo. y usada par el enlazador. En sistemas UNIX
el compilacior ceca archi.vos objelo con la extensi6n .0, en vez de la extensi6n .08J.
8

Enlazar para crear un archivo ejecutable


Se requiere un paso adicional antes de que se pueda ejecutar el programa. Parte del1enguaje
C es una biblioteca de funciones que contiene el c6digo objeto (esto es, c6digo que ya ha sido
compilado) para funciones predefmidas. Una funci6n predefinida contiene c6digo C que ya
ha sido escrito, y se proporciona en una formalista para usarse con el paquete del compilador.
La funci6n printf ( ), usada en el ejemplo anterior, es una funci6n de biblioteca.
Estas funciones de biblioteca ejecutan tareas que se necesitan frecuentemente, como el
desplegado de la informaci6n en la pantalla y la lectura de datos a partir de archivos de disco .
Si el programa usa cualquiera de estas funciones (y dificilmente existe un programa que no
use por 10 menos una de eHas), el archivo objeto producido cuando fue compilado el c6digo
fuente debe ser combinado con el c6digo objeto de la biblioteca de funciones para crear el
programa final ejecutable. (Ejecutable significa que el programa puede correr, 0 ser
ejecutado, en la computadora.) Este proceso es Hamado enlazado y es ejecutado por un
program a Hamado ( jadivfnelo!) enlazador.
Los pasos des de el c6digo fuente al c6digo objeto y al programa ejecutable estan diagramados
en la figura 1.1 .

i--\

L----I

Usodel

,""-. ed. ito.r . . .

Compilaci6n del
archivo fuente

Enlace del
archivo objeto

Figura 1.1. El c6digo fuente del C que se escribe se convierte en c6digo objeto mediante el
compilador y, despues, en un archivo ejecutable por el enlazador,
9

Comienzo

Completando el cicIo de desarrollo


Una vez que el programa esta compilado y enlazado para crear un archivo ejecutable, se
puede correr tecleando su nombre en la linea de comandos del sistema, en forma similar
como se hace con cualquier otro programa. Si se ejecuta el programa y se reciben resultados
diferentes a 10 que se creta 0 debiera, hay que regresar al primer paso. Se debe identificar
10 que caus6 el problema y corregirlo en el c6digo fuente. Cuando se hace un cambio al
codigo fuente, se necesita volver a compilar y enlazar el programa para crear una versi6n
corregida del archivo ejecutable. iSeguiremos este ciclo hasta que se logre que el programa
ejecute exactamente como se pretende!
Una nota [mal sobre la compilaci6n y el enlazado. Aunque la compilaci6n y el enlazado se
mencionan como pasos separados, muchos compiladores, como los de DOS mencionados
anteriormente, hacen ambas cos as en un solo paso. Sin to mar en cuenta el metodo por el cual
se logra la compilacion y el enlazado, comprenda que estos dos procesos, aunque se hagan
con un solo comando, son dos acciones separadas.

CicIo de desarrollo del C


Paso 1:

Use un editor para escribir el codigo fuente. Par tradici6n, los archivos del
c6digo fuente de C tienen la extension .C (por ejemplo, MYPROG.C,
DA TABASE.C, etcetera).

Paso 2:

Compile el programa con un compilador. Si el compilador no encuentra


ningun error en el programa, produce un archivo objeto. El compilador
produce archivos objeto con la extension .OBJ y el mismo nombre que el
archivo de c6digo fuente (por ejemplo, la compilacion de MYPROG.C da
MYPROG.OBJ). Si el compilador encuentra errores, los reporta. Se debe
regresar al paso 1 para hacer correcciones al codigo fuente.

Paso 3:

Enlace el programa con un enlazador. Si no hay errores, el enlazador


produce un programa ejecutable, que se encuentra en un archivo de disco con
la extension .EXE y el mismo nombre que el archivo objeto (por ejemplo,
el enlazado de MYPROG.OBJ da MYPROG.EXE).

Paso 4:

Ejecute el programa. Se debe probar para determinar si funciona


adecuadamente. Si no 10 hace, vuelva a empezar con el paso 1 y haga
modificaciones y adiciones al c6digo fuente.

Los pasos para el desarrollo de programas se presentan en forma esquematica en la figura


1.2. Para casi todos, a excepcion de los programas mas simples, se puede pasar por esta
secuencia muchas veces antes de terminar el programa. iIncluso los programadores mas
experimentados no pueden sentarse y escribir un programa completo y sin errores en un solo
paso! Debido a que va a estar pasando por el ciclo: editar-compilar-enlazar-probar muchas

veces, es importante que se familiarice con las herramientas: el editor, el compilador y el


enlazador.

51

51

51

Figura 1.2. Los pasos en eL desarrollo de La programaci6n en C.

EI primer programa en C
i Probablemente este ansioso de intentar el primer programa C! Para ayudarle a farniliarizarse
con el compilador, a continuaci6n se presenta una muestra nipida para que la haga. Tal vez
11

Comienzo

no entienda todo en este momento, pero debeni ambientarse al proceso de escritura,


compilaci6n y ejecuci6n de un programa Creal.
Esta muestra usa un programa llamado HELLO.C que no hace mas que desplegar las
palabras Hello , Wor l d ! en la pantalia. Este programa, una introducci6n tradicional ala
programaci6n en C, es bueno para que usted aprenda. El c6digo fuente para HELLO.C se
encuentra en ellistado de programa 1.1.

Listado 1.1. HELLO.C.


1: #include <stdio .h>
2:
3: mai n ()
4: {

5:

printf("Hello , World!') ;

6:

Asegurese de que ha instalado el compilador, como se especifica en las instrucciones de


instalaci6n proporcionadas con el software. Ya sea que este trabajando con UNIX, DOS 0
cualquier otro sistema operativo, asegurese de que comprende la manera de usar el
compilador y el editor que haya seleccionado. Una vez que se encuentre listo el compilador
y el editor, siga estos pasos para teclear, compilar y ejecutar a HELLO.C.

Tecleo y compilaci6n de HELLO.C


1. Active el directorio donde se encuentran los programas de C y arranque el editor.
Como se dijo anteriormente,~uede usar cualguier editor de texto, pero la
mayoria de los nuevos compiladores C (como el Turbo c++ de Borland y el
QuickC de Microsoft) vienen con un ambiente de desarrollo integrado (IDE) que
Ie permite teclear, compilar y enlazar los programas en un ambiente adecuado.
Veanse los manuales para ver si su compilador tiene un IDE disponible.
2. Use el teclado para teclear el c6digo fuente de HELLO.C exactamente como se
muestra en ellistado 1.1. Oprima Enter al final de cada linea de c6digo.
3. Guarde el c6digo fuente. A este archivo debe darle el nombre HELLO.C.
4. Verifique que HELLO.C se encuentre en el disco haciendo un listado de los
archivos del directorio. Se debe ver a HELLO.C dentro de este listado.
5. Compile y enlace a HELLO.C. Ejecute el comando adecuado que especifique el
manual de su compilador. Se debe obtener un mensaje que indique que no hubo
errores.

12

6. Revise los mensajes del compilador. Si no se reciben errores, todo debe estar
correcto.
Pero, "que pasa si se comete algun error al teelear el programa? El compilador se
da cuenta de ello y despliega un mensaje de error en la pantalla. Por ejemplo, si en
vez de teelear la palabra print f se teele6 prnt f, se desplegani un mensaje
similar al siguiente:
Error: simbolos no definidos: -prntf en hello.c (hello.OBJ)

7. Regrese al paso 2, si se despliega este 0 cualquier otro mensaje de error. Abra el


archivo HELLO.C en el editor. Compare cuidadosamente el contenido del archivo
con ellistado 1.1 de este capitulo, hag a cualquier correcci6n necesaria y continue con
el paso 3 y los siguientes.
8. Su primer programa de C ahora debe compilar y estar listo para ejecutar. Si se
despliega un listado del directorio de todos los archivos llamados HELLO (y que
tengan cualquier extensi6n), se debeni ver 10 siguiente:

o
o
o

HELLO.C (que es el archivo de c6digo fuente que se cre6 con el editor).


HELLO.OBJ 0 HELLO.O (que contiene el c6digo objeto de HELLO.C).
HELLO.EXE (que es el program a ejecutable creado cuando se compi16 y
enlaz6 a HELLO. C).

9. Para correr 0 ejecutar a HELLO.EXE, simplemente teelee hello. El mensaje


Hello, world . es desplegado en la pantalla.
jFelicidades! Ya ha teeleado, compilado y ejecutado su primer programa en C. Evidentemente,
HELLO.C es un program a simple que no hace nada util, pero es bueno para un comienzo.
De hecho, debe recordar que la mayorfa de los expertos program adores de C de ahora
comenzaron aprendiendo C de esta rnisma forma, compilando HELLO.C, por 10 que esta
usted en buena compania.

Errores de compilaci6n
Un error de compilaci6n sucede cuando el compilador encuentra algo en el c6digo fuente
que no puede compilar. Una palabra mal esc rita, un error de tecleo 0 cualquier otra cosa
puede hacer que el compilador se atragante. Afortunadamente los compiladores modernos
no solamente se atragantan, jsino que dicen que es 10 que los esta atragantando y d6nde se
encuentra! Esto facilita encontrar y corregir los errores en el c6digo fuente.
Esto puede ilustrarse introduciendo un error en forma deliberada en HELLO.C. Si se hizo
este ejemplo (tal como debiera), ahora tiene una copia de HELLO.C en el disco. Usando el
editor, mueva el cursor al final de la linea que contiene la Hamada a printf () y borre el
punto y coma de terrninaci6n. HELLO.C ahora debe verse como en ellistado 1.2.
13

Comienzo

Listado 1.2. HELLO.C with an error.


1: #include <stdio.h>
2:
3: main()
4: (

5:

printf('Hello, World!')

6:

Ahora guarde el archivo. Se encuentra listo para compilar el archivo. Hagalo tecleando el
comando para el compilador. Debido al error que se ha cometido, la compilaci6n no puede
completarse. En vez de ello, el compilador despliega un mensaje en la pantalla similar al
siguiente:
hello. c (6)

Error: ';' esperado

Viendo esta linea, se puede ver que consta de tres partes.


hello.c, es el nombre del archivo donde se encuentra el error
(6), el numero de linea donde se encuentra el error
Error: ';' expected, una descripcion del error

Esto es bastante informativo, diciendole que en la linea 6 de HELLO.C el compilador


esperaba encontrar un punto y coma, pero no 10 encontr6. Claro, usted sabe que el punto y
coma fue quitado de la linea 5, Yhay una discrepancia. Nos encontramos con la incongruencia
de por que el compilador reporta un error en la linea 6, cuando de hecho el punto y coma fue
ornitido en el fmal de la linea 5. La respuesta se encuentra en el hecho de que el C no toma
en cuenta cosas como los cortes entre lineas. El punto y coma que corresponde despues del
enunciado pr int f ( ) pudo haber sido puesto en la siguiente linea (aunque hacerlo as! hubiera
sido una mala pnictica de programaci6n). S610 despues de haber llegado a la Have de la linea
6 el compilador esta segura de que Ie falta el punto y coma; por 10 tanto, reporta que el error
esta en la linea 6.
Esto saca a relucir un hecho inoegable acerca de los compiladores de C y los mensajes de
error. Aunque el compilador es muy listo acerca de la detecci6n y localizaci6n de errores,
no es Einstein. Uno debe usar su conocimiento de lenguaje C, interpretar los mensajes del
compilador y determinar la posici6n actual de cualquier error que reporte. A veces se encuentra en la linea reportada por el compilador y, en caso de no ser as!, casi siempre se
encuentra en la linea anterior. AI principio cuesta un poco de trabajo encontrar los errores,
pero luego Ie sera mas facil.
Antes de abandonar este tema, veamos otro ejemplo de un error de compilaci6n. Cargue
HELLO.C nuevamente en el editor y haga los siguientes cambios:
1. Reemplace el punto y coma al final de la linea 5.
2. Borre las comillas que se encuentran antes de la palabra Hello.
14

Guarde el archivo en disco y vuelva a compilar el programa. En esta ocasi6n, el compilador


debe desplegar mensajes de error similares a los siguientes:
hello.c(5) : Error: identificador no definido 'Hello'
hello.c(6) : Error lexico: cadena no terminada
Error lexico: cadena no determinada
Error lexico: cadena no determinada
Error fatal: final prematuro del archivo fuente

El primer mensaje de error encuentra al error correctamente, ubica.ndolo en la linea 5 en la


palabra Hello. El mensaj e de error un i den t i f i ed i den t if i er significa que el compilador no
sabe que hacer con la palabra Hello, ya que no esta entre comillas. Sin embargo, (,que hay
acerca de los otros cuatro errores que reporta? Estos errores, de cuyo significado no tenemos
que preocuparnos ahora, ilustran el hecho de que un solo error en un programa C algunas
veces puede causar varios mensajes de error.
La lecci6n por aprender de todo esto es la siguiente: si el compilador reporta varios errores
y solamente se puede encontrar uno, siga adelante, corrija el error y vuelva a compilar. Tal
vez encuentre que una sola correcci6n es todo 10 que se necesita y que ahora e1 programa
compila sin errores.

Mensajes de error del enlazador


Los errores del enlazador son relativamente raros y, por 10 general, se deben a errores de
escritura del nombre de una funci6n de biblioteca de C. En este caso, se obtiene el mensaje
de error Error: undefined symbols:, seguido del nombre mal tecleado (y precedido por un
signo de subrayado). Una vez que se corrige la palabra, el problema debe desaparecer.

Resumen
Despues de leer este capitulo, debe usted tener confianza de que la selecci6n del C como su
lenguaje de programaci6n es una buena selecci6n. El C proporciona una combinaci6n de
poder, popularidad y portabilidad sin paralelo. Estos factores, junto con la intima relaci6n
del C con el nuevo lenguaje orientado a objetos C++, hacen al C inmejorable.
Este capitulo ha explicado los varios pasos involucrados en la escritura de un programa en
C, el proceso conocido como desarrollo de programa. Se debe tener una clara comprensi6n
del ciclo editar-compilar-enlazar-probar, asi como de las herrarnientas que se han de usar
para cada paso.
Los errores son una parte jneyjtable del desarrollo de programas. El compilador de C detecta
errores en el c6digo fuente y despliega mensajes de error dando la naturaleza y la ubicaci6n
del error. Con esta informaci6n se puede editar e1 c6digo fuente para corregir el error. Sin

15

Comienzo

embargo, recuerde que el compilador no siempre puede reportar con precisi6n la naturaleza
y ubicaci6n del error. Algunas veces necesitani usar su conocimiento del C para localizar
exactamente 10 que esta causando un deterrninado mensaje de error.

Preguntas y respuestas
1. Si quiero darle a alguien un programa que escribf, l,que archivos debo darle?
Una de las cosas buenas acerca del C es que es un lenguaje compilado. Esto
significa que despues de que el c6digo fuente es compilado, se tiene un programa
ejecutable. Este programa ejecutable es un programa aislado. Si quiere dar
HELLO a todos sus arnigos que tengan computadora, 10 puede hacer. Todo 10 que
necesita darles es el programa ejecutable HELLO.EXE. Ellos no necesitan el
archivo fuente HELLO.C ni el archivo objeto HELLO.OBJ. ilncluso ni necesitan
tener su propio compilador C!
2. Despues de haber creado un archivo ejecutable, l,necesito guardar el archivo
fuente (.C) 0 el archivo objeto (.OBJ)?
Si se deshace del archivo fuente, no tiene manera de hacer cambios al programa
en el futuro; por 10 tanto, idebe guardar este archivo! Los archivos objeto son una
cosa aparte. Hay razones para guardar los archivos objeto. Sin embargo, por el
momento esta fuera del alcance de 10 que estamos haciendo. Por ahora, usted
puede deshacerse de los archivos objeto una vez que tenga el archivo ejecutable.
Si necesita el archivo objeto, se puede recompilar el archivo fuente.
3. Si mi compilador viene con un editor, l,tengo que usarlo?
Definitivamente no. Se puede usar cualquier editor, siempre y cuando guarde el
c6digo fuente en formato de texto. Si el compilador viene con un editor, trate de
usarlo. Si usted tiene un editor mejor, uselo. Yo (Brad) uso un editor que compre
por separado, aunque todos rnis compiladores tienen sus propios editores. Los
editores que vienen con los compiladores son cada vez mejores. Algunos de ellos
formatean automaticamente el c6digo C. Otros codifican con color diferentes
partes del archivo fuente para facilitar la busqueda de errores.
4. l,Puedo ignorar los mensajes de advertencia?
Algunos mensajes de advertencia no afectan la manera en que un programa
ejecuta, pero otros sf. Si el compilador Ie da un mensaje de advertencia, es seiial
de que algo no esta completamente bien. La mayorfa de los compiladores Ie
perrniten ajustar el nivel de mensajes de advertencia. Ajustando el nivel de los
mensajes, se pueden obtener solamente los mensajes mas delicados u obtener
todos los mensajes, aun los mas banales. Algunos compiladores hasta Ie dan
16

varios niveles intermedios. En los programas se debe ver cada mensaje y tomar
una determinaci6n. Siempre es mejor tratar de escribir todos los programas sin
que aparezca ningun mensaje de advertencia 0 de error. (Con un men~aje de error
el compilador no creani el archivo ejecutable.)

Taller
El taller Ie proporciona preguntas que Ie ayudanin a afianzar su comprensi6n del material
tratado asi como ejercicios que Ie danin experiencia en el uso de 10 aprendido. Trate de
comprender el cuestionario y de las respuestas antes de continuar al siguiente capitulo. Las
respuestas se proporcionan en el apendice G, "Respuestas".

Cuestionario
1. De tres razones por las cuales el C es la mejor seleccion de lenguaje de
programacion.
2.

~ Que

3.

~Cu:Hes

hace el compilador?
son los pasos en el ciclo de desarrollo en el programa?

4. "Que coman do se necesita teclear para compilar un programa llamado


PROGRAM1.C en su compilador?
5. "Su compilador ejecuta el enlazado y la compilacion con un solo comando
tienen que dar comandos separados?

se

6. "Que extension se debe usar para los archivos fuente del C?


7. "Es FILENAME. TXT un nombre valido para un archivo fuente del C?
8. Si se ejecuta un programa que se ha compilado y no funciona como se esperaba,
"que se debe hacer?
9. "Que es ellenguaje de maquina?
10. "Que hace el enlazador?

Ejercicios
1. Use el editor de texto para ver el archivo objeto creado por ellistado 1.1. "Se
parece el archivo objeto al archivo fuente? (No guarde este archivo cuando salga
del editor.)

2. Teclee el siguiente programa y compfielo. "Que hace este programa? (No incluya
los numeros de linea.)
17

Comienzo

1: #include <stdio.h>
2:
3: int radius, area;

4:
5: main ()
6: {
7:
printf( "Enter radius (i.e. 10): ",);
8:
scanf( "%d", &radius );
9:
area = 3.14159 * radius * radius;
10:
printf( "\n\nArea = %d", area );
11 :
return 0;

12 :

3. Teclee y compile el siguiente programa. l.Qu6 hace este programa?


1: #include <stdio.h>
2:
3: int x,y;

4:
5: main(}
6: {
7:
for (x = 0; x < 10; x++, printf( "\n") )
8:
for ( y = 0; Y < 10; y++ )
9:
printf( "X" );
10:
11:
return 0;

12 :

4. BUSQUEDA DE ERRORES: EI siguiente programa tiene un problema. Tecl6elo


en el editor y compilelo. l.Qu6 linea genera mensajes de error?
1: #include <stdio.h>
2:
3, main () ;
4: (
5:
printf( "Keep looking !" );
6:
printf( "You\'ll find it!" );
7:
return 0;
8:

18

5. BUSQUEDA DE ERRORES: El siguiente programa tiene un problema. Tecleelo


en el editor y compflelo. "Que lfnea da problemas?
1: #include <stdio.h>
2:

3: main ()
4:
5:
printf ( "This is a program with a " );
6:
do_it ( "problem!");
7:
return 0;
8:

6. Raga los siguientes cambios al programa del ejercicio mimero 3. Vuelvalo a


compilar y ejecute este programa. "Que hace ahora el programa?
printf ( "%c", 1 );

9:

7. Teclee y compile el siguiente programa. Este programa puede usarse para


imprimir sus listados. Si se tienen errores, asegurese de haber tecleado el
programa correctamente.
El uso de este programa es PRINT_IT nombre de archivo.ext, donde nombre de
archivo.ext es el nombre de archivo fuente junto con su extensi6n. Observe que
este programa afiade numeros de lfnea allistado. (No se preocupe por la longitud
de este programa; no espero que 10 entienda todavia. Se incluye aqui para
ayudarle a comparar las impresiones de sus programas con las que se dan en el
libro.)
1:

/* PRINT_IT.C- Este programa imprime un listado con numeros de


linea* /

2:

3:

#include <stdio.h>

4:

5:
6:
7:

void do_heading(char *filename);


int line, page;

8:

9:

main( int argv, char *argc[] )

10:
11:
12:
13:

char buffer[256];
FILE *fp;

14:

if( argv < 2 )

15:

19

-- 1"

17:
II:
l!,
20:
21 :

-.

~.-.

!it

22 :
2]:

~fprintf(stderr. ' \nProper Usage is: );


fprintf(stderr , ' \n\nPRINT_IT f ilename.ext\n' );
exit!! ) ;
)

if II fp = topen ! argc[l). ' r' )) := truLL I

I
fprintf! stderr, 'Error opening file, %5! ' , argc[l]);
exit (1);

24 :
25 :

26 :
27:
28 :

page'" 0;
li ne = 1;

29,

do_heading{ argc (l l) ;

3D:

31:

while! fgets( buffer, 256, fp) != NULL )

32:

33:

if ( line 1; S5 == 0

do_heading ( argc[l] ) ;

]4 :

35 :

36:

fprintf! stdprn, 'U d:\ t %s ' , line++, buf f er );

)7 :

38 :
39 :
40 :
41 :

fprintf! stdprn, ' \ t o I;


fclose (fp l ;
return 0;

42 :
43 :

44 :

void do_heading! char filename )

45,
46:

pagett;

47 :

if (page>l)
f printE( stdprn, '\f o

48:
49:
SO:
51 :
52;

!O

);

(pc i ntf ( stdprn, ' Page: \d, %5 \ n \ n ' . page, filename);


}

Vous aimerez peut-être aussi