INF 1005 – Programação I  
Aula 10 – Vetores  
Edirlei Soares de Lima  
<elima@inf.puc-rio.br>  
Introdução  
•
•
•
Até agora nós temos usado variáveis simples para armazenar  
valores usados por nossos programas.  
Em várias situações, precisamos armazenar um conjunto de  
valores.  
A partir de agora vamos aprender a usar um mecanismo que  
nos permite armazenar um conjunto de valores na memória  
do computador.  
–
Posteriormente, estes valores podem ser livremente processados de  
forma eficiente, pois já estariam na memória do computador.  
Vetores  
•
•
•
Podemos armazenar um conjunto de valores na memória do  
computador através do uso de vetores (arrays)  
O vetor é a forma mais simples de organizarmos dados na  
memória do computador.  
Com vetores, os valores são armazenados na memória do  
computador em sequência, um após o outro, e podemos  
livremente acessar qualquer valor do conjunto.  
Vetores  
•
•
Ao declarar um vetor (conceito análogo ao de declaração de  
uma variável simples) é necessário informar dimensão do  
vetor.  
–
O tamanho define o número máximo de elementos que poderá ser  
armazenado no espaço de memória que é reservado para o vetor.  
Também é necessário informar o tipo dos valores que serão  
armazenados no vetor (por exemplo, int, float ou double).  
–
Em um vetor, só podemos armazenar valores de um mesmo tipo.  
Declaração e Inicialização  
•
•
Declaração de um vetor:  
int meu_vetor[10];  
–
Reserva um espaço de memória para armazenar 10 valores inteiros no  
vetor chamado meu_vetor.  
Inicialização de algumas posições do vetor meu_vetor:  
meu_vetor[0] = 5;  
meu_vetor[1] = 11;  
meu_vetor[4] = 0;  
meu_vetor[9] = 3;  
Declaração e Inicialização  
•
É possível acessar os valores do vetor através de seu  
índice.  
int meuvetor[5];  
0
1
2
3
4
5
?
?
?
8?  
?1  
meuvetor[0] = 5;  
meuvetor[3] = 8;  
meuvetor[4] = 1;  
Declaração e Inicialização  
•
•
Exemplos de Declaração:  
int a, b[20];  
float c[10];  
double d[30], e, f[5];  
Declaração e Inicialização:  
int teste[5] = {12, 5, 34, 32, 9};  
float vetor1[3] = {2.5, 5.8, 10.1};  
Exemplo 1: Imprimindo os Valores  
Armazenados em um Vetor  
#
include <stdio.h>  
int main(void)  
{
int i;  
float v[6] = {2.3, 5.4, 1.0, 7.6, 8.8, 3.9};  
for (i=0; i<6; i++)  
{
printf("%f", v[i]);  
}
return 0;  
}
Exemplo 2: Somatório dos Valores  
Armazenados em um Vetor  
#
include <stdio.h>  
int main(void)  
{
int i;  
float v[6] = {2.3, 5.4, 1.0, 7.6, 8.8, 3.9};  
float s = 0.0;  
for (i=0; i<6; i++)  
{
s = s + v[i];  
}
printf("%f", s);  
return 0;  
}
Exemplo 3: Encontrar o Maior Valor  
#
include <stdio.h>  
int main(void)  
{
int i;  
float v[6] = {2.3, 5.4, 1.0, 7.6, 8.8, 3.9};  
float maior_valor = v[0];  
for (i=0; i<6; i++)  
{
if(v[i] > maior_valor)  
maior_valor = v[i];  
}
printf("%f", maior_valor);  
return 0;  
}
Exemplo 4: Calculo da Média  
•
Dada uma turma com n alunos (onde n é conhecido  
a priori), crie um programa para obter a notas dos  
alunos e calcula a média da turma.  
#
#
include <stdio.h>  
define NUM_ALUNOS 6  
Solução 1: com leitura  
dos dado via teclado.  
int main (void)  
{
float notas[NUM_ALUNOS];  
float media, soma = 0.0;  
int i;  
/
* leitura dos dados via teclado para o vetor */  
for(i=0; i<NUM_ALUNOS; i++)  
{
printf("Entre com a nota do aluno %d: ", i+1);  
scanf("%f", &notas[i]);  
}
/
* soma das medias dos alunos */  
for(i=0;i<NUM_ALUNOS;i++)  
soma = soma + notas[i];  
media = soma/NUM_ALUNOS;  
printf("Media da turma = %.2f\n.", media);  
return 0;  
}
#
#
include <stdio.h>  
define NUM_ALUNOS 6  
Solução 2: com leitura  
dos dado via arquivo.  
int main (void)  
{
float notas[NUM_ALUNOS];  
float media, soma = 0.0;  
FILE* arq_entrada;  
int i;  
arq_entrada = fopen(“notas.txt”, “r”);  
if (arq_entrada == NULL)  
{
printf(“Erro no arquivo de entrada.”);  
return 0;  
}
/
* leitura dos dados – arquivo */  
for(i=0;i<NUM_ALUNOS;i++)  
{
fscanf(arq_entrada, "%f", &notas[i]);  
}
fclose(arq_entrada);  
(continuação)  
/
* soma das medias dos alunos */  
for(i=0;i<NUM_ALUNOS;i++)  
{
soma = soma + notas[i];  
}
media = soma/NUM_ALUNOS;  
printf("Media da turma = %.2f\n.", media);  
return 0;  
}
Exercícios  
Lista de Exercícios 08 - Vetores  
http://www.inf.puc-rio.br/~elima/prog1/  
Vetores Passados para Funções  
•
Além de passarmos variáveis simples como parâmetros,  
podemos passar vetores também:  
–
–
–
–
Quando passamos um vetor como parâmetro, a função chamada  
recebe uma referência para o vetor.  
Quando a função chamada acessa os elementos do vetor, ela acessa as  
mesmas posições de memória que a função que declarou vetor.  
Se atribuirmos um valor a um elemento do vetor passado como  
parâmetro, este elemento também é alterado no vetor original.  
Portanto, podemos declarar um vetor numa função e chamar uma  
outra função auxiliar para acessar e/ou modificar seus elementos.  
Vetores Passados para Funções:  
Voltando ao Exemplo Anterior  
•
•
Com o uso de funções auxiliares podemos reescrever  
o exemplo do calculo da média de uma forma mais  
organizada.  
Podemos dividir o programa em funções:  
–
–
Uma função para ler os valores e armazená-los em um vetor  
Uma função para calcular a média  
#
#
include<stdio.h>  
define NUM_ALUNOS 6  
void ler_dados(float vet[], int num)  
{
int i;  
for(i=0;i<num;i++)  
{
printf("Entre com o valor %d: ", i+1);  
scanf("%f", &vet[i]);  
}
}
float calcula_media(float vet[], int num)  
{
float soma = 0.0;  
int i;  
for(i=0;i<num;i++)  
soma = soma + vet[i];  
return soma/num;  
}
(continuação)  
int main (void)  
{
float notas[NUM_ALUNOS];  
ler_dados(notas, NUM_ALUNOS);  
printf("Media = %.2f\n.", calcula_media(notas, NUM_ALUNOS));  
return 0;  
}
Exercícios  
Lista de Exercícios 09 – Vetores e Funções  
http://www.inf.puc-rio.br/~elima/prog1/  
Busca em Vetores  
•
Problema: Implemente uma função que busca por  
um inteiro em um vetor de inteiros.  
int busca(int n, int vet[], int elem)  
{
int i;  
for(i = 0 ; i < n ; i++)  
{
if(vet[i] == elem)  
{
Retorna o índice da primeira  
ocorrência do elemento procurado!  
return i;  
}
}
return -1;  
}
E se quiséssemos retornar a última ocorrência?  
Busca em Vetores  
•
Problema: Implemente uma função que busca por  
um inteiro em um vetor de inteiros.  
int busca(int n, int vet[], int elem)  
{
int i, id_elem = -1;  
for(i = 0 ; i < n ; i++)  
{
if(vet[i] == elem)  
{
id_elem = i;  
Percorre o vetor até o final procurando o  
elemento desejado. Se achar, guarda  
seu índice, se não a variável id_elem já  
está com o valor -1 de retorno.  
}
}
return id_elem;  
}
Busca em Vetores  
•
Podemos modificar o algoritmo anterior para que ele volte a  
retornar o índice da primeira ocorrência do elemento desejado:  
int busca(int n, int vet[], int elem)  
{
int i, id_elem = -1;  
for(i = 0 ; i < n ; i++)  
{
if(vet[i] == elem)  
{
id_elem = i;  
break;  
Este comando é usado para interromper o  
laço (for, while ou do-while) em que ele  
for chamado. O programa continua  
}
}
return id_elem;  
a execução no comando seguinte ao laço.  
}
Busca em Vetores  
•
Problema 2: Criar uma função para encontrar o valor  
máximo em um vetor.  
float maximo(int n, float v[])  
{
int i;  
float vmax = v[0];  
for (i = 1; i < n ; i++)  
{
if (v[i] > vmax)  
{
vmax = v[i];  
}
}
return vmax;  
}
Busca em Vetores  
•
Problema 3: Criar uma função para encontrar o valor  
mínimo em um vetor.  
float minimo(int n, float v[])  
{
int i;  
float vmin = v[0];  
for (i = 1; i < n ; i++)  
{
if (v[i] < vmin)  
{
vmin = v[i];  
}
}
return vmin;  
}
Busca em Vetores  
•
Problema 4: Criar uma função para encontrar  
o índice e o valor máximo em um vetor?  
#
#
include <stdio.h>  
define CAPACIDADE_VETOR 10  
void maximo (int n, float v[], float *vmax, int *imax)  
{
int i ;  
float maior_valor = v[0];  
int ind_maiorvalor = 0;  
for(i = 1; i < n ; i++)  
{
if (v[i] > maior_valor)  
{
maior_valor = v[i];  
ind_maiorvalor = i;  
}
}
*
*
vmax = maior_valor;  
imax = ind_maiorvalor;  
}
(continuação)  
void leitura_dados (int n, float v[])  
{
int i;  
for(i=0;i<n;i++)  
{
printf(“Digite o valor para armazenar no vetor: ");  
scanf("%f", &v[i]);  
}
}
int main(void)  
{
int vetor[CAPACIDADE_VETOR];  
float maior;  
int indice;  
leitura_dados(CAPACIDADE_VETOR, vetor);  
maximo(CAPACIDADE_VETOR, vetor, &maior, &indice);  
printf(“Maior valor %f na posicao %d.\n", maior, indice);  
return 0;  
}
Exercícios  
Lista de Exercícios 10 – Busca em Vetores  
http://www.inf.puc-rio.br/~elima/prog1/