Tipos de datos avanzados - ELAI-UPM

Anuncio
4.1 INTRODUCCIÓN
-
El objetivo del capítulo es aprender a declarar y manejar tres tipos de
datos avanzados: vectores, cadenas de caracteres y estructuras.
VECTOR
Conjunto de variables numéricas (usaremos int o float)
Lección 4
CADENA DE CARACTERES
Tipos avanzados de datos
Conjunto de caracteres (variables de tipo char)
ESTRUCTURAS
Conjunto de datos de cualquier tipo.
4-1
4-2
4.2 VECTORES
4.2.2 ELEMENTOS DE UN VECTOR
- Un vector es un conjunto de variables numéricas del mismo tipo.
- Se referencian con el nombre del vector seguido de un subíndice entero escrito
entre corchetes (el subíndice representa la posición del elemento dentro del
vector).
- Ejemplo: vector de números enteros de 6 elementos (dimensión=6)
2
0
-7
5
32
- ¡¡ OJO: La primera posición tiene el subíndice 0 !!.
-1
- Ejemplo:
4.2.1 DECLARACIÓN DE UN VECTOR
int terna[3];
- Sintaxis:
tipo identificador[dimensión];
tipo
identificador
dimensión
Tipo de los elementos del vector (int, float, etc.).
Nombre del vector.
Número de elementos del vector (constante entera).
terna[0]
terna[1]
terna[2]
- Las variables del vector tienen un valor indeterminado hasta que no se les
asigna uno.
- Ejemplo:
int terna[3];
4-3
4-4
- Ejemplo:
- Ejemplo:
#include <stdio.h>
#include <stdio.h>
void main()
{
int terna[3];
void main()
{
int v[2];
terna[0] = 10;
terna[1] = 2*terna[0];
terna[2] = terna[0] + terna[1];
printf("v[0] vale %d\n", v[0]);
printf("v[1] vale %d\n", v[1]);
}
printf(“Primera = %d\n", terna[0]);
printf(“Segunda = %d\n", terna[1]);
printf(“Tercera = %d\n", terna[2]);
Salida por pantalla:
}
v[0] vale -858993460
Salida por pantalla:
v[1] vale -858993460
Primera = 10
Segunda = 20
Tercera = 30
4-5
4-6
4.2.4 RECORRIDO POR LOS ELEMENTOS DE UN VECTOR
4.2.3 INICIALIZACIÓN DE UN VECTOR
- Normalmente, la dimensión de los vectores suele ser un número relativamente
grande y se manejan con la ayuda de bucles.
- Los elementos de un vector pueden inicializarse en el momento de la
declaración:
- Puede utilizarse cualquier bucle, pero lo habitual es utilizar un for.
Ejemplo:
- Ejemplo:
int terna[3] = { 10 , 20 , 30 };
...
- Si se omite la dimensión del vector, se considera que ésta es igual al número de
valores asignados:
int i, vector[dimensión];
...
Ejemplo:
for (i = 0; i < dimensión; i++)
int v[ ] = { 4 , 5 , 7 };
// Dimensión = 3
...
4-7
4-8
Ejemplo: leer un vector desde el teclado e imprimirlo en la pantalla
4.3 CADENAS DE CARACTERES
- Una cadena de caracteres es un conjunto de variables de tipo char.
#include <stdio.h>
void main()
{
int v[3];
int i;
- Ejemplo: cadena de caracteres de dimensión 5
H
// Crea el vector v con 3 elementos de tipo int
// Subíndice para el vector
o
l
a
\0
4.3.1 DECLARACIÓN
printf("Introduzca los tres elementos del vector\n");
for (i = 0; i < 3; i++)
scanf("%d", &v[i]);
- Sintaxis:
char identificador[dimensión];
identificador
dimensión
printf(“\nLos elementos del vector son los siguientes: \n");
for (i = 0; i < 3; i++)
printf(“v[%d] = %d \n", i , v[i] );
Nombre de la cadena.
Número de elementos de la cadena (constante
entera), incluyendo el carácter nulo (‘\0’).
- Ejemplo:
char cadena[5];
}
4-9
4.3.2 ELEMENTOS DE UNA CADENA
4-10
4.3.3 INICIALIZACIÓN DE UNA CADENA
- Se referencian con el nombre de la cadena seguido de un subíndice entero
escrito entre corchetes (el subíndice representa la posición del carácter dentro
de la cadena).
- Ejemplos:
char mensaje[11] = “Hola mundo”; H o
l
a
H o
l
a
M u
n
d
o
\0
- ¡¡ OJO !!:
char mensaje[11]= “Hola”;
- La primera posición tiene el subíndice 0.
- La última posición contiene el carácter nulo.
\0
- Si se omite la dimensión, se considera que ésta es igual al número de
caracteres asignados:
- Ejemplo:
H o
l
a
\0
char mensaje[ ] = { ‘H’, ‘o’, ‘l’, ‘a’ , ‘\0’ } ;
H o
l
a
\0
char mensaje[ ] = { 72, 111, 108, 97, 0 } ;
H o
l
a
\0
char mensaje[ ] = “Hola”;// La dimensión es 5
int cad[5];
- Otras formas de inicialización:
cad[0]
cad[1]
cad[2]
cad[3]
cad[4]=‘\0’
- Los caracteres de la cadena tienen un valor indeterminado hasta que no se
les asigna uno.
4-11
4-12
4.3.4 RECORRIDO POR LOS ELEMENTOS DE UNA CADENA
Ejemplo: imprimir una cadena en la pantalla carácter a carácter.
- Puede utilizarse cualquier bucle, aunque lo habitual es utilizar un while.
- A diferencia de los vectores no se utiliza la dimensión de la cadena, sino que se
recorre hasta encontrar el carácter nulo ‘\0’.
- Ejemplo:
#include <stdio.h>
void main()
{
char mensaje[51]="Hola Mundo";
int i;
char cadena[dimension];
int i;
// Con while
i=0
while (cadena[i]!=‘\0’)
{
…
i++;
}
i=0;
while (mensaje[i]!='\0')
{
printf("%c", mensaje[i]);
i++;
}
}
//Con for
for (i=0; cadena[i]!=‘\0’ ; i++)
…
4-13
4-14
4.3.5 IMPRIMIR UNA CADENA DE CARACTERES CON printf()
4.3.6 LEER UNA CADENA DE CARACTERES
- Como ya sabemos, pero utilizando el especificador de formato %s.
- Con scanf(), usando el especificador de formato %s.
- Ejemplo:
Ejemplo:
#include <stdio.h>
#include <stdio.h>
void main ()
{
char asignatura[51];
void main()
{
char mensaje[51]="Hola Mundo";
scanf("%s", asignatura); // Excepción: ¡¡ No se pone & !!
printf("%s\n", asignatura);
printf("%s\n", mensaje);
}
}
4-15
Salida:
Salida:
Calculo
Fundamentos de informatica
Calculo
Fundamentos
4-16
- Para leer cadenas de caracteres que tienen espacios en blanco con scanf() hay
que utilizar una especificación de formato personalizada (libro, pág 157).
4.4 ESTRUCTURAS
- Permiten almacenar datos de diferentes tipos bajo un mismo nombre.
- O, más fácil, utilizar la función gets() de stdio.h
- Sintaxis:
struct identificador
- Ejemplo:
{
#include <stdio.h>
tipo_1 miembro_1;
tipo_2 miembro_2;
void main ()
{
char asignatura[51];
…
tipo_n miembro_n;
gets(asignatura);
printf("%s\n", asignatura);
};
}
identificador
Nombre de la estructura.
Salida:
miembro_n
Componente n-ésimo de la estructura.
Fundamentos de informatica
tipo_n
Tipo de datos del miembro_n.
Fundamentos de informatica
4-17
4-18
- La estructura suele declararse antes de la función main() como un
objeto global (la estructura es conocida y accesible para todas las
funciones del programa).
- Ejemplo: ficha de laboratorio
- Ejemplo:
Nombre
Nombre
Apellidos
#include <stdio.h>
struct ficha
struct ficha
{
char nombre[50];
char apellidos[50];
int
matricula;
};
{
Nombre
Apellidos
Nº de matrícula
Apellidos
Nº de matrícula
char
char
apellidos[50];
Nº de matrícula
int
matricula;
nombre[50];
};
void main ()
{
…
}
4-19
4-20
4.4.1 DECLARACIÓN DE VARIABLES
- Una manera de evitar el uso de la palabra struct es definir un tipo de datos
sinónimo de la estructura utilizando typedef (libro: apartado 4.7, pág 86)
- Sintaxis:
- Ejemplo:
struct nombre_estructura variable1, variable2, … ;
- Siempre hay que poner la palabra reservada struct delante.
#include <stdio.h>
- Ejemplo:
typedef struct
{
char nombre[50];
char apellidos[50];
int
matricula;
}
#include <stdio.h>
struct ficha
{
char nombre[50];
char apellidos[50];
int
matricula;
};
void main ()
{
struct ficha alumno;
…
}
ficha;
void main ()
{
ficha alumno;
…
}
4-21
Ejemplo:
4.4.2 MIEMBROS DE UNA ESTRUCTURA
- Se nombran escribiendo el operador punto (.) después del nombre de la variable.
variable_estructura.miembro
- Sintaxis:
- Por ejemplo, si alumno es una variable de tipo ficha, sus miembros son:
alumno.nombre
alumno.apellidos
alumno.matricula
4-22
Cadena de caracteres
Cadena de caracteres
Variable entera
#include <stdio.h>
typedef struct
{
char nombre[50];
char apellidos[50];
int
matricula;
}
ficha;
void main ()
{
ficha alumno;
4.4.3 OPERACIONES CON VARIABLES DE UNA ESTRUCTURA
printf("Nombre:");
scanf(“%s”, alumno.nombre);
printf("Apellidos:");
scanf(“%s”,alumno.apellidos);
printf(“Matricula:");
scanf("%d", &alumno.matricula);
- Inicialización:
ficha alumno1= { “Jose”, “Lopez Lopez”, 1150}, alumno2;
- Asignarle el valor de otra variable de tipo estructura:
printf("\n%s %s\n", alumno.nombre, alumno.apellidos);
printf("Matricula: %d\n", alumno.matricula);
alumno2=alumno1;
4-23
}
4-24
Descargar