Está en la página 1de 87

C/C++

Curso de Programacin
4. edicin
Fco. Javier Ceballos Sierra
Profesor titular de la
Escuela Politcnica Superior
Universidad de Alcal

http://www.fjceballos.es/

C/C++: Curso de programacin. 4. edicin


Fco. Javier Ceballos Sierra
De la edicin: RA-MA 2015
MARCAS COMERCIALES: las marcas de los productos citados en el contenido de este libro
(sean o no marcas registradas) pertenecen a sus respectivos propietarios. RA-MA no est
asociada a ningn producto o fabricante mencionado en la obra, los datos y los ejemplos
utilizados son ficticios salvo que se indique lo contrario.
RA-MA es una marca comercial registrada.
Se ha puesto el mximo empeo en ofrecer al lector una informacin completa y precisa.
Sin embargo, RA-MA Editorial no asume ninguna responsabilidad derivada de su uso,
ni tampoco por cualquier violacin de patentes ni otros derechos de terceras partes que pudieran
ocurrir. Esta publicacin tiene por objeto proporcionar unos conocimientos precisos y acreditados
sobre el tema tratado. Su venta no supone para el editor ninguna forma de asistencia legal,
administrativa ni de ningn otro tipo. En caso de precisarse asesora legal u otra forma de ayuda
experta, deben buscarse los servicios de un profesional competente.
Reservados todos los derechos de publicacin en cualquier idioma.
Segn lo dispuesto en el Cdigo Penal vigente, ninguna parte de este libro puede ser
reproducida, grabada en sistema de almacenamiento o transmitida en forma alguna ni
por cualquier procedimiento, ya sea electrnico, mecnico, reprogrfico, magntico o
cualquier otro, sin autorizacin previa y por escrito de RA-MA; su contenido est protegido
por la ley vigente, que establece penas de prisin y/o multas a quienes intencionadamente
reprodujeren o plagiaren, en todo o en parte, una obra literaria, artstica o cientfica.
Editado por:
RA-MA Editorial
C/ Jarama, 3A, Polgono industrial Igarsa
28860 Paracuellos del Jarama, Madrid
Telfono: 91 658 42 80
Telefax: 91 662 81 39
Correo electrnico: editorial@ra-ma.com
Internet: www.ra-ma.es y www.ra-ma.com
ISBN: 978-84-9964-527-8
Depsito Legal: M-2512-2015
Autoedicin: Fco. Javier Ceballos
Filmacin e impresin: Copias Centro, S.L.
Impreso en Espaa
Primera impresin: marzo 2015

La mente es como un paracadas.


Solo funciona si la tenemos abierta.
Einstein
Dedico esta obra
a Mara del Carmen, mi esposa,
y a mis hijos Francisco y Javier.

CONTENIDO
PRLOGO.............................................................................................................. XIX
CAPTULO 1. FASES EN EL DESARROLLO DE UN PROGRAMA ............

QU ES UN PROGRAMA.................................................................................
LENGUAJES DE PROGRAMACIN...............................................................
Compiladores .................................................................................................
Intrpretes.......................................................................................................
QU ES C? ........................................................................................................
HISTORIA DEL LENGUAJE C ........................................................................
Lenguaje C++.................................................................................................
REALIZACIN DE UN PROGRAMA EN C ...................................................
Edicin de un programa .................................................................................
Qu hace este programa?.........................................................................
Guardar el programa escrito en el disco .........................................................
Compilar y ejecutar el programa ....................................................................
Biblioteca de funciones .............................................................................
Guardar el programa ejecutable en el disco ...................................................
Depurar un programa .....................................................................................
UN AVANCE SOBRE LA PROGRAMACIN CON C ...................................
Entrada y salida ..............................................................................................
Matrices ..........................................................................................................
Sentencias de control .....................................................................................
Funciones .......................................................................................................
EJERCICIOS RESUELTOS ...............................................................................
EJERCICIOS PROPUESTOS.............................................................................

1
2
4
4
4
5
6
7
8
9
10
10
11
12
13
13
14
15
16
18
19
21

VIII

C/C++: CURSO DE PROGRAMACIN

CAPTULO 2. ELEMENTOS DEL LENGUAJE C ...........................................

23

PRESENTACIN DE LA SINTAXIS DE C .....................................................


CARACTERES DE C .........................................................................................
Letras, dgitos y carcter de subrayado ..........................................................
Espacios en blanco .........................................................................................
Caracteres especiales y signos de puntuacin ................................................
Secuencias de escape......................................................................................
TIPOS DE DATOS .............................................................................................
Tipos primitivos .............................................................................................
char............................................................................................................
short ..........................................................................................................
int ..............................................................................................................
long ...........................................................................................................
enum..........................................................................................................
Creacin de una enumeracin ..............................................................
float ...........................................................................................................
double........................................................................................................
Ejemplo: tipos de datos ..................................................................................
Tipos derivados ..............................................................................................
SINNIMOS DE UN TIPO ................................................................................
LITERALES .......................................................................................................
Literales enteros .............................................................................................
Literales reales ...............................................................................................
Literales de un solo carcter ...........................................................................
Literales de cadenas de caracteres ..................................................................
IDENTIFICADORES .........................................................................................
PALABRAS CLAVE ..........................................................................................
COMENTARIOS ................................................................................................
DECLARACIN DE CONSTANTES SIMBLICAS ......................................
Constantes C++ ..............................................................................................
Por qu utilizar constantes? ..........................................................................
DECLARACIN DE UNA VARIABLE ...........................................................
Iniciacin de una variable ..............................................................................
EXPRESIONES NUMRICAS ..........................................................................
OPERADORES...................................................................................................
Operadores aritmticos...................................................................................
Operadores de relacin...................................................................................
Operadores lgicos .........................................................................................
Operadores unitarios ......................................................................................
Operadores a nivel de bits ..............................................................................
Operadores de asignacin ..............................................................................
Operador condicional .....................................................................................

23
24
24
24
25
25
26
26
27
28
28
28
29
29
31
32
32
33
33
35
35
36
36
37
38
38
39
39
40
40
40
41
42
42
42
44
45
46
46
47
49

CONTENIDO

IX

Otros operadores ............................................................................................


Operador sizeof .........................................................................................
Operador coma ..........................................................................................
Operador direccin-de ..............................................................................
Operador de indireccin ............................................................................
PRIORIDAD Y ORDEN DE EVALUACIN ...................................................
CONVERSIN ENTRE TIPOS DE DATOS.....................................................
EJERCICIOS RESUELTOS ...............................................................................
EJERCICIOS PROPUESTOS.............................................................................

50
50
51
51
52
53
54
58
60

CAPTULO 3. ESTRUCTURA DE UN PROGRAMA...........................................

63

ESTRUCTURA DE UN PROGRAMA C ..........................................................


Directrices para el preprocesador ...................................................................
Directriz de inclusin ................................................................................
Directriz de sustitucin .............................................................................
Definiciones y declaraciones..........................................................................
Sentencia simple ............................................................................................
Sentencia compuesta o bloque .......................................................................
Funciones .......................................................................................................
Declaracin de una funcin ......................................................................
Definicin de una funcin .........................................................................
Llamada a una funcin ..............................................................................
Funcin main..................................................................................................
Un ejemplo .....................................................................................................
PASANDO ARGUMENTOS A LAS FUNCIONES..........................................
PROGRAMA C FORMADO POR MLTIPLES FICHEROS ..........................
MBITO DE UNA VARIABLE ........................................................................
Variables globales y locales ...........................................................................
CLASES DE ALMACENAMIENTO DE UNA VARIABLE............................
Calificacin de variables globales ..................................................................
Calificacin de variables locales ....................................................................
Calificacin de funciones ...............................................................................
EJERCICIOS RESUELTOS ...............................................................................
EJERCICIOS PROPUESTOS.............................................................................

63
67
68
68
69
69
70
70
71
73
75
75
76
77
81
83
84
86
86
88
90
90
93

CAPTULO 4. ENTRADA Y SALIDA ESTNDAR .........................................

99

DATOS NUMRICOS Y CADENAS DE CARACTERES ..............................


FLUJOS DE E/S ESTNDAR ...........................................................................
SALIDA CON FORMATO ................................................................................
ENTRADA CON FORMATO ............................................................................

100
101
102
108

C/C++: CURSO DE PROGRAMACIN

CARCTER FIN DE FICHERO ........................................................................


CARCTER \n ...................................................................................................
Limpiar el buffer de la entrada estndar.........................................................
LEER UN CARCTER DE LA ENTRADA ESTNDAR ...............................
ESCRIBIR UN CARCTER EN LA SALIDA ESTNDAR ...........................
FUNCIONES getch y getche ..............................................................................
LEER UNA CADENA DE CARACTERES ......................................................
VALIDAR UN DATO DE ENTRADA ..............................................................
REUTILIZAR CDIGO .....................................................................................
LIMPIAR LA PANTALLA ................................................................................
EJERCICIOS RESUELTOS ...............................................................................
EJERCICIOS PROPUESTOS.............................................................................

114
115
117
118
119
120
121
124
126
128
128
133

CAPTULO 5. SENTENCIAS DE CONTROL ................................................... 139


SENTENCIA if ...................................................................................................
ANIDAMIENTO DE SENTENCIAS if .............................................................
ESTRUCTURA else if ........................................................................................
SENTENCIA switch ...........................................................................................
SENTENCIA while .............................................................................................
Bucles anidados..............................................................................................
SENTENCIA do ... while ....................................................................................
SENTENCIA for .................................................................................................
SENTENCIA break .............................................................................................
SENTENCIA continue ........................................................................................
SENTENCIA goto ..............................................................................................
EJERCICIOS RESUELTOS ...............................................................................
EJERCICIOS PROPUESTOS.............................................................................

139
141
144
147
151
154
157
160
163
164
164
165
180

CAPTULO 6. TIPOS ESTRUCTURADOS DE DATOS .................................. 187


INTRODUCCIN A LAS MATRICES .............................................................
MATRICES NUMRICAS UNIDIMENSIONALES ........................................
Definir una matriz ..........................................................................................
Acceder a los elementos de una matriz ..........................................................
Trabajar con matrices unidimensionales ........................................................
Iniciar una matriz ...........................................................................................
Matrices asociativas .......................................................................................
CADENAS DE CARACTERES .........................................................................
Leer y escribir una cadena de caracteres ........................................................
Funciones gets y fgets ...............................................................................
Funcin puts ..............................................................................................

188
189
189
190
191
195
196
200
201
201
203

CONTENIDO

Trabajar con cadenas de caracteres ................................................................


Funciones de la biblioteca de C .....................................................................
TIPO Y TAMAO DE UNA MATRIZ .............................................................
MATRICES MULTIDIMENSIONALES ...........................................................
Matrices numricas multidimensionales ........................................................
Matrices de cadenas de caracteres ..................................................................
COPIAR MATRICES .........................................................................................
TRABAJAR CON BLOQUES DE BYTES .......................................................
ESTRUCTURAS ................................................................................................
Crear una estructura .......................................................................................
Definir variables de un tipo de estructura ......................................................
Acceso a los miembros de una estructura ......................................................
Miembros que son estructuras ........................................................................
Operaciones con estructuras ...........................................................................
Matrices de estructuras ...................................................................................
UNIONES ...........................................................................................................
Estructuras variables ......................................................................................
CAMPOS DE BITS ............................................................................................
EJERCICIOS RESUELTOS ...............................................................................
EJERCICIOS PROPUESTOS.............................................................................

XI

206
207
208
209
209
214
218
220
221
221
222
224
225
226
231
234
237
242
246
259

CAPTULO 7. PUNTEROS .................................................................................. 267


CREACIN DE PUNTEROS ............................................................................
Operadores .....................................................................................................
Importancia del tipo del objeto al que se apunta ............................................
OPERACIONES CON PUNTEROS ..................................................................
Operacin de asignacin ................................................................................
Operaciones aritmticas .................................................................................
Comparacin de punteros...............................................................................
Punteros genricos .........................................................................................
Puntero nulo ...................................................................................................
Punteros constantes ........................................................................................
PUNTEROS Y MATRICES ...............................................................................
Punteros a cadenas de caracteres....................................................................
MATRICES DE PUNTEROS .............................................................................
Punteros a punteros ........................................................................................
Matriz de punteros a cadenas de caracteres ...................................................
Ordenar matrices de cadenas de caracteres ....................................................
ASIGNACIN DINMICA DE MEMORIA ....................................................
Funciones para administrar dinmicamente la memoria ..................................
malloc........................................................................................................

267
269
270
271
271
272
274
274
276
277
277
282
286
288
291
295
299
299
299

XII

C/C++: CURSO DE PROGRAMACIN

free ............................................................................................................
Reasignar un bloque de memoria ...................................................................
MATRICES DINMICAS .................................................................................
Matrices dinmicas numricas .......................................................................
Matrices dinmicas de una dimensin ......................................................
Matrices dinmicas de dos dimensiones ...................................................
Matrices dinmicas de cadenas de caracteres.................................................
PUNTEROS A ESTRUCTURAS .......................................................................
PUNTEROS COMO PARMETROS EN FUNCIONES ..................................
DECLARACIONES COMPLEJAS ....................................................................
EJERCICIOS RESUELTOS ...............................................................................
EJERCICIOS PROPUESTOS.............................................................................

301
302
304
305
305
309
313
317
320
326
327
337

CAPTULO 8. MS SOBRE FUNCIONES ........................................................ 347


PASAR UNA MATRIZ COMO ARGUMENTO A UNA FUNCIN .....................
Matrices estticas ...........................................................................................
Matrices dinmicas.........................................................................................
PASAR UN PUNTERO COMO ARGUMENTO A UNA FUNCIN ......................
PASAR UNA ESTRUCTURA A UNA FUNCIN ...........................................
DATOS RETORNADOS POR UNA FUNCIN ...............................................
Retornar una copia de los datos .....................................................................
Retornar un puntero al bloque de datos..........................................................
Retornar la direccin de una variable declarada static ...................................
ARGUMENTOS EN LA LNEA DE RDENES ..............................................
REDIRECCIN DE LA ENTRADA Y DE LA SALIDA .................................
FUNCIONES RECURSIVAS.............................................................................
PUNTEROS A FUNCIONES .............................................................................
EJERCICIOS RESUELTOS ...............................................................................
EJERCICIOS PROPUESTOS.............................................................................

347
348
350
352
354
358
359
360
361
363
365
367
369
376
392

CAPTULO 9. TRABAJAR CON FICHEROS................................................... 401


VISIN GENERAL DE LOS FLUJOS DE E/S.................................................
VISIN GENERAL DE UN FICHERO.............................................................
ABRIR UN FICHERO ........................................................................................
fopen ..............................................................................................................
freopen ...........................................................................................................
CERRAR UN FICHERO ....................................................................................
fclose ..............................................................................................................
MANIPULACIN DE ERRORES .....................................................................
ferror ..............................................................................................................

403
405
409
409
411
412
412
413
413

CONTENIDO

XIII

clearerr ...........................................................................................................
feof .................................................................................................................
perror ..............................................................................................................
POSICIN DEL PUNTERO DE L/E .................................................................
ftell .................................................................................................................
fseek ...............................................................................................................
rewind ............................................................................................................
E/S CARCTER A CARCTER.......................................................................
fputc ...............................................................................................................
fgetc................................................................................................................
E/S DE CADENAS DE CARACTERES ............................................................
fputs................................................................................................................
fgets ................................................................................................................
ENTRADA/SALIDA CON FORMATO ............................................................
fprintf .............................................................................................................
fscanf ..............................................................................................................
E/S UTILIZANDO REGISTROS .......................................................................
fwrite ..............................................................................................................
fread ...............................................................................................................
ABRIENDO FICHEROS PARA ACCESO SECUENCIAL ..............................
Un ejemplo de acceso secuencial ...................................................................
ESCRIBIR DATOS EN UNA IMPRESORA .....................................................
Escribir en una impresora USB ......................................................................
CONTROL DEL BUFFER ASOCIADO CON UN FLUJO...............................
setvbuf ............................................................................................................
fflush ..............................................................................................................
FICHEROS TEMPORALES ..............................................................................
tmpfile ............................................................................................................
ABRIENDO FICHEROS PARA ACCESO ALEATORIO ................................
EJERCICIOS RESUELTOS ...............................................................................
EJERCICIOS PROPUESTOS.............................................................................

413
414
415
417
417
417
418
418
419
420
422
422
423
425
425
426
427
428
428
429
430
434
436
437
438
441
441
441
441
445
464

CAPTULO 10. EL PREPROCESADOR DE C ................................................. 471


DIRECTRIZ #define ...........................................................................................
Macros predefinidas .......................................................................................
El operador # ..................................................................................................
El operador ## ................................................................................................
DIRECTRIZ #undef ............................................................................................
DIRECTRIZ #include .........................................................................................
COMPILACIN CONDICIONAL ....................................................................
Operador defined............................................................................................

472
475
476
476
476
477
477
479

XIV

C/C++: CURSO DE PROGRAMACIN

CONSTANTE DEFINIDA EN LA ORDEN DE COMPILACIN ...................


DIRECTRICES #ifdef e #ifndef .........................................................................
DIRECTRIZ #line ...............................................................................................
DIRECTRIZ #error .............................................................................................
UTILIZACIN DE FICHEROS DE CABECERA ............................................
EJERCICIOS RESUELTOS ...............................................................................
EJERCICIOS PROPUESTOS.............................................................................

479
482
482
483
483
486
488

CAPTULO 11. ESTRUCTURAS DINMICAS ................................................ 495


LISTAS LINEALES ...........................................................................................
Listas lineales simplemente enlazadas ...........................................................
Operaciones bsicas .......................................................................................
Insercin de un elemento al comienzo de la lista ......................................
Buscar en una lista un elemento con un valor x ........................................
Insercin de un elemento en general .........................................................
Borrar un elemento de la lista ...................................................................
Recorrer una lista ......................................................................................
Borrar todos los elementos de una lista ....................................................
UN EJEMPLO CON LISTAS LINEALES.........................................................
Interfaz genrica para listas lineales...............................................................
LISTAS CIRCULARES .....................................................................................
Interfaz para manipular una lcse ....................................................................
PILAS..................................................................................................................
COLAS ................................................................................................................
Ejemplo ..........................................................................................................
LISTA DOBLEMENTE ENLAZADA ...............................................................
Lista circular doblemente enlazada ................................................................
Interfaz para manipular una lcde ...............................................................
Ejemplo .....................................................................................................
RBOLES...........................................................................................................
rboles binarios .............................................................................................
Formas de recorrer un rbol binario ...............................................................
RBOLES BINARIOS DE BSQUEDA ..........................................................
Interfaz para manipular un rbol binario de bsqueda ...................................
Buscar un nodo en el rbol .............................................................................
Insertar un nodo en el rbol............................................................................
Borrar un nodo del rbol ................................................................................
Utilizacin de la interfaz abb .........................................................................
RBOLES BINARIOS PERFECTAMENTE EQUILIBRADOS ......................
Interfaz para manipular un rbol perfectamente equilibrado .........................
Utilizacin de la interfaz abe..........................................................................

496
496
500
501
502
502
503
504
504
505
509
520
522
527
528
530
533
533
534
540
542
543
544
546
547
550
550
552
554
558
559
564

CONTENIDO

XV

EJERCICIOS RESUELTOS ............................................................................... 567


EJERCICIOS PROPUESTOS............................................................................. 582
CAPTULO 12. ALGORITMOS DE USO COMN .......................................... 591
RECURSIVIDAD ...............................................................................................
ORDENACIN DE DATOS ..............................................................................
Mtodo de la burbuja .....................................................................................
Mtodo de insercin .......................................................................................
Mtodo quicksort ...........................................................................................
Comparacin de los mtodos expuestos.........................................................
BSQUEDA DE DATOS ..................................................................................
Bsqueda secuencial ......................................................................................
Bsqueda binaria ............................................................................................
Bsqueda de cadenas .....................................................................................
ORDENACIN DE FICHEROS EN DISCO.....................................................
Ordenacin de ficheros. Acceso secuencial ...................................................
Ordenacin de ficheros. Acceso aleatorio ......................................................
ALGORITMOS HASH .......................................................................................
Matrices hash .................................................................................................
Mtodo hash abierto .......................................................................................
Mtodo hash con desbordamiento ..................................................................
Eliminacin de elementos ..............................................................................
Interfaz hash abierto .......................................................................................
Un ejemplo de una matriz hash ......................................................................
EJERCICIOS RESUELTOS ...............................................................................
EJERCICIOS PROPUESTOS.............................................................................

591
597
598
600
602
605
605
606
606
607
610
611
616
619
619
621
622
623
623
627
629
633

A. ALGUNAS FUNCIONES DE LA BIBLIOTECA DE C................................ 639


FUNCIONES DE CADENAS Y DE CARACTERES .......................................
strcat ...............................................................................................................
strcpy ..............................................................................................................
strchr ..............................................................................................................
strrchr .............................................................................................................
strcmp .............................................................................................................
strcspn ............................................................................................................
strlen ...............................................................................................................
strncat .............................................................................................................
strncpy ............................................................................................................
strncmp ...........................................................................................................
strspn ..............................................................................................................

639
639
640
640
640
642
643
644
644
645
645
645

XVI

C/C++: CURSO DE PROGRAMACIN

strstr................................................................................................................
strtok ..............................................................................................................
strlwr ..............................................................................................................
strupr ..............................................................................................................
Funciones para conversin de datos ...............................................................
atof .................................................................................................................
atoi..................................................................................................................
atol..................................................................................................................
sprintf .............................................................................................................
Funciones de caracteres..................................................................................
toascii .............................................................................................................
tolower ...........................................................................................................
toupper ...........................................................................................................
FUNCIONES MATEMTICAS ........................................................................
acos ................................................................................................................
asin .................................................................................................................
atan .................................................................................................................
atan2 ...............................................................................................................
cos ..................................................................................................................
sin ...................................................................................................................
tan ...................................................................................................................
cosh ................................................................................................................
sinh .................................................................................................................
tanh .................................................................................................................
exp ..................................................................................................................
log ..................................................................................................................
log10 ..............................................................................................................
ceil ..................................................................................................................
fabs .................................................................................................................
floor ................................................................................................................
pow .................................................................................................................
sqrt..................................................................................................................
NMEROS SEUDOALEATORIOS ..................................................................
rand ................................................................................................................
srand ...............................................................................................................
FUNCIONES DE FECHA Y HORA ..................................................................
clock ...............................................................................................................
time.................................................................................................................
ctime ...............................................................................................................
localtime .........................................................................................................
FUNCIONES PARA MANIPULAR BLOQUES DE MEMORIA ....................
memset ...........................................................................................................
memcpy ..........................................................................................................

645
646
647
647
647
648
648
648
649
650
650
650
650
651
652
652
652
652
653
653
653
653
653
654
654
654
654
654
655
655
655
655
656
656
656
656
656
657
657
658
659
659
659

CONTENIDO

XVII

memcmp ......................................................................................................... 660


B. ENTORNOS DE DESARROLLO.................................................................... 661
MICROSOFT VISUAL STUDIO .......................................................................
Aadir ficheros existentes a un proyecto .......................................................
Depurar la aplicacin .....................................................................................
INTERFAZ DE LNEA DE RDENES EN WINDOWS..................................
CREAR UNA BIBLIOTECA DE FUNCIONES................................................
NETBEANS ........................................................................................................
Depurar una aplicacin con NetBeans ...........................................................
INTERFAZ DE LNEA DE RDENES EN UNIX/LINUX ..............................
El depurador gdb de Unix/Linux ...................................................................
CODE::BLOCKS ................................................................................................

661
666
666
668
669
672
676
678
679
680

C. CDIGOS DE CARACTERES ....................................................................... 685


UTILIZACIN DE CARACTERES ANSI CON WINDOWS ..........................
JUEGO DE CARACTERES ANSI .....................................................................
UTILIZACIN DE CARACTERES ASCII .......................................................
JUEGO DE CARACTERES ASCII....................................................................
JUEGO DE CARACTERES UNICODE ............................................................

685
686
687
688
689

NDICE ................................................................................................................... 691

PRLOGO
Aprender C nunca ha sido fcil. Por eso el autor, apoyndose en su experiencia
docente, ha puesto todo su empeo en escribir un libro fcil de leer, progresivo en
el aprendizaje y con muchos ejemplos que aclaren lo expuesto.

Para quin es este libro


Este libro est pensado para aquellas personas que quieran aprender a escribir
programas, utilizando el lenguaje C, siguiendo una metodologa fundamentada en
tcnicas de desarrollo que conducen a realizar una programacin estructurada.
Para ello, qu debe hacer el lector? Pues simplemente leer ordenadamente los
captulos del libro, resolviendo cada uno de los ejemplos que en ellos se detallan.
Es evidente que el lenguaje C ha ido evolucionando a lo largo de su historia.
Producto de esta evolucin fue el lenguaje C++ y, finalmente, el diseo de una
amplia biblioteca de funciones para el desarrollo de aplicaciones con interfaz grfica (programacin visual). De ah que este libro sea el primero de una coleccin
de tres libros orientados al desarrollo de aplicaciones con C/C++. Entre los tres, y
en el orden comentado a continuacin, cubren los siguientes aspectos: programacin estructurada con C y programacin orientada a objetos con C++.
Este es el primero, C/C++: Curso de programacin. Abarca todo lo relativo
a la programacin estructurada con C. Tambin incluye diversos algoritmos de
uso comn as como desarrollos con estructuras dinmicas de datos. Por qu el
ttulo C/C++? Porque C++ fue desarrollado a partir del lenguaje de programacin
C y con pocas excepciones incluye a C. Esta parte de C incluida en C++ es conocida como C, y podra compilarse bajo C++ sin problemas. No obstante, cuando
C++ se utiliza para lo que fue pensado, para realizar una programacin orientada a
objetos, los conocimientos nuevos que hay que adquirir son cuantiosos.

XX

C/C++: CURSO DE PROGRAMACIN

El segundo, Programacin orientada a objetos con C++, estudia, como su


nombre indica, el desarrollo de aplicaciones orientadas a objetos. Esta tecnologa
es imprescindible conocerla si su propsito es llegar a desarrollar aplicaciones vistosas como lo son las aplicaciones a base de ventanas, ms bien conocidas como
aplicaciones para Windows.
Y el tercero, Enciclopedia de C++, incluye a los dos anteriores, pero con un
nuevo enfoque, ya que a lo largo de todos los captulos del libro solo se utiliza la
biblioteca de C++.
Por el contrario, si lo que usted persigue es profundizar en aplicaciones C incluyendo llamadas al sistema UNIX, entonces le recomiendo el libro de Francisco
Manuel Mrquez titulado UNIX, Programacin Avanzada, publicado tambin por
la editorial RA-MA.

Cmo est organizado el libro


El libro se ha dividido en doce captulos que van presentando el lenguaje poco a
poco, empezando por lo ms sencillo, viendo cada tema a su tiempo, hasta llegar
al final donde se habr visto todo lo referente a la programacin con el lenguaje
C, sin apenas encontrar dificultades. Se completa el estudio de C con un captulo
referente a estructuras dinmicas y otro de algoritmos de uso comn. El lector podr comprobar al final de esta obra que el nivel de conocimientos que ha adquirido es elevado.
El primer captulo introduce al lector en el mundo de la programacin C. El
segundo captulo presenta de una sola vez todos los elementos del lenguaje que el
lector utilizar constantemente en el resto de los captulos; por eso, debe simplemente leerse fijndose en los ejemplos y, por el momento, no preocuparse de ms;
posteriormente se podr retornar a l todas las veces que sean necesarias. El tercer
captulo presenta la estructura general de un programa C con un ejemplo; el lector
debe tambin leerlo con un objetivo: asimilar cmo es la estructura de un programa C y cul es su secuencia de ejecucin, sin tratar de aprender en este instante
todos los conceptos que ah se exponen. Ledos estos tres captulos, el lector tendr claro el escenario donde se va a mover. A partir del captulo 4 empezar a
aprender a programar; por lo tanto, el lector debe tener un poco de paciencia hasta
que se inicie en este captulo.
Este libro posee varias caractersticas dignas de resaltar. Es breve en teora y
abundante en ejemplos (ms de 250 ejercicios resueltos), lo que le har an ms
fcil el aprendizaje.

PRLOGO XXI

Estos captulos y apndices que componen la materia total de C/C++: Curso


de programacin se resumen as:
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
A.
B.
C.

Fases en el desarrollo de un programa.


Elementos del lenguaje C.
Estructura de un programa.
Entrada y salida estndar.
Sentencias de control.
Tipos estructurados de datos.
Punteros.
Ms sobre funciones.
Trabajar con ficheros.
El preprocesador de C.
Estructuras dinmicas.
Algoritmos de uso comn.
Algunas funciones de la biblioteca de C.
Entornos de desarrollo.
Cdigos de caracteres.

Todo esto se ha documentado con abundantes ejemplos, ejercicios resueltos y


ejercicios propuestos, de los cuales tambin se da su solucin en un ZIP, muchos
de ellos vlidos como parte integrante en el desarrollo de aplicaciones.

Agradecimientos
He recibido ideas y sugerencias de algunas personas durante la preparacin de este libro, entre las que se encuentran, cmo no, mis alumnos, que con su inters por
aprender me hacen reflexionar sobre objetivos que a primera vista parecen inalcanzables, pero que una vez logrados sirven para que todos aprendamos; a todos
ellos les estoy francamente agradecido.
En especial, quiero expresar mi agradecimiento a Martn Knoblauch Revuelta, por sus buenas recomendaciones y aportaciones para esta nueva edicin, y
a Inmaculada Rodrguez Santiago, por sus consejos en las versiones anteriores,
as como a Alfredo Gallego Gandarillas y a Francisco Manuel Mrquez Garca, por su participacin en la correccin de las versiones anteriores, y a David
Jurado Gonzlez, porque aport una solucin para la mayora de los ejercicios
propuestos.
Francisco Javier Ceballos Sierra
http://www.fjceballos.es/

APNDICE A
F.J.Ceballos/RAMA

ALGUNAS FUNCIONES DE LA
BIBLIOTECA DE C
Adems de las funciones expuestas a lo largo de esta obra, hay otras muchas. Este
apndice muestra algunas de las funciones ms tiles de la biblioteca de C que
an no han sido expuestas. Todas estas funciones se pueden agrupar en las siguientes categoras:

Funciones de E/S.
Funciones de cadenas y de caracteres.
Funciones matemticas.
Funciones de fecha y hora.
Funciones de asignacin dinmica.
Otras funciones.

FUNCIONES DE CADENAS Y DE CARACTERES


La biblioteca de C proporciona un amplio nmero de funciones que permiten realizar diversas operaciones con cadenas de caracteres, como copiar una cadena en
otra, aadir una cadena a otra, etc. A continuacin se describen las ms utilizadas.

strcat
#include <string.h>
char *strcat( char *cadena1, const char *cadena2 );
Compatibilidad: ANSI, UNIX y Windows

640

C/C++: CURSO DE PROGRAMACIN

La funcin strcat aade la cadena2 a la cadena1, finaliza la cadena resultante


con el carcter nulo y devuelve un puntero a cadena1.

strcpy
#include <string.h>
char *strcpy( char *cadena1, const char *cadena2 );
Compatibilidad: ANSI, UNIX y Windows

La funcin strcpy copia la cadena2, incluyendo el carcter de terminacin


nulo, en la cadena1 y devuelve un puntero a cadena1.
/* Este programa utiliza strcpy y strcat
* strcpy.c
*/
#include <stdio.h>
#include <string.h>
main(void)
{
char cadena[81];
strcpy( cadena, "Hola, " );
strcat( cadena, "strcpy " );
strcat( cadena, "y " );
strcat( cadena, "strcat te saludan!" );
printf( "cadena = %s\n", cadena );
}
Ejecucin del programa:
cadena = Hola, strcpy y strcat te saludan!

strchr
#include <string.h>
char *strchr( const char *cadena, int c );
Compatibilidad: ANSI, UNIX y Windows

La funcin strchr devuelve un puntero a la primera ocurrencia de c en cadena


o un valor NULL si el carcter no es encontrado. El carcter c puede ser el carcter nulo (\0).

strrchr
#include <string.h>
char *strrchr( const char *cadena, int c );
Compatibilidad: ANSI, UNIX y Windows

APNDICE A: ALGUNAS FUNCIONES DE LA BIBLIOTECA DE C

641

La funcin strrchr devuelve un puntero a la ltima ocurrencia de c en cadena


o un valor NULL si el carcter no se encuentra. El carcter c puede ser un carcter nulo (\0).
/* Este programa ilustra cmo buscar un carcter con strchr
* (hacia delante) o con strrchr (hacia atrs).
/* strchr.c
*/
#include <stdio.h>
#include <string.h>
main( void )
{
int car = 'i';
char cadena[] = "La biblioteca de C proporciona muchas funciones";
char dec1[] =
"
1
2
3
4
5";
char uni2[] =
"12345678901234567890123456789012345678901234567890";
char *pdest;
int resu;
printf( "Cadena en la que se busca: \n%s\n", cadena );
printf( "%s\n%s\n\n", dec1, uni2 );
printf( "Buscar el carcter: %c\n\n", car );
// Buscar de adelante hacia atrs
pdest = strchr( cadena, car );
resu = pdest - cadena;
if ( pdest != NULL )
printf( "La %c primera est en la posicin %d\n", car, resu );
else
printf( "%c no se encuentra en la cadena\n" );
// Buscar desde atrs hacia delante
pdest = strrchr( cadena, car );
resu = pdest - cadena;
if ( pdest != NULL )
printf( "La ltima %c est en la posicin %d\n\n", car, resu );
else
printf( "%c no se encuentra en la cadena\n" );
}
Ejecucin del programa:
Cadena en la que se busca:
La biblioteca de C proporciona muchas funciones
1
2
3
4
01234567890123456789012345678901234567890123456789
Buscar el carcter: i
La i primera est en la posicin 4
La ltima i est en la posicin 42

642

C/C++: CURSO DE PROGRAMACIN

Sabemos que los elementos de una matriz de caracteres, igual que los de
cualquier otra matriz, ocupan posiciones sucesivas en memoria. Tambin sabemos
que el nombre de una matriz es la direccin de comienzo de la matriz y coincide
con la direccin del primer carcter. As mismo, observe que el valor retornado
por strchr y strrchr est definido como un puntero a un char; esto es, una direccin que hace referencia al lugar donde est almacenado el carcter que se busca.
cadena

pdest
L

...

\0

Por lo tanto, una sentencia como:


resu = pdest - cadena;

da como resultado la posicin 0, 1, 2,... del carcter buscado dentro de la cadena,


que es lo que hace el programa planteado.

strcmp
#include <string.h>
int strcmp( const char *cadena1, const char *cadena2 );
Compatibilidad: ANSI, UNIX y Windows

La funcin strcmp compara la cadena1 con la cadena2 lexicogrficamente y


devuelve un valor:
<0 si la cadena1 es menor que la cadena2,
=0 si la cadena1 es igual a la cadena2 y
>0 si la cadena1 es mayor que la cadena2.
En otras palabras, la funcin strcmp nos permite saber si una cadena est en
orden alfabtico antes (es menor) o despus (es mayor) que otra y el proceso que
sigue es el mismo que nosotros ejercitamos cuando lo hacemos mentalmente:
comparar las cadenas carcter a carcter.
La funcin strcmp diferencia las letras maysculas de las minsculas. Las
maysculas estn antes por orden alfabtico. Esto es as porque en la tabla ASCII
las maysculas tienen asociado un valor entero menor que las minsculas.
/* strcmp.c
*/
#include <stdio.h>
#include <string.h>

APNDICE A: ALGUNAS FUNCIONES DE LA BIBLIOTECA DE C

643

main(void)
{
char cadena1[] = "La Comunidad de Cantabria es muy bonita";
char cadena2[] = "La Comunidad de CANTABRIA es muy bonita";
char temp[20];
int resu;
// Se diferencian maysculas de minsculas
printf( "Comparar las cadenas:\n\n%s\n%s\n\n", cadena1, cadena2 );
resu = strcmp( cadena1, cadena2 );
if ( resu > 0 )
strcpy( temp, "mayor que" );
else if ( resu < 0 )
strcpy( temp, "menor que" );
else
strcpy( temp, "igual a" );
printf( "strcmp: cadena 1 es %s cadena 2\n", temp );
}
Ejecucin del programa:
Comparar las cadenas:
La Comunidad de Cantabria es muy bonita
La Comunidad de CANTABRIA es muy bonita
strcmp: cadena 1 es mayor que cadena 2

La solucin de este problema es que la cadena1 es mayor que la cadena2


porque alfabticamente Cantabria est despus de CANTABRIA.

strcspn
#include <string.h>
size_t strcspn( const char *cadena1, const char *cadena2 );
Compatibilidad: ANSI, UNIX y Windows

La funcin strcspn da como resultado la posicin (subndice) del primer carcter de cadena1, que pertenece al conjunto de caracteres contenidos en cadena2.
Este valor corresponde a la longitud de la subcadena de cadena1 formada por caracteres no pertenecientes a cadena2. Si ningn carcter de cadena1 pertenece a
cadena2, el resultado es la posicin del carcter de terminacin (\0) de cadena1;
esto es, la longitud de cadena1.
/* strcspn.c
*/
#include <stdio.h>
#include <string.h>
main(void)

644

C/C++: CURSO DE PROGRAMACIN

{
char cadena[] = "xyzabc";
int pos;
pos = strcspn( cadena, "abc" );
printf( "Primer a, b o c en %s es el carcter %d\n", cadena, pos );
}
Ejecucin del programa:
Primer a, b o c en xyzabc es el carcter 3

strlen
#include <string.h>
size_t strlen( char *cadena );
Compatibilidad: ANSI, UNIX y Windows

La funcin strlen devuelve la longitud en bytes de cadena, no incluyendo el


carcter de terminacin nulo. El tipo size_t es sinnimo de unsigned int.
/* strlen.c
*/
#include <stdio.h>
#include <string.h>
main(void)
{
char cadena[80] = "Hola";
printf("El tamao de cadena es %d\n", strlen(cadena));
}
Ejecucin del programa:
El tamao de cadena es 4

strncat
#include <string.h>
char *strncat( char *cadena1, const char *cadena2, size_t n );
Compatibilidad: ANSI, UNIX y Windows

La funcin strncat aade los primeros n caracteres de cadena2 a la cadena1,


termina la cadena resultante con el carcter nulo y devuelve un puntero a cadena1. Si n es mayor que la longitud de cadena2, se utiliza como valor de n la longitud de cadena2.

APNDICE A: ALGUNAS FUNCIONES DE LA BIBLIOTECA DE C

645

strncpy
#include <string.h>
char *strncpy( char *cadena1, const char *cadena2, size_t n );
Compatibilidad: ANSI, UNIX y Windows

La funcin strncpy copia n caracteres de la cadena2 en la cadena1 (sobrescribiendo los caracteres de cadena1) y devuelve un puntero a cadena1. Si n es
menor que la longitud de cadena2, no se aade automticamente un carcter nulo
a la cadena resultante. Si n es mayor que la longitud de cadena2, la cadena1 es rellenada con caracteres nulos (\0) hasta la longitud n.

strncmp
#include <string.h>
int strncmp( const char *cadena1, const char *cadena2, size_t n );
Compatibilidad: ANSI, UNIX y Windows

La funcin strncmp compara lexicogrficamente los primeros n caracteres de


cadena1 y de cadena2, distinguiendo maysculas y minsculas, y devuelve un valor:
<0 si la cadena1 es menor que la cadena2,
=0 si la cadena1 es igual a la cadena2 y
>0 si la cadena1 es mayor que la cadena2.
Si n es mayor que la longitud de la cadena1, se toma como valor la longitud
de la cadena1.

strspn
#include <string.h>
size_t strspn( const char *cadena1, const char *cadena2 );
Compatibilidad: ANSI, UNIX y Windows

La funcin strspn da como resultado la posicin (subndice) del primer carcter de cadena1, que no pertenece al conjunto de caracteres contenidos en cadena2.
Esto es, el resultado es la longitud de la subcadena inicial de cadena1, formada
por caracteres pertenecientes a cadena2.

strstr
#include <string.h>
char *strstr( const char *cadena1, const char *cadena2 );

646

C/C++: CURSO DE PROGRAMACIN

Compatibilidad: ANSI, UNIX y Windows

La funcin strstr devuelve un puntero a la primera ocurrencia de cadena2 en


cadena1 o un valor NULL si la cadena2 no se encuentra en la cadena1.

strtok
#include <string.h>
char *strtok( char *cadena1, const char *cadena2 );
Compatibilidad: ANSI, UNIX y Windows

La funcin strtok permite obtener de la cadena1 los elementos en los que se


divide segn los delimitadores especificados en cadena2.
Para obtener el primer elemento, strtok debe tener cadena1 como primer argumento y para obtener los siguientes elementos, debe tener NULL. Cada llamada a strtok devuelve un puntero al siguiente elemento o NULL si no hay ms
elementos.
Si un elemento finaliza con un delimitador, este es sustituido con un \0 y se
guarda un puntero al siguiente carcter para la siguiente llamada a strtok. Puede
ponerse ms de un delimitador entre elemento y elemento, y tambin puede variarse el conjunto de caracteres que actan como delimitadores, de una llamada a
otra. Finalmente, tiene que saber que esta funcin modifica su primer argumento,
por lo tanto, debe existir un espacio de memoria sobre el que la funcin pueda escribir. Por ejemplo, para cadena1 seran vlidas cualesquiera de las dos definiciones siguientes:
char cadena1[] = "Una cadena de caracteres";
char *cadena1 = (char *)malloc(nBytes);
strcpy(cadena1, "Una cadena de caracteres");

En cambio, no sera vlida la siguiente definicin porque cadena1 apunta a


una zona de memoria sobre la que no se puede escribir (se trata de una constante).
char *cadena1 = "Una cadena de caracteres";

El ejemplo siguiente divide la cadena de caracteres especificada por cadena


en los elementos definidos por los delimitadores espacio en blanco y coma.
/* strtok.c
*/
#include <stdio.h>
#include <string.h>

APNDICE A: ALGUNAS FUNCIONES DE LA BIBLIOTECA DE C

647

main(void)
{
char cadena[] = "Esta cadena, est formada por varias palabras";
char *elemento;
elemento = strtok(cadena," ,");
while (elemento != NULL)
{
printf("%s\n", elemento);
elemento = strtok(NULL," ,");
}
}
Ejecucin del programa:
Esta
cadena
est
formada
por
varias
palabras

strlwr
#include <string.h>
char *strlwr(char *cadena );
Compatibilidad: Windows

La funcin strlwr convierte las letras maysculas de cadena en minsculas.


El resultado es la propia cadena en minsculas.

strupr
#include <string.h>
char *strupr(char *cadena );
Compatibilidad: Windows

La funcin strupr convierte las letras minsculas de cadena en maysculas.


El resultado es la propia cadena en maysculas.

Funciones para conversin de datos


Las funciones de la biblioteca de C que se muestran a continuacin permiten convertir cadenas de caracteres a nmeros y viceversa, suponiendo que la conversin
sea posible.

648

C/C++: CURSO DE PROGRAMACIN

atof
#include <stdlib.h>
double atof( const char *cadena );
Compatibilidad: ANSI, UNIX y Windows

La funcin atof convierte una cadena de caracteres a un valor de tipo double.

atoi
#include <stdlib.h>
int atoi( const char *cadena );
Compatibilidad: ANSI, UNIX y Windows

La funcin atoi convierte una cadena de caracteres a un valor de tipo int.

atol
#include <stdlib.h>
long atol( const char *cadena );
Compatibilidad: ANSI, UNIX y Windows

La funcin atol convierte una cadena de caracteres a un valor de tipo long.


Cuando las funciones atof, atoi y atol toman de la variable cadena un carcter que no es reconocido como parte de un nmero, interrumpen la conversin.
/* Este programa muestra como los nmeros almacenados como
* cadenas de caracteres pueden ser convertidos a valores
* numricos utilizando las funciones atof, atoi y atol.
*
* atof.c
*/
#include <stdio.h>
#include <stdlib.h>
main(void)
{
char *s = NULL; double x = 0; int i = 0; long l = 0;
s = " -3208.15E-13";
// para ver cmo trabaja atof
x = atof( s );
printf( "atof: cadena ASCII: %-17s float: %e\n", s, x );
s = "8.7195642337X120"; // para ver cmo trabaja atof
x = atof( s );
printf( "atof: cadena ASCII: %-17s float: %e\n", s, x );
s = " -8995 libros";
// para ver cmo trabaja atoi
i = atoi( s );
printf( "atoi: cadena ASCII: %-17s int : %d\n", s, i );

APNDICE A: ALGUNAS FUNCIONES DE LA BIBLIOTECA DE C

649

s = "89954 euros";
// para ver cmo trabaja atol
l = atol( s );
printf( "atol: cadena ASCII: %-17s long : %ld\n", s, l );
}
Ejecucin del programa:
atof:
atof:
atoi:
atol:

cadena
cadena
cadena
cadena

ASCII:
-3208.15E-13
ASCII: 8.7195642337X120
ASCII:
-8995 libros
ASCII: 89954 euros

double: -3.208150e-010
double: 8.719564e+000
int : -8995
long : 89954

sprintf
#include <stdio.h>
int sprintf( char *buffer, const char *formato [, argumento] ... );
Compatibilidad: ANSI, UNIX y Windows

La funcin sprintf convierte los valores de los argumentos especificados a


una cadena de caracteres que almacena en buffer. La cadena de caracteres finaliza
con el carcter nulo. Cada argumento es convertido y almacenado de acuerdo con
el formato correspondiente que se haya especificado. La descripcin de formato
es la misma que la que se especific para printf.
La funcin sprintf devuelve como resultado un entero correspondiente al
nmero de caracteres almacenados en buffer sin contar el carcter nulo de terminacin. Por ejemplo:
/* sprintf.c. Este programa utiliza sprintf para almacenar
* en buffer la cadena de caracteres formada por:
*
*
Cadena:
ordenador
*
Carcter: /
*
Entero:
40
*
Real:
1.414214
*/
#include <stdio.h>
main(void)
{
char buffer[200], s[] = "ordenador", c = '/';
int
i = 40, j;
float f = 1.414214F;
j = sprintf( buffer,
"\tCadena:
%s\n", s );
j += sprintf( buffer + j, "\tCarcter: %c\n", c );
j += sprintf( buffer + j, "\tEntero:
%d\n", i );
j += sprintf( buffer + j, "\tReal:
%f\n", f );
printf( "Salida:\n%s\nNmero de caracteres = %d\n", buffer, j );
}

650

C/C++: CURSO DE PROGRAMACIN

Ejecucin del programa:


Salida:
Cadena:
Carcter:
Entero:
Real:

ordenador
/
40
1.414214

Nmero de caracteres = 72

Funciones de caracteres
Las funciones de la biblioteca de C que se exponen a continuacin actan sobre
un entero para dar como resultado un carcter.

toascii
#include <ctype.h>
int toascii( int c );
Compatibilidad: UNIX y Windows

La funcin toascii pone a 0 todos los bits de c, excepto los siete bits de menor
orden. Dicho de otra forma, convierte c a un carcter ASCII.

tolower
#include <stdlib.h>
int tolower( int c );
Compatibilidad: ANSI, UNIX y Windows

La funcin tolower convierte c a una letra minscula, si procede.

toupper
#include <stdlib.h>
int toupper( int c );
Compatibilidad: ANSI, UNIX y Windows

La funcin toupper convierte c a una letra mayscula, si procede.


/* tolower.c
*/
#include <stdio.h>
#include <stdlib.h>
main()

APNDICE A: ALGUNAS FUNCIONES DE LA BIBLIOTECA DE C

651

{
char car;
// ...
do
{
printf("Desea continuar? s/n ");
car = getchar();
fflush(stdin);
}
while (tolower(car) != 'n' && tolower(car) != 's');
// ...
}

Este ejemplo admite una respuesta s o no (s|S|n|N) en minsculas o en maysculas, pero la comparacin se hace en minsculas.

FUNCIONES MATEMTICAS
Las declaraciones para las funciones matemticas que a continuacin se describen
estn en el fichero de cabecera math.h. Quiere esto decir que, cuando se utilice
una funcin matemtica en un programa, debe especificarse la directriz:
#include <math.h>

Los argumentos para estas funciones son de tipo double y el resultado devuelto es tambin de tipo double. Por ello, en muchos casos utilizaremos una
conversin explcita de tipo (conversin cast) para convertir explcitamente los
argumentos al tipo deseado. Por ejemplo, suponiendo que valor es un int:
a = acos((double)valor);

calcula el arco coseno de valor. Se puede observar que el argumento pasado a la


funcin acos es convertido explcitamente a tipo double.
Las funciones matemticas las podemos clasificar en las siguientes categoras:

Funciones trigonomtricas.
Funciones hiperblicas.
Funciones exponencial y logartmica.
Otras varias.

652

C/C++: CURSO DE PROGRAMACIN

acos
La funcin acos da como resultado el arco, en el rango 0 a , cuyo coseno es x. El
valor de x debe estar entre 1 y 1; de lo contrario se obtiene un error (argumento
fuera del dominio de la funcin).
#include <math.h>
double acos( double x );
Compatibilidad: ANSI, UNIX y Windows

asin
La funcin asin da como resultado el arco, en el rango /2 a /2, cuyo seno es x.
El valor de x debe estar entre 1 y 1; si no se obtiene un error (argumento fuera
del dominio de la funcin).
#include <math.h>
double asin( double x );
Compatibilidad: ANSI, UNIX y Windows

atan
La funcin atan da como resultado el arco, en el rango /2 a /2, cuya tangente
es x.
#include <math.h>
double atan( double x );
Compatibilidad: ANSI, UNIX y Windows

atan2
La funcin atan2 da como resultado el arco, en el rango a , cuya tangente es
y/x. Si ambos argumentos son 0, se obtiene un error (argumento fuera del dominio
de la funcin).
#include <math.h>
double atan2( double y, double x);
Compatibilidad: ANSI, UNIX y Windows
/* acos.c
*/
#include <stdio.h>
#include <math.h>
main()

APNDICE A: ALGUNAS FUNCIONES DE LA BIBLIOTECA DE C

{
double valor = 0;
do
{
printf("%lf %lf\n", acos(valor), atan2(valor, 1.0));
valor += 0.1;
}
while (valor <= 1.0);
}

cos
La funcin cos da como resultado el coseno de x (x en radianes).
#include <math.h>
double cos( double x );
Compatibilidad: ANSI, UNIX y Windows

sin
La funcin sin da como resultado el seno de x (x en radianes).
#include <math.h>
double sin( double x );
Compatibilidad: ANSI, UNIX y Windows

tan
La funcin tan da como resultado la tangente de x (x en radianes).
#include <math.h>
double tan( double x );
Compatibilidad: ANSI, UNIX y Windows

cosh
La funcin cosh da como resultado el coseno hiperblico de x (x en radianes).
#include <math.h>
double cosh( double x );
Compatibilidad: ANSI, UNIX y Windows

sinh
La funcin sinh da como resultado el seno hiperblico de x (x en radianes).

653

654

C/C++: CURSO DE PROGRAMACIN

#include <math.h>
double sinh( double x );
Compatibilidad: ANSI, UNIX y Windows

tanh
La funcin tanh da como resultado la tangente hiperblica de x (x en radianes).
#include <math.h>
double tanh( double x );
Compatibilidad: ANSI, UNIX y Windows

exp
La funcin exp da como resultado el valor de ex (e = 2.718282).
#include <math.h>
double exp( double x );
Compatibilidad: ANSI, UNIX y Windows

log
La funcin log da como resultado el logaritmo natural de x.
#include <math.h>
double log( double x );
Compatibilidad: ANSI, UNIX y Windows

log10
La funcin log10 da como resultado el logaritmo en base 10 de x.
#include <math.h>
double log10( double x );
Compatibilidad: ANSI, UNIX y Windows

ceil
La funcin ceil da como resultado un valor double, que representa el entero ms
pequeo que es mayor o igual que x.
#include <math.h>
double ceil( double x );
Compatibilidad: ANSI, UNIX y Windows

APNDICE A: ALGUNAS FUNCIONES DE LA BIBLIOTECA DE C

655

double x = 2.8, y = -2.8;


printf("%g %g\n", ceil(x), ceil(y)); // resultado: 3 -2

fabs
La funcin fabs da como resultado el valor absoluto de x. El argumento x es un
valor real en doble precisin. Igualmente, abs y labs dan el valor absoluto de un
int y un long, respectivamente.
#include <math.h>
double fabs( double x );
Compatibilidad: ANSI, UNIX y Windows

floor
La funcin floor da como resultado un valor double, que representa el entero ms
grande que es menor o igual que x.
#include <math.h>
double floor( double x );
Compatibilidad: ANSI, UNIX y Windows
double x = 2.8, y = -2.8;
printf("%g %g\n", floor(x), floor(y)); // resultado: 2 -3

pow
La funcin pow da como resultado xy. Si x es 0 e y negativo o si x e y son 0 o si x
es negativo e y no es entero, se obtiene un error (argumento fuera del dominio de
la funcin). Si xy da un resultado superior al valor lmite para el tipo double, el resultado es este valor lmite (1.79769e+308).
#include <math.h>
double pow( double x, double y);
Compatibilidad: ANSI, UNIX y Windows
double x = 2.8, y = -2.8;
printf("%g\n", pow(x, y)); // resultado: 0.0559703

sqrt
La funcin sqrt da como resultado la raz cuadrada de x. Si x es negativo, ocurre
un error (argumento fuera del dominio de la funcin).
#include <math.h>

656

C/C++: CURSO DE PROGRAMACIN

double sqrt( double x );


Compatibilidad: ANSI, UNIX y Windows

NMEROS SEUDOALEATORIOS
La biblioteca de C proporciona tambin, entre otras, funciones para generar nmeros aleatorios.

rand
La funcin rand da como resultado un nmero seudoaleatorio entero, entre 0 y
RAND_MAX (32767).
#include <stdlib.h>
int rand(void);
Compatibilidad: ANSI, UNIX y Windows

srand
La funcin srand fija el punto de comienzo para generar nmeros seudoaleatorios; en otras palabras, inicia el generador de nmeros seudoaleatorios en funcin
del valor de su argumento. Cuando esta funcin no se utiliza, el valor del primer
nmero seudoaleatorio generado siempre es el mismo para cada ejecucin (corresponde a un argumento de valor 1).
#include <stdlib.h>
void srand(unsigned int arg);
Compatibilidad: ANSI, UNIX y Windows

FUNCIONES DE FECHA Y HORA


clock
La funcin clock indica el tiempo empleado por el procesador en el proceso en
curso.
#include <time.h>
clock_t clock(void);
Compatibilidad: ANSI, UNIX y Windows

El tiempo expresado en segundos se obtiene al dividir el valor devuelto por


clock entre la constante CLOCKS_PER_SEC. Si no es posible obtener este tiem-

APNDICE A: ALGUNAS FUNCIONES DE LA BIBLIOTECA DE C

657

po, la funcin clock devuelve el valor (clock_t)1. El tipo clock_t est declarado
as:
typedef long clock_t;

time
La funcin time retorna el nmero de segundos transcurridos desde las 0 horas del
1 de enero de 1970.
#include <time.h>
time_t time(time_t *seg);
Compatibilidad: ANSI, UNIX y Windows

El tipo time_t est definido as:


typedef long time_t;

El argumento puede ser NULL. Segn esto, las dos sentencias siguientes para
obtener los segundos transcurridos son equivalentes:
time_t segundos;
time(&segundos);
segundos = time(NULL);

ctime
La funcin ctime convierte un tiempo almacenado como un valor de tipo time_t,
en una cadena de caracteres de la forma:
Thu Jul 08 12:01:29 2010\n\0
#include <time.h>
char *ctime(const time_t *seg);
Compatibilidad: ANSI, UNIX y Windows

Esta funcin devuelve un puntero a la cadena de caracteres resultante o un


puntero nulo si seg representa un dato anterior al 1 de enero de 1970. Por ejemplo,
el siguiente programa presenta la fecha actual y, a continuacin, genera cinco nmeros seudoaleatorios, uno cada segundo.
/********** Generar un nmero aleatorio cada segundo **********/
/* time.c
*/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

658

C/C++: CURSO DE PROGRAMACIN

main()
{
long x, tm;
time_t segundos;
time(&segundos);
printf("\n%s\n", ctime(&segundos));
srand((unsigned)time(NULL));
for (x = 1; x <= 5; x++)
{
do
// tiempo de espera igual a 1 segundo
tm = clock();
while (tm/CLOCKS_PER_SEC < x);
// Se genera un nmero aleatorio cada segundo
printf("Iteracin %ld: %d\n", x, rand());
}
}

localtime
La funcin localtime convierte el nmero de segundos transcurridos desde las 0
horas del 1 de enero de 1970, valor obtenido por la funcin time, a la fecha y hora
correspondiente (corregida en funcin de la zona horaria en la que nos encontremos). El resultado es almacenado en una estructura de tipo tm, definida en time.h.
#include <time.h>
struct tm *localtime(const time_t *seg);
Compatibilidad: ANSI, UNIX y Windows

La funcin localtime devuelve un puntero a la estructura que contiene el resultado, o un puntero nulo si el tiempo no puede ser interpretado. Los miembros
de la estructura son los siguientes:
Campo

Valor almacenado

tm_sec
tm_min
tm_hour
tm_mday
tm_mon
tm_year
tm_wday
tm_yday

Segundos (0 - 59).
Minutos (0 - 59).
Horas (0 - 23).
Da del mes (1 - 31).
Mes (0 - 11; enero = 0).
Ao (actual menos 1900).
Da de la semana (0 - 6; domingo = 0).
Da del ao (0 - 365; 1 de enero = 0).

El siguiente ejemplo muestra cmo se utiliza esta funcin.

APNDICE A: ALGUNAS FUNCIONES DE LA BIBLIOTECA DE C

659

/* localtime.c
*/
#include <stdio.h>
#include <time.h>
main()
{
struct tm *fh;
time_t segundos;
time(&segundos);
fh = localtime(&segundos);
printf("%d horas, %d minutos\n", fh->tm_hour, fh->tm_min);
}

La funcin localtime utiliza una variable de tipo static struct tm para realizar
la conversin y lo que devuelve es la direccin de esa variable.

FUNCIONES PARA MANIPULAR BLOQUES DE MEMORIA


La biblioteca de C/C++ proporciona un conjunto de funciones para manipular
bloques de bytes consecutivos en memoria. Comentamos a continuacin las ms
utilizadas.

memset
La funcin memset permite iniciar un bloque de memoria.
#include <string.h>
void *memset( void *destino, int b, size_t nbytes );
Compatibilidad: ANSI, UNIX y Windows

El argumento destino es la direccin del bloque de memoria que se desea iniciar, b es el valor empleado para iniciar cada byte del bloque y nbytes es el nmero de bytes del bloque que se iniciarn. Por ejemplo, el siguiente cdigo inicia a 0
la matriz a:
double a[10][10];
// ...
memset(a, 0, sizeof(a));

memcpy
La funcin memcpy copia un bloque de memoria en otro.
#include <string.h>
void *memcpy( void *destino, const void *origen, size_t nbytes );

660

C/C++: CURSO DE PROGRAMACIN

Compatibilidad: ANSI, UNIX y Windows

El argumento destino es la direccin del bloque de memoria destino de los datos, origen es la direccin del bloque de memoria origen de los datos y nbytes es
el nmero de bytes que se copiarn desde el origen al destino. Por ejemplo, el siguiente cdigo copia la matriz a en b:
double a[10][10], b[10][10];
// ...
memcpy(b, a, sizeof(a));

memcmp
La funcin memcmp compara byte a byte dos bloques de memoria.
#include <string.h>
int memcmp( void *bm1, const void *bm2, size_t nbytes );
Compatibilidad: ANSI, UNIX y Windows

Los argumentos bm1 y bm2 son las direcciones de los bloques de memoria a
comparar y nbytes es el nmero de bytes que se compararn. El resultado devuelto
por la funcin es el mismo que se expuso para strcmp. Por ejemplo, el siguiente
cdigo compara la matriz a con la b:
double a[10][10], b[10][10];
// ...
if ( memcmp(a, b, sizeof(a)) == 0 )
printf("Las matrices a y b contienen los mismos datos\n");
else
printf("Las matrices a y b no contienen los mismos datos\n");

APNDICE B
F.J.Ceballos/RA-MA

ENTORNOS DE DESARROLLO
Un entorno de desarrollo integrado (EDI, en ingls IDE: Integrated Development
Environment) es una aplicacin que agrupa varias herramientas de programacin,
bsicamente, las necesarias para escribir, compilar y depurar un programa. El EDI
puede utilizar un solo lenguaje de programacin, o bien puede ser compatible con
varios, tales como C/C++, C#, Visual Basic, Java, PHP, Python, etc. Dicho EDI
presentar al usuario una interfaz grfica que le abstraer del manejo individual, a
nivel de lnea de rdenes, de cada una de esas herramientas de programacin.
Para realizar los ejemplos de este libro, el autor propone utilizar alguno de los
entornos indicados a continuacin: Microsoft Visual Studio Express para Windows, NetBeans para Windows/Linux/Mac OS X o Code::Blocks para Windows/Linux/Mac OS X. Estos EDI pueden descargarse de Internet y utilizarlos sin
coste alguno.

MICROSOFT VISUAL STUDIO


Este entorno de desarrollo lo puede descargar gratuitamente desde Internet
(www.fjceballos.es > Utilidades) en su edicin Express. En la figura siguiente se
puede observar la interfaz grfica de este entorno de desarrollo integrado: Microsoft Visual Studio Express. Dicho entorno muestra una barra de mens y otra de
herramientas, un panel de edicin (en el ejemplo muestra un programa C), el explorador de soluciones (en el ejemplo muestra un proyecto progC correspondiente
al programa que estamos realizando), el panel de propiedades y el panel de resultados (en el ejemplo muestra los resultados de la compilacin).

662

C/C++: CURSO DE PROGRAMACIN

Para editar y ejecutar el programa avance.c expuesto en el captulo 1 utilizando este entorno de desarrollo, los pasos a seguir son los siguientes:
1. Partiendo de la pgina de inicio de Microsoft Visual Studio Express, hacemos
clic en Nuevo proyecto de la pgina principal para crear un proyecto nuevo o
bien ejecutamos la orden Archivo > Nuevo proyecto. Esta accin har que se
visualice una ventana anloga a la siguiente:

APNDICE B: ENTORNOS DE DESARROLLO

663

Esta ventana muestra en su panel izquierdo los tipos de proyectos que se pueden crear y a la derecha de este, las plantillas que se pueden utilizar; la eleccin de una o de otra depender del tipo de aplicacin que deseemos
construir. Para nuestro ejemplo, elegimos el tipo de proyecto Visual C++
Win32 y la plantilla Aplicacin de consola Win32. Despus especificamos el
nombre del proyecto y su ubicacin (no hace falta que marque Crear directorio para la solucin); observe que el proyecto ser creado en una carpeta con
el mismo nombre. A continuacin pulsamos el botn Aceptar. Esta accin visualizar la ventana mostrada en la figura siguiente, que permitir establecer
la configuracin de la aplicacin; por ejemplo, aplicacin de consola, proyecto vaco:

2. Una vez configurada la aplicacin, pulsamos el botn Finalizar. El resultado


ser un proyecto vaco al que podremos aadir ficheros. Por ejemplo, para
aadir el fichero avance.c, hacemos clic con el botn derecho del ratn sobre
el nombre del proyecto y seleccionamos la orden Agregar > Nuevo elemento
del men contextual.

664

C/C++: CURSO DE PROGRAMACIN

3. La accin ejecutada en el punto anterior muestra la ventana que se expone a


continuacin, la cual nos permitir elegir la plantilla para el fichero. En nuestro caso, al no haber una plantilla para archivos C, hemos aadido la extensin .c a continuacin del nombre del fichero en la caja Nombre.

APNDICE B: ENTORNOS DE DESARROLLO

665

4. El siguiente paso es escribir el cdigo que se almacenar en este fichero, segn muestra la figura siguiente:

En esta figura observamos una ventana principal que contiene otras ventanas
o paneles. La que est en la parte izquierda superior est mostrando la pgina
de edicin del fichero avance.c que estamos editando. La que est en la parte
derecha superior est mostrando el explorador de soluciones; este lista el
nombre de la solucin (una solucin puede contener uno o ms proyectos), el
nombre del proyecto o proyectos y el nombre de los ficheros que componen el
proyecto; en nuestro caso solo tenemos el fichero avance.c donde escribiremos el cdigo de las acciones que tiene que llevar a cabo nuestra aplicacin.
Al lado de la pestaa de la ventana del explorador puede haber otras pestaas
como, por ejemplo, la Vista de clases. Y la ventana que hay debajo de la pgina de edicin puede mostrar varios paneles, por ejemplo, el de resultados de
la compilacin.
5. Una vez editado el programa, para compilarlo ejecutamos la orden Compilar... del men Compilar y para ejecutarlo, seleccionamos la orden Iniciar sin
depurar del men Depurar o bien pulsamos las teclas Ctrl+F5.

666

C/C++: CURSO DE PROGRAMACIN

Aadir ficheros existentes a un proyecto


Supongamos que disponemos de un fichero .c que deseamos aadir a un proyecto
vaco o no. Cmo podemos hacerlo? Una vez abierto el proyecto, basta con ejecutar la orden Proyecto > Agregar elemento existente y seleccionar el fichero que
deseamos aadir.

Depurar la aplicacin
Por qu se depura una aplicacin? Porque los resultados que estamos obteniendo
con la misma no son correctos y no sabemos por qu. El proceso de depuracin
consiste en ejecutar la aplicacin paso a paso, indistintamente por sentencias o por
funciones, con el fin de observar el flujo seguido durante su ejecucin, as como
los resultados intermedios que se van sucediendo, con la finalidad de detectar
dnde est la anomala que produce un resultado final errneo.
Hay dos configuraciones, como se puede observar en la figura siguiente, bajo
las que se puede compilar una aplicacin: Release y Debug:

La primera permite obtener un programa ejecutable optimizado en cdigo y


en velocidad, y la segunda, un programa ejecutable con cdigo extra necesario para depurar la aplicacin. Por lo tanto, para depurar una aplicacin utilizando el
depurador del entorno de desarrollo de Visual Studio, debe activar la configuracin Win32 Debug antes de iniciar su compilacin. Para ello, ejecute la orden

APNDICE B: ENTORNOS DE DESARROLLO

667

Administrador de configuracin... del men Compilar y seleccione dicha configuracin.


Una vez construida la aplicacin bajo la configuracin Win32 Debug podr, si
lo necesita, depurar la misma. Para ello, ejecute la orden Depurar > Paso a paso
por instrucciones y utilice las rdenes del men Depurar o los botones correspondientes de la barra de herramientas (para saber el significado de cada botn,
ponga el puntero del ratn sobre cada uno de ellos).

De forma resumida, las rdenes de que dispone para depurar una aplicacin
son las siguientes:

Iniciar o F5. Inicia la ejecucin de la aplicacin en modo depuracin hasta


encontrar un punto de parada o hasta el final si no hay puntos de parada.

Alternar puntos de interrupcin o F9. Pone o quita un punto de parada en la


lnea sobre la que est el punto de insercin.

Detener depuracin o Mays+F5. Detiene el proceso de depuracin.

Paso a paso por instrucciones o F11. Ejecuta la aplicacin paso a paso. Si la


lnea a ejecutar coincide con una llamada a una funcin definida por el usuario, dicha funcin tambin se ejecutar paso a paso.

Paso a paso por procedimientos o F10. Ejecuta la aplicacin paso a paso. Si


la lnea a ejecutar coincide con una llamada a una funcin definida por el
usuario, dicha funcin no se ejecutar paso a paso, sino de una sola vez.

Paso a paso para salir o Mays+F11. Cuando una funcin definida por el
usuario ha sido invocada para ejecutarse paso a paso, utilizando esta orden se
puede finalizar su ejecucin en un solo paso.

Ejecutar hasta el cursor o Ctrl+F10. Ejecuta el cdigo que hay entre la ltima lnea ejecutada y la lnea donde se encuentra el punto de insercin.

Inspeccin rpida o Ctrl+Alt+Q. Visualiza el valor de la variable que est bajo el punto de insercin o el valor de la expresin seleccionada (sombreada).
El simple hecho de poner el punto de insercin sobre dicha variable ya visualiza su valor.

668

C/C++: CURSO DE PROGRAMACIN

Para ejecutar la aplicacin en un solo paso, seleccione la orden Iniciar sin depurar (Ctrl+F5) del men Depurar.
Adems de la barra de herramientas Depurar, dispone tambin de otras barras
de herramientas que puede mostrar ejecutando la orden Barras de herramientas
del men Ver.

INTERFAZ DE LNEA DE RDENES EN WINDOWS


Los ficheros que componen una aplicacin C pueden ser escritos utilizando cualquier editor de texto ASCII; por ejemplo, el Bloc de notas. Una vez editados y
guardados todos los ficheros que componen la aplicacin, el siguiente paso es
compilarlos y enlazarlos para obtener el fichero ejecutable correspondiente a la
misma. La orden para realizar estas operaciones es la siguiente:
cl fichero01.c [fichero02 [fichero03] ...]

El nombre del fichero ejecutable resultante ser el mismo que el nombre del
primer fichero especificado, pero con extensin .exe.
Previamente, para que el sistema operativo encuentre la utilidad cl, los ficheros de cabecera (directriz include) y las bibliotecas dinmicas y estticas, cuando
son invocados desde la lnea de rdenes, hay que definir en el entorno de trabajo
(en la consola sobre la que estemos trabajando) las siguientes variables:
set path=%path%;ruta de los ficheros .exe y .dll
set include=ruta de los ficheros .h
set lib=ruta de los ficheros .lib

La expresin %path% representa el valor actual de la variable de entorno


path. Una ruta va separada de la anterior por un punto y coma. Estas variables
tambin pueden ser establecidas ejecutando el fichero vcvars32.bat que aporta Visual Studio en la ruta (no tiene porqu coincidir con la de su instalacin):
C:\Archivos de programa\Microsoft Visual Studio xx.x\VC\bin

Una vez establecidas estas variables, ya puede invocar al compilador C y al


enlazador. En la figura siguiente se puede observar, como ejemplo, el proceso seguido para compilar avance.c:

APNDICE B: ENTORNOS DE DESARROLLO

669

Observe que primero hemos ejecutado vcvars32.bat para establecer las variables de entorno, despus hemos cambiado al directorio de la aplicacin (cd), a
continuacin hemos visualizado los ficheros .c de ese directorio (dir) y finalmente
hemos invocado al compilador C (cl). El resultado es avance.exe. Para ejecutar este fichero, escriba avance en la lnea de rdenes y pulse Entrar. El resultado ser
el mostrado en la figura.

CREAR UNA BIBLIOTECA DE FUNCIONES


Visual Studio proporciona, entre otros, el tipo de proyecto Win32 Static Library
que permite crear una biblioteca de funciones (ficheros con extensin .lib) anloga a las proporcionadas por C. Esto nos permitir agrupar todas nuestras funciones de inters general en un solo fichero y utilizarlas en cualquier aplicacin igual
que utilizamos las funciones de la biblioteca C, printf, scanf, etc. Eso s, antes de
compilar una aplicacin que utilice funciones de nuestra biblioteca, debemos es-

670

C/C++: CURSO DE PROGRAMACIN

pecificar en la lista de ficheros o en las opciones del enlazador (linker) el nombre


de esa biblioteca.
Para crear una de estas bibliotecas siga los pasos indicados a continuacin.
Como ejemplo, vamos a crear una biblioteca hash.lib con las funciones incluidas
en el fichero cap12\hash\hash.c incluido en el ZIP que acompaa al libro.
1. Ejecute el entorno de desarrollo de Visual Studio.
2. Seleccione la orden Archivo > Nuevo > Proyecto.
3. Seleccione el tipo de proyecto Win32 y la plantilla Aplicacin de consola
Win32. Escriba el nombre del proyecto en la caja Nombre y en la caja Ubicacin seleccione el directorio donde desea crear este proyecto. En nuestro caso
vamos a dar al proyecto el nombre Hash. Pulse el botn Aceptar. Se visualiza
la siguiente ventana:

4. En esta ventana seleccione Biblioteca esttica, no seleccione Encabezado


precompilado y haga clic en el botn Finalizar.
5. Ahora tenemos un proyecto vaco. Ejecute la orden Proyecto > Agregar elemento existente y aada el fichero o los ficheros que contengan las funciones
que desea incluir en su biblioteca (hash.lib), as como los ficheros de cabecera
necesarios para poder compilar el cdigo escrito en cada una de las funciones.
En nuestro caso, segn muestra la figura siguiente, aadiremos el fichero

APNDICE B: ENTORNOS DE DESARROLLO

671

hash.c que contiene las funciones de nuestro inters y el fichero de cabecera


hash.h que incluye las declaraciones de esas funciones.

6. Finalmente, ejecute la orden Compilar > Compilar... para compilar el proyecto y generar el fichero .lib. En nuestro caso se generar el fichero hash.lib con
las funciones que inclua hash.c.
Para utilizar esta biblioteca vamos a realizar otro ejemplo. Cree un nuevo
proyecto ApHash formado por los ficheros: apHash.c, hash.h y hash.lib. El fichero apHash.c simplemente har uso de las funciones de la biblioteca hash.lib lo
que requerir incluir el fichero hash.h. En la fase de enlace ser necesario poder
acceder a hash.lib, ya que apHash.c invoca a funciones de esta biblioteca. Por lo
tanto, asegrese de que ha aadido al proyecto la biblioteca hash.lib; despus,
compile y ejecute el proyecto.

672

C/C++: CURSO DE PROGRAMACIN

NETBEANS
Evidentemente, para poder escribir programas C/C++ en una plataforma Linux se
necesita un entorno de desarrollo vlido para dicha plataforma. NetBeans, entre
otros, puede ser este entorno de desarrollo. Se trata de un EDI libre, gratuito y sin
restricciones de uso. Puede descargarlo de https://netbeans.org.
Este EDI fue construido principalmente para el lenguaje Java, pero soporta
otros lenguajes como C/C++. Est escrito en java, por lo que para ser ejecutado es
necesario haber instalado previamente la mquina virtual de Java, que tambin
puede descargar gratuitamente de http://java.com/es/.
En la figura siguiente se puede observar la interfaz grfica de este entorno de
desarrollo integrado:

APNDICE B: ENTORNOS DE DESARROLLO

673

Para personalizar el EDI, ejecute la orden Options del men Tools.


Para editar y ejecutar el programa avance.c expuesto en el captulo 1 utilizando este entorno de desarrollo, los pasos a seguir se indican a continuacin:
1. Suponiendo que ya se est visualizando el entorno de desarrollo, ejecute la
orden File > New Project (Archivo > Nuevo Proyecto). Se muestra la ventana
New Project.
2. Seleccione C/C++ en la lista Categories (Categoras) y en la lista Projects
(Proyectos) seleccione C/C++ Application (Aplicacin C o C++). Despus
haga clic en el botn Next (siguiente). Se muestra la ventana New C/C++ Application.
3. Escriba el nombre del proyecto (Project Name); en nuestro caso ser ProgC
y, a continuacin, seleccione la carpeta donde quiere guardarlo.
4. Asegrese de que la casilla Create Main File (crear fichero/archivo principal)
est marcada, establezca el nombre, en nuestro caso avance, y elija el lenguaje C (se aadir la extensin correspondiente al fichero cuando se cree).

674

C/C++: CURSO DE PROGRAMACIN

5. Para finalizar haga clic en el botn Finish. El resultado ser el siguiente:

El EDI crea la carpeta NetBeansProjects/ProgC en la que guardar el proyecto compuesto en este caso por un solo fichero de cdigo fuente, avance.c, que almacenar el cdigo correspondiente al programa.

APNDICE B: ENTORNOS DE DESARROLLO

675

En la ventana mostrada en la figura anterior distinguimos otras tres ventanas,


algunas de ellas, con varios paneles. La que est en la parte superior derecha est
mostrando el panel de edicin para el cdigo fuente de nuestra aplicacin y tiene
oculto el panel de inicio. La que est en la parte superior izquierda muestra el panel de proyectos; este lista el nombre del proyecto y el nombre de los ficheros que
componen el proyecto. Observe el fichero avance.c; contiene el cdigo de las acciones que tiene que llevar a cabo nuestra aplicacin. Tambin distinguimos otros
nodos para otros tipos de ficheros, por ejemplo, para los ficheros de cabecera. Finalmente, la ventana que hay debajo de la de proyectos permite navegar por el cdigo del proyecto. Puede visualizar otras ventanas desde el men Window; por
ejemplo, la ventana Output, que ser utilizada para mostrar los resultados de la
compilacin y de la ejecucin.
Una vez creado el esqueleto de la aplicacin, editamos el cdigo de la misma.
En nuestro caso, este cdigo ya fue expuesto en el captulo 1.
El paso siguiente es construir el fichero ejecutable (fichero progc en la carpeta
ProgC/dist/Debug/GNU-Linux-x86). Para ello, ejecute la orden Run > Build Project, o bien pulse la tecla F11. Si la compilacin es correcta, puede pasar a ejecutar la aplicacin ejecutando la orden Run > Run Project, o bien pulsando la tecla
F6; observe el resultado en la ventana Output.
En este caso, la ventana Output muestra un error: En la funcin log: avance.c:16: referencia a log10 sin definir. Para hacer uso de la biblioteca matemtica en Linux tenemos que utilizar la opcin lm. Por ejemplo:
cc avance.c -o avance.exe -lm

La opcin lm indica al compilador que utilice la biblioteca matemtica


libm.a como alternativa a la biblioteca estndar libc.a.
Para especificar esta opcin de compilacin desde el entorno de desarrollo,
haga clic con el botn secundario del ratn sobre el nombre del proyecto y seleccione Properties (propiedades del proyecto). Se muestra la ventana que se muestra a continuacin; seleccione Build > C Compiler > Additional Options y escriba
la opcin lm.

676

C/C++: CURSO DE PROGRAMACIN

Cuando la aplicacin necesite ms de un fichero, el proceso es igual de sencillo. Aadir otro fichero a una aplicacin, por ejemplo un nuevo fichero que almacene una nueva clase, supone hacer clic con el botn derecho del ratn sobre el
nombre del proyecto, elegir la orden New y seleccionar del men contextual que
se visualiza el tipo de elemento que se desea aadir.

Depurar una aplicacin con NetBeans


Anteriormente ya comentamos que una aplicacin se depura porque los resultados
que estamos obteniendo con la misma no son correctos y no sabemos por qu.
Por ejemplo, para depurar una aplicacin utilizando el depurador del entorno
de desarrollo NetBeans, debe establecer un punto de parada inicial. Para ello, haga
clic con el botn derecho del ratn sobre la sentencia a partir de la cual quiere ejecutar el cdigo de su aplicacin paso a paso y ejecute la orden Toggle Line
Breakpoint (poner un punto de parada) del men contextual que se visualiza, o
haga clic en la zona sombreada a su izquierda:

APNDICE B: ENTORNOS DE DESARROLLO

677

Despus, ejecute la orden Debug > Debug Project, o bien pulse las teclas
Ctrl+F5 para iniciar la depuracin. Contine la ejecucin paso a paso utilizando
las rdenes del men Debug o los botones correspondientes de la barra de herramientas Debug (para saber el significado de cada botn, ponga el puntero del ratn sobre cada uno de ellos).

De forma resumida, las rdenes disponibles para depurar una aplicacin son
las siguientes:

Debug Project o Ctrl+F5. Inicia la ejecucin de la aplicacin en modo depuracin hasta encontrar un punto de parada o hasta el final si no hay puntos de
parada.

Toggle Line Breakpoint o Ctrl+F8. Pone o quita un punto de parada en la lnea sobre la que est el punto de insercin.

Finish Debugger Session o Mays+F5. Detiene el proceso de depuracin.

Step Into o F7. Ejecuta la aplicacin paso a paso. Si la lnea a ejecutar coincide con una llamada a un mtodo definido por el usuario, dicho mtodo tambin se ejecuta paso a paso.

Step Over o F8. Ejecuta la aplicacin paso a paso. Si la lnea a ejecutar coincide con una llamada a un mtodo definido por el usuario, dicho mtodo no se
ejecuta paso a paso, sino de una sola vez.

Step Out o Ctrl+F7. Cuando un mtodo definido por el usuario ha sido invocado para ejecutarse paso a paso, utilizando esta orden se puede finalizar su
ejecucin en un solo paso.

Run to Cursor o F4. Ejecuta el cdigo que hay entre la ltima lnea ejecutada
y la lnea donde se encuentra el punto de insercin.

Para ver los valores intermedios que van tomando las variables ponga el cursor sobre ellas, o bien utilice las ventanas Variable, etc., del fondo del EDI. Para
aadir o quitar ventanas ejecute la orden Window > Debuggin.

678

C/C++: CURSO DE PROGRAMACIN

INTERFAZ DE LNEA DE RDENES EN UNIX/LINUX


Los ficheros que componen una aplicacin C realizada bajo UNIX/LINUX pueden ser escritos utilizando cualquier editor de texto ASCII proporcionado por este.
Una vez editados y guardados todos los ficheros .c que componen la aplicacin, el
siguiente paso es compilarlos y enlazarlos para obtener el fichero ejecutable correspondiente a la misma. La orden para realizar estas operaciones es la siguiente:
cc fich01.c [fich02 [fich03] ...] o fich_ejecutable opciones

En el caso de UNIX/LINUX las rutas de acceso para que el sistema operativo


encuentre la utilidad cc, los ficheros de cabecera .h y las bibliotecas, cuando son
invocados desde la lnea de rdenes, ya estn definidas en el entorno de trabajo.
En la figura siguiente se puede observar, como ejemplo, el proceso seguido
para compilar avance.c:

Observe que primero hemos cambiado al directorio de la aplicacin (cd), despus hemos visualizado el contenido de ese directorio (ls -l) y finalmente hemos
invocado al compilador C (cc). El fichero ejecutable resultante es el especificado
por la opcin o, en el ejemplo progc, o a.out por omisin.
Para ejecutar la aplicacin del ejemplo, escriba progc en la lnea de rdenes y
pulse Entrar. El resultado ser el que muestra la figura anterior. Si al realizar esta
operacin se encuentra con que no puede hacerlo porque el sistema no encuentra

APNDICE B: ENTORNOS DE DESARROLLO

679

el fichero especificado, tiene que aadir la ruta del directorio actual de trabajo a la
variable de entorno PATH. Esto se hace as:
PATH=$PATH:.

o bien especificar explcitamente la ruta a partir del directorio actual:


./progc

La expresin $PATH representa el valor actual de la variable de entorno


PATH. Una ruta va separada de la anterior por dos puntos. El directorio actual est representado por el carcter punto.

El depurador gdb de Unix/Linux


Cuando se tiene la intencin de depurar un programa C escrito bajo UNIX, en el
momento de compilarlo se debe especificar la opcin g. Esta opcin indica al
compilador que incluya informacin extra para el depurador en el fichero objeto.
Por ejemplo:
cc -g prog01.c -o prog01

La orden anterior compila y enlaza el fichero fuente prog01.c. El resultado es


un fichero ejecutable prog01 con informacin para el depurador.
Una vez compilado un programa con las opciones necesarias para depurarlo,
invocaremos a gdb para proceder a su depuracin. La sintaxis es la siguiente:
gdb fichero-ejecutable
El siguiente ejemplo invoca al depurador gdb de UNIX, que carga el fichero
ejecutable prog01 en memoria para depurarlo.
gdb prog01

Una vez que se ha invocado el depurador, desde la lnea de rdenes se pueden


ejecutar rdenes como las siguientes:

break [fichero:]funcin. Establece un punto de parada en la funcin indicada


del fichero especificado. Por ejemplo, la siguiente orden pone un punto de parada en la funcin escribir.
b escribir

680

C/C++: CURSO DE PROGRAMACIN

break [fichero:]lnea. Establece un punto de parada en la lnea indicada. Por


ejemplo, la siguiente orden pone un punto de parada en la lnea 10.
b 10

delete punto-de-parada. Elimina el punto de parada especificado. Por ejemplo, la siguiente orden elimina el punto de parada 1 (primero).
d 1

run [argumentos]. Inicia la ejecucin de la aplicacin que deseamos depurar.


La ejecucin se detiene al encontrar un punto de parada o al finalizar la aplicacin. Por ejemplo:
run

print expresin. Visualiza el valor de una variable o de una expresin. Por


ejemplo, la siguiente orden visualiza el valor de la variable total.
p total

next. Ejecuta la lnea siguiente. Si la lnea coincide con una llamada a una
funcin definida por el usuario, no se entra a depurar la funcin. Por ejemplo:
n

continue. Contina con la ejecucin de la aplicacin. Por ejemplo:


c

step. Ejecuta la lnea siguiente. Si la lnea coincide con una llamada a una
funcin definida por el usuario, se entra a depurar la funcin. Por ejemplo:
s

list. Visualiza el cdigo fuente. Por ejemplo:


l

bt. Visualiza el estado de la pila de llamadas en curso (las llamadas a funciones).

help [orden]. Solicita ayuda sobre la orden especificada.

quit. Finaliza el trabajo de depuracin.

CODE::BLOCKS
Otro entorno de desarrollo integrado para escribir programas C/C++ del que existen versiones para Windows, Linux y Mac OS X es Code::Blocks. Se trata de un
EDI libre, gratuito y sin restricciones de uso que puede descargar de Internet desde la direccin http://www.codeblocks.org/. En la figura siguiente se puede observar el aspecto de este entorno de desarrollo integrado.

APNDICE B: ENTORNOS DE DESARROLLO

681

Para editar y ejecutar el programa avance.c visto en el captulo 1, o cualquier


otro programa, utilizando este entorno de desarrollo integrado, los pasos a seguir
se indican a continuacin:
1. Suponiendo que ya est visualizado el entorno de desarrollo, creamos un nuevo proyecto C++ (File, New, Project). Se muestra la ventana siguiente:

682

C/C++: CURSO DE PROGRAMACIN

2. Elegimos la categora consola (Console), la plantilla Console application y


pulsamos el botn Go. Se muestra la ventana siguiente:

3. Seleccionamos el lenguaje C y hacemos clic en el botn Next. Se muestra la


ventana siguiente:

APNDICE B: ENTORNOS DE DESARROLLO

683

4. Especificamos el nombre del proyecto, la carpeta donde ser guardado y hacemos clic en Next. Se muestra la ventana siguiente:

5. Si los datos presentados en la ventana anterior son correctos, hacemos clic en


el botn Finish. El proyecto est creado; contiene un fichero main.c que incluye la funcin main por donde se iniciar y finalizar la ejecucin del pro-

684

C/C++: CURSO DE PROGRAMACIN

grama. Si lo desea, puede cambiar el nombre main.c por avance.c. Despus,


edite este fichero igual que lo hizo en el captulo 1.

6. A continuacin, segn se puede observar en la figura anterior, editamos el cdigo que compone el programa y lo guardamos.
7. Despus, para compilar el programa, ejecutamos la orden Build del men
Build y, una vez compilado (sin errores), lo podemos ejecutar seleccionando
la orden Run del mismo men (si no pudiramos ver la ventana con los resultados porque desaparece no es el caso, aadiramos al final de la funcin
main, antes de return, la sentencia system("pause"); y al principio del
fichero .c la directriz #include <cstdlib>, si fuera necesario).
En el caso de que la aplicacin est compuesta por varios ficheros fuente,
simplemente tendremos que aadirlos al proyecto ejecutando la orden New del
men File.

APNDICE C

F.J.Ceballos/RA-MA

CDIGOS DE CARACTERES
Una tabla de cdigos es un juego de caracteres donde cada uno tiene asignado un
nmero utilizado para su representacin interna. Algunos lenguajes como Java
utilizan UNICODE para almacenar y manipular cadenas, y otros como C utilizan
ANSI o ASCII.

UTILIZACIN DE CARACTERES ANSI CON WINDOWS


ANSI (American National Standards Institute) es el juego de caracteres estndar
ms utilizado por los equipos personales. Como el estndar ANSI solo utiliza un
byte para representar un carcter, est limitado a un mximo de 256 caracteres.
Aunque es adecuado para el ingls, no acepta totalmente muchos otros idiomas.
Para escribir un carcter ANSI que no est en el teclado:
1. Localice en la tabla que se muestra en la pgina siguiente el carcter ANSI
que necesite y observe su cdigo numrico.
2. Pulse la tecla Bloq Nm (Num Lock) para activar el teclado numrico.
3. Mantenga pulsada la tecla Alt y utilice el teclado numrico para pulsar el 0 y a
continuacin las teclas correspondientes al cdigo del carcter.
Por ejemplo, para escribir el carcter en el entorno Windows, mantenga
pulsada la tecla Alt mientras escribe 0177 en el teclado numrico (ver la tabla de
cdigos en la pgina siguiente).

686

C/C++: CURSO DE PROGRAMACIN

JUEGO DE CARACTERES ANSI

APNDICE C: CDIGOS DE CARACTERES

687

UTILIZACIN DE CARACTERES ASCII


En MS-DOS y fuera del entorno Windows se utiliza el juego de caracteres ASCII.
Para escribir un carcter ASCII que no est en el teclado:
1. Busque el carcter en la tabla de cdigos que coincida con la tabla activa.
Utilice la orden chcp para saber qu tabla de cdigos est activa.
2. Mantenga pulsada la tecla Alt y utilice el teclado numrico para pulsar las teclas correspondientes al nmero del carcter que desee.
Por ejemplo, si est utilizando la tabla de cdigos 850, para escribir el carcter mantenga pulsada la tecla Alt mientras escribe 227 en el teclado numrico
(ver la tabla de cdigos en la pgina siguiente).

688

C/C++: CURSO DE PROGRAMACIN

JUEGO DE CARACTERES ASCII

APNDICE C: CDIGOS DE CARACTERES

689

JUEGO DE CARACTERES UNICODE


UNICODE es un juego de caracteres en el que se emplean 2 bytes (16 bits) para
representar cada carcter. Esto permite la representacin de cualquier carcter en
cualquier lenguaje escrito en el mundo, incluyendo los smbolos del chino,
japons o coreano.
Cdigos UNICODE de los dgitos utilizados en espaol:
\u0030-\u0039

0-9 ISO-LATIN-1

Cdigos UNICODE de las letras y otros caracteres utilizados en espaol:


\u0024
\u0041-\u005a
\u005f
\u0061-\u007a
\u00c0-\u00d6
\u00d8-\u00f6
\u00f8-\u00ff

$ signo dlar
A-Z
_
a-z

Dos caracteres son idnticos solo si tienen el mismo cdigo Unicode.

NDICE
#
#,476
##,476
#define,39,68,472
#elif,477
#else,477
#endif,477
#error,483
#if,477
#include,68,477,483
#line,482
#undef,476

A
abrirunfichero,409
accesoaleatorio,441
accesosecuencial,429,453
Ackerman,592
acos,652
algoritmoBoyeryMoore,607
algoritmoshash,619
mbitodeunavariable,83
ancho,103
anidarif,141
anidarwhile,do,ofor,154
ANSI,72,685
ANSIC,475
rbol,542
rbolbinario,543

rbolbinariodebsqueda,546
rbolbinarioperfectamenteequilibrado,558
rbol,recorrer,544
archivo,402
argumento,71
argumentosenlalneaderdenes,363
argumentospasadosporvalor,77
argumentosporreferencia,78
argumentos,pasaraunafuncin,77
aritmticadepunteros,272,277,278,286
ASCII,687
asignacin,100
asignacindinmicadememoria,299
asignarbytesdesdeunadireccin,270
asin,652
ASSERT,486
atan,652
atan2,652
atof,208,648
atoi,208,648
atol,208,648
auto,86

B
bibliotecadefunciones,669
bit,2
bitsdeerror,413
bloque,70
borrarloselementosdeunalista,504
borrarnodo,552
borrarunelementodeunalista,503

692

C/C++: CURSO DE PROGRAMACIN

BoyeryMoore,607
break,149,163
buffer,404
flujo,437
vaciar,441
burbuja,598
buscarnodo,550
buscarunelementoenunalista,502
bsquedabinaria,606
bsquedadecadenas,607
bsquedasecuencial,606
byte,2

C
cadenasdecaracteres,200
leer,121
leeryescribir,201
cadena,principioyfinal,282
calificacindefunciones,90
calificadores,86
calloc,304
campo,402
campodebits,242
carcter\n,115
caracteresdeC,24
manipular,198
cast,55
ceil,654
cerrarunfichero,412
char,27
clearerr,413
clock,656
cola,528
comentario,39
compilacincondicional,477
compilacin,constantesimblica,479
compilador,4
const,40
constantesimblica,39,472
contador,199
continue,164
conversin,42
conversinentretipos,54
conversinforzada,55
copiarmatrices,218
copiarunficheroenotro,421
copiarunamatriz,280
cos,653
cosh,653

CR,115
CR+LF,410
ctime,657

D
decimal,35
declaracin,69
declaracincompleja,326
declaracindeunafuncin,71
define,68
defined,479
definicin,69
definicindeunafuncin,73
depurar,666,676
direccinde,51
direccindememoria,78,267
directrices,67
directrices#if,#elif,#elsey#endif,477
directricesparaelpreprocesador,471
directriz,471
#define,472
#error,483
#include,477,483
#line,482
#undef,476
deinclusin,68
desustitucin,68
dispositivosestndar,434
do...while,157
double,32

E
E/Scarcteracarcter,418
E/Sconformato,425
E/Sdecadenasdecaracteres,422
E/Sutilizandoregistros,427
EDI,661
elseif,144
ensamblador,2
enum,29
EOF,115
errno,416
erroresenoperacionesdeE/S,413
escribirconformato,102
escribirenunfichero,430
escribiruncarcter,119
estticavsdinmica,301
estructuracomoargumento,354

NDICE

estructuraelseif,144
estructuraFILE,403
estructuras,221
abstractasdedatos,496
accesoasusmiembros,224
crear,221
definirvariables,222
dinmicas,495
miembros,225
operaciones,226
variables,237
exit,131,302
exp,654
expresin,42
expresionesbooleanas,45
extern,86

F
fabs,655
fclose,412
feof,415
ferror,413
fflush,117,441
fgetc,420
fgets,423
fichero,402
abrir,409
cerrar,412
decabecera,483
escribir,430
indexado,crear,637
leer,433
temporal,441
ficherosbinarios,406
ficherosdetexto,406
FILE,403
findefichero,115,415
float,31
floor,655
flujo,102,403
buffer,437
fopen,410
for,160
formato,especificaciones,102
fprintf,425
fputc,419
fputs,422
fread,429
free,301

freopen,411
fscanf,426
fseek,417,442
ftell,417,418,442,444,461
fugasdememoria,301
funcin,63,70
acos,652
asin,652
atan,652
atan2,652
atof,648
atoi,648
funcin
atol,648
calloc,304
ceil,654
clearerr,413
clock,656
cos,653
cosh,653
ctime,657
esrecursiva,367
exit,131,302
exp,654
fabs,655
fclose,412
feof,415
ferror,413
fflush,117,441
fgetc,420
fgets,423
floor,655
fopen,410
fprintf,425
fputc,419
fputs,422
fread,429
free,301
frenteamacro,473
freopen,411
fscanf,426
fseek,417
ftell,417
fwrite,428
getch,120
getchar,118
getche,120
gets,201,423
localtime,658
log,654

693

694

C/C++: CURSO DE PROGRAMACIN

getchar,118
getche,120
gets,122,201,423
getw,422

log10,654
malloc,299
memcmp,660
memcpy,220,659
memset,220,659
perror,415
pow,655
printf,102
putchar,119
puts,203
rand,656
realloc,302
rewind,418
scanf,81,108
setvbuf,438
sin,653
funcin
sinh,653
sprintf,649
sqrt,655
srand,656
strcat,640
strchr,640
strcmp,642
strcpy,640
strcspn,643
strlen,644
strlwr,647
strncat,644
strncmp,645
strncpy,645
strrchr,641
strspn,645
strstr,646
strtok,646
strupr,647
system,128
tan,653
tanh,654
time,657
tmpfile,441
toascii,650
tolower,650
toupper,650
fwrite,428

H
Hanoi,595
hash,619
hexadecimal,36

I
identificadores,38
ifanidados,141
impresora,434
include,68
indireccin,52,288
inorden,544
insercin,600
insertarnodo,550
insertarunelementoenunalista,501
int,28
interfazgenrica,509
intrprete,4

G
gdb,679
getch,120

lagunasdememoria,301
leerconformato,108
leerdeunfichero,433
leeruncarcter,118
lenguajemquina,3
lenguajesdealtonivel,3
LF,115
limpiarelbufferasociadoconunflujo,117
limpiarlapantalla,128
lneaderdenes,363,668
LINUX,678
listacircular,520
listacirculardoblementeenlazada,533
listadoblementeenlazada,533
listalinealsimplementeenlazada,496
listalineal,recorrer,504
listaslineales,496
literal,35
literaldecadenadecaracteres,37
literaldeunsolocarcter,36
literalentero,35
literalreal,36

NDICE

llamadaaunafuncin,75
localtime,658
log,654
log10,654
long,28
longdouble,32
LPT1,435

M
macro,472
macrofrenteafuncin,473
macrospredefinidas,475
main,75
malloc,299
matrices,187,188
matricesdepunteros,286
matricesdinmicas,304
matricesdinmicasdecadenasdecaracteres,
313
matricesdinmicasdedosdimensiones,309
matricesdinmicasdeunadimensin,305
matriz,15,121
matrizasociativa,196
matrizdecadenasdecaracteres,214
matrizdeestructuras,231
matrizdepunterosacadenasdecaracteres,
291
matrizmultidimensional,209
matriznumricamultidimensional,209
matrizsparse,265
matrizstatic,195
matriz,accederaunelemento,190
matriz,definir,189
matriz,iniciar,195
matriz,tipoytamao,208
memcmp,220,660
memcpy,220,659
memoriaintermedia,404
memset,220,308,659
mensajesdeerror,415
mtododeinsercin,600
mtododelaburbuja,598
mtododequicksort,602
mezclanatural,611
milisegundostranscurridosdesdeel1deenero
de1970,332

695

N
niveldeindireccin,288
nododeunrbol,544
NULL,276,498
nmerosaleatorios,330

O
octal,35
operacionesconpunteros,271
operador
#,476
##,476
&,51
*,52
coma,51
condicional,49
defined,479
sizeof,50
ternario,49
operadores,42
aniveldebits,46
aritmticos,42
deasignacin,47
derelacin,44
lgicos,45
prioridad,53
unitarios,46
ordenacin,597
ordenarcadenasdecaracteres,295
ordenarunfichero,610
ordenarunficheroutilizandoaccesoaleatorio,
616

P
palabrasclave,38
pantalla,limpiar,128
parmetros,72,74
path,668
perror,415
pila,527
polinomios,327
postorden,545
pow,655
precisin,106
preorden,544
preprocesador,67,471
printf,102

696

C/C++: CURSO DE PROGRAMACIN

prioridaddelosoperadores,53
programa,2,63
programacompuestoporvariosficheros,81
prototipodeunafuncin,71
puntero,79,267
aunpuntero,288
aunacadenadecaracteres,282
aunafuncin,369
comoargumento,352
comoparmetro,320
delectura/escritura,417
definir,267
genrico,274
nulo,276
punteros
aestructuras,317
asignacin,271
comparacin,274
const,277
operacionesaritmticas,272
operadores,269
ymatrices,277
putchar,119
puts,203
putw,422

Q
quicksort,602

R
razdeunrbol,544
rand,656
realloc,302
reasignarunbloquedememoria,302
recorrerunrbol,544
recursin,591
redireccionarlaentradaosalida,365
redireccionarstdin,stdoutostderr,411
register,86
registro,402
registros,427
retornarladireccindeunav.static,361
retornarunpuntero,360
retornarunacopiadelosdatos,359
return,74,131
returnvsexit,302
rewind,418

S
scanf,108,123
secuenciadeescape,25
sentencia
break,163
compuesta,70
continue,164
deasignacin,100
do...while,157
for,160
return,74,131
simple,69
switch,147
while,151
set,668
setvbuf,438
short,28
signed,26
sin,653
sinh,653
sinnimosdeotrotipo,33
size_t,300
sizeof,50
sprintf,208,649
sqrt,655
srand,656
static,86
stdaux,405
stderr,405
stdin,102,405
stdout,102,405
stdprn,405
strcat,640
strchr,640
strcmp,208,642
strcpy,208,640
strcspn,643
stream,403
strlen,208,644
strlwr,647
strncat,644
strncmp,645
strncpy,645
strrchr,641
strspn,645
strstr,646
strtok,646
struct,222
strupr,647

NDICE

tolower,208,650
torresdeHanoi,595
toupper,208,650
typedef,33,208,223

subndice,189
switch,147
sys_errlist,416
sys_nerr,416
system,128

T
tan,653
tanh,654
temporal,fichero,441
tiempodeejecucin,479
time,332,657
tipo,104
abstractodedatos,227
char,27
double,32
enumerado,29
float,31
int,28
long,28
longdouble,32
short,28
tiposdedatos,26
tiposderivados,33
tiposprimitivos,26
tmpfile,441
toascii,650

U
UNICODE,689
unin,234
UNIX,678
unsigned,26

V
validarundatodeentrada,124
variable,40
global,84
iniciar,41
local,84
VisualC++,661
void,73
void ,274

W
while,151
while,do,oforanidados,154

697

Del mismo autor


Curso de programacin con
PASCAL
Curso de programacin
GW BASIC/BASICA
Manual para TURBO BASIC
Gua del programador
Manual para Quick C 2
Gua del programador
Manual para Quick BASIC 4.5
Gua del programador
Curso de programacin
Microsoft COBOL
Enciclopedia del lenguaje
C
Curso de programacin
QBASIC y MS-DOS 5
Curso de programacin
RM/COBOL-85
El abec de
MS-DOS 6
Microsoft Visual C ++ (ver. 1.5x de 16 bits)
Aplicaciones para Windows
Microsoft Visual C ++
Aplicaciones para Win32 (2. edicin)
Microsoft Visual C ++
Programacin avanzada en Win32
Visual Basic 6
Curso de programacin (2. edicin)
Enciclopedia de Microsoft
Visual Basic 6
El lenguaje de programacin
Java
El lenguaje de programacin
C#

ISBN: 978-84-86381-36-3
224 pgs.
ISBN: 978-84-86381-87-5
320 pgs.
ISBN: 978-84-86381-43-1
444 pgs.
ISBN: 978-84-86381-65-3
540 pgs.
ISBN: 978-84-86381-74-5
496 pgs.
ISBN: 978-84-7897-001-8
480 pgs.
ISBN: 978-84-7897-053-7
888 pgs.
ISBN: 978-84-7897-059-9
384 pgs.
ISBN: 978-84-7897-070-4
396 pgs.
ISBN: 978-84-7897-114-5
224 pgs.
ISBN: 978-84-7897-180-0
846 pgs. + 2 disquetes
ISBN: 978-84-7897-561-7
792 pgs. + disquete
ISBN: 978-84-7897-344-6
888 pgs. + CD-ROM
ISBN: 978-84-7897-357-6
528 pgs. + disquete
ISBN: 978-84-7897-386-6
1.072 pgs. + CD-ROM
ISBN: 978-84-7897-485-6
320 pgs. + CD-ROM
ISBN: 978-84-7897-500-6
320 pgs. + CD-ROM

Del mismo autor


El lenguaje de programacin
Visual Basic.NET
Java 2
Lenguaje y aplicaciones
Programacin orientada a objetos
con C ++ (4. edicin)
C/C++
Curso de programacin (3. edicin)
Microsoft C#
Lenguaje y aplicaciones (2. edicin)
Aplicaciones .Net multiplataforma
(Proyecto Mono)
Enciclopedia del lenguaje
C ++ (2. edicin)
Microsoft Visual Basic .NET
Lenguaje y aplicaciones (3. edicin)
Java 2
Curso de programacin (4. edicin)
Microsoft C#
Curso de programacin (2. edicin)
Visual C#. Interfaces grficas y aplicaciones
para Internet con WPF, WCF y Silverlight
Visual Basic. Interfaces grficas y aplicaciones
para Internet con WPF, WCF y Silverlight
Enciclopedia de Microsoft Visual C#.
Interfaces grficas y aplicaciones para Internet
con Windows Forms y ASP.NET (4. edicin)
Enciclopedia de Microsoft Visual Basic.
Interfaces grficas y aplicaciones para Internet
con Windows Forms y ASP.NET (3. edicin)
Java. Interfaces grficas y aplicaciones para
Internet (4. edicin)

ISBN: 978-84-7897-525-9
464 pgs. + CD-ROM
ISBN: 978-84-7897-745-1
392 pgs. + CD-ROM
ISBN: 978-84-7897-761-1
648 pgs. + CD-ROM
ISBN: 978-84-7897-762-8
708 pgs. + CD-ROM
ISBN: 978-84-7897-813-7
520 pgs. + CD-ROM
ISBN: 978-84-7897-880-9
212 pgs. + CD-ROM
ISBN: 978-84-7897-915-8
902 pgs. + CD-ROM
ISBN: 978-84-9964-020-4
520 pgs. + CD-ROM
ISBN: 978-84-9964-032-7
820 pgs. + CD-ROM
ISBN: 978-84-9964-068-6
850 pgs. + CD-ROM
ISBN: 978-84-9964-203-1
956 pgs. + CD-ROM
ISBN: 978-84-9964-204-8
938 pgs. + CD-ROM
ISBN: 978-84-7897-986-8
1.145 pgs. + CD-ROM
ISBN: 978-84-7897-987-5
1.125 pgs. + CD-ROM
ISBN: 978-84-9964-522-3
1.000 pgs. + ZIP

INSTALACIN
Para instalar el kit de desarrollo de C/C++ y los ejemplos de este libro, descargue de Internet el paquete correspondiente al EDI preferido por usted (Microsoft Visual Studio, NetBeans, Code::Blocks, etc.) e instlelo. Despus, proceda segn se indica en el apndice B.

SOBRE LOS EJEMPLOS DEL LIBRO


El material adicional de este libro, con las aplicaciones desarrolladas y el software para reproducirlas, puede descargarlo desde http://www.fjceballos.es (seccin Mis publicaciones > C/C++ > Material adicional) o desde
http://www.ra-ma.com (en la pgina correspondiente al libro). La descarga consiste en un fichero ZIP con una
contrasea que encontrar en el libro.

LICENCIA
Los paquetes de software a los que se hace referencia en el material adicional del libro es propiedad de las firmas
que los representan. La inclusin en este libro se debe a su gentileza y es totalmente gratuita y con la finalidad de
apoyar el aprendizaje del software correspondiente. Para obtener ms informacin y actualizaciones, visite las direcciones indicadas en dicho software.
Al realizar el proceso de instalacin, haga el favor de consultar el acuerdo de licencia para cada uno de los productos.

WEB DEL AUTOR: http://www.fjceballos.es


En esta web podr echar una ojeada a mis publicaciones ms recientes y acceder a la descarga del software necesario para el estudio de esta obra, as como a otros recursos.