Estruturas ou Registros (structs)
� Uma estrutura (registro) é uma coleção de variáveisreferenciadas por um nome, fornecendo uma maneiraconveniente de se ter informações relacionadasagrupadas.
� Uma definição de estrutura forma um modelo quepode ser usado para criar variáveis de estruturas.
� As variáveis que compreendem a estrutura sãochamadas membros da estrutura (elementos oucampos).
Estruturas ou Registros (structs)
� Resumindo: uma estrutura ou registro é uma variávelcomposta que contém diversas variáveis (chamadas decampos ou elementos), usualmente de tiposdiferentes, mas que são logicamente relacionadas.
� Podemos comparar uma estrutura com uma ficha quepossui todos os dados sobre uma determinadaentidade, por exemplo:
�Registro de alunos (Nome, curso, RA, disciplinas, médias deprovas, etc...)
�Registro de clientes (Nome, endereço, telefone, email , etc...)
Declaração de uma estrutura (struct)
� Para declarar uma estrutura utilizamos a palavrareservada struct, da seguinte forma:
� Sintaxe:
struct identificador_da_estrutura {
<tipo> nome_1;
<tipo> nome_2;
<tipo> nome_3;
...
<tipo> nome_n;
};
< tipo > - representa qualquer um dos tipos básicos (int, float, char, double) ou tipo anteriormente definido.
Declaração de uma estrutura (struct)
� struct identificador_da_estrutura {
<tipo> nome_1;
<tipo> nome_2;
<tipo> nome_3;
...
<tipo> nome_n;
};
� Observe que a definição termina com um ponto e virgula, pois a
definição de uma estrutura é um comando. Além disso, oidentificador(nome) da estrutura indica um especificador de tipo.
Declaração de uma estrutura (struct)
� struct identificador_da_estrutura {
<tipo> nome_1;
<tipo> nome_2;
<tipo> nome_3;
...
<tipo> nome_n;
};
� Na sintaxe acima descrita, nenhuma variável foideclarada de fato, apenas a forma dos dados foi definida.Para declarar uma variável do tipo struct definido,seguimos a seguinte forma:
struct identificador_da_estrutura nomes_variáveis;
Declaração de uma estrutura (struct)
� A declaração do formato de uma estrutura pode ser feita dentro da nafunção main() ou fora dela. Usualmente, ela é feita fora da função main,como mostrado a seguir :
#include <stdio.h>
struct identificador_da_estrutura {
<tipo> nome_1;
<tipo> nome_2;
<tipo> nome_3;
...
<tipo> nome_n;
};
// struct identificador_da_estrutura nomes_variáveis;
void main() {
struct identificador_da_estrutura nomes_variáveis;
....
}
Declaração de uma estrutura (struct)
� Exemplo:
#include <stdio.h>
struct ficha{
char nome[30];
char endereco[50];
char fone[10];
int idade;
};
// struct ficha clientes;
void main() {
struct ficha clientes;
....
}
Declaração de uma estrutura (struct)
� Também é possível declarar uma ou mais variáveis ao definir aestrutura, como mostrado a seguir:
#include <stdio.h>
struct identificador_da_estrutura {
<tipo> nome_1;
<tipo> nome_2;
<tipo> nome_3;
...
<tipo> nome_n;
} nomes_variáveis;
void main() {
....
}
Declaração de uma estrutura (struct)
� Exemplo:
#include <stdio.h>
struct ficha{
char nome[30];
char endereco[50];
char fone[10];
int idade;
} clientes, aluno;
void main() {
...
}
Utilizando os elementos de estruturas (struct)
� Para acessar ou modificar os elementos (campos) de uma estruturautilizamos o operador . (ponto). O nome do identificador da estruturaseguido por um ponto e pelo nome do elemento (campo) acessa oumodifica individualmente esse elemento.
� Sintaxe
identificador_estrutura.nome_do_campo
� Exemplo
#include <stdio.h>
struct ficha{
char nome[30];
float media;
};
void main() {
struct ficha aluno;
aluno.media = 6.5
strcpy ( aluno.nome, “Joao Silva” );
}
Utilizando os elementos de estruturas (struct)
� Podemos usar os campos de uma estrutura em qualquer comando queusaríamos uma variável simples.
#include <stdio.h>
struct ficha{
char nome[30];
float media;
};
void main() {
struct ficha aluno;
printf(“Digite o nome do aluno\n”);
scanf(“%s”, aluno.nome);
printf(“Digite a media do aluno\n”);
scanf (“%i”, &aluno.media);
printf(“O aluno %s tem media igual a %f \n ”, aluno.nome, aluno.media);
}
Vetor de estruturas (struct)
� Podemos declarar um vetor de estruturas, para isso primeirodefinimos um tipo estrutura e então declaramos uma variável vetordesse tipo.
#include <stdio.h>
struct ficha{
char nome[30];
float media;
};
void main() {
struct ficha aluno[10];
int i;
for (i = 0; i < 10; i++) {
printf(“Digite o nome do aluno\n”);
scanf(“%s”, aluno[i].nome); //utilizar os índices para acessar a posição desejada
printf(“Digite a media do aluno\n”); //igual vetor e matriz que conhecemos
scanf (“%i”, &aluno[i].media);
printf(“O aluno %s tem media igual a %f \n ”, aluno[i].nome, aluno[i].media);
}
}
Passando estruturas para funções
� As estruturas podem ser passados como parâmetros deuma função, como qualquer outro tipo.
� A estrutura deve ser declarado antes da função.
� O parâmetro formal recebe uma cópia da estrutura, damesma forma que em uma atribuição envolvendoestruturas.
� Podemos passar por parâmetro apenas um campo(elemento) da estrutura para uma função como umavariável simples.
� Podemos passar uma estrutura inteira como parâmetropara uma função.
� Podemos passar um vetor de estruturas comoparâmetro para uma função.
#include < stdio.h>
struct Pessoa{
int dia;int mes;int ano;int idade;
};
int main(){
struct Pessoa Einstein, Newton;
Einstein.dia = 14;Einstein.mes = 3;Einstein.ano = 1879;
Newton.dia = 4;Newton.mes = 1;Newton.ano = 1643;
Einstein.idade = Calc_Idade ( Einstein.ano, 2014 );Newton.idade = Calc_Idade ( Newton.ano, 2014);
printf ( " A idade de Einstein seria %d \n", Einstein.idade );printf ( " A idade de Newton seria %d \n", Newton.idade );
return 0;}
Struct - Exemplo 1
int Calc_Idade (int a_pessoa, int a_atual ){
int id;
id = a_atual – a_pessoa;
return id;}
#include < stdio.h>
struct Pessoa{
int dia;int mes;int ano;int idade;
};
int main(){
struct Pessoa Einstein, Newton;
Einstein.dia = 14;Einstein.mes = 3;Einstein.ano = 1879;
Newton.dia = 4;Newton.mes = 1;Newton.ano = 1643;
Einstein.idade = Calc_Idade ( Einstein, 2014 );Newton.idade = Calc_Idade ( Newton, 2014);
printf ( " A idade de Einstein seria %d \n", Einstein.idade );printf ( " A idade de Newton seria %d \n", Newton.idade );
return 0;}
Struct - Exemplo 2
int Calc_Idade (struct pessoa p, int a_atual ){
int id;
id = a_atual – p.ano;
return id;}
#include <stdio.h>#include <string.h>struct Pessoa{
char nome[30];int dia;int mes;int ano;int idade;
};
int main() {struct Pessoa Lista_Genios[2];
strcpy ( Lista_Genios[0].nome, “ Albert Einstein” );Lista_Genios[0].dia = 14;Lista_Genios[0].mes = 3;Lista_Genios[0].ano = 1879;
strcpy ( Lista_Genios[1].nome, “ Isaac Newton” );Lista_Genios[1].dia = 4;Lista_Genios[1].mes = 1;Lista_Genios[1].ano = 1643;
Lista_Genios[0].idade = Calc_Idade (Lista_Genios[0], 13,05,2014);Lista_Genios[1].idade = Calc_Idade (Lista_Genios[1],13,05,2014);
printf(" A idade de %s seria %d \n", Lista_Genios[0].nome,Lista_Genios[0].idade );
printf(" A idade de %s seria %d \n", Lista_Genios[1]..nome, Lista_Genios[1].idade );
return 0;}
Struct - Exemplo 3
int Calc_Idade (struct Pessoa p, int d, int m, int a){
int idade = a - p.ano;if ( p.mes > m ){
idade = idade - 1;}else{
if (p.mes == m){ if ( p.dia > d)
{idade = idade - 1;
}}
}return idade;
}
#include <stdio.h>#include <string.h>
struct Pessoa{
char nome[30];int dia;int mes;int ano;int idade;
};
int main(){
struct Pessoa Lista_Genios[2]
strcpy ( Lista_Genios[0].nome, “ Albert Einstein” );Lista_Genios[0].dia = 14;Lista_Genios[0].mes = 3;Lista_Genios[0].ano = 1879;
strcpy ( Lista_Genios[1].nome, “ Isaac Newton” );Lista_Genios[1].dia = 4;Lista_Genios[1].mes = 1;Lista_Genios[1].ano = 1643;
Lista_Genios[0].idade = Calc_Idade (Lista_Genios[0], 8, 2, 2007);Lista_Genios[1].idade = Calc_Idade (Lista_Genios[1], 8, 2, 2007);
printf(" A idade de %s seria %d \n", Lista_Genios[0].nomeLista_Genios[0].idade );
printf(" A idade de %s seria %d \n", Lista_Genios[1]..nome Lista_Genios[1].idade );
getchar();return 0;
}
Exemplo 4 - Struct
int Calc_Idade (struct Pessoa p, int dia, int mes, int ano){
int idade = ano - p.ano;if ( p.mes > mes ){
idade = idade - 1;}else{
if (p.mes == mes){ if ( p.dia > dia)
{idade = idade - 1;
}}
}return idade;
}
p é um parâmetro por valor aqui...
#include <stdio.h>
struct Pessoa{
char nome[30];int dia;int mes;int ano;int idade;
};
int main(){
struct Pessoa Einstein, Newton;
strcpy ( Einstein.nome, "Albert Einstein" );Einstein.dia = 14;Einstein.mes = 3;Einstein.ano = 1879;
strcpy ( Newton.nome, "Newton");Newton.dia = 4;Newton.mes = 1;Newton.ano = 1643;
Calc_Idade ( &Einstein, 28, 9, 2007 );Calc_Idade ( &Newton, 28, 9, 2007 );
printf(" A idade de %s seria %d \n", Einstein.nomeEinstein.idade );
printf(" A idade de %s seria %d \n", Newton.nome Newton.idade );
getchar();return 0;
}
Exemplo 3 - Struct
void Calc_Idade (struct Pessoa *p, int dia, int mes, int ano){
(*p).idade = ano - (*p).ano;
if ( (*p).mes > mes ){
(*p).idade = (*p).idade - 1;}else{
if ( (*p).mes == mes ){ if ( (*p).dia > dia )
{(*p).idade = (*p).idade - 1;
}}
}}
p é um parâmetro por referência aqui...
Usa-se a forma (*p).variável
#include <stdio.h>
struct Pessoa{
char nome[30];int dia;int mes;int ano;int idade;
};
int main(){
struct Pessoa Einstein, Newton;
strcpy ( Einstein.nome, "Albert Einstein" );Einstein.dia = 14;Einstein.mes = 3;Einstein.ano = 1879;
strcpy ( Newton.nome, "Newton");Newton.dia = 4;Newton.mes = 1;Newton.ano = 1643;
Calc_Idade ( &Einstein, 28, 9, 2007 );Calc_Idade ( &Newton, 28, 9, 2007 );
printf (" A idade de %s seria %d \n", Einstein.nomeEinstein.idade );
printf (" A idade de %s seria %d \n", Newton.nome Newton.idade );
getchar();return 0;
}
Exemplo 4 - Struct
void Calc_Idade (struct Pessoa *p, int dia, int mes, int ano){
p->idade = ano – p->ano;
if ( p->mes > mes ){
p->idade = p->idade - 1;}else{
if ( p->mes == mes ){ if ( p->dia > dia )
{p->idade = p->idade - 1;
}}
}}
p é um parâmetro por referência aqui...
Em vez da forma (*p).variável ,usa-se mais a forma p->variável.
Exemplo 5 - Struct
#include <stdio.h>#include <stdlib.h>
struct Pessoa{
int idade;char nome [ 100 ];char sexo;
};
int quantidmaior (struct Pessoa fs[], int tam, float med){
int quant = 0;
int cont = 0;
for ( cont = 0; cont < tam; cont = cont + 1 ){
if ( fs[cont].idade > med){
quant = quant + 1; }
}
return quant;}
int main(){
struct Pessoa Funcs[3];
int quant, contaid = 0;float media;
printf ( " Programa dos dados de funcionários. \n \n \n" );
int cont;for ( cont = 0; cont < 3; cont = cont +1 ){
printf (" Digite o nome do funcionario número %i: \n", cont+1 );fflush ( stdin );gets ( Funcs[ cont].nome );
printf ( " Digite a idade do funcionario número %i: \n", cont+1);fflush ( stdin );scanf ( "%i", & Funcs[cont].idade );
printf ( " Digite o sexo (f/m) do funcionario número %i: \n", cont+1 );fflush ( stdin );scanf ( "%c", & Funcs[cont].sexo);contaid = contaid + Funcs[cont].idade;
printf ("\n");}
media = (float) contaid/cont;
quant = quantidmaior (Funcs, cont, media);
printf ( " A média de idade é %.2f: \n", media );printf ( " A quantidade de funcionário com idada acima da média é %i: \n", quant );
printf ("\n \n"); system ("Pause");return 0;
}
Typedef
� Utilizado em C para redefinir um tipo de dadoatribuindo-lhe um novo nome.
� Você não cria uma nova classe de dados, mas define umnovo nome para um tipo já existente.
� Isso pode ser útil em casos de programas grandes, ondea alteração do tipo de uma determinada variável paraoutra acarretaria na alteração de muitas variáveis.
� Sintaxe
typedef tipo novonome;
Typedef
� Sintaxe
typedef tipo novonome;
� Exemplo:#include <stdio.h>
typedef float nota;
void main () {
nota P1;
printf ("Digite a nota 1\n");
scanf ("%f", &P1);
printf ("A nota 1 foi %f\n", P1)
}
Typedef
� Com o typedef é possível referenciar uma estrutura dedados dentro de outra (struct dentro de struct).
typedef struct data {unsigned short dia;unsigned short mes;unsigned int ano;unsigned int idade;
} Data;
typedef struct aniversario {char nome[50];Data nascimento;
} Aniversario;
int main () {
Aniversario Einstein, Newton;
Einstein.nascimento.dia = 14;Einstein.nascimento.mes = 3;Einstein.nascimento.ano = 1879;
Newton.nascimento.dia = 4;Newton.nascimento.mes = 1;Newton.nascimento.ano = 1643;
Einstein.nascimento.idade = Calc_Idade ( Einstein, 2011 );Newton.nascimento.idade = Calc_Idade ( Newton, 2011 );
printf ( " A idade de Einstein seria %d \n", Einstein.nascimento.idade );printf ( " A idade de Newton seria %d \n", Newton.nascimento.idade );
getchar();return 0;
}
Typedef - Exemplo 1
int Calc_Idade (Aniversario p, int a){
int idad;
idad = a - p.nascimento.ano;
return idad;}
Exercícios
1) Faça um programa que realize o cadastro decontas bancárias com as seguintes informações:número da conta, nome do cliente e saldo. Obanco permitirá o cadastramento de apenasquinze contas e não poderá haver mais que umaconta com o mesmo número. Crie o menu deopções a seguir:
1) Cadastrar conta;
2) Fazer movimentações na conta (saque e deposito);
3) Buscar cliente por conta e mostrar as informações;
4) Excluir uma conta;
5) Sair.
Exercícios
2) Faça um programa que efetue reservas depassagens áreas de determinada companhia. Oprograma deverá ler os números dos aviões e onumero de lugares disponíveis em cada avião. Oprograma deverá mostrar o seguinte menu deopções:
1) Cadastrar os números dos aviões;
2) Cadastrar o número de lugares disponíveis em cada avião;
3) Reservar passagem (escolher o avião e o lugar);
4) Consultar por avião;
5) Sair.
Top Related