UNIDAD 4 ESTRUCTURAS Y UNIONES

Anuncio
UNIDAD 4
ESTRUCTURAS Y UNIONES
Programación
Primavera 2010
Contenido
Definición de estructura
Procesamiento de una estructura
Tipos de datos definidos por el usuario (typedef)
Estructuras y apuntadores
Paso de estructuras a una función
Uniones
Enumeraciones
Definición de Estructuras
Una estructura es una colección de una o mas
variables, de tipos posiblemente diferentes,
agrupadas bajo un solo nombre
Las estructuras nos ayuda a organizar datos
complejos ya que nos permite el manejo de una
grupo de datos como si fueran una unidad
Las estructuras son comúnmente conocidas como
registros.
Definición de estructura
Cada uno de los datos que componen la estructura
es denominado campo y se le identifica con un
nombre único.
Ejemplo:
Empleado
en una compañía tiene varios datos
asociado a el tales como
Nombre
Nivel
Salario
Domicilio
Ejemplo
Por cada alumno de una universidad se requiere
almacenar la siguiente información:
Matricula
(entero)
Nombre (cadena de caracteres)
Carrera (cadena de caracteres)
Promedio (real)
Domicilio (cadena de caracteres)
Campos
Alumno
Matricula
Nombre
Carrera
Promedio
Domicilio
Declaración de la Estructura
La estructura se declara utilizando la palabra
reservada struct seguida de la lista de campos entre
llaves
Ejemplo:
struct alumno{
int matricula;
char nombre[30];
char carrera[30];
float promedio;
char domicilio[30];
};
Acceso a campos
Para acceder a cada uno de los campos que
componen la estructura debemos utilizar el
operador punto
El acceso se realiza de la siguiente manera
nombre_variable.campo
Ejemplo:
struct alumno A;
gets(A.nombre);
Inicialización de estructuras
Las estructuras pueden ser inicializadas de la
siguiente manera
struct alumno A = {120,”Maria”,”Contabilidad”,8.9,
“Niño Artillero 120”};
Alumno
Matricula
Nombre
Carrera
Promedio
Domicilio
120
Maria
Contabilidad
8.9
Niño Artillero 120
Ejemplo
struct fecha{
int day;
int month;
int year;
};
struct fecha today;
today.day = 13;
today.month = 4;
today.year = 2010;
fecha
day
month
year
Ejemplo
struct alumno{
int matricula;
char nombre[30];
struct fecha birth;
}
struct alumno
alumno
matricula
nombre
fecha
A={120,”Hugo”,4,12,1970};
printf("%d/%d/%d\n",
A.birth.day,
A.birth.month,
A.birth.year);
día
mes
año
Ejercicio
Declare una estructura
que contenga los
siguientes datos de
una cuenta bancaria
de cuenta
tipo de cuenta
nombre del titular
Saldo
inicialice los datos
para que contenga
0589465
Ahorros
Numero
Martin
Jiménez
1085.25
Incremente el saldo en
2000.00 pesos
Typedef
La palabra reservada
typedef nos permite
definir alias o sinónimos
para tipos de datos
existentes.
Al crear estos alias
podemos utilizar
nombres mas cortos
para los tipos de datos
que estamos definiendo.
Ejemplo:
typedef struct{
int day;
int month;
int year;
} date;
date hoy;
Ejercicio
Utilizando typedef define
la siguiente estructura de
los empleados de una
empresa
Nombre de empleado
Departamento en la
empresa
Sueldo
Domicilio
Calle
Numero
Código Postal
Localidad
Primero deberás definir la
estructura del domicilio
con los siguientes datos
Domicilio
Calle
Numero
Código Postal
Localidad
Arreglo de Estructuras
Un arreglo de estructuras se
define de la siguiente
manera
typedef struct{
char name[30];
int matricula;
float promedio
}alumno;
alumno lista[50];
Para acceder a los campos de cada registro
usamos el operador punto de la siguiente forma
for(i = 0; i < size; i++)
{
printf("Nombre del alumno:");
gets(lista[i].nombre);
printf("Matricula: ");
scanf("%d",&lista[i].matricula);
printf("Promedio: ");
scanf("%f",&lista[i].promedio);
fflush(stdin);
}
Ejemplo
Realice un programa que lea 10 registros de
alumnos.
Cada registro deberá contener los siguientes datos
Nombre
del alumno
Matricula
Promedio
El programa deberá llenar los 10 registros y
mostrar los datos
Después deberá ser capaz de buscar un alumno
por número de matricula y desplegar sus datos
Lectura
void lectura(alumno lista[], int n)
{
int i;
for(i = 0; i < n; i++)
{
printf("Registro No. %d\n",i);
printf("Nombre del alumno: "); gets(lista[i].nombre);
printf("Matricula: ");scanf("%d",&lista[i].matricula);
printf("Promedio:
fflush(stdin);
}
}
");scanf("%f",&lista[i].promedio);
Impresión
void imprime(alumno lista[], int n)
{
for(int i = 0; i < size; i++)
{
printf("Nombre del alumno: %s\n",lista[i].nombre);
printf("Matricula:%d\n",lista[i].matricula);
printf("Promedio:%2.2f\n",lista[i].promedio);
}
}
busqueda
int busqueda(alumno lista[], int n,
int mat)
{
for(int i = 0; i < n; i++)
if(lista[i].matricula == mat)
return i;
return -1;
}
#include <stdio.h>
#include <stdlib.h>
#define size 10
Programa Principal
typedef struct{
char nombre[30];
int matricula;
float promedio;
} alumno;
void lectura(alumno lista[], int n);
void imprime(alumno lista[], int n);
int busqueda(alumno lista[], int n, int mat);
int main()
{
int i,mat;
alumno lista[size];
printf("Proporciona los siguientes datos\n");
lectura(lista,size);
printf("Los datos leidos fueron\n");
imprime(lista,size);
Programa Principal
printf("Proporciona una matricula para ser buscada ");
scanf("%d",&mat);
i = busqueda(lista,size,mat);
if (i != -1)
{
printf("Registro No. %d\n",i);
printf("Nombre del alumno: %s\n",lista[i].nombre);
printf("Matricula:
%d\n",lista[i].matricula);
printf("Promedio:
%2.2f\n",lista[i].promedio);
}
else
printf("La matricula no esta dada de alta\n");
system("pause");
return 0;
}
Ejemplo 2
Modifique la función de escritura para evitar
matriculas duplicadas
Lectura
void lectura(alumno lista[], int n)
{
int mat,i=0;
while(i < n)
{
printf("Registro No. %d\n",i);
printf("Matricula: ");scanf("%d",&mat);
if (busqueda(lista,i,mat)== -1)
{
lista[i].matricula = mat;
printf("Nombre del alumno: "); gets(lista[i].nombre);
printf("Promedio:
");scanf("%f",&lista[i].promedio);
fflush(stdin); i++;
}
else printf("Este dato ya se encuentra registrado\n");
}
}
Ejercicio
Escribe una programa que utilice una estructura para
representar a los números complejos
Un número complejo tiene parte real e imaginaria
a = x + iy
Declare una estructura que permita el manejo de ambos
números. Estos números son reales.
Realice una función que realice la suma de números
imaginarios.
La suma se realiza de la siguiente manera
a + b = ( x + r) + i( y + s);
Descargar