More Related Content Similar to Introduccion a la programacion en c prev (20) Introduccion a la programacion en c prev2. AULA POLITÈCNICA / ETSETB
Marco A. Peña Basurto
José M. Cela Espín
Introducción a
la programación en C
EDICIONS UPC
3. Primera edición: septiembre de 2000
Diseño de la cubierta: Manuel Andreu
© Los autores, 2000
© Edicions UPC, 2000
Edicions de la Universitat Politècnica de Catalunya, SL
Jordi Girona Salgado 31, 08034 Barcelona
Tel.: 934 016 883 Fax: 934 015 885
Edicions Virtuals: www.edicionsupc.es
E-mail: edicions-upc@upc.es
Producción: CPET (Centre de Publicacions del Campus Nord)
La Cup. Gran Capità s/n, 08034 Barcelona
Depósito legal: B-32.449-2000
ISBN: 84-8301-429-7
Quedan rigurosamente prohibidas, sin la autorización escrita de los titulares del copyright, bajo las san-
ciones establecidas en las leyes, la reproducción total o parcial de esta obra por cualquier medio o pro-
cedimiento, comprendidos la reprografía y el tratamiento informático, y la distribución de ejemplares de
ella mediante alquiler o préstamo públicos.
4. Introducci´ n a la programaci´ n en C
o o
Marco A. Pe˜ a n
Jos´ M. Cela
e
Departament d’Arquitectura de Computadors
Universitat Polit` cnica de Catalunya
e
08034 Barcelona, Espa˜ an
marcoa@ac.upc.es
cela@ac.upc.es
19 de junio de 2000
5. i ´
Indice General
´
Indice General
´
Indice de Figuras v
´
Indice de Tablas vii
Prefacio ix
1 Conceptos b´ sicos de programaci´ n
a o 1
1.1 Ordenador y perif´ ricos . . . . .
e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2 Bits, bytes y palabras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.3 Lenguajes de programaci´ n . . .
o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.3.1 Lenguajes de bajo nivel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.3.2 Lenguajes de alto nivel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.4 Elaboraci´ n de un programa . .
o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.5 Traductores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.5.1 Ensambladores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.5.2 Int´ rpretes . . . . . . .
e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.5.3 Compiladores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2 Primer contacto con C 7
2.1 Un poco de historia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.2 Caracter´sticas del lenguaje . .
ı . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.3 Creaci´ n de un programa . . .
o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.4 Primeros pasos con C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.5 El modelo de compilaci´ n de C
o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
3 Empezando a programar 13
3.1 Identificadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
3.2 Estructura de un programa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
3.3 Variables y constantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3.3.1 Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3.3.2 Constantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
3.3.3 Entrada y salida de valores . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
3.4 Expresiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
3.4.1 Operador de asignaci´ n . .
o . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
3.4.2 Operadores aritm´ ticos . .
e . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
© Los autores, 2000; © Edicions UPC, 2000.
6. ´
Indice General ii
3.4.3 Operadores relacionales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
3.4.4 Operadores l´ gicos . . .
o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
3.4.5 Prioridad de operadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
3.5 Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
4 Construcciones condicionales 23
4.1 Construcci´ n if . . . . . . . .
o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
4.1.1 Variante if-else . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
4.1.2 Variante if-else-if . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
4.2 El operador condicional ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
4.3 Construcci´ n switch . . . . .
o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
4.4 Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
5 Construcciones iterativas 33
5.1 Construcci´ n while . . . . . . . . .
o . . . . . . . . . . . . . . . . . . . . . . . . . . 33
5.2 Construcci´ n do-while . . . . . .
o . . . . . . . . . . . . . . . . . . . . . . . . . . 35
5.3 Construcci´ n for . . . . . . . . . .
o . . . . . . . . . . . . . . . . . . . . . . . . . . 36
5.3.1 El operador coma (,) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
5.3.2 Equivalencia for-while . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
5.4 Las sentencias break y continue . . . . . . . . . . . . . . . . . . . . . . . . . . 38
5.5 Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
6 Tipos de datos elementales 41
6.1 N´ meros enteros . . . . . . .
u . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
6.1.1 Modificadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
6.1.2 Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
6.2 Caracteres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
6.2.1 Caracteres especiales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
6.2.2 Enteros y el tipo char . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
6.2.3 Conversiones de tipos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
6.3 N´ meros reales . . . . . . . .
u . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
6.4 Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
7 Tipos de datos estructurados: Tablas 49
7.1 Vectores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
7.1.1 Consulta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
7.1.2 Asignaci´ n . . . . . . . .
o . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
7.1.3 Ejemplos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
7.2 Matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
7.2.1 Consulta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
7.2.2 Asignaci´ n . . . . . . . .
o . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
7.2.3 Ejemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
7.3 Tablas multidimensionales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
7.3.1 Ejemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
7.4 Cadenas de caracteres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
© Los autores, 2000; © Edicions UPC, 2000.
7. iii ´
Indice General
7.4.1 Asignaci´ n . . . . . . . . . . .
o . . . . . . . . . . . . . . . . . . . . . . . . . 57
7.4.2 Manejo de cadenas de caracteres . . . . . . . . . . . . . . . . . . . . . . . . . 59
7.4.3 Ejemplos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
7.5 Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
8 Otros tipos de datos 63
8.1 Estructuras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
8.1.1 Declaraci´ n de variables . . . . . . .
o . . . . . . . . . . . . . . . . . . . . . . 64
8.1.2 Acceso a los campos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
8.1.3 Asignaci´ n . . . . . . . . . . . . . .
o . . . . . . . . . . . . . . . . . . . . . . 65
8.1.4 Ejemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
8.2 Uniones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
8.2.1 Ejemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
8.3 Tipos de datos enumerados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
8.4 Definici´ n de nuevos tipos de datos . . . . .
o . . . . . . . . . . . . . . . . . . . . . . 69
8.5 Tiras de bits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
8.5.1 Operador de negaci´ n . . . . . . . .
o . . . . . . . . . . . . . . . . . . . . . . 70
8.5.2 Operadores l´ gicos . . . . . . . . . .
o . . . . . . . . . . . . . . . . . . . . . . 71
8.5.3 Operadores de desplazamiento de bits . . . . . . . . . . . . . . . . . . . . . . 71
8.6 Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
9 Punteros 75
9.1 Declaraci´ n y asignaci´ n de direcciones
o o . . . . . . . . . . . . . . . . . . . . . . . . . 75
9.1.1 Declaraci´ n . . . . . . . . . . .
o . . . . . . . . . . . . . . . . . . . . . . . . . 76
9.1.2 Asignaci´ n de direcciones . . .
o . . . . . . . . . . . . . . . . . . . . . . . . . 76
9.2 Indirecci´ n . . . . . . . . . . . . . . .
o . . . . . . . . . . . . . . . . . . . . . . . . . 77
9.3 Operaciones con punteros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
9.4 Punteros y tablas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
9.5 Punteros y estructuras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
9.6 Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
10 Funciones 87
10.1 Generalidades . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
10.2 Definici´ n y llamada . . . . . . . . . . .
o . . . . . . . . . . . . . . . . . . . . . . . . 89
10.2.1 Definici´ n . . . . . . . . . . . . .
o . . . . . . . . . . . . . . . . . . . . . . . . 89
10.2.2 Prototipos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
10.2.3 Llamada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
10.3 Variables y par´ metros . . . . . . . . . .
a . . . . . . . . . . . . . . . . . . . . . . . . 91
10.3.1 Variables locales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
10.3.2 Variables globales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
10.3.3 Par´ metros formales . . . . . . .
a . . . . . . . . . . . . . . . . . . . . . . . . 92
10.4 Devoluci´ n de resultados . . . . . . . . .
o . . . . . . . . . . . . . . . . . . . . . . . . 93
10.5 Paso de par´ metros . . . . . . . . . . . .
a . . . . . . . . . . . . . . . . . . . . . . . . 94
10.5.1 Paso de par´ metros por valor . . .
a . . . . . . . . . . . . . . . . . . . . . . . . 94
10.5.2 Paso de par´ metros por referencia
a . . . . . . . . . . . . . . . . . . . . . . . . 95
© Los autores, 2000; © Edicions UPC, 2000.
8. ´
Indice General iv
10.5.3 Las tablas y las funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
10.5.4 Par´ metros en la funci´ n main
a o . . . . . . . . . . . . . . . . . . . . . . . . . 99
10.6 Recursividad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
10.7 Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
11 Ficheros 105
11.1 Abrir y cerrar ficheros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
11.2 Leer y escribir en ficheros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
11.3 Otras funciones para el manejo de ficheros . . . . . . . . . . . . . . . . . . . . . . . . 111
11.3.1 feof . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
11.3.2 ferror . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
11.3.3 fflush . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
11.4 Ficheros est´ ndar: stdin, stdout, stderr
a . . . . . . . . . . . . . . . . . . . 113
11.5 Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
A El preprocesador 119
A.1 Directiva include . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
A.2 Directivas define y undef . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
A.3 Directivas ifdef y ifndef . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
A.4 Macros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
B La librer´a est´ ndar
ı a 123
B.1 Manipulaci´ n de cadenas de caracteres . .
o . . . . . . . . . . . . . . . . . . . . . . . . 123
B.2 Entrada y salida . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
B.2.1 Entrada y salida b´ sica . . . . . .
a . . . . . . . . . . . . . . . . . . . . . . . . 124
B.2.2 Entrada y salida con formato . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
B.2.3 Ficheros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
B.3 Funciones matem´ ticas . . . . . . . . . .
a . . . . . . . . . . . . . . . . . . . . . . . . 127
B.4 Clasificaci´ n y manipulaci´ n de caracteres
o o . . . . . . . . . . . . . . . . . . . . . . . . 128
B.5 Conversi´ n de datos . . . . . . . . . . . .
o . . . . . . . . . . . . . . . . . . . . . . . . 129
B.6 Manipulaci´ n de directorios . . . . . . .
o . . . . . . . . . . . . . . . . . . . . . . . . 129
B.7 Memoria din´ mica . . . . . . . . . . . .
a . . . . . . . . . . . . . . . . . . . . . . . . 129
C Sistemas de numeraci´ n
o 135
C.1 Naturales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
C.2 Enteros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
C.3 Reales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
C.3.1 Problemas derivados de la representaci´ n en coma flotante
o . . . . . . . . . . . 138
D Tabla de caracteres ASCII 141
E Bibliograf´a y recursos WEB
ı 143
© Los autores, 2000; © Edicions UPC, 2000.
9. v ´
Indice de Figuras
´
Indice de Figuras
1.1 Niveles de abstracci´ n en los lenguajes de programaci´ n . . . . .
o o . . . . . . . . . . . 2
1.2 Cronolog´a en el desarrollo de algunos lenguajes de programaci´ n
ı o . . . . . . . . . . . 3
1.3 Ciclo de vida de un programa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.4 Fases en la interpretaci´ n de un programa . . . . . . . . . . . . .
o . . . . . . . . . . . 5
1.5 Fases en la compilaci´ n de un programa . . . . . . . . . . . . . .
o . . . . . . . . . . . 6
2.1 Modelo de compilaci´ n de C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
o 11
4.1 Esquema de funcionamiento de if y de if-else . . . . . . . . . . . . . . . . . . . 24
4.2 Esquema de funcionamiento de switch . . . . . . . . . . . . . . . . . . . . . . . . . 29
5.1 Esquema de funcionamiento de while . . . . . . . . . . . . . . . . . . . . . . . . . 34
5.2 Esquema de funcionamiento de do-while . . . . . . . . . . . . . . . . . . . . . . . 35
5.3 Esquema de funcionamiento de for . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
7.1 Representaci´ n gr´ fica de un vector . . . . . . . . . . . . . . . . . . . . . . . . . . .
o a 50
7.2 Representaci´ n gr´ fica de una matriz . . . . . . . . . . . . . . . . . . . . . . . . . . .
o a 54
7.3 Representaci´ n gr´ fica de una tabla de tres dimensiones . . . . . . . . . . . . . . . . .
o a 56
9.1 Acceso a una matriz mediante un puntero . . . . . . . . . . . . . . . . . . . . . . . . 82
10.1 Acceso a una matriz mediante un puntero . . . . . . . . . . . . . . . . . . . . . . . . 99
11.1 Almacenamiento de un fichero de texto . . . . . . . . . . . . . . . . . . . . . . . . . 106
© Los autores, 2000; © Edicions UPC, 2000.
10. vii ´
Indice de Tablas
´
Indice de Tablas
3.1 Palabras reservadas de C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
3.2 Operadores aritm´ ticos en C . . . . . . . . . .
e . . . . . . . . . . . . . . . . . . . . . 17
3.3 Operadores relacionales y l´ gicos en C . . . . .
o . . . . . . . . . . . . . . . . . . . . . 19
3.4 Tabla de verdad de los operadores l´ gicos en C
o . . . . . . . . . . . . . . . . . . . . . 19
3.5 Prioridad y asociatividad de los operadores en C . . . . . . . . . . . . . . . . . . . . . 20
6.1 Representaci´ n de enteros en decimal, octal y hexadecimal
o . . . . . . . . . . . . . . . 42
6.2 Resumen de tipos de datos enteros . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
6.3 Caracteres interpretados como enteros . . . . . . . . . . . . . . . . . . . . . . . . . . 45
6.4 Resumen de tipos de datos reales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
8.1 Tabla de verdad de los operadores l´ gicos . . . . . . . . . . . . . . . . . . . . . . . .
o 71
C.1 Representaci´ n de n´ meros naturales en binario natural
o u . . . . . . . . . . . . . . . . 135
C.2 Representaci´ n de n´ meros enteros en complemento a 2
o u . . . . . . . . . . . . . . . . 136
C.3 Representaci´ n de n´ meros enteros en
o u ��0��0 . . .
0000 . . . . . . . . . . . . . . . . 137
C.4 Representaci´ n de n´ meros reales . . . . . . . . . . . .
o u . . . . . . . . . . . . . . . . 138
D.1 Caracteres y sus c´ digos ASCII . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
o
© Los autores, 2000; © Edicions UPC, 2000.
11. ix Pr´ logo
o
Pr´ logo
o
Este libro surge a partir de la experiencia docente de los autores en la asignatura Introducci´ n a los
o
ordenadores de la Escola T` cnica Superior d’Enginyeria de Telecomunicaci´ de Barcelona, de la Uni-
e o
versitat Polit` cnica de Catalunya. Como su t´tulo indica, se trata de un texto de introduci´ n a la pro-
e ı o
gramaci´ n en lenguaje C. El libro pretende ce˜ irse a los aspectos fundamentales del est´ ndar ANSI C
o n a
actual. Aunque hoy en d´a existen otros lenguajes de programaci´ n muy populares como C++ o JAVA,
ı o
la comprensi´ n de estos lenguajes exige un s´ lido conocimiento de las bases de programaci´ n en C.
o o o
El texto est´ concebido como un curso completo y por lo tanto debe ser le´do de forma secuencial.
a ı
Al final de cada cap´tulo hay un conjunto de ejercicios propuestos. El lector debe tratar de resolver el
ı
mayor n´ mero posible de estos ejercicos. De igual forma es una buena pr´ ctica el programar los ejem-
u a
plos resueltos en el texto. El lector debe recordar que la programaci´ n es una t´ cnica aplicada, igual que
o e
tocar un instrumento musical, y por lo tanto requiere muchas horas de ensayo para ser dominada. Los
ejercicios propuestos son lo suficientemente simples como para no requerir conocimientos adicionales
de otras materias (matem´ ticas, f´sica, contabilidad, etc).
a ı
Uno de los puntos m´ s importantes para quien empieza a programar es adoptar desde el principio
a
un buen estilo de programaci´ n. Esto es, escribir las construcciones del lenguaje de una forma clara
o
y consistente. En este sentido, los ejemplos resueltos en el texto muestran un buen estilo b´ sico de
a
programaci´ n, por lo que se recomienda al lector imitar dicho estilo cuando realice sus programas.
o
Los ap´ ndices A y B son de lectura obligada antes de comenzar a desarrollar programas de comple-
e
jidad media. En dichos ap´ ndices el lector se familiarizar´ con el uso del preprocesador y de la librer´a
e a ı
est´ ndar. Ambas son herramientas fundamentales para desarrollar programas.
a
El ap´ ndice C incluye una descripci´ n de los formatos de datos en el computador. Este tema no
e o
es propiamente de programci´ n, pero la comprensi´ n de dichos formatos ayuda al programador a en-
o o
tender mejor conceptos b´ sicos, como las operaciones de conversi´ n de tipos. El lector puede leer este
a o
ap´ ndice en cualquier momento, aunque recomendamos leerlo antes del cap´tulo 6.
e ı
En las referencias bibliogr´ ficas se indican algunas direcciones web donde el lector podr´ encontrar
a a
preguntas y respuestas comunes de quienes se inician en el lenguaje C. As´ mismo, el lector podr´
ı a
encontrar materiales adicionales sobre programaci´ n, historia del lenguaje, etc.
o
© Los autores, 2000; © Edicions UPC, 2000.
12. 1 1. Conceptos b´ sicos de programaci´ n
a o
Cap´tulo 1
ı
Conceptos b´ sicos de programaci´ n
a o
1.1 Ordenador y perif´ ricos
e
o ´
Un ordenador s´ lo es capaz de ejecutar ordenes y operaciones muy b´ sicas, tales como:
a
0 Aritm´ tica entera: sumar, restar, multiplicar, etc.
e
0 Comparar valores num´ ricos o alfanum´ ricos
e e
0 Almacenar o recuperar informaci´ n
o
Con la combinaci´ n de estas operaciones b´ sicas, y gracias a su gran potencia de c´ lculo, el orde-
o a a
nador puede llevar a cabo procesos muy complejos. Sin embargo, en cualquier caso existe una estrecha
dependencia del ordenador con el programador. Es el programador quien indica a la m´ quina c´ mo y
a o
qu´ debe hacer, mediante la l´ gica y el razonamiento previo, expresado en forma de un programa.
e o
En definitiva, el ordenador s´ lo es capaz de aceptar datos de entrada, procesarlos y facilitar otros
o
datos o resultados de salida. Los datos se introducen u obtienen del ordenador mediante los perif´ ricos
e
´
de entrada y salida. Estos son los encargados de facilitar la relaci´ n entre el coraz´ n del ordenador y el
o o
mundo exterior, y en particular los usuarios de ordenadores. Dependiendo de su funci´ n particular, los
o
perif´ ricos pueden clasificarse en:
e
Perif´ ricos de entrada: cuya funci´ n es facilitar la introducci´ n de datos y ordenes al ordenador: te-
e o o ´
o a ´
clado, rat´ n, l´ piz optico, lector de c´ digo de barras, esc´ ner, tableta digitalizadora, etc.
o a
Perif´ ricos de salida: cuya funci´ n es mostrar al exterior informaci´ n almacenada en memoria o los
e o o
resultados de las operaciones realizadas por el ordenador: pantalla, impresora, plotter, etc.
Perif´ ricos de entrada y salida: capaces tanto de introducir como de extraer informaci´ n del ordena-
e o
´
dor: discos y cintas magn´ ticos, discos opticos, etc.
e
Perif´ ricos de comunicaci´ n: encargados de establecer y facilitar el intercambio de informaci´ n entre
e o o
dos ordenadores: m´ dem, tarjetas de red (Ethernet, Token Ring, RDSI, . . . ), etc.
o
© Los autores, 2000; © Edicions UPC, 2000.
13. 1.2. Bits, bytes y palabras 2
Programador
Lenguaje natural
Lenguaje de programación
Lenguaje máquina
Ordenador
Figura 1.1: Niveles de abstracci´ n en los lenguajes de programaci´ n
o o
1.2 Bits, bytes y palabras
La unidad de memoria m´ s peque˜ a en un ordenador se denomina bit (del ingl´ s binary digit). Puede
a n e
´
tomar unicamente dos posibles valores: o . En ocasiones, debido a la relaci´ n intr´nseca con los
0 � o ı
valores en las se˜ ales el´ ctricas en circuitos digitales, se dice que un bit est´ bajo o alto, o bien desco-
n e a
nectado o conectado. Como puede verse, no es posible almacenar mucha informaci´ n en un solo bit.
o
Sin embargo, un ordenador posee cantidades ingentes de ellos, por lo que podr´a decirse que los bits
ı
son los bloques b´ sicos con los que se construye la memoria del ordenador.
a
El byte, compuesto por ocho bits (algunos autores se refieren a esta unidad como octeto), es una
a ´
unidad de memoria m´ s util. Puesto que cada bit puede tomar el valor o , en un byte pueden represen-
� 0
tarse hasta��� � 0� combinaciones de ceros y unos (256 c´ digos binarios). Con estas combinaciones
o
pueden representarse, por ejemplo, los enteros entre y ( 0 ��� 0 ), un conjunto de caracteres,
000 � � 0�
etc.
La unidad natural de memoria para un ordenador es la palabra. Los ordenadores de sobremesa
actuales, por ejemplo, suelen trabajar con palabras de 32 o 64 bits. En grandes ordenadores, el tama˜ o
n
de la palabra puede ser mucho mayor, pero siempre formada por un n´ mero de bits, potencia de . En
u �
cualquier caso, los ordenadores encadenan dos o m´ s palabras de memoria con el fin de poder almacenar
a
datos complejos y, en general, de mayor tama˜ o.
n
1.3 Lenguajes de programaci´ n
o
Un lenguaje de programaci´ n podr´a definirse como una notaci´ n o conjunto de s´mbolos y caracteres
o ı o ı
que se combinan entre s´ siguiendo las reglas de una sintaxis predefinida, con el fin de posibilitar la
ı
transmisi´ n de instrucciones a un ordenador. Dichos s´mbolos y caracteres son traducidos internamente
o ı
a un conjunto de se˜ ales el´ ctricas representadas en sistema binario, es decir, s´ lo dos valores: 0 y 1.
n e o
Esta traducci´ n es necesaria porque el procesador s´ lo entiende ese lenguaje, al cual nos referiremos
o o
como lenguaje m´ quina.
a
© Los autores, 2000; © Edicions UPC, 2000.
14. 3 1. Conceptos b´ sicos de programaci´ n
a o
COBOL Forth
Ada
FORTRAN Prolog C
BASIC
LISP PL/I SIMULA Modula-2
Ensamblador Algol Logo Pascal Smalltalk C++ Java
1950 1955 1960 1965 1970 1975 1980 1985 1990 1995
Figura 1.2: Cronolog´a en el desarrollo de algunos lenguajes de programaci´ n
ı o
1.3.1 Lenguajes de bajo nivel
Se incluyen en esta categor´a aquellos lenguajes que por sus caracter´sticas se encuentran m´ s pr´ ximos
ı ı a o
a la arquitectura del ordenador, como el lenguaje m´ quina y el lenguaje ensamblador.
a
Lenguaje m´ quina
a
Cualquier problema que deseemos resolver se plantea en primer lugar en nuestro lenguaje natural.
Sin embargo, para que la secuencia de pasos que resuelven el problema pueda ser entendida por un
ordenador, debe traducirse a un lenguaje muy b´ sico denominado lenguaje m´ quina.
a a
´
El lenguaje m´ quina se caracteriza por ser el unico que es directamente inteligible por el ordenador,
a
o ´
puesto que se basa en la combinaci´ n de dos unicos s´mbolos (0 y 1) denominados bits. Adem´ s cada
ı a
procesador posee su propio lenguaje m´ quina, por lo que un programa escrito en lenguaje m´ quina de
a a
un procesador X no podr´ , en principio, ejecutarse en un procesador Y.
a
Lenguaje ensamblador
Constituye una evoluci´ n del lenguaje m´ quina. Se basa en la utilizaci´ n de mnemot´ cnicos, esto es,
o a o e
abreviaturas de palabras que indican nombres de instrucciones. Para programar en lenguaje ensambla-
dor es necesario conocer en profundidad la estructura y funcionamiento interno del ordenador, as´ como
ı
dominar el uso de diferentes sistemas de numeraci´ n, como el binario, hexadecimal, octal, etc.
o
En general, los programas escritos en ensamblador requieren mucho menos espacio de memoria y
se ejecutan m´ s r´ pidamente que si se hubiesen desarrollado en un lenguaje de alto nivel, puesto que
a a
a ı ´
est´ n optimizados para una arquitectura espec´fica. Sin embargo, esto ultimo es un inconveniente, pues
causa que los programas no sean portables de un ordenador a otro con un procesador distinto.
1.3.2 Lenguajes de alto nivel
Se engloban aqu´ todos los lenguajes de programaci´ n que por sus caracter´sticas se asemejan m´ s al
ı o ı a
lenguaje natural del programador. Algunos de los m´ s conocidos son: FORTRAN, BASIC, Pascal,
a
Modula, C, Ada, Java, etc. (ver Fig. 1.2).
La caracter´stica m´ s importante de estos lenguajes es que son independientes de la arquitectura del
ı a
ordenador, por lo que un programa escrito en un lenguaje de alto nivel puede ejecutarse sin problemas
© Los autores, 2000; © Edicions UPC, 2000.
15. 1.4. Elaboraci´ n de un programa
o 4
��������
00000000
Análisis
�������� ��������������
00000000000000
Mantenimiento
00000000 ��������������
00000000000000
�������
0000000
0000000 0000000000000�����������
Diseño 00000000000
Explotación
������� ������������������������
00000000000
0000000000000
�������������
Codificación
0000000000000
�������������
Figura 1.3: Ciclo de vida de un programa
en otros ordenadores con procesadores distintos. Por ello, el programador no necesita conocer a fondo
el funcionamiento del ordenador en el que programa, sino que el lenguaje le permite abstraerse de los
detalles de bajo nivel. Esta abstracci´ n de la arquitectura de la m´ quina implica que todo programa
o a
escrito en un lenguaje de alto nivel deber´ traducirse a lenguaje m´ quina, de forma que pueda ser
a a
entendido y ejecutado por el ordenador. Para ello cada tipo de ordenador deber´ disponer de unos
a
programas especiales que realicen dicha traducci´ n (ver Sec. 1.5).
o
1.4 Elaboraci´ n de un programa
o
El desarrollo de un programa para solucionar un determinado problema inform´ ticamente puede resu-
a
´
mirse en el ya cl´ sico concepto de ciclo de vida. Este puede desglosarse en los siguientes pasos a seguir
a
secuencialmente: an´ lisis, dise˜ o, codificaci´ n, explotaci´ n y mantenimiento (ver Fig. 1.3).
a n o o
An´ lisis
a
En la fase de an´ lisis se estudia cu´ l es el problema a resolver y se especifican a muy alto nivel los
a a
procesos y estructuras de datos necesarios, de acuerdo con las necesidades del cliente. Para realizar
un buen an´ lisis ser´ necesario interaccionar con el cliente y conocer a fondo sus necesidades. Antes
a a
de proceder al dise˜ o es muy importante haber comprendido correctamente los requerimientos del
n
problema.
˜
Diseno
Una vez bien definido el problema y las l´neas generales para solucionarlo, se requiere una soluci´ n
ı o
adecuada a un conjunto de recursos determinado. Tanto f´sicos: en qu´ ordenador va a funcionar la
ı e
aplicaci´ n, de qu´ tipo de perif´ ricos se dispone . . . , como l´ gicos: qu´ sistema operativo se usar´ , qu´
o e e o e a e
herramientas de desarrollo, qu´ bases de datos . . . Finalmente se dise˜ ar´ un conjunto de algoritmos
e n a
que resuelvan los distintos subproblemas en que se haya dividido el desarrollo.
Codificaci´ n
o
Consiste en la traducci´ n de los algoritmos dise˜ ados previamente, utilizando el lenguaje y entorno de
o n
desarrollo escogidos en la fase anterior. Ser´ necesario realizar pruebas que garanticen al m´ ximo la
a a
calidad de los programas desarrollados. Entre otras cosas, que est´ n libres de errores.
e
o a ´
La documentaci´ n generada en esta fase junto con la de las fases anteriores ser´ muy util en el
futuro para las eventuales actuaciones de mantenimiento.
© Los autores, 2000; © Edicions UPC, 2000.
16. 5 1. Conceptos b´ sicos de programaci´ n
a o
Instrucción 1 Intérprete Ejecución 1
Instrucción 2 Intérprete Ejecución 2
Instrucción 3 Intérprete Ejecución 3
...
Figura 1.4: Fases en la interpretaci´ n de un programa
o
Explotaci´ n
o
Los diferentes programas desarrollados en la fase anterior se instalan en el entorno final de trabajo. Si
es necesario se instalar´ n tambi´ n otras herramientas de utilidad, necesarias para el correcto funciona-
a e
miento del sistema. Se debe proporcionar documentaci´ n, manuales de usuario, formaci´ n, etc.
o o
Mantenimiento
En esta fase se realizar´ n correcciones al sistema desarrollado, bien para solventar errores no depura-
a
dos, bien para cambiar o a˜ adir nuevas funcionalidades requeridas por el cliente. Dependiendo de la
n
importancia del caso, ser´ necesario retomar el ciclo de vida a nivel de codificaci´ n, dise˜ o o incluso
a o n
an´ lisis (ver Fig. 1.3).
a
Cuanto mejor se haya documentado el desarrollo en las primeras fases del ciclo de vida, menor ser´
a
el tiempo necesario para llevar a cabo los distintos tipos de mantenimiento.
1.5 Traductores
´
Como ya se ha comentado, el unico lenguaje directamente inteligible por el ordenador es el lenguaje
m´ quina. Por ello, si se programa usando lenguajes de alto nivel ser´ necesario alg´ n programa traduc-
a a u
´
tor. Este, a su vez, ser´ el encargado de comprobar que los programas est´ n escritos correctamente, de
a e
acuerdo con la definici´ n del lenguaje de programaci´ n empleado. Pueden distinguirse varios tipos de
o o
traductores:
1.5.1 Ensambladores
Los programas ensambladores son los encargados de traducir a lenguaje m´ quina los programas escritos
a
en lenguaje ensamblador. La correspondencia entre ambos lenguajes es muy directa, por lo que los
ensambladores suelen ser programas relativamente sencillos.
1.5.2 Int´ rpretes
e
El objetivo de un int´ rprete es procesar una a una las instrucciones de un programa escrito en un lenguaje
e
de alto nivel. Para cada instrucci´ n se verifica la sintaxis, se traduce a c´ digo m´ quina y finalmente se
o o a
ejecuta. Es decir, que la traducci´ n y la ejecuci´ n se realizan como una sola operaci´ n (ver Fig. 1.4).
o o o
© Los autores, 2000; © Edicions UPC, 2000.