► Até
agora todos os nossos dados eram
armazenados em variáveis simples, isto é,
variáveis do tipo char, int, float ou double.
► Aprendemos também a armazenar
conjuntos de valores em arrays e matrizes
que têm a capacidade de guardar um
conjunto de dados do mesmo tipo.
► Vamos
agora aprender a utilizar estruturas.
1
Estruturas
► Definição:
Estrutura é um conjunto de uma ou
várias variáveis (normalmente chamadas de
campos ou membros) agrupadas sobre um único
nome.
► As
estruturas podem conter elementos com
qualquer tipo de dados válido em C (tipos básicos
(int, float, char, double), arrays, matrizes, strings,
apontadores, ou mesmo outras estruturas)
2
Estruturas
► Exemplos
de estruturas conhecidas:
 A data
 O Bilhete de identidade
Data
Bilhete de identidade
ano
Nome
mês
dia
Nr. de BI
Data de nascimento
Nome dos pais
Data de validade
Morada
…
3
Estruturas
► Por
exemplo:
 Qual a composição de um contacto de uma lista
telefónica?
 Resposta:
 Nome
 Número de Telemóvel
 Morada
4
Estruturas - Declaração
► Declaração
de uma estrutura em C
struct nome_da_estrutura
{
tipo1 variável1;
tipo2 variável2;
…
tipoN variávelN;
};
Nunca esquecer o ; a seguir ao fecho da chaveta.
5
Estruturas – Declaração de variáveis
►
Ao declarar uma estrutura apenas está a informar o compilador de que existe
um novo tipo de dados. Não está ainda a declarar nenhuma variável desse
novo tipo de dados.
►
Declaração de variáveis do tipo de uma estrutura:
struct nome_da_estrutura nome_da_variável;
OU
struct nome_da_estrutura
{
tipo1 variável1;
tipo2 variável3;
…
tipoN variávelN;
}nome_da_variável, nome_da_variável1;
6
Estruturas – exemplos
struct data
{
int ano, dia;
char mes[11];
};
struct data dt;
Por uma questão de lógica, não deve definir variáveis com o mesmo nome da
estrutura.
7
Estruturas – exemplos
struct bi
{
int nr;
char nome[101], morada[301];
struct data data_nascimento;
float altura;
}bilhete_identidade;
A estrutura bi, tem um membro que é uma estrutura
8
Estruturas – exemplos
► Defina
agora uma estrutura e uma variável
para um registo com os seguintes dados:




Nome
Idade
Profissão
Salário
9
Estruturas – exemplos
/* declaração da estrutura */
struct dados
{
char nome[101], profissao[101];
int idade
float salario;
};
/* declaração da variável */
struct dados dados_pessoais;
10
Acesso aos membros de uma estrutura
►
Depois de criada uma estrutura e uma variável desse novo
tipo de dados, será necessário aceder aos membros da
estrutura para que possamos atribuir, alterar, visualizar ou
remover informações a esses membros.
struct data
{
int ano, dia;
char mes[11];
};
struct data dt;
dt é do tipo struct data, logo possui os
membros: ano, dia e mês.
Para aceder aos membros de uma estrutura usase o operador . (ponto)
Neste caso, para aceder aos membros da
variável dt faria:
dt.ano
dt.dia
dt.mes
11
Acesso aos membros de uma estrutura
struct data
{
int ano, dia;
char mes[11];
};
struct data dt;
main()
{
printf(“introduza o dia: ”)
scanf(“%d”, &dt.dia);
dt.ano=2007;
strcpy(dt.mes, “janeiro”);
printf(“ %d - %s - %d ”, dt.dia, dt.mes, dt.ano);
}
12
Onde se definem as estruturas?
► Para
que as estruturas sejam conhecidas em
todo o programa devem ser definidas fora
de toda as funções após a inclusão das
bibliotecas, ou numa biblioteca que seja
incluída no programa.
► Se
definir uma estrutura dentro de uma função, a
estrutura apenas vai ser conhecida nessa função.
13
#include<stdio.h>
#include<stdlib.h>
al é uma variável do tipo struct aluno
struct aluno
{
int numero;
char nome[101];
};
struct aluno al;
main()
{
printf("Introduza o número: ");
scanf("%d", &al.numero);
printf("Introduza o nome: ");
scanf("%s", al.nome);
/* ou - gets(al.nome)*/
printf("\n\t %d - %s\n\n\n",al.numero, al.nome);
}
system("pause");
14
Estruturas
► As
grandes vantagens da utilização de
estruturas são visíveis quando é necessário
o armazenamento de grandes quantidades
de informação, pois reduz a quantidade de
variáveis necessárias.
► Imagine agora que queria armazenar o
número e o nome de 23 alunos.
 O que seria necessário?
15
#include<stdio.h>
#include<stdlib.h>
al é um array de estruturas
struct aluno
{
int numero;
char nome[101];
};
struct aluno al[3];
main()
{
int i;
/* leitura do array */
for(i=0;i<3;i++)
{
printf("Introdiza o número: ");
scanf("%d", &al[i].numero);
printf("Introduza o nome: ");
scanf("%s", al[i].nome);
}
/* ou - gets(all[i].nome); */
/* impressão do array */
for(i=0;i<3;i++)
{
printf("\n\t %d - %s\n\n\n",al[i].numero, al[i].nome);
}
}
system("pause");
16
Estruturas e Funções
► Revisão:
 A passagem de parâmetros para uma função
pode ser feita:
►Por Valor
 É enviado o valor do argumento para a função;
 A função recebe esse valor no parâmetro definido, ou seja,
a função fica com uma “cópia” do valor original.
►Por Referência
 É enviado para a função o endereço de memória do(s)
argumento(s).
 A função recebe nos parâmetros definidos os endereços de
memória dos argumentos, ou seja, “a localização na
memória” dos valores dos argumentos.
17
Estruturas – passagem por valor
#include<stdio.h>
#include<stdlib.h>
struct pessoa
{
char nome[101];
int idade;
};
void mostrar (struct pessoa ps)
main()
{
struct pessoa p;
{
strcpy(p.nome, “Maria”);
puts(ps.nome);
p.idade=16;
printf(“\n %d \n“,ps.idade);
mostrar(p);
}
system(“pause”);
}
18
Estruturas – passagem por
referência
#include<stdio.h>
#include<stdlib.h>
struct pessoa
(*ps).idade equivale a ps->idade
{
gets(ps->nome);
char nome[101];
scanf("%d", &ps->idade);
int idade;
};
main()
void ler (struct pessoa *ps)
{
{
}
struct pessoa p;
printf("Nome: ");
ler(&p);
gets((*ps).nome);
puts(p.nome);
printf("Idade: ");
printf(“\n %d \n“,p.idade);
scanf("%d", &(*ps).idade);
system(“pause”);
}
19
Estruturas – return
► Se
por algum motivo numa função necessitar de
devolver uma variável do tipo struct, bastará:
struct nome_estrutura (….)
{
struct nome_estrutura nome_variável;
…
…
return nome_variável;
}
Por vezes utiliza-se esta técnica quando é necessário de devolver
(retornar) mais do que um valor para a função invocadora.
20
Download

ppt02