Universidade de São Paulo São Carlos Instituto de Ciências Matemáticas e de Computação. Estruturas em C

Documentos relacionados
Estruturas. struct são coleções de dados heterogêneos agrupados em uma mesma estrutura de dados. Ex: armazenar as coordenadas (x,y) de um ponto:

Universidade de Brasília. Departamento de Ciência da Computação. Curso C: Estruturas. Prof. Ricardo Pezzuol Jacobi

USP - ICMC - SSC SSC o. Semestre Disciplina de Introdução à Computação para Engenharia Ambiental

USP - ICMC - SSC SSC o. Semestre 2010 Disciplina de Introdução à Ciência da Computação ICC 1 - Teoria

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

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

Mais sobre Ponteiros em C

Introdução a Ponteiros e Vetores em C

Alocação Dinâmica em C

Universidade de São Paulo São Carlos Instituto de Ciências Matemáticas e de Computação. Recursão em C

Funções em Linguagem C Parte II

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

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

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

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

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

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

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

ponteiros INF Programação I Prof. Roberto Azevedo

Ponteiros e Tabelas. K&R: Capítulo 5

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

/* Este programa realiza um somatório e exibe o resultado na tela do computador */

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

Computadores Digitais 2. Prof. Rodrigo de Souza Couto

3. Linguagem de Programação C

Introdução a Programação. Ponteiros e Passagem de Argumentos por Referência

Introdução à Computação

Aula 27: Estruturas heterogêneas e alocação dinâmica

Aula 25: Alocação Dinâmica

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

3. Linguagem de Programação C

1. Revisão de Vetores, Ponteiros, Funções e Estruturas em C

Módulo 8 Tipos Estruturados

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

Computação I - C Prova /10/ Profs. Adriano Cruz e Valeria Bastos

Métodos Computacionais. Tipos Estruturados

INF 1007 Programação II

Tipos Estruturados. Tipos Estruturados

Linguagem C ponteiros

Algoritmos e Programação

Linguagem C. Ponteiros. Alex Vidigal Bastos.

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

Estruturas de Dados Aulas 3 e 4: Uso da. 14/03/2011 e 16/03/2011

Introdução à Programação

Vetores e Matrizes. Prof. Fabrício Olivetti de França Charles Henrique

Ponteiros. Baseado nos slides do Prof. Mauro.

Linguagem de Programação C. Ponteiros

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

13. ALOCAÇÃO DINÂMICA DE MEMÓRIA

Aula 26: Estruturas heterogêneas

Algoritmos e Estruturas de Dados. Prof. Marcelo Zorzan Profa. Melissa Zanatta

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

Ponteiros. um ponteiro é uma variável que contém o endereço um dado declaração: * indica que a variável é um ponteiro. Ex: tipo_dado *nome_ponteiro;

Introdução a Programação de Jogos

Estrutura de dados 1. Ponteiros

ESTRUTURA DE DADOS (TCC )

Estruturas Dinâmicas - Ponteiros

RESUMO DE CONCEITOS BÁSICOS DE C

INF 1007 Programação II

Linguagem C Princípios Básicos (parte 1)

Ponteiros e Alocação Dinâmica em C. Fonte: DCC UFMT (modificado)

PROGRAMAÇÃO DE COMPUTADORES V - TCC Modulo 5: Array. (complemento de dois) Aura - Erick

Controlo de Execução. K&R: Capitulo 3

Caracteres e Strings

Programação: Vetores

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

Fundamentos de Programação. Linguagem C++ aula II - Variáveis e constantes. Prof.: Bruno Gomes

Hello World. Linguagem C. Tipos de Dados. Palavras Reservadas. Operadores Aritméticos. Pré e pós incremento e pré e pós decremento

Linguagens de Programação I

Algoritmos e Estruturas de dados

Programação Estruturada

Linguagem C: Introdução

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

4. Estruturas Fundamentais de Programação em C

ECT1203 Linguagem de Programação

Ponteiros e alocação dinâmica de memória. Disciplina de Programação de Computadores I Universidade Federal de Ouro Preto

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

Programação científica C++

Ponteiros & tabelas (cont.) K&R: Capítulo 5

3. Linguagem de Programação C

Linguagem C. IF61A/IF71A - Computação 1 Prof. Leonelo Almeida. Universidade Tecnológica Federal do Paraná

Conceitos básicos. Computação eletrônica: Gurvan Huiban

Estruturas de Dados Aulas 3 e 4: Uso da memória e Vetores

Programação de Computadores I Introdução ao C PROFESSORA CINTIA CAETANO

1 Exercícios com ponteiros

Exercícios. Alocação Dinâmica. Alocação dinâmica de memória. Alocação de memória. Alocação da Memória Principal. Alocação da Memória Principal

Computação 2. Aula 7. Profª. Fabiany Ponteiros

Programação II. Tipos Estruturados

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

Programação 11543: Engenharia Informática 6619: Tecnologias e Sistemas de Informação. Cap. 8 Endereçamento de Memória Endereçamento de Memória

Universidade de São Paulo São Carlos Instituto de Ciências Matemáticas e de Computação. Material preparado pela profa Silvana Maria Affonso de Lara

Ponteiros. Ponteiros. Ponteiros. Ponteiros. Ponteiros. Introdução a Programação. Profa. Roseli Romero

1.Quais serão os valores de x, y e p ao final do trecho de código abaixo? int x, y, *p;y = 0; p = &y; x = *p; x = 4; (*p)++; --x; (*p) += x;

Algoritmos e Estruturas de Dados I (AEDI) Introdução - AEDI. Prof. Paulo Henrique Pisani

Apontadores/ponteiros

Computação 2. Aula 2. Profª. Fabiany Vetores e Matrizes

Introdução à Programação

Arranjos. David Déharbe

Transcrição:

Universidade de São Paulo São Carlos Instituto de Ciências Matemáticas e de Computação Estruturas em C 1 Material preparado pela profa Silvana Maria Affonso de Lara 2º semestre de 2010

ROTEIRO DA AULA Definição e Declaração de Estruturas Nomeando uma estrutura Atribuição de estruturas Composição de estruturas Estruturas como parâmetros Operações Ponteiros para estrutura Arrays de estruturas Classes de armazenamento 2

ESTRUTURAS struct são coleções de dados heterogêneos agrupados em uma mesma estrutura de dados Ex: armazenar as coordenadas (x,y) de um ponto: (x, y) 3

ESTRUTURAS Declaração: struct { int x; int y; } p1, p2; (x, y) a estrutura contém dois inteiros, x e y p1 e p2 são duas variáveis tipo struct contendo duas coordenadas cada. 4

DECLARAÇÃO Formato da declaração: struct nome_da_estrutura { tipo_1 dado_1; tipo_2 dado_2;... tipo_n dado_n; } lista_de_variaveis; A estrutura pode agrupar um número arbitrário de dados de tipos diferentes Pode-se nomear a estrutura para referenciá-la 5

NOMEANDO UMA ESTRUTURA struct { int x; int y; } p1; struct { int x; int y; } p2; Repetição struct ponto define um novo tipo de dado struct ponto { int x; int y; }; struct ponto p1, p2; Pode-se definir novas variáveis do tipo ponto 6

ESTRUTURAS acesso aos dados: struct-var.campo Ex: p1.x = 10; /*atribuição */ p2.y = 15; if (p1.x >= p2.x) && (p1.y >= p2.y)... 7

ATRIBUIÇÃO DE ESTRUTURAS Inicialização de uma estrutura: struct ponto p1 = { 220, 110 }; Atribuição entre estruturas do mesmo tipo: struct ponto p1 = { 220, 110 }; struct ponto p2; p2 = p1; /* p2.x = p1.x e p2.y = p1.y */ Os campos correspondentes das estruturas são automaticamente copiados da fonte para o destino 8

ATRIBUIÇÃO DE ESTRUTURAS Atenção para estruturas que contenham ponteiros: struct aluno { char *nome; int idade; } a1, a2; a1.nome = Alfredo ; a1.idade = 22; a2 = a1; Agora a1 e a2 apontam para o mesmo string nome: a1.nome == a2.nome == Alfredo 9

COMPOSIÇÃO DE ESTRUTURAS struct retangulo { struct ponto inicio; struct ponto fim; }; struct retangulo r = { { 10, 20 }, { 30, 40 } }; Acesso aos dados: r.inicio.x += 10; r.inicio.y -= 10; 10

ESTRUTURAS COMO RETORNO DE FUNÇÃO struct ponto cria_ponto (int x, int y) { struct ponto tmp; } tmp.x = x; tmp.y = y; return tmp; main () { struct ponto p = cria_ponto(10, 20); } 11

OPERAÇÕES operações entre membros das estruturas devem ser feitas membro a membro: /* retorna uma cópia de p1 = p1 + p2 */ struct ponto soma_pts (struct ponto p1, struct ponto p2) { p1.x += p2.x; p1.y += p2.y; return p1; /* retorna uma copia de p1 */ } 12

PONTEIROS PARA ESTRUTURAS estruturas grandes são passadas como parâmetro de forma mais eficiente através de ponteiros struct ponto *pp; struct ponto p1 = { 10, 20 }; pp = &p1; printf( Ponto P1: (%d %d)\n, (*pp).x, (*pp).y}; acesso via operador -> : printf( Ponto P1: (%d %d)\n, pp->x, pp->y}; 13

ARRAYS DE ESTRUTURAS struct ponto arp[10]; /* cria um array de 10 pontos */ arp[1].x = 5; /*atribui 5 a coordenada x do 2º ponto */ struct jogador { char *nome; int idade; }; struct jogador Brasil[11] = { Robinho, 21, Ronaldinho, 23,... }; 14

ESPAÇO ALOCADO PARA UMA ESTRUTURA struct aluno { char *nome; /* ponteiro 4 bytes */ short idade; /* 2 bytes */ char matricula[8]; /* array 8 bytes */ }; struct aluno al; al.nome = Assis ; al.idade = 21; strcpy(al.matricula, 00/0001 ); struct aluno al * Assis 21 00/0000 15

FUNÇÃO SIZEOF(TIPO) A função sizeof(tipo) retorna o tamanho em bytes ocupado em memória pelo tipo de dado passado como parâmetro Ex.: sizeof(int) => 4 bytes sizeof(char) => 1 byte sizeof(struct ponto) => 8 bytes sizeof(struct ponto *) => 4 bytes 16

CLASSES DE ARMAZENAMENTO Todas as variáveis e funções em C possuem dois atributos: tipo e classe de armazenamento As classes de armazenamento podem ser: Auto Extern Register Static 17

CLASSE AUTO Por default auto int a, b, c; quando entra num bloco, o sistema aloca memória para as variáveis automáticas no bloco, essas variáveis são definidas e consideradas locais ao bloco quando sai do bloco, o sistema não reserva mais o espaço para essas variáveis. 18

CLASSE EXTERN Método para se transmitir informações entre blocos e funções A declaração de variável extern possibilita que a variável seja considerada global 19

EXEMPLO #include <stdio.h> extern int a = 1, b = 2, c = 3; int func(void); main() { printf( %3d\n, func()); printf( %3d%3d%3d\n, a, b, c); } int func(void) { int b, c; a = b = c; a = b = c = 4; return (a + b + c); } Resultado: 12 4 2 3 20

// no arquivo p1.c #include <stdio.h> int a = 1, b = 2, c = 3; int func(void); main() { printf( %3d\n, func()); printf( %3d%3d%3d\n, a, b, c); } // no arquivo p2.c int func(void) { extern int a; /* procura em algum outro lugar */ int b, c; a = b = c; a = b = c = 4; return (a + b + c); 21 }

Classe register Indica ao compilador que as variáveis associadas devem ser armazenadas em registradores na memória de alta velocidade Basicamente, o seu uso é a tentativa de melhorar a velocidade de execução. 22

{ register int i; for (i = 0; i < LIMIT; ++i) {... } } // ao sair do bloco, o registrador será liberado register i; // equivale a register int i; 23

Classe static As declarações static possuem dois usos distintos e importantes: Permitir que uma variável local retenha seu valor anterior quando `entra num bloco novamente. Estabelece privacidade na conexão com declarações externas. 24

void f(void) { static int cont = 0; ++ cont; if (cont % 2 == 0) {... /* faz algo e imprime PAR */ else... /* faz diferente */ } A primeira vez que a função é chamada, a variável cont é inicializada com zero MAS, ao sair da função o valor de cont é preservado na memória Quando a função é chamada novamente, cont NÃO é reinicializada e o seu valor é o que possuía na ultima chamada. 25

EXERCÍCIO PRÁTICO Considere um cadastro de produtos de um estoque, com as seguintes informações para cada produto: Código de identificação do produto: representado por um valor inteiro Nome do produto: com ate 50 caracteres Quantidade disponível no estoque: representado por um número inteiro Preço de venda: representado por um valor real (a) Defina uma estrutura em C, denominada produto, que tenha Os campos apropriados para guardar as informações de um produto, conforme descrito acima. (b) Escreva uma função que receba os dados de um produto (código, nome, quantidade e preço) e retorne o endereço de um struct produto inicializado com os valores recebidos como parâmetros pela função. Essa função pode ter o seguinte protótipo: void cria (int cod, char* nome, int quant, float preco, struct produto *p); 26

SOLUÇÃO struct produto{ int cod; char nome[51]; int quant; float preco; }; struct produto Produto; void cria (int cod, char* nome, int quant, float preco, Produto *p) { p->cod = cod; strcpy(p->nome, nome); /* strcpy(destino,origem) */ p->quant = quant; p->preco = preco; } 27

SOLUÇÃO int main(void){ int codigo, quantidade; float preco; char nomep[51]; Produto *paux; Produto prod; printf("digite o cod: "); scanf("%d",&codigo); printf("\ndigite o nome: "); scanf("%s",&nomep); 28

SOLUÇÃO printf("\ndigite a quantidade: "); scanf("%d",&quantidade); printf("\ndigite o preco: "); scanf("%f",&preco); paux= cria(codigo,nomep,quantidade,preco,paux); printf("\n\na estrutura criada foi:"); printf("\ncod: %d", paux->cod); printf("\nnome: %s", paux->nome); printf("\nquant: %d", paux->quant); printf("\npreco: %6.2f", paux->preco); getch(); } 29

Universidade de São Paulo São Carlos Instituto de Ciências Matemáticas e de Computação Estruturas em C 30 Material preparado pela profa Silvana Maria Affonso de Lara 2º semestre de 2010