Aula Prtica 10 Structs Monitoria 2011 2 Structs

  • Slides: 17
Download presentation
Aula Prática 10 Structs Monitoria 2011. 2

Aula Prática 10 Structs Monitoria 2011. 2

Structs • Uma estrutura é uma coleção de variáveis. • Funciona como uma espécie

Structs • Uma estrutura é uma coleção de variáveis. • Funciona como uma espécie de “ficha”. A ficha armazena diversos dados relacionados, porém de tipos diferente. • A estrutura, então, serve para agrupar um conjunto de dados não similares, formando um novo tipo de dados.

Criando Structs • Criação: struct nome_do_tipo_da_estrutura { tipo_variavel 1 nome_variavel 1; tipo_variavel 2 nome_variavel

Criando Structs • Criação: struct nome_do_tipo_da_estrutura { tipo_variavel 1 nome_variavel 1; tipo_variavel 2 nome_variavel 2; . . . }; * Onde: tipo_variavel 1, tipo_variavel 2 são tipos de dados em C (podem ser inclusive ponteiros ou structs).

Comando Typedef • Renomeia um tipo qualquer: typedef long unsigned int monstro; int main()

Comando Typedef • Renomeia um tipo qualquer: typedef long unsigned int monstro; int main() { monstro x = 1000000; printf(“ %llu ”, x); } typedef struct nome_do_tipo_da_estrutura { tipo_variavel 1 nome_variavel 1; tipo_variavel 2 nome_variavel 2; . . . } Nome;

Criando Structs com Typedef • Criação: typedef struct nome_do_tipo_da_estrutura { tipo_variavel 1 nome_variavel 1;

Criando Structs com Typedef • Criação: typedef struct nome_do_tipo_da_estrutura { tipo_variavel 1 nome_variavel 1; tipo_variavel 2 nome_variavel 2; . . . } Nome;

Acesso: Operador de acesso direto: - estrutura. variavel Operador de acesso indireto: - estrutura->variavel

Acesso: Operador de acesso direto: - estrutura. variavel Operador de acesso indireto: - estrutura->variavel - equivale a (*estrutura). variavel

Exemplo 1: struct aluno { char nome[50]; long int RG; int idade; }; int

Exemplo 1: struct aluno { char nome[50]; long int RG; int idade; }; int main() { struct aluno joao, jose; strcpy(joao. nome , “Joao da Silva”); joao. RG = 992042; joao. idade = 21; strcpy(jose. nome , “Jose dos Santos”); jose. RG = 899932; jose. idade = 19; }

Exemplo 2: typedef struct aluno { char nome[50]; long int RG; int idade; }

Exemplo 2: typedef struct aluno { char nome[50]; long int RG; int idade; } Aluno; Aluno* novo. Aluno (char *nome, long int RG, int idade) { Aluno *novo = (Aluno*)malloc(sizeof(Aluno)); strcpy(novo->nome, nome); novo->RG = RG; novo->idade = idade; return novo; } int main() { Aluno *joao, *jose; joao = novo. Aluno(“Joao da Silva”, 992042, 21); jose = novo. Aluno(“Jose dos Santos”, 899932, 19); strcpy(jose->nome , “Jose dos Santos”); }

Exemplo 3: struct human; struct pet { char nome[30]; char especie[30]; struct human *dono;

Exemplo 3: struct human; struct pet { char nome[30]; char especie[30]; struct human *dono; } fido = {″Fido″, ″Canis lupus familiaris″}; struct human { char nome[30]; struct pets[PET_LIMIT]; } sam = {″Sam″, {fido}};

Structs e Funções • struct dado funcao (struct dado s); • /* Passagem por

Structs e Funções • struct dado funcao (struct dado s); • /* Passagem por valor */ • Dado funcao (Dado s); • /* Passagem por valor */ • void funcao (struct dado *s); • /* Passagem por referência */ • void funcao (Dado *s); • /* Passagem por referência */

Vetores de Structs typedef struct tipo_ficha_cadastral { char nome[50]; long int RG; int idade;

Vetores de Structs typedef struct tipo_ficha_cadastral { char nome[50]; long int RG; int idade; }Aluno; Aluno aluno[30]; aluno[1]. RG = 2002029242220; Monitoria Introdução à Programação / UFPE 2010. 2 03/11/2010

Union • São como structs, mas todos os membros ocupam a mesma região da

Union • São como structs, mas todos os membros ocupam a mesma região da memória. • O espaço ocupado é do maior elemento. • Só é possível usar um elemento por vez union valor { float f; int i; char *s; };

Enum • Consiste de um conjunto de constantes inteiras, em que cada uma delas

Enum • Consiste de um conjunto de constantes inteiras, em que cada uma delas é representada por um nome. enum dias { segunda, terca, quarta, quinta, sexta, sabado, domingo } enum dias { segunda = 2, terca, quarta, quinta, sexta, sabado, domingo }

Enum + Union enum TYPE { INT, FLOAT, STRING }; struct VARIABLE { enum

Enum + Union enum TYPE { INT, FLOAT, STRING }; struct VARIABLE { enum TYPE type; union VALUE value; };

 • DÚVIDAS ?

• DÚVIDAS ?

Exercícios • Crie um programa que cadastre os alunos de uma turma. Cada aluno

Exercícios • Crie um programa que cadastre os alunos de uma turma. Cada aluno possui um nome e 3 notas. Seu programa deve receber os dados de desses alunos e dizer qual deles tem maior MÉDIA.

Exercícios • Faça um programa para cadastro telefônico. Cada pessoa do cadastro possui um

Exercícios • Faça um programa para cadastro telefônico. Cada pessoa do cadastro possui um nome e um telefone. Seu programa deve cadastrar N pessoas. Depois do cadastro feito, pergunte ao usuário a letra que ele deseja consultar. Exiba todos os nomes e telefones de pessoas cadastradas que comecem com essa letra.