Académique Documents
Professionnel Documents
Culture Documents
6 de Setembro de 2012
Roteiro
Introdu c ao Vetores Vetores Vetores Vetores Vetores Exerc cios Informa c oes Extras: Inicializa c ao de um vetor
MC-102 Aula 12
6 de Setembro de 2012
2 / 29
Vetores
Como armazenar 3 notas? float nota1, nota2, nota3; printf("Nota do aluno 1: "); scanf("%f", ¬a1); printf("Nota do aluno 2: "); scanf("%f", ¬a2); printf("Nota do aluno 3: "); scanf("%f", ¬a3);
MC-102 Aula 12
6 de Setembro de 2012
3 / 29
Vetores
Como armazenar 100 notas? float nota1, nota2, nota3, /* .... */ nota100; printf("Nota do aluno 1: "); scanf("%f", ¬a1); printf("Nota do aluno 2: "); scanf("%f", ¬a2); /* ... */ printf("Nota do aluno 100: "); scanf("%f", ¬a100);
MC-102 Aula 12
6 de Setembro de 2012
4 / 29
Vetores Deni c ao
Cole c ao de vari aveis do mesmo tipo referenciada por um nome comum. (Herbert Schildt) Caracter sticas: Acesso por meio de um ndice inteiro. Posi c oes cont guas na mem oria. Tamanho pr e-denido. Indices fora dos limites podem causar comportamento an omalo do programa.
MC-102 Aula 12
6 de Setembro de 2012
5 / 29
Declara c ao de um vetor
Exemplo
float notas[100]; int primos[100];
MC-102 Aula 12
6 de Setembro de 2012
6 / 29
Usando um vetor
Ap os declarada uma vari avel do tipo vetor, pode-se acessar uma determinada posi c ao do vetor utilizando um valor inteiro. identicador [<posi c ao>]; O acesso de um vetor em uma posi c ao espec ca tem o mesmo comportamento que uma vari avel simples. A primeira posi c ao de um vetor tem ndice 0. Au ltima posi c ao de um vetor tem ndice <tamanho do vetor> - 1.
Exemplo
int nota[10]; int a; nota[5] = 95; a = nota[5];
(Instituto de Computa c ao Unicamp) MC-102 Aula 12 6 de Setembro de 2012 7 / 29
Usando um vetor
identicador [<posi c ao>]; Voc e pode usar valores inteiros para acessar uma posi c ao do vetor. O valor pode ser inclusive uma vari avel inteira.
Exemplo
int g, vet[10]; for(g=0; g<10; g++) vet[g]=5*g;
MC-102 Aula 12
6 de Setembro de 2012
8 / 29
Vetores
Nome Indice
d -
vetor 1 2 3
f -
MC-102 Aula 12
6 de Setembro de 2012
9 / 29
Vetores
MC-102 Aula 12
6 de Setembro de 2012
10 / 29
Vetores
MC-102 Aula 12
6 de Setembro de 2012
11 / 29
Vetores
Ao executar vetor[3]=10; vetor[5]=5; vetor[-1]=1; Nome Indice d 1 vetor 1 2 3 10 f 5
Isto ir a causar um erro no seu programa pois voc e est a alterando valores de outras vari aveis. Em muitos casos o seu programa ser a encerrado (Segmentation Fault).
MC-102 Aula 12
6 de Setembro de 2012
12 / 29
O tamanho do vetor e pr e-denido (durante a execu c ao do programa n ao pode ser alterado). Indices fora dos limites podem causar comportamento an omalo do c odigo.
MC-102 Aula 12
6 de Setembro de 2012
13 / 29
MC-102 Aula 12
6 de Setembro de 2012
14 / 29
MC-102 Aula 12
6 de Setembro de 2012
15 / 29
Ler dois vetores de dimens ao 5 e computar o produto interno destes. Quais tipos de vari aveis usar?
MC-102 Aula 12
6 de Setembro de 2012
16 / 29
Ler dois vetores com 5 inteiros cada. Checar quais elementos do segundo vetor s ao iguais a algum elemento do primeiro vetor. Se n ao houver elementos em comum, o programa deve informar isso.
MC-102 Aula 12
6 de Setembro de 2012
18 / 29
Vetores em fun co es
Vetores tamb em podem ser passados como par ametros em fun c oes. Ao contr ario dos tipos simples, vetores t em um comportamento diferente quando usados como par ametros de fun c oes. Quando uma vari avel simples e passada como par ametro, seu valor e atribu do para uma nova vari avel local da fun c ao. No caso de vetores, n ao e criado um novo vetor! Isto signica que os valores de um vetor s ao alterados dentro de uma fun c ao!
MC-102 Aula 12
6 de Setembro de 2012
20 / 29
Vetores em fun co es
#include <stdio.h> void fun1(int vet[], int tam){ int i; for(i=0;i<tam;i++) vet[i]=5; } int main(){ int x[10]; int i; for(i=0;i<10;i++) x[i]=8; fun1(x,10); for(i=0;i<10;i++) printf("%d\n",x[i]); }
MC-102 Aula 12
6 de Setembro de 2012
21 / 29
Vetores em fun co es
Vetores n ao podem ser devolvidos por fun c oes. Mas mesmo assim, podemos obter um resultado parecido com isso, usando o fato de que vetores s ao alterados dentro de fun c oes.
#include <stdio.h> int[] leVet() { int i, vet[100]; for (i = 0; i < 100; i++) { printf("Digite um numero:"); scanf("%d", &vet[i]); } }
MC-102 Aula 12
6 de Setembro de 2012
22 / 29
Vetores em fun co es
Mas como um vetor e alterado dentro de uma fun c ao, podemos criar a seguinte fun c ao:
#include <stdio.h> void leVet(int vet[], int tam){ int i; for(i = 0; i < tam; i++){ printf("Digite numero:"); scanf("%d",&vet[i]); } } void escreveVet(int vet[], int tam){ int i; for(i=0; i< tam; i++) printf("vet[%d] = %d\n",i,vet[i]); }
MC-102 Aula 12
6 de Setembro de 2012
23 / 29
Vetores em fun co es
int main(){ int vet1[10], vet2[20]; printf(" ------ Vetor 1 --------\n"); leVet(vet1,10); printf(" ------ Vetor 2 --------\n"); leVet(vet2,20); printf(" ------ Vetor 1 --------\n"); escreveVet(vet1,10); printf(" ------ Vetor 2 --------\n"); escreveVet(vet2,20); }
MC-102 Aula 12
6 de Setembro de 2012
24 / 29
Exerc cio
Crie uma fun c ao int maiorValor(int vet[], int tam) que recebe como par ametros um vetor e seu tamanho e devolve o maior valor armazenado no vetor.
MC-102 Aula 12
6 de Setembro de 2012
25 / 29
Exerc cio
Crie uma fun c ao double media(int vet[], int tam) que recebe como par ametros um vetor e seu tamanho e devolve a m edia dos valores armazenados no vetor.
MC-102 Aula 12
6 de Setembro de 2012
26 / 29
Exerc cio
Crie uma fun c ao int checa(int vet[], int tam, int C) que recebe como par ametros um vetor, seu tamanho e um inteiro C . A fun c ao deve retornar 1 caso existam dois elementos distintos do vetor tal que a multiplica c ao destes e C. Exemplo: Se vet = (2, 4, 5, 10, 7) e C = 35 ent ao a fun c ao deve devolver 1. Mas se C = 1 ent ao a fun c ao deve devolver 0.
MC-102 Aula 12
6 de Setembro de 2012
27 / 29
Em algumas situa c oes e necess ario declarar e j a atribuir um conjunto de valores contantes para um vetor. Em C, isto e feito atribuindo-se uma lista de elementos para o vetor na sua cria c ao da seguinte forma: <tipo> identicador [] = {elementos separados por v rgula} ; Exemplos: double vet1[] = {2.3, 3.4, 4.5, 5.6}; int vet2[] = {5, 4, 3, 10, -1, 0};
MC-102 Aula 12
6 de Setembro de 2012
28 / 29
MC-102 Aula 12
6 de Setembro de 2012
29 / 29