Estrutura de
Dados
Revisão
Professor Luiz José Hoffmann Filho
[email protected]
Revisão :
Struct/Registros
Struct/Registros
• Armazenar um conjunto heterogêneo de
informação;
• Exemplo:
o Informações de uma passagem de avião,
onde temos: número da passagem
(inteiro), nome do passagem (char),
destino e origem (char), data (char),
horário (char), poltrona (char), valor
(float).
o Como armazenar isto?
Struct/Registros
• Em uma Struct/Registro!!!
o É um conjunto composto de variáveis
heterogênea sob um nome;
o É definido pelo usuário;
o Pois estas informações são subdivisões de
um registro (elementos do conjunto),
chamados de campos;
Struct/Registros
struct <nome_estrutura> {
<tipo_1> <nome_1>;
<tipo_2> <nome_2>;
...
<tipo_n> <nome_n>;
} <nome da variável>;
Declaração:
struct <nome strutura> <nome da variável>
Struct/Registros
• Exemplos 1:
struct addr {
char nome[30];
char endereco[40];
char cidade[20];
char estado[3];
int cep;
};
struct addr endereco_info;
Struct/Registros
• Exemplos 1:
struct addr {
char nome[30];
char endereco[40];
char cidade[20];
char estado[3];
int cep;
} endereco_info;
Struct/Registros
• Usando um vetor de struct:
o struct addr agenda[50];
• Referênciando elementos da estrutura:
o strcpy(agenda[3].nome, “jose Silva”);
o gets(agenda[3].endereco);
o scanf(“%d”, &agenda[3].cep);
o Agenda[3].cep = 81010140
Struct/Registros
struct tipo_agenda {
char nome[50];
char fone[20]; };
int main(int argc, char** argv) {
struct tipo_agenda agenda;
printf("Digite o nome : \n");
scanf("%s",&agenda.nome);
printf("Digite o fone : \n");
scanf("%s", &agenda.fone);
printf("Nome %s e fone %s\n", agenda.nome, agenda.fone);
return 0;
}
Struct/Registros
struct tipo_agenda {
char nome[50];
char fone[20];
};
int main(int argc, char** argv) {
int i;
struct tipo_agenda agenda[5];
for(i=0;i<5;i++) {
printf("Digite o nome : \n");
scanf("%s",&agenda[i].nome);
printf("Digite o fone : \n");
scanf("%s", &agenda[i].fone);
}
for(i=0;i<5;i++) {
printf("Nome %s e fone %s\n", agenda[i].nome, agenda[i].fone);
}
return 0;
}
Revisão :
Ponteiros
Ponteiros
• O que são ponteiros?
o Um ponteiro é uma variável que contém um
endereço de memória. Esse endereço é
normalmente a posição de uma outra variável
na memória. Se uma variável contém o
endereço de uma outra, então a primeira
variável é dita para apontar para a segunda.
Ponteiros
Endereço
na memória
Variável na
memória
1000
1003
1001
1002
1003
1004
1005
JOSE
Ponteiros
• Declaração:
o <tipo> *<nome da variável>;
• Exemplo:
o int *valor;
o char *nome;
Ponteiros
• Os operadores de Ponteiros:
o & - é um operador unário que devolve o endereço na memória do seu
operando.
o Exemplo:
• m = &count;
o * - é o complemento de &. É um operador unário que devolve o valor da
variável localizada no endereço que o segue.
o Exemplo:
• q = *m;
•
Ponteiros
Atribuição de ponteiros:
#include <stdio.h>
int main() {
int x;
int *p1, *p2;
x = 1000;
p1 = &x;
p2 = p1;
printf("%p \n", p2); /*escreve o endereço de x, não seu
valor*/
printf("%d \n", *p2); /* escreve o valor de x */
return 0;
}
Ponteiros
• Aritmética de ponteiros:
o
o
o
o
o
int *p1;
p1 = &x; /* supondo que a posição de x é igual a 2000 */
p1++; /* incrementando em uma posição, agora vale 2001*/
p1--; /* decrementando em uma posição, agora vale 2000*/
P1 = p1 +10; /* Soma de posições, agora vale 2010*/
• Comparação de ponteiros:
o If (p<q)
o
printf(“p aponta para uma memória mais baixa que q”);
o If (p == q)
o
printf(“p aponta para a memória mesma que q”);
Ponteiros
•
Ponteiros e Matrizes:
char str[80], *p1;
p1 = str;
o p1 foi inicializado com o endereço de primeiro elemento da matriz str.
o Para acessar o quinto elemento de str:
str[4];
*(p1+4);
•
Vetor/Matriz de Ponteiros:
int *x[10];
x[2] = &var;
o Atribuir o endereço a variável var a uma posição do vetor
*x[2];
o Valor de var.
Ponteiros
• Indireção mútipla:
int main() {
int x, *p, **q;
x = 10;
p = &x;
q = &p;
printf(“%d”, **q);
return 0;
}
• Inicialização de ponteiros:
o int *p = NULL;
o char *p = “alo mundo”;
Ponteiros
• Alocação dinâmica: stdlib.h
o Malloc = aloca memória
int *p;
If (!(p=malloc(50*sizeof(int)) {
Printf(“sem memória.\n”);
Return 0;
}
o Free = desaloca memória
free(p);
Ponteiros
int main() {
char *s;
int t;
s = malloc(80);
if (!s)
return 0;
gets(s);
for ( t = strlen(s) - 1; t >= 0; t--)
putchar(s[t]);
free(s);
return 0;
}
Revisão :
Funções
Funções
• Funções são blocos de construção e o local onde
toda a atividade do programa ocorre.
<tipo> <nome da função> (<lista de parâmetros>)
{
< Corpo da função>
}
(<lista de parâmetros>) =
(<tipo1> <nome do parâmetro 1>, <tipo2> <nome do
parâmetro 2>, …, <tipo n> <nome do parâmetro n>)
Funções
• Argumentos de funções:
o Elas se comportam como quaisquer outras variáveis locais dentro da
função e são criadas na entrada e destruídas na saída.
o Chamada por valor : Esse método copia o valor de um argumento no
parâmetro formal da sub-rotina. Assim as alterações feitas nos
parâmetros da sub-rotina não têm nenhum efeito nas variáveis usadas
para chamá-la;
o Chamada por referência: Nesse métodos, o endereço de um argumento
é copiado no parâmetro. Dentro da sub-rotina, o endereço é usado para
acessar o argumento real utilizado na chamada. Isso significa que
alterações feitas no parâmetro afetam a variável usada para chamar a
rotina.
Funções
• Exemplo Chamada por valor:
#include <stdio.h>
int sqr(int x);
int main() {
int t = 10;
printf(“%d %d”, sqr(t), t);
}
int sqr(int x) {
x = x * x;
return x;
}
Funções
• Exemplo Chamada por referência:
#include <stdio.h>
void swap(int *x, int *y) {
int temp;
temp = *x;
*x = *y;
*y = temp; }
int main(){
int I, j;
I = 10; j = 20;
swap(&I, &j);
return 0;
}
Funções
• Argc e argc – Argumentos para main()
int main( int argc, char *argv){
if( argc != 2) {
printf(“Você esqueceu de digitar seu nome.\n”);
return 0;
}
printf(“Ola %s”, argv[1]);
return 1;
}
• Comando return
o Retornando de uma função
o Retornando Valores
Funções
• Protótipos de funções:
void sqrt_it(int *i);
int main() {
int x;
x = 10;
sqrt_it(x);
}
void sqrt_it(int *i) {
*i = *i * *I;
}
Bibliografia
• Schildt, Herbet. C Completo e Total, 3ª ed. São
Paulo. Markron Books, 1996.
Download

PPT - Professor Luiz