SlideShare ist ein Scribd-Unternehmen logo
1 von 83
DATSI, FI, UPM
José M. Peña
jmpena@fi.upm.es

Programación en C

Programación en C

1
• Estructura de un programa
C.
• Variables básicas.
• Operaciones aritméticas.
• Sentencias de control.
• Arrays y Strings.
• Funciones.
• Estructuras de datos.
• Entrada/Salida básica.
• Ejemplos I.

• Modificadores de
ámbito de las
variables.
• Punteros y memoria
dinámica.
• Operadores de bit.
• Preprocesador C y
compilación.
• Librerías estándar.
• Ejemplos II.

Programación en C

Índice

2
Programación en C

Programación en C
Estructura de un programa en C

3
Estructura de un programa
en C
int main()
{
printf(“Hola mundo!!n”);
return(0);
}

Programación en C

Función main():

4
Estructura de un programa
en C
Fichero hola.c

Ejecución

Compilación
Programación en C

int main()
{
printf(“Hola mundo!!n”);
return(0);
}

5
•
•
•
•
•

Sensible a mayúsculas y minúsculas: sum y Sum
Indentación y espacios en blanco.
Sentencias (terminan con un punto y coma).
Bloques (delimitados entre llaves).
Elementos de un programa:
• Palabras reservadas (muy pocas).
• Funciones de librería estándar.
• Variables y funciones definidas por el programador.

Programación en C

Características de C

6
Finalización del programa

int main()
{
exit(0);
printf(“Esto no se ejecutan”);
}

Programación en C

• Se llega al final de la función main().
• La función main() realiza una llama return().
• Cualquier función realiza la llamada exit().

7
Comentarios

int main()
{
/* Esto es un comentario de varias
lineas.*/
return(0);
}

Programación en C

• Los comentarios en C pueden ocupar varias líneas y se
encuentran delimitados entre /* y */.

8
Programación en C

Programación en C
Variables básicas

9
Tipos de variables
•
•
•
•

Enteros (int).
Reales (float, double).
Caracteres (char).
Punteros (*).

NO existe un tipo booleano (en su lugar se usa int o char ).

Programación en C

• Los tipos elementales de variables en C son:

10
Modificadores de tipos
• Ciertos tipos básicos admiten diversos modificadores:

Ejemplos:

unsigned int
signed char
long int (usualmente representado como long)
unsigned long int

Programación en C

• unsigned :Sólo valores positivos (sin signo).
• signed : Valores positivos y negativos (por omisión).
• long : Formato largo (para enteros únicamente).

11
Declaración de variables
• Declaración simple:

• Declaración múltiple:
• char c,d;
• unsigned int i,j,k;

• Declaración y asignación:

Programación en C

• char c;
• unsigned int i;

• char c=’A’;
• unsigned int i=133,j=1229;

12
Llamada sizeof()

int a;
sizeof(a);
sizeof(unsigned int);

Programación en C

• La llamada sizeof() se utiliza para determinar el número de
bytes que ocupa una variable o un tipo:

13
Ámbito de las variables

• Ámbito global: La variable es visible para todas las funciones del
programa.
• Ámbito local: La variable es visible sólo dentro de la función.
(Tiene prioridad sobre el ámbito global)

Programación en C

• La declaración de las variables lleva asociado un ámbito,
dentro del cual la variable es visible:

14
int x,y;
int main()
{
float x,z;
/* Aquí x y z son reales e y un entero
*/
}
/* Aquí x e y son variables enteras */
/* La variable z no existe fuera de la
función */

Programación en C

Ámbito de las variables

15
Expresiones constantes
• Un expresión real se puede dar tanto en notación decimal
(2.56) como científica (2.45E-4).
• A una expresión de tipo long se le añade un L al final (200L).
• Una expresión de tipo carácter se define entre comillas simples
(‘A’).

Programación en C

• El formato de las expresiones constantes es;

16
Expresiones constantes
•
•
•
•
•

‘n’: Retorno de carro.
‘t’: Tabulador.
‘b’: Bell.
‘0’: Carácter nulo.
...

Programación en C

• Para definir las constantes de tipo carácter asociadas a
caracteres especiales se usan secuencias de escape:

17
Expresiones constantes

• Base decimal: 230.
• Base hexadecimal: 0x3A0 (comienza por cero-x).
• Base octal: 0210 (comienza por cero).

Programación en C

• Las constantes enteras se pueden representar en diferentes
bases numéricas:

18
• Las variables de tipo puntero representan direcciones donde
almacenar valores. Es importante diferenciar entre puntero
(espacio de memoria donde se almacena la dirección) y la
propia dirección apuntada por el puntero (su valor).
• Se declaran con un asterisco delante del identificador de la
variable:

int *px,y;
e y

/* px es un puntero a entero

Programación en C

Punteros

un entero */
19
Punteros
• Los gestión de punteros admite dos operadores básicos:

• Si x es una variable: &x es la dirección de memoria donde está
almacenada la variable.

Programación en C

• Si px es un puntero (dirección): *px es el contenido del puntero
(el valor almacenado en la dirección).

20
Punteros

px=&y;
/* px apunta a y
*/
*px=5;
/* y vale 5 */
}

Dirección Contenido
px-> 35:
y -> 39:

px-> 35:
y -> 39:

px-> 35:
y -> 39:

?
0

0
0

0
0

?
0

0
0

0
0

?
0

?
3

0 39
0 3

0 39
0 5

Gráfica
px
?

px
39

px
39

y
3

y
3

Programación en C

int main()
{
int *px,y=3;

y
5

21
La declaración de punteros genéricos a direcciones se asocian al
tipo void.
Declarar una variable (que no sea un puntero) de tipo void no
tiene sentido.
Ejemplo:
void *px,v; /* La variable v
está mal
declarada */

Programación en C

Punteros

22
Casting
• Casting: mecanismo usado para cambiar de tipo expresiones y
variables:

b=65.0;
a=(int)b;
c=(char)a;

Programación en C

int a;
float b;
char c;

/* a vale 65 */
/* c vale 65 (Código ASCII
de ‘A’) */

23
Programación en C

Programación en C
Operaciones aritméticas

24
Operaciones aritméticas
•
•
•
•
•

Suma (+)
Resta (-)
Multiplicación (*)
División (/)
Módulo o resto (%)

Programación en C

• El operador de asignación es el igual (=).
• Los operadores aritméticos son:

25
Operaciones aritméticas
• Depende de los operandos:
4 / 3
--> 1
4.0 / 3
--> 1.333
4 / 3.0
--> 1.333
4.0 / 3.0
--> 1.333

entero
real
real
real

Programación en C

• División entera vs división real:

26
Pre/post-incrementos
Los operadores unarios (++) y (--) representan operaciones de
incremento y decremento, respectivamente.

Ejemplos:

a=3; b=a++;
a=3; b=++a;
a=3; b=a--;

/* a=4, b=3 */
/* a=4, b=4 */
/* a=2, b=3 */

Programación en C

a++; /* similar a a=a+1 */

27
Operaciones de asignación
El operador de asignación en C es el igual(=)

a=b+3;
a+=3;
/* Equivalente a a=a+3 */
a*=c+d; /* Equivalente a a=a*(c+d) */
a/=a+1; /* Equivalente a a=a/(a+1) */
Para las asignaciones entre variables o expresiones de tipos
diferentes se recomienda hacer casting:

Programación en C

Existen otras variantes de asignación:

a=(int)(x/2.34);
28
Programación en C

Programación en C
Sentencias de control

29
Operadores de comparación
•
•
•
•

Igual (==)
Distinto (!=)
Mayor (>) y Mayor o igual (>=)
Menor (<) y Menor o igual (<=)

El resultado de un operador de comparación es un valor entero
(0 es falso) y (distinto de 0 verdadero).

Programación en C

Los operadores de comparación en C son:

a=3>7 /* a vale 0 (falso) */

30
Operadores lógicos
• And lógico (&&)
• Or lógico (||)
• Negación lógica (!)

Ejemplo

a=(3>2 || 5==4) && !1 /* Falso */

Programación en C

Sobre expresiones booleanas (enteros) se definen los siguientes
operadores lógicos:

C tiene un modelo de evaluación perezoso.

a=3>2 || w==4 /* w==4 no se evalúa */
31
if ... else
int main()
{
int a=3,b;

}

<if>

<else>

Programación en C

if(a>2)
{
b=100+a;
printf(“parte
if”);
}
else
printf(“parte
else”);

a>2

32
for
i=0

for(i=0;i<100;i++)
{
printf(“%d”,i*i);
ac+=i;
}
}

3
i++

i<100
<for>

1
2
Programación en C

int main()
{
int i,ac=0;

Sintaxis: 1
3
2
33
for(inicialización,condición_permanencia,incremento
)
while
i=0

int main()
{
int i=0,ac=0;

i++
<while>

printf(“%d”,i*i);
ac+=i;
i++;
}
}

Programación en C

while(i<100)
{

i<100

34
do ... while

do
{
printf(“%d”,i*i);
ac+=i;
i++;
}
while(i<100);
}

i=0
<do>
i++
i<100

Programación en C

int main()
{
int i=0,ac=0;

35
int main()
{
int i;
for(i=0;i<100;i++)
{
if(i%2==0)
continue;/*Comienza la
iteración*/
if(i%17==0)
break;
/*Sale del bucle*/
printf(“%d”,i);
}

Programación en C

break y continue

36
switch(ch)
{
case ‘A’: printf(“A”);
break;
case ‘B’:
case ‘C’: printf(“B o C”);
case ‘D’: printf(“B, C o D”);
break;
default: printf(“Otra letra”);
}

Programación en C

switch

37
Operador ?

a=b>0 ? c : c+1;
/* Equivalente a
if(b>0)
a=c;
else
a=c+1; */
}

Programación en C

int main()
{
int a,b=4,c=5;

38
Programación en C

Programación en C
Arrays y Strings

39
Definición de Arrays
int a[100]; /* Un vector de 100 enteros
*/
float vx[4][4]; /* Matriz de 4x4 reales
*/
int *pt[10][10][10][10]; /* Una matriz
de
4 dimensiones de punteros a enteros */

Programación en C

La definición de una variable de tipo array (vector) se realiza
indicando la dimensión entre corchetes:

Asimismo, pueden inicializarse:

float a[3]={2.45, -1.34, 2.11};
int vx[2][3]={{3,5,1},
{2,1,2}};

40
Indexación de arrays
int a[6];
a[0]=23;
a[3]=a[0]+5;
for(i=0;i<6;i++) printf(“%d”,a[i]);

a

23

Programación en C

A diferencia de otros lenguajes los arrays en C comienzan por el
elemento 0 y terminan en el n-1.

28

a[0] a[1] a[2] a[3] a[4] a[5]
41
Strings

char x[20],n[50]=“Chema”;
/*equivalente a
char n[50]={’C’,’h’,’e’,’m’,’a’,’0’}*/

n

C

h

e

m

a

Programación en C

Los strings son los arrays de caracteres de una dimensión. Son las
cadenas de caracteres.
Definición:

0

n[0] n[1] n[2] n[3] n[4] n[5]

Carácter
42
nulo
Asignación de Strings

char n[50]=“Chema”;
n=“Otro nombre”;

/* Correcto */
/* Error: no es
declaración */

Para las operaciones sobre strings se utilizan diferentes
funciones de librería. Por ejemplo, strlen() calcula el
tamaño del string (número de caracteres).

Programación en C

La asignación de strings por medio del operador (=) sólo es
posible en la declaración.
Ejemplo:

43
Arrays y punteros

int *pb,*pc;
int a[5]={10,20,30,40,50};
pb=a;
*pb=11;
pc=&a[3];
*pc=44;

a 10 20 30 40 50
pb

pc

a 11 20 30 40 50
pb

Programación en C

El identificador de una variable array tiene el valor de la
dirección de comienzo del mismo. Por lo tanto, su valor puede
usarse como un puntero.

pc

a 11 20 30 44 50
pb

pc
44
Arrays y punteros

Matriz de 2 dimensiones:
int mx[3][3];
mx
0,0 0,1 0,2 1,0 1,1 1,2 2,0 2,1 2,2

pm=mx; /* ERROR */
pm[0]=mx[1]; /* OK */
Pm[0][1]=mx[1][2] /* OK */

Puntero múltiple:
int **pm;
pm

Programación en C

Los arrays de varias dimensiones sí se diferencian de los punteros
múltiples:

0,0 0,1 0,2

2,0 2,1 2,2 1,0 1,1 1,2

45
Programación en C

Programación en C
Funciones

46
Definición de una función
tipo identificador (argumentos ...)
{
...
cuerpo de la función
...
}

Programación en C

La definición de una función tiene la estructura:

47
Uso de una función
•
•
•
•
•

Los argumentos se pasan siempre por valor.
El valor se devuelve por medio de return().
Los procedimientos son funciones de tipo void.
El control del número y tipo de argumentos es mínimo.
Las funciones en C admiten recursividad.

Programación en C

Una función se invoca proporcionando valores a los argumentos
de la llamada.

48
int factorial(int n)
{
int ret=1;
while (n>1)
ret*=n--;
return(ret);
}
int main()
{
printf(“%d!=%dn”,5,factorial(5));
}

Programación en C

Función de ejemplo

49
Declaración de funciones
• Definición de la función: Todo el código de la función.
• Declaración de la función: Únicamente la cabecera o prototipo de
la función:

int factorial(int n);
int factorial(int);
int factorial();

Programación en C

Para poder hacer uso de una función es necesario que ésta esté
definida o declarada con antelación.

50
Prototipo de una función
/* Prototipo */

int main()
{
printf(“%d!=%dn”,5,factorial(5));
}
int factorial(int n)
{
...
}

Programación en C

int factorial(int n);

/* Definición */

51
Paso por referencia
int reiniciar(int *a, int b)
{
*a=0; b=0;
}

Programación en C

El lenguaje C NO tiene paso por referencia. En su lugar se pasa
por valor la dirección de la variable a modificar.

int x=2,y=2;
reiniciar(&x,y); /* x valdrá 0 e y 2
*/

52
Paso por referencia
y 2

x 2

y 2
b 2

x 0

y 2

a

b 0

Programación en C

int reiniciar(int *a, int b)
{
*a=0; b=0;
}

x 2
a

int x=2,y=2;
reiniciar(&x,y);

53
Argumentos de tipo array

int vec[12],mat[4][4];
calcula(vec,mat);
void calcula(int v[], int m[4][])
{
...
}

Programación en C

Cuando un array se pasa como argumento a una función, la
última de las dimensiones no se define.
Ejemplo:

54
Programación en C

Programación en C
Estructuras de datos

55
Tipos de estructuras
El lenguaje C tiene tres tipos de estructuras de datos:

Programación en C

• Registro o estructura (struct).
• Unión de campos (union).
• Tipo enumerado (enum).

56
struct

struct [etiqueta]
{
tipo campo;
tipo campo;
...
};

Programación en C

Un struct es un tipo de datos complejo conformado por un
conjunto de campos de otros tipos (básicos o complejos)
asociados a un identificador:

57
struct persona
{
char nombre[20];
int
edad;
float peso;
} yo,tu,ellos[10];

Programación en C

struct

struct persona el={“Antonio
López”,31,80};
struct persona *ella, todos[20];

58
struct

struct persona el, *ella, todos[20];
printf(“Su nombre %sn”,el.nombre);
todos[2].edad=20;
ella=&todos[2];
printf(“La edad de ella es %dn”,ella>edad);

Programación en C

El acceso a los campos de una estructura se hace por medio de
un punto (.) o de una flecha (->) si es un puntero a estructura.

59
union

struct datos
{
int a,b;
int x[2];
char c;
} d;

d.a
d.b
d.x[0]
d.x[1]
d.c

union datos
{
int a,b;
int x[2];
char c;
} d;

d.a
d.b
d.c

Programación en C

Un union es similar a un struct, pero todos los campos comparten la
misma memoria.

d.x

60
Los union se usan para
diferentes
representaciones de los
datos o para
información
condicionada:
union
{
int integer;
char oct[4];
} data;

struct empleado
{
char nombre[40];
int
tipo_contrato;
union
{
int nomina;
int pts_hora;
} sueldo;
} p;

Programación en C

Uso de union

61
Estructuras y funciones

void evaluar_empleado(struct empleado*
emp);
struct empleado* nuevo_empleado();

Programación en C

Las estructuras de datos son tipos complejos y (aunque ciertos
compiladores lo admiten) no deben ser pasados como
argumentos ni devueltos por funciones. En su lugar se usan
punteros a dichas estructuras:

62
enum
enum color {rojo, verde, azul} fondo;
enum color letras, borde=verde;
enum tipo_empleado {contratado=1,
temporal=2,
becario=3};

Programación en C

Las enumeraciones con conjuntos de constantes numéricas
definidas por el usuario.

63
Definición de nuevos tipos
typedef int boolean;
typedef struct persona persona_t;
typedef struct punto
{
int
coord[3];
enum color col;
} punto_t;
persona_t p[4];

Programación en C

Las sentencias typedef se usan para definir nuevos tipos en
base a tipos ya definidos:

64
Programación en C

Programación en C
Entrada/salida básica

65
Funciones de entrada/salida

• Entrada: scanf().
• Salida: printf().

Programación en C

• Las funcionalidades de entrada/salida en C no pertenecen a
las palabras reservadas del lenguaje. Son funciones de librería,
por ejemplo:

66
printf()
• El formato de llamada de printf()es:

donde:

• format : Es el string de formato de salida de los datos.
• expi : Es la expresión a incluir dentro del formato.

Programación en C

printf(format, exp1, exp2, exp3,...,
expn);

67
printf()
int a=3;
float x=23.0;
char c=‘A’;
printf(“Hola mundo!!n”);

Programación en C

Ejemplo:

printf(“Un entero %dn”,a);
printf(“Un real %f ny un char
%cn”,x,c);

68
printf()
Expresión

Resultado

%d %i
signo
%u
signo
%o
%x %X
sin signo
%f
notación punto
%e %E %g %G
notación científica
%c

entero

entero decimal con

entero

entero decimal sin

entero
entero

entero octal sin signo
entero hexadecimal
real

real en

real

real en

Programación en C

Formato

carácter

carácter

69
printf()
•
•
•
•

Precisión (número de decimales).
Justificación (izquierda o derecha).
Caracteres especiales (% o ).
...

Ver página del manual:

Programación en C

• Otras opciones de formato:

man printf

70
scanf()
• El formato de llamada de scanf()es:

donde:

• format : Es el string de formato de entrada de los datos.
• diri : Es la dirección donde se almacena el resultado.

Programación en C

scanf(format, dir1, dir2, dir3,...,
dirn);

71
scanf()
int a,*pa;
float x;
char c;
scanf(“%d”,&a); /* Lee un entero y lo
almacena en a */
scanf(“%f %c”,&x,&c); /* Lee x y c */
scanf(“%d”,pa); /* PELIGROSO */
pa=&a; scanf(“%d”,pa); /* OK. Lee a */

Programación en C

Ejemplo

72
scanf() Lectura de strings
Ejemplo:

scanf(“%s”,pc); /* PELIGROSO */

Programación en C

char *pc;
char str[82];

scanf(“%s”,str); /* Lee hasta un blanco
o
fin de línea */
73

scanf(“%[^n]”,str); /* Lee toda la
línea */
Programación en C

Programación en C
Ejemplos I

74
Ejemplos I-1

Programación en C

Se plantea el desarrollo de un programa que lea los datos
(nombre, apellidos, nif y sueldo) de 10 empleados por teclado e
imprima los empleados con sueldo máximo y mínimo, así como la
media de los sueldos.

75
En primer lugar definimos la estructura de datos a utilizar.
struct empleado_st
{
char nombre[40];
char apellidos[40];
char nif[10];
long sueldo;
};
typedef struct empleado_st empleado_t;

Programación en C

Ejemplos I-1: Solución

76
Ejemplos I-1: Solución
Seguidamente programamos el cuerpo del programa
principal.
printf(“Mínimo:n”);
imprimir_empleado(&emp[min]);
printf(“Máximo:n”);
imprimir_empleado(&emp[max]);
printf(“Media:%9.2fn”,
med);
return(0);

}
for(i=0;i<10;i++)
leer_empleado(&emp[i]);
min=buscar_min(emp,10);
max=buscar_max(emp,10);
med=buscar_med(emp,10);

Programación en C

int main()
{
empleado_t emp[10];
int i,min,max;
float med;

77
Los prototipos de las funciones a implementar son:
void leer_empleado
(empleado_t
int
buscar_min
(empleado_t
int
int
buscar_max
(empleado_t
int
float buscar_med
(empleado_t
int
void imprimir_empleado(empleado_t

*pe);
es[],
tam);
es[],
tam);
es[],
tam);
*pe);

Programación en C

Ejemplos I-1: Solución

78
void leer_empleado
(empleado_t *pe)
{
printf("Nombre y Apellidos: ");
scanf("%s %[^n]",
pe->nombre,pe->apellidos);
printf("NIF: ");
scanf("%s",pe->nif);
printf("Sueldo: ");
scanf("%ld",&pe->sueldo);
printf("-------------n");
}

Programación en C

Ejemplos I-1: Solución

79
Ejemplos I-1: Solución
int

buscar_min

(empleado_t es[],
int
tam)

int candidato=0,i;
for(i=1;i<tam;i++)
if(es[i].sueldo<es[candidato].sueldo)
candidato=i;
return(candidato);
}

Programación en C

{

80
Ejemplos I-1: Solución
int

buscar_max

(empleado_t es[],
int
tam)

int candidato=0,i;
for(i=1;i<tam;i++)
if(es[i].sueldo>es[candidato].sueldo)
candidato=i;
return(candidato);
}

Programación en C

{

81
Ejemplos I-1: Solución
float buscar_med

(empleado_t es[],
int
tam)

int i;
float acc=0;
for(i=0;i<tam;i++)
acc+=(float)es[i].sueldo;
return(acc/(float)tam);

Programación en C

{

}
82
void imprimir_empleado(empleado_t *pe)
{
printf("tNombre:
%sn",pe>nombre);
printf("tApellidos: %sn",pe>apellidos);
printf("tNIF:
%sn",pe->nif);
printf("tSueldo:
%ldn",pe>sueldo);
}

Programación en C

Ejemplos I-1: Solución

83

Weitere ähnliche Inhalte

Was ist angesagt?

Clase 1- Programacion Lineal
Clase 1- Programacion LinealClase 1- Programacion Lineal
Clase 1- Programacion Linealkarlalopezbello
 
Ejemplos de contar,contara....
Ejemplos de contar,contara....Ejemplos de contar,contara....
Ejemplos de contar,contara....Lore Valderrama
 
Reporte de practicas
Reporte de practicasReporte de practicas
Reporte de practicasJames Logan
 
Funciones Internas y Operación de Asignación
Funciones Internas y Operación de AsignaciónFunciones Internas y Operación de Asignación
Funciones Internas y Operación de AsignaciónGerson Cabezas
 
Lenguajesdeprogramacion c nivel1-unidad2-03-expresiones y funciones matematicas
Lenguajesdeprogramacion c nivel1-unidad2-03-expresiones y funciones matematicasLenguajesdeprogramacion c nivel1-unidad2-03-expresiones y funciones matematicas
Lenguajesdeprogramacion c nivel1-unidad2-03-expresiones y funciones matematicasCarlos
 
Operaciones con n+¦meros complejos
Operaciones con n+¦meros complejosOperaciones con n+¦meros complejos
Operaciones con n+¦meros complejosLauris Salazar
 
Operaciones con números complejos
Operaciones con números complejosOperaciones con números complejos
Operaciones con números complejosmaria_arango
 
Archivos apuntes comandos comunes de matlab para el procesamiento de imágen
Archivos apuntes comandos comunes de matlab para el procesamiento de imágenArchivos apuntes comandos comunes de matlab para el procesamiento de imágen
Archivos apuntes comandos comunes de matlab para el procesamiento de imágenJuan Ra
 
Guia Programacion 1
Guia Programacion 1Guia Programacion 1
Guia Programacion 1martell024
 
11310366 p5
11310366 p511310366 p5
11310366 p5leiru274
 
Ejercicios sencillos en c
Ejercicios sencillos en cEjercicios sencillos en c
Ejercicios sencillos en cAlma Navarro
 
Excel formulas y_funciones
Excel formulas y_funcionesExcel formulas y_funciones
Excel formulas y_funcionesCarlos Dominguez
 

Was ist angesagt? (19)

Clase 1- Programacion Lineal
Clase 1- Programacion LinealClase 1- Programacion Lineal
Clase 1- Programacion Lineal
 
Punto 15
Punto 15Punto 15
Punto 15
 
Continuidad derivada sppt
Continuidad derivada spptContinuidad derivada sppt
Continuidad derivada sppt
 
Ejemplos de contar,contara....
Ejemplos de contar,contara....Ejemplos de contar,contara....
Ejemplos de contar,contara....
 
Reporte de practicas
Reporte de practicasReporte de practicas
Reporte de practicas
 
Funciones Internas y Operación de Asignación
Funciones Internas y Operación de AsignaciónFunciones Internas y Operación de Asignación
Funciones Internas y Operación de Asignación
 
Lenguajesdeprogramacion c nivel1-unidad2-03-expresiones y funciones matematicas
Lenguajesdeprogramacion c nivel1-unidad2-03-expresiones y funciones matematicasLenguajesdeprogramacion c nivel1-unidad2-03-expresiones y funciones matematicas
Lenguajesdeprogramacion c nivel1-unidad2-03-expresiones y funciones matematicas
 
Funciones reales
Funciones reales Funciones reales
Funciones reales
 
Operaciones con n+¦meros complejos
Operaciones con n+¦meros complejosOperaciones con n+¦meros complejos
Operaciones con n+¦meros complejos
 
Operaciones con números complejos
Operaciones con números complejosOperaciones con números complejos
Operaciones con números complejos
 
Funciones Internas
Funciones Internas Funciones Internas
Funciones Internas
 
Archivos apuntes comandos comunes de matlab para el procesamiento de imágen
Archivos apuntes comandos comunes de matlab para el procesamiento de imágenArchivos apuntes comandos comunes de matlab para el procesamiento de imágen
Archivos apuntes comandos comunes de matlab para el procesamiento de imágen
 
Guia Programacion 1
Guia Programacion 1Guia Programacion 1
Guia Programacion 1
 
aplicacion d la derivada
aplicacion d la derivadaaplicacion d la derivada
aplicacion d la derivada
 
Instrucciones 3 año
Instrucciones 3 añoInstrucciones 3 año
Instrucciones 3 año
 
Circuitos Sumadores y Restadores
Circuitos Sumadores y RestadoresCircuitos Sumadores y Restadores
Circuitos Sumadores y Restadores
 
11310366 p5
11310366 p511310366 p5
11310366 p5
 
Ejercicios sencillos en c
Ejercicios sencillos en cEjercicios sencillos en c
Ejercicios sencillos en c
 
Excel formulas y_funciones
Excel formulas y_funcionesExcel formulas y_funciones
Excel formulas y_funciones
 

Andere mochten auch

Ute – angela maria cedeño r.-docente gonzalo remache-tema Plan de investigaci...
Ute – angela maria cedeño r.-docente gonzalo remache-tema Plan de investigaci...Ute – angela maria cedeño r.-docente gonzalo remache-tema Plan de investigaci...
Ute – angela maria cedeño r.-docente gonzalo remache-tema Plan de investigaci...140660
 
SXSW Visual Resume Adam Beasley
SXSW Visual Resume Adam BeasleySXSW Visual Resume Adam Beasley
SXSW Visual Resume Adam BeasleyAdam Beasley
 
Utbildningskontrakt presstraff 25april2012
Utbildningskontrakt presstraff 25april2012Utbildningskontrakt presstraff 25april2012
Utbildningskontrakt presstraff 25april2012Peter Johansson
 
Xavier Capdepon on Music Production
Xavier Capdepon on Music ProductionXavier Capdepon on Music Production
Xavier Capdepon on Music ProductionXavier Capdepon
 
How to land the job you want
How to land the job you wantHow to land the job you want
How to land the job you wantSSU Peer Career
 
Trabajos que tienden a desaparecer
Trabajos que tienden a desaparecerTrabajos que tienden a desaparecer
Trabajos que tienden a desaparecerIosune Muñoz Betelu
 
QUIHUIS V. STATE FARM MUTUAL AUTOMOBILE INSURANCE COMPANY
QUIHUIS V. STATE FARM MUTUAL AUTOMOBILE INSURANCE COMPANY
QUIHUIS V. STATE FARM MUTUAL AUTOMOBILE INSURANCE COMPANY
QUIHUIS V. STATE FARM MUTUAL AUTOMOBILE INSURANCE COMPANY enchantingkingd96
 
Ute+otras variables que determinan la diversidad en el aula
Ute+otras variables que determinan la diversidad en el aulaUte+otras variables que determinan la diversidad en el aula
Ute+otras variables que determinan la diversidad en el aulaJessicaEnith
 
Quintel 8 Port Press Release Feb2012 Final Copy
Quintel 8 Port Press Release Feb2012  Final CopyQuintel 8 Port Press Release Feb2012  Final Copy
Quintel 8 Port Press Release Feb2012 Final CopyNick Walker
 
UTE Problemas frecuentes del Desarrollo Apego-Ansiedad
UTE Problemas frecuentes del Desarrollo Apego-AnsiedadUTE Problemas frecuentes del Desarrollo Apego-Ansiedad
UTE Problemas frecuentes del Desarrollo Apego-AnsiedadSilvana Perez
 

Andere mochten auch (20)

Evolucioncomputarizada 140303143536-phpapp01
Evolucioncomputarizada 140303143536-phpapp01Evolucioncomputarizada 140303143536-phpapp01
Evolucioncomputarizada 140303143536-phpapp01
 
Mongolian Youth Federation E-Newsletter - November 2014 №3
Mongolian Youth Federation E-Newsletter - November 2014 №3Mongolian Youth Federation E-Newsletter - November 2014 №3
Mongolian Youth Federation E-Newsletter - November 2014 №3
 
Xdbax
XdbaxXdbax
Xdbax
 
Xena temporada 1
Xena temporada 1Xena temporada 1
Xena temporada 1
 
Monitoring sociale wijkteams, gemeente Zaanstad
Monitoring sociale wijkteams, gemeente ZaanstadMonitoring sociale wijkteams, gemeente Zaanstad
Monitoring sociale wijkteams, gemeente Zaanstad
 
Ute – angela maria cedeño r.-docente gonzalo remache-tema Plan de investigaci...
Ute – angela maria cedeño r.-docente gonzalo remache-tema Plan de investigaci...Ute – angela maria cedeño r.-docente gonzalo remache-tema Plan de investigaci...
Ute – angela maria cedeño r.-docente gonzalo remache-tema Plan de investigaci...
 
SXSW Visual Resume Adam Beasley
SXSW Visual Resume Adam BeasleySXSW Visual Resume Adam Beasley
SXSW Visual Resume Adam Beasley
 
Utbildningskontrakt presstraff 25april2012
Utbildningskontrakt presstraff 25april2012Utbildningskontrakt presstraff 25april2012
Utbildningskontrakt presstraff 25april2012
 
Xavier Capdepon on Music Production
Xavier Capdepon on Music ProductionXavier Capdepon on Music Production
Xavier Capdepon on Music Production
 
How to land the job you want
How to land the job you wantHow to land the job you want
How to land the job you want
 
Xiv to 2014 blog
Xiv to 2014 blogXiv to 2014 blog
Xiv to 2014 blog
 
Trabajos que tienden a desaparecer
Trabajos que tienden a desaparecerTrabajos que tienden a desaparecer
Trabajos que tienden a desaparecer
 
SXSW2014ハイライトと日本への意味合い
SXSW2014ハイライトと日本への意味合いSXSW2014ハイライトと日本への意味合い
SXSW2014ハイライトと日本への意味合い
 
Nutrients 2
Nutrients 2Nutrients 2
Nutrients 2
 
QUIHUIS V. STATE FARM MUTUAL AUTOMOBILE INSURANCE COMPANY
QUIHUIS V. STATE FARM MUTUAL AUTOMOBILE INSURANCE COMPANY
QUIHUIS V. STATE FARM MUTUAL AUTOMOBILE INSURANCE COMPANY
QUIHUIS V. STATE FARM MUTUAL AUTOMOBILE INSURANCE COMPANY
 
Green fee desk pp
Green fee desk ppGreen fee desk pp
Green fee desk pp
 
Ririfin
RirifinRirifin
Ririfin
 
Ute+otras variables que determinan la diversidad en el aula
Ute+otras variables que determinan la diversidad en el aulaUte+otras variables que determinan la diversidad en el aula
Ute+otras variables que determinan la diversidad en el aula
 
Quintel 8 Port Press Release Feb2012 Final Copy
Quintel 8 Port Press Release Feb2012  Final CopyQuintel 8 Port Press Release Feb2012  Final Copy
Quintel 8 Port Press Release Feb2012 Final Copy
 
UTE Problemas frecuentes del Desarrollo Apego-Ansiedad
UTE Problemas frecuentes del Desarrollo Apego-AnsiedadUTE Problemas frecuentes del Desarrollo Apego-Ansiedad
UTE Problemas frecuentes del Desarrollo Apego-Ansiedad
 

Ähnlich wie Curso c i (20)

Curso c ii
Curso c iiCurso c ii
Curso c ii
 
Elementos basicos c
Elementos basicos cElementos basicos c
Elementos basicos c
 
Diapositivs~Elementos_basicos_C.pdf
Diapositivs~Elementos_basicos_C.pdfDiapositivs~Elementos_basicos_C.pdf
Diapositivs~Elementos_basicos_C.pdf
 
Elementosbasicosc
Elementosbasicosc Elementosbasicosc
Elementosbasicosc
 
Elementos basicos cpp_oto2014
Elementos basicos cpp_oto2014Elementos basicos cpp_oto2014
Elementos basicos cpp_oto2014
 
Turbo c
Turbo cTurbo c
Turbo c
 
Elementos basicos c++
Elementos basicos c++Elementos basicos c++
Elementos basicos c++
 
Elementos basicos c++
Elementos basicos c++Elementos basicos c++
Elementos basicos c++
 
Elementos basicos c++
Elementos basicos c++Elementos basicos c++
Elementos basicos c++
 
Introduccion a C++.pdf
Introduccion a C++.pdfIntroduccion a C++.pdf
Introduccion a C++.pdf
 
Revista digital
Revista digitalRevista digital
Revista digital
 
Repaso del lenguaje
Repaso del lenguajeRepaso del lenguaje
Repaso del lenguaje
 
Arreglos unidimensionales
Arreglos unidimensionalesArreglos unidimensionales
Arreglos unidimensionales
 
Repaso del lenguaje C++
Repaso del lenguaje C++Repaso del lenguaje C++
Repaso del lenguaje C++
 
Clase 1 Lenguaje C++
Clase 1 Lenguaje C++Clase 1 Lenguaje C++
Clase 1 Lenguaje C++
 
Curso c ii
Curso c iiCurso c ii
Curso c ii
 
Curso C Ii
Curso C IiCurso C Ii
Curso C Ii
 
Elementos basicos c
Elementos basicos cElementos basicos c
Elementos basicos c
 
Elementos basicos C++
Elementos basicos C++Elementos basicos C++
Elementos basicos C++
 
Elementos basicos c
Elementos basicos cElementos basicos c
Elementos basicos c
 

Curso c i

  • 1. DATSI, FI, UPM José M. Peña jmpena@fi.upm.es Programación en C Programación en C 1
  • 2. • Estructura de un programa C. • Variables básicas. • Operaciones aritméticas. • Sentencias de control. • Arrays y Strings. • Funciones. • Estructuras de datos. • Entrada/Salida básica. • Ejemplos I. • Modificadores de ámbito de las variables. • Punteros y memoria dinámica. • Operadores de bit. • Preprocesador C y compilación. • Librerías estándar. • Ejemplos II. Programación en C Índice 2
  • 3. Programación en C Programación en C Estructura de un programa en C 3
  • 4. Estructura de un programa en C int main() { printf(“Hola mundo!!n”); return(0); } Programación en C Función main(): 4
  • 5. Estructura de un programa en C Fichero hola.c Ejecución Compilación Programación en C int main() { printf(“Hola mundo!!n”); return(0); } 5
  • 6. • • • • • Sensible a mayúsculas y minúsculas: sum y Sum Indentación y espacios en blanco. Sentencias (terminan con un punto y coma). Bloques (delimitados entre llaves). Elementos de un programa: • Palabras reservadas (muy pocas). • Funciones de librería estándar. • Variables y funciones definidas por el programador. Programación en C Características de C 6
  • 7. Finalización del programa int main() { exit(0); printf(“Esto no se ejecutan”); } Programación en C • Se llega al final de la función main(). • La función main() realiza una llama return(). • Cualquier función realiza la llamada exit(). 7
  • 8. Comentarios int main() { /* Esto es un comentario de varias lineas.*/ return(0); } Programación en C • Los comentarios en C pueden ocupar varias líneas y se encuentran delimitados entre /* y */. 8
  • 9. Programación en C Programación en C Variables básicas 9
  • 10. Tipos de variables • • • • Enteros (int). Reales (float, double). Caracteres (char). Punteros (*). NO existe un tipo booleano (en su lugar se usa int o char ). Programación en C • Los tipos elementales de variables en C son: 10
  • 11. Modificadores de tipos • Ciertos tipos básicos admiten diversos modificadores: Ejemplos: unsigned int signed char long int (usualmente representado como long) unsigned long int Programación en C • unsigned :Sólo valores positivos (sin signo). • signed : Valores positivos y negativos (por omisión). • long : Formato largo (para enteros únicamente). 11
  • 12. Declaración de variables • Declaración simple: • Declaración múltiple: • char c,d; • unsigned int i,j,k; • Declaración y asignación: Programación en C • char c; • unsigned int i; • char c=’A’; • unsigned int i=133,j=1229; 12
  • 13. Llamada sizeof() int a; sizeof(a); sizeof(unsigned int); Programación en C • La llamada sizeof() se utiliza para determinar el número de bytes que ocupa una variable o un tipo: 13
  • 14. Ámbito de las variables • Ámbito global: La variable es visible para todas las funciones del programa. • Ámbito local: La variable es visible sólo dentro de la función. (Tiene prioridad sobre el ámbito global) Programación en C • La declaración de las variables lleva asociado un ámbito, dentro del cual la variable es visible: 14
  • 15. int x,y; int main() { float x,z; /* Aquí x y z son reales e y un entero */ } /* Aquí x e y son variables enteras */ /* La variable z no existe fuera de la función */ Programación en C Ámbito de las variables 15
  • 16. Expresiones constantes • Un expresión real se puede dar tanto en notación decimal (2.56) como científica (2.45E-4). • A una expresión de tipo long se le añade un L al final (200L). • Una expresión de tipo carácter se define entre comillas simples (‘A’). Programación en C • El formato de las expresiones constantes es; 16
  • 17. Expresiones constantes • • • • • ‘n’: Retorno de carro. ‘t’: Tabulador. ‘b’: Bell. ‘0’: Carácter nulo. ... Programación en C • Para definir las constantes de tipo carácter asociadas a caracteres especiales se usan secuencias de escape: 17
  • 18. Expresiones constantes • Base decimal: 230. • Base hexadecimal: 0x3A0 (comienza por cero-x). • Base octal: 0210 (comienza por cero). Programación en C • Las constantes enteras se pueden representar en diferentes bases numéricas: 18
  • 19. • Las variables de tipo puntero representan direcciones donde almacenar valores. Es importante diferenciar entre puntero (espacio de memoria donde se almacena la dirección) y la propia dirección apuntada por el puntero (su valor). • Se declaran con un asterisco delante del identificador de la variable: int *px,y; e y /* px es un puntero a entero Programación en C Punteros un entero */ 19
  • 20. Punteros • Los gestión de punteros admite dos operadores básicos: • Si x es una variable: &x es la dirección de memoria donde está almacenada la variable. Programación en C • Si px es un puntero (dirección): *px es el contenido del puntero (el valor almacenado en la dirección). 20
  • 21. Punteros px=&y; /* px apunta a y */ *px=5; /* y vale 5 */ } Dirección Contenido px-> 35: y -> 39: px-> 35: y -> 39: px-> 35: y -> 39: ? 0 0 0 0 0 ? 0 0 0 0 0 ? 0 ? 3 0 39 0 3 0 39 0 5 Gráfica px ? px 39 px 39 y 3 y 3 Programación en C int main() { int *px,y=3; y 5 21
  • 22. La declaración de punteros genéricos a direcciones se asocian al tipo void. Declarar una variable (que no sea un puntero) de tipo void no tiene sentido. Ejemplo: void *px,v; /* La variable v está mal declarada */ Programación en C Punteros 22
  • 23. Casting • Casting: mecanismo usado para cambiar de tipo expresiones y variables: b=65.0; a=(int)b; c=(char)a; Programación en C int a; float b; char c; /* a vale 65 */ /* c vale 65 (Código ASCII de ‘A’) */ 23
  • 24. Programación en C Programación en C Operaciones aritméticas 24
  • 25. Operaciones aritméticas • • • • • Suma (+) Resta (-) Multiplicación (*) División (/) Módulo o resto (%) Programación en C • El operador de asignación es el igual (=). • Los operadores aritméticos son: 25
  • 26. Operaciones aritméticas • Depende de los operandos: 4 / 3 --> 1 4.0 / 3 --> 1.333 4 / 3.0 --> 1.333 4.0 / 3.0 --> 1.333 entero real real real Programación en C • División entera vs división real: 26
  • 27. Pre/post-incrementos Los operadores unarios (++) y (--) representan operaciones de incremento y decremento, respectivamente. Ejemplos: a=3; b=a++; a=3; b=++a; a=3; b=a--; /* a=4, b=3 */ /* a=4, b=4 */ /* a=2, b=3 */ Programación en C a++; /* similar a a=a+1 */ 27
  • 28. Operaciones de asignación El operador de asignación en C es el igual(=) a=b+3; a+=3; /* Equivalente a a=a+3 */ a*=c+d; /* Equivalente a a=a*(c+d) */ a/=a+1; /* Equivalente a a=a/(a+1) */ Para las asignaciones entre variables o expresiones de tipos diferentes se recomienda hacer casting: Programación en C Existen otras variantes de asignación: a=(int)(x/2.34); 28
  • 29. Programación en C Programación en C Sentencias de control 29
  • 30. Operadores de comparación • • • • Igual (==) Distinto (!=) Mayor (>) y Mayor o igual (>=) Menor (<) y Menor o igual (<=) El resultado de un operador de comparación es un valor entero (0 es falso) y (distinto de 0 verdadero). Programación en C Los operadores de comparación en C son: a=3>7 /* a vale 0 (falso) */ 30
  • 31. Operadores lógicos • And lógico (&&) • Or lógico (||) • Negación lógica (!) Ejemplo a=(3>2 || 5==4) && !1 /* Falso */ Programación en C Sobre expresiones booleanas (enteros) se definen los siguientes operadores lógicos: C tiene un modelo de evaluación perezoso. a=3>2 || w==4 /* w==4 no se evalúa */ 31
  • 32. if ... else int main() { int a=3,b; } <if> <else> Programación en C if(a>2) { b=100+a; printf(“parte if”); } else printf(“parte else”); a>2 32
  • 33. for i=0 for(i=0;i<100;i++) { printf(“%d”,i*i); ac+=i; } } 3 i++ i<100 <for> 1 2 Programación en C int main() { int i,ac=0; Sintaxis: 1 3 2 33 for(inicialización,condición_permanencia,incremento )
  • 36. int main() { int i; for(i=0;i<100;i++) { if(i%2==0) continue;/*Comienza la iteración*/ if(i%17==0) break; /*Sale del bucle*/ printf(“%d”,i); } Programación en C break y continue 36
  • 37. switch(ch) { case ‘A’: printf(“A”); break; case ‘B’: case ‘C’: printf(“B o C”); case ‘D’: printf(“B, C o D”); break; default: printf(“Otra letra”); } Programación en C switch 37
  • 38. Operador ? a=b>0 ? c : c+1; /* Equivalente a if(b>0) a=c; else a=c+1; */ } Programación en C int main() { int a,b=4,c=5; 38
  • 39. Programación en C Programación en C Arrays y Strings 39
  • 40. Definición de Arrays int a[100]; /* Un vector de 100 enteros */ float vx[4][4]; /* Matriz de 4x4 reales */ int *pt[10][10][10][10]; /* Una matriz de 4 dimensiones de punteros a enteros */ Programación en C La definición de una variable de tipo array (vector) se realiza indicando la dimensión entre corchetes: Asimismo, pueden inicializarse: float a[3]={2.45, -1.34, 2.11}; int vx[2][3]={{3,5,1}, {2,1,2}}; 40
  • 41. Indexación de arrays int a[6]; a[0]=23; a[3]=a[0]+5; for(i=0;i<6;i++) printf(“%d”,a[i]); a 23 Programación en C A diferencia de otros lenguajes los arrays en C comienzan por el elemento 0 y terminan en el n-1. 28 a[0] a[1] a[2] a[3] a[4] a[5] 41
  • 42. Strings char x[20],n[50]=“Chema”; /*equivalente a char n[50]={’C’,’h’,’e’,’m’,’a’,’0’}*/ n C h e m a Programación en C Los strings son los arrays de caracteres de una dimensión. Son las cadenas de caracteres. Definición: 0 n[0] n[1] n[2] n[3] n[4] n[5] Carácter 42 nulo
  • 43. Asignación de Strings char n[50]=“Chema”; n=“Otro nombre”; /* Correcto */ /* Error: no es declaración */ Para las operaciones sobre strings se utilizan diferentes funciones de librería. Por ejemplo, strlen() calcula el tamaño del string (número de caracteres). Programación en C La asignación de strings por medio del operador (=) sólo es posible en la declaración. Ejemplo: 43
  • 44. Arrays y punteros int *pb,*pc; int a[5]={10,20,30,40,50}; pb=a; *pb=11; pc=&a[3]; *pc=44; a 10 20 30 40 50 pb pc a 11 20 30 40 50 pb Programación en C El identificador de una variable array tiene el valor de la dirección de comienzo del mismo. Por lo tanto, su valor puede usarse como un puntero. pc a 11 20 30 44 50 pb pc 44
  • 45. Arrays y punteros Matriz de 2 dimensiones: int mx[3][3]; mx 0,0 0,1 0,2 1,0 1,1 1,2 2,0 2,1 2,2 pm=mx; /* ERROR */ pm[0]=mx[1]; /* OK */ Pm[0][1]=mx[1][2] /* OK */ Puntero múltiple: int **pm; pm Programación en C Los arrays de varias dimensiones sí se diferencian de los punteros múltiples: 0,0 0,1 0,2 2,0 2,1 2,2 1,0 1,1 1,2 45
  • 46. Programación en C Programación en C Funciones 46
  • 47. Definición de una función tipo identificador (argumentos ...) { ... cuerpo de la función ... } Programación en C La definición de una función tiene la estructura: 47
  • 48. Uso de una función • • • • • Los argumentos se pasan siempre por valor. El valor se devuelve por medio de return(). Los procedimientos son funciones de tipo void. El control del número y tipo de argumentos es mínimo. Las funciones en C admiten recursividad. Programación en C Una función se invoca proporcionando valores a los argumentos de la llamada. 48
  • 49. int factorial(int n) { int ret=1; while (n>1) ret*=n--; return(ret); } int main() { printf(“%d!=%dn”,5,factorial(5)); } Programación en C Función de ejemplo 49
  • 50. Declaración de funciones • Definición de la función: Todo el código de la función. • Declaración de la función: Únicamente la cabecera o prototipo de la función: int factorial(int n); int factorial(int); int factorial(); Programación en C Para poder hacer uso de una función es necesario que ésta esté definida o declarada con antelación. 50
  • 51. Prototipo de una función /* Prototipo */ int main() { printf(“%d!=%dn”,5,factorial(5)); } int factorial(int n) { ... } Programación en C int factorial(int n); /* Definición */ 51
  • 52. Paso por referencia int reiniciar(int *a, int b) { *a=0; b=0; } Programación en C El lenguaje C NO tiene paso por referencia. En su lugar se pasa por valor la dirección de la variable a modificar. int x=2,y=2; reiniciar(&x,y); /* x valdrá 0 e y 2 */ 52
  • 53. Paso por referencia y 2 x 2 y 2 b 2 x 0 y 2 a b 0 Programación en C int reiniciar(int *a, int b) { *a=0; b=0; } x 2 a int x=2,y=2; reiniciar(&x,y); 53
  • 54. Argumentos de tipo array int vec[12],mat[4][4]; calcula(vec,mat); void calcula(int v[], int m[4][]) { ... } Programación en C Cuando un array se pasa como argumento a una función, la última de las dimensiones no se define. Ejemplo: 54
  • 55. Programación en C Programación en C Estructuras de datos 55
  • 56. Tipos de estructuras El lenguaje C tiene tres tipos de estructuras de datos: Programación en C • Registro o estructura (struct). • Unión de campos (union). • Tipo enumerado (enum). 56
  • 57. struct struct [etiqueta] { tipo campo; tipo campo; ... }; Programación en C Un struct es un tipo de datos complejo conformado por un conjunto de campos de otros tipos (básicos o complejos) asociados a un identificador: 57
  • 58. struct persona { char nombre[20]; int edad; float peso; } yo,tu,ellos[10]; Programación en C struct struct persona el={“Antonio López”,31,80}; struct persona *ella, todos[20]; 58
  • 59. struct struct persona el, *ella, todos[20]; printf(“Su nombre %sn”,el.nombre); todos[2].edad=20; ella=&todos[2]; printf(“La edad de ella es %dn”,ella>edad); Programación en C El acceso a los campos de una estructura se hace por medio de un punto (.) o de una flecha (->) si es un puntero a estructura. 59
  • 60. union struct datos { int a,b; int x[2]; char c; } d; d.a d.b d.x[0] d.x[1] d.c union datos { int a,b; int x[2]; char c; } d; d.a d.b d.c Programación en C Un union es similar a un struct, pero todos los campos comparten la misma memoria. d.x 60
  • 61. Los union se usan para diferentes representaciones de los datos o para información condicionada: union { int integer; char oct[4]; } data; struct empleado { char nombre[40]; int tipo_contrato; union { int nomina; int pts_hora; } sueldo; } p; Programación en C Uso de union 61
  • 62. Estructuras y funciones void evaluar_empleado(struct empleado* emp); struct empleado* nuevo_empleado(); Programación en C Las estructuras de datos son tipos complejos y (aunque ciertos compiladores lo admiten) no deben ser pasados como argumentos ni devueltos por funciones. En su lugar se usan punteros a dichas estructuras: 62
  • 63. enum enum color {rojo, verde, azul} fondo; enum color letras, borde=verde; enum tipo_empleado {contratado=1, temporal=2, becario=3}; Programación en C Las enumeraciones con conjuntos de constantes numéricas definidas por el usuario. 63
  • 64. Definición de nuevos tipos typedef int boolean; typedef struct persona persona_t; typedef struct punto { int coord[3]; enum color col; } punto_t; persona_t p[4]; Programación en C Las sentencias typedef se usan para definir nuevos tipos en base a tipos ya definidos: 64
  • 65. Programación en C Programación en C Entrada/salida básica 65
  • 66. Funciones de entrada/salida • Entrada: scanf(). • Salida: printf(). Programación en C • Las funcionalidades de entrada/salida en C no pertenecen a las palabras reservadas del lenguaje. Son funciones de librería, por ejemplo: 66
  • 67. printf() • El formato de llamada de printf()es: donde: • format : Es el string de formato de salida de los datos. • expi : Es la expresión a incluir dentro del formato. Programación en C printf(format, exp1, exp2, exp3,..., expn); 67
  • 68. printf() int a=3; float x=23.0; char c=‘A’; printf(“Hola mundo!!n”); Programación en C Ejemplo: printf(“Un entero %dn”,a); printf(“Un real %f ny un char %cn”,x,c); 68
  • 69. printf() Expresión Resultado %d %i signo %u signo %o %x %X sin signo %f notación punto %e %E %g %G notación científica %c entero entero decimal con entero entero decimal sin entero entero entero octal sin signo entero hexadecimal real real en real real en Programación en C Formato carácter carácter 69
  • 70. printf() • • • • Precisión (número de decimales). Justificación (izquierda o derecha). Caracteres especiales (% o ). ... Ver página del manual: Programación en C • Otras opciones de formato: man printf 70
  • 71. scanf() • El formato de llamada de scanf()es: donde: • format : Es el string de formato de entrada de los datos. • diri : Es la dirección donde se almacena el resultado. Programación en C scanf(format, dir1, dir2, dir3,..., dirn); 71
  • 72. scanf() int a,*pa; float x; char c; scanf(“%d”,&a); /* Lee un entero y lo almacena en a */ scanf(“%f %c”,&x,&c); /* Lee x y c */ scanf(“%d”,pa); /* PELIGROSO */ pa=&a; scanf(“%d”,pa); /* OK. Lee a */ Programación en C Ejemplo 72
  • 73. scanf() Lectura de strings Ejemplo: scanf(“%s”,pc); /* PELIGROSO */ Programación en C char *pc; char str[82]; scanf(“%s”,str); /* Lee hasta un blanco o fin de línea */ 73 scanf(“%[^n]”,str); /* Lee toda la línea */
  • 74. Programación en C Programación en C Ejemplos I 74
  • 75. Ejemplos I-1 Programación en C Se plantea el desarrollo de un programa que lea los datos (nombre, apellidos, nif y sueldo) de 10 empleados por teclado e imprima los empleados con sueldo máximo y mínimo, así como la media de los sueldos. 75
  • 76. En primer lugar definimos la estructura de datos a utilizar. struct empleado_st { char nombre[40]; char apellidos[40]; char nif[10]; long sueldo; }; typedef struct empleado_st empleado_t; Programación en C Ejemplos I-1: Solución 76
  • 77. Ejemplos I-1: Solución Seguidamente programamos el cuerpo del programa principal. printf(“Mínimo:n”); imprimir_empleado(&emp[min]); printf(“Máximo:n”); imprimir_empleado(&emp[max]); printf(“Media:%9.2fn”, med); return(0); } for(i=0;i<10;i++) leer_empleado(&emp[i]); min=buscar_min(emp,10); max=buscar_max(emp,10); med=buscar_med(emp,10); Programación en C int main() { empleado_t emp[10]; int i,min,max; float med; 77
  • 78. Los prototipos de las funciones a implementar son: void leer_empleado (empleado_t int buscar_min (empleado_t int int buscar_max (empleado_t int float buscar_med (empleado_t int void imprimir_empleado(empleado_t *pe); es[], tam); es[], tam); es[], tam); *pe); Programación en C Ejemplos I-1: Solución 78
  • 79. void leer_empleado (empleado_t *pe) { printf("Nombre y Apellidos: "); scanf("%s %[^n]", pe->nombre,pe->apellidos); printf("NIF: "); scanf("%s",pe->nif); printf("Sueldo: "); scanf("%ld",&pe->sueldo); printf("-------------n"); } Programación en C Ejemplos I-1: Solución 79
  • 80. Ejemplos I-1: Solución int buscar_min (empleado_t es[], int tam) int candidato=0,i; for(i=1;i<tam;i++) if(es[i].sueldo<es[candidato].sueldo) candidato=i; return(candidato); } Programación en C { 80
  • 81. Ejemplos I-1: Solución int buscar_max (empleado_t es[], int tam) int candidato=0,i; for(i=1;i<tam;i++) if(es[i].sueldo>es[candidato].sueldo) candidato=i; return(candidato); } Programación en C { 81
  • 82. Ejemplos I-1: Solución float buscar_med (empleado_t es[], int tam) int i; float acc=0; for(i=0;i<tam;i++) acc+=(float)es[i].sueldo; return(acc/(float)tam); Programación en C { } 82
  • 83. void imprimir_empleado(empleado_t *pe) { printf("tNombre: %sn",pe>nombre); printf("tApellidos: %sn",pe>apellidos); printf("tNIF: %sn",pe->nif); printf("tSueldo: %ldn",pe>sueldo); } Programación en C Ejemplos I-1: Solución 83