Vous êtes sur la page 1sur 27

Universidade Estadual de Feira de Santana

Departamento de Ciências Exatas
Engenharia de Computação

EXA801 – Algoritmos e Programação 1
EXA801 Algoritmos e Programação 1
Prof. Matheus Giovanni Pires

Aula 5‐Vetores
Aula 5 Vetores e Matrizes
e Matrizes

Esta aula foi baseada em material cedido gentilmente pelas professoras 
Ana Lúcia Lima Marreiros Maia e Fabiana Cristina Bertoni
Motivação
• Se o usuário precisa digitar uma sequência de 
números e depois mostrar esta sequência em ordem 
inversa. Como fazer?
• Para uma sequência de quatro números, poderíamos 
utilizar quatro variáveis.
q
– Exemplo: numero1, numero2, numero3, numero4
• EE para uma sequência de 100 números? Como 
para uma sequência de 100 números? Como
faríamos?
• Como armazenar vários valores em uma única 
Como armazenar vários valores em uma única
estrutura de armazenamento?

2
Estruturas homogêneas
Estruturas homogêneas
• Estruturas homogêneas unidimensionais
– VETORES
• Estruturas homogêneas multidimensionais
g
– MATRIZES

3
Vetores
• Armazenam vários elementos do mesmo tipo 
primitivo;
• Vários valores em posições diferentes, com ordem 
p ç
específica entre si;
• Elementos podem ser repetidos ou não;
Elementos podem ser repetidos ou não;
• Podemos encontrar esse tópico na literatura com as 
seguintes nomenclaturas:
seguintes nomenclaturas: 
– Vetor, Array, Matriz unidimensional ou Arranjo.

4
Ilustração de um vetor
Ilustração de um vetor
• Exemplo de um vetor capaz de armazenar 7 números 
inteiros, chamado numeros.
0 1 2 3 4 5 6

– Todas as posições pertencem ao vetor numeros, e cada 
p ç p ,
uma dessas posições é capaz de armazenar um número 
inteiro;
– O acesso a cada um dos valores armazenados em numeros
é feito por um índice que cada posição possui.
– Na linguagem C, esses índices iniciam‐se no valor zero, ou 
seja, o índice da primeira posição de numeros é o zero e o 
índice da última posição de numeros é o 6.
índice da última posição de numeros éo6
5
Declaração de um vetor
Declaração de um vetor
• Forma Geral:
tipo nome[tamanho];
• onde:
– tipo: qualquer tipo da linguagem C
– nome: nome do vetor
nome: nome do vetor
– tamanho: define quantos elementos o vetor é capaz de  
armazenar. Deve ser um valor constante.
armazenar. Deve ser um valor constante.
• Exemplos:
i t numeros[7];
int [7]
char respostas[5];
float notas[100];
6
Declaração de um vetor
Declaração de um vetor
• Declaração não dimensionada:
– Caso o tamanho não seja especificado, o vetor já deve ser 
inicializado. Exemplo:
int vet1[] = {1,5,8,3};
• O compilador alocará o espaço suficiente para 
armazenar o conteúdo atribuído, ou seja, o vetor 
terá tamanho = 4.
• As duas notações a seguir são equivalentes:
int vet1[4]
[ ] = {
{1,
, 2,
, 3,
, 4};
};
int vet1[] = {1, 2, 3, 4};

7
Acesso aos elementos de um vetor
Acesso aos elementos de um vetor
• Para ter acesso a cada elemento do vetor, é 
necessário especificar o nome do vetor seguido do 
índice da posição desejada. Exemplos:
• Armazenando o valor 15 na 4ª posição do vetor 
numeros:
numeros[3] = 15;
• Lendo
Lendo um número inteiro do teclado e 
um número inteiro do teclado e
armazenando‐o na 1ª posição do vetor numeros:
scanf("%d",
scanf( %d , &numeros[0]);

8
Acesso aos elementos de um vetor
Acesso aos elementos de um vetor
• Imprimindo o 6º elemento do vetor numeros:
printf("%d",numeros[5]);
• Imprimindo um elemento com a posição especificada 
p p ç p
por uma variável:
p
printf("%d",numeros[x]);
,
• Imprimindo um elemento com a posição especificada 
pelo resultado de uma expressão:
pelo resultado de uma expressão:
printf("%d",numeros[x+2]);

9
Acesso aos elementos de um vetor
Acesso aos elementos de um vetor
• ATENÇÃO – IMPORTANTE 
– Sendo numeros um vetor de números inteiros NÃO é 
possível fazer:
scanf("%d",&numeros);
printf("%d",numeros);

10
Vetores: exemplo 1
Vetores: exemplo 1
• Programa que lê 10 valores inteiros e armazena‐os 
em um vetor, em seguida, os valores lidos são 
exibidos na tela.
#include <stdio.h>
const int MAX = 10;
void main() {
int lista[MAX];
int i; //índice do vetor, sempre inteiro

for(i = 0; i < MAX; i++){


printf("\nDigite o %d elemento do vetor: ", i + 1);
scanf("%d",&lista[i]);
}
printf ("\nValores lidos:\n");
for(i = 0; i < MAX; i++)
printf("%d\n" lista[i]);
printf("%d\n",
}
11
Vetores: exemplo 2
Vetores: exemplo 2
• Programa que lê 7 valores inteiros e armazena‐os em 
um vetor, em seguida, imprime os valores lidos em 
ordem inversa à leitura.
#include <stdio.h>
const int MAX = 7;
void main() {
int vetor[MAX], i;

for(i=0; i < MAX; i++) {


printf("\nDigite o elemento %d: ", i + 1);
scanf("%d", &vetor[i]);
}

for(i=MAX-1; i>=0; i--)


printf("\nElemento %d: %d", i+1, vetor[i]);

}
12
Vetores: considerações
Vetores: considerações
• Tamanho do vetor é fixo (alocação estática), ou seja, 
não é possível alterar.
• É preciso saber a quantidade máxima de elementos 
p q
que se deseja armazenar.
• Pode
Pode‐se
se criar uma variável numérica para armazenar 
criar uma variável numérica para armazenar
quantas posições estão sendo usadas de fato.

13
Vetores: considerações
Vetores: considerações
• Nenhuma restrição é feita quanto a quantidade de 
valores inseridos. 
– Se o usuário ultrapassar o limite, o programa tentará ler  
os valores normalmente, mas  os escreverá em uma parte 
não alocada de memória. Isto pode resultar nos mais 
variados erros de execução:
variados erros de execução: 
• Acessar local inválido da memória.
• Erro (operação ilegal, segmentation
Erro (operação ilegal, segmentation fault)
fault) pode levar o programa a 
pode levar o programa a
ser "finalizado" pelo sistema operacional.

14
Matrizes
• Armazenam vários elementos do mesmo tipo 
primitivo.
• Matrizes têm mais de um índice de referência.
• Matriz bidimensional é uma representação tabular 
(retangular, em linhas e colunas) de um conjunto de
(retangular, em linhas e colunas) de um conjunto de 
dados do mesmo tipo.

15
Ilustração de uma matriz
Ilustração de uma matriz
• Matriz notas contendo notas de 3 avaliações de 5 
alunos. 
– A linhas representam os alunos e as colunas representam 
as notas.
0 1 2
0 8.9 7.4 5.7
1 69
6.9 27
2.7 40
4.0
2 9.5 9.4 8.6
3 49
4.9 89
8.9 63
6.3
4 7.2 9.9 7.7

16
Declaração de uma matriz
Declaração de uma matriz
• Forma Geral:
tipo nome[dim1][dim2]...[dimN];
• onde:
– tipo: qualquer tipo possível na linguagem C.
– nome: nome da matriz.
– [dim1][dim2]...[dimN]: cada tamanho inteiro entre      
colchetes define o tamanho da respectiva dimensão 
desejada.
• A matriz notas é declarada da seguinte forma:
g
float notas[5][3];

17
Declaração de uma matriz
Declaração de uma matriz
• Declaração não dimensionada:
– Podem ter apenas seu primeiro índice não especificado, os 
outros devem ser indicados para que o compilador possa 
i d
indexar de forma correta. 
d f
int mat1[][2]= {1,5,8,3};
• O compilador alocará o espaço suficiente para 
armazenar o conteúdo atribuído, ou seja, irá 
inserindo os elementos, considerando 2 colunas e 
quantas linhas forem necessárias. 

18
Acesso aos elementos de uma matriz
Acesso aos elementos de uma matriz
• Para ter acesso a cada elemento da matriz, é 
necessário especificar o nome da matriz seguido do 
índice da linha e da coluna entre colchetes.
• Armazenando o valor 9.4 na 3ª linha e 2ª coluna da 
matriz notas:
notas[2][1] = 9.4;
• Lendo
Lendo um número real do teclado e armazenando
um número real do teclado e armazenando‐o

na 1ª linha e 2ª coluna da matriz  notas:
printf( Digite um número");
printf("Digite número );
scanf("%f", &notas[0][1]);

19
Matrizes: exemplo 1
Matrizes: exemplo 1
• Programa que lê 3 notas de 5 alunos e as armazena 
em uma matriz de ordem 5 X 3 de números reais, e 
em seguida imprime os valores lidos.

20
Matrizes: exemplo 1
Matrizes: exemplo 1
#include <stdio.h>
#define ALUNO 5 // ou const int ALUNO = 5;
#d fi
#define NOTAS 3 // ou constt int
i t NOTAS = 3;
3
void main() {
float notas[ALUNO][NOTAS];
int i,
, j
j; // índices q
que representam
p linhas e colunas

for(i = 0; i < ALUNO; i++){


for(j = 0; j < NOTAS; j++) {
printf("\nDigite
i tf("\ Di it a %da
%d notat d
do aluno
l %d
%d: "
", j+1
j+1, i+1)
i+1);
scanf("%f", &notas[i][j]);
}
}
printf("\nValores lidos:\n\n");
for(i = 0; i < ALUNO; i++) {
for(j = 0; j < NOTAS; j++)
printf ("%5.1f",
("%5 1f" notas[i][j]);

printf("\n");
}
}
21
Matrizes: exemplo 2
Matrizes: exemplo 2
• Programa que lê duas matrizes inteiras 3 X 4 e 
obtenha uma terceira matriz, a qual é resultado da 
soma das duas anteriores. Imprime a matriz 
resultante.

22
Matrizes: exemplo 2
Matrizes: exemplo 2
#include <stdio.h>
#define LINHAS 3 // ou const int LINHAS = 3;
#define COLUNAS 4 // ou const int COLUNAS = 4;
void main() {
int A[LINHAS][COLUNAS], B[LINHAS][COLUNAS], C[LINHAS][COLUNAS], i, j;
for(i = 0; i < LINHAS; i++)
for(j = 0; j < COLUNAS; j++) {
printf("\nDigite o elemento %d %d da matriz A: ", i+1, j+1);
scanf("%d", &A[i][j]);
}

for(i = 0; i < LINHAS; i++)


for(j = 0; j < COLUNAS; j++) {
printf("\nDigite o elemento %d %d da matriz B: ", i+1, j+1);
scanf("%d", &B[i][j]);
}

printf("\nMatriz resultante:\n\n");
for(i = 0; i < LINHAS; i++) {
for(j = 0; j < COLUNAS; j++) {
C[i][j] = A[i][j] + B[i][j];
printf ("%5d", C[i][j]);
}
printf("\n");
}
} 23
Exercícios
• Faça um programa que leia N valores inteiros (0 < N 
≤ 100) e armazena‐os em um vetor. Em seguida, 
mostre os valores lidos em ordem inversa à leitura.
• Faça um programa que leia 8 valores inteiros e 
armazena‐os em um vetor. Em seguida, calcule e 
g
mostre a soma dos valores pares lidos. 
• Faça um programa que leia 10 valores que 
Faça um programa que leia 10 valores que
representam notas e armazene‐as em um vetor. Em 
seguida, calcule e imprima a média das notas e as
seguida, calcule e imprima a média das notas e as 
notas que estão acima da média.

24
Exercícios
• Faça um programa que leia 200 números inteiros e 
armazene‐os em um vetor V. Em seguida separe os 
elementos de V em dois vetores A e B, de forma que 
o vetor A contenha os elementos pares de V e B 
contenha os elementos ímpares de V. Imprima na 
tela os números dos vetores A e B.
• Faça um programa que leia 30 valores inteiros 
positivos e armazene‐os em um vetor,  calcule e 
imprima:
– O menor valor do vetor.
– A quantidade de elementos do vetor que são divisíveis 
q q
pelo menor valor.
25
Exercícios
• Faça um programa que leia 30 números inteiros e 
armazene‐os em um vetor A e leia também um 
inteiro n. Em seguida seu programa deve procurar o 
valor n em A e imprimir a posição em que este 
aparece. Se o elemento não estiver no vetor, o 
programa deve imprimir uma mensagem indicando 
que o elemento não pertence ao vetor.
• Faça um programa que leia um número inteiro e uma 
matriz 4 X 4 de inteiros, e obtenha uma segunda 
matriz resultado do produto da matriz original pelo 
número lido. Imprima a matriz resultado.
26
Exercícios
• Escreva um programa que leia uma matriz 10x10 e 
encontre e imprima o maior e o menor elemento da 
matriz. 
• Escreva um programa que leia as notas das 5 provas 
de 50 alunos e armazene‐as em uma matriz e calcule 
e imprima as médias das 5 notas de cada um dos 50 
alunos. Calcule ainda a maior média e a quantidade 
de alunos com média maior ou igual a 7.

27