Actualizado el 21 de Julio del 2021 (Publicado el 10 de Febrero del 2018)
1.020 visualizaciones desde el 10 de Febrero del 2018
2,9 MB
375 paginas
Creado hace 17a (16/02/2008)
Introducci´on a la programaci´on
con C
Andr´es Marzal
Isabel Gracia
Departamento de Lenguajes y Sistemas Inform´aticos
Universitat Jaume I
Obra distribuida con licencia Creative Commons
Esta obra se distribuye con licencia Creative Commons en su modalidad ((Reconocimiento-No
Comercial-Sin obras derivadas 2.5 Espa˜na)).
Usted es libre de copiar, distribuir y comunicar p´ublicamente la obra bajo las condiciones
siguientes:
Reconocimiento. Debe reconocer los cr´editos de la obra de la manera especificada
por el autor o el licenciador (pero no de una manera que sugiera que tiene su apoyo
o apoyan el uso que hace de su obra).
No comercial. No puede utilizar esta obra para fines comerciales.
Sin obras derivadas. No se puede alterar, transformar o generar una obra derivada a
partir de esta obra.
Este texto es un resumen de la licencia. El texto completo de la licencia se encuentra en
http://creativecommons.org/licenses/by-nc-nd/2.5/es/legalcode.es.
ii
Introducci´on a la Programaci´on con C
´Indice general
1. Introducci´on a C
1
3
1.1. C es un lenguaje compilado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2. Traduciendo de Python a C: una gu´ıa r´apida . . . . . . . . . . . . . . . . . . . .
5
1.3. Estructura t´ıpica de un programa C . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.4. C es un lenguaje de formato libre . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.5. Hay dos tipos de comentario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
1.6. Valores literales en C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
1.6.1. Enteros
1.6.2. Flotantes
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
1.6.3. Cadenas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
1.7. C tiene un rico juego de tipos escalares . . . . . . . . . . . . . . . . . . . . . . . . 23
1.7.1. El tipo int
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
1.7.2. El tipo unsigned int . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
1.7.3. El tipo float . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
1.7.4. El tipo char . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
1.7.5. El tipo unsigned char . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
1.8. Se debe declarar el tipo de toda variable antes de usarla . . . . . . . . . . . . . . 24
1.8.1.
Identificadores v´alidos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
1.8.2. Sentencias de declaraci´on . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
1.8.3. Declaraci´on con inicializaci´on . . . . . . . . . . . . . . . . . . . . . . . . . 26
1.9. Salida por pantalla . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
1.9.1. Marcas de formato para la impresi´on de valores con printf . . . . . . . . . 27
1.10. Variables y direcciones de memoria . . . . . . . . . . . . . . . . . . . . . . . . . . 31
1.11. Entrada por teclado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
1.12. Expresiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
1.13. Conversi´on impl´ıcita y expl´ıcita de tipos . . . . . . . . . . . . . . . . . . . . . . . 41
1.14. Las directivas y el preprocesador . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
1.15. Constantes
1.15.1. Definidas con la directiva define
. . . . . . . . . . . . . . . . . . . . . . . 44
1.15.2. Definidas con el adjetivo const . . . . . . . . . . . . . . . . . . . . . . . . 44
1.15.3. Con tipos enumerados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
1.16. Las bibliotecas (m´odulos) se importan con #include . . . . . . . . . . . . . . . . 47
1.16.1. La biblioteca matem´atica . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
1.17.1. Estructuras de control condicionales . . . . . . . . . . . . . . . . . . . . . 49
1.17.2. Estructuras de control iterativas
. . . . . . . . . . . . . . . . . . . . . . . 54
1.17.3. Sentencias para alterar el flujo iterativo . . . . . . . . . . . . . . . . . . . 59
1.17. Estructuras de control
2. Estructuras de datos en C: vectores est´aticos y registros
63
2.1. Vectores est´aticos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
. . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
2.1.1. Declaraci´on de vectores
2.1.2.
Inicializaci´on de los vectores . . . . . . . . . . . . . . . . . . . . . . . . . . 64
2.1.3. Un programa de ejemplo: la criba de Erat´ostenes . . . . . . . . . . . . . . 65
2.1.4. Otro programa de ejemplo: estad´ısticas
. . . . . . . . . . . . . . . . . . . 68
2.1.5. Otro programa de ejemplo: una calculadora para polinomios . . . . . . . . 77
2.1.6. Disposici´on de los vectores en memoria . . . . . . . . . . . . . . . . . . . . 83
2.1.7. Algunos problemas de C: accesos il´ıcitos a memoria
. . . . . . . . . . . . 87
Introducci´on a la Programaci´on con C
i
´INDICE GENERAL
2.1.8. Asignaci´on y copia de vectores
2.1.9. Comparaci´on de vectores
. . . . . . . . . . . . . . . . . . . . . . . . 88
. . . . . . . . . . . . . . . . . . . . . . . . . . . 90
2.2. Cadenas est´aticas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
2.2.1. Declaraci´on de cadenas
. . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
2.2.2. Representaci´on de las cadenas en memoria . . . . . . . . . . . . . . . . . . 91
2.2.3. Entrada/salida de cadenas . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
2.2.4. Asignaci´on y copia de cadenas
. . . . . . . . . . . . . . . . . . . . . . . . 97
2.2.5. Longitud de una cadena . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
2.2.6. Concatenaci´on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
2.2.7. Comparaci´on de cadenas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
2.2.8. Funciones ´utiles para manejar caracteres . . . . . . . . . . . . . . . . . . . 107
2.2.9. Escritura en cadenas: sprintf
. . . . . . . . . . . . . . . . . . . . . . . . . 108
2.2.10. Un programa de ejemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
2.3. Vectores multidimensionales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
2.3.1. Sobre la disposici´on de los vectores multidimensionales en memoria . . . . 110
2.3.2. Un ejemplo: c´alculo matricial
. . . . . . . . . . . . . . . . . . . . . . . . . 111
2.3.3. Vectores de cadenas, matrices de caracteres . . . . . . . . . . . . . . . . . 117
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
2.4. Registros
2.4.1. Un ejemplo: registros para almacenar vectores de talla variable (pero
acotada) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
2.4.2. Un ejemplo: rectas de regresi´on para una serie de puntos en el plano . . . 129
2.4.3. Otro ejemplo: gesti´on de una coleci´on de CDs . . . . . . . . . . . . . . . . 132
2.5. Definici´on de nuevos tipos de datos . . . . . . . . . . . . . . . . . . . . . . . . . . 136
3. Funciones
139
3.1. Definici´on de funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
3.2. Variables locales y globales
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
3.2.1. Variables locales
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
3.2.2. Variables globales
3.3. Funciones sin par´ametros
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
3.4. Procedimientos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
3.5. Paso de par´ametros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
3.5.1. Par´ametros escalares: paso por valor . . . . . . . . . . . . . . . . . . . . . 149
3.5.2. Organizaci´on de la memoria: la pila de llamadas a funci´on . . . . . . . . . 149
3.5.3. Vectores de longitud variable . . . . . . . . . . . . . . . . . . . . . . . . . 155
3.5.4. Par´ametros vectoriales: paso por referencia . . . . . . . . . . . . . . . . . 155
3.5.5. Par´ametros escalares: paso por referencia mediante punteros . . . . . . . . 161
3.5.6. Paso de registros a funciones
. . . . . . . . . . . . . . . . . . . . . . . . . 166
3.5.7. Paso de matrices y otros vectores multidimensionales . . . . . . . . . . . . 169
3.5.8. Tipos de retorno v´alidos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
3.5.9. Un ejercicio pr´actico: miniGalaxis
. . . . . . . . . . . . . . . . . . . . . . 173
3.6. Recursi´on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190
3.6.1. Un m´etodo recursivo de ordenaci´on: mergesort
. . . . . . . . . . . . . . . 191
3.6.2. Recursi´on indirecta y declaraci´on anticipada . . . . . . . . . . . . . . . . . 197
3.7. Macros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198
3.8. Otras cuestiones acerca de las funciones . . . . . . . . . . . . . . . . . . . . . . . 201
3.8.1. Funciones inline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201
3.8.2. Variables locales static . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202
3.8.3. Paso de funciones como par´ametros
. . . . . . . . . . . . . . . . . . . . . 203
3.9. M´odulos, bibliotecas y unidades de compilaci´on . . . . . . . . . . . . . . . . . . . 205
3.9.1. Declaraci´on de prototipos en cabeceras . . . . . . . . . . . . . . . . . . . . 207
3.9.2. Declaraci´on de variables en cabeceras
. . . . . . . . . . . . . . . . . . . . 209
3.9.3. Declaraci´on de registros en cabeceras . . . . . . . . . . . . . . . . . . . . . 210
ii
Introducci´on a la
Comentarios de: Introducción a la programación con C (0)
No hay comentarios