C Estruturas. Adriano Cruz 21 de julho de Instituto de Matemática Departamento de Ciência da Computação UFRJ

Documentos relacionados
C Estruturas. Section Summary. Adriano Cruz 1 de fevereiro de 2016

Métodos Computacionais. Tipos Estruturados

Estruturas de Dados. Introdução Definição de Ponteiros Declaração de Ponteiros em C Manipulação de Ponteiros em C

Ponteiros em C. Adriano Joaquim de Oliveira Cruz 21 de julho de Instituto de Matemática Departamento de Ciência da Computação UFRJ

Computação 2. Aula 5. Diego Addan Estrutura de Dados Registros (structs)

Introdução a Programação. Tipos Estruturados de Dados

Sumário. Introdução à Ciência da Computação. Ponteiros em C. Introdução. Definição. Por quê ponteiros são importantes?

Estrutura de dados 2. Ponteiro. Prof. Jesuliana N. Ulysses

REVISÃO DE C. Vanessa Braganholo Estruturas de Dados e Seus Algoritmos

LINGUAGEM C Estrutura / Funções

Módulo 8 Tipos Estruturados

1 Exercícios com ponteiros

Linguagem de Programação

MC-102 Aula 21 Registros

ALGORITMOS E ESRUTRA DE DADOS I. Ponteiros Passagem por Valor e Referência Alocação de Memória

SSC304 Introdução à Programação Para Engenharias. Estruturas. GE4 Bio

ESTRUTURAS COMPOSTAS. REGISTROS (Struct) Introdução à Ciência da Computação I Simone Senger Souza

Linguagem de Programação C. Registros

C Comandos de Controle

Aula 24 Ponteiros, vetores e structs

ponteiros INF Programação I Prof. Roberto Azevedo

Programação: Vetores

INF1007: Programação 2. 4 Tipos Estruturados. 10/23/09 (c) Dept. Informática - PUC-Rio 1

TÉCNICAS DE LINGUAGEM DE PROGRAMAÇÃO

Computadores Digitais 2. Prof. Rodrigo de Souza Couto

Introdução a Programação. Ponteiros para Estruturas, Outros Tipos de Estruturas

1 Exercícios com ponteiros

C Comandos de Controle

Estruturas. K&R: Capitulo 6. Estruturas IAED, 2014/2015. Introdução às Estruturas Estruturas e Funções Vectores de Estruturas Typedef Exemplo

Linguagem C. Ponteiros. Alex Vidigal Bastos.

ESTRUTURAS COMPOSTAS. REGISTROS (Struct) Introdução à Ciência da Computação I Simone Senger Souza

Aula 8 - Matrizes e Strings

Tipos Básicos. Operadores de Incremento e Decremento. Operador Sizeof. Estruturas de Dados Aula 2: Estruturas Estáticas

Algoritmos e Programação

Estruturas de Dados Aula 2: Estruturas Estáticas. Tipos Básicos. Quantos valores distintos podemos representar com o tipo char?

Estruturas de Dados Aula 2: Estruturas Estáticas 02/03/2011

Algoritmos e Estruturas de Dados I 01/2013. Passagem de Parâmetros e Estruturas. Pedro O.S. Vaz de Melo

Linguagem C. André Tavares da Silva.

Linguagem C ponteiros

Programação Estruturada

10. - ESTRUTURAS Características Básicas

Estruturas da linguagem C. 1. Identificadores, tipos primitivos, variáveis e constantes, operadores e expressões.

Estrutura de Dados. Struct (Registro) Lais Farias Alves

C Operadores e Expressões

CAP. IX - MANIPULAÇÃO DE ARQUIVOS Generalidades sobre Arquivos. 9.2 Abertura e Fechamento de Arquivos. Operações com arquivos:

ESTRUTURA DE DADOS (TCC )

Programação I Funções. Prof. Carlos Alberto

Introdução à Programação

Introdução a Programação. Ponteiros e Vetores, Alocação Dinâmica

INF 1620 P1-04/10/03 Questão 1 Nome:

Ponteiro. Ponteiro. Objetivo. Compreender a definição e dominar a implementação de ponteiros em C.

Linguagem de Programação I - Registros (struct) No exemplo acima foi criado um tipo de dado estruturado chamado struct aluno.

Introdução à Computação

INF 1007 Programação II

Modulo 9: Você define como éo dado... Struct e typedef

INF 1620 P3-29/06/04 Questão 1 Nome:

Departamento de Sistemas de Computação Universidade de São Paulo Introdução a Ciência de Computação I. Aula 12 Estruturas

Métodos Computacionais. Funções, Escopo de Variáveis e Ponteiros

Computação Informática

Estruturas de Dados. Módulo 4 Funções. 9/8/2005 (c) Dept. Informática - PUC-Rio 1

INF 1620 P2-14/10/05 Questão 1 Nome:

Programação de Computadores II. Cap. 5 Vetores

INF 1620 P1-13/09/02 Questão 1 Nome:

Computação 2. Aula 6B. Profª. Fabiany Vetor de Estruturas (structs)

Universidade Federal de Uberlândia Faculdade de Computação. Linguagem C: ponteiros e alocação dinâmica

SSC304 Introdução à Programação Para Engenharias. Ponteiros. GE4 Bio

Capítulo 4: Programando com Funções. Pontifícia Universidade Católica Departamento de Informática

LINGUAGEM C: FUNÇÕES FUNÇÃO 04/07/2017. Funções são blocos de código que podem ser nomeados e chamados de dentro de um programa.

Programação Orientada a Objetos. Giselle Lopes Ferrari Ronque

Algoritmos e Estruturas de dados

Podemos dar um nome à estrutura e referenciar esse nome na declaração das variáveis:

1/27. Registos (Estruturas - struct)

13 Registros (Structs)

Ponteiros. Baseado nos slides do Prof. Mauro.

INF 1620 P2-01/11/03 Questão 1 Nome:

Introdução a Computação

8. Tipos estruturados

LINGUAGEM C: FUNÇÕES FUNÇÃO 08/01/2018. Funções são blocos de código que podem ser nomeados e chamados de dentro de um programa.

11a. Aula Ponteiros e Vetores

Ponteiros. Prof. Fernando V. Paulovich *Baseado no material do Prof. Gustavo Batista

Linguagens de Programação I

FUNÇÕES EM C Material adaptado da profa Silvana Maria Affonso de Lara

Programação 1. Atribuição, operadores aritméticos, entrada de dados. Técnico em Eletrônica Semestre 5 02

Funções em Linguagem C Parte II

Capítulo 1: Introdução à Linguagem C. Pontifícia Universidade Católica Departamento de Informática

#include <stdio.h> Void main() { printf( Cheguei!\n"); } INTRODUÇÃO A LINGUAGEM C

TAD: Tipo Abstrato de Dados (parte 2)

Vetores. e o programa deverá ler os valores separadamente:

Universidade Estadual de Mato Grosso do Sul Ciência da Computação Algoritmos e Estruturas de Dados I (AED-I) Prof. Nilton

Introdução a Linguagem C (Parte II) UFPA Sistemas de Informação. Roberto Araujo 2013

Introdução à Computação MAC0110

Alocação Dinâmica em C

ED1 - Aula 01 Introducao e revisão

Introdução a Programação. Ponteiros e Strings, Alocação Dinâmica

Aula 25: Alocação Dinâmica

PONTEIROS E LISTAS. Kalinka Regina Lucas Jaquie Castelo Branco

Introdução. Ponteiros

Transcrição:

C Estruturas Adriano Cruz adriano@nce.ufrj.br 21 de julho de 2017 Instituto de Matemática Departamento de Ciência da Computação UFRJ 1

Section Summary 1 Introdução 2 Definições Básicas 3 typedef 4 typedef e struct 5 Atribuição de Estruturas 6 Matrizes de Estruturas 7 Estruturas e Funções 8 Ponteiros para Estruturas 2

Bibliografia 1 Adriano Cruz. Curso de Linguagem C, Disponível em http://equipe.nce.ufrj.br/adriano 3

Bibliografia 1 Adriano Cruz. Curso de Linguagem C, Disponível em http://equipe.nce.ufrj.br/adriano 2 Ulysses de Oliveira. Programando em C, Editora Ciência Moderna. 3

O que é? 1 Uma estrutura é um conjunto de uma ou mais variáveis, que podem ser de tipos diferentes, agrupadas sob um único nome. 4

O que é? 1 Uma estrutura é um conjunto de uma ou mais variáveis, que podem ser de tipos diferentes, agrupadas sob um único nome. 2 Estruturas facilitam a manipulação dos dados nelas armazenados. 4

O que é? 1 Uma estrutura é um conjunto de uma ou mais variáveis, que podem ser de tipos diferentes, agrupadas sob um único nome. 2 Estruturas facilitam a manipulação dos dados nelas armazenados. 3 Um exemplo poderia ser uma estrutura que armazenasse as diversas informações sobre os alunos de uma Universidade. 4

O que é? 1 Uma estrutura é um conjunto de uma ou mais variáveis, que podem ser de tipos diferentes, agrupadas sob um único nome. 2 Estruturas facilitam a manipulação dos dados nelas armazenados. 3 Um exemplo poderia ser uma estrutura que armazenasse as diversas informações sobre os alunos de uma Universidade. 4 Nesta estrutura estariam armazenadas, sob o mesmo nome, informações do tipo: nome, registro, data de nascimento, data de ingresso, CPF, etc. 4

O que é? 1 Uma estrutura é um conjunto de uma ou mais variáveis, que podem ser de tipos diferentes, agrupadas sob um único nome. 2 Estruturas facilitam a manipulação dos dados nelas armazenados. 3 Um exemplo poderia ser uma estrutura que armazenasse as diversas informações sobre os alunos de uma Universidade. 4 Nesta estrutura estariam armazenadas, sob o mesmo nome, informações do tipo: nome, registro, data de nascimento, data de ingresso, CPF, etc. 5 Uma estrutura pode incluir outras estruturas além de variáveis simples. 4

Informações Demais 5

Section Summary 1 Introdução 2 Definições Básicas 3 typedef 4 typedef e struct 5 Atribuição de Estruturas 6 Matrizes de Estruturas 7 Estruturas e Funções 8 Ponteiros para Estruturas 6

Definições Básicas Estrutura: um conjunto de variáveis, de tipos diversos ou não, agrupadas sob um único nome. 7

Definições Básicas Estrutura: um conjunto de variáveis, de tipos diversos ou não, agrupadas sob um único nome. Membros: Variáveis que compõem a estrutura são os seus membros, elementos ou campos. 7

Definições Básicas Estrutura: um conjunto de variáveis, de tipos diversos ou não, agrupadas sob um único nome. Membros: Variáveis que compõem a estrutura são os seus membros, elementos ou campos. Relação: Os elementos da estrutura podem ter alguma relação semântica. Por exemplo: alunos de uma universidade, discos de uma coleção, elementos de uma figura geométrica, etc. 7

Exemplo I struct ALUNO { char nome[40]; int registro; int ano_entrada; char curso[20]; }; 8

Exemplo II A palavra chave struct inicia a declaração da estrutura, em seguida pode aparecer um identificador (ALUNO), que subseqüentemente pode ser usado como abreviação da definição da estrutura. 9

Exemplo II A palavra chave struct inicia a declaração da estrutura, em seguida pode aparecer um identificador (ALUNO), que subseqüentemente pode ser usado como abreviação da definição da estrutura. A declaração continua com a lista de declarações entre chaves e termina com um ;. 9

Exemplo II A palavra chave struct inicia a declaração da estrutura, em seguida pode aparecer um identificador (ALUNO), que subseqüentemente pode ser usado como abreviação da definição da estrutura. A declaração continua com a lista de declarações entre chaves e termina com um ;. Um membro da estrutura e uma variável não membro da estrutura podem ter o mesmo nome, já que é possível distingui-las por contexto. 9

Exemplo II A palavra chave struct inicia a declaração da estrutura, em seguida pode aparecer um identificador (ALUNO), que subseqüentemente pode ser usado como abreviação da definição da estrutura. A declaração continua com a lista de declarações entre chaves e termina com um ;. Um membro da estrutura e uma variável não membro da estrutura podem ter o mesmo nome, já que é possível distingui-las por contexto. Para definir estruturas deste tipo podemos usar a seguinte declaração: struct ALUNO paulo, carlos, ana; 9

Declarações É possível declarar ao mesmo tempo o modelo da estrutura e as variáveis do programa. 10

Declarações É possível declarar ao mesmo tempo o modelo da estrutura e as variáveis do programa. struct ALUNO { char nome[40]; int registro; int ano_entrada; char curso[20]; } paulo, carlos, ana; 10

Referenciando elementos Para referenciar um elemento da estrutura usa-se o nome da variável do tipo da estrutura seguida de um ponto e do nome do elemento. 11

Referenciando elementos Para referenciar um elemento da estrutura usa-se o nome da variável do tipo da estrutura seguida de um ponto e do nome do elemento. paulo.ano_entrada = 1999; 11

Referenciando elementos Para referenciar um elemento da estrutura usa-se o nome da variável do tipo da estrutura seguida de um ponto e do nome do elemento. paulo.ano_entrada = 1999; Armazena o ano em que aluno paulo entrou na universidade. 11

Referenciando elementos Para referenciar um elemento da estrutura usa-se o nome da variável do tipo da estrutura seguida de um ponto e do nome do elemento. paulo.ano_entrada = 1999; Armazena o ano em que aluno paulo entrou na universidade. Para ler o nome do curso que paulo cursa pode-se usar o comando gets(paulo.curso); 11

Referenciando elementos Para referenciar um elemento da estrutura usa-se o nome da variável do tipo da estrutura seguida de um ponto e do nome do elemento. paulo.ano_entrada = 1999; Armazena o ano em que aluno paulo entrou na universidade. Para ler o nome do curso que paulo cursa pode-se usar o comando gets(paulo.curso); paulo.curso é um vetor de caracteres. 11

Estruturas dentro de estruturas Estruturas podem conter outras estruturas como membros. Por exemplo, vamos definir uma estrutura para armazenar uma data com a seguinte definição: 12

Estruturas dentro de estruturas Estruturas podem conter outras estruturas como membros. Por exemplo, vamos definir uma estrutura para armazenar uma data com a seguinte definição: struct DATA { int dia, mes, ano; }; 12

Estruturas dentro de estruturas Agora vamos modificar a estrutura aluno de modo que ela inclua a data de nascimento do aluno. 13

Estruturas dentro de estruturas Agora vamos modificar a estrutura aluno de modo que ela inclua a data de nascimento do aluno. struct aluno { char nome[40]; int registro; int ano_entrada; char curso[20]; struct DATA data_nascimento; }; 13

Estruturas dentro de estruturas Agora vamos modificar a estrutura aluno de modo que ela inclua a data de nascimento do aluno. struct aluno { char nome[40]; int registro; int ano_entrada; char curso[20]; struct DATA data_nascimento; }; Para se referir ao mês de nascimento de uma variável paulo do tipo estrutura aluno usamos a declaração paulo.data_nascimento.mes 13

Section Summary 1 Introdução 2 Definições Básicas 3 typedef 4 typedef e struct 5 Atribuição de Estruturas 6 Matrizes de Estruturas 7 Estruturas e Funções 8 Ponteiros para Estruturas 14

Definindo tipos! Uma forma mais conveniente de definição de estruturas é possível com o uso do comando typedef. 15

Definindo tipos! Uma forma mais conveniente de definição de estruturas é possível com o uso do comando typedef. Este comando permite dar a um tipo de dados um novo nome. 15

Definindo tipos! Uma forma mais conveniente de definição de estruturas é possível com o uso do comando typedef. Este comando permite dar a um tipo de dados um novo nome. Uma utilidade é aumentar a legibilidade do programa. 15

Definindo tipos! Uma forma mais conveniente de definição de estruturas é possível com o uso do comando typedef. Este comando permite dar a um tipo de dados um novo nome. Uma utilidade é aumentar a legibilidade do programa. Por exemplo, é possível usar o seguinte código #define AMARELO 1 typedef int cores; typedef int laranja; typedef int manga;... laranja lima; manga espada; cores = AMARELO;... espada++; 15

Section Summary 1 Introdução 2 Definições Básicas 3 typedef 4 typedef e struct 5 Atribuição de Estruturas 6 Matrizes de Estruturas 7 Estruturas e Funções 8 Ponteiros para Estruturas 16

Simplificando struct É comum o uso de typedef em conjunto com struct. 17

Simplificando struct É comum o uso de typedef em conjunto com struct. Considere a definição de uma estrutura para guardar horas, minutos e segundos. 17

Simplificando struct É comum o uso de typedef em conjunto com struct. Considere a definição de uma estrutura para guardar horas, minutos e segundos. Usando esta combinação, a definição é usualmente feita da seguinte maneira: 17

Simplificando struct É comum o uso de typedef em conjunto com struct. Considere a definição de uma estrutura para guardar horas, minutos e segundos. Usando esta combinação, a definição é usualmente feita da seguinte maneira: struct _TEMPO { int hora, minuto, segundo; }; typedef struct _TEMPO TEMPO;... TEMPO t1; t1.hora = 10; t1.minuto = 15; t1.segundo = 0; 17

Simplificando Uma forma ainda mais abreviada, junta as duas definições, ficando a definição da estrutura da seguinte maneira: 18

Simplificando Uma forma ainda mais abreviada, junta as duas definições, ficando a definição da estrutura da seguinte maneira: typedef struct _TEMPO { int hora, minuto, segundo; } TEMPO;... TEMPO t1; 18

Mais simples ainda É possível dispensar o nome da estrutura (_TEMPO) e a definição fica ainda mais simples, com a seguinte forma: 19

Mais simples ainda É possível dispensar o nome da estrutura (_TEMPO) e a definição fica ainda mais simples, com a seguinte forma: typedef struct { int hora, minuto, segundo; } TEMPO;... TEMPO t1; 19

Section Summary 1 Introdução 2 Definições Básicas 3 typedef 4 typedef e struct 5 Atribuição de Estruturas 6 Matrizes de Estruturas 7 Estruturas e Funções 8 Ponteiros para Estruturas 20

Atribuições entre estruturas #include <stdio.h> typedef struct _EMPREGADO { char nome[40]; float salario; } EMPREGADO; int main () { EMPREGADO temp, emp1; } puts("entre com nome."); gets(emp1.nome); puts("qual o salario?"); scanf("%f", &emp1.salario); temp=emp1; printf("o salario de %s e %.2f\n", temp.nome, temp.salario); return 0; 21

Simplificando É possível atribuir o conteúdo de uma estrutura a outra estrutura do mesmo tipo, não sendo necessário atribuir elemento por elemento da estrutura. 22

Simplificando É possível atribuir o conteúdo de uma estrutura a outra estrutura do mesmo tipo, não sendo necessário atribuir elemento por elemento da estrutura. Esta é uma das grandes vantagens de estruturas já que o tamanho do código é reduzido e a clareza dos programas aumenta. 22

Simplificando É possível atribuir o conteúdo de uma estrutura a outra estrutura do mesmo tipo, não sendo necessário atribuir elemento por elemento da estrutura. Esta é uma das grandes vantagens de estruturas já que o tamanho do código é reduzido e a clareza dos programas aumenta. O comando temp = emp1; faz com que todos os dados armazenados na estrutura emp1 sejam transferidos para a estrutura temp. 22

Section Summary 1 Introdução 2 Definições Básicas 3 typedef 4 typedef e struct 5 Atribuição de Estruturas 6 Matrizes de Estruturas 7 Estruturas e Funções 8 Ponteiros para Estruturas 23

Matrizes de Estruturas Estruturas aparecem freqüentemente na forma de matrizes. Por exemplo, a declaração ALUNO turma[100]; define uma matriz de 100 estruturas do tipo struct ALUNO. 24

Exemplo de Matriz de Estrutura I #include <stdio.h> #include <string.h> typedef struct _ALUNO { char nome[40]; float n1, n2, media; } ALUNO; 25

Exemplo de Matriz de Estrutura II int main (void ) { ALUNO turma[4], temp; int jaordenados = 0, foraordem, i; for (i = 0; i < 4; i++) { gets(turma[i]. nome) ; scanf( %f, &turma[i ]. n1) ; do {} while (getchar()!= '\n ') ; scanf( %f, &turma[i ]. n2) ; do {} while (getchar()!= '\n ') ; turma[i]. media=(turma[i].n1+turma[i]. n2) /2.0; } 26

Exemplo de Matriz de Estrutura III do { foraordem = 0; for (i = 0; i < 4-1 - jaordenados; i++) { if (turma[i].media > turma[i+1].media) { temp = turma[i]; turma[i] = turma[i+1]; turma[i+1] = temp; foraordem = 1; } } jaordenados ++; } while (foraordem); for (i=0; i<4; i++) { printf("\ndados do aluno %d\n", i); printf("%s: %0.1f, %0.1f, %0.1f\n", turma[i].nome, turma[i].n1, turma[i].n2, turma[i].media); } return 0; } 27

Section Summary 1 Introdução 2 Definições Básicas 3 typedef 4 typedef e struct 5 Atribuição de Estruturas 6 Matrizes de Estruturas 7 Estruturas e Funções 8 Ponteiros para Estruturas 28

Passando elementos da estrutura Passando elementos da estrutura Primeiro vamos considerar o caso de passar elementos da estrutura para funções. 29

Passando elementos da estrutura Passando elementos da estrutura Primeiro vamos considerar o caso de passar elementos da estrutura para funções. Caso os elementos da estrutura sejam variáveis de um dos tipos já vistos, a passagem é efetuada da maneira normal. 29

Exemplo #include<stdio.h> typedef struct _CIRCULO { float x, y, raio; } CIRCULO; float Area ( float r) { return 3.141516 r r; } int main (void ) { CIRCULO c; c.x = c.y = c.raio = 1.0; printf( %f\n, Area(c.raio)) ; return 0; } 30

Passando estruturas Estruturas, quando passadas para funções, se comportam da mesma maneira que as variáveis dos tipos que já estudamos. 31

Passando estruturas Estruturas, quando passadas para funções, se comportam da mesma maneira que as variáveis dos tipos que já estudamos. Ao passar uma estrutura para uma função estaremos passando os valores armazenados nos membros da estrutura. 31

Passando estruturas Estruturas, quando passadas para funções, se comportam da mesma maneira que as variáveis dos tipos que já estudamos. Ao passar uma estrutura para uma função estaremos passando os valores armazenados nos membros da estrutura. Como este tipo de passagem é feito por valor, alterações nos membros da estrutura não modificam os valores da estrutura na função que chamou. 31

Exemplo #include <stdio.h> #include <math.h> typedef struct _PONTO { float x, y; } PONTO; float comp(ponto p1, PONTO p2) { return sqrt(pow(p2.x-p1.x,2)+pow(p2.y-p1.y,2)); } int main (void) { PONTO p1, p2; } printf("x1 =? "); scanf("%f", &p1.x); printf("y1 =? "); scanf("%f", &p1.y); printf("x2 =? "); scanf("%f", &p2.x); printf("y2 =? "); scanf("%f", &p2.y); printf("comprimento da reta = %f\n", comp(p1, p2)); return 0; 32

Passando vetores de estruturas Passando vetores de estruturas A passagem de vetores de estruturas é similar a passagem de vetores de variáveis simples. Exemplo Para ilustrar a passagem de vetores de estruturas para funções iremos, no exemplo anterior, substituir o trecho que ordena o vetor de alunos por uma função. 33

Exemplo void Ordena(ALUNO turma[], int tam) { int i, foraordem, jaordenados = 0; ALUNO temp; do { foraordem = 0; for (i = 0; i < 4 1 jaordenados; i++) { if (turma[i]. media > turma[i+1].media) { temp = turma[i]; turma[i] = turma[i+1]; turma[i+1] = temp; foraordem = 1; } } jaordenados++; } while (foraordem) ; } 34

Section Summary 1 Introdução 2 Definições Básicas 3 typedef 4 typedef e struct 5 Atribuição de Estruturas 6 Matrizes de Estruturas 7 Estruturas e Funções 8 Ponteiros para Estruturas 35

Ponteiros para estruturas Ponteiros para estruturas Para definir ponteiros para estruturas a declaração é similar a declaração de um ponteiro normal. struct aluno { char nome[40]; int ano_entrada; float n1, n2, media; } ze; 36

Passando estruturas Ponteiros são uteis quando passamos estruturas para funções. 37

Passando estruturas Ponteiros são uteis quando passamos estruturas para funções. Ao passar apenas o ponteiro para estrutura economizamos tempo e memória. 37

Passando estruturas Ponteiros são uteis quando passamos estruturas para funções. Ao passar apenas o ponteiro para estrutura economizamos tempo e memória. O espaço de memória, é economizado por que se evita passar os dados que compõem a estrutura um por um. 37

Passando estruturas Ponteiros são uteis quando passamos estruturas para funções. Ao passar apenas o ponteiro para estrutura economizamos tempo e memória. O espaço de memória, é economizado por que se evita passar os dados que compõem a estrutura um por um. O tempo é economizado porque não é necessário gastar o tempo de empilhar e desempilhar todos os elementos da estrutura no processo de passagem para a função. 37

Passando estruturas Ponteiros são uteis quando passamos estruturas para funções. Ao passar apenas o ponteiro para estrutura economizamos tempo e memória. O espaço de memória, é economizado por que se evita passar os dados que compõem a estrutura um por um. O tempo é economizado porque não é necessário gastar o tempo de empilhar e desempilhar todos os elementos da estrutura no processo de passagem para a função. Para acessar elementos da estrutura apontada por um ponteiro usa-se o chamado operador seta ( >). 37

Passando estruturas Ponteiros são uteis quando passamos estruturas para funções. Ao passar apenas o ponteiro para estrutura economizamos tempo e memória. O espaço de memória, é economizado por que se evita passar os dados que compõem a estrutura um por um. O tempo é economizado porque não é necessário gastar o tempo de empilhar e desempilhar todos os elementos da estrutura no processo de passagem para a função. Para acessar elementos da estrutura apontada por um ponteiro usa-se o chamado operador seta ( >). Por exemplo para imprimir a média do aluno ze usaríamos o comando printf ( A media vale %.1f, ze >media) ; 37

Alocando espaço para estruturas # include <stdio.h> typedef struct _ALUNO { char nome[40]; float n1, n2, media; } ALUNO; int main (void) { ALUNO *maria; maria = (ALUNO *) malloc (sizeof(aluno)); if (!maria) exit(1); } gets(maria->nome); scanf("%f %f", &(maria->n1), &(maria->n2)); maria->media = (maria->n1 + maria->n2) / 2; printf("a media de %s vale %0.2f\n", maria->nome, maria-> media); return 0; 38

Alocando espaço para vetores de estruturas I #include<stdio.h> #include<stdlib.h> typedef struct _func { char nome[40]; float salario; } Tfunc ; void le (Tfunc *cadastro, int funcionarios) { int i; char linha[40]; for (i=0; i<funcionarios; i++) { fgets((cadastro+i)->nome, 39, stdin); puts ("Salario?"); fgets(linha, 39, stdin); sscanf(linha, "%f", &((cadastro+i)->salario)); } } 39

Alocando espaço para vetores de estruturas II float media(tfunc cadastro, int funcionarios) { float media=0.0; int i; } for (i=0; i<funcionarios; i++) { media += ( cadastro+i) >salario; } return media /= funcionarios; 40

Alocando espaço para vetores de estruturas III int main (void ) { Tfunc cadastro; int funcionarios; char linha[40]; puts( Quantos funcionarios? ) ; fgets(linha, 39, stdin) ; sscanf (linha, %d, &funcionarios) ; cadastro = (Tfunc ) malloc(funcionarios sizeof (Tfunc)) ; if (!cadastro) exit (1) ; le(cadastro, funcionarios) ; printf( Salario medio = %.2f\n, media(cadastro, funcionarios)) ; return 0; } 41

The End 42