SlideShare una empresa de Scribd logo
1 de 859
Descargar para leer sin conexión
Enciclopedia del Lenguaje
""."" ADDISON-WESLEY IBEROAMERICANA
Enciclopedia del Lenguaje
c
Enciclopedia del Lenguaje
cFeo. Javier Ceballos Sierra
Profesor titular de la
Escuela Universitaria Politecnica
Universidad de Alcala de Henares (Madrid)
TAT ADDISON-WESLEY IBEROAMERICANA
Se ha puesto el maximo empefio en ofrecer allector una informacion
completa y precisa. Sin embargo RA-MAEditorial y Addison-Wesley
Iberoamericana, S.A.no asumen ninguna responsabilidad derivada de
su usa, ni tam poco por cualquier violacion de patentes ni otros
derechos de terceras partes que pudieran ocurrir.
© 1993 por Addison Wesley Iberoamericana, S.A.
Wilmington, Delaware, E.U.A.
Ninguna parte de este libro puede ser reproducida, grabada en sistema
de almacenamiento 0 transmitida en forma alguna ni por cualquier
procedimiento, ya sea electronico, mecanico, reprografico, magnetico 0
cualquier otro, sin autorizacion previa y por escrito de RA-MA.
Dedico esta obra
a Marfa del Carmen, mi esposa,
y a mis hijos Francisco y' Javier
CAPITULO 1. Introduccion al Lenguaje C. . . . . . . . . . . . . . . 39
Historia del lenguaje C. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
Realizaci6n de un programa en C. . . . . . . . . . . . . . . . . . . . . 41
Edici6n de un programa. . . . . . . . . . . . . . . . . . . . . . . . . . . 42
Salvar el programa escrito, en el disco. . . . . . . . . . . . . . . 44
Compilar y ejecutar el programa. . . . . . . . . . . . . . . . . . . . 44
Salvar el programa ejecutable (.exe), en el disco. . . . . . . 44
Depurar un programa............................. 45
Preparando un programa simple. . . . . . . . . . . . . . . . . . . . 45
Edici6n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
Compilaci6n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
Depuraci6n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
Nombres de ficheros y extensiones. . . . . . . . . . . . . . . . . . . . . 49
CAPITULO 2. Elementos del Lenguaje C........ .... .... 51
Presentaci6n de la sintaxis de C. . . . . . . . . . . . . . . . . . . . . . . 51
Caracteres de C. .. .. . . . . . . . . . . . . . .. . .. . .. .. .. . . . . . . . 52
Letras, digitos y carcicter de subrayado. . . . . . . . . . . . . . . 52
Espacios en blanco. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
Caracteres especiales y signos de puntuaci6n. . . . . . . . . 53
Secuencias de escape.............................. 53
Tipos de datos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
Tipos fundamentales. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
char. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
short. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
int . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
long. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
enum. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
Creaci6n de una enumeraci6n. . . . . . . . . . . . . . . . . . . . . . 58
float. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
double. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
long double...................................... 61
void. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
Tipos derivados..................................... 61
punteros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
estructuras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
uni6n. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
Nombres de tipos................................... 63
typedef . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
Constantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
Constantes enteras................................ 65
Constantes reales................................. 66
.. ". Constante de un solo carcicter. . . . . . . . . . . . . . . . . . . . . . 67
.Constantes de caracteres........................... 67
'Identificadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
Palabras clave. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
Comentarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
Variables. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
Declaraci6n de constantes............................ 72
Cailficador const .. " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
Calificador volatile.... . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
Expresiones numeric'as............................... 73
Operadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
Operadores aritmeticos............................ 74
Operadores 16gicos................................ 74
Operadores de relaci6n............................ 75
Expresiones de Boole. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
Operadores unitarios.............................. 76
Operadores 16gicos para manejo de bits. . . . . . . . . . . . . . 76
Operadores de asignaci6n.......................... 77
Expresiones condicionales.......................... 79
Otros operadores.................................... 79
Operador coma................................... 79
Operador de indirecci6n (*)........................ 80
Operador de direcci6n-de (&). . . . . . . . . . . . . . . . . . . . . . . 80
Operador sizeof (tamafio de).. . . . . . . . . . . . . . . . . . . . . . 80
Priori dad y orden de evaluaci6n. . . . . . . . . . . . . . . . . . . . . . . 81
Conversi6n de tipos................................. 82
Conversi6n explicita del tipo de una expresi6n. . . . . . . . . . 85
Tipos estandar...................................... 86
CAPITUW 3. Comenzando con el Lenguaje C. . . . . . . . . . . 89
Estructura de un programa C. . . . . . . . . . . . . . . . . . . . . . . . . 89
Ficheros de cabecera. Directriz # include. . . . . . . . . . . . . 91
Directriz # define. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
Declaraciones y definiciones. . . . . . . . . . . . . . . . . . . . . . . . 92
Expresiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
Sentencias. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
Sentencia compuesta 0 bloque. . . . . . . . . . . . . . . . . . . . . . 94
Funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
Declaraci6n de una funci6n. . . . . . . . . . . . . . . . . . . . . . . . 95
Definici6n de una funci6n......................... 96
Llamada a una funci6n. . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
Pasando argumentos a funciones.................... 98
Un programa C formado por multiples ficheros. . . . . . . . . 99
Accesibilidad de variables. Ambito.................... 101
Variables glob ales y locales. . . . . . . . . . . . . . . . . . . . . . . . . 101
Clases de almacenamiento. . . . . . . . . . . . . . . . . . . . . . . . . . 103
Variables declaradas a nivel externo. . . . . . . . . . . . . . . . . 104
Variables declaradas a nivel interno. . . . . . . . . . . . . . . . . . 106
Declaraci6n de funciones a nivel interno y a nivel externo 108
Sintaxis de las sentencias y funciones de C. . . . . . . . . . . . . 108
Senten cia de asignaci6n. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
Entrada y salida estandar............................ 110
Salida con formato. Funci6n printf. . . . . . . . . . . . . . . . . . . . 110
Entrada con formato. Funci6n scanf. . . . . . . . . . . . . . . . . . . 116
Entrada de caracteres. getchar........................ 122
Salida de caracteres. putchar. . . . . . . . . . ... . . . . . . . . . . . . . . 122
Caracter fin de linea y caracter fin de fichero. . . . . . . . . . . 123
Funciones getch y getche. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
Funci6n system..................................... 126
Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
CAPITUW 4. Sentencias de Control.................... 129
Senten cia if. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
Anidamiento de sentencias if.. . . . . . . . . . . . . . . . . . . . . . . . 131
Estructura if. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
Sentencia switch. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
Sentencia break..................................... 138
Sentencia while..................................... 140
Sentencia do. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
Senten cia for....................................... 145
Bucles anidados..................................... 146
Sentencia continue.................................. 149
Sentencia goto y etiquetas. . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152
Numeros pseudoaleatorios............................ 158
Calculo de areas y volumenes. . . . . . . . . . . . . . . . . . . . . . 161
CAPITUW 5. Tipos Estructuradosde Datos............. 163
Arrays. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
Declaraci6n de un array. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
Arrays unidimensionales........................... 164
Arrays multidimensionales......................... 165
Caracteristicas generales........................... 166
Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168
Cadenas de caracteres. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
Funci6n gets. Leer una cadena de caracteres. . . . . . . . . . . . 175
Funci6n puts. Escribir una cadena de caracteres. . . . . . . . . 175
Limpiar el buffer asociado con stdin. . . . . . . . . . . . . . . . . . . 176
Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178
Arrays de cadenas de caracteres. . . . . . . . . . . . . . . . . . . . . . . 182
Funciones para manipular cadenas de caracteres. . . . . . . . . 183
Funciones para conversi6n de datos. . . . . . . . . . . . . . . . . . . . 190
Funciones para clasificaci6n y conversi6n de caracteres. . . 193
Estructuras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197
Creaci6n de una estructura. . . . . . . . . . . . . . . . . . . . . . . . . 197
Operaciones con estructuras. . . . . . . . . . . . . . . . . . . . . . . . 200
Arrays de estructuras.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200
Union~s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201
Campos de bits .. ; . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207
Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210
CAPITUW 6. Punteros.... . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219
Introducci6n. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219
Creaci6n de punteros................................ 219
Operadores. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220
Importancia del tipo del objeto al que se apunta. . . . . . 221
Operaciones con punteros............................ 222
Operaci6n de asignaci6n. . . . . . . . . . . . . . . . . . . . . . . . . . . 222
Operaciones aritmeticas............................ 222
Comparaci6n de punteros. . . . . . . . . . . . . . . . . . . . . . . . . . 223
Ejemplos con punteros............................ 223
Punteros a objetos de tipo no especificado (void). . . . . 225
Punteros y arrays. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226
Punteros a cadenas de caracteres.. . . . . 227
Inicializaci6n de cadenas. . . . . . . . . . . . . . . . . . . . . . . . . . . 232
Arrays de punteros. Punteros a punteros. . . . . . . . . . . . . . . 233
Inicializaci6n de un array de punteros a cadenas de
caracteres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236
Asignaci6n dimimica de memoria. .. ... . . . . . ... . . .. . . . 239
Funciones para asignaci6n dinamica de memoria. . . . . . . . 240
malloc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240
Arrays dinamicos................................. 242
calloc. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243
realloc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244
free. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245
halloc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246
hfree . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246
Punteros a estructuras............................... 247
Declaraciones complejas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248
CAPITUW 7. Funciones............................... 251
Introducci6n. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251
Definici6n de una funci6n. . . . . . . . . . . . . . . . . . . . . . . . . . . . 252
Cuerpo de la funci6n. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255
Valor retornado por una funci6n. Sentencia return. . . . 255
Llamada a una fund6n. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256
Declaraci6n de una' funci6n. (Funci6n prototipo). . . . . . . . 257
Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259
Pasando parametros por valor 0 por referencia. . . . . . . . . . 267
Pasando arrays completos. . . . . . . . . . . . . . . . . . . . . . . . . . 268
Pasando punteros................................. 272
Argumentos en la linea de 6rdenes. . . . . . . . . . . . . . . . . . . . 274
Funciones con un numero de argumentos variable. . . . . . . 276
Funciones recursivas................................. 279
Ajustando e1tamafio del stack. . . . . . . . . . . . . . . . . . . . . . 281
Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281
Punteros a funciones................................ 288
Funciones predefinidas en C. . . . . . . . . . . . . . . . . . . . . . . . . . 292
Funciones matematicas............................ 292
Otras funciones de interes. . . . . . . . . . . . . . . . . . . . . . . . . . 299
Funci6n C para clasificar datos. . . . . . . . . . . . . . . . . . . . . . . 303
qsort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303
Funciones C para busqueda.......................... 305
bsearch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305
Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 308
CAPITULO 8. Funciones ESbindar de E/S................ 315
Introducci6n. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315
Manipulaci6n de ficheros. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316
Abriendo un fichero. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317
Cerrando un fichero. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318
Leyendo y escribiendo datos. . . . . . . . . . . . . . . . . . . . . . . . 318
Detecci6n de errores. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318
Acceso secuencial y acceso aleatorio. . . . . . . . . . . . . . . . . 319
Abrir un fichero.................................... 319
fopen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319
fdopen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321
freopen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322
Cerrar un fichero. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323
fclose. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323
fcloseall . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323
Detecci6n de errores. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324
ferror. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324
clearerr. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324
feof . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325
perror . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326
Entrada/salida canicter a caracter. . . . . . . . . . . . . . . . . . . . . 326
fputc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326
fgetc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328
Entrada/salida palabra a palabra. . . . . . . . . . . . . . . . . . . . . . 330
putw . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330
getw . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330
Entrada/salida de cadenas de caracteres. . . . . . . . . . . . . . . . 332
fputs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332
fgets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333
Utilizaci6n de dispositivos estandar. . . . . . . . . . . . . . . . . . . . 334
Entrada/salida con formato.......................... 336
fprintf. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336
fscanf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336
Entrada/salida utilizando registros 0 bloques. . . . . . . . . . . 338
fwrite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338
fread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338
Control de la memoria intermedia asociada con un
fichero. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 341
setbuf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 341
setvbuf. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 341
fflush . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344
Ficheros temporales. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345
tmpfile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345
rmtmp. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345
tmpnam . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346
tempnam .. . . . . . . . . . . . . . . . 347
Acceso aleatorio a un fichero. . . . . . . . . . . . . . . . . . . . . . . . . 348
fseek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348
ftell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349
rewind. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349
fsetpos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 352
fgetpos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 352
_fsopen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353
CAPITUW 9. FUDcioDes de E/S de bajo Dive'. . . . . . . . . . . . 355
Introducci6n. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355
Manipulaci6n de ficheros , . 355
Abriendo un fichero. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 356
Cerrando un fichero. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 356
Leyendo y escribiendo datos. . . . . . . . . . . . . . . . . . . . . . . . 357
Abrir un fichero.................................... 357
open. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357
creat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360
eof. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361
fileno. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362
Cerrar un fichero. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363
close. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363
Funciones para entrada/salida........................ 363
write. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363
read. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363
Acceso aleatorio.................................... 366
lseek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 366
tell. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367
dup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 369
dup2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 369
sopen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 369
umask. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 370
CAPITUW 10. Funciones para la Consola y los Puertos de E/S 373
Introducci6n ". . . . . . . . . . . . . . . . . . . . 373
Funciones para la consola. . . . . . . . . . . . . . . . . . . . . . . . . . . . 373
getch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373
getche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 374
putch. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 374
kbhit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375
ungetch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375
cgets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 376
cputs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377
cscanf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377
cprintf. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377
Control del cursor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 378
Funciones para los puertos de E/S. . . . . . . . . . . . . . . . . . . . 384
inp. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385
outp. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385
inpw . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 386
outpw , . . . . . . . . . . . . . . . . . . 386
CAPITUW 11. EI Preprocesador de C. . . . . . . . . . . . . . . . . . . 391
Introducci6n. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391
Directriz # define. Sustituci6n de simbolos. . . . . . . . . . . . . . 392
El operador #.................................... 394
El operador # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 394
Directriz # undef. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395
Directriz # include. Inclusi6n de ficheros fuente. . . . . . . . . 395
Compilaci6n condicional............................. 396
defined(identificador) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 397
Directrices # ifdef e # ifndef. . . . . . . . . . . . . . . . . . . . . . . . . . 399
Directriz # line. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 399
Directriz # error. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 400
Directriz # pragma. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 400
Funciones intrinsecas................................ 401
Utilizando ficheros de cabecera (.h). . . . . . . . . . . . . . . . . . . . 403
Utilizando el preprocesador. . . . . . . . . . . . . . . . . . . . . . . . . . . 405
Utilizando funciones intrinsecas. . . . . . . . . . . . . . . . . . . . . 407
Utilizando macros 0 funciones. . . . . . . . . . . . . . . . . . . . . . 408
CAPITUW 12. Estructuras Dimimicasde Datos.......... 413
Introducci6n. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 413
Asignaci6n dimimica de memoria..................... 414
Listas lineales. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415
Operaciones basicas................................. 418
Inserci6n de un elemento al comienzo de la lista. . . . . . 418
Inserci6n de un elemento en general. . . . . . . . . . . . . . . . . 419
Borrar un elemento de la lista. . . . . . . . . . . . . . . . . . . . . . 420
Recorrido de una lista cuyo primer elemento esta apunta-
do por p. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 421
Buscar en una lista un elemento con un valor x. . . . . . . 422
Pilas, colas y listas doblemente enlazadas. . . . . . . . . . . . . . . 427
Pilas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 427
Colas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 432
Listas circulares. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 436
Listas doblemente enlazadas. . . . . . . . . . . . . . . . . . . . . . . . 444
Arboles. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 449
Arboles binarios.................................. 450
Recorrido de arboles'binarios............... . . . . .... 451
Arboles binarios de busqueda. . . . . . . . . . . . . . . . . . . . . . . . . 453
Borrado en arboles. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 458
Arboles binarios perfectamente equilibrados. . . . . . . . . . . . 460
CAPITUW 13. Algoritmos Recursivos, de Ordenacion y de
Btisqueda. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 465
Introducci6n. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 465
Recursividad. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 465
Clasificaci6n de datos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 473
Metodo de la burbuja...... . . . . . . . . . . . . . . . . . . . . . . . 473
Metodo de inserci6n. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 477
Metodo Quicksort................................ 480
Comparaci6n de los metodos expuestos. . . . . . . . . . . . . . 484
Bdsqueda de datos. 485
Bdsque4a secuencial. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 485
Bdsqueda binaria................................. 486
Ordenaci6n de ficheros en disco. . . . . . . . . . . . . . . . . . . . . . . 488
Ordenaci6n de ficheros. Acceso secuencial........... 488
Ordenaci6n de ficheros. Acceso aleatorio............ 494
Algoritmos hash.................................... 497
Arrays hash...................................... 498
Metodo hash abierto.............................. 499
Metodo hash con overflow. . . . . . . . . . . . . . . . . . . . . . . . . 501
Eliminaci6n de elementos.......................... 502
Un ejemplo de un array hash. . . . . . . . . . . . . . . . . . . . . . . 503
CAPITUW 14. Manejo de la Memoria. . . . . . . . . . . . . . . . . . 509
Introducci6n. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 509
Tamano de una variable tipo puntero. . . . . . . . . . . . . . . . . . 510
Punteros y segmentos de 64K. . . . . . . . . . . . . . . . . . . . . . . . . 510
Punteros near. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 511
Punteros far........................................ 511
Punteros huge...................................... 514
Punteros basados en un segmento. . . . . . . . . . . . . . . . . . . . . 514
Modelos de memoria estandar. . . . . . . . . . . . . . . . . . . . . . . . 515
Modelo pequenito (tiny)........................... 516
Modelo pequeno (small)........................... 517
Modelo medio (medium). . . . . . . . . . . . . . . . . . . . . . . . . . . 518
Modelo compacta (compact)....................... 519
Modelo grande (large)............................. 520
Modelo enorme (huge)............................ 523
Punteros nul os...................................... 524
Modelos de memoria mixtos. . . . . . . . . . . . . . . . . . . . . . . . . . 526
Declaraci6n de variables near, far, huge, 0 based. . . . . . . . 529
Declaraci6n de funciones far 0 near. . . . . . . . . . . . . . . . . . . 530
Utilizaci6n de punteros basad os en un segmento. . . . . . . . 530
Variables y punteros basados en un segmento constante 532
Punteros basados en un segmento variable. . . . . . . . . . . 533
Punteros basados sobre un puntero. . . . . . . . . . . . . . . . . . 536
Punteros basados en void. . . . . . . . . . . . . . . . . . . . . . . . . . 538
Punteros basados en su propio segmento. . . . . . . . . . . . . 539
Soporte MS-DOS para asignaci6n de memoria. . . . . . . . . . 540
Soporte MS-DOS para cadenas de caracteres. . . . . . . . . . . . 542
Manipulaci6n de bloques de memoria. . . . . . . . . . . . . . . . . . 542
Soporte MS-DOS para manipulaci6n de bloques de
memoria. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 546
CAPITULO 15. Compilar y Enlazar desde DOS. . . . . . . . . . . 549
Introducci6n................................. 549
Proceso para crear un fichero ejecutable. . . . . . . . . . . . . 550
Orden CL.......................................... 550
Extensiones de ficheros............................ 553
Opciones de CL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 554
Generaci6n de c6digo............................. 554
Operaciones en coma flotante. . . . . . . . . . . . . . . . . . . . . . 555
Lenguaje. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 556
Enlace. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 556
Modelos de memoria. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 557
Optimizaci6n. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 557
Ficheros de salida. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 558
Preprocesador. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 559
Listado de ficheros fuente. . . . . . . . . . . . . . . . . . . . . . . . . . 559
Opciones varias. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 559
Orden LINK. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 560
LINK en modo pregunta/respuesta. . . . . . . . . . . . . . . . . . 565
LINK con respuestas automatic as . . . . . . . . . . . . . . . . . . . 566
Overlays. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 567
Orden ILINK....................................... 568
CAPITULO 16. Librerias y Utilidades del Compilador. . . . . 571
Introducci6n. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 571
Orden LIB......................................... 572
LIB en modo pregunta/respuesta................... 575
LIB con respuestas automaticas.. . .. . . . .. .. 576
Un ejemplo de trabajo con librerias. . . . . . . . . . . . . . . . . 577
Orden NMAKE..................................... 579
EI fichero makefile. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 579
Opciones de NMAKE............................. 582
Macros. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 583
Sustituciones en macros. . . . . . . . . . . . . . . . . . . . . . . . . . . . 584
Macros especiales................................. 584
Caracteres que pueden modificar estas macros. . . . . . . . 585
Reglas de inferencia............................... 586
Directrices. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 588
Prioridades. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 589
Ficheros en linea. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 590
Simbolos especiales............................... 591
Componentes de una descripci6n de fichero. . . . . . . . . . 591
Pseudoobjetivos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 592
NMAKE con respuestas automaticas................ 592
Inicializaci6n automatica. TOOLS.INI............... 593
Un ejemplo de trabajo con la utili dad NMAKE. . . . . . . 593
EI depurador Code View de Microsoft. . . . . . . . . . . . . . . . . 596
Com pilar y enlazar un programa C para depurar. . . . . 597
Invocando a Code View. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 597
Opciones de Code View........................... 598
Menus de Code View. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 601
Code View con rat6n (mouse). . . . . . . . . . . . . . . . . . . . . . . . 603
Seleccionando texto. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 604
Menu File.......................................... 604
Menu Edit......................................... 605
Menu View......................................... 606
Menu Search....................................... 609
Menu Run. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 611
Menu Watch........................................ 612
Menu Options...................................... 614
Menu Calls......................................... 616
Otras utilidades suministradas con Microsoft C. . . . . . . . . 616
CVPACK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 616
HELPMAKE. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 617
BIND . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 617
QH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 617
EXEHDR. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 617
EXP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 618
RM .. . . . . . . . .. . . . . . . . . . . . . . . . 618
UNDEL......................................... 618
CAPITUW 17. Rutinas en Lenguaje Ensamblador. . . . . . . . 619
Introducci6n. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 619
Rutinas en lenguaje ensamblador en linea con sentencias C 620
El lenguaje ensamblador en bloques _asm. . . . . . . . . . . . . 622
COnstantes enteras................................ 623
Definici6n de datos............................... 623
Operadores y expresiones.......................... 623
Macros. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 625
Comentarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 625
Pseudoinstrucci6n _emit.......................... 625
Utilizando elementos de C en un bloque _asm. . . . . . . . . 626
Definici6n de macros en lenguaje ensamblador. . . . . . . . . . 629
Utilizando y salvando los registros. . . . . . . . . . . . . . . . . . . . . 630
Formas de utilizar un bloque _asm. . . . . . . . . . . . . . . . . . . 633
Llamando a funciones C. . . . . . . . . . . . . . . . . . . . . . . . . . . 633
Reemplazar una funci6n C. . . . . . . . . . . . . . . . . . . . . . . . . 634
Manipulaci6n de interrupciones. . . . . . . . . . . . . . . . . . . . . 635
Trabajando con punteros. . . . . . . . . . . . . . . . . . . . . . . . . . . 635
Trabajando con estructuras. . . . . . . . . . . . . . . . . . . . . . . . . 637
Salto a una etiqueta. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 640
Depuraci6n y optimizaci6n. . . . . . . . . . . . . . . . . . . . . . . . . . . 641
M6dulos separados en lenguaje ensamblador. . . . . . . . . . . . 641
Entrando al procedimiento. . . . . . . . . . . . . . . . . . . . . . . . . 642
Salvar el valor de los registros. . . . . . . . . . . . . . . . . . . . . . 642
Acceso a los parametros de la pila. . . . . . . . . . . . . . . . . . 643
Devolver un valor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 644
Llamando a un procedimiento en ensamblador des de C. . 644
CAPITUW 18. Comunicaciones. Servicios del DOS y del BIOS 649
Introducci6n. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 649
Funciones para Hamar al DOS. . . . . . . . . . . . . . . . . . . . . . . . 650
int86 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 650
int86x . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 651
intdos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 651
intdosx . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 652
segread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 653
bdos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 653
FP _OFF. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 653
FP_SEG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 654
Un ejemplo de comunicaciones. . . . . . . . . . . . . . . . . . . . . 654
Un ejemplo de llamadas al DOS. . . . . . . . . . . . . . . . . . . . 656
Servicios del BIOS.................................. 658
Servicios del disco. _bios_disk. . . . . . . . . . . . . . . . . . . . 658
Listado del equipo. _bios_equiplist. . . . . . . . . . . . . . . . 660
Servicios del teclado. _bios_keybrd. . . . . . . . . . . . . . . . 660
Tamafio de la memoria. _bios-lIlemsize. . . . . . . . . . . . 661
Servicios del puerto paralelo. _bios_printer. . . . . . . . . 662
Servicios del puerto serie. _bios_serialcom. . . . . . . . . . 664
Panimetros de inicializaci6n del puerto. . . . . . . . . . . . . . 664
Servicios del reloj. _bios_timeofday............... 666
CAPITUW 19. C y DOS........ . . . . . . . . . . . . . . . . . . . . . . 669
Introducci6n. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 669
Directorios y caminos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 669
Definiciones generales. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 669
Camino (path). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 669
Redirecci6n de la salida. . . . . . . . . . . . . . . . . . . . . . . . . . . . 671
Redirecci6n de la entrada. . . . . . . . . . . . . . . . . . . . . . . . . . 671
Interconexi6n de entradas y salidas estandar. . . . . . . . . . 672
Prompt. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 672
Operaciones con directorios. . . . . . . . . . . . . . . . . . . . . . . . . . . 673
Especificaci6n de un path. . . . . . . . . . . . . . . . . . . . . . . . . . . . 673
Funciones para control de directorios. . . . . . . . . . . . . . . . . . 674
chdir. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 674
mkdir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 675
rmdir. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 675
getcwd. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 676
system. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 677
Funciones para manipulaci6n de ficheros. . . . . . . . . . . . . . . 679
access. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 679
chmod. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 680
chsize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 682
unlink. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 682
rename. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 683
setmode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 683
stat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 684
isatty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 685
utime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 685
Utilizando c6digos de salida. . . . . . . . . . . . . . . . . . . . . . . . . . 686
Soporte DOS para llamadas al sistema. . . . . . . . . . . . . . . . . 687
Programas residentes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 692
CAPITUW 20. Control de Procesos. . . . . . . . . . . . . . . . . . . . . 697
Introducci6n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 697
Iniciaci6n de un proceso..... . . . . . . . . . . . . . . . . . . . . . . . . 698
Ejecuci6n de un proceso.... . . . . . . . . . . . . . . . . . . . . . . . . . 699
Terminaci6n de un proceso. . . . . . . . . . . . . . . . . . . . . . . . . . . 700
Funciones para control de procesos. . . . . . . . . . . . . . . . . . . . 701
Terminaci6n de procesos............................. 701
abort. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . 701
exit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 702
Ejecuci6n de procesos............................... 702
atexit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 702
onexit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 703
setjmp. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 704
longjmp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 704
_fpreset. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 705
signal. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 707
raise. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 710
Comenzar un nuevo proceso. . . . . . . . . . . . . . . . . . . . . . . . . . 712
execxxx . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 712
spawnxxx . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 716
getenv . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 720
putenv . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 720
CAPITUW 21. Gnificos con C. . . . . . . . . . . . . . . . . . . . . . . . . 725
Introducci6n. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 725
Estructura de un programa gnifico........... 726
Modalidades de video disponibles........... . . . . . . . . . . 728
Seleccionar la modalidad de video. . . . . . . . . . . . . . . . . . 729
Restaurar la modalidad de video original. . . . . . . . . . . . . 730
Almacenar caracteres. Funci6n sprintf. . . . . . . . . . . . . . . 730
Estructura para almacenar la configuraci6n de video. . 731
Colores en modo texto. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 734
Colores en modo gnifico utilizando CGA. . . . . . . . . . . . . . 736
Colores en modo gnifico utilizando VGA, MCGA y EGA 739
Especificaci6n de coordenadas. . . . . . . . . . . . . . . . . . . . . . . . 740
CO'ordenadas fisicas............................... 740
Coordenadas 16gicas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 740
Volviendo a coordenadas fisicas. . . . 741
Convertir coordenadas fisicas a 16gicas y viceversa. . . . 741
Funciones gnificas .... ; . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 742
Funciones relativas a configuraci6n. . . . . . . . . . . . . . . . . . . . 742
Funciones relativas a coordenadas. . . . . . . . . . . . . . . . . . . . . 745
Funciones referentes al uso de paletas. . . . . . . . . . . . . . . . . . 748
Funciones para obtener 0 poner atributos. . . . . . . . . . . . . . 749
Creaci6n de una mascara. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 753
Visualizar imagenes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 754
Visualizar texto..................................... 761
Animaci6n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 764
Animaci6n de un objeto............................. 766
Ejercicio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 771
Coordenadas reales en una ventana. . . . . . . . . . . . . . . . . . . . 775
Funciones para un sistema de coordenadas cartesianas. . . 779
CAPITUW 22. Presentaciones Gnificas. . . . . . . . . . . . . . . . . . 785
Introducci6n. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 785
Estructura de un programa para presentaciones graficas. . 785
Funciones para presentaciones graficas. . . . . . . . . . . . . . . . . 787
Tipos de letras (fonts)............................... 796
Funciones para representar distintos tipos de letras. . . . . . 797
CAPITUW 23. Utilizaci6n del PWB.................... 805
PWB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 805
Menus de PWB. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 806
El menu principal....... . . . . . . . . . . . . . . . . . . . . . . . . . . . . 808
PWB con rat6n (mouse)............................. 809
Ventanas de dialogo................................. 810
El menu File....................................... 811
Caracteristicas del editor del PWB... . . . . . 814
Seleccionando texto............................... 815
Operaciones con el editor............................ 816
Mover el cursor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 816
Scroll. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 817
Insertar. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 817
Borrar '. . . . . . . . . . . . . . . . 817
Seleccionar. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 817
Copiar, mover 0 borrar el texto seleccionado. . . . . . . . . 817
Buscar y sustitu~..... . . . . . . . . . . . . . . . . . . . . . . . . . . . . 818
Teclas de funci6n................................. 818
Menu Edit......................................... 818
Moviendo y copiando texto. . . . . . . . . . . . . . . . . . . . . . . . . . . 821
Menu View......................................... 822
Menu Search....................................... 824
Copiar texto de otros ficheros. . . . . . . . . . . . . . . . . . . . . . . . . 829
Programas y m6dulos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 830
Menu Make........................................ 831
Menu Run.. . . . . . . . .. . . . . . . . . 835
Menu Options...................................... 836
Menu Browse....................................... 842
Menu Help......................................... 844
CAPITUW 24. Instalaci6n de Microsoft C. . . . . . . . . . . . . . . 847
Sistema Requerido. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 847
Caracteristicas aportadas a partir de la versi6n 6. . . . . . . . 848
Instalaci6n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 848
Ejecuci6n del programa SETUP. . . . . . . . . . . . . . . . . . . . . . . 849
APENDICE A. Ficheros .h de C........................ 857
Ficheros de cabecera, variables globales y tipos 857
APENDICE B. C6digos de caracteres (ASCII). . . . . . . . . . . . 869
C6digos extendidos.................................. 875
C6digos del teclado. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 876
Saludo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
Cuadrados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
Paso de grados Centigrados a Fahrenheit (F=9/5*C+32). . . . . 90
Funci6n intercambio. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
Valor mayor de tres valores dados. . . . . . . . . . . . . . . . . . . . . . . . .. 100
Ambito de las variables. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 102
Declaraci6n de extern a nivel externo. . . . . . . . . . . . . . . . . . . . . .. 104
Declaraciones a nivel interno. . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 107
Leyendo datos de la entrada estandar. . . . . . . . . . . . . . . . . . . . . .. 123
Capital e Intereses....................................... 127
Soluci6n de una ecuaci6n de segundo grado. . . . . . . . . . . . . . . .. 128
Menor de tres numeros a, bye. . . . . . . . . . . . . . . . . . . . . . . . . . .. 133
Cantidad a pagar en funci6n de la cantidad comprada. . . . . . .. 134
Dias correspondientes a un mes de un ano dado. . . . . . . . . . . .. 137
Importe por vehkulo al circular por una autopista. . . . . . . . . .. 138
Simulaci6n de una maquina sumadora. . . . . . . . . . . . . . . . . . . . .. 141
C6digo ASCII de un caracter. . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 141
Cuadrados que se pueden expresar como suma de otros dos .. 142
Raiz cuadrada de un numero. Metodo de Newton. . . . . . . . . . .. 143
Construir un triangulo de n filas con caracteres. . . . . . . . . . . . .. 147
Tablero de Ajedrez. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 148
Areas de circulos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 150
goto salir............................................... 151
Calcular las rakes de una ecuaci6n de 2? grado. . . . . . . . . . . .. 152
Palabras con cuatro 0 mas vocales diferentes. . . . . . . . . . . . . . .. 154
Contar caracteres, palabras y lineas en un texto. . . . . . . . . . . . .. 155
Simulaci6n de una calculadora............................ 156
Tirada de un dado. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 159
Valores entre 0 y 1....................................... 160
Numeros pseudoaleatorios - Volumen de una esfera. . . . . . . . .. 161
Creaci6n de un array unidimensional. . . . . . . . . . . . . . . . . . . . . .. 168
Nota media del curso. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 169
Crear un array bidimensional. . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 170
Tanto por ciento de aprobados. . . . . . . . . . . . . . . . . . . . . . . . . . . .. 171
Encontrar el maximo y e1 minimo de un conjunto de valores. 172
Limpiar el buffer asociado con stdin. . . . . . . . . . . . . . . . . . . . . .. 177
Examinar una cadena de caracteres almacenada en memoria.. 178
Linea de texto y calcular su longitud. . . . . . . . . . . . . . . . . . . . . .. 179
Conversi6n de mayusculas a minusculas. . . . . . . . . . . . . . . . . . .. 181
Leer una lista de nombres. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 182
Funciones para manipular cadenas de caracteres. . . . . . . . . . . .. 185
Funci6n strtok. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 188
Funciones para clasificaci6n y conversi6n de datos. . . . . . . . . .. 196
Calcular el 070 de aprobados y suspensos. . . . . . . . . . . . . . . . . . .. 200
Biblioteca compuesta por libros y revistas. . . . . . . . . . . . . . . . . .. 204
Campos de bits : . . . . . . . . . . . . . . . . . . . . . . .. 208
Tabla de frecuencias de letras adyacentes en un texto. . . . . . . .. 211
Cambio de atributos utilizando campos de bits. . . . . . . . . . . . .. 212
Manipulaci6n de un valor float bit a bit. . . . . . . . . . . . . . . . . . .. 216
Visualizar el contenido de un bloque de memoria. . . . . . . . . . .. 224
Escribir los valores de un array. . . . . . . . . . . . . . . . . . . . . . . . . . .. 226
Funci6n "longstr" que devuelve la longitud de una cadena. .. 228
Funci6n para copiar una cadena en otra. . . . . . . . . . . . . . . . . . .. 230
Array de dos dimensiones. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 234
Funci6n que devuelve el nombre del mes 1 a 12 dado. . . . . . . .. 236
Clasificar cadenas de caracteres. . . . . . . . . . . . . . . . . . . . . . . . . . .. 237
Asignaci6n de espacio para cadenas de caracteres. . . . . . . . . . .. 241
Asignaci6n de espacio para un array de enteros. . . . . . . . . . . . .. 243
Funciones real/oc y free. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 245
Punteros a estructuras. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 247
Busqueda Secuencial..................................... 260
Programa Alumnos...................................... 262
Leer una fecha, verificarla y escribirla con formato. . . . . . . . .. 265
Paso de parametros por referencia, utilizando punteros. . . . . .. 268
Pasando arrays a funciones. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 269
Linea de texto mas larga. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 270
Pasando punteros a funciones............................. 272
Argumentos en linea de 6rdenes. . . . . . . . . . . . . . . . . . . . . . . . . .. 275
Funciones con un numero de argumentos variable. . . . . . . . . . .. 278
Calculo del factorial de un numero. . . . . . . . . . . . . . . . . . . . . . . .. 280
Fusionar dos listas clasificadas. . . . . . . . . . . . . . . . . . . . . . . . . . . .. 282
Numero de veces que aparece cada letra en una cadena. . . . . .. 284
Calendario perpetuo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 286
Punteros a funciones..................................... 290
Funci6n matherr......................................... 298
Generar un numero aleatoric cada segundo. . . . . . . . . . . . . . . .. 301
Clasificaci6n de los elementos de una lista. . . . . . . . . . . . . . . . .. 304
Busqueda de un elemento en una lista. . . . . . . . . . . . . . . . . . . . .. 307
Clasificar lexicograficamente 0 numericamente. . . . . . . . . . . . . .. 309
Enscribir datos en un fichero caracter a caracter. . . . . . . . . . . .. 327
Leer datos de un fichero caracter a caracter. . . . . . . . . . . . . . . .. 328
Contar los caracteres de un fichero. . . . . . . . . . . . . . . . . . . . . . . .. 329
Escribir y leer datos en un fichero palabra a palabra. . . . . . . .. 331
Entrada/salida de cadenas de caracteres. . . . . . . . . . . . . . . . . . . .. 333
Escribir el contenido de un fichero por la impresora. . . . . . . . .. 335
Escribir y leer datos con formato en un fichero. . . . . . . . . . . . .. 336
Escribir y leer datos en un fichero registro a registro 339
Control del buffer asociado a un fichero. . . . . . . . . . . . . . . . . . .. 342
Acceso aleatorio a un fichero. . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 350
Funci6n buscar.......................................... 353
Reproducci6n de la orden copy. . . . . . . . . . . . . . . . . . . . . . . . . . .. 364
Proceso de ficheros aleatorios con funciones de bajo nivel. . .. 367
Funciones para 1a consola. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 378
Presentaci6n de un menu......... . . . . . . . . . . . . . . . . . . . . . . .. 381
Emitir un sonido por el altavoz. . . . . . . . . . . . . . . . . . . . . . . . . . .. 387
Compilaci6n condicional. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 397
Utilizando ficheros de cabecera. . . . . . . . . . . . . . . . . . . . . . . . . . .. 403
Utilizando el preprocesador............................... 405
Medir tiempos de ejecuci6n. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 406
Funciones intrinsecas..................................... 407
Macros y Funciones. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 408
Crear objetos.............................. . . . . . . . . . . . . .. 417
Operaciones con listas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 423
Programa calculadora. Aplicaci6n de pilas. . . . . . . . . . . . . . . . .. 429
Realizaci6n de sucesos. Aplicaci6n de colas. . . . . . . . . . . . . . . .. 433
Listas circulares. Suma de ecuaciones algebraicas. . . . . . . . . . . .. 439
Lista doblemente enlazada ordenada ascendentemente. . . . . . .. 444
Funciones recursivas para recorrer un arbol. . . . . . . . . . . . . . . .. 453
Arbol binario de busqueda. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 455
Borrar un nodo cualquiera de un arbol. . . . . . . . . . . . . . . . . . . .. 459
Arbol perfectamente equilibrado......................... .. 461
Funci6n de Ackerman recursiva. . . . . . . . . . . . . . . . . . . . . . . . . . .. 467
Funci6n de Ackerman no recursiva. . . . . . . . . . . . . . . . . . . . . . . .. 468
Torres de Hanoi......................................... 472
Clasificar lineas de texto. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 474
Ordenaci6n por inserci6n................................. 478
Ordenaci6n Quicksort.................................... 481
Busqueda Binaria........................................ 486
Ordenar un fichero. Acceso secuencial. . . . . . . . . . . . . . . . . . . . .. 490
Metodo de ordenaci6n Quicksort para ficheros... . . . . . . . . . .. 495
Metodo hash abierto............................ 503
Rellenar una ventana en la pantalla con el caracter ,car. . . . . .. 512
Punteros nulos.......................................... 524
Variables y punteros basados en un segmento constante. . . . . .. 532
Punteros basados en un segmento variable. . . . . . . . . . . . . . . . .. 533
Puntero basado en otro puntero. . . . . . . . . . . . . . . . . . . . . . . . . .. 536
Puntero basado en void. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 538
Puntero basado en su propio segmento................... .. 539
Manipulaci6n de areas de memoria , , . . .. 544
Un ejemplo de trabajo con librerias. . . . . . . . . . . . . . . . . . . . . . .. 577
Fichero de descripciones. NMAKE......................... 580
Un ejemplo de trabajo con la utilidad NMAKE. . . . . . . . . . . . .. 593
Pagina activa.... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 620
Pulsar una tecla para continuar. . . . . . . . . . . . . . . . . . . . . . . . . . .. 621
Posicionar el cursor en la fila y columna indicadas. . . . . . . . . .. 627
Raiz cuadrada de un numero entero (_asm). . . . . . . . . . . . . . .. 631
Llamando a funciones C desde un bloque _asm. . . . . . . . . . .. 633
. Inicializar un array. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 634
Utilizaci6n de punteros en bloques _asm. . . . . . . . . . . . . . . . . .. 635
Trabajando con estructuras desde un bloque _asm. . . . . . . . .. 638
Utilizando etiquetas C y _asm. . . . . . . . . . . . . . . . . . . . . . . . . . .. 640
Raiz cuadrada de un numero entero. . . . . . . . . . . . . . . . . . . . . . .. 645
Leer datos del puerto serie. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 654
Llamadas al DOS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 656
Servicios de impresora. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 662
Servicios del BIOS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 666
Visualizar los ficheros .EXE de un directorio dado. . . . . . . . . .. 676
Ejecutar 6rdenes del DOS con la funci6n system. . . . . . . . . . . .. 678
Cambiando los atributos de un fichero...... . 681
Programa residente (TSR). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 693
Funci6n atexit........................................... 703
Manipulaci6n de errores en coma flotante. . . . . . . . . . . . . . . . . .. 705
Manipulaci6n de senales de interrupci6n. . . . . . . . . . . . . . . . . . .. 710
Utilizaci6n de la funci6n exec. . . . . . . . . . . . . . . . . . . . . . . . . . . .. 714
Utilizaci6n de la funci6n spawn. . . . . . . . . . . . . . . . . . . . . . . . . . .. 718
Estructura de un programa gnifico. . . . . . . . . . . . . . . . . . . . . . . .. 727
Modos de video disponibles en tu ordenador. . . . . . . . . . . . . . .. 731
Color de fondo y color del texto. . . . . . . . . . . . . . . . . . . . . . . . . .. 735
Color de fondo y de primer plano. . . . . . . . . . . . . . . . . . . . . . . .. 737
Sistema de coordenadas 16gicas.. . . . . . . . . . . . . . . . . . . . . . . . . .. 740
Alternar entre paginas de video. . . . . . . . . . . . . . . . . . . . . . . . . . .. 745
Portada para Microsoft C. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 756
Colorear figuras......................................... 759
Ventanas de texto..................... . . . . . . . . . . . . . . . . . .. 763
Funciones para animaci6n de figuras. . ...•.. 767
Animaci6n - pe10ta rodando. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 769
Choque de una pelota contra una barrera. . . . . . . . . . . . . . . . . .. 770
Bola de billar........................................... (72
Representaci6n de la funci6n radio = cos(2 * alfa). . . . . . . . . .. 776
Representaci6n de la funci6n Y=2*cos(X)A2-sin(5+X). . . . . . .. 777
Representaci6n grafica utilizando tres ventanas. . . . . . . . . . . . .. 780
Presentaciones graficas - diagramas de barras y sectores. . . . .. 789
Presentaciones graficas multiples.............. 791
Presentaciones graficas por puntos......................... 794
Demostraci6n de tipos de letras. . . . . . . . . . . . . . . . . . . . . . . . . . .. 800
Este es un libro que pretende cubrir dos objetivos: ser un manual para
aprender C y ser una guia para el usuario de C.
La forma en la que se ha estructurado ellibro ha sido precisamente,
pensando en ese primer objetivo. El libro se ha dividido en veinticuatro
capitulos que van presentando ellenguaje poco a poco, empezando por
10 mas sencillo, presentando cada tema a su tiempo, hasta llegar al final
donde se habra visto todo 10 referente a la programacion en C y utilidades,
sin apenas encontrar dificultades.
El segundo objetivo queda conseguido al incluir en este libro todo 10
que un usuario quiere saber respecto a C, esto es, explicacion y desarrollo
de todas las sentencias, estructuras, punteros, funciones, ficheros y direc-
trices para compilador. Se completa el estudio de C con un capitulo refe-
rente a estructuras dinamicas y otro de algoritmos de uso comun. Final-
mente se estudian tecnicas avanzadas que abordan la materia referente a
manejo de la memoria, compilacion yenlace, librerias, rutinas en lenguaje
ensamblador, utilidades como el depurador de C, servicios del DOS y del
BIOS, grcificos y una explicacion para el manejo del entorno de programa-
cion del paquete de Microsoft C.
Microsoft eversion 6, producto desarrollado por Microsoft, es un com-
pilador C desarrollado para los ordenadores personales IBM y compati-
1. Introducci6n al lenguaje C
2. Elementos del lenguaje C
3. Comenzando con ellenguaje C
4. Sentencias de control
5. Tipos estructurados de datos
6. Punteros
7. Funciones
8. Funciones estandar de E/S
9. Funciones de E/S de bajo nivel
10. Funciones para la consola y puertos de entrada salida
11. El preprocesador de C
12. Estructuras dinamicas de datos
13. Algoritmos recursivos, de ordenaci6n y de busqueda
14. Manejo de la memoria
15. Compilar y enlazar
16. Librerias y utilidades del compilador
17. Rutinas en lenguaje ensamblador
18. Comunicaciones. Servicios del DOS y del BIOS
19. C y DOS
20. Control de procesos
21. Grcificos con C
22. Representaciones grcificas
23. Utilizaci6n del PWB
24. Instalaci6n de Microsoft C
A. Ficheros .h de C
B. C6digos de caracteres (ASCII)
C. Indice alfabetico
bles IBM. Este compilador ademas de correr bajo MSDOS y OS/2, inclu-
ye tambien soporte para Microsoft Windows.
Este libro posee varias caracteristicas dignas de resaltar. Es breve en
teoria y abundante en ejemplos, 10 que Ie hara aun mas facil: el aprendiza-
je para aquellas personas que quieren iniciarse en el tema, 0 la busqueda
y compresi6n de un tema puntual para aquellas otras personas entendidas
en programaci6n C. La metodologia utilizada en el desarrollo de los pro-
gramas es la descomposici6n arriba-abajo (top down). Es un libro facil de
entender.
La materia total que compone la Enciclopedia dellenguaje C, se ha
dividido en los siguientes capitulos y apendices:
Todo esto se ha documentado con alrededor de 175PROBLEMAS RE-
SUELTOS, utilizando la programaci6n estructurada, muchos de ellos vali-
dos como parte integrante en el desarrollo de aplicaciones.
He recibido ayuda de algunas personas durante la preparaci6n de este
libro, y por ello estoy francamente agradecido. En especial quiero expresar
mi agradecimiento a la firma Microsoft, por la ayuda material que me ha
prestado.
PARTE
1
Programaci6n con el Lenguaje C
• Introducci6n al Lenguaje C
• Elementos del Lenguaje C
• Comenzando con el Lenguaje C
• Sentencias de Control
• Tipos Estructurados de Datos
• Punteros
• Funciones
EI C es un lenguaje de programaci6n de prop6sito general. Sus principales
caracteristicas son:
- Programaci6n estructurada.
- Economia en las expresiones.
- Abundancia en operadores y tipos de datos.
Codificaci6n en alto y bajo nivel simultaneamente.
Reemplaza ventajosamente la programaci6n en ensamblador.
Utilizaci6n natural de las funciones primitivas del sistema.
No esta orientado a ningun area en especial.
Producci6n de c6digo objeto altamente optimizado.
- Facilidad de aprendizaje.
Ellenguaje C naci6 en los Laboratorios Bell de AT&Ty ha sido estre-
chamente asociado con el sistema operativo UNIX, ya que su desarrollo
se realiz6 en este sistema y debido a que tanto UNIX como el propio com-
pilador C y la casi totalidad de los programas y herramientas de UNIX,
fueron escritos en C. Su eficiencia y claridad han hecho que el lenguaje
ensamblador apenas haya sido utilizado en UNIX.
Este lenguaje esta inspirado en ellenguaje B escrito por Ken Thomp-
son en 1970con intenci6n de recodificar el UNIX, que en la fase de arran-
que estaba escrito en ensamblador, en vistas a su transportabilidad a otras
maquinas. B era un lenguaje evolucionado e independiente de la maquina,
inspirado en ellenguaje BCPL concebido por Martin Richard en 1967.
En 1972,Dennis Ritchie, toma el relevoy modifica ellenguaje B, crean-
do ellenguaje C y reescribiendo el UNIX en dicho lenguaje. La novedad
que proporcion6 ellenguaje C sobre el B fue el disefio de tipos y estructu-
ras de datos.
Los tipos basicos de datos eran char (caracter), int (entero),jloat (reales
en simple precisi6n) y double (reales en doble precisi6n). Posteriormente
se afiadieron los tipos short (enteros de longitud ~ longitud de un int),
long (enteros de longitud ~ longitud de un int), unsigned (enteros sin sig-
no) y enumeraciones. Los tipos estructurados basicos de C son las estruc-
turas, las uniones y los arrays. Estos permiten la definici6n y declaraci6n
de tipos derivados de mayor complejidad.
Las instrucciones de control de flujo de C son las habituales de la pro-
gramaci6n estructurada: if, for, while, switch-case, todas incluidas en su
predecesor BCPL.
C incluye tambien punteros y funciones. Los argumentos de las fun-
ciones se pasan por valor, esto es copiando su valor, 10 cual hace que no
se modifiquen los valores de los argumentos en la Hamada. Cuando se de-
sea modificar los argumentos en la Hamada, estos se pasan por referencia,
es decir, se pasan las direcciones de los argumentos. Por otra parte, cual-
quier funci6n puede ser Hamada recursivamente.
Una de las peculiaridades de C es su riqueza de operadores. Puede
decirse que practicamente dispone de un operador para cada una de las
posibles operaciones en c6digo maquina.
Hay toda una serie de operaciones que pueden hacerse con ellenguaje
C, que realmente no estan incluidas en el compilador propiamente dicho,
sino que las realiza un preprocesador justa antes de cada compilaci6n. Las
dos mas importantes son # define (directriz de sustituci6n simb6lica 0 de
definici6n) e # include (directriz de inclusi6n en e1 fichero fuente).
Finalmente, C, que ha sido pensado para ser altamente transportable
y para programar 10improgramable, igual que otros lenguajes tiene sus in-
convenientes. Carece de instrucciones de entrada/salida, de instrucciones
para manejo de cadenas de caracteres, con 10 que este trabajo queda para
la libreria de rutinas, con la consiguiente perdida de transportabilidad. La
excesivalibertad en la escritura de los programas puede llevar a errores en
la programaci6n que, por ser correctos sintacticamente no se detectan a
simple vista. Por otra parte las precedencias de los operadores convierten
a veces las expresiones en pequenos rompecabezas. A pesar de todo, C ha
demostrado ser un lenguaje extremadamente eficaz y expresivo.
Este lenguaje ha evolucionado paralelamente a UNIX, que a su vez
ha pasado por diversas versiones entre las que destaca la de Microsoft con
su XENIX para micros de 16 bits.
En este apartado se van a exponer los pasos a seguir en la realizaci6n de
un programa, por medio de un ejemplo. La siguiente figura, representa es-
tos pasos en el orden en el que hay que ejecutarlos.
El ejemplo de la figura indica que una vez editados los ficheros fuente
a.c y b.c, son compilados obteniendose los ficheros objeto a.obj y b.obj los
cuales son enlazados con el fichero c.obj, con la libreria d.lib y con las li-
brerias del sistema .lib dando lugar a un unico fichero ejecutable a.exe.
La orden correspondiente para compilar y enlazar los ficheros expuestos
en este ejemplo, es la siguiente:
Para ejecutar el fichero a.exe resultante, escribir el nombre de dicho
fichero (a), y pulsar Enter.
C
0
E a.c M a.obj
D P
I I
T
L
0
A
D
R b.c 0 b.obj
R
E
N
L
c.obj A a.exe
Z
A
D
0
d.lib R
Para editar un programa, primeramente llamaremos, para su ejecucion, al
programa editor 0 procesador de textos que vayamos a utilizar. Podemos
utilizar el procesador de textos suministrado con el compilador 0 nuestro
propio procesador (ver capitulo 23). El nombre del fichero para salvar el
programa en el disco, debe tener como extension .c.
El paso siguiente, es escribir el texto correspondiente al program a fuen-
te. Cada sentencia dellenguaje C finaliza con un punto y coma y cada li-
nea del programa la finalizamos pulsando la tecla Enter.
Como ejercicio para practicar 10 hasta ahora expuesto, escribir el si-
guiente ejemplo:
CAPITULO I: INTRODUCCION AL LENGUAJE C 43
# include <stdio.h >
# include <stdlib.h>
main( )
(
char *mensajel
char *mensaje2
char nombre[50];
HBienvenido a C':·
HTe alegrard el haberme conocido";
system(Hcls");
printft';,Cudl es tu nombre? ");
gets(nombre);
printj("n%s %sn%sn': mensajel, nombre, mensaje2);
J
Comentamos brevemente cada linea de este programa. No apurarse si al-
gunos de los terminos no quedan muy claros ya que todo ellos se venin
con detalle en capitulos posteriores.
Las dos primeras lineas incluyen las declaraciones necesarias para las
funciones que aparecen en el programa. Estas funciones son: system( ),
printf( ) y gets( ).
A continuaci6n se escribe la funci6n principal main( ). Las dos pri-
meras Hneas de esta, definen las cadenas de caracteres mensajel y mensaje2
y la siguiente linea define la cadena de caracteres nombre para contener
49 caracteres mas el caracter de "fin de cadena" que aftade C automati-
camente.
La funci6n printj( ) escribe el contenido de las variables especificadas
en la misma.
La funci6n gets( ) permite introducir datos a traves del teclado para
la variable especificada, en este caso nombre.
El programa editado esta ahora en la memoria. Para que este trabajo pue-
da tener contir.uidad, el programa escrito se debe grabar en el disco utili-
zando la orden correspondiente del editor.
El siguiente paso es compilar el programa, esto es, traducir el programa
fuente a lenguaje maquina para posteriormente enlazarlo con las librerias
de C y obtener as! un programa ejecutable. Estas operaciones, compilar
y enlazar, se efectuan mediante la orden c/.
Al compilar un programa, se nos pueden presentar errores de compi-
lacion, debidos a que el programa escrito no se adapta a la sintaxis y reglas
del compilador. Estos errores se iran corrigiendo hasta obtener una com-
pilacion sin errores.
Cada vez que se realiza el proceso de compilacion y enlace del programa
actual, C genera automaticamente sobre el disco un fichero con extension
.exe. Este fichero puede ser ejecutado directamente desde el DOS, sin el
soporte de C, escribiendo el nombre del fichero .exe despues del prompt
del DOS y pulsando Enter a continuacion.
Cuando se crea un fichero ejecutable, C utiliza primero el compilador
para compilar el programa fuente, dando lugar a un fichero intermedio co-
nocido como fichero objeto (.obj). A continuacion C utiliza el programa
Iink.exe para unir, en un unico fichero ejecutable, el modulo 0 los modulos
del programa compilados separadamente y las rutinas de las librerias del
compilador C que el programa necesite.
Al ejecutar el programa, pueden ocurrir errores durante la ejecucion.
Por ejemplo, puede darse una division par cero. Estos errores solamente
pueden ser detectados por C cuando se ejecuta el programa y senin notifi-
cados con el correspondiente mensaje de error.
Hay otro tipo de errores que no dan lugar a mensaje alguno. Por ejem-
plo: un programa que no termine nunca de ejecutarse, debido a que pre-
senta un lazo, donde no se llega a dar la condicion de terminacion. Para
detener la ejecucion se tienen que pulsar las teclas Ctrl +C.
Un programa una vez ejecutado puede dar lugar a una solucion incorrec-
ta. Este caso exige un analisis minucioso de como se desarrolla el progra-
ma en su ejecucion; esto es, hay que entrar en la fase de depuracion del
programa.
La forma mas sencilla y eficaz para realizar este proceso, es utilizar
un programa depurador. En el capitulo 16, se explica como utilizar el de-
purador Code View de Microsoft.
Vamos a preparar un programa formado par un solo modulo fuente, para
depurarlo. El primer paso sera editar el programa. Como ejemplo escribit
el siguiente programa, e1cual, imprime el valor y su cuadrado, de cada uno
de los elementos de una matriz numerica de 5 filas y 3 columnas, y cuenta
e imprime el numero de elementos que son pares.
#include <stdio.h>
#define FILAS 5
#define COLS 3
void display( iot n )
[
iot cuadrado;
cuadrado = n *n;
printj("el cuadrado de %2d es %3d n': n, cuadrado);
J
iot numero_par( iot x )
[
if (x % 2 = = 0)
retu rn (1);
else
return (0);
main( )
[
static iot a[FILAS][COLS] =
[1,2,3,4,5,6, 7,8,9,10,11,12,13,14,15 j;
iot fila, columna;
for (fila = 0; fila < FILAS; fila + +)
for (columna = 0; columna < COLS; columna + +)
[
display( aUila][columna] );
if ( numero~ar(aUila][columna]) )
numeros~ares+ +;
J
printj(" n  nTotal numeros pares: %d n': numeros_pares);
j
Una vez editado salvamos el programa en el disco. Llamemosle por
ejemplo progOl02.c.
Fijandonos en la funci6n principal, main(), vemos que definimos una ma-
triz cuadrada cca': para a continuaci6n recorrerla elemento a elemento por
filas.
Esta funci6n principal llama a la funci6n display( ) que escribe el va-
lor del elemento objeto de analisis y su cuadrado, y llama tambien a la fun-
cion numero_par( ) que indica si el numero es 0 no par. En el caso de
que sea par incrementamos en una unidad el contador numeros_pares.
Una vez que se han analizado todos los elementos de la matriz, se es-
cribe el numero de valores pares encontrados.
Como siguiente paso, compilaremos el programa con las opciones IZi
y IOd.
La opcion IZi hace que se incluya en el fichero ejecutable resultante,
informacion necesaria para realizar la depuracion y la opcion IOd impide
la optimizacion, la cual puede dificultar la depuracion.
Cuando finaliza el proceso de compilacion y enlace, invocamos al depura-
dor (debug).
Las operaciones minimas que debe incluir un depurador son las si-
guientes:
Permite ver la sentencia del programa que es ejecutada. Code View
incluye las siguientes opciones:
Ejecutar una sentencia cada vez, incluidas funciones definidas
por el usuario. Esta modalidad se activa y se continua, pulsan-
do la tecla F8. Si no queremos que las funciones se ejecuten sen-
tencia a sentencia pero sf la funci6n principal main( ), utilizar
la tecla FIO.
Si pulsamos la tecla F5, la ejecuci6n continua hasta el final del
programa 0 hasta el primer punto de parada, si este existe.
Un punto de parada es una pausa que se hace en un lugar determi-
nado dentro del programa. Esto permite testear los valores de las
variables en ese instante. Colocar los puntos de parada donde se sos-
peche que esta el error.
Para poner 0 quitar una pausa, se coloca el cursor en ellugar don-
de va a tener lugar la pausa y se pulsa F9.
Las expresiones de seguimiento permiten observar los valores, de las
variables 0 de expresiones del programa, mientras este se ejecuta (6r-
denes Add Watch, Delete Watcha, ... ).
Ejecutar la orden Add Watch ... y escribir en el recuadro corres-
pondiente, fila. Realizar la misma operaci6n para incluir en la
ventana de seguimiento columna y aUilaJ[columnaj.
Continuar la ejecuci6n pulsando F8 0 FIO. Si se pulsa la tecla
F5, la ejecuci6n del programa continua hasta el final del pro-
grama 0 hasta un punto de parada si se encuentra.
El nombre de un fichero consta de dos partes: el nombre base que puede
tener hasta ocho caracteres y la extension que puede tener hasta tres carac-
teres y va separada del nombre base por un punto. C identifica las siguien-
tes extensiones con los ficheros que a continuaci6n se indican:
.obj fichero resultante de la compilaci6n de un fichero fuente.
No es ejecutable .
.mak fichero que contiene una lista de m6dulos y las acciones
que con ellos debe hacerse para construir el programa final.
Cuando se especifica el nombre de un fichero sin extensi6n, C asume
por defecto la extensi6n .obj.
Las palabras clave aparecenln en negra y deben escribirse exactamente como
aparecen.
EI texto que no aparece en negra, significa que ahi debe ponerse la
informacion indicada por ese texto.
Los puntos suspensivos "..." indican que pueden aparecer mas elementos
de la misma forma.
Cuando dos 0 mas opciones aparecen entre Haves "{ ]" separadas por
"I", se elige una, la necesaria dentro de la sentencia.
Estos caracteres son utilizados para formar las constantes, los identi-
ficadores y las palabras clave de C.
El compilador C trata las letras mayusculas y minusculas como carac-
teres diferentes. Por ejemplo los identificadores Pi y PI son diferentes.
Espacio en blanco, tabulador horizontal (HT), tabulador vertical (VT), avan-
ce de pagina (FF), y nueva linea (LF 0 CR + LF) son caracteres denomina-
dos espacios en blanco, porque la labor que desempefian es la misma que
la del espacio en blanco, esto es, actuar como separadores entre los ele-
mentos de un programa. Los espacios en blanco en exceso son ignorados
por el compilador, 10 cual nos permite escribir programas mas legibles.
EI caracler Ctr! +Z bajo DOS, (equivalente a Ctrl +0 bajo UNIX) es
tratado POl' el compiIador como un indicador de fin de fichero (End Of File).
Los caracteres tambien pueden ser representados por secuencias de escape.
Una secuencia de escape esta formada por el caracter  seguido de una
letra 0 de una combinaci6n de digitos. Son utilizadas para acciones como
nueva linea, tabular y para representar caracteres no imprimibles.
n
t
v
b
r
f
a
 '
Nueva linea
Tab horizontal
Tab vertical (s610 para impresora)
Backspace (retroceso)
Retorno de carro
Alimentaci6n de pagina (s610 para impresora)
Bell (alerta, pitido)
Comilla simple
Comilla doble
Backslash (barra invertida)
Canicter ASCII. Representaci6n octal
Caracter ASCII. Representaci6n hexadecimal

ddd
xdd
Hay varios tipos fundamentales de datos. Los ficheros de cabecera Iimits.h
y f1oat.h especifican los valores maximo y minima para cad a tipo. Los po-
demos clasificar en:
Tipos enteros: char, short, int, long y enum.
Tipos reales: float, double y long double.
Otros: void.
Cada tipo entero puede ser calificado por las palabras clave signed 0
unsigned, 10 que da lugar a tener disponibles los siguientes tipos extras:
signed char, unsigned char
signed short, unsigned short
signed int, unsigned int
signed long, unsigned long
Un entero calificado signed es un entero con signo, esto es, un ntlme-
ro entero positivo 0 negativo. Un numero entero calificado unsigned es un
numero entero sin signo, el cual es manipulado como un numero entero
positivo.
Si los calificadores signed y unsigned se utilizan sin un tipo especffi-
co, se asume el tipo into Por este motivo, las siguientes declaraciones son
equivalentes:
signed x;
signed int X;
unsigned y;
unsigned int y;
El tipo char es utilizado para almacenar un valor entero en el rango -128
a 127, correspondiente a un caracter del c6digo ASCII. Solamente los va-
lores 0 a 127 son equivalentes a un caracter.
De forma similar el tipo unsigned char puede almacenar valores en
el rango de 0 a 255, valores correspondientes a los numeros ordinales de
10s 256 caracteres ASCII.
Este ejemplo declara una variable car de tipo char, capaz de contener
un canicter cuyo c6digo ASCII se correspondeni con un valor entero entre
o y 127. Otros ejemplos son:
char a = 'z';
signed char b = Ox07;
unsigned char c = 32;
De forma similar el tipo unsigned short puede almacenar valores en
el rango de 0 a 65535 (0 a 2EI6-1).
Este ejemplo declara i y j, como variables enteras con posibilidad de
tDmar vaDres entre -'3216'il y '1'2161. Otros ejempos son:
short int a = -500;
signed short b = 1990;
unsigned short int c = OxfOOO;
Un entero es para C un numero sin punta decimal. El rango de valores de-
pende de la maquina. Igualmente ocurre con el tipo unsigned into Para una
maquina con un procesador de 16 bits el rango de valores es de:
-32768 a 32767 (-2EI5 a 2EI5-1) para el tipo into
o a 65535 ( 0 a 2EI6-1) para el tipo unsigmld.
El uso de enteros produce un c6digo compacta y rapido. Para una ma-
quina de 16 bits este tipo es equivalente al tipo short y solamente oc4pa
2 bytes de memoria. En general:
Este ejemplo declara las variables n y x de tipo entero. Otros ejemplos
son:
int a = 2000;
signed int b = -30;
unsigned int c = Oxf003;
Este tipo de numeros es id6neo para aplicaciones de gesti6n. Al igual que
los enteros, son numeros sin punta decimal comprendidos en el rango de:
-2147483648 a 2147483647 (-2E31 a 2E31-1) para el tipo long.
o a 4294967295 (0 a 2E32-1) para el tipo unsigned long.
Este ejemplo declara las variables n y m de tipo entero, pudiendo to-
mar valores entre -2147483648 y 2147483647. Otros ejemplos son:
long a = -IL;
signed long b = 125;
unsigned long int c = Oxlj00230j;
La declaraci6n de un tipo enumerado es simplemente una lista de valores
que pueden ser tornados por una variable de ese tipo. Los valores del tipo
enumerado se representanin con identificadores, que senin las constantes
del nuevo tipo.
tunes,
martes,
miercotes,
jueves,
viernes,
sabado,
domingo
hoy;
Este ejemplo declara las variables hoy y ayer del tipo enumerado
dia----semana. Estas variables pueden tomar cualquier valor de los especi-
ficados, lunes ... domingo. El valor ordinal de lunes es O. Los elementos
que aparecen enumerados en la lista son considerados como constantes
enteras.
Crear una enumeraci6n es definir un nuevo tipo de datos, denominado tipo
enumerado y declarar una variable de este tipo. La sintaxis es la siguiente:
enum tipo_enumerado
!
Despues de definir un tipo enumerado, podemos declarar una 0 m,b
variables de ese tipo, de la forma:
};
enum colores color;
Este ejemplo declara una variable color del tipo enumerado colores,
la cual puede tomar cualquier valor de los especificados en la lista.
Cada identificador, de la lista de constantes enteras en una enumera-
ci6n, tiene asociado un valor. Por defecto, el primer identificador tiene aso-
ciado el valor 0, el siguiente el valor 1, y as! sucesivamente.
A cualquier identificador de la lista, se Ie puede asignar un valor ini-
cial por medio de una expresi6n con stante. Los identificadores sucesivos
tomanln valores correlativos a partir de este.
azul, amarillo, raja, verde
color;
Este ejemplo define un tipo enumerado Hamado colores y declara una
variable color de ese tipo. Los valores asociados a los identificadores son
los siguientes: azul = 0, amarillo =1, raja =2, verde = 0, blanco = 1
Y negro = 2.
3. Desafortunadamente, no es posible leer 0 escribir directamente un
valor de un tipo enumerado.
Estos numeros son los mas recurridos en un lenguaje de programaci6n. Un
real en simple precision es un numero que puede tener un punta decimal
y que puede estar comprendido en el rango de:
-3.402823E + 38 a -1.175494E-38 para numeros negativos
1.175494E-38 a 3.402823E+38 para numeros positivos
Un numero real en simple precision no tiene mas de 7 digitos signifi-
cativos.
Este ejemplo declara la variable x de tipo real en simple precision. Otros
ejemplos son:
float a = 3.14159;
float b = 2.2e-5;
Un numero real en doble precision es un numero que puede tener un punta
decimal y puede estar comprendido en el range de:
-1.79769E+308 a -2.22507E-308 para numeros negativos
2.22507E-308 a 1.79769E+308 para numeros positivos
Un numero real en doble precision tiene hasta 16 digitos significati-
vos. Esto da lugar a calculos mas exactos que en simple precision.
Este ejemplo declara la variable x de tipo real en doble precision. Otro~
ejemplos son:
double a = 3.1415926;
double b = 2.2e-8;
-1.189731£+4932 a -3.362103E-4932 para numeros negativos
3362103E-4932 a 1.189731£+4932 para numeros positivos
Un numero real en doble precision formato largo no tiene mas de 19
digitos significativos. Esto da lugar a calculos mas precisos que en doblc
precision.
long double X;
long double y = 3.17e+425;
El tipo void se utiliza para dec1arar funciones que no retornan un valor
o para dec1arar un puntero a un tipo no especificado. Si void aparece entre
parentesis a continuacion del nombre de una funcion, no es interpretado
como un tipo. En este caso indica que la funcion no acepta argumentos.
double jx(void);
void jy(void);
void *P;
Este ejemplo dec1ara la funcion denominada jx, como una funcion
sin argumentos que devue1ve un valor de tipo real de doble precision; la
funcionjy, como una fundon sin argumentos que no devuelve valor algu-
no; y un puntero P a un objeto de un tipo no espedficado.
Los tipos derivados son construidos a partir de los tipos fundamentales.
Algunos de ellos son los siguientes:
Un puntero es una direcci6n de memoria que indica d6nde se localiza un
objeto de un tipo especificado. Para definir una variable de tipo puntero
se utiliza el operador de indirecci6n *.
int *p,'
char *plineas[40j,'
Este ejemplo declara un puntero p a un valor entero; y un array de
punteros plineas (plineas[Oj a plineas[39J) a valores de tipo char.
Una estructura es una variable que representa 10 que normalmente cono-
cemos como registro, esto es, un conjunto de uno 0 mas campos de igual
o diferentes tipos.
float a, b;
complejo;
struct persona
{
char nombre[20j;
char apellidos[40j;
long dni;
Este ejemplo declara las variables complejo y reg, como estructuras
o registros. La variable complejo comprende los campos a y b de tipo real;
y la variable reg comprende los campos nombre y ape/lidos que son cade-
nas de caracteres y el campo dni de tipo long.
Una union tiene la misma forma de definici6n que una estructura. Las unio-
nes, a diferencia de las estructuras, representan registros variables. Esto cjuiert:
decir que una variable de este tipo, puede alternar entre varios tip os.
Un array es un conjunto de objetos, todos del mismo tipo, que ocupan po-
siciones sucesivas en memoria. Para definir un array se utiliza el operador
[ ] despues del nombre del array.
Este ejemplo declara un array !ista de 40 elementos (!ista[O]a !ista[39J)
para almacenar valores enteros.
Una funci6n es un subprograma C, el cual toma argumentos de unos tipos
dados y retorna un valor de un tipo especificado. Para declarar una fun-
ci6n se utiliza el operador ( ) despues del nombre de la funci6n.
Permite declarar nuevos nombres de tipos de datos; esto es, sin6nimos de
otms tipos ya sean fundamentales 0 derivados, los cuales pueden ser utili-
zados mas tarde para declarar variables de esos tipos.
typedef int ENTERO;
typedef int (*PFlj( );
typedef struct persona REG;
Este ejemplo propone el tipo ENTERO como sin6nimo de int; el tipo
PFI como un puntero a una funci6n que devuelve un valor entero; y el tipo
REG como sin6nimo de struct persona.
ENTERO n;
PFI p;
REG per;
declaran n como una variable de tipo entero, p como un puntero a una
funci6n que devuelve un valor entero y per como una estructura 0 registro
de tipo persona.
Las declaraciones typedej permiten parametrizar un programa para
evitar problemas de portabilidad. Utilizando typedej con los tipos que pue-
den depender de la instalaci6n, cuando se lleve el programa a otra instala-
ci6n s610 se tendnin que cambiar estas declaraciones.
Una constante es un valor que, una vez fijado por el compilador, no cam-
bia durante la ejecuci6n del programa. Una constante en C puede ser un
mimero, un canicter 0 una cadena de caracteres.
En general, si la constante es positiva, el signa + es opcional y si es
negativa, lleva el signo -. El tipo de una constante entera viene determina-
do por su valor. Tambien se puede indicar explicitamente el tipo de una
constante entera, afiadiendo los sufijos L, U, 0 UL (mayusculas 0 minus-
culas). Si el sufijo es L, su tipo es long cuando el valor puede ser represen-
tado en este tipo, si no es unsigned long. Si el sufijo es U, su tipo es unsig-
ned int cuando el valor puede ser representado en este tipo, si no es unsigned
long. Si el sufijo es UL, su tipo es unsigned long.
1522U
1000L
325UL
constante entera de tipo unsigned int
constante entera de tipo long
constante entera de tipo unsigned long
Una constante decimal puede tener uno 0 mas digitos, 0 a 9, de los
cuales el primera de ellos es distinto de cero.
4326
432600
constante entera de tipo int
constante entera de tipo long
Una constante octal puede tener lomas digitos, 0 a 7, precedidos por
o (cera). Su valor esta comprendido en el rango:
Oa077777
0100000 a 0177777
0200000 a 017777777777
020000000000 a 037777777777
para constantes tipo int
para constantes tipo unsigned int
para constantes tipo long
para constantes tipo unsigned long
Una constante hexadecimal puede tener lomas caracteres, 0 a 9 y
A a F, precedidos por Ox 0 OX (cero mas x). Su valor esta comprendido
en el rango:
OxOa Ox7FFF
Ox8000 a OxFFFF
OxlOOOOa Ox7FFFFFFF
Ox80000000 a OxFFFFFFFF
para constantes tipo int
para constantes tipo unsigned int
para constantes tipo long
para constantes tipo unsigned long
256
0400
OxJOO
-0400
-OxJOO
especifica el nO 256 en decimal
especifica el n° 256 en octal
especifica el nO 256 en hexadecimal
especifica el nO -256 en octal
especifica el nO -256 en hexadecimal
Una constante real esta formada por una parte entera, seguida por un punto
decimal, y una parte fraccionaria. Tambien se permite la notaci6n cientffi-
ca, en cuyo caso se afiade al valor una e 0 E, seguida por un exponente
positivo 0 negativo.
donde dfgitos representa cero 0 mas digitos del 0 al 9 y E 0 e es el simbolo
de exponente de la base 10 que puede ser positivo 0 negativo (2E-5 =
2 x J(f5). Si la constante real es positiva no es necesario especificar el sig-
no y si es negativa lleva el signa menos (-).
-17.24
17.244283
.008e3
27E-3
Una constante real tiene siempre tipo double, a no ser que se afiada
a la misma una f 0 F, en cuyo caso sera de tipo float, 0 una I 0 L para
indicar que es de tipo long double.
Este tipo de constantes esta formado por un unico caracter encerrado en-
tre comillas simples. Una secuencia de escape es considerada como un uni-
co canicter.
espacio en blanco
letra minuscula x
nueva linea
canicter ASCII Ese
' n'
,  x1B'
Una constante de caracteres es una cadena de caracteres encerrados entre
comillas dobles.
"Esto es una eonstante de earaeteres"
"3.1415926 "
"Paseo Pereda 10, Santander"
En el ejemplo siguiente el car<icter  n fuerza a que la cadena "0 pul-
sar Enter" se escriba en una nueva linea.
Cuando una cadena de caracteres es demasiado larga puede utilizarse
el canicter "  " como canicter de continuaci6n.
HEsta cadena de caracteres es dema 
siado larga."
Dos 0 mas cadenas separadas por un espacio en blanco sedan conca-
tenadas en una sola cadena.
printf(HPrimera cadena,"
H segunda cadena ");
Los caracteres de una cadena de caracteres son almacenados en locali-
zaciones sucesivasde memoria. Cada cadena de caracteres es finalizada auto-
m<iticamente por el caracter nulo representado por la secuencia de escape
 o.
El tipo de una cadena de caracteres es el tipo array donde cada ele-
mento es de tipo char (char [ J) y la clase de almacenamiento es static. El
numero de elementos de un array, necesarios para almacenar una cadena
de caracteres, es igual al numero de caracteres de la cadena, mas uno para
el caracter nulo de terminaci6n.
Los identificadores son nombres dados a constantes, variables, tipos, fun-
ciones y etiquetas de un programa. La sintaxis para formar un identifica-
dor es la siguiente:
10 cual indica que un identificador consta de uno 0 mas caracteres (letras,
digitos y el caracter de subrayado) y que el primer canicter debe ser una
tetra 0 el cardcter de subrayado.
Las letras pueden ser mayusculas 0 minusculas y se consideran como
caracteres diferentes; esto es, los identificadores Suma, suma y SUMA son
diferentes.
Los identificadores pueden tener cualquier numero de caracteres pero
solamente los 31 caracteres primeros, son significativos. Esto quiere decir
que un identificador es distinto de otro cuando difieren al menos en uno
de los 31 primeros caracteres.
suma
Catcuto~umeros~rimos
_ordenar
ab123
Las palabras clave son identificadores predefinidos que tienen un signifi-
cado especial para el compilador C. Un identificador definido por el usua-
rio, no puede tener el mismo nombre que una palabra clave.
auto
break
case
char
const
continue
default
do
double
else
enum
extern
float
for
goto
if
int
long
register
return
short
signed
sizeof
static
struct
switch
typedef
union
unsigned
void
volatile
while
Ademas de las palabras clave anteriores, el compilador C de Micro-
soft tiene tambi(~n las siguientes:
_asm
_based
_cdecl
_emit
_export
~ar
~astcall
~ortran
----huge
~nterrupt
~oadds
_near
_pascal
-3averegs
_segment
-3egname
-3elf
Un comentario es una secuencia de caracteres utilizada para explicar el co-
digo fuente. Microsoft C soporta comentarios estilo C y estilo C++.
Un comentario estilo C es una secuencia de caracteres cualesquiera en-
cerrados entre los simbolos 1* y *1. Estos comentarios pueden ocupar mas
de una linea, pero no pueden anidarse. Por ejemplo:
1* Este es un comentario
* que ocupa varias
* !ineas.
*1
Un comentario estilo C+ + comienza con los caracteres II y termina
al final de la linea. Estos comentarios no pueden ocupar mas de una linea.
Por ejemplo:
Un comentario puede aparecer en cualquier lugar donde se permita
aparecer un espacio en blanco. El compilador trata un comentario como
a un espacio en blanco.
El valor de una variable, a diferencia de las constantes, puede cambiar a
10 largo de la ejecucion de un programa.
La sintaxis correspondiente a la declaraci6n de una variable es la si-
guiente:
c1ase representa una de las cuatro clases siguientes: auto, register, sta-
tic, 0 extern. La clase de una variable determina si esta tiene ca-
racter global (static 0 extern) 0 local (auto 0 register).
Una variable declarada fuera de todo bloque (conjunto de sentencias
encerradas entre ( }) es, por defecto, global y es accesible en el resto del
archivo fuente en el que esta declarada. Por el contrario, una variable de-
clarada dentro de un bloque, es por defecto local y es accesible solamente
dentro de este.
Cada variable de un programa, debe declararse antes de ser utilizada.
La declaraci6n consiste en enunciar el nombre de la variable y asociarle
un tipo. El tipo determina los valores que puede tomar la variable asi como
las operaciones que con ella pueden realizarse.
iot suma, incremento;
char car, linea/80];
char car = ( 0'; / * car igual al cardcter nulo */
iot c = 1; / * inicializar c a 1*/
Ala declaraci6n de un objeto, se puede anteponer el calificador eonst, con
el fin de hacer que dicho objeto sea, en lugar de una variable, una constante.
const int k = 12;
const int v[ j = [1, 2, 3, 4j;
A un objeto declarado como una constante no se Ie puede asignar un
valor. Por ello, al declararlo debe ser inicializado. Si k ha sido declarado
como constante, las siguientes sentencias darian lugar a un error:
k = 100;
k+ +;
/ * error */
/ * error */
Una declaraci6n de un puntero precedida por eonst, hace que el obje-
to apuntado sea una constante, no sucediendo 10 mismo con el puntero.
const char *pe = "abed";
pe[Oj = 'z'; / * error */
pe = "efg"; / * eorreeto */
Si 10 que se pretende es declarar un puntero como una con stante, pro-
cederemos asi:
char *const pe = "abed";
pe[Oj = 'z'; / * eorreeto */
pe = "efg";' / * error */
Para hacer que tanto el puntero como el objeto apuntado sean cons-
tantes, procederemos como se indica a continuaci6n:
const char *const pe = "abed";
pe[Oj = 'z'; h error */
pe = "efg"; / * error */
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c
Lenguaje c

Más contenido relacionado

La actualidad más candente

Índice del libro de 0xWord "Ataques en redes de datos IPv4 & IPv6" 3ª Edición
Índice del libro de 0xWord "Ataques en redes de datos IPv4 & IPv6" 3ª EdiciónÍndice del libro de 0xWord "Ataques en redes de datos IPv4 & IPv6" 3ª Edición
Índice del libro de 0xWord "Ataques en redes de datos IPv4 & IPv6" 3ª EdiciónTelefónica
 
Cuaderno de ejercicios de cálculo diferencial
Cuaderno de ejercicios de cálculo diferencialCuaderno de ejercicios de cálculo diferencial
Cuaderno de ejercicios de cálculo diferencialOmar Guzman
 
Balance de materiales en yacimientos de petoleo con gas disuelto
Balance de materiales en yacimientos de petoleo con gas disueltoBalance de materiales en yacimientos de petoleo con gas disuelto
Balance de materiales en yacimientos de petoleo con gas disueltoMagnus Fernandez
 
Engineering manual bge
Engineering manual bgeEngineering manual bge
Engineering manual bgeronaldo laime
 
Índice del libro de Windows Server 2016: Administración, Seguridad y Operaciones
Índice del libro de Windows Server 2016: Administración, Seguridad y OperacionesÍndice del libro de Windows Server 2016: Administración, Seguridad y Operaciones
Índice del libro de Windows Server 2016: Administración, Seguridad y OperacionesTelefónica
 
Libro 100 experimentos sencillos fisica y quimica
Libro 100 experimentos sencillos fisica y quimicaLibro 100 experimentos sencillos fisica y quimica
Libro 100 experimentos sencillos fisica y quimicaLee Marx
 
TUTELA INHIBITORIA. Luiz Guilherme Marinoni. ISBN: 9788416212224
TUTELA INHIBITORIA. Luiz Guilherme Marinoni. ISBN: 9788416212224TUTELA INHIBITORIA. Luiz Guilherme Marinoni. ISBN: 9788416212224
TUTELA INHIBITORIA. Luiz Guilherme Marinoni. ISBN: 9788416212224Marcial Pons Argentina
 
Experimentos sencillos-de-fisica-y-quimica
Experimentos sencillos-de-fisica-y-quimicaExperimentos sencillos-de-fisica-y-quimica
Experimentos sencillos-de-fisica-y-quimicaEDWIN RONALD CRUZ RUIZ
 
EL PRECEDENTE EN EL DERECHO INGLÉS, Rupert Cross. ISBN: 9788497689397
EL PRECEDENTE EN EL DERECHO INGLÉS, Rupert Cross. ISBN: 9788497689397EL PRECEDENTE EN EL DERECHO INGLÉS, Rupert Cross. ISBN: 9788497689397
EL PRECEDENTE EN EL DERECHO INGLÉS, Rupert Cross. ISBN: 9788497689397Marcial Pons Argentina
 
Introduccion al lenguaje c
Introduccion al lenguaje cIntroduccion al lenguaje c
Introduccion al lenguaje cChucho E. Peña
 

La actualidad más candente (13)

Índice del libro de 0xWord "Ataques en redes de datos IPv4 & IPv6" 3ª Edición
Índice del libro de 0xWord "Ataques en redes de datos IPv4 & IPv6" 3ª EdiciónÍndice del libro de 0xWord "Ataques en redes de datos IPv4 & IPv6" 3ª Edición
Índice del libro de 0xWord "Ataques en redes de datos IPv4 & IPv6" 3ª Edición
 
Cuaderno de ejercicios de cálculo diferencial
Cuaderno de ejercicios de cálculo diferencialCuaderno de ejercicios de cálculo diferencial
Cuaderno de ejercicios de cálculo diferencial
 
Balance de materiales en yacimientos de petoleo con gas disuelto
Balance de materiales en yacimientos de petoleo con gas disueltoBalance de materiales en yacimientos de petoleo con gas disuelto
Balance de materiales en yacimientos de petoleo con gas disuelto
 
Engineering manual bge
Engineering manual bgeEngineering manual bge
Engineering manual bge
 
Índice del libro de Windows Server 2016: Administración, Seguridad y Operaciones
Índice del libro de Windows Server 2016: Administración, Seguridad y OperacionesÍndice del libro de Windows Server 2016: Administración, Seguridad y Operaciones
Índice del libro de Windows Server 2016: Administración, Seguridad y Operaciones
 
38187212 algebra
38187212 algebra38187212 algebra
38187212 algebra
 
Libro 100 experimentos sencillos fisica y quimica
Libro 100 experimentos sencillos fisica y quimicaLibro 100 experimentos sencillos fisica y quimica
Libro 100 experimentos sencillos fisica y quimica
 
TUTELA INHIBITORIA. Luiz Guilherme Marinoni. ISBN: 9788416212224
TUTELA INHIBITORIA. Luiz Guilherme Marinoni. ISBN: 9788416212224TUTELA INHIBITORIA. Luiz Guilherme Marinoni. ISBN: 9788416212224
TUTELA INHIBITORIA. Luiz Guilherme Marinoni. ISBN: 9788416212224
 
Traducción Thinking in Python
Traducción Thinking in PythonTraducción Thinking in Python
Traducción Thinking in Python
 
Tension en-la-red
Tension en-la-redTension en-la-red
Tension en-la-red
 
Experimentos sencillos-de-fisica-y-quimica
Experimentos sencillos-de-fisica-y-quimicaExperimentos sencillos-de-fisica-y-quimica
Experimentos sencillos-de-fisica-y-quimica
 
EL PRECEDENTE EN EL DERECHO INGLÉS, Rupert Cross. ISBN: 9788497689397
EL PRECEDENTE EN EL DERECHO INGLÉS, Rupert Cross. ISBN: 9788497689397EL PRECEDENTE EN EL DERECHO INGLÉS, Rupert Cross. ISBN: 9788497689397
EL PRECEDENTE EN EL DERECHO INGLÉS, Rupert Cross. ISBN: 9788497689397
 
Introduccion al lenguaje c
Introduccion al lenguaje cIntroduccion al lenguaje c
Introduccion al lenguaje c
 

Similar a Lenguaje c

CONTROL ESTADÍSTICO DE LA CALIDAD Y SEIS SIGMA 3DA ED.pdf
CONTROL ESTADÍSTICO DE LA CALIDAD Y SEIS SIGMA 3DA ED.pdfCONTROL ESTADÍSTICO DE LA CALIDAD Y SEIS SIGMA 3DA ED.pdf
CONTROL ESTADÍSTICO DE LA CALIDAD Y SEIS SIGMA 3DA ED.pdfJuanalvarez903617
 
Code igniter spanish_userguide
Code igniter spanish_userguideCode igniter spanish_userguide
Code igniter spanish_userguideDavid Delgado
 
Javascript inspirate
Javascript inspirateJavascript inspirate
Javascript inspirateJUAN PABLO
 
Audition cs5.5 help
Audition cs5.5 helpAudition cs5.5 help
Audition cs5.5 helpLuis Jaya
 
Diccionario de Competencias La Trilogia M.Alles Ccesa007.pdf
Diccionario de Competencias La Trilogia M.Alles Ccesa007.pdfDiccionario de Competencias La Trilogia M.Alles Ccesa007.pdf
Diccionario de Competencias La Trilogia M.Alles Ccesa007.pdfDemetrio Ccesa Rayme
 
Diccionario_de_competencias_la_trilogia MARTHA ALLES.pdf
Diccionario_de_competencias_la_trilogia  MARTHA ALLES.pdfDiccionario_de_competencias_la_trilogia  MARTHA ALLES.pdf
Diccionario_de_competencias_la_trilogia MARTHA ALLES.pdfCINTIA327193
 
Diccionario-de-competencias.pdf
Diccionario-de-competencias.pdfDiccionario-de-competencias.pdf
Diccionario-de-competencias.pdfEvelynSolis23
 
Balance de Materiales en Yacimientos de Petroleo con Gas Disuelto
Balance de Materiales en Yacimientos de Petroleo con Gas DisueltoBalance de Materiales en Yacimientos de Petroleo con Gas Disuelto
Balance de Materiales en Yacimientos de Petroleo con Gas DisueltoMagnusMG
 
Balance de Materiales en Yacimientos de Petroleo con Gas Disuelto
Balance de Materiales en Yacimientos de Petroleo con Gas DisueltoBalance de Materiales en Yacimientos de Petroleo con Gas Disuelto
Balance de Materiales en Yacimientos de Petroleo con Gas DisueltoMagnusMG
 
Libro programación-en-c++
Libro programación-en-c++Libro programación-en-c++
Libro programación-en-c++Andres Escobar
 
Introduccion a la_programacion_con_c
Introduccion a la_programacion_con_cIntroduccion a la_programacion_con_c
Introduccion a la_programacion_con_cAbefo
 
Cálculos y Escalas de Valoración.pdf
Cálculos y Escalas de Valoración.pdfCálculos y Escalas de Valoración.pdf
Cálculos y Escalas de Valoración.pdfmiguel874785
 
ApuntesC++.pdf
ApuntesC++.pdfApuntesC++.pdf
ApuntesC++.pdfbilgrado01
 
Matemáticas Avanzadas autor Erick E. Luna Rojero.pdf
Matemáticas Avanzadas autor Erick E. Luna Rojero.pdfMatemáticas Avanzadas autor Erick E. Luna Rojero.pdf
Matemáticas Avanzadas autor Erick E. Luna Rojero.pdfRosaLuciaBazanCandue
 
Diccionarios_de_comportamientos_la_trilo.pdf
Diccionarios_de_comportamientos_la_trilo.pdfDiccionarios_de_comportamientos_la_trilo.pdf
Diccionarios_de_comportamientos_la_trilo.pdfCETSIDesarrolloHuman
 

Similar a Lenguaje c (20)

Eloquent_JavaScript.pdf
Eloquent_JavaScript.pdfEloquent_JavaScript.pdf
Eloquent_JavaScript.pdf
 
CONTROL ESTADÍSTICO DE LA CALIDAD Y SEIS SIGMA 3DA ED.pdf
CONTROL ESTADÍSTICO DE LA CALIDAD Y SEIS SIGMA 3DA ED.pdfCONTROL ESTADÍSTICO DE LA CALIDAD Y SEIS SIGMA 3DA ED.pdf
CONTROL ESTADÍSTICO DE LA CALIDAD Y SEIS SIGMA 3DA ED.pdf
 
Code igniter spanish_userguide
Code igniter spanish_userguideCode igniter spanish_userguide
Code igniter spanish_userguide
 
Documentacion de Codeigniter en español
Documentacion de Codeigniter en españolDocumentacion de Codeigniter en español
Documentacion de Codeigniter en español
 
Javascript inspirate
Javascript inspirateJavascript inspirate
Javascript inspirate
 
Audition cs5.5 help
Audition cs5.5 helpAudition cs5.5 help
Audition cs5.5 help
 
Representaciones simbolicas algoritmos
Representaciones simbolicas algoritmosRepresentaciones simbolicas algoritmos
Representaciones simbolicas algoritmos
 
Diccionario de Competencias La Trilogia M.Alles Ccesa007.pdf
Diccionario de Competencias La Trilogia M.Alles Ccesa007.pdfDiccionario de Competencias La Trilogia M.Alles Ccesa007.pdf
Diccionario de Competencias La Trilogia M.Alles Ccesa007.pdf
 
Diccionario_de_competencias_la_trilogia MARTHA ALLES.pdf
Diccionario_de_competencias_la_trilogia  MARTHA ALLES.pdfDiccionario_de_competencias_la_trilogia  MARTHA ALLES.pdf
Diccionario_de_competencias_la_trilogia MARTHA ALLES.pdf
 
Diccionario-de-competencias.pdf
Diccionario-de-competencias.pdfDiccionario-de-competencias.pdf
Diccionario-de-competencias.pdf
 
Balance de Materiales en Yacimientos de Petroleo con Gas Disuelto
Balance de Materiales en Yacimientos de Petroleo con Gas DisueltoBalance de Materiales en Yacimientos de Petroleo con Gas Disuelto
Balance de Materiales en Yacimientos de Petroleo con Gas Disuelto
 
Balance de Materiales en Yacimientos de Petroleo con Gas Disuelto
Balance de Materiales en Yacimientos de Petroleo con Gas DisueltoBalance de Materiales en Yacimientos de Petroleo con Gas Disuelto
Balance de Materiales en Yacimientos de Petroleo con Gas Disuelto
 
Libro programación-en-c++
Libro programación-en-c++Libro programación-en-c++
Libro programación-en-c++
 
Introduccion a la_programacion_con_c
Introduccion a la_programacion_con_cIntroduccion a la_programacion_con_c
Introduccion a la_programacion_con_c
 
Cálculos y Escalas de Valoración.pdf
Cálculos y Escalas de Valoración.pdfCálculos y Escalas de Valoración.pdf
Cálculos y Escalas de Valoración.pdf
 
ApuntesC++.pdf
ApuntesC++.pdfApuntesC++.pdf
ApuntesC++.pdf
 
Matemáticas Avanzadas autor Erick E. Luna Rojero.pdf
Matemáticas Avanzadas autor Erick E. Luna Rojero.pdfMatemáticas Avanzadas autor Erick E. Luna Rojero.pdf
Matemáticas Avanzadas autor Erick E. Luna Rojero.pdf
 
Diccionarios_de_comportamientos_la_trilo.pdf
Diccionarios_de_comportamientos_la_trilo.pdfDiccionarios_de_comportamientos_la_trilo.pdf
Diccionarios_de_comportamientos_la_trilo.pdf
 
Photoshop cs5 help
Photoshop cs5 helpPhotoshop cs5 help
Photoshop cs5 help
 
Manual civilcad
Manual civilcadManual civilcad
Manual civilcad
 

Último

estadisticasII Metodo-de-la-gran-M.pdf
estadisticasII   Metodo-de-la-gran-M.pdfestadisticasII   Metodo-de-la-gran-M.pdf
estadisticasII Metodo-de-la-gran-M.pdfFlorenciopeaortiz
 
ECONOMIA APLICADA SEMANA 555555555555555555.pdf
ECONOMIA APLICADA SEMANA 555555555555555555.pdfECONOMIA APLICADA SEMANA 555555555555555555.pdf
ECONOMIA APLICADA SEMANA 555555555555555555.pdffredyflores58
 
Edificio residencial Becrux en Madrid. Fachada de GRC
Edificio residencial Becrux en Madrid. Fachada de GRCEdificio residencial Becrux en Madrid. Fachada de GRC
Edificio residencial Becrux en Madrid. Fachada de GRCANDECE
 
CENTROIDES Y MOMENTOS DE INERCIA DE AREAS PLANAS.pdf
CENTROIDES Y MOMENTOS DE INERCIA DE AREAS PLANAS.pdfCENTROIDES Y MOMENTOS DE INERCIA DE AREAS PLANAS.pdf
CENTROIDES Y MOMENTOS DE INERCIA DE AREAS PLANAS.pdfpaola110264
 
Presentación Proyecto Trabajo Creativa Profesional Azul.pdf
Presentación Proyecto Trabajo Creativa Profesional Azul.pdfPresentación Proyecto Trabajo Creativa Profesional Azul.pdf
Presentación Proyecto Trabajo Creativa Profesional Azul.pdfMirthaFernandez12
 
Presentación N° 1 INTRODUCCIÓN Y CONCEPTOS DE GESTIÓN AMBIENTAL.pdf
Presentación N° 1 INTRODUCCIÓN Y CONCEPTOS DE GESTIÓN AMBIENTAL.pdfPresentación N° 1 INTRODUCCIÓN Y CONCEPTOS DE GESTIÓN AMBIENTAL.pdf
Presentación N° 1 INTRODUCCIÓN Y CONCEPTOS DE GESTIÓN AMBIENTAL.pdfMIGUELANGELCONDORIMA4
 
Topografía 1 Nivelación y Carretera en la Ingenierías
Topografía 1 Nivelación y Carretera en la IngenieríasTopografía 1 Nivelación y Carretera en la Ingenierías
Topografía 1 Nivelación y Carretera en la IngenieríasSegundo Silva Maguiña
 
Residente de obra y sus funciones que realiza .pdf
Residente de obra y sus funciones que realiza  .pdfResidente de obra y sus funciones que realiza  .pdf
Residente de obra y sus funciones que realiza .pdfevin1703e
 
Introducción a los sistemas neumaticos.ppt
Introducción a los sistemas neumaticos.pptIntroducción a los sistemas neumaticos.ppt
Introducción a los sistemas neumaticos.pptEduardoCorado
 
AMBIENTES SEDIMENTARIOS GEOLOGIA TIPOS .pptx
AMBIENTES SEDIMENTARIOS GEOLOGIA TIPOS .pptxAMBIENTES SEDIMENTARIOS GEOLOGIA TIPOS .pptx
AMBIENTES SEDIMENTARIOS GEOLOGIA TIPOS .pptxLuisvila35
 
CLASE 2 MUROS CARAVISTA EN CONCRETO Y UNIDAD DE ALBAÑILERIA
CLASE 2 MUROS CARAVISTA EN CONCRETO  Y UNIDAD DE ALBAÑILERIACLASE 2 MUROS CARAVISTA EN CONCRETO  Y UNIDAD DE ALBAÑILERIA
CLASE 2 MUROS CARAVISTA EN CONCRETO Y UNIDAD DE ALBAÑILERIAMayraOchoa35
 
Proyecto de iluminación "guia" para proyectos de ingeniería eléctrica
Proyecto de iluminación "guia" para proyectos de ingeniería eléctricaProyecto de iluminación "guia" para proyectos de ingeniería eléctrica
Proyecto de iluminación "guia" para proyectos de ingeniería eléctricaXjoseantonio01jossed
 
Centro Integral del Transporte de Metro de Madrid (CIT). Premio COAM 2023
Centro Integral del Transporte de Metro de Madrid (CIT). Premio COAM 2023Centro Integral del Transporte de Metro de Madrid (CIT). Premio COAM 2023
Centro Integral del Transporte de Metro de Madrid (CIT). Premio COAM 2023ANDECE
 
Seleccion de Fusibles en media tension fusibles
Seleccion de Fusibles en media tension fusiblesSeleccion de Fusibles en media tension fusibles
Seleccion de Fusibles en media tension fusiblesSaulSantiago25
 
Diapositiva de Topografía Nivelación simple y compuesta
Diapositiva de Topografía Nivelación simple y compuestaDiapositiva de Topografía Nivelación simple y compuesta
Diapositiva de Topografía Nivelación simple y compuestajeffsalazarpuente
 
Curso intensivo de soldadura electrónica en pdf
Curso intensivo de soldadura electrónica  en pdfCurso intensivo de soldadura electrónica  en pdf
Curso intensivo de soldadura electrónica en pdfFernandaGarca788912
 
Hanns Recabarren Diaz (2024), Implementación de una herramienta de realidad v...
Hanns Recabarren Diaz (2024), Implementación de una herramienta de realidad v...Hanns Recabarren Diaz (2024), Implementación de una herramienta de realidad v...
Hanns Recabarren Diaz (2024), Implementación de una herramienta de realidad v...Francisco Javier Mora Serrano
 
SOLICITUD-PARA-LOS-EGRESADOS-UNEFA-2022.
SOLICITUD-PARA-LOS-EGRESADOS-UNEFA-2022.SOLICITUD-PARA-LOS-EGRESADOS-UNEFA-2022.
SOLICITUD-PARA-LOS-EGRESADOS-UNEFA-2022.ariannytrading
 
Caldera Recuperadora de químicos en celulosa tipos y funcionamiento
Caldera Recuperadora de químicos en celulosa  tipos y funcionamientoCaldera Recuperadora de químicos en celulosa  tipos y funcionamiento
Caldera Recuperadora de químicos en celulosa tipos y funcionamientoRobertoAlejandroCast6
 

Último (20)

estadisticasII Metodo-de-la-gran-M.pdf
estadisticasII   Metodo-de-la-gran-M.pdfestadisticasII   Metodo-de-la-gran-M.pdf
estadisticasII Metodo-de-la-gran-M.pdf
 
ECONOMIA APLICADA SEMANA 555555555555555555.pdf
ECONOMIA APLICADA SEMANA 555555555555555555.pdfECONOMIA APLICADA SEMANA 555555555555555555.pdf
ECONOMIA APLICADA SEMANA 555555555555555555.pdf
 
Edificio residencial Becrux en Madrid. Fachada de GRC
Edificio residencial Becrux en Madrid. Fachada de GRCEdificio residencial Becrux en Madrid. Fachada de GRC
Edificio residencial Becrux en Madrid. Fachada de GRC
 
CENTROIDES Y MOMENTOS DE INERCIA DE AREAS PLANAS.pdf
CENTROIDES Y MOMENTOS DE INERCIA DE AREAS PLANAS.pdfCENTROIDES Y MOMENTOS DE INERCIA DE AREAS PLANAS.pdf
CENTROIDES Y MOMENTOS DE INERCIA DE AREAS PLANAS.pdf
 
Presentación Proyecto Trabajo Creativa Profesional Azul.pdf
Presentación Proyecto Trabajo Creativa Profesional Azul.pdfPresentación Proyecto Trabajo Creativa Profesional Azul.pdf
Presentación Proyecto Trabajo Creativa Profesional Azul.pdf
 
Presentación N° 1 INTRODUCCIÓN Y CONCEPTOS DE GESTIÓN AMBIENTAL.pdf
Presentación N° 1 INTRODUCCIÓN Y CONCEPTOS DE GESTIÓN AMBIENTAL.pdfPresentación N° 1 INTRODUCCIÓN Y CONCEPTOS DE GESTIÓN AMBIENTAL.pdf
Presentación N° 1 INTRODUCCIÓN Y CONCEPTOS DE GESTIÓN AMBIENTAL.pdf
 
Topografía 1 Nivelación y Carretera en la Ingenierías
Topografía 1 Nivelación y Carretera en la IngenieríasTopografía 1 Nivelación y Carretera en la Ingenierías
Topografía 1 Nivelación y Carretera en la Ingenierías
 
VALORIZACION Y LIQUIDACION MIGUEL SALINAS.pdf
VALORIZACION Y LIQUIDACION MIGUEL SALINAS.pdfVALORIZACION Y LIQUIDACION MIGUEL SALINAS.pdf
VALORIZACION Y LIQUIDACION MIGUEL SALINAS.pdf
 
Residente de obra y sus funciones que realiza .pdf
Residente de obra y sus funciones que realiza  .pdfResidente de obra y sus funciones que realiza  .pdf
Residente de obra y sus funciones que realiza .pdf
 
Introducción a los sistemas neumaticos.ppt
Introducción a los sistemas neumaticos.pptIntroducción a los sistemas neumaticos.ppt
Introducción a los sistemas neumaticos.ppt
 
AMBIENTES SEDIMENTARIOS GEOLOGIA TIPOS .pptx
AMBIENTES SEDIMENTARIOS GEOLOGIA TIPOS .pptxAMBIENTES SEDIMENTARIOS GEOLOGIA TIPOS .pptx
AMBIENTES SEDIMENTARIOS GEOLOGIA TIPOS .pptx
 
CLASE 2 MUROS CARAVISTA EN CONCRETO Y UNIDAD DE ALBAÑILERIA
CLASE 2 MUROS CARAVISTA EN CONCRETO  Y UNIDAD DE ALBAÑILERIACLASE 2 MUROS CARAVISTA EN CONCRETO  Y UNIDAD DE ALBAÑILERIA
CLASE 2 MUROS CARAVISTA EN CONCRETO Y UNIDAD DE ALBAÑILERIA
 
Proyecto de iluminación "guia" para proyectos de ingeniería eléctrica
Proyecto de iluminación "guia" para proyectos de ingeniería eléctricaProyecto de iluminación "guia" para proyectos de ingeniería eléctrica
Proyecto de iluminación "guia" para proyectos de ingeniería eléctrica
 
Centro Integral del Transporte de Metro de Madrid (CIT). Premio COAM 2023
Centro Integral del Transporte de Metro de Madrid (CIT). Premio COAM 2023Centro Integral del Transporte de Metro de Madrid (CIT). Premio COAM 2023
Centro Integral del Transporte de Metro de Madrid (CIT). Premio COAM 2023
 
Seleccion de Fusibles en media tension fusibles
Seleccion de Fusibles en media tension fusiblesSeleccion de Fusibles en media tension fusibles
Seleccion de Fusibles en media tension fusibles
 
Diapositiva de Topografía Nivelación simple y compuesta
Diapositiva de Topografía Nivelación simple y compuestaDiapositiva de Topografía Nivelación simple y compuesta
Diapositiva de Topografía Nivelación simple y compuesta
 
Curso intensivo de soldadura electrónica en pdf
Curso intensivo de soldadura electrónica  en pdfCurso intensivo de soldadura electrónica  en pdf
Curso intensivo de soldadura electrónica en pdf
 
Hanns Recabarren Diaz (2024), Implementación de una herramienta de realidad v...
Hanns Recabarren Diaz (2024), Implementación de una herramienta de realidad v...Hanns Recabarren Diaz (2024), Implementación de una herramienta de realidad v...
Hanns Recabarren Diaz (2024), Implementación de una herramienta de realidad v...
 
SOLICITUD-PARA-LOS-EGRESADOS-UNEFA-2022.
SOLICITUD-PARA-LOS-EGRESADOS-UNEFA-2022.SOLICITUD-PARA-LOS-EGRESADOS-UNEFA-2022.
SOLICITUD-PARA-LOS-EGRESADOS-UNEFA-2022.
 
Caldera Recuperadora de químicos en celulosa tipos y funcionamiento
Caldera Recuperadora de químicos en celulosa  tipos y funcionamientoCaldera Recuperadora de químicos en celulosa  tipos y funcionamiento
Caldera Recuperadora de químicos en celulosa tipos y funcionamiento
 

Lenguaje c

  • 1. Enciclopedia del Lenguaje ""."" ADDISON-WESLEY IBEROAMERICANA
  • 3. Enciclopedia del Lenguaje cFeo. Javier Ceballos Sierra Profesor titular de la Escuela Universitaria Politecnica Universidad de Alcala de Henares (Madrid) TAT ADDISON-WESLEY IBEROAMERICANA
  • 4. Se ha puesto el maximo empefio en ofrecer allector una informacion completa y precisa. Sin embargo RA-MAEditorial y Addison-Wesley Iberoamericana, S.A.no asumen ninguna responsabilidad derivada de su usa, ni tam poco por cualquier violacion de patentes ni otros derechos de terceras partes que pudieran ocurrir. © 1993 por Addison Wesley Iberoamericana, S.A. Wilmington, Delaware, E.U.A. Ninguna parte de este libro puede ser reproducida, grabada en sistema de almacenamiento 0 transmitida en forma alguna ni por cualquier procedimiento, ya sea electronico, mecanico, reprografico, magnetico 0 cualquier otro, sin autorizacion previa y por escrito de RA-MA.
  • 5. Dedico esta obra a Marfa del Carmen, mi esposa, y a mis hijos Francisco y' Javier
  • 6. CAPITULO 1. Introduccion al Lenguaje C. . . . . . . . . . . . . . . 39 Historia del lenguaje C. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 Realizaci6n de un programa en C. . . . . . . . . . . . . . . . . . . . . 41 Edici6n de un programa. . . . . . . . . . . . . . . . . . . . . . . . . . . 42 Salvar el programa escrito, en el disco. . . . . . . . . . . . . . . 44 Compilar y ejecutar el programa. . . . . . . . . . . . . . . . . . . . 44 Salvar el programa ejecutable (.exe), en el disco. . . . . . . 44 Depurar un programa............................. 45 Preparando un programa simple. . . . . . . . . . . . . . . . . . . . 45 Edici6n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 Compilaci6n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 Depuraci6n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 Nombres de ficheros y extensiones. . . . . . . . . . . . . . . . . . . . . 49 CAPITULO 2. Elementos del Lenguaje C........ .... .... 51 Presentaci6n de la sintaxis de C. . . . . . . . . . . . . . . . . . . . . . . 51 Caracteres de C. .. .. . . . . . . . . . . . . . .. . .. . .. .. .. . . . . . . . 52
  • 7. Letras, digitos y carcicter de subrayado. . . . . . . . . . . . . . . 52 Espacios en blanco. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 Caracteres especiales y signos de puntuaci6n. . . . . . . . . 53 Secuencias de escape.............................. 53 Tipos de datos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 Tipos fundamentales. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 char. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 short. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 int . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 long. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 enum. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 Creaci6n de una enumeraci6n. . . . . . . . . . . . . . . . . . . . . . 58 float. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 double. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 long double...................................... 61 void. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 Tipos derivados..................................... 61 punteros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 estructuras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 uni6n. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 Nombres de tipos................................... 63 typedef . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 Constantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 Constantes enteras................................ 65 Constantes reales................................. 66 .. ". Constante de un solo carcicter. . . . . . . . . . . . . . . . . . . . . . 67 .Constantes de caracteres........................... 67 'Identificadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 Palabras clave. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 Comentarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 Variables. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 Declaraci6n de constantes............................ 72 Cailficador const .. " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 Calificador volatile.... . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 Expresiones numeric'as............................... 73 Operadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 Operadores aritmeticos............................ 74 Operadores 16gicos................................ 74 Operadores de relaci6n............................ 75
  • 8. Expresiones de Boole. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 Operadores unitarios.............................. 76 Operadores 16gicos para manejo de bits. . . . . . . . . . . . . . 76 Operadores de asignaci6n.......................... 77 Expresiones condicionales.......................... 79 Otros operadores.................................... 79 Operador coma................................... 79 Operador de indirecci6n (*)........................ 80 Operador de direcci6n-de (&). . . . . . . . . . . . . . . . . . . . . . . 80 Operador sizeof (tamafio de).. . . . . . . . . . . . . . . . . . . . . . 80 Priori dad y orden de evaluaci6n. . . . . . . . . . . . . . . . . . . . . . . 81 Conversi6n de tipos................................. 82 Conversi6n explicita del tipo de una expresi6n. . . . . . . . . . 85 Tipos estandar...................................... 86 CAPITUW 3. Comenzando con el Lenguaje C. . . . . . . . . . . 89 Estructura de un programa C. . . . . . . . . . . . . . . . . . . . . . . . . 89 Ficheros de cabecera. Directriz # include. . . . . . . . . . . . . 91 Directriz # define. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 Declaraciones y definiciones. . . . . . . . . . . . . . . . . . . . . . . . 92 Expresiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 Sentencias. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 Sentencia compuesta 0 bloque. . . . . . . . . . . . . . . . . . . . . . 94 Funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 Declaraci6n de una funci6n. . . . . . . . . . . . . . . . . . . . . . . . 95 Definici6n de una funci6n......................... 96 Llamada a una funci6n. . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 Pasando argumentos a funciones.................... 98 Un programa C formado por multiples ficheros. . . . . . . . . 99 Accesibilidad de variables. Ambito.................... 101 Variables glob ales y locales. . . . . . . . . . . . . . . . . . . . . . . . . 101 Clases de almacenamiento. . . . . . . . . . . . . . . . . . . . . . . . . . 103 Variables declaradas a nivel externo. . . . . . . . . . . . . . . . . 104 Variables declaradas a nivel interno. . . . . . . . . . . . . . . . . . 106 Declaraci6n de funciones a nivel interno y a nivel externo 108 Sintaxis de las sentencias y funciones de C. . . . . . . . . . . . . 108 Senten cia de asignaci6n. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 Entrada y salida estandar............................ 110 Salida con formato. Funci6n printf. . . . . . . . . . . . . . . . . . . . 110 Entrada con formato. Funci6n scanf. . . . . . . . . . . . . . . . . . . 116 Entrada de caracteres. getchar........................ 122
  • 9. Salida de caracteres. putchar. . . . . . . . . . ... . . . . . . . . . . . . . . 122 Caracter fin de linea y caracter fin de fichero. . . . . . . . . . . 123 Funciones getch y getche. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125 Funci6n system..................................... 126 Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126 CAPITUW 4. Sentencias de Control.................... 129 Senten cia if. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129 Anidamiento de sentencias if.. . . . . . . . . . . . . . . . . . . . . . . . 131 Estructura if. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134 Sentencia switch. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 Sentencia break..................................... 138 Sentencia while..................................... 140 Sentencia do. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 Senten cia for....................................... 145 Bucles anidados..................................... 146 Sentencia continue.................................. 149 Sentencia goto y etiquetas. . . . . . . . . . . . . . . . . . . . . . . . . . . . 150 Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152 Numeros pseudoaleatorios............................ 158 Calculo de areas y volumenes. . . . . . . . . . . . . . . . . . . . . . 161 CAPITUW 5. Tipos Estructuradosde Datos............. 163 Arrays. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163 Declaraci6n de un array. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164 Arrays unidimensionales........................... 164 Arrays multidimensionales......................... 165 Caracteristicas generales........................... 166 Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168 Cadenas de caracteres. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173 Funci6n gets. Leer una cadena de caracteres. . . . . . . . . . . . 175 Funci6n puts. Escribir una cadena de caracteres. . . . . . . . . 175 Limpiar el buffer asociado con stdin. . . . . . . . . . . . . . . . . . . 176 Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178 Arrays de cadenas de caracteres. . . . . . . . . . . . . . . . . . . . . . . 182 Funciones para manipular cadenas de caracteres. . . . . . . . . 183 Funciones para conversi6n de datos. . . . . . . . . . . . . . . . . . . . 190 Funciones para clasificaci6n y conversi6n de caracteres. . . 193 Estructuras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197 Creaci6n de una estructura. . . . . . . . . . . . . . . . . . . . . . . . . 197 Operaciones con estructuras. . . . . . . . . . . . . . . . . . . . . . . . 200
  • 10. Arrays de estructuras.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200 Union~s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201 Campos de bits .. ; . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207 Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210 CAPITUW 6. Punteros.... . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219 Introducci6n. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219 Creaci6n de punteros................................ 219 Operadores. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220 Importancia del tipo del objeto al que se apunta. . . . . . 221 Operaciones con punteros............................ 222 Operaci6n de asignaci6n. . . . . . . . . . . . . . . . . . . . . . . . . . . 222 Operaciones aritmeticas............................ 222 Comparaci6n de punteros. . . . . . . . . . . . . . . . . . . . . . . . . . 223 Ejemplos con punteros............................ 223 Punteros a objetos de tipo no especificado (void). . . . . 225 Punteros y arrays. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226 Punteros a cadenas de caracteres.. . . . . 227 Inicializaci6n de cadenas. . . . . . . . . . . . . . . . . . . . . . . . . . . 232 Arrays de punteros. Punteros a punteros. . . . . . . . . . . . . . . 233 Inicializaci6n de un array de punteros a cadenas de caracteres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236 Asignaci6n dimimica de memoria. .. ... . . . . . ... . . .. . . . 239 Funciones para asignaci6n dinamica de memoria. . . . . . . . 240 malloc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240 Arrays dinamicos................................. 242 calloc. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243 realloc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244 free. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245 halloc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246 hfree . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246 Punteros a estructuras............................... 247 Declaraciones complejas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248 CAPITUW 7. Funciones............................... 251 Introducci6n. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251 Definici6n de una funci6n. . . . . . . . . . . . . . . . . . . . . . . . . . . . 252 Cuerpo de la funci6n. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255 Valor retornado por una funci6n. Sentencia return. . . . 255 Llamada a una fund6n. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256 Declaraci6n de una' funci6n. (Funci6n prototipo). . . . . . . . 257
  • 11. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259 Pasando parametros por valor 0 por referencia. . . . . . . . . . 267 Pasando arrays completos. . . . . . . . . . . . . . . . . . . . . . . . . . 268 Pasando punteros................................. 272 Argumentos en la linea de 6rdenes. . . . . . . . . . . . . . . . . . . . 274 Funciones con un numero de argumentos variable. . . . . . . 276 Funciones recursivas................................. 279 Ajustando e1tamafio del stack. . . . . . . . . . . . . . . . . . . . . . 281 Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281 Punteros a funciones................................ 288 Funciones predefinidas en C. . . . . . . . . . . . . . . . . . . . . . . . . . 292 Funciones matematicas............................ 292 Otras funciones de interes. . . . . . . . . . . . . . . . . . . . . . . . . . 299 Funci6n C para clasificar datos. . . . . . . . . . . . . . . . . . . . . . . 303 qsort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303 Funciones C para busqueda.......................... 305 bsearch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305 Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 308 CAPITULO 8. Funciones ESbindar de E/S................ 315 Introducci6n. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315 Manipulaci6n de ficheros. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316 Abriendo un fichero. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317 Cerrando un fichero. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318 Leyendo y escribiendo datos. . . . . . . . . . . . . . . . . . . . . . . . 318 Detecci6n de errores. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318 Acceso secuencial y acceso aleatorio. . . . . . . . . . . . . . . . . 319 Abrir un fichero.................................... 319 fopen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319 fdopen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321 freopen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322 Cerrar un fichero. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323 fclose. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323 fcloseall . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323 Detecci6n de errores. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324 ferror. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324 clearerr. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324 feof . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325 perror . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326
  • 12. Entrada/salida canicter a caracter. . . . . . . . . . . . . . . . . . . . . 326 fputc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326 fgetc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328 Entrada/salida palabra a palabra. . . . . . . . . . . . . . . . . . . . . . 330 putw . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330 getw . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330 Entrada/salida de cadenas de caracteres. . . . . . . . . . . . . . . . 332 fputs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332 fgets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333 Utilizaci6n de dispositivos estandar. . . . . . . . . . . . . . . . . . . . 334 Entrada/salida con formato.......................... 336 fprintf. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336 fscanf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336 Entrada/salida utilizando registros 0 bloques. . . . . . . . . . . 338 fwrite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338 fread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338 Control de la memoria intermedia asociada con un fichero. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 341 setbuf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 341 setvbuf. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 341 fflush . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344 Ficheros temporales. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345 tmpfile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345 rmtmp. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345 tmpnam . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346 tempnam .. . . . . . . . . . . . . . . . 347 Acceso aleatorio a un fichero. . . . . . . . . . . . . . . . . . . . . . . . . 348 fseek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348 ftell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349 rewind. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349 fsetpos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 352 fgetpos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 352 _fsopen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353 CAPITUW 9. FUDcioDes de E/S de bajo Dive'. . . . . . . . . . . . 355 Introducci6n. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355 Manipulaci6n de ficheros , . 355 Abriendo un fichero. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 356 Cerrando un fichero. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 356 Leyendo y escribiendo datos. . . . . . . . . . . . . . . . . . . . . . . . 357 Abrir un fichero.................................... 357
  • 13. open. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357 creat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360 eof. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361 fileno. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362 Cerrar un fichero. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363 close. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363 Funciones para entrada/salida........................ 363 write. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363 read. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363 Acceso aleatorio.................................... 366 lseek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 366 tell. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367 dup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 369 dup2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 369 sopen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 369 umask. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 370 CAPITUW 10. Funciones para la Consola y los Puertos de E/S 373 Introducci6n ". . . . . . . . . . . . . . . . . . . . 373 Funciones para la consola. . . . . . . . . . . . . . . . . . . . . . . . . . . . 373 getch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373 getche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 374 putch. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 374 kbhit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375 ungetch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375 cgets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 376 cputs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377 cscanf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377 cprintf. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377 Control del cursor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 378 Funciones para los puertos de E/S. . . . . . . . . . . . . . . . . . . . 384 inp. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385 outp. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385 inpw . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 386 outpw , . . . . . . . . . . . . . . . . . . 386 CAPITUW 11. EI Preprocesador de C. . . . . . . . . . . . . . . . . . . 391 Introducci6n. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391 Directriz # define. Sustituci6n de simbolos. . . . . . . . . . . . . . 392
  • 14. El operador #.................................... 394 El operador # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 394 Directriz # undef. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395 Directriz # include. Inclusi6n de ficheros fuente. . . . . . . . . 395 Compilaci6n condicional............................. 396 defined(identificador) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 397 Directrices # ifdef e # ifndef. . . . . . . . . . . . . . . . . . . . . . . . . . 399 Directriz # line. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 399 Directriz # error. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 400 Directriz # pragma. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 400 Funciones intrinsecas................................ 401 Utilizando ficheros de cabecera (.h). . . . . . . . . . . . . . . . . . . . 403 Utilizando el preprocesador. . . . . . . . . . . . . . . . . . . . . . . . . . . 405 Utilizando funciones intrinsecas. . . . . . . . . . . . . . . . . . . . . 407 Utilizando macros 0 funciones. . . . . . . . . . . . . . . . . . . . . . 408 CAPITUW 12. Estructuras Dimimicasde Datos.......... 413 Introducci6n. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 413 Asignaci6n dimimica de memoria..................... 414 Listas lineales. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415 Operaciones basicas................................. 418 Inserci6n de un elemento al comienzo de la lista. . . . . . 418 Inserci6n de un elemento en general. . . . . . . . . . . . . . . . . 419 Borrar un elemento de la lista. . . . . . . . . . . . . . . . . . . . . . 420 Recorrido de una lista cuyo primer elemento esta apunta- do por p. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 421 Buscar en una lista un elemento con un valor x. . . . . . . 422 Pilas, colas y listas doblemente enlazadas. . . . . . . . . . . . . . . 427 Pilas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 427 Colas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 432 Listas circulares. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 436 Listas doblemente enlazadas. . . . . . . . . . . . . . . . . . . . . . . . 444 Arboles. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 449 Arboles binarios.................................. 450 Recorrido de arboles'binarios............... . . . . .... 451 Arboles binarios de busqueda. . . . . . . . . . . . . . . . . . . . . . . . . 453 Borrado en arboles. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 458 Arboles binarios perfectamente equilibrados. . . . . . . . . . . . 460
  • 15. CAPITUW 13. Algoritmos Recursivos, de Ordenacion y de Btisqueda. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 465 Introducci6n. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 465 Recursividad. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 465 Clasificaci6n de datos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 473 Metodo de la burbuja...... . . . . . . . . . . . . . . . . . . . . . . . 473 Metodo de inserci6n. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 477 Metodo Quicksort................................ 480 Comparaci6n de los metodos expuestos. . . . . . . . . . . . . . 484 Bdsqueda de datos. 485 Bdsque4a secuencial. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 485 Bdsqueda binaria................................. 486 Ordenaci6n de ficheros en disco. . . . . . . . . . . . . . . . . . . . . . . 488 Ordenaci6n de ficheros. Acceso secuencial........... 488 Ordenaci6n de ficheros. Acceso aleatorio............ 494 Algoritmos hash.................................... 497 Arrays hash...................................... 498 Metodo hash abierto.............................. 499 Metodo hash con overflow. . . . . . . . . . . . . . . . . . . . . . . . . 501 Eliminaci6n de elementos.......................... 502 Un ejemplo de un array hash. . . . . . . . . . . . . . . . . . . . . . . 503 CAPITUW 14. Manejo de la Memoria. . . . . . . . . . . . . . . . . . 509 Introducci6n. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 509 Tamano de una variable tipo puntero. . . . . . . . . . . . . . . . . . 510 Punteros y segmentos de 64K. . . . . . . . . . . . . . . . . . . . . . . . . 510 Punteros near. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 511 Punteros far........................................ 511 Punteros huge...................................... 514 Punteros basados en un segmento. . . . . . . . . . . . . . . . . . . . . 514 Modelos de memoria estandar. . . . . . . . . . . . . . . . . . . . . . . . 515 Modelo pequenito (tiny)........................... 516 Modelo pequeno (small)........................... 517 Modelo medio (medium). . . . . . . . . . . . . . . . . . . . . . . . . . . 518 Modelo compacta (compact)....................... 519 Modelo grande (large)............................. 520 Modelo enorme (huge)............................ 523 Punteros nul os...................................... 524 Modelos de memoria mixtos. . . . . . . . . . . . . . . . . . . . . . . . . . 526
  • 16. Declaraci6n de variables near, far, huge, 0 based. . . . . . . . 529 Declaraci6n de funciones far 0 near. . . . . . . . . . . . . . . . . . . 530 Utilizaci6n de punteros basad os en un segmento. . . . . . . . 530 Variables y punteros basados en un segmento constante 532 Punteros basados en un segmento variable. . . . . . . . . . . 533 Punteros basados sobre un puntero. . . . . . . . . . . . . . . . . . 536 Punteros basados en void. . . . . . . . . . . . . . . . . . . . . . . . . . 538 Punteros basados en su propio segmento. . . . . . . . . . . . . 539 Soporte MS-DOS para asignaci6n de memoria. . . . . . . . . . 540 Soporte MS-DOS para cadenas de caracteres. . . . . . . . . . . . 542 Manipulaci6n de bloques de memoria. . . . . . . . . . . . . . . . . . 542 Soporte MS-DOS para manipulaci6n de bloques de memoria. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 546 CAPITULO 15. Compilar y Enlazar desde DOS. . . . . . . . . . . 549 Introducci6n................................. 549 Proceso para crear un fichero ejecutable. . . . . . . . . . . . . 550 Orden CL.......................................... 550 Extensiones de ficheros............................ 553 Opciones de CL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 554 Generaci6n de c6digo............................. 554 Operaciones en coma flotante. . . . . . . . . . . . . . . . . . . . . . 555 Lenguaje. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 556 Enlace. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 556 Modelos de memoria. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 557 Optimizaci6n. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 557 Ficheros de salida. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 558 Preprocesador. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 559 Listado de ficheros fuente. . . . . . . . . . . . . . . . . . . . . . . . . . 559 Opciones varias. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 559 Orden LINK. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 560 LINK en modo pregunta/respuesta. . . . . . . . . . . . . . . . . . 565 LINK con respuestas automatic as . . . . . . . . . . . . . . . . . . . 566 Overlays. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 567 Orden ILINK....................................... 568 CAPITULO 16. Librerias y Utilidades del Compilador. . . . . 571 Introducci6n. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 571 Orden LIB......................................... 572 LIB en modo pregunta/respuesta................... 575 LIB con respuestas automaticas.. . .. . . . .. .. 576
  • 17. Un ejemplo de trabajo con librerias. . . . . . . . . . . . . . . . . 577 Orden NMAKE..................................... 579 EI fichero makefile. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 579 Opciones de NMAKE............................. 582 Macros. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 583 Sustituciones en macros. . . . . . . . . . . . . . . . . . . . . . . . . . . . 584 Macros especiales................................. 584 Caracteres que pueden modificar estas macros. . . . . . . . 585 Reglas de inferencia............................... 586 Directrices. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 588 Prioridades. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 589 Ficheros en linea. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 590 Simbolos especiales............................... 591 Componentes de una descripci6n de fichero. . . . . . . . . . 591 Pseudoobjetivos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 592 NMAKE con respuestas automaticas................ 592 Inicializaci6n automatica. TOOLS.INI............... 593 Un ejemplo de trabajo con la utili dad NMAKE. . . . . . . 593 EI depurador Code View de Microsoft. . . . . . . . . . . . . . . . . 596 Com pilar y enlazar un programa C para depurar. . . . . 597 Invocando a Code View. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 597 Opciones de Code View........................... 598 Menus de Code View. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 601 Code View con rat6n (mouse). . . . . . . . . . . . . . . . . . . . . . . . 603 Seleccionando texto. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 604 Menu File.......................................... 604 Menu Edit......................................... 605 Menu View......................................... 606 Menu Search....................................... 609 Menu Run. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 611 Menu Watch........................................ 612 Menu Options...................................... 614 Menu Calls......................................... 616 Otras utilidades suministradas con Microsoft C. . . . . . . . . 616 CVPACK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 616 HELPMAKE. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 617 BIND . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 617 QH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 617 EXEHDR. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 617 EXP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 618
  • 18. RM .. . . . . . . . .. . . . . . . . . . . . . . . . 618 UNDEL......................................... 618 CAPITUW 17. Rutinas en Lenguaje Ensamblador. . . . . . . . 619 Introducci6n. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 619 Rutinas en lenguaje ensamblador en linea con sentencias C 620 El lenguaje ensamblador en bloques _asm. . . . . . . . . . . . . 622 COnstantes enteras................................ 623 Definici6n de datos............................... 623 Operadores y expresiones.......................... 623 Macros. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 625 Comentarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 625 Pseudoinstrucci6n _emit.......................... 625 Utilizando elementos de C en un bloque _asm. . . . . . . . . 626 Definici6n de macros en lenguaje ensamblador. . . . . . . . . . 629 Utilizando y salvando los registros. . . . . . . . . . . . . . . . . . . . . 630 Formas de utilizar un bloque _asm. . . . . . . . . . . . . . . . . . . 633 Llamando a funciones C. . . . . . . . . . . . . . . . . . . . . . . . . . . 633 Reemplazar una funci6n C. . . . . . . . . . . . . . . . . . . . . . . . . 634 Manipulaci6n de interrupciones. . . . . . . . . . . . . . . . . . . . . 635 Trabajando con punteros. . . . . . . . . . . . . . . . . . . . . . . . . . . 635 Trabajando con estructuras. . . . . . . . . . . . . . . . . . . . . . . . . 637 Salto a una etiqueta. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 640 Depuraci6n y optimizaci6n. . . . . . . . . . . . . . . . . . . . . . . . . . . 641 M6dulos separados en lenguaje ensamblador. . . . . . . . . . . . 641 Entrando al procedimiento. . . . . . . . . . . . . . . . . . . . . . . . . 642 Salvar el valor de los registros. . . . . . . . . . . . . . . . . . . . . . 642 Acceso a los parametros de la pila. . . . . . . . . . . . . . . . . . 643 Devolver un valor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 644 Llamando a un procedimiento en ensamblador des de C. . 644 CAPITUW 18. Comunicaciones. Servicios del DOS y del BIOS 649 Introducci6n. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 649 Funciones para Hamar al DOS. . . . . . . . . . . . . . . . . . . . . . . . 650 int86 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 650 int86x . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 651 intdos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 651 intdosx . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 652 segread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 653 bdos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 653 FP _OFF. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 653
  • 19. FP_SEG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 654 Un ejemplo de comunicaciones. . . . . . . . . . . . . . . . . . . . . 654 Un ejemplo de llamadas al DOS. . . . . . . . . . . . . . . . . . . . 656 Servicios del BIOS.................................. 658 Servicios del disco. _bios_disk. . . . . . . . . . . . . . . . . . . . 658 Listado del equipo. _bios_equiplist. . . . . . . . . . . . . . . . 660 Servicios del teclado. _bios_keybrd. . . . . . . . . . . . . . . . 660 Tamafio de la memoria. _bios-lIlemsize. . . . . . . . . . . . 661 Servicios del puerto paralelo. _bios_printer. . . . . . . . . 662 Servicios del puerto serie. _bios_serialcom. . . . . . . . . . 664 Panimetros de inicializaci6n del puerto. . . . . . . . . . . . . . 664 Servicios del reloj. _bios_timeofday............... 666 CAPITUW 19. C y DOS........ . . . . . . . . . . . . . . . . . . . . . . 669 Introducci6n. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 669 Directorios y caminos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 669 Definiciones generales. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 669 Camino (path). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 669 Redirecci6n de la salida. . . . . . . . . . . . . . . . . . . . . . . . . . . . 671 Redirecci6n de la entrada. . . . . . . . . . . . . . . . . . . . . . . . . . 671 Interconexi6n de entradas y salidas estandar. . . . . . . . . . 672 Prompt. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 672 Operaciones con directorios. . . . . . . . . . . . . . . . . . . . . . . . . . . 673 Especificaci6n de un path. . . . . . . . . . . . . . . . . . . . . . . . . . . . 673 Funciones para control de directorios. . . . . . . . . . . . . . . . . . 674 chdir. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 674 mkdir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 675 rmdir. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 675 getcwd. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 676 system. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 677 Funciones para manipulaci6n de ficheros. . . . . . . . . . . . . . . 679 access. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 679 chmod. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 680 chsize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 682 unlink. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 682 rename. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 683 setmode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 683 stat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 684 isatty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 685 utime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 685 Utilizando c6digos de salida. . . . . . . . . . . . . . . . . . . . . . . . . . 686
  • 20. Soporte DOS para llamadas al sistema. . . . . . . . . . . . . . . . . 687 Programas residentes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 692 CAPITUW 20. Control de Procesos. . . . . . . . . . . . . . . . . . . . . 697 Introducci6n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 697 Iniciaci6n de un proceso..... . . . . . . . . . . . . . . . . . . . . . . . . 698 Ejecuci6n de un proceso.... . . . . . . . . . . . . . . . . . . . . . . . . . 699 Terminaci6n de un proceso. . . . . . . . . . . . . . . . . . . . . . . . . . . 700 Funciones para control de procesos. . . . . . . . . . . . . . . . . . . . 701 Terminaci6n de procesos............................. 701 abort. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . 701 exit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 702 Ejecuci6n de procesos............................... 702 atexit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 702 onexit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 703 setjmp. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 704 longjmp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 704 _fpreset. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 705 signal. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 707 raise. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 710 Comenzar un nuevo proceso. . . . . . . . . . . . . . . . . . . . . . . . . . 712 execxxx . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 712 spawnxxx . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 716 getenv . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 720 putenv . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 720 CAPITUW 21. Gnificos con C. . . . . . . . . . . . . . . . . . . . . . . . . 725 Introducci6n. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 725 Estructura de un programa gnifico........... 726 Modalidades de video disponibles........... . . . . . . . . . . 728 Seleccionar la modalidad de video. . . . . . . . . . . . . . . . . . 729 Restaurar la modalidad de video original. . . . . . . . . . . . . 730 Almacenar caracteres. Funci6n sprintf. . . . . . . . . . . . . . . 730 Estructura para almacenar la configuraci6n de video. . 731 Colores en modo texto. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 734 Colores en modo gnifico utilizando CGA. . . . . . . . . . . . . . 736 Colores en modo gnifico utilizando VGA, MCGA y EGA 739
  • 21. Especificaci6n de coordenadas. . . . . . . . . . . . . . . . . . . . . . . . 740 CO'ordenadas fisicas............................... 740 Coordenadas 16gicas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 740 Volviendo a coordenadas fisicas. . . . 741 Convertir coordenadas fisicas a 16gicas y viceversa. . . . 741 Funciones gnificas .... ; . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 742 Funciones relativas a configuraci6n. . . . . . . . . . . . . . . . . . . . 742 Funciones relativas a coordenadas. . . . . . . . . . . . . . . . . . . . . 745 Funciones referentes al uso de paletas. . . . . . . . . . . . . . . . . . 748 Funciones para obtener 0 poner atributos. . . . . . . . . . . . . . 749 Creaci6n de una mascara. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 753 Visualizar imagenes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 754 Visualizar texto..................................... 761 Animaci6n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 764 Animaci6n de un objeto............................. 766 Ejercicio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 771 Coordenadas reales en una ventana. . . . . . . . . . . . . . . . . . . . 775 Funciones para un sistema de coordenadas cartesianas. . . 779 CAPITUW 22. Presentaciones Gnificas. . . . . . . . . . . . . . . . . . 785 Introducci6n. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 785 Estructura de un programa para presentaciones graficas. . 785 Funciones para presentaciones graficas. . . . . . . . . . . . . . . . . 787 Tipos de letras (fonts)............................... 796 Funciones para representar distintos tipos de letras. . . . . . 797 CAPITUW 23. Utilizaci6n del PWB.................... 805 PWB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 805 Menus de PWB. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 806 El menu principal....... . . . . . . . . . . . . . . . . . . . . . . . . . . . . 808 PWB con rat6n (mouse)............................. 809 Ventanas de dialogo................................. 810 El menu File....................................... 811 Caracteristicas del editor del PWB... . . . . . 814 Seleccionando texto............................... 815 Operaciones con el editor............................ 816 Mover el cursor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 816 Scroll. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 817 Insertar. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 817
  • 22. Borrar '. . . . . . . . . . . . . . . . 817 Seleccionar. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 817 Copiar, mover 0 borrar el texto seleccionado. . . . . . . . . 817 Buscar y sustitu~..... . . . . . . . . . . . . . . . . . . . . . . . . . . . . 818 Teclas de funci6n................................. 818 Menu Edit......................................... 818 Moviendo y copiando texto. . . . . . . . . . . . . . . . . . . . . . . . . . . 821 Menu View......................................... 822 Menu Search....................................... 824 Copiar texto de otros ficheros. . . . . . . . . . . . . . . . . . . . . . . . . 829 Programas y m6dulos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 830 Menu Make........................................ 831 Menu Run.. . . . . . . . .. . . . . . . . . 835 Menu Options...................................... 836 Menu Browse....................................... 842 Menu Help......................................... 844 CAPITUW 24. Instalaci6n de Microsoft C. . . . . . . . . . . . . . . 847 Sistema Requerido. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 847 Caracteristicas aportadas a partir de la versi6n 6. . . . . . . . 848 Instalaci6n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 848 Ejecuci6n del programa SETUP. . . . . . . . . . . . . . . . . . . . . . . 849 APENDICE A. Ficheros .h de C........................ 857 Ficheros de cabecera, variables globales y tipos 857 APENDICE B. C6digos de caracteres (ASCII). . . . . . . . . . . . 869 C6digos extendidos.................................. 875 C6digos del teclado. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 876
  • 23. Saludo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 Cuadrados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 Paso de grados Centigrados a Fahrenheit (F=9/5*C+32). . . . . 90 Funci6n intercambio. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 Valor mayor de tres valores dados. . . . . . . . . . . . . . . . . . . . . . . . .. 100 Ambito de las variables. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 102 Declaraci6n de extern a nivel externo. . . . . . . . . . . . . . . . . . . . . .. 104 Declaraciones a nivel interno. . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 107 Leyendo datos de la entrada estandar. . . . . . . . . . . . . . . . . . . . . .. 123 Capital e Intereses....................................... 127 Soluci6n de una ecuaci6n de segundo grado. . . . . . . . . . . . . . . .. 128 Menor de tres numeros a, bye. . . . . . . . . . . . . . . . . . . . . . . . . . .. 133 Cantidad a pagar en funci6n de la cantidad comprada. . . . . . .. 134
  • 24. Dias correspondientes a un mes de un ano dado. . . . . . . . . . . .. 137 Importe por vehkulo al circular por una autopista. . . . . . . . . .. 138 Simulaci6n de una maquina sumadora. . . . . . . . . . . . . . . . . . . . .. 141 C6digo ASCII de un caracter. . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 141 Cuadrados que se pueden expresar como suma de otros dos .. 142 Raiz cuadrada de un numero. Metodo de Newton. . . . . . . . . . .. 143 Construir un triangulo de n filas con caracteres. . . . . . . . . . . . .. 147 Tablero de Ajedrez. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 148 Areas de circulos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 150 goto salir............................................... 151 Calcular las rakes de una ecuaci6n de 2? grado. . . . . . . . . . . .. 152 Palabras con cuatro 0 mas vocales diferentes. . . . . . . . . . . . . . .. 154 Contar caracteres, palabras y lineas en un texto. . . . . . . . . . . . .. 155 Simulaci6n de una calculadora............................ 156 Tirada de un dado. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 159 Valores entre 0 y 1....................................... 160 Numeros pseudoaleatorios - Volumen de una esfera. . . . . . . . .. 161 Creaci6n de un array unidimensional. . . . . . . . . . . . . . . . . . . . . .. 168 Nota media del curso. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 169 Crear un array bidimensional. . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 170 Tanto por ciento de aprobados. . . . . . . . . . . . . . . . . . . . . . . . . . . .. 171 Encontrar el maximo y e1 minimo de un conjunto de valores. 172 Limpiar el buffer asociado con stdin. . . . . . . . . . . . . . . . . . . . . .. 177 Examinar una cadena de caracteres almacenada en memoria.. 178 Linea de texto y calcular su longitud. . . . . . . . . . . . . . . . . . . . . .. 179 Conversi6n de mayusculas a minusculas. . . . . . . . . . . . . . . . . . .. 181 Leer una lista de nombres. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 182 Funciones para manipular cadenas de caracteres. . . . . . . . . . . .. 185 Funci6n strtok. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 188 Funciones para clasificaci6n y conversi6n de datos. . . . . . . . . .. 196 Calcular el 070 de aprobados y suspensos. . . . . . . . . . . . . . . . . . .. 200 Biblioteca compuesta por libros y revistas. . . . . . . . . . . . . . . . . .. 204 Campos de bits : . . . . . . . . . . . . . . . . . . . . . . .. 208 Tabla de frecuencias de letras adyacentes en un texto. . . . . . . .. 211 Cambio de atributos utilizando campos de bits. . . . . . . . . . . . .. 212 Manipulaci6n de un valor float bit a bit. . . . . . . . . . . . . . . . . . .. 216
  • 25. Visualizar el contenido de un bloque de memoria. . . . . . . . . . .. 224 Escribir los valores de un array. . . . . . . . . . . . . . . . . . . . . . . . . . .. 226 Funci6n "longstr" que devuelve la longitud de una cadena. .. 228 Funci6n para copiar una cadena en otra. . . . . . . . . . . . . . . . . . .. 230 Array de dos dimensiones. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 234 Funci6n que devuelve el nombre del mes 1 a 12 dado. . . . . . . .. 236 Clasificar cadenas de caracteres. . . . . . . . . . . . . . . . . . . . . . . . . . .. 237 Asignaci6n de espacio para cadenas de caracteres. . . . . . . . . . .. 241 Asignaci6n de espacio para un array de enteros. . . . . . . . . . . . .. 243 Funciones real/oc y free. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 245 Punteros a estructuras. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 247 Busqueda Secuencial..................................... 260 Programa Alumnos...................................... 262 Leer una fecha, verificarla y escribirla con formato. . . . . . . . .. 265 Paso de parametros por referencia, utilizando punteros. . . . . .. 268 Pasando arrays a funciones. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 269 Linea de texto mas larga. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 270 Pasando punteros a funciones............................. 272 Argumentos en linea de 6rdenes. . . . . . . . . . . . . . . . . . . . . . . . . .. 275 Funciones con un numero de argumentos variable. . . . . . . . . . .. 278 Calculo del factorial de un numero. . . . . . . . . . . . . . . . . . . . . . . .. 280 Fusionar dos listas clasificadas. . . . . . . . . . . . . . . . . . . . . . . . . . . .. 282 Numero de veces que aparece cada letra en una cadena. . . . . .. 284 Calendario perpetuo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 286 Punteros a funciones..................................... 290 Funci6n matherr......................................... 298 Generar un numero aleatoric cada segundo. . . . . . . . . . . . . . . .. 301 Clasificaci6n de los elementos de una lista. . . . . . . . . . . . . . . . .. 304 Busqueda de un elemento en una lista. . . . . . . . . . . . . . . . . . . . .. 307 Clasificar lexicograficamente 0 numericamente. . . . . . . . . . . . . .. 309 Enscribir datos en un fichero caracter a caracter. . . . . . . . . . . .. 327 Leer datos de un fichero caracter a caracter. . . . . . . . . . . . . . . .. 328
  • 26. Contar los caracteres de un fichero. . . . . . . . . . . . . . . . . . . . . . . .. 329 Escribir y leer datos en un fichero palabra a palabra. . . . . . . .. 331 Entrada/salida de cadenas de caracteres. . . . . . . . . . . . . . . . . . . .. 333 Escribir el contenido de un fichero por la impresora. . . . . . . . .. 335 Escribir y leer datos con formato en un fichero. . . . . . . . . . . . .. 336 Escribir y leer datos en un fichero registro a registro 339 Control del buffer asociado a un fichero. . . . . . . . . . . . . . . . . . .. 342 Acceso aleatorio a un fichero. . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 350 Funci6n buscar.......................................... 353 Reproducci6n de la orden copy. . . . . . . . . . . . . . . . . . . . . . . . . . .. 364 Proceso de ficheros aleatorios con funciones de bajo nivel. . .. 367 Funciones para 1a consola. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 378 Presentaci6n de un menu......... . . . . . . . . . . . . . . . . . . . . . . .. 381 Emitir un sonido por el altavoz. . . . . . . . . . . . . . . . . . . . . . . . . . .. 387 Compilaci6n condicional. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 397 Utilizando ficheros de cabecera. . . . . . . . . . . . . . . . . . . . . . . . . . .. 403 Utilizando el preprocesador............................... 405 Medir tiempos de ejecuci6n. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 406 Funciones intrinsecas..................................... 407 Macros y Funciones. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 408 Crear objetos.............................. . . . . . . . . . . . . .. 417 Operaciones con listas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 423 Programa calculadora. Aplicaci6n de pilas. . . . . . . . . . . . . . . . .. 429 Realizaci6n de sucesos. Aplicaci6n de colas. . . . . . . . . . . . . . . .. 433 Listas circulares. Suma de ecuaciones algebraicas. . . . . . . . . . . .. 439
  • 27. Lista doblemente enlazada ordenada ascendentemente. . . . . . .. 444 Funciones recursivas para recorrer un arbol. . . . . . . . . . . . . . . .. 453 Arbol binario de busqueda. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 455 Borrar un nodo cualquiera de un arbol. . . . . . . . . . . . . . . . . . . .. 459 Arbol perfectamente equilibrado......................... .. 461 Funci6n de Ackerman recursiva. . . . . . . . . . . . . . . . . . . . . . . . . . .. 467 Funci6n de Ackerman no recursiva. . . . . . . . . . . . . . . . . . . . . . . .. 468 Torres de Hanoi......................................... 472 Clasificar lineas de texto. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 474 Ordenaci6n por inserci6n................................. 478 Ordenaci6n Quicksort.................................... 481 Busqueda Binaria........................................ 486 Ordenar un fichero. Acceso secuencial. . . . . . . . . . . . . . . . . . . . .. 490 Metodo de ordenaci6n Quicksort para ficheros... . . . . . . . . . .. 495 Metodo hash abierto............................ 503 Rellenar una ventana en la pantalla con el caracter ,car. . . . . .. 512 Punteros nulos.......................................... 524 Variables y punteros basados en un segmento constante. . . . . .. 532 Punteros basados en un segmento variable. . . . . . . . . . . . . . . . .. 533 Puntero basado en otro puntero. . . . . . . . . . . . . . . . . . . . . . . . . .. 536 Puntero basado en void. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 538 Puntero basado en su propio segmento................... .. 539 Manipulaci6n de areas de memoria , , . . .. 544 Un ejemplo de trabajo con librerias. . . . . . . . . . . . . . . . . . . . . . .. 577 Fichero de descripciones. NMAKE......................... 580 Un ejemplo de trabajo con la utilidad NMAKE. . . . . . . . . . . . .. 593
  • 28. Pagina activa.... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 620 Pulsar una tecla para continuar. . . . . . . . . . . . . . . . . . . . . . . . . . .. 621 Posicionar el cursor en la fila y columna indicadas. . . . . . . . . .. 627 Raiz cuadrada de un numero entero (_asm). . . . . . . . . . . . . . .. 631 Llamando a funciones C desde un bloque _asm. . . . . . . . . . .. 633 . Inicializar un array. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 634 Utilizaci6n de punteros en bloques _asm. . . . . . . . . . . . . . . . . .. 635 Trabajando con estructuras desde un bloque _asm. . . . . . . . .. 638 Utilizando etiquetas C y _asm. . . . . . . . . . . . . . . . . . . . . . . . . . .. 640 Raiz cuadrada de un numero entero. . . . . . . . . . . . . . . . . . . . . . .. 645 Leer datos del puerto serie. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 654 Llamadas al DOS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 656 Servicios de impresora. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 662 Servicios del BIOS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 666 Visualizar los ficheros .EXE de un directorio dado. . . . . . . . . .. 676 Ejecutar 6rdenes del DOS con la funci6n system. . . . . . . . . . . .. 678 Cambiando los atributos de un fichero...... . 681 Programa residente (TSR). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 693 Funci6n atexit........................................... 703 Manipulaci6n de errores en coma flotante. . . . . . . . . . . . . . . . . .. 705 Manipulaci6n de senales de interrupci6n. . . . . . . . . . . . . . . . . . .. 710 Utilizaci6n de la funci6n exec. . . . . . . . . . . . . . . . . . . . . . . . . . . .. 714 Utilizaci6n de la funci6n spawn. . . . . . . . . . . . . . . . . . . . . . . . . . .. 718
  • 29. Estructura de un programa gnifico. . . . . . . . . . . . . . . . . . . . . . . .. 727 Modos de video disponibles en tu ordenador. . . . . . . . . . . . . . .. 731 Color de fondo y color del texto. . . . . . . . . . . . . . . . . . . . . . . . . .. 735 Color de fondo y de primer plano. . . . . . . . . . . . . . . . . . . . . . . .. 737 Sistema de coordenadas 16gicas.. . . . . . . . . . . . . . . . . . . . . . . . . .. 740 Alternar entre paginas de video. . . . . . . . . . . . . . . . . . . . . . . . . . .. 745 Portada para Microsoft C. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 756 Colorear figuras......................................... 759 Ventanas de texto..................... . . . . . . . . . . . . . . . . . .. 763 Funciones para animaci6n de figuras. . ...•.. 767 Animaci6n - pe10ta rodando. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 769 Choque de una pelota contra una barrera. . . . . . . . . . . . . . . . . .. 770 Bola de billar........................................... (72 Representaci6n de la funci6n radio = cos(2 * alfa). . . . . . . . . .. 776 Representaci6n de la funci6n Y=2*cos(X)A2-sin(5+X). . . . . . .. 777 Representaci6n grafica utilizando tres ventanas. . . . . . . . . . . . .. 780 Presentaciones graficas - diagramas de barras y sectores. . . . .. 789 Presentaciones graficas multiples.............. 791 Presentaciones graficas por puntos......................... 794 Demostraci6n de tipos de letras. . . . . . . . . . . . . . . . . . . . . . . . . . .. 800
  • 30. Este es un libro que pretende cubrir dos objetivos: ser un manual para aprender C y ser una guia para el usuario de C. La forma en la que se ha estructurado ellibro ha sido precisamente, pensando en ese primer objetivo. El libro se ha dividido en veinticuatro capitulos que van presentando ellenguaje poco a poco, empezando por 10 mas sencillo, presentando cada tema a su tiempo, hasta llegar al final donde se habra visto todo 10 referente a la programacion en C y utilidades, sin apenas encontrar dificultades. El segundo objetivo queda conseguido al incluir en este libro todo 10 que un usuario quiere saber respecto a C, esto es, explicacion y desarrollo de todas las sentencias, estructuras, punteros, funciones, ficheros y direc- trices para compilador. Se completa el estudio de C con un capitulo refe- rente a estructuras dinamicas y otro de algoritmos de uso comun. Final- mente se estudian tecnicas avanzadas que abordan la materia referente a manejo de la memoria, compilacion yenlace, librerias, rutinas en lenguaje ensamblador, utilidades como el depurador de C, servicios del DOS y del BIOS, grcificos y una explicacion para el manejo del entorno de programa- cion del paquete de Microsoft C. Microsoft eversion 6, producto desarrollado por Microsoft, es un com- pilador C desarrollado para los ordenadores personales IBM y compati-
  • 31. 1. Introducci6n al lenguaje C 2. Elementos del lenguaje C 3. Comenzando con ellenguaje C 4. Sentencias de control 5. Tipos estructurados de datos 6. Punteros 7. Funciones 8. Funciones estandar de E/S 9. Funciones de E/S de bajo nivel 10. Funciones para la consola y puertos de entrada salida 11. El preprocesador de C 12. Estructuras dinamicas de datos 13. Algoritmos recursivos, de ordenaci6n y de busqueda 14. Manejo de la memoria 15. Compilar y enlazar 16. Librerias y utilidades del compilador 17. Rutinas en lenguaje ensamblador 18. Comunicaciones. Servicios del DOS y del BIOS 19. C y DOS 20. Control de procesos 21. Grcificos con C 22. Representaciones grcificas 23. Utilizaci6n del PWB 24. Instalaci6n de Microsoft C A. Ficheros .h de C B. C6digos de caracteres (ASCII) C. Indice alfabetico bles IBM. Este compilador ademas de correr bajo MSDOS y OS/2, inclu- ye tambien soporte para Microsoft Windows. Este libro posee varias caracteristicas dignas de resaltar. Es breve en teoria y abundante en ejemplos, 10 que Ie hara aun mas facil: el aprendiza- je para aquellas personas que quieren iniciarse en el tema, 0 la busqueda y compresi6n de un tema puntual para aquellas otras personas entendidas en programaci6n C. La metodologia utilizada en el desarrollo de los pro- gramas es la descomposici6n arriba-abajo (top down). Es un libro facil de entender. La materia total que compone la Enciclopedia dellenguaje C, se ha dividido en los siguientes capitulos y apendices:
  • 32. Todo esto se ha documentado con alrededor de 175PROBLEMAS RE- SUELTOS, utilizando la programaci6n estructurada, muchos de ellos vali- dos como parte integrante en el desarrollo de aplicaciones. He recibido ayuda de algunas personas durante la preparaci6n de este libro, y por ello estoy francamente agradecido. En especial quiero expresar mi agradecimiento a la firma Microsoft, por la ayuda material que me ha prestado.
  • 33. PARTE 1 Programaci6n con el Lenguaje C • Introducci6n al Lenguaje C • Elementos del Lenguaje C • Comenzando con el Lenguaje C • Sentencias de Control • Tipos Estructurados de Datos • Punteros • Funciones
  • 34. EI C es un lenguaje de programaci6n de prop6sito general. Sus principales caracteristicas son: - Programaci6n estructurada. - Economia en las expresiones. - Abundancia en operadores y tipos de datos. Codificaci6n en alto y bajo nivel simultaneamente. Reemplaza ventajosamente la programaci6n en ensamblador. Utilizaci6n natural de las funciones primitivas del sistema. No esta orientado a ningun area en especial. Producci6n de c6digo objeto altamente optimizado. - Facilidad de aprendizaje. Ellenguaje C naci6 en los Laboratorios Bell de AT&Ty ha sido estre- chamente asociado con el sistema operativo UNIX, ya que su desarrollo se realiz6 en este sistema y debido a que tanto UNIX como el propio com- pilador C y la casi totalidad de los programas y herramientas de UNIX, fueron escritos en C. Su eficiencia y claridad han hecho que el lenguaje ensamblador apenas haya sido utilizado en UNIX.
  • 35. Este lenguaje esta inspirado en ellenguaje B escrito por Ken Thomp- son en 1970con intenci6n de recodificar el UNIX, que en la fase de arran- que estaba escrito en ensamblador, en vistas a su transportabilidad a otras maquinas. B era un lenguaje evolucionado e independiente de la maquina, inspirado en ellenguaje BCPL concebido por Martin Richard en 1967. En 1972,Dennis Ritchie, toma el relevoy modifica ellenguaje B, crean- do ellenguaje C y reescribiendo el UNIX en dicho lenguaje. La novedad que proporcion6 ellenguaje C sobre el B fue el disefio de tipos y estructu- ras de datos. Los tipos basicos de datos eran char (caracter), int (entero),jloat (reales en simple precisi6n) y double (reales en doble precisi6n). Posteriormente se afiadieron los tipos short (enteros de longitud ~ longitud de un int), long (enteros de longitud ~ longitud de un int), unsigned (enteros sin sig- no) y enumeraciones. Los tipos estructurados basicos de C son las estruc- turas, las uniones y los arrays. Estos permiten la definici6n y declaraci6n de tipos derivados de mayor complejidad. Las instrucciones de control de flujo de C son las habituales de la pro- gramaci6n estructurada: if, for, while, switch-case, todas incluidas en su predecesor BCPL. C incluye tambien punteros y funciones. Los argumentos de las fun- ciones se pasan por valor, esto es copiando su valor, 10 cual hace que no se modifiquen los valores de los argumentos en la Hamada. Cuando se de- sea modificar los argumentos en la Hamada, estos se pasan por referencia, es decir, se pasan las direcciones de los argumentos. Por otra parte, cual- quier funci6n puede ser Hamada recursivamente. Una de las peculiaridades de C es su riqueza de operadores. Puede decirse que practicamente dispone de un operador para cada una de las posibles operaciones en c6digo maquina. Hay toda una serie de operaciones que pueden hacerse con ellenguaje C, que realmente no estan incluidas en el compilador propiamente dicho, sino que las realiza un preprocesador justa antes de cada compilaci6n. Las dos mas importantes son # define (directriz de sustituci6n simb6lica 0 de definici6n) e # include (directriz de inclusi6n en e1 fichero fuente).
  • 36. Finalmente, C, que ha sido pensado para ser altamente transportable y para programar 10improgramable, igual que otros lenguajes tiene sus in- convenientes. Carece de instrucciones de entrada/salida, de instrucciones para manejo de cadenas de caracteres, con 10 que este trabajo queda para la libreria de rutinas, con la consiguiente perdida de transportabilidad. La excesivalibertad en la escritura de los programas puede llevar a errores en la programaci6n que, por ser correctos sintacticamente no se detectan a simple vista. Por otra parte las precedencias de los operadores convierten a veces las expresiones en pequenos rompecabezas. A pesar de todo, C ha demostrado ser un lenguaje extremadamente eficaz y expresivo. Este lenguaje ha evolucionado paralelamente a UNIX, que a su vez ha pasado por diversas versiones entre las que destaca la de Microsoft con su XENIX para micros de 16 bits. En este apartado se van a exponer los pasos a seguir en la realizaci6n de un programa, por medio de un ejemplo. La siguiente figura, representa es- tos pasos en el orden en el que hay que ejecutarlos. El ejemplo de la figura indica que una vez editados los ficheros fuente a.c y b.c, son compilados obteniendose los ficheros objeto a.obj y b.obj los cuales son enlazados con el fichero c.obj, con la libreria d.lib y con las li- brerias del sistema .lib dando lugar a un unico fichero ejecutable a.exe. La orden correspondiente para compilar y enlazar los ficheros expuestos en este ejemplo, es la siguiente: Para ejecutar el fichero a.exe resultante, escribir el nombre de dicho fichero (a), y pulsar Enter.
  • 37. C 0 E a.c M a.obj D P I I T L 0 A D R b.c 0 b.obj R E N L c.obj A a.exe Z A D 0 d.lib R Para editar un programa, primeramente llamaremos, para su ejecucion, al programa editor 0 procesador de textos que vayamos a utilizar. Podemos utilizar el procesador de textos suministrado con el compilador 0 nuestro propio procesador (ver capitulo 23). El nombre del fichero para salvar el programa en el disco, debe tener como extension .c. El paso siguiente, es escribir el texto correspondiente al program a fuen- te. Cada sentencia dellenguaje C finaliza con un punto y coma y cada li- nea del programa la finalizamos pulsando la tecla Enter. Como ejercicio para practicar 10 hasta ahora expuesto, escribir el si- guiente ejemplo:
  • 38. CAPITULO I: INTRODUCCION AL LENGUAJE C 43 # include <stdio.h > # include <stdlib.h> main( ) ( char *mensajel char *mensaje2 char nombre[50]; HBienvenido a C':· HTe alegrard el haberme conocido"; system(Hcls"); printft';,Cudl es tu nombre? "); gets(nombre); printj("n%s %sn%sn': mensajel, nombre, mensaje2); J Comentamos brevemente cada linea de este programa. No apurarse si al- gunos de los terminos no quedan muy claros ya que todo ellos se venin con detalle en capitulos posteriores. Las dos primeras lineas incluyen las declaraciones necesarias para las funciones que aparecen en el programa. Estas funciones son: system( ), printf( ) y gets( ). A continuaci6n se escribe la funci6n principal main( ). Las dos pri- meras Hneas de esta, definen las cadenas de caracteres mensajel y mensaje2 y la siguiente linea define la cadena de caracteres nombre para contener 49 caracteres mas el caracter de "fin de cadena" que aftade C automati- camente. La funci6n printj( ) escribe el contenido de las variables especificadas en la misma. La funci6n gets( ) permite introducir datos a traves del teclado para la variable especificada, en este caso nombre.
  • 39. El programa editado esta ahora en la memoria. Para que este trabajo pue- da tener contir.uidad, el programa escrito se debe grabar en el disco utili- zando la orden correspondiente del editor. El siguiente paso es compilar el programa, esto es, traducir el programa fuente a lenguaje maquina para posteriormente enlazarlo con las librerias de C y obtener as! un programa ejecutable. Estas operaciones, compilar y enlazar, se efectuan mediante la orden c/. Al compilar un programa, se nos pueden presentar errores de compi- lacion, debidos a que el programa escrito no se adapta a la sintaxis y reglas del compilador. Estos errores se iran corrigiendo hasta obtener una com- pilacion sin errores. Cada vez que se realiza el proceso de compilacion y enlace del programa actual, C genera automaticamente sobre el disco un fichero con extension .exe. Este fichero puede ser ejecutado directamente desde el DOS, sin el soporte de C, escribiendo el nombre del fichero .exe despues del prompt del DOS y pulsando Enter a continuacion. Cuando se crea un fichero ejecutable, C utiliza primero el compilador para compilar el programa fuente, dando lugar a un fichero intermedio co- nocido como fichero objeto (.obj). A continuacion C utiliza el programa Iink.exe para unir, en un unico fichero ejecutable, el modulo 0 los modulos del programa compilados separadamente y las rutinas de las librerias del compilador C que el programa necesite.
  • 40. Al ejecutar el programa, pueden ocurrir errores durante la ejecucion. Por ejemplo, puede darse una division par cero. Estos errores solamente pueden ser detectados por C cuando se ejecuta el programa y senin notifi- cados con el correspondiente mensaje de error. Hay otro tipo de errores que no dan lugar a mensaje alguno. Por ejem- plo: un programa que no termine nunca de ejecutarse, debido a que pre- senta un lazo, donde no se llega a dar la condicion de terminacion. Para detener la ejecucion se tienen que pulsar las teclas Ctrl +C. Un programa una vez ejecutado puede dar lugar a una solucion incorrec- ta. Este caso exige un analisis minucioso de como se desarrolla el progra- ma en su ejecucion; esto es, hay que entrar en la fase de depuracion del programa. La forma mas sencilla y eficaz para realizar este proceso, es utilizar un programa depurador. En el capitulo 16, se explica como utilizar el de- purador Code View de Microsoft. Vamos a preparar un programa formado par un solo modulo fuente, para depurarlo. El primer paso sera editar el programa. Como ejemplo escribit el siguiente programa, e1cual, imprime el valor y su cuadrado, de cada uno de los elementos de una matriz numerica de 5 filas y 3 columnas, y cuenta e imprime el numero de elementos que son pares. #include <stdio.h> #define FILAS 5 #define COLS 3
  • 41. void display( iot n ) [ iot cuadrado; cuadrado = n *n; printj("el cuadrado de %2d es %3d n': n, cuadrado); J iot numero_par( iot x ) [ if (x % 2 = = 0) retu rn (1); else return (0); main( ) [ static iot a[FILAS][COLS] = [1,2,3,4,5,6, 7,8,9,10,11,12,13,14,15 j; iot fila, columna; for (fila = 0; fila < FILAS; fila + +) for (columna = 0; columna < COLS; columna + +) [ display( aUila][columna] ); if ( numero~ar(aUila][columna]) ) numeros~ares+ +; J printj(" n nTotal numeros pares: %d n': numeros_pares); j Una vez editado salvamos el programa en el disco. Llamemosle por ejemplo progOl02.c.
  • 42. Fijandonos en la funci6n principal, main(), vemos que definimos una ma- triz cuadrada cca': para a continuaci6n recorrerla elemento a elemento por filas. Esta funci6n principal llama a la funci6n display( ) que escribe el va- lor del elemento objeto de analisis y su cuadrado, y llama tambien a la fun- cion numero_par( ) que indica si el numero es 0 no par. En el caso de que sea par incrementamos en una unidad el contador numeros_pares. Una vez que se han analizado todos los elementos de la matriz, se es- cribe el numero de valores pares encontrados. Como siguiente paso, compilaremos el programa con las opciones IZi y IOd. La opcion IZi hace que se incluya en el fichero ejecutable resultante, informacion necesaria para realizar la depuracion y la opcion IOd impide la optimizacion, la cual puede dificultar la depuracion. Cuando finaliza el proceso de compilacion y enlace, invocamos al depura- dor (debug). Las operaciones minimas que debe incluir un depurador son las si- guientes:
  • 43. Permite ver la sentencia del programa que es ejecutada. Code View incluye las siguientes opciones: Ejecutar una sentencia cada vez, incluidas funciones definidas por el usuario. Esta modalidad se activa y se continua, pulsan- do la tecla F8. Si no queremos que las funciones se ejecuten sen- tencia a sentencia pero sf la funci6n principal main( ), utilizar la tecla FIO. Si pulsamos la tecla F5, la ejecuci6n continua hasta el final del programa 0 hasta el primer punto de parada, si este existe. Un punto de parada es una pausa que se hace en un lugar determi- nado dentro del programa. Esto permite testear los valores de las variables en ese instante. Colocar los puntos de parada donde se sos- peche que esta el error. Para poner 0 quitar una pausa, se coloca el cursor en ellugar don- de va a tener lugar la pausa y se pulsa F9. Las expresiones de seguimiento permiten observar los valores, de las variables 0 de expresiones del programa, mientras este se ejecuta (6r- denes Add Watch, Delete Watcha, ... ). Ejecutar la orden Add Watch ... y escribir en el recuadro corres- pondiente, fila. Realizar la misma operaci6n para incluir en la ventana de seguimiento columna y aUilaJ[columnaj. Continuar la ejecuci6n pulsando F8 0 FIO. Si se pulsa la tecla F5, la ejecuci6n del programa continua hasta el final del pro- grama 0 hasta un punto de parada si se encuentra.
  • 44. El nombre de un fichero consta de dos partes: el nombre base que puede tener hasta ocho caracteres y la extension que puede tener hasta tres carac- teres y va separada del nombre base por un punto. C identifica las siguien- tes extensiones con los ficheros que a continuaci6n se indican: .obj fichero resultante de la compilaci6n de un fichero fuente. No es ejecutable . .mak fichero que contiene una lista de m6dulos y las acciones que con ellos debe hacerse para construir el programa final. Cuando se especifica el nombre de un fichero sin extensi6n, C asume por defecto la extensi6n .obj.
  • 45. Las palabras clave aparecenln en negra y deben escribirse exactamente como aparecen. EI texto que no aparece en negra, significa que ahi debe ponerse la informacion indicada por ese texto. Los puntos suspensivos "..." indican que pueden aparecer mas elementos de la misma forma. Cuando dos 0 mas opciones aparecen entre Haves "{ ]" separadas por "I", se elige una, la necesaria dentro de la sentencia.
  • 46. Estos caracteres son utilizados para formar las constantes, los identi- ficadores y las palabras clave de C. El compilador C trata las letras mayusculas y minusculas como carac- teres diferentes. Por ejemplo los identificadores Pi y PI son diferentes. Espacio en blanco, tabulador horizontal (HT), tabulador vertical (VT), avan- ce de pagina (FF), y nueva linea (LF 0 CR + LF) son caracteres denomina- dos espacios en blanco, porque la labor que desempefian es la misma que la del espacio en blanco, esto es, actuar como separadores entre los ele- mentos de un programa. Los espacios en blanco en exceso son ignorados por el compilador, 10 cual nos permite escribir programas mas legibles. EI caracler Ctr! +Z bajo DOS, (equivalente a Ctrl +0 bajo UNIX) es tratado POl' el compiIador como un indicador de fin de fichero (End Of File).
  • 47. Los caracteres tambien pueden ser representados por secuencias de escape. Una secuencia de escape esta formada por el caracter seguido de una letra 0 de una combinaci6n de digitos. Son utilizadas para acciones como nueva linea, tabular y para representar caracteres no imprimibles. n t v b r f a ' Nueva linea Tab horizontal Tab vertical (s610 para impresora) Backspace (retroceso) Retorno de carro Alimentaci6n de pagina (s610 para impresora) Bell (alerta, pitido) Comilla simple Comilla doble Backslash (barra invertida) Canicter ASCII. Representaci6n octal Caracter ASCII. Representaci6n hexadecimal ddd xdd
  • 48. Hay varios tipos fundamentales de datos. Los ficheros de cabecera Iimits.h y f1oat.h especifican los valores maximo y minima para cad a tipo. Los po- demos clasificar en: Tipos enteros: char, short, int, long y enum. Tipos reales: float, double y long double. Otros: void. Cada tipo entero puede ser calificado por las palabras clave signed 0 unsigned, 10 que da lugar a tener disponibles los siguientes tipos extras: signed char, unsigned char signed short, unsigned short signed int, unsigned int signed long, unsigned long Un entero calificado signed es un entero con signo, esto es, un ntlme- ro entero positivo 0 negativo. Un numero entero calificado unsigned es un numero entero sin signo, el cual es manipulado como un numero entero positivo. Si los calificadores signed y unsigned se utilizan sin un tipo especffi- co, se asume el tipo into Por este motivo, las siguientes declaraciones son equivalentes: signed x; signed int X; unsigned y; unsigned int y; El tipo char es utilizado para almacenar un valor entero en el rango -128 a 127, correspondiente a un caracter del c6digo ASCII. Solamente los va- lores 0 a 127 son equivalentes a un caracter.
  • 49. De forma similar el tipo unsigned char puede almacenar valores en el rango de 0 a 255, valores correspondientes a los numeros ordinales de 10s 256 caracteres ASCII. Este ejemplo declara una variable car de tipo char, capaz de contener un canicter cuyo c6digo ASCII se correspondeni con un valor entero entre o y 127. Otros ejemplos son: char a = 'z'; signed char b = Ox07; unsigned char c = 32; De forma similar el tipo unsigned short puede almacenar valores en el rango de 0 a 65535 (0 a 2EI6-1). Este ejemplo declara i y j, como variables enteras con posibilidad de tDmar vaDres entre -'3216'il y '1'2161. Otros ejempos son: short int a = -500; signed short b = 1990; unsigned short int c = OxfOOO;
  • 50. Un entero es para C un numero sin punta decimal. El rango de valores de- pende de la maquina. Igualmente ocurre con el tipo unsigned into Para una maquina con un procesador de 16 bits el rango de valores es de: -32768 a 32767 (-2EI5 a 2EI5-1) para el tipo into o a 65535 ( 0 a 2EI6-1) para el tipo unsigmld. El uso de enteros produce un c6digo compacta y rapido. Para una ma- quina de 16 bits este tipo es equivalente al tipo short y solamente oc4pa 2 bytes de memoria. En general: Este ejemplo declara las variables n y x de tipo entero. Otros ejemplos son: int a = 2000; signed int b = -30; unsigned int c = Oxf003; Este tipo de numeros es id6neo para aplicaciones de gesti6n. Al igual que los enteros, son numeros sin punta decimal comprendidos en el rango de: -2147483648 a 2147483647 (-2E31 a 2E31-1) para el tipo long. o a 4294967295 (0 a 2E32-1) para el tipo unsigned long.
  • 51. Este ejemplo declara las variables n y m de tipo entero, pudiendo to- mar valores entre -2147483648 y 2147483647. Otros ejemplos son: long a = -IL; signed long b = 125; unsigned long int c = Oxlj00230j; La declaraci6n de un tipo enumerado es simplemente una lista de valores que pueden ser tornados por una variable de ese tipo. Los valores del tipo enumerado se representanin con identificadores, que senin las constantes del nuevo tipo. tunes, martes, miercotes, jueves, viernes, sabado, domingo hoy;
  • 52. Este ejemplo declara las variables hoy y ayer del tipo enumerado dia----semana. Estas variables pueden tomar cualquier valor de los especi- ficados, lunes ... domingo. El valor ordinal de lunes es O. Los elementos que aparecen enumerados en la lista son considerados como constantes enteras. Crear una enumeraci6n es definir un nuevo tipo de datos, denominado tipo enumerado y declarar una variable de este tipo. La sintaxis es la siguiente: enum tipo_enumerado ! Despues de definir un tipo enumerado, podemos declarar una 0 m,b variables de ese tipo, de la forma: }; enum colores color; Este ejemplo declara una variable color del tipo enumerado colores, la cual puede tomar cualquier valor de los especificados en la lista.
  • 53. Cada identificador, de la lista de constantes enteras en una enumera- ci6n, tiene asociado un valor. Por defecto, el primer identificador tiene aso- ciado el valor 0, el siguiente el valor 1, y as! sucesivamente. A cualquier identificador de la lista, se Ie puede asignar un valor ini- cial por medio de una expresi6n con stante. Los identificadores sucesivos tomanln valores correlativos a partir de este. azul, amarillo, raja, verde color; Este ejemplo define un tipo enumerado Hamado colores y declara una variable color de ese tipo. Los valores asociados a los identificadores son los siguientes: azul = 0, amarillo =1, raja =2, verde = 0, blanco = 1 Y negro = 2. 3. Desafortunadamente, no es posible leer 0 escribir directamente un valor de un tipo enumerado. Estos numeros son los mas recurridos en un lenguaje de programaci6n. Un real en simple precision es un numero que puede tener un punta decimal y que puede estar comprendido en el rango de:
  • 54. -3.402823E + 38 a -1.175494E-38 para numeros negativos 1.175494E-38 a 3.402823E+38 para numeros positivos Un numero real en simple precision no tiene mas de 7 digitos signifi- cativos. Este ejemplo declara la variable x de tipo real en simple precision. Otros ejemplos son: float a = 3.14159; float b = 2.2e-5; Un numero real en doble precision es un numero que puede tener un punta decimal y puede estar comprendido en el range de: -1.79769E+308 a -2.22507E-308 para numeros negativos 2.22507E-308 a 1.79769E+308 para numeros positivos Un numero real en doble precision tiene hasta 16 digitos significati- vos. Esto da lugar a calculos mas exactos que en simple precision. Este ejemplo declara la variable x de tipo real en doble precision. Otro~ ejemplos son: double a = 3.1415926; double b = 2.2e-8;
  • 55. -1.189731£+4932 a -3.362103E-4932 para numeros negativos 3362103E-4932 a 1.189731£+4932 para numeros positivos Un numero real en doble precision formato largo no tiene mas de 19 digitos significativos. Esto da lugar a calculos mas precisos que en doblc precision. long double X; long double y = 3.17e+425; El tipo void se utiliza para dec1arar funciones que no retornan un valor o para dec1arar un puntero a un tipo no especificado. Si void aparece entre parentesis a continuacion del nombre de una funcion, no es interpretado como un tipo. En este caso indica que la funcion no acepta argumentos. double jx(void); void jy(void); void *P; Este ejemplo dec1ara la funcion denominada jx, como una funcion sin argumentos que devue1ve un valor de tipo real de doble precision; la funcionjy, como una fundon sin argumentos que no devuelve valor algu- no; y un puntero P a un objeto de un tipo no espedficado. Los tipos derivados son construidos a partir de los tipos fundamentales. Algunos de ellos son los siguientes:
  • 56. Un puntero es una direcci6n de memoria que indica d6nde se localiza un objeto de un tipo especificado. Para definir una variable de tipo puntero se utiliza el operador de indirecci6n *. int *p,' char *plineas[40j,' Este ejemplo declara un puntero p a un valor entero; y un array de punteros plineas (plineas[Oj a plineas[39J) a valores de tipo char. Una estructura es una variable que representa 10 que normalmente cono- cemos como registro, esto es, un conjunto de uno 0 mas campos de igual o diferentes tipos. float a, b; complejo; struct persona { char nombre[20j; char apellidos[40j; long dni; Este ejemplo declara las variables complejo y reg, como estructuras o registros. La variable complejo comprende los campos a y b de tipo real;
  • 57. y la variable reg comprende los campos nombre y ape/lidos que son cade- nas de caracteres y el campo dni de tipo long. Una union tiene la misma forma de definici6n que una estructura. Las unio- nes, a diferencia de las estructuras, representan registros variables. Esto cjuiert: decir que una variable de este tipo, puede alternar entre varios tip os. Un array es un conjunto de objetos, todos del mismo tipo, que ocupan po- siciones sucesivas en memoria. Para definir un array se utiliza el operador [ ] despues del nombre del array. Este ejemplo declara un array !ista de 40 elementos (!ista[O]a !ista[39J) para almacenar valores enteros. Una funci6n es un subprograma C, el cual toma argumentos de unos tipos dados y retorna un valor de un tipo especificado. Para declarar una fun- ci6n se utiliza el operador ( ) despues del nombre de la funci6n. Permite declarar nuevos nombres de tipos de datos; esto es, sin6nimos de otms tipos ya sean fundamentales 0 derivados, los cuales pueden ser utili- zados mas tarde para declarar variables de esos tipos.
  • 58. typedef int ENTERO; typedef int (*PFlj( ); typedef struct persona REG; Este ejemplo propone el tipo ENTERO como sin6nimo de int; el tipo PFI como un puntero a una funci6n que devuelve un valor entero; y el tipo REG como sin6nimo de struct persona. ENTERO n; PFI p; REG per; declaran n como una variable de tipo entero, p como un puntero a una funci6n que devuelve un valor entero y per como una estructura 0 registro de tipo persona. Las declaraciones typedej permiten parametrizar un programa para evitar problemas de portabilidad. Utilizando typedej con los tipos que pue- den depender de la instalaci6n, cuando se lleve el programa a otra instala- ci6n s610 se tendnin que cambiar estas declaraciones. Una constante es un valor que, una vez fijado por el compilador, no cam- bia durante la ejecuci6n del programa. Una constante en C puede ser un mimero, un canicter 0 una cadena de caracteres.
  • 59. En general, si la constante es positiva, el signa + es opcional y si es negativa, lleva el signo -. El tipo de una constante entera viene determina- do por su valor. Tambien se puede indicar explicitamente el tipo de una constante entera, afiadiendo los sufijos L, U, 0 UL (mayusculas 0 minus- culas). Si el sufijo es L, su tipo es long cuando el valor puede ser represen- tado en este tipo, si no es unsigned long. Si el sufijo es U, su tipo es unsig- ned int cuando el valor puede ser representado en este tipo, si no es unsigned long. Si el sufijo es UL, su tipo es unsigned long. 1522U 1000L 325UL constante entera de tipo unsigned int constante entera de tipo long constante entera de tipo unsigned long Una constante decimal puede tener uno 0 mas digitos, 0 a 9, de los cuales el primera de ellos es distinto de cero. 4326 432600 constante entera de tipo int constante entera de tipo long Una constante octal puede tener lomas digitos, 0 a 7, precedidos por o (cera). Su valor esta comprendido en el rango: Oa077777 0100000 a 0177777 0200000 a 017777777777 020000000000 a 037777777777 para constantes tipo int para constantes tipo unsigned int para constantes tipo long para constantes tipo unsigned long Una constante hexadecimal puede tener lomas caracteres, 0 a 9 y A a F, precedidos por Ox 0 OX (cero mas x). Su valor esta comprendido en el rango:
  • 60. OxOa Ox7FFF Ox8000 a OxFFFF OxlOOOOa Ox7FFFFFFF Ox80000000 a OxFFFFFFFF para constantes tipo int para constantes tipo unsigned int para constantes tipo long para constantes tipo unsigned long 256 0400 OxJOO -0400 -OxJOO especifica el nO 256 en decimal especifica el n° 256 en octal especifica el nO 256 en hexadecimal especifica el nO -256 en octal especifica el nO -256 en hexadecimal Una constante real esta formada por una parte entera, seguida por un punto decimal, y una parte fraccionaria. Tambien se permite la notaci6n cientffi- ca, en cuyo caso se afiade al valor una e 0 E, seguida por un exponente positivo 0 negativo. donde dfgitos representa cero 0 mas digitos del 0 al 9 y E 0 e es el simbolo de exponente de la base 10 que puede ser positivo 0 negativo (2E-5 = 2 x J(f5). Si la constante real es positiva no es necesario especificar el sig- no y si es negativa lleva el signa menos (-). -17.24 17.244283 .008e3 27E-3 Una constante real tiene siempre tipo double, a no ser que se afiada a la misma una f 0 F, en cuyo caso sera de tipo float, 0 una I 0 L para indicar que es de tipo long double.
  • 61. Este tipo de constantes esta formado por un unico caracter encerrado en- tre comillas simples. Una secuencia de escape es considerada como un uni- co canicter. espacio en blanco letra minuscula x nueva linea canicter ASCII Ese ' n' , x1B' Una constante de caracteres es una cadena de caracteres encerrados entre comillas dobles. "Esto es una eonstante de earaeteres" "3.1415926 " "Paseo Pereda 10, Santander" En el ejemplo siguiente el car<icter n fuerza a que la cadena "0 pul- sar Enter" se escriba en una nueva linea. Cuando una cadena de caracteres es demasiado larga puede utilizarse el canicter " " como canicter de continuaci6n.
  • 62. HEsta cadena de caracteres es dema siado larga." Dos 0 mas cadenas separadas por un espacio en blanco sedan conca- tenadas en una sola cadena. printf(HPrimera cadena," H segunda cadena "); Los caracteres de una cadena de caracteres son almacenados en locali- zaciones sucesivasde memoria. Cada cadena de caracteres es finalizada auto- m<iticamente por el caracter nulo representado por la secuencia de escape o. El tipo de una cadena de caracteres es el tipo array donde cada ele- mento es de tipo char (char [ J) y la clase de almacenamiento es static. El numero de elementos de un array, necesarios para almacenar una cadena de caracteres, es igual al numero de caracteres de la cadena, mas uno para el caracter nulo de terminaci6n. Los identificadores son nombres dados a constantes, variables, tipos, fun- ciones y etiquetas de un programa. La sintaxis para formar un identifica- dor es la siguiente:
  • 63. 10 cual indica que un identificador consta de uno 0 mas caracteres (letras, digitos y el caracter de subrayado) y que el primer canicter debe ser una tetra 0 el cardcter de subrayado. Las letras pueden ser mayusculas 0 minusculas y se consideran como caracteres diferentes; esto es, los identificadores Suma, suma y SUMA son diferentes. Los identificadores pueden tener cualquier numero de caracteres pero solamente los 31 caracteres primeros, son significativos. Esto quiere decir que un identificador es distinto de otro cuando difieren al menos en uno de los 31 primeros caracteres. suma Catcuto~umeros~rimos _ordenar ab123 Las palabras clave son identificadores predefinidos que tienen un signifi- cado especial para el compilador C. Un identificador definido por el usua- rio, no puede tener el mismo nombre que una palabra clave. auto break case char const continue default do double else enum extern float for goto if int long register return short signed sizeof static struct switch typedef union unsigned void volatile while Ademas de las palabras clave anteriores, el compilador C de Micro- soft tiene tambi(~n las siguientes:
  • 64. _asm _based _cdecl _emit _export ~ar ~astcall ~ortran ----huge ~nterrupt ~oadds _near _pascal -3averegs _segment -3egname -3elf Un comentario es una secuencia de caracteres utilizada para explicar el co- digo fuente. Microsoft C soporta comentarios estilo C y estilo C++. Un comentario estilo C es una secuencia de caracteres cualesquiera en- cerrados entre los simbolos 1* y *1. Estos comentarios pueden ocupar mas de una linea, pero no pueden anidarse. Por ejemplo: 1* Este es un comentario * que ocupa varias * !ineas. *1 Un comentario estilo C+ + comienza con los caracteres II y termina al final de la linea. Estos comentarios no pueden ocupar mas de una linea. Por ejemplo: Un comentario puede aparecer en cualquier lugar donde se permita aparecer un espacio en blanco. El compilador trata un comentario como a un espacio en blanco. El valor de una variable, a diferencia de las constantes, puede cambiar a 10 largo de la ejecucion de un programa.
  • 65. La sintaxis correspondiente a la declaraci6n de una variable es la si- guiente: c1ase representa una de las cuatro clases siguientes: auto, register, sta- tic, 0 extern. La clase de una variable determina si esta tiene ca- racter global (static 0 extern) 0 local (auto 0 register). Una variable declarada fuera de todo bloque (conjunto de sentencias encerradas entre ( }) es, por defecto, global y es accesible en el resto del archivo fuente en el que esta declarada. Por el contrario, una variable de- clarada dentro de un bloque, es por defecto local y es accesible solamente dentro de este. Cada variable de un programa, debe declararse antes de ser utilizada. La declaraci6n consiste en enunciar el nombre de la variable y asociarle un tipo. El tipo determina los valores que puede tomar la variable asi como las operaciones que con ella pueden realizarse. iot suma, incremento; char car, linea/80]; char car = ( 0'; / * car igual al cardcter nulo */ iot c = 1; / * inicializar c a 1*/
  • 66. Ala declaraci6n de un objeto, se puede anteponer el calificador eonst, con el fin de hacer que dicho objeto sea, en lugar de una variable, una constante. const int k = 12; const int v[ j = [1, 2, 3, 4j; A un objeto declarado como una constante no se Ie puede asignar un valor. Por ello, al declararlo debe ser inicializado. Si k ha sido declarado como constante, las siguientes sentencias darian lugar a un error: k = 100; k+ +; / * error */ / * error */ Una declaraci6n de un puntero precedida por eonst, hace que el obje- to apuntado sea una constante, no sucediendo 10 mismo con el puntero. const char *pe = "abed"; pe[Oj = 'z'; / * error */ pe = "efg"; / * eorreeto */ Si 10 que se pretende es declarar un puntero como una con stante, pro- cederemos asi: char *const pe = "abed"; pe[Oj = 'z'; / * eorreeto */ pe = "efg";' / * error */ Para hacer que tanto el puntero como el objeto apuntado sean cons- tantes, procederemos como se indica a continuaci6n: const char *const pe = "abed"; pe[Oj = 'z'; h error */ pe = "efg"; / * error */