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
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.
ARRAYS                           Nome do array
                                                              Valores
                                 [número da posição do
Um array chamado c com                                      armazenados
                              elemento dentro do array c]
12 elementos
                                         c[0]                   -45
c[0] = elemento zerésimo                 c[1]                    6
                                         c[2]                    0
c[i-1] = iésimo elemento
                                         c[3]                   72
c[índice] = índice pode ser              c[4]                  1543
um número inteiro ou uma
                                         c[5]                   -89
expressão = c[i+2] ou
c[a+b]                                   c[6]                    0
                                         c[7]                   62
                                         c[8]                   -3
                                         c[9]                    1
                                         c[10]                 6453
                                         c[11]                  78
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.
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.
O        exemplo     utiliza
Exemplos                                               estruturas       for   para
                                                       inicializar os elementos de
//inicializando um array                               um array n de 10
#include <stdio.h>                                     elementos do tipo inteiro
                                                       com zeros e imprimir o
//função main inicia a execução do programa            array em formato tabular.
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
Exemplos
//inicializando um array com uma lista de inicializadores
#include <stdio.h>
//função main inicia a execução do programa
int main(void)
                                                           Este exemplo inicializa
{                                                          um array de inteiros com
  //usa lista de inicializadores para inicializar o arry n 10 valores e imprime o
  int n[10]={32, 27, 64, 18, 95, 14, 90, 70, 60, 37};      array    em      formato
  int i;//contador                                         tabular.
  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
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};
Inicializa os elementos de um array de 10

 Exemplos                             elementos s com os valores 2, 4, 6, ..., 20 e
                                      imprime o array em formato tabular.


//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
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.
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.
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};
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
Exemplos
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
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
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)
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.
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.
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.
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.
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.

Vetores, Matrizes e Strings em C Parte 1

  • 1.
    Programação de Computadores Aula 4e 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
  • 2.
    ARRAYS • São estruturasde 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.
  • 3.
    ARRAYS Nome do array Valores [número da posição do Um array chamado c com armazenados elemento dentro do array c] 12 elementos c[0] -45 c[0] = elemento zerésimo c[1] 6 c[2] 0 c[i-1] = iésimo elemento c[3] 72 c[índice] = índice pode ser c[4] 1543 um número inteiro ou uma c[5] -89 expressão = c[i+2] ou c[a+b] c[6] 0 c[7] 62 c[8] -3 c[9] 1 c[10] 6453 c[11] 78
  • 4.
    ARRAYS • É importanteobservar 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.
  • 5.
    DECLARANDO ARRAYS • Osarrays 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.
  • 6.
    O exemplo utiliza Exemplos estruturas for para inicializar os elementos de //inicializando um array um array n de 10 #include <stdio.h> elementos do tipo inteiro com zeros e imprimir o //função main inicia a execução do programa array em formato tabular. 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
  • 7.
    Exemplos //inicializando um arraycom uma lista de inicializadores #include <stdio.h> //função main inicia a execução do programa int main(void) Este exemplo inicializa { um array de inteiros com //usa lista de inicializadores para inicializar o arry n 10 valores e imprime o int n[10]={32, 27, 64, 18, 95, 14, 90, 70, 60, 37}; array em formato int i;//contador tabular. 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
  • 8.
    DICA • Se houvermenos 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};
  • 9.
    Inicializa os elementosde um array de 10 Exemplos elementos s com os valores 2, 4, 6, ..., 20 e imprime o array em formato tabular. //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
  • 10.
    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.
  • 11.
    Exemplos Situação: Foi pedido a40 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.
  • 12.
    Exemplos //programa de pesquisacom 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};
  • 13.
    Exemplos /* paracada 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
  • 14.
  • 15.
    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
  • 16.
    Exemplos //calcula a somados 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
  • 17.
    DICA • C nãotem 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)
  • 18.
    Exercícios 1. Faça umalgoritmo 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.
  • 19.
    Exercícios 2. Faça umprograma 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.
  • 20.
    Exercícios 4. Faça umalgoritmo 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.
  • 21.
    Exercícios 6. Faça umalgoritmo 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.
  • 22.
    Exercícios 8. Faça umalgoritmo 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.