Aula18-struct

Post on 06-Oct-2015

3 views 0 download

description

slide sobre struct (C)

Transcript of Aula18-struct

  • 1Estrutura (struct)

    Uma struct uma varivel composta heterognea Visa facilitar manipulao de um conjunto de dados

    logicamente relacionados, mas de diferentes tipos.

    Exemplo: Considere um registro de alunos, com RA, nome, CR, sexo, e endereo (composto por rua, nmero, cidade).

    0.73

    nomerua

    RAno. cidade

    07234 Monica Santos R. Dois 321 Rio Claro

    endereo

    F

    CR sexo

    nome endereoRA

    Monica Santos R. Dois, 321. Rio Claro07234

    CR

    F

    sexo

    0,73

    2

    Estrutura (struct)- declarao

    Passo1: definir a estrutura

    Forma geral: struct { ;

    ; ;. . .}

    nome endereoRA

    Monica Santos R. Dois, 321. Rio Claro07234

    CR

    F

    sexo

    0,73

    Exemplostruct cadastro {

    int ra; char nome[50];float CR;

    char sexo; char endereo[20];};

    Passo2: declarar as variveis que tero esta estrutura

    Forma geral: struct ;Exemplo:

    struct cadastro aluno, ex_aluno;

    3

    Estrutura (struct) - declarao Outra possibilidade de declarar a estrutura e as variveis

    em apenas um passo:Forma geral: struct {

    ; ; ;. . .} nome_varivel 1, nome varivel 2, . . . Nome varivel n;

    Exemplostruct cadastro {

    char ra[6]; char nome[50];float CR;char sexo;char endereco[20];} aluno, ex_aluno;

    4

    Estrutura (struct)- declarao

    Mais uma forma de declarao de uma struct

    dando nome structstruct tipo_data{

    int dia, mes, ano; };

    typedef struct tipo_data DATA; /* data o nome do tipo */

    O mesmo que Typedef struct tipo_data{

    int dia, mes, ano; } DATA;

    Podemos utilizar esse tipo para declarar variveisint X, Y, Z;

    DATA data_nasc;DATA *d; /* d um ponteiro para uma varivel do tipo DATA */

    5

    Estrutura (struct) - Utilizao Cada campo pode ser acessado escrevendo-se:

    nome da varivel, um ponto (.) e o nome do campo. Sintaxe:nome_varivel nome_campo;

    Considerando a definio:struct cadastro {

    char ra[6]; char nome[50];float CR;char sexo;} aluno;

    Exemplos.:alunoCR = 0.75; alunosexo = F; alunora = 71234; /* Para atribuio de string usar a funo strcpy da biblioteca string.h */

    strcpy(alunonome, Soraya);

    OBS: Se o campo char for de mais de um elemento (vetor de strings), cada um dos elementos pode ser acessado pelo seu ndice.Exemplos:

    printf(%c, aluno.nome[2]); /* exibe a letra r de Soraya */aluno.nome[4] = i'; /* troca a letra y pela letra i em Soraya*/

    6

    Atribuio de Estruturas - Utilizao Variveis com mesma estrutura podem ser igualadas.

    Considere como exemplo:

    struct coordenadas {int x, y, z;} variavel1, variavel2 = {1, 2, 3}; /* varivel2 inicializada*/

    Como variavel1 e variavel2 tm a mesma estrutura pode-se atribuir os valores dos campos da varivel2 para a varivel1, como segue:variavel1= variavel2;

    Atribuio anterior possui o mesmo efeito que: variavel1.x = variavel2.x;variavel1.y = variavel2.y;variavel1.z = variavel2.z;

  • 7Exemplo#include

    int main () {

    struct coordenadas {int x, y, z;} variavel1;

    struct coordenadas variavel2 = {1, 2, 0};

    variavel1 = variavel2; /* Comando de atribuio */

    printf ("x= %d y= %d z= %d \n", variavel1.x, variavel1.y, variavel1.z);

    return(0);

    }

    Comando de definio de uma estrutura deve

    aparecer antes da declarao de

    variveis

    8

    Vetores de Estruturas

    Exemplo:struct cadastro {

    int ra; char nome[50];int num_curso, ano_ingresso;float CR;} aluno, alunos[500];

    aluno valor para um aluno. Essa varivel pode ser usada para guardar o valor de um dos registros

    alunos valores para vrios alunos

    65432 0.75200642M a r a . . . . . . . .

    ra nome num curso ano ingresso CR

    ndices alunos

    3

    2

    1

    0

    0 1 2 3 ndices do nome

    9

    Vetores de Estruturas

    struct cadastro {int ra; char nome[50];int num_curso, ano_ingresso;float CR;} aluno, alunos[500];

    O acesso a um campo da estrutura exige o ndice. nome_varivel[indice]nome_campo;

    Exemplos: 1) aluno.ra=65432;

    2) alunos[0]ra =73210;

    3) strcpy(alunos[0]nome,Mara); /* usar #include */4) alunos[0]CR = 0.6;

    5) for (i=0;i

  • 13

    Para criar estruturas dentro de estruturas; Estrutura interna precisa ser declarada antes:struct dados_pessoais {

    char nome [50];char sexo;int idade;};

    struct cadastro {int ra ;struct dados_pessoais pessoa;float CR;};

    declarao da varivel struct cadastro aluno;

    acesso um campo da estruturaaluno.ra=52410; aluno.pessoa.sexo=F;

    Estruturas em estruturas

    14

    Estruturas em estruturas -Exemplo

    struct Reg_endereo {char rua[50];int no;char cidade;};

    struct cadastro_aluno {int ra;char nome[50];float CR;char sexo; struct Reg_endereo endereo;} aluno;

    Exemplo de utilizao:scanf(%d %f %s, &aluno.ra, &aluno.CR, aluno.endereco.cidade);

    0.73

    nomerua

    RAno. cidade

    07234 Monica Santos R. Dois 321 Rio Claro

    endereo

    F

    CR sexo