Vetores, Matrizes e Strings em C Parte 1

22
Programação de Computadores Aula 4 e 5 23 e 30/08/2012 Profª Ms. Engª Elaine Cecília Gatto Unidade 4: Vetores, Matrizes e Strings Curso de Bacharelado em Engenharia de Computação Universidade do Sagrado Coração – USC Bauru/SP

description

Vetores, Matrizes e Strings em C Parte 1

Transcript of Vetores, Matrizes e Strings em C Parte 1

Page 1: Vetores, Matrizes e Strings em C Parte 1

Programação de Computadores Aula 4 e 5

23 e 30/08/2012

Profª Ms. Engª Elaine Cecília Gatto

Unidade 4: Vetores, Matrizes e Strings

Curso de Bacharelado em Engenharia de Computação

Universidade do Sagrado Coração – USC

Bauru/SP

Page 2: Vetores, Matrizes e Strings em C Parte 1

ARRAYS

• São estruturas de dados que consistem em itens de dados relacionados do mesmo tipo.

• Arrays e estruturas são entidades estáticas porque permanecem do mesmo tamanho ao longo de toda a execução do programa.

• Elas podem ser de uma classe de armazenamento automática e, portanto, ser criadas e destruídas sempre que os blocos em que estiverem definidas, forem iniciados e finalizados.

• Um array é um conjunto de espaços de memória que se relacionam pelo fato de que todos têm o mesmo nome e o mesmo tipo.

• Para se referir a um local ou elemento em particular no array, especificamos o nome do array e o número da posição do elemento em particular no array.

Page 3: Vetores, Matrizes e Strings em C Parte 1

ARRAYS Nome do array

[número da posição do elemento dentro do array c]

Valores armazenados

c[0] -45

c[1] 6

c[2] 0

c[3] 72

c[4] 1543

c[5] -89

c[6] 0

c[7] 62

c[8] -3

c[9] 1

c[10] 6453

c[11] 78

Um array chamado c com 12 elementos c[0] = elemento zerésimo c[i-1] = iésimo elemento c[índice] = índice pode ser um número inteiro ou uma expressão = c[i+2] ou c[a+b]

Page 4: Vetores, Matrizes e Strings em C Parte 1

ARRAYS

• É importante observar a diferença entre o SÉTIMO ELEMENTO DO ARRAY e o ELEMENTO DE ARRAY SETE. Como os índice de array começam em zero, o SÉTIMO ELEMENTO DO ARRAY tem o índice 6, enquanto o ELEMENTO DE ARRAY SETE tem o índice 7 e, na realidade, é o oitavo elemento do array.

• Os colchetes usados para delimitar o subscrito de um array são realmente considerados como um operador na linguagem C. Eles têm o mesmo nível de precedência do operador de chamada de função – parênteses.

Page 5: Vetores, Matrizes e Strings em C Parte 1

DECLARANDO ARRAYS

• Os arrays ocupam espaço na memória. Você especifica o tipo de cada elemento e o número de elementos exigidos por array de modo que o computador possa reservar a quantidade de memória apropriada.

int c[12];

• Esta é a declaração usada para pedir ao computador que reserve 12 elementos para o array de inteiros C.

int b[100], x[27];

• Esta declaração reserva 100 elementos para o array de inteiros b e 27 elementos para o array de inteiros x.

Page 6: Vetores, Matrizes e Strings em C Parte 1

Exemplos //inicializando um array #include <stdio.h> //função main inicia a execução do programa int main(void) { int n[10]; //n é um array de 10 inteiros int i; //contador //inicializa elementos do array n como zero for(i=0; i<10; i++){ n[i]=0; //define elemento no local i como zero } //fim do for printf("%s %13s \n ", "Elemento", "Valor"); //saída na tela de conteúdo do array n em formato tabular for(i=0; i<10; i++){ printf("%7d %13d \n", i, n[i]); } //fim do for system("PAUSE"); return 0; //indica conclusão bem sucedida } //fim do main

O exemplo utiliza estruturas for para inicializar os elementos de um array n de 10 elementos do tipo inteiro com zeros e imprimir o array em formato tabular.

Page 7: Vetores, Matrizes e Strings em C Parte 1

Exemplos

//inicializando um array com uma lista de inicializadores #include <stdio.h> //função main inicia a execução do programa int main(void) { //usa lista de inicializadores para inicializar o arry n int n[10]={32, 27, 64, 18, 95, 14, 90, 70, 60, 37}; int i;//contador printf("%s %13 \n", "Elemento", "Valor"); //lista conteúdo do array em formato tabular for(i=0; i<10; i++){ printf("%7d %13d \n", i, n[i]); }//fim do for system("PAUSE"); return 0;//indica conclusão bem sucedida }//fim do main

Este exemplo inicializa um array de inteiros com 10 valores e imprime o array em formato tabular.

Page 8: Vetores, Matrizes e Strings em C Parte 1

DICA

• Se houver menos inicializdores que elementos no array, os elementos restantes serão inicializados em zero. Exemplo:

int n[10] = {0};

• Essa declaração inicializa explicitamente o primeiro elemento em zero e inicializa os nove elementos restantes em zero. Isto porque existem menos inicializadores que elementos no array.

• Arrays não são inicializados automaticamente em zero. É preciso, pelo menos, inicializar o primeiro elemento em zero para que os elementos restantes sejam automaticamente zerados.

• Se o tamanho do array for omitido de uma declaração com uma lista de inicializadores, o número de elementos no array será o número de elementos na lista de inicializadores.

Int n[] = {1, 2, 3, 4, 5};

Page 9: Vetores, Matrizes e Strings em C Parte 1

Exemplos

//inicializando elementos do array s como inteiros pares de 2 a 20 #include <stdio.h> #define SIZE 10; //tamanho máximo do array – diretiva de pré-processador //função main inicia a execução do programa int main(void) { //constante simbólica SIZE - pode ser usada para especificar o tamanho do array int s[SIZE]; //array s tem SIZE elementos int j;//contador for(j=0; j<SIZE; j++){ //define os elementos s[j]=2+2*j; } //contador printf("%s %13s \n", "Elemento", "Valor"); //lista de impressão do conteúdo do array s em formato tabular for(j=0; j<SIZE; j++){ printf("%7d %13d \n", j, s[j]); } //fim do for system("PAUSE"); return 0; //indica conclusão bem sucedida } //fim do main

Inicializa os elementos de um array de 10 elementos s com os valores 2, 4, 6, ..., 20 e imprime o array em formato tabular.

Page 10: Vetores, Matrizes e Strings em C Parte 1

DEFINE

• Define é uma diretiva de pré-processador que define uma constante simbólica.

• Um aconstante simbólica é um identificador substituído com o texto substituto pelo pré-processador C antes do programa ser compilado.

• Quando o programa é pré-processador, todas as ocorrências da constante simbólica são substituídas com o texto substituto.

• O uso de constantes simbólicas para especificar tamanhos de array torna os programas mais escaláveis.

Page 11: Vetores, Matrizes e Strings em C Parte 1

Exemplos

Situação:

Foi pedido a 40 alunos que avaliassem a comida da cantina estudantil e desse notas que fossem de 1 a 10. 1 – horrorosa

10 – excelente. Coloque as 40 respostas em um array de inteiros e assuma os resultados da pesquisa.

Aplicação típica de arrays. O objetivo é resumir o número de respostas de cada tipo.

Array frequency = array de 11 elementos utilizado para contar o número de ocorrências de cada resposta.

Array response = array de 40 elementos com as respostas dos alunos.

Page 12: Vetores, Matrizes e Strings em C Parte 1

Exemplos

//programa de pesquisa com estudantes

#include <stdio.h>

#define RESPONSE_SIZE 40 //define tamanho de array

#define FREQUENCY_SIZE 11 //define tamanho de array

//função main inicia a execução do programa

int main(void)

{

int answer; //contador para percorrer 40 respostas

int rating; //contador para percorrer frequencias 1-10

//inicializa contadores de frequencia em zero

int frequency[FREQUENCY_SIZE] = {0};

//coloca as respostas da pesquisa no array responses

int responses[RESPONSE_SIZE] = {1,2,3,4,5,6,7,8,9,10,1,6,3,8,6,10,3,8,2,7,

6,5,7,6,8,6,7,5,6,6,5,6,7,5,6,4,8,6,8,10};

Page 13: Vetores, Matrizes e Strings em C Parte 1

Exemplos

/* para cada resposta, seleciona valor de um elemento do array responses e usa esse valor como índice na frequencia do array para determinar o elemento a ser incrementado */ for(answer=0; answer<RESPONSE_SIZE; answer++){ ++frequency[responses[answer]]; } //fim do for //mostra os resultados printf("%s %17s \n", "Avaliação", "Frequencia"); //listas de impressão das frequencias em um formato tabular for(rating=1; rating<FREQUENCY_SIZE; rating++){ printf("%6d %17d \n", rating, frequency[rating]); } //fim do for system("PAUSE"); return 0;//indica conclusão bem sucedida } //fim do main

Page 14: Vetores, Matrizes e Strings em C Parte 1

Exemplos

Page 15: Vetores, Matrizes e Strings em C Parte 1

Exemplos

answer answer <RESPONSE_SIZE answer++ ++frequency[responses[answer]]

0 0 < 11 = V 0 + 1=1 ++frequency[1]

1 1 < 11 = V 1 + 1 =2 ++frequency[2]

2 2 < 11 = V 2 + 1 = 3 ++frequency[6]

3 3 < 11 = V 3 + 1 = 4 ++frequency[4]

4 4 < 11 = V 4 + 1 = 5 ++frequency[8]

Vetor = int respones[RESPONSE_SIZE];

Posição 0 Posição 1 Posição 2 Posição 3 Posição 4 Posição 5

1 2 6 4 8 5

Page 16: Vetores, Matrizes e Strings em C Parte 1

Exemplos

//calcula a soma dos elementos do array #include <stdio.h> #define SIZE 12 //tamanho máximo do array //função main inicia a execução do programa int main(void) { //usa lista inicializadora para inicializar array int a[SIZE]={1,3,5,4,7,2,99,16,45,67,89,45}; int i; //contador int total=0; //soma do array for(i=0; i<SIZE; i++){ total+=a[i]; } //fim do for printf("Total de valores dos elementos do array e %d \n", total, "\n"); system("PAUSE"); return 0; //indica conclusão bem sucedida } //fim do main

Page 17: Vetores, Matrizes e Strings em C Parte 1

DICA

• C não tem verificação de limites de array para impedir que o programa se refira a um elemento que não existe.

• Um programa em execução pode ultrapassar o final de um array sem aviso.

• O programador deve garantir que todas as referencias de array permançam dentro dos limites do array.

• Ao percorrer um for por um array, o índice do array nunca deverá ser menor que zero, e sempre deverá ser menor que o número total de elementos no array (tamanho – 1)

Page 18: Vetores, Matrizes e Strings em C Parte 1

Exercícios

1. Faça um algoritmo que receba a quantidade de peças vendidas por cada vendedor e armazene essas quantidades em um vetor. Receba também o preço da peça vendida de cada vendedor e armazene esses preços em outro vetor. Existem apenas 10 vendedores, e cada vendedor pode vender apenas um tipo de peça, isto é, para cada vendedor existe apenas um preço. Calcule e imprima a quantidade total de peças vendidas por todos os vendedores e, para cada vendedor, calcule e imprima o valor total de venda.

Page 19: Vetores, Matrizes e Strings em C Parte 1

Exercícios

2. Faça um programa em C para ler cinco números inteiros quaisquer e armazená-los em um vetor A. Em seguida, criar um novo vetor B cujos elementos são os elementos do vetor A com sinal trocado. Imprima os dois vetores. Por exemplo:

Vetor A: 5, -3, 6, 67, -10

Vetor B: -5, 3, -6, -67, 10

3. Faça um algoritmo para ler dez números quaisquer e armazená-los em um vetor. Em seguida, imprimir o vetor e quantos elementos do vetor são positivos; quantos são negativos; e quantos são nulos.

Page 20: Vetores, Matrizes e Strings em C Parte 1

Exercícios

4. Faça um algoritmo para ler a nota de prova e de trabalho de dez alunos. Armazenar as notas em dois vetores diferentes. Em seguida, calcular a média de cada aluno, armazenando-as em um outro vetor. Imprimir a maior e a menor média; quantos alunos obtiveram média igual ou superior à 7,0; e os três vetores.

5. Faça um algoritmo para ler cinco números inteiros quaisquer e armazená-los em um vetor. Em seguida, imprimir o vetor e quantos elementos do vetor são positivos; quantos são negativos; e quantos são nulos.

Page 21: Vetores, Matrizes e Strings em C Parte 1

Exercícios

6. Faça um algoritmo para ler a idade de dez membros de umclube e armazená-las em um vetor. Em seguida, imprimir quantos membros têm idade entre 15 e 30 anos; entre 31 e 50 anos; e entre 51 e 70 anos. Imprimir também qual dos três intervalos possui mais membros e o vetor.

7. Faça um algoritmo para ler a idade e o sexo de dez crianças de um orfanato, armazenando os dados em dois vetores. Imprimir a idade média das crianças; quantas crianças possuem idade superior a 5 anos; a porcentagem de crianças do sexo masculino; e quantas crianças possuem idade inferior a idade média.

Page 22: Vetores, Matrizes e Strings em C Parte 1

Exercícios

8. Faça um algoritmo para ler as temperatuas registradas nos últimos 10 dias e armazená-las em um vetor. Em seguida, calcular e imprimir a maior temperatura; a temperatura média destes 10 dias; o número de dias em que a temperatura foi superior a temperatura média; e todas as temperaturas registradas.

9. Faça um algoritmo para preencher um vetor de 10 elementos inteiros colocando -1 nas posições ímpares e 0 nas posições pares. Em seguida, imprimir o vetor.