LINGUAGEM: Linguagem C - Capítulo 2 - Parte 3

Vetores, matrizes e strings

Introdução

Um ARRANJO ( VETOR, MATRIZ ou STRING) é uma coleção de variáveis do mesmo tipo que é referenciada por um nome comum.

Um elemento específico em um ARRANJO é acessado por meio de um ÍNDICE.

VETORES e STRINGS são ARRANJOS unidimensionais. Isto é, necessita-se apenas um ÍNDICE para acessar um elemento.

MATRIZES são ARRANJOS multidimensionais. Ou seja, dois ou mais ÍNDICES são necessários para acessar um elemento de uma MATRIZ.

Em C, ARRAJOS são armazenados em posições de memória contíguas. O endereço mais baixo corresponde ao primeiro elemento e mais alto, ao último elemento.

VETORES

Declaração
ESPECIFICADORES ID[ TAMANHO ] = { LISTA_INICIALIZADORES };

Onde os elementos em vermelho são opcionais.

Obs.:
  • indices começam em 0 e vão até TAMANHO - 1
    • ID[0] - primeiro elemento
    • ID[1] - segundo elemento
    • ...
    • ID[TAMANHO - 1] - ultimo elemento
  • não há verificação automática se o acesso aos elementos ocorre dentro da faixa 0 .. TAMANHO -1; o programador tem de tomar esta tarefa para si!

MATRIZES

Declaração
ESPECIFICADORES ID[ TAMANHO1 ][TAMANHO2] ... [TAMANHOn] = { LISTA_INICIALIZADORES };

Onde os elementos em vermelho são opcionais.

Obs.:
  • os indices de cada dimensão i começam em 0 e vão até TAMANHOi - 1
  • não há verificação automática se o acesso aos elementos ocorre dentro da faixa 0 .. TAMANHOi -1; o programador tem de tomar esta tarefa para si!



STRINGS

Em C, strings são VETORES de caracteres terminadas pelo caracter '\0' (NULO).

Declaração
ESPECIFICADORES ID[ TAMANHO ] = { LISTA_INICIALIZADORES };

ou

ESPECIFICADORES ID[ TAMANHO ] = CONST_STRING;


Onde os elementos em vermelho são opcionais.


Obs.: Para armazenar um string com n caracteres não nulos você deve reservar n+1 posições. Uma a mais para o caracter '\0' !

#include <string.h>


Leitura Recomendada

  • CCT cap4

Exercícios

  1. Escreva um programa que leia uma linha de até 80 caracteres do teclado e imprima quantos caracteres foram lidos.
  2. Escreva um programa que leia uma linha de caracteres do teclado e imprima quantas vezes um caracter, também fornecido pelo teclado, aparece nesta linha. O programa também deve imprimir em que posições o caracter foi encontrado.
  3. Escreva um programa que leia uma linha do teclado e em seguida um par de caracteres. O programa deve procurar este par na linha e imprimir em que posições o par foi encontrado.
  4. Escreva um programa que leia uma linha do teclado e imprima todas as vogais encontradas no texto e o total de vezes que elas aparecem. Obs: Tamanho maximo da linha deve ser 40 caracteres.
  5. Oimperador romano Cesar usava um sistema simples para codificar as mensagens que enviava aos seus generais. Neste sistema cada letra era substituída por três letras a frente no alfabeto. A sua missão é mais simples ainda, escrever um programa que converta cada letra, e somente as letras, de uma mensagem de até 80 caracteres para a letra imediatamente posterior. Note que a letra 'z' deve ser convertida para a letra 'a', e a letra 'Z' para 'A'.
  6. Escreva um programa que leia uma frase de 80 caracteres e a imprime retirando os espaços em branco.
  7. Escreva um programa que leia uma linha do teclado de tamanho 80 caracteres. A linha somente contém letras. Divida a linha em blocos de 5 letras. Dentro de cada bloco o seu programa deve trocar a primeira letra pela seguinte, a segunda letra por duas letras adiante, a terceira por três letras e assim até a quinta. Os espaços em branco devem ser retirados da frase. Considere o seguinte exemplo.
    • Frase lida: EVA VIU A UVA
    • Retirada dos espaços em branco: EVAVIUAUVA
    • Divisão em blocos de 5 (Espaços em branco mostrados para facilitar entendimento): EVAVI UAUVA
    • Criptografia: FYDAN VCYAF
    • O que será impresso: FYDANVCYAF
  8. Escreva um programa que leia uma matriz de 3x3 que contém somente caracteres 0 e X e procure linhas que contenham somente um dos dois caracteres. O caracter a ser procurado deve ser lido do teclado.
  9. Escreva um programa que leia uma linha de caracteres do teclado e converta o primeiro caracter de cada palavra para maiúsculas. Assuma que as palavras são sempre separadas por um branco.
  10. Escreva um programa que leia para um vetor um conjunto de números inteiros. Assuma que o conjunto de números lidos é menor que o tamanho do vetor. O programa deve inserir no vetor em uma posição especificada pelo usuário um número lido do teclado. Assuma que a posição especificada pelo usuário corresponde ao índice do vetor.
  11. Faça um programa que inverta uma string. O programa deve ler a string com gets e armazená-la invertida em outra string. Use o comando for para varrer a string até o seu final.
  12. Faça um programa que leia duas matrizes 3x3 e imprima seu produto.
  13. Escreva um programa que leia um conjunto de nomes para uma matriz e imprima estes nomes em ordem alfabética. Assuma que os nomes serão lidos somente em letras maiúsculas. Assuma também que os nomes têm no máximo 40 caracteres e serão lidos 10 nomes ao todo.

Bibliografia e fonte:


  • [CCT] Schildt, H. (1996) C, completo e total: 3a Ed.. São Paulo, Makron.
  • LP, UFMA; Coutinho, Lucian. Linguagem de programação para ciencia da computação da ufma.http://www.deinf.ufma.br/~lrc/2009.1/LP/
  • [K&R] KERNIGHAN, B. e RITCHIE, D. (1990) C, a linguagem de programação: padrão ANSI. Rio de Janeiro: Campus.
  • DEITEL, H. M. (1999) Como programar em C. Rio de Janeiro: LTC.
  • Módulo Consultoria e Informática (1989) Linguagem C: programação e aplicações. Rio de Janeiro: LTC.