Académique Documents
Professionnel Documents
Culture Documents
Curso 0: Programación
Escuela Técnica Superior de Ingeniería Informática 1
Índice
PROGRAMACIÓN
Introducción a la programación
Lenguaje C
Programación estructurada
Programación estructurada
Variables
Operadores
Estructuras de control
Estructuras de datos
Entrada/Salida
Funciones
Aplicaciones modulares
Escuela Técnica Superior de Ingeniería Informática 2
Definiciones
PROGRAMACIÓN
O
Ordenador: máquina sin inteligencia propia, cuya finalidad es
d d á i i i t li i i fi lid d
interpretar el código (instrucciones) que se les proporciona
Lenguaje máquina: lenguaje que la computadora "entiende" y
g j q g j q p y
es capaz de ejecutar (Os y 1s)
Lenguaje de programación: medio de comunicación entre el
programador y el ordenador El programador escribe en algún
programador y el ordenador. El programador escribe en algún
lenguaje de programación y utiliza las herramientas provistas
(compiladores, etc.) por ese lenguaje para transformarlo en
lenguaje máquina
lenguaje máquina.
Programa: secuencia de órdenes a ser ejecutadas por el
ordenador escrito en algún lenguaje de programación
Algoritmo: secuencia de instrucciones que permiten obtener
un resultado en particular. Ej: receta de cocina
Escuela Técnica Superior de Ingeniería Informática 3
Índice
PROGRAMACIÓN
Introducción a la programación
Lenguaje C
Programación estructurada
Programación estructurada
Variables
Operadores
Estructuras de control
Estructuras de datos
Entrada/Salida
Funciones
Aplicaciones modulares
Escuela Técnica Superior de Ingeniería Informática 4
Características del lenguaje C
PROGRAMACIÓN
C es uno de los lenguajes de programación más
extendidos hoy en día
Historia de C:
Historia de C:
1970 Bell desarrolla un nuevo S.O. para PDP‐11 ‐> UNICS ‐>
UNIX. Difícil de programar en PDP‐11
p g
1972 Dennis Ritchie diseña el lenguaje de programación C
Fabricantes crean sus propios compiladores ‐> pérdida de
p p p p
portabilidad
1980 Estandarización de C. ANSI C
1983 surge C++, versión de C orientada a objetos (Bjarne
Stroustrup)
Escuela Técnica Superior de Ingeniería Informática 5
Características de C
PROGRAMACIÓN
Sencillez
Estructurado: su esquema de programación es
imperativo vs. Orientado a objetos (C++, Java, …).
C it
Consiste en escribir una secuencia de instrucciones una
ibi i d i t i
detrás de la otra, las cuales se ejecutarán en orden.
Compilado. Las órdenes son transformadas a lenguaje
Compilado Las órdenes son transformadas a lenguaje
máquina que se almacena en un archivo ejecutable.
Potente. Aunque es un lenguaje de alto nivel, tiene
Potente. Aunque es un lenguaje de alto nivel, tiene
capacidades de bajo nivel
Un lenguaje es de bajo nivel cuanto más cercano esté al código
máquina.
Un lenguaje que es de alto nivel cuanto más cercano esté del
lenguaje humano.
lenguaje humano.
Escuela Técnica Superior de Ingeniería Informática 6
Índice
PROGRAMACIÓN
Introducción a la programación
Lenguaje C
Programación estructurada
Programación estructurada
Variables
Operadores
Estructuras de control
Estructuras de datos
Entrada/Salida
Funciones
Aplicaciones modulares
Escuela Técnica Superior de Ingeniería Informática 7
Programación estructurada
PROGRAMACIÓN
La programación estructurada sigue tres reglas:
Secuencia: las instrucciones del código se leen una detrás
de otra
Iteración: según cierta condición, un número de
i t
instrucciones puede repetirse un numero determinado de
i d ti d t i d d
veces
Decisión: según ciertas condiciones se ejecutan o no un
Decisión: según ciertas condiciones se ejecutan o no un
conjunto de instrucciones
Escuela Técnica Superior de Ingeniería Informática 8
Estructura de un programa
PROGRAMACIÓN
En la programación estructurada tiene que existir un inicio y un fin
pe ecta e te de do de acue do a d ag a a de ujo de
perfectamente definido de acuerdo al diagrama de flujo del
programa
Un
Un programa bien estructurado debería tener algún subprograma
programa bien estructurado debería tener algún subprograma
que capture cualquier error dentro del programa
Escuela Técnica Superior de Ingeniería Informática 9
Primer programa
PROGRAMACIÓN
i nt mai n( )
{
pr i nt f ( “ Hol a mundo\ n” ) ;
r et ur n 0;
}
#include : es una directiva de preprocesador. Lo que
p p q
hace es copiar todo el código del archivo stdio.h y
pegarlo en esa línea.
int main(): es la función que hace de punto de
entrada del programa. Todo programa en C debe
tener una función main.
Escuela Técnica Superior de Ingeniería Informática 10
Primer programa
PROGRAMACIÓN
i nt mai n( )
{
pr i nt f ( “ Hol a mundo\ n” ) ;
r et ur n 0;
}
printf
printf : es una llamada a una función de biblioteca,
: es una llamada a una función de biblioteca,
que imprime un string en la pantalla.
“Hola
Hola mundo\n
mundo\n”:: es un string
es un string constante. El caracter
constante El caracter
‘\n’ indica un salto de línea.
return: es el valor de retorno de la función.
t l l d t d l f ió
Escuela Técnica Superior de Ingeniería Informática 11
Primer programa
PROGRAMACIÓN
i nt mai n( )
{
pr i nt f ( “ Hol a mundo\ n” ) ;
r et ur n 0;
}
Las
Las sentencias acaban en
sentencias acaban en ‘;’ ;
Las llaves { } se utilizan para definir bloques de código
que forman el cuerpo de determinadas sentencias
que forman el cuerpo de determinadas sentencias,
en este caso una función.
Escuela Técnica Superior de Ingeniería Informática 12
Comentarios
PROGRAMACIÓN
Comentario: líneas de texto que el compilador o el
intérprete no consideran como parte del código, con
lo cual no están sujetas a restricciones de sintaxis.
Sirven para aclarar partes de código en posteriores
lecturas y, en general, para anotar cualquier cosa que
el programador considere oportuno.
Es una prioridad documentar el código fuente ya que
al momento de depurar ahorra mucho tiempo de
análisis para su corrección o estudio.
Escuela Técnica Superior de Ingeniería Informática 13
Comentarios
PROGRAMACIÓN
Se pueden introducir comentarios dentro del código.
Se pueden introducir comentarios dentro del código.
Con // se introduce un comentario de una sola línea.
Con /* y */ se introducen comentarios multilínea.
C /* */ i t d t i ltilí
Escuela Técnica Superior de Ingeniería Informática 14
Proceso de construcción
PROGRAMACIÓN
Preprocesado: Las directrices que comienzan por #
son directrices del preprocesador. Son interpretadas
por el preprocesador, normalmente con
sustituciones.
Compilación: El código fuente ya preprocesado se
El código fuente ya preprocesado se
transforma en código máquina.
Enlazado: se integra todo el código objeto de las
Enlazado: se integra todo el código objeto de las
distintas unidades compiladas en un solo programa
ejecutable.
ejecutable
Escuela Técnica Superior de Ingeniería Informática 15
Proceso de construcción
PROGRAMACIÓN
El compilador que se utiliza habitualmente en
entornos UNIX (como Linux) es gcc (GNU C Compiler)
Sintaxis:
gcc archivo.c –o archivo: Preprocesa, compila y enlaza
archivo.c generando el ejecutable archivo
g j
gcc archivo.c –c –o archivo.o: Preprocesa y compila
archivo.c generando el fichero objeto archivo.o
gcc archivo.o –o archivo: Enlaza archivo.o y genera el
ejecutable archivo
Entornos de compilación completos: Visual Studio,
Dev C++
Escuela Técnica Superior de Ingeniería Informática 16
Índice
PROGRAMACIÓN
Introducción a la programación
Lenguaje C
Programación estructurada
Programación estructurada
Variables
Operadores
Estructuras de control
Estructuras de datos
Entrada/Salida
Funciones
Aplicaciones modulares
Escuela Técnica Superior de Ingeniería Informática 17
Variables y constantes
PROGRAMACIÓN
El
El ordenador sigue una serie de instrucciones. Pero
d d i i d i i P
esas instrucciones tienen que operar sobre una serie
de datos El ordenador típico sólo procesa una
de datos. El ordenador típico sólo procesa una
instrucción a la vez, por lo que necesita 'espacios de
memoria' donde guardar o depositar, a modo de
memoria donde guardar o depositar a modo de
cajones, los diversos datos con los que trabaja. Estos
espacios de memoria corresponden:
p p
Variables: pensadas para ser leídas y modificadas
Constantes: para datos que no pensamos modificar (ej:
valor Pi para calcular el perímetro o área de un círculo). No
puedan ser reescritas.
Escuela Técnica Superior de Ingeniería Informática 18
Tipos de datos elementales
PROGRAMACIÓN
c har : carácter
i nt : entero con signo
uns i gned i nt : entero sin signo
: entero sin signo
l ong : entero largo con signo
uns i gned l ong : entero largo sin signo
f l oat : número en coma flotante, precisión simple
doubl e : número en coma flotante, doble precisión
v oi d : tipo vacío
: tipo vacío
Escuela Técnica Superior de Ingeniería Informática 19
Tipos de datos derivados
PROGRAMACIÓN
Tipos enumerados
Ti d
Rango de valores pequeño
Cada valor identificado por un nombre
p
enum tMesesAnyo {enero=1, febrero, marzo, abril, mayo,
j i j li
junio, julio, agosto, septiembre, octubre, noviembre,
t ti b t b i b
diciembre};
Definición de tipos con typedef
Permite crear nuevos tipos de datos
Mejora legibilidad del código
ó
typedef <tipo> <alias>;
Escuela Técnica Superior de Ingeniería Informática 20
Declaración de variables
PROGRAMACIÓN
i nt f unc i on( )
{
/ * Var i abl es l oc al es * /
c har c ;
c har d = ‘ A’ ;
s t at i c i nt e;
. . .
. . .
r et ur n 0;
}
Escuela Técnica Superior de Ingeniería Informática 21
Declaración de variables
PROGRAMACIÓN
Tipos de variables
Tipos de variables
Global: si se declara fuera de cualquier
f ió S
función. Se puede acceder a ella desde
d d ll d d
cualquier función.
Local: se declaran dentro de una función, y
solo son visibles desde el bloque donde se
solo son visibles desde el bloque donde se
declaran.
Escuela Técnica Superior de Ingeniería Informática 22
Variables externas
PROGRAMACIÓN
Variables globales: visibles por todas las funciones de
un mismo fichero
Variables externas: para compartir variables globales
entre diferentes ficheros, han de ser declaradas en
los ficheros donde se desea como compartir como
variables extern con el mismo nombre y tipo.
Esta declaración no reserva memoria: variables
declaradas pero no definidas
p
Escuela Técnica Superior de Ingeniería Informática 23
Variables estáticas
PROGRAMACIÓN
Se declaran al principio de un bloque con static
Son visibles dentro de ese bloque
Al finalizar el bloque no se destruyen, conservando
su valor entre distintas ejecuciones del bloque al que
su valor entre distintas ejecuciones del bloque al que
pertenecen
Una
Una variable global estática solo es accesible desde el
variable global estática solo es accesible desde el
fichero donde está declarada.
Una variable local estática conserva el valor entre distintas
llamadas a la función.
Escuela Técnica Superior de Ingeniería Informática 24
Declaración de constantes
PROGRAMACIÓN
Varias formas de declararlas:
Usando la directiva del preprocesador #define:
#def i ne MAX_SI ZE 64
Usando un tipo enumerado:
enum{
MAX_SI
AX SI ZE = 64,
64
};
Usando const :
Usando const :
c ons t i nt MAX_SI ZE = 64;
Escuela Técnica Superior de Ingeniería Informática 25
Constantes
PROGRAMACIÓN
Constantes carácter: encerrado entre apóstrofes
Uso de \ para caracteres especiales
Representación Descripción Carácter Descripción ASCII
‘\n’ Nueva línea LF 10
‘\r’ Retorno de carro CR 13
‘\ ’
‘\t’ Tabulación
b l ió HT 9
‘\b’ Espacio BS 8
\\
‘\\’ Barra invertida
Barra invertida \ 92
‘\’’ Comilla simple ‘ 39
‘\”’ Doble comilla ’“ 34
Cadenas de caracteres: secuencia de caracteres
encerrada entre comillas “ ”.
el compilador añade al final el carácter nulo ‘\0’
Escuela Técnica Superior de Ingeniería Informática 26
Índice
PROGRAMACIÓN
Introducción a la programación
Lenguaje C
Programación estructurada
Programación estructurada
Variables
Operadores
Estructuras de control
Estructuras de datos
Entrada/Salida
Funciones
Aplicaciones modulares
Escuela Técnica Superior de Ingeniería Informática 27
Operadores
PROGRAMACIÓN
Aritméticos:
+, - , * , / , % : suma, resta, multiplicación, división y
resto de la división entera.
Lógicos: no existe un tipo de datos boolean. En C se
utilizan enteros. 0 es falso y distinto de 0 es
y
verdadero:
&&,, | | , ! : and, or y not.
, y
Relacionales (devuelven un entero: 0 ‐> falso, distinto
de 0 ‐>> verdadero):
de 0 verdadero):
>, >=, <, <=, ==, ! = : mayor, mayor o igual, menor,
menor o igual, igual, distinto.
menor o igual, igual, distinto.
Escuela Técnica Superior de Ingeniería Informática 28
Operadores
PROGRAMACIÓN
Asignación:
a = b : asigna a a el valor de b
a++,, ++a,, a- - , - - a : p
postincremento, preincremento,
,p ,
postdecremento, predecremento
+=, - =, * =, / = : suma, resta, multiplicación y división con
asignación.
Ejemplo: a += b; es equivalente a: a = a + b;
Otros:
s i z eof ( v ar i abl e o t i po) : tamaño en memoria de la
variable o tipo
Escuela Técnica Superior de Ingeniería Informática 29
Operadores
PROGRAMACIÓN
Conversión de tipos:
Implícita:
En expresiones el tipo mas bajo promociona al mas alto long
double > double > float > unsigned long long > long long >
unsigned long > long > unsigned int > int > unsigned short >
unsigned long > long > unsigned int > int > unsigned short >
short > unsigned char > char
En asignaciones el valor del lado derecho se convierte al tipo
g p
de la variable de la izquierda
Explicita (casting)
(tipo) expresion
Escuela Técnica Superior de Ingeniería Informática 30
Operadores
PROGRAMACIÓN
Precedencia
P d i
Prioridad de unos
operadores frente a otros
operadores frente a otros
Puede modificarse con
p
paréntesis
Asociatividad
define el orden de
ejecución para
operadores con idéntica
d dé
precedencia
Escuela Técnica Superior de Ingeniería Informática 31
Índice
PROGRAMACIÓN
Introducción a la programación
Lenguaje C
Programación estructurada
Programación estructurada
Variables
Operadores
Estructuras de control
Estructuras de datos
Entrada/Salida
Funciones
Aplicaciones modulares
Escuela Técnica Superior de Ingeniería Informática 32
Estructuras de control
PROGRAMACIÓN
P
Permiten modificar el flujo de ejecución de las
it difi l fl j d j ió d l
instrucciones de un programa.
Con las estructuras de control se puede hacer:
Con las estructuras de control se puede hacer:
Selección: De acuerdo a una condición, ejecutar un grupo u otro
de sentencias (if‐then‐else, switch‐case)
Iteración:
Ejecutar un grupo de sentencias mientras exista una condición
(while, do‐while)
Ejecutar un grupo de sentencias el número de veces indicado en
Ej t d t i el número de eces i di d
una condición (for)
Todas las estructuras de control tienen un único punto de
entrada y un único punto de salida.
d ú i d lid
Las estructuras de control pueden anidarse.
Escuela Técnica Superior de Ingeniería Informática 33
Estructuras de control
PROGRAMACIÓN
Llaves
Llaves opcionales si solo hay una instrucción dentro
opcionales si solo hay una instrucción dentro
del bloque (mejor poner siempre)
else
l opcional
i l
Escuela Técnica Superior de Ingeniería Informática 34
Estructuras de control
PROGRAMACIÓN
switch‐case
s wi t c h ( ex pr es i on) {
c as e v al or 1:
. . .
br eak ;
c as e v al or 2:
. . .
br eak ;
. . . .
def aul t :
. . .
}
Solo evalúa valores discretos.
default y break opcionales.
Escuela Técnica Superior de Ingeniería Informática 35
Estructuras de control
PROGRAMACIÓN
while y do‐while
whi l e ( ex pr es i on) {
. . .
}
do {
. . .
} whi l e( ex pr es i on) ;
Mientras
Mientras la expresión sea distinto de 0 se ejecuta el
la expresión sea distinto de 0 se ejecuta el
bucle.
do‐while: el bucle se ejecuta al menos una vez.
d hil l b l j t l
Escuela Técnica Superior de Ingeniería Informática 36
Estructuras de control
PROGRAMACIÓN
for
f or ( i ni c i al i z ac i ón; c ondi c i ón; ac t ual i z ac i ón) {
. . .
. . .
}
Inicialización: expresión que da un valor inicial al iterador
del bucle.
Condición: expresión de permanencia en el bucle.
Cuando la condición no se cumple, se sale del bucle.
Actualización: expresión que modifica el valor del
A li ió ió difi l l d l
iterador.
Inicialización, condición y actualización son todas
Inicialización condición y actualización son todas
opcionales.
Escuela Técnica Superior de Ingeniería Informática 37
Índice
PROGRAMACIÓN
Introducción a la programación
Lenguaje C
Programación estructurada
Programación estructurada
Variables
Operadores
Estructuras de control
Estructuras de datos
Entrada/Salida
Funciones
Aplicaciones modulares
Escuela Técnica Superior de Ingeniería Informática 38
Estructuras de datos
PROGRAMACIÓN
FForma de organizar un conjunto de datos elementales con el
d i j t d d t l t l l
objetivo de facilitar su manipulación. Un dato elemental es la
mínima información que se tiene en un sistema.
Una
Una estructura de datos define la organización de éstos y un conjunto de
estructura de datos define la organización de éstos y un conjunto de
operaciones que se pueden realizar sobre ellos. Las operaciones básicas
son:
Alta, adicionar un nuevo valor a la estructura.
,
Baja, borrar un valor de la estructura.
Búsqueda, encontrar un determinado valor en la estructura para realizar una
operación con este valor, en forma secuencial o binario (siempre y cuando los
datos estén ordenados)
datos estén ordenados).
Cada estructura ofrece ventajas y desventajas en relación a la
simplicidad y eficiencia para la realización de cada operación. De
esta forma la elección de la estructura de datos apropiada para
esta forma, la elección de la estructura de datos apropiada para
cada problema depende de factores como la frecuencia y el orden
en que se realiza cada operación sobre los datos.
Escuela Técnica Superior de Ingeniería Informática 39
Arrays (Vectores)
PROGRAMACIÓN
Son variables que contienen una colección
consecutiva de datos.
Se declaran entre corchetes, y su tamaño debe ser
Se declaran entre corchetes, y su tamaño debe ser
fijado en tiempo de compilación.
Se accede a los elementos también entre corchetes.
Se accede a los elementos también entre corchetes
Los índices comienzan en 0, y no hay comprobación.
i nt a[ 10] ; / / ar r ay de 10 i nt s
f l oat b[ 2] [ 10] / / ar r ay de 2 di mens i ones
. . .
a[ 0] = 10;
b[ 1] [ 4] = 5. 3;
a[[ 20] = 123;
123 / / es t o no da d er r or de
d c ompii l ac i ón
ó
Escuela Técnica Superior de Ingeniería Informática 40
Arrays o vectores
PROGRAMACIÓN
Arrays
Tipos elementales (char, int, float...)
Tipos derivados (punteros, arrays, estructuras…)
Los elementos del array son accesibles a través de un
í di
índice
valor entero entre 0..N‐1, siendo N el máximo número de
elementos
vectorEnteros 0 1 2 3 4
25 1 3 4 1
vectorEnteros[0] vectorEnteros[1] vectorEnteros[2] vectorEnteros[3] vectorEnteros[4]
Al declarar un array se le puede dar valores iniciales a
sus elementos:
i nt a[ 4] = { 13,
13 1,
1 27,
27 1289} ;
i nt b[ ] = { 1, 3, 5, 7, 9} ;
i nt c[ 4] = { 23, 12} ; / / c [ 2] y c [ 3] s i n i ni c i al i z ar
i ntt d[ 2] = { 12,
12 24,
24 91,
91 103} ; / / war nii ng
Si
Si no se especifica el tamaño, tomará el del número
no se especifica el tamaño tomará el del número
de elementos inicializados.
Si se inicializan menos del tamaño, los no
Si se inicializan menos del tamaño los no
inicializados tendrán basura.
Si se inicializan más del tamaño, el compilador dará
Si se inicializan más del tamaño el compilador dará
un aviso.
Escuela Técnica Superior de Ingeniería Informática 42
Punteros
PROGRAMACIÓN
Concepto de variable
Región en memoria reservada para almacenar un dato de un
tipo determinado
tipo determinado
Posición de memoria inicial
Tamaño en bytes
y 0xA031
0xA032
65 1 byte
0xA033
0xA034
char letra = ‘A’;
unsigned int entero = 3489;
3489 4 bytes
0xA038
Punteros:
Variable que representa una posición de memoria que contiene un dato.
Se declaran anteponiendo un * al nombre de la variable.
tipo * identificador;
float datoReal =123.4; float *float *
pDatoReal = &datoReal;
pDatoReal;
0xFE87A1 0 A030
0xA030
0xFE87A2 0xA031
0xFE87A6 0xA035
Operaciones:
El operador * dereferencia el puntero. Es decir, se accede
al valor apuntado.
El operador & devuelve la dirección de memoria donde se
encuentra una variable. Es decir se obtiene un puntero a la
variable.
bl
i nt a = 0;
i nt * b;
Escuela Técnica Superior de Ingeniería Informática 45
Punteros
PROGRAMACIÓN
Operaciones:
Los punteros se pueden sumar, restar, etc
Esas operaciones se hacen en múltiplos del tamaño del
p p
dato apuntado.
Escuela Técnica Superior de Ingeniería Informática 46
Punteros – Memoria dinámica
PROGRAMACIÓN
Cuando se declara una variable de tipo puntero, no
apunta a ningún sitio “válido”, y no hay memoria
reservada para esa variable.
Para manejar memoria de forma dinámica, se utilizan
las llamadas malloc y free.
las llamadas malloc y free.
void *malloc(size_t size): devuelve un puntero a una
zona de memoria de size bytes. Como devuelve un
zona de memoria de size bytes Como devuelve un
puntero void* hay que convertirlo al tipo de puntero
que se quiere usar
que se quiere usar.
void free(void *ptr): libera la zona de memoria
apuntada por ptr
t d t y obtenida previamente con malloc
bt id i t ll
Escuela Técnica Superior de Ingeniería Informática 47
Punteros – Memoria dinámica
PROGRAMACIÓN
Ejemplo:
i nt * a, * b; / / punt er os a ent er os
/ / s e l i ber a el espac
p i o del pr
p i mer mal l oc
f r ee( a) ;
Los arrays se pueden comportar como punteros, y los punteros como
arrays.
Una variable de tipo array es un puntero al primer elemento del array.
Un puntero al primer elemento de una colección puede usarse como un
Un puntero al primer elemento de una colección puede usarse como un
array. int vectorEnteros[]={25,1,3,4,1};
0 A010
0xA010
25 vectoEnteros[0] o *(vectorEnteros)
0xA014
1 ( )
vectoEnteros[1] o *(vectorEnteros+1)
0 A018
0xA018
3 vectoEnteros[2] o *(vectorEnteros+2)
0xA01C
4 [ ] ( )
vectoEnteros[3] o *(vectorEnteros+3)
0 A020
0xA020
1 vectoEnteros[4] o *(vectorEnteros+4)
0xA024
…
Diferencias:
Un array tiene un tamaño asociado, un puntero no:
Un array es un puntero estático, no se puede cambiar el
y p , p
lugar al que apunta.
i nt a[ 16] ; / / ar r ay de 16 el ement os
i nt s 1 = s i z eof ( a) ; / / s 1 v al dr á 16* s i z eof ( i nt )
Escuela Técnica Superior de Ingeniería Informática 50
Strings
PROGRAMACIÓN
En C no existe un tipo de datos para strings.
Se utilizan arrays de char acabados con el caracter
‘\0’
\0
Una cadena de caracteres entre comillas dobles es
un inmediato que representa un string
un inmediato que representa un string.
Escuela Técnica Superior de Ingeniería Informática 51
Strings ‐ Funciones
PROGRAMACIÓN
Algunas funciones de biblioteca para manejo de
strings:
strlen: devuelve la longitud del string.
g g
strcat: concatena dos strings.
strcpy: copia un string sobre otro.
py p g
strdup: duplica un string.
strchr: busca un carácter en el string.
g
Escuela Técnica Superior de Ingeniería Informática 52
Registros
PROGRAMACIÓN
Son tipos compuestos formados por elementos
heterogéneos.
Dentro del registro cada elemento tiene un
Dentro del registro cada elemento tiene un
identificador y un tipo.
Escuela Técnica Superior de Ingeniería Informática 53
Registros
PROGRAMACIÓN
Para acceder a los elementos de un registro
estructura se utiliza el operador punto (.)
unc omp
pl ejj o. r eal = 1. 3;;
unc ompl ej o. i mag = 2. 7;
Si
Si se trata de un puntero a registro se puede atajar
t t d t it d t j
con el operador flecha (‐>)
s t r uc t Compl ej o * a =
( s t r uc t Compl
p ejj o * ) mal l oc ( s i z eof ( s t r uc t Comp
pl ejj o) ) ;
Escuela Técnica Superior de Ingeniería Informática 54
Estructuras de datos avanzadas
PROGRAMACIÓN
Listas Enlazadas
Li t E l d
Listas Simples
Listas Doblemente Enlazadas
Listas Circulares
Colas (FIFO: First In ‐ First Out)
Pilas (LIFO: Last In ‐ First Out)
Árboles
Árboles Binarios
Á b l Bi i
Tablas Hash (asocia claves con valores). Funciona
transformando la clave con una función hash en un hash, ,
un número que la tabla hash utiliza para localizar el valor
deseado.
Escuela Técnica Superior de Ingeniería Informática 55
Índice
PROGRAMACIÓN
Introducción a la programación
Lenguaje C
Programación estructurada
Programación estructurada
Variables
Operadores
Estructuras de control
Estructuras de datos
Entrada/Salida
Funciones
Aplicaciones modulares
Escuela Técnica Superior de Ingeniería Informática 56
Entrada/Salida
PROGRAMACIÓN
Definidas en stdio.h
Funciones disponibles para entrada/salida:
printf: permite escribir en la pantalla
printf: permite escribir en la pantalla
getchar/putchar : leer/escribir un caracter.
scanf : para leer del teclado con formato
scanf : para leer del teclado con formato.
gets : para leer una línea del teclado (PELIGROSA. Mejor
usar fgets).
usar fgets).
puts: para escribir una línea en la pantalla.
Escuela Técnica Superior de Ingeniería Informática 57
printf
PROGRAMACIÓN
*format
format es el string que se imprimirá en pantalla.
es el string que se imprimirá en pantalla
Admite una serie de caracteres de sustitución que
serán reemplazados en orden por el resto de
serán reemplazados en orden por el resto de
argumentos e la función.
Escuela Técnica Superior de Ingeniería Informática 58
Entrada/Salida
PROGRAMACIÓN
Se debe especificar el formato de cada dato a utilizar
[fl
[flags]
] [
[ancho][.precisión]
h ][ i ió ] [l
[longitud]
it d] especificador_formato
ifi d f t
Especificador de formato Descripción
%c carácter indi id al
carácter individual
%d %i entero decimal con signo
%u entero decimal sin signo
g
%o %ou entero octal con y sin signo
%x %X entero hexadecimal con signo
%xu %Xu entero hexadecimal sin signo
%f %F double con notación decimal‐punto
%
%e %E d bl
double con notación exponencial
ió i l
%g %G double
%p valor de un puntero
valor de un puntero
%s cadena de caracteres
Escuela Técnica Superior de Ingeniería Informática 59
scanf
PROGRAMACIÓN
cadena_de_control
contiene especificadores de formato
establecen la forma de leer los datos
son los mismos que los utilizados en printf
tantos especificadores como datos a leer
i nt l i mi t e;
Escuela Técnica Superior de Ingeniería Informática 60
Entrada/Salida con ficheros
PROGRAMACIÓN
Las operaciones de E/S vienen precedidas de la creación
de un stream o flujo de datos. Un stream nos permite
establecer una conexión (entre un origen y un destino) a
través de la cual circula información:
FILE : es un tipo de datos que representa un fichero abierto
Funciones y tipos de datos para el manejo de ficheros:
fopen: abre un fichero.
fclose: cierra un fichero.
fread: leer datos de un fichero.
f i
fwrite: escribir datos a un fichero.
ibi d fi h
fprintf/fscanf: igual que printf y scanf pero con ficheros en lugar
de stdout y stdin.
de stdout y stdin
fputs/fgets: escribe/lee una línea completa de un fichero.
Escuela Técnica Superior de Ingeniería Informática 61
Entrada/Salida con ficheros
PROGRAMACIÓN
Apertura de un archivo
A d hi
FILE* fopen(const char* nombreArchivo, const char* modo);
Modo Descripción
r Solo lectura
Solo lectura.
w Trunca el fichero para escritura.
a Escritura al final del fichero.
r+ Lectura y escritura.
w+ Lectura y escritura. Fichero creado si no existe.
a+ Lectura desde comienzo y escritura desde el final.
Devuelve un puntero a NULL si no se puede abrir el archivo
Cierre de archivos
Ci d hi
int fclose( FILE* pf);
Importancia de cerrar un fichero
llos flujos FILE
fl j FILE llevan asociado un buffer intermedio
ll i d b ff i t di
este buffer sólo se vuelca al fichero cuando esta lleno
de esta forma se consigue reducir el número de accesos a un
de esta forma se consigue reducir el número de accesos a un
fichero durante la ejecución de un programa
sino se cierra un archivo puede que no se guarden los
últimos cambios hechos
últimos cambios hechos.
Devuelve un cero si el archivo se cerró con éxito
Funciones de E/S de ficheros de texto
fgetc() / fputc()
int fputc(int c, FILE* pf); int fgetc(FILE* pf);
fgets() / fputs()
int fputs (const char *cad, FILE *pf);
fscanf() / fprintf()
int fprintf (FILE* PF, const char* cadControl,…);
int fscanf(FILE* pf, const char* cadControl, …);
( p )
Funciones de E/S de ficheros binarios
En los ficheros binarios la información se escribe tal cual se
almacena en memoria
Optimiza el tamaño ocupada por un archivo
fread()
f () / fwrite()
f ()
size_t fwrite(const void* ptr, size_t tam, size_t n, FILE* pf);
size_t fread(void* ptr, size_t tam, size_t n, FILE* pf);
Control de errores: muchas de las funciones de
biblioteca y llamadas al sistema proporcionan un
código de error si no han conseguido realizar su
propósito.
La biblioteca estándar proporciona un mecanismo
La biblioteca estándar proporciona un mecanismo
para controlar estos errores y convertirlos en algo
“legible”.
legible .
Por un lado está la variable global errno que es en la
que dejan las funciones el código de error
que dejan las funciones el código de error.
La función strerror(int errno) convierte el código de
error a una cadena de texto más explicativa.
d d t t á li ti
Escuela Técnica Superior de Ingeniería Informática 66
Otras utilidades
PROGRAMACIÓN
Ejemplo:
Escuela Técnica Superior de Ingeniería Informática 67
Índice
PROGRAMACIÓN
Introducción a la programación
Lenguaje C
Programación estructurada
Programación estructurada
Variables
Operadores
Estructuras de control
Estructuras de datos
Entrada/Salida
Funciones
Aplicaciones modulares
Escuela Técnica Superior de Ingeniería Informática 68
Funciones
PROGRAMACIÓN
Las funciones se pueden “declarar”, para que en el
resto del código se sepa que existen y como es su
interfaz (prototipo).
Las funciones se deben “definir“ en alguna parte,
implementando su funcionalidad (cuerpo).
implementando su funcionalidad (cuerpo).
/ / Dec l ar ac i ón de l a f unc i ón
i nt medi a( i nt a, i nt b) ;
/ / Def i ni c i ón de l a f unc i ón
i nt medi a( i nt a, i nt b)
{
i nt r es ul t ;
r es ul t = ( a + b) / 2;
r et ur n r es ul t ;
}
Escuela Técnica Superior de Ingeniería Informática 69
Funciones
PROGRAMACIÓN
Sintaxis:
Argumentos
Nombre
Tipo del valor de
Ti d l l d
retorno
i nt medi a( i nt a, i nt b)
{
Inicio y fin del
cuerpo de la i nt r es ul t ;
función r es ul t = ( a + b) / 2;
r et ur n r es ul t ;
}
Valor de retorno
Escuela Técnica Superior de Ingeniería Informática 70
Funciones ‐ Argumentos
PROGRAMACIÓN
Los argumentos siempre se pasan por valor.
Si se quiere pasar un argumento por referencia se
deben usar punteros.
deben usar punteros.
/ / Ej empl o de pas o de ar gument os por r ef er enc i a
/ / Func i ón
v oii d i nt er c ambi a(( i nt * a, i nt * b) {
i nt aux ;
aux = * a;
*a = *b b;
* b = * aux ;
}
/ / Ll amada a l a f unc i ón
i nt x = 10, y = 20;
. . .
i nt er c ambi a( &x , &y ) ;
Escuela Técnica Superior de Ingeniería Informática 71
Funciones ‐ Recursividad
PROGRAMACIÓN
U
Una función es recursiva si durante su ejecución
f ió i id j ió
tiene una llamada a si misma
Se distingue entre:
S di i
Recursividad directa
Recursividad indirecta: varias se llaman unas a otras
R i id d i di i ll
formando ciclos
Toda
Toda función recursiva ha de presentar al menos una
función recursiva ha de presentar al menos una
condición de terminación
Ejemplos:
Cálculo del factorial mediante recursividad directa
Escuela Técnica Superior de Ingeniería Informática 72
La función main
PROGRAMACIÓN
La función main es el punto de entrada del
programa.
Puede recibir argumentos que serán los argumentos
Puede recibir argumentos que serán los argumentos
que se le pasen por línea de comandos a la hora de
ejecutar el programa.
ejecutar el programa.
i nt mai n( i nt ar gc , c har * ar gv [ ] )
argc: es un entero que indica el número de
argumentos recibido.
*argv[]: es un puntero a un array de strings. Cada
entrada del array es uno de los argumentos.
Escuela Técnica Superior de Ingeniería Informática 73
La función main
PROGRAMACIÓN
Ejemplo:
i nt mai n( i nt ar gc , c har * ar gv [ ] )
{
pr i nt f ( " Se han r ec i bi do %d ar gument os \ n" , ar gc ) ;
i nt i ;
f or ( i = 0; i < ar gc; i ++))
{
pr i nt f ( " Ar gument o %d = %s \ n" , i , ar gv [ i ] ) ;
}
r et ur n 0;
}
Escuela Técnica Superior de Ingeniería Informática 74
Índice
PROGRAMACIÓN
Introducción a la programación
Lenguaje C
Programación estructurada
Programación estructurada
Variables
Operadores
Estructuras de control
Estructuras de datos
Entrada/Salida
Funciones
Aplicaciones modulares
Escuela Técnica Superior de Ingeniería Informática 75
Aplicaciones modulares
PROGRAMACIÓN
La definición de un módulo en C viene dada por:
L d fi i ió d ód l C i d d
Un archivo de cabecera (.h)
DDefine la interfaz del módulo, es decir, qué ofrece el módulo
fi l i t f d l ód l d i é f l ód l
definido
Debería contener: definiciones de tipos y declaraciones de
p y
funciones (prototipos)
Un archivo fuente (.c)
Define los detalles de implementación del módulo
f l d ll d l ó d l ód l
Inclusión de su correspondiente fichero de cabecera
( c ude)
(#include)
Definición de funciones declaradas y no declaradas en el
fichero de cabecera
Escuela Técnica Superior de Ingeniería Informática 76
Aplicaciones modulares
PROGRAMACIÓN
La posibilidad de definir módulos en C va permitir:
Definición de nuevos tipos de datos junto con sus
operaciones (TADs)
Colección de valores legales de datos y operaciones
primitivas que se pueden realizar sobre esos valores
primitivas que se pueden realizar sobre esos valores
La definición de un TAD implica la definición de:
Un interfaz público
Un interfaz público
Representación privada o implementación
En C no se puede ocultar la representación del TAD
La creación de bibliotecas de funciones
Escuela Técnica Superior de Ingeniería Informática 77
Librerias
PROGRAMACIÓN
Librería estática (libnombre.a): "se copia" en el
ejecutable cuando lo compilamos. Sólo se copia
aquella parte de la librería que se necesite.
Librería dinámica (libnombre.so): NO se copia en
nuestro programa al compilarlo. Cuando se ejecuta e
ejecutable, cada vez que el código necesite algo de la
librería, irá a buscarlo a ésta.
Escuela Técnica Superior de Ingeniería Informática 78
Librería estática
PROGRAMACIÓN
Creación:
C ió
Obtener los ficheros objeto (.o) de todos nuestros fuentes (.c). Para
ello se compilan con gcc ‐c fuente.c ‐o fuente.o. La opción ‐c le dice al
compilador que no cree un ejecutable, sino sólo un fichero objeto
Crear la librería (.a). Para ello se usa el comando ar con los siguientes
parámetros: ar ‐rv libnombre.a fuente1.o fuente2.o ... La opción ‐r le
p p
dice al comando ar que tiene que insertar (o reemplazar si ya están
dentro) los ficheros objeto en la librería.
Compilación:
cc ‐o miprograma miprograma.c ‐I<path1> ‐I<path2> ... ‐L<path1> ‐
L<path2> ... ‐llibreria1 ‐llibreria2
Los ‐llibreria
L llib i son para indicar que se debe coger esa librería. El prefijo
i di d b lib í El fij
lib y la extensión .a ya la pone automáticamente el compilador. Ojo: es
necesario ponerlas por orden.
Escuela Técnica Superior de Ingeniería Informática 79
Librería dinámica
PROGRAMACIÓN
Creación:
C ió
Compilar los fuentes, igual que antes, para obtener los objetos.
Crear la librería con el comando ld. Las opciones para este comando
Crear la librería con el comando ld. Las opciones para este comando
serían ld ‐o liblibreria.so objeto1.o objeto2.o ... ‐shared. La opción ‐o
liblibreria.so le indica el nombre que queremos dar a la librería. La
p q y
opción ‐shared le indica que debe hacer una librería y no un
ejecutable (opción por defecto).
Compilación:
cc ‐o miprograma miprograma.c ‐I<path1> ‐I<path2> ... ‐L<path1> ‐
i i I< th1> I< th2> L< th1>
L<path2> ... ‐Bdynamic ‐llibreria1 ‐llibreria2
Definir la variable de entorno LD_LIBRARY_PATH, en la que ponemos
todos los directorios donde haya librerías dinámicas de interés.
d l di i d d h lib í di á i d i é
$ LD_LIBRARY_PATH=$LD_LIBRARY_PATH:<path1>:<path2>:<path3>
$ export LD_LIBRARY_PATH
Escuela Técnica Superior de Ingeniería Informática 80
Makefile
PROGRAMACIÓN
Para
Para simplificar el proceso de compilación lo habitual es hacer un fichero
simplificar el proceso de compilación lo habitual es hacer un fichero
Makefile en el mismo directorio donde estén los fuentes y utilizar make
para compilarla
Posible definición de variables:
Posible definición de variables:
CFLAGS=-I<path1> -I<path2> ...
CC=gcc
Ordenados en forma de reglas:
objetivo: dependencias
comandos
Reglas virtuales: sin dependencias
clean :
rm *.o *~
Reglas implicitas:
programa : programa
programa.o
o
programa.o : programa.c
Reglas patrón:
%.o : %.c
$(CC) $(CFLAGS) $< -o $@
Escuela Técnica Superior de Ingeniería Informática 81
Makefile
PROGRAMACIÓN
Creación de librerias:
Librería estática:
CFLAGS=‐I<path1> ‐I<path2> ...
libnombre.a: libnombre.a (objeto1.o ojbeto2.o ...)
Librería dinámica
Lib í di á i
liblibreria.so: objeto1.c objeto2.c ...
cc ‐c ‐o objeto1 o objeto1 c
cc ‐c ‐o objeto1.o objeto1.c
cc ‐c ‐o objeto2.o objeto2.c
...
ld ‐o liblibreria.so objeto1.o objeto2.o ... ‐shared
rm objeto1.o objeto2.o ...
Escuela Técnica Superior de Ingeniería Informática 82