UNIPLI Linguagem de Programação I Professora Simoni Rangel de Freitas Oliveira Estruturas e tipos definidos pelo usuário 1. Estruturas Uma estrutura é um conjunto de variáveis de tipos distintos ou não, agrupadas sob um único nome. As variáveis que compõem a estrutura são chamadas membros, campos ou elementos. Exemplos: 1. Uma estrutura data composta por três elementos: dia, mês e ano. struct data { int dia; int mes; int ano; }; 2. Uma estrutura aluno composta por dois elementos: nome e matrícula. struct aluno { char nome[80]; int matricula; }; Declaração de uma estrutura Sintaxe: struct <identificador> { tipo membro1; tipo membro2; ... tipo membroN; }; • • • • Com a palavra-chave struct declara-se um novo tipo de dado. A palavra seguinte será o seu identificador. Os membros são declarados entre chaves. A declaração termina com um “ponto e vírgula” (;). No momento da declaração da estrutura: • Não há alocação de espaço de memória. • É definido um modelo de como estruturas do tipo identificador, devem ser construídos. • Os membros não podem ser inicializados. 1 UNIPLI Linguagem de Programação I Professora Simoni Rangel de Freitas Oliveira Após ter sido declarado o novo tipo existe e pode ser utilizado para criar variáveis que irão armazenar os valores. Sintaxe para a declaração das variáveis: struct <identificador> <lista de variáveis>; Exemplos: struct data hoje; • Declaração de uma variável, ou uma estrutura, do tipo data. • É alocado espaço para armazenar os dados de hoje. struct aluno Joana, Marilena, Marcelo; • Declaração de três variáveis, ou três estruturas, do tipo aluno • É alocado espaço para armazenar os dados dos três alunos: Joana, Marilena e Marcelo. É possível declarar simultaneamente o modelo da estrutura e as variáveis do tipo estrutura. Exemplos: struct data{ int dia; int mes; int ano; }hoje; struct aluno{ char nome[80]; int matricula; }Joana, Marilena, Marcelo; Inicialização de estruturas A inicialização de estruturas é semelhante à inicialização de um arranjo. Exemplos: 1. struct funcionario { char nome[50]; double salario; } x, y, z; struct funcionario x = {“Amanda da Silva”, 370.00}; struct funcionario y = {“Marcelo de Souza Junior”, 450.00}; struct funcionario z = {“Roberto dos Santos”, 1530.00}; 2 UNIPLI Linguagem de Programação I Professora Simoni Rangel de Freitas Oliveira 2. struct data{ int dia; int mes; int ano; }hoje; struct data hoje={13,11,2006}; Os valores para cada um dos membros são escritos entre chaves e separados por vírgula, na ordem em que foram declarados. Acesso aos elementos de uma estrutura Os elementos de uma estrutura podem ser acessados através do operador de acesso “ponto” (.). Esse operador conecta o nome de uma variável estrutura a um membro desta. Exemplos: 1. struct funcionario{ char nome[50]; double salario; } x, y, z; // esturura x strcpy(x.nome,”Amanda da Silva”); x.salario=370.00 //estrutura y gets(y.nome); scanf(“%lf”, &y.salario); //estrutura z z=x; //atrituição de todos os campos de x para z; • Só é possível atribuir o conteúdo de uma estrutura a outra estrutura do mesmo tipo. 2. Estrutura com outras estruturas como membros. struct aluno { char nome[80]; int matricula; struct data nascimento; }fulano; gets(fulano.nome); scanf(“%d”, &fulano.matricula); scanf(“%d”, &fulano.nascimento.dia); scanf(“%d”, &fulano.nascimento.mes); scanf(“%d”, &fulano.nascimento.ano); 3 UNIPLI Linguagem de Programação I Professora Simoni Rangel de Freitas Oliveira 3. Vetores de estruturas Vetores de estruturas são vetores onde os elementos são estruturas. Deste modo, o acesso a um vetor de estruturas é feito colocando-se o índice entre colchetes, logo após o nome do vetor seguido pelo operador ponto. A inicialização pode ser feita delimitando-se o conteúdo do vetor entre um par de chaves, assim como o conteúdo a ser atribuído a cada posição do vetor. O valor para cada um dos membros deve respeitar a ordem de declaração, separados por vírgula. Exemplo: #include <stdio.h> #define TAM_VET 4 void main(){ // declaracao do modelo data struct data{ int dia, mes, ano; }; // declaracao do modelo funcionario struct funcionario{ char nome[50]; double salario; struct data nascimento; }; // declaração da variável i int i; // declaracao e inicialização do vetor de estruturas vet struct funcionario vet[TAM_VET]={ {"Adriana Martins", 350.00, {10,5,1982} }, {"Luciano Araujo de Lima", 540.00, {23,8,1983} }, {"Marcos Paulo da Silva", 3625.00, {14,1,1981} }, {"Jonathas Martins dos Santos",2368.00, {2,10,1983} } }; puts("Imprimindo os dados.\n"); for(i=0; i<4; i++){ puts(vet[i].nome); printf("Salario: %.2lf", vet[i].salario); printf("\n%d/%d/%d\n\n", vet[i].nascimento.dia, vet[i].nascimento.mes, vet[i].nascimento.ano ); } } Bibliografia HICKSON, Rosângela. Aprenda a programar em C, C++ e C#. Ed. Campus, 2002. GOTTFRIED, B. S. Programando em C. Editora LTC, 1993. KERNIGHAN, B. W., RITCHIE, D. M. C: A linguagem de programação – Padrão ANSI. Ed. Campus, 1989. 4