Sunteți pe pagina 1din 6

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
- Ejemplo: vector de números enteros de 6 elementos (dimensión=6) vector).

2 0 -7 5 32 -1 - ¡¡ OJO: La primera posición tiene el subíndice 0 !!.

4.2.1 DECLARACIÓN DE UN VECTOR - Ejemplo:


int terna[3];
- Sintaxis: tipo identificador[dimensión];

tipo Tipo de los elementos del vector (int, float, etc.). terna[0] terna[1] terna[2]
identificador Nombre del vector.
dimensión Número de elementos del vector (constante entera).

- Ejemplo: - Las variables del vector tienen un valor indeterminado hasta que no se les
asigna uno.
int terna[3];

4-3 4-4
- Ejemplo:
- Ejemplo:
#include <stdio.h>

#include <stdio.h>
void main()
void main() {
{ int terna[3];
int v[2];
terna[0] = 10;
printf("v[0] vale %d\n", v[0]); terna[1] = 2*terna[0];
printf("v[1] vale %d\n", v[1]); terna[2] = terna[0] + terna[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
4-5 Tercera = 30 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
- Los elementos de un vector pueden inicializarse en el momento de la grande y se manejan con la ayuda de bucles.
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>
- Ejemplo: cadena de caracteres de dimensión 5
void main()
{
H o l a \0
int v[3]; // Crea el vector v con 3 elementos de tipo int
int i; // Subíndice para el vector

4.3.1 DECLARACIÓN
printf("Introduzca los tres elementos del vector\n");
for (i = 0; i < 3; i++) - Sintaxis: char identificador[dimensión];
scanf("%d", &v[i]);
identificador Nombre de la cadena.
dimensión Número de elementos de la cadena (constante
printf(“\nLos elementos del vector son los siguientes: \n");
entera), incluyendo el carácter nulo (‘\0’).
for (i = 0; i < 3; i++) - Ejemplo:
printf(“v[%d] = %d \n", i , v[i] ); char cadena[5];
}

4-9 4-10

4.3.2 ELEMENTOS DE UNA CADENA 4.3.3 INICIALIZACIÓN DE UNA CADENA


- Se referencian con el nombre de la cadena seguido de un subíndice entero
- Ejemplos:
escrito entre corchetes (el subíndice representa la posición del carácter dentro
de la cadena).
char mensaje[11] = “Hola mundo”; H o l a M u n d o \0
- ¡¡ OJO !!:
char mensaje[11]= “Hola”; H o l a \0
- La primera posición tiene el subíndice 0.
- La última posición contiene el carácter nulo. - Si se omite la dimensión, se considera que ésta es igual al número de
caracteres asignados:
- Ejemplo:
char mensaje[ ] = “Hola”;// La dimensión es 5 H o l a \0
int cad[5];
- Otras formas de inicialización:
cad[0] cad[1] cad[2] cad[3] cad[4]=‘\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


- 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 #include <stdio.h>
recorre hasta encontrar el carácter nulo ‘\0’.
void main()
- Ejemplo: char cadena[dimension]; {
int i; char mensaje[51]="Hola Mundo";
int i;
// Con while
i=0 i=0;
while (cadena[i]!=‘\0’) while (mensaje[i]!='\0')
{ {
… printf("%c", mensaje[i]);
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 ()
void main() {
{ char asignatura[51];
char mensaje[51]="Hola Mundo";
scanf("%s", asignatura); // Excepción: ¡¡ No se pone & !!
printf("%s\n", mensaje); printf("%s\n", asignatura);
} }

Salida: Salida:
Calculo Fundamentos de informatica
Calculo Fundamentos
4-15 4-16
- Para leer cadenas de caracteres que tienen espacios en blanco con scanf() hay 4.4 ESTRUCTURAS
que utilizar una especificación de formato personalizada (libro, pág 157).
- Permiten almacenar datos de diferentes tipos bajo un mismo nombre.
- O, más fácil, utilizar la función gets() de stdio.h
- Sintaxis:
- Ejemplo: struct identificador
{
#include <stdio.h>
tipo_1 miembro_1;
void main () tipo_2 miembro_2;
{ …
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


- Ejemplo: ficha de laboratorio objeto global (la estructura es conocida y accesible para todas las
funciones del programa).

- Ejemplo:

#include <stdio.h>
Nombre struct ficha
Nombre struct ficha
Apellidos {
{
Nombre
Apellidos
Nº de matrícula char nombre[50]; char nombre[50];
Apellidos
Nº de matrícula char apellidos[50]; char apellidos[50];
int matricula;
Nº de matrícula int matricula; };
};

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
- Sintaxis: sinónimo de la estructura utilizando typedef (libro: apartado 4.7, pág 86)

struct nombre_estructura variable1, variable2, … ; - Ejemplo:

- Siempre hay que poner la palabra reservada struct delante. #include <stdio.h>

- Ejemplo: typedef struct


#include <stdio.h> {
char nombre[50];
struct ficha
char apellidos[50];
{
int matricula;
char nombre[50];
}
char apellidos[50];
int matricula; ficha;
};
void main ()
{
void main ()
ficha alumno;
{

struct ficha alumno;
}

}
4-21 4-22

4.4.2 MIEMBROS DE UNA ESTRUCTURA Ejemplo: #include <stdio.h>

- Se nombran escribiendo el operador punto (.) después del nombre de la variable. typedef struct
{
char nombre[50];
- Sintaxis: variable_estructura.miembro
char apellidos[50];
int matricula;
- Por ejemplo, si alumno es una variable de tipo ficha, sus miembros son:
}
alumno.nombre Cadena de caracteres ficha;
alumno.apellidos Cadena de caracteres
void main ()
alumno.matricula Variable entera
{
ficha alumno;
4.4.3 OPERACIONES CON VARIABLES DE UNA ESTRUCTURA
printf("Nombre:");
scanf(“%s”, alumno.nombre);
- Inicialización: printf("Apellidos:");
scanf(“%s”,alumno.apellidos);
ficha alumno1= { “Jose”, “Lopez Lopez”, 1150}, alumno2; printf(“Matricula:");
scanf("%d", &alumno.matricula);
- Asignarle el valor de otra variable de tipo estructura:
printf("\n%s %s\n", alumno.nombre, alumno.apellidos);
alumno2=alumno1; printf("Matricula: %d\n", alumno.matricula);
4-23 } 4-24