Você está na página 1de 38

Estrutura de Dados (Vetores)

Programação de Computadores I
Estrutura de Dados (Vetores)

Prof. Antônio Augusto Chaves

Departamento de Matemática
Bloco VI - sala 23

http://www.feg.unesp.br/˜chaves
chaves@feg.unesp.br

Aula baseada no material do Prof. Rafael Sfair (FEG/UNESP)

1 / 26
Estrutura de Dados (Vetores)
Introdução

Introdução

I Exercício:

Escreva um programa em linguagem C que lê palavras


com 4 letras e as imprime de trás para frente.

Ex.:
casa – asac
lata – atal
sapo – opas

2 / 26
Estrutura de Dados (Vetores)
Introdução

Introdução

I Solução:

int main( )
{
char L1, L2, L3, L4;
printf (“Entre com palavras de 4 letras: ”);
scanf (“%c %c %c %c”, &L1, &L2, &L3, &L4);
printf (“%c %c %c %c”, L4, L3, L2, L1);
return 0;
}

3 / 26
Estrutura de Dados (Vetores)
Introdução

Introdução

Problema!!!

Refaça o programa anterior para palavras ou frases com


20, 30, e 50 caracteres.

4 / 26
Estrutura de Dados (Vetores)
Introdução

Introdução

Problema!!!

Refaça o programa anterior para palavras ou frases com


20, 30, e 50 caracteres.

Para resolver, temos que utilizar VETORES

4 / 26
Estrutura de Dados (Vetores)
Vetores

Definição

I Um vetor é um tipo de dado utilizado para representar


uma certa quantidade de variáveis.

5 / 26
Estrutura de Dados (Vetores)
Vetores

Definição

I Um vetor é um tipo de dado utilizado para representar


uma certa quantidade de variáveis.

I Todas as variáveis são do mesmo tipo!


I Todas as variáveis são do mesmo tipo!
I Todas as variáveis são do mesmo tipo!
I Todas as variáveis são do mesmo tipo!
I Todas as variáveis são do mesmo tipo!

5 / 26
Estrutura de Dados (Vetores)
Vetores

Definição

I Para se declarar um vetor podemos utilizar a seguinte


forma geral:
tipo_da_variavel nome_da_variavel [tamanho];

na qual:
I tipo_da_variavel: é o tipo das variáveis que devem ser
criadas. Ex.: int, char, float, entre outros;
I nome_da_variavel: é o nome que será utilizado para
referenciar o conjunto de variáveis;
I tamanho: é o número de variáveis que será criado
(tamanho do vetor).

6 / 26
Estrutura de Dados (Vetores)
Vetores

Exemplos - Declaração
I int notas[10];

7 / 26
Estrutura de Dados (Vetores)
Vetores

Exemplos - Declaração
I int notas[10];
0 1 2 3 4 5 6 7 8 9
9 10 10 8 7 4 5 8 10 9

7 / 26
Estrutura de Dados (Vetores)
Vetores

Exemplos - Declaração
I int notas[10];
0 1 2 3 4 5 6 7 8 9
0 9 110 210 38 74 45 56 8 7 10 8 9 9
9 10 10 8 7 4 5 8 10 9
I char letras[20];
0 1 2 3 4 5 6 ... 19
U N E S P /0 /0 /0

7 / 26
Estrutura de Dados (Vetores)
Vetores

Exemplos - Declaração
I int notas[10];
0 1 2 3 4 5 6 7 8 9
0 9 110 210 38 74 45 56 8 7 10 8 9 9
0 1 2 3 4 5 6 7 8 9
9 10 10 8 7 4 5 8 10 9
9 10 10 8 7 4 5 8 10 9
I char letras[20];
0 1 2 3 4 5 6 ... 19
0U 1N 2E 3S 4P 5
/0 /06 ... /019
U N E S P /0 /0 /0
I float pesos[40];
0 1 2 3 4 5 6 ... 39
59.50 72.25 64.70 88.30 71.25 45.45 98.60 67.90

0 1 2 3 4 5 6 ... 99
19.90 25.00 12.10 11.99 1.25 0.99 10.00 12.50

7 / 26
Estrutura de Dados (Vetores)
Vetores

Exemplos - Declaração
I int notas[10];
0 1 2 3 4 5 6 7 8 9
0 9 110 210 38 74 45 56 8 7 10 8 9 9
0 1 2 3 4 5 6 7 8 9
9 10 10 8 7 4 5 8 10 9
90 1
10 2
10 3
8 74 45 56 87 8
10 99
I char letras[20];9 10 10 8 7 4 5 8 10 9
0 1 2 3 4 5 6 ... 19
0U 1N 2E 3S 4P 5
/0 /06 ... /019
0
U 1
N 2
E S3 P4 5
/0 6
/0 ... 19
/0
U N E S P /0 /0 /0
I float pesos[40];
0 1 2 3 4 5 6 ... 39
0
59.50 1
72.25 2
64.70 3
88.30 4
71.25 5
45.45 6
98.60 ... 39
67.90
59.50 72.25 64.70 88.30 71.25 45.45 98.60 67.90

I double preco[100];
0 1 2 3 4 5 6 ... 99
0
19.90 1
25.00 2
12.10 3
11.99 4
1.25 5
0.99 6
10.00 ... 99
12.50
19.90 25.00 12.10 11.99 1.25 0.99 10.00 12.50

7 / 26
Estrutura de Dados (Vetores)
Vetores

Exemplos - Inicialização

I int notas[10] = {9,10,10,8,7,4,5,8,10,9}

8 / 26
Estrutura de Dados (Vetores)
Vetores

Exemplos - Inicialização

I int notas[10] = {9,10,10,8,7,4,5,8,10,9}

I notas[0] = 9; notas[1] = 10; · · · notas[9] = 9;

8 / 26
Estrutura de Dados (Vetores)
Vetores

Exemplos - Inicialização

I int notas[10] = {9,10,10,8,7,4,5,8,10,9}

I notas[0] = 9; notas[1] = 10; · · · notas[9] = 9;

I char letras[20] = “UNESP”

8 / 26
Estrutura de Dados (Vetores)
Vetores

Exemplos - Inicialização

I int notas[10] = {9,10,10,8,7,4,5,8,10,9}

I notas[0] = 9; notas[1] = 10; · · · notas[9] = 9;

I char letras[20] = “UNESP”

I scanf (“%c”, &letras[6]);

8 / 26
Estrutura de Dados (Vetores)
Vetores

Exemplos - Inicialização

I int notas[10] = {9,10,10,8,7,4,5,8,10,9}

I notas[0] = 9; notas[1] = 10; · · · notas[9] = 9;

I char letras[20] = “UNESP”

I scanf (“%c”, &letras[6]);

I for (i = 0; i < n; i++)


pesos[ i ] = 1.0;

8 / 26
Estrutura de Dados (Vetores)
Vetores

Exemplos - Inicialização

I int notas[10] = {9,10,10,8,7,4,5,8,10,9}

I notas[0] = 9; notas[1] = 10; · · · notas[9] = 9;

I char letras[20] = “UNESP”

I scanf (“%c”, &letras[6]);

I for (i = 0; i < n; i++)


pesos[ i ] = 1.0;

I preco[5+2] = preco[5] ∗ preco[2];

8 / 26
Estrutura de Dados (Vetores)
Vetores

Alocação de memória

I Quando o C vê uma declaração de vetor ele reserva um


espaço na memória suficientemente grande para
armazenar o número de células especificadas.

I Por exemplo, se declararmos:


float exemplo [20];
será reservado 4 ∗ 20 = 80 bytes. Estes bytes são
reservados de maneira contígua.

9 / 26
Estrutura de Dados (Vetores)
Vetores

Como acessar um vetor?

I Para acessar o vetor declarado anteriormente vamos


escrever:
exemplo[0]
exemplo[1]
..
.
exemplo[19]

10 / 26
Estrutura de Dados (Vetores)
Vetores

Como acessar um vetor?

I Para acessar o vetor declarado anteriormente vamos


escrever:
exemplo[0]
exemplo[1]
..
.
exemplo[19]

I Mas ninguém o impede de escrever:


exemplo[30]
exemplo[103]

10 / 26
Estrutura de Dados (Vetores)
Vetores

Por quê?

I Porque o C não verifica se o índice que você usou está


dentro dos limites válidos. Este é um cuidado que você
deve tomar. Se o programador não tiver atenção com os
limites de validade para os índices ele corre o risco de ter
variáveis sobrescritas ou de ver o computador travar.

Bugs terríveis podem surgir.

11 / 26
Estrutura de Dados (Vetores)
Vetores

IMPORTANTE!!!

O primeiro elemento de um vetor é o de índice 0 (zero).

O primeiro elemento de um vetor é o de índice 0 (zero).

O primeiro elemento de um vetor é o de índice 0 (zero).

O primeiro elemento de um vetor é o de índice 0 (zero).

O primeiro elemento de um vetor é o de índice 0 (zero).

12 / 26
Estrutura de Dados (Vetores)
Vetores

IMPORTANTE!!!

I Num vetor de 100 elementos o último elemento é o de


índice 99.

I Acessar uma posição inválida de um vetor pode fazer seu


programa “Abortar”.

I Atenção: o elemento entre colchetes [ ] (quando


declarando um vetor) deve ser um valor constante, já que
vetores são blocos de memória estática de um
determinado tamanho.

13 / 26
Estrutura de Dados (Vetores)
Vetores

Definindo constantes

I Há duas formas de definir uma constante em C:

I #define nomeConstante valorConstante


Exemplo: #define tam 50

ou
I const int tam = 50;

14 / 26
Estrutura de Dados (Vetores)
Exercícios Resolvidos

Exercício 1

I Escreva um programa em linguagem C que lê palavras


com 10 letras e as imprime de trás para frente. Utilize
vetores e laços.

15 / 26
Estrutura de Dados (Vetores)
scanf (“%c %c %c %c”, &L1, &L2, &L3, &L4);
Exercícios Resolvidos printf (“%c %c %c %c”, L4, L3, L2, L1);
return 0;
}
Solução
#define TAM 10
int main( )
{
char letras[TAM];
int i;
printf (“Entre com a frase: ”);
for (i = 0; i < TAM; i++)
scanf (“%c”, &letras[i]);
for (i = TAM – 1; i >= 0; i-- )
printf(“%c”, letras[i]);
return 0;
}

16 / 26
Estrutura de Dados (Vetores)
Exercícios Resolvidos

Exercício 2

I Escreva um programa em linguagem C que lê as


matriculas e as notas de no máximo 100 alunos. O
programa deve ler e armazenar uma nova matrícula e uma
nova nota até que o usuário digite uma matrícula negativa.

17 / 26
Estrutura de Dados (Vetores)
Exercícios Resolvidos

Solução
#define TAM 100
int main( )
{
float notas[TAM];
int mat[TAM], aux, indice = 0, total;
printf(“Entre com a Matricula (ou negativo para sair): ”);
scanf(“%d”, &aux);
while (aux > 0)
{
mat[indice] = aux;
printf (“Entre com a nota: ”);
scanf (“%f ”, &notas[indice]);
printf (“Entre com a Matricula (ou negativo para sair): ”);
scanf (“%d”, &aux);
indice++;
}
return 0;
}
18 / 26
Estrutura de Dados (Vetores)
Exercícios Resolvidos

Exercício 3

I Utilizando o código do programa anterior, escreva um novo


programa que permite ao usuário consultar a nota de um
aluno digitando a sua matrícula, o programa deve executar
até que o usuário digite uma matrícula negativa.

Obs.: O trecho de código que lê as matrículas e as notas é


o mesmo do programa anterior.

19 / 26
indice++;
Estrutura de Dados (Vetores)
}
Exercícios Resolvidos
return 0;
}

Solução
total = indice;
printf (“Entre com a Matricula (ou negativo para sair): ”);
scanf (“%d”, &aux);
while ( aux > 0)
{
for (indice = 0; indice < total; indice++ )
if ( mat[indice] == aux)
break;
if ( indice < total)
printf (“A nota eh: %.2f \n”, notas[indice]);
else
printf (“Matricula nao encontrada\n”);
printf (“Entre com a Matricula (ou negativo para sair): ”);
scanf (“%d”, &aux);
}

20 / 26
Estrutura de Dados (Vetores)
Exercícios

Exercício 1

I Escreva um programa que conta as ocorrências de vogais,


consoantes e espaços em branco da cadeia de caracteres
correspondente ao seu nome completo (sem acentuação).

21 / 26
Estrutura de Dados (Vetores)
Exercícios

Exercício 2

I Crie um programa que armazene os 20 primeiros termos


da Seqüência de Fibonacci em um vetor e imprima esses
números na tela.

22 / 26
Estrutura de Dados (Vetores)
Exercícios

Exercício 3

I Elabore um programa para ler as notas dos 40 alunos da


turma, calcule a média da turma, e calcule também
quantos alunos tiveram notas abaixo da média, e quantos
tiveram notas acima da média.

23 / 26
Estrutura de Dados (Vetores)
Exercícios

Exercício 4

I Faça um programa que dado o vetor [2; 4; 35; 50; 23; 17;
9; 12; 27; 5] retorne:
a) maior valor
b) média dos valores
c) os valores dispostos em ordem crescente

24 / 26
Estrutura de Dados (Vetores)
Exercícios

Exercício 5

I Fazer um programa para:


a) receber 3 notas parciais do aluno em um vetor e a nota do
exame em uma variável separada (-1 se o aluno não fez
exame).
b) executar as seguintes operações:
i. Imprimir vetor de notas parciais e nota do exame
ii. Retornar 0 se o aluno está reprovado direto, 1 se o aluno
está reprovado em exame, 2 se o aluno está aprovado em
exame e 3 se ele está aprovado direto (considere a média
7.0).

25 / 26
Estrutura de Dados (Vetores)
Referências Bibliográficas

Referências Bibliográficas

Carboni, I.F. Lógica de programação. São Paulo: Pioneira Thomson


Learning, 2003.

Souza, M.A.F. e outros. Algoritmos e lógica de programação. São Paulo:


Pioneira Thomson Learning, 2005.

Damas, L. Linguagem C - 10a ed. Rio de Janeiro: LTC, 2007.

Mizrahi, V.V. Treinamento em linguagem C - módulos I e II. São Paulo:


McGraw-Hill, 1990.

Senne, E.L.F. Primeiro curso de programação em C - 3a ed. Florianópolis:


Visual Books, 2009.

26 / 26