Programar em C/Vetores

Origem: Wikilivros, livros abertos por um mundo aberto.

Vetores[editar | editar código-fonte]

Vetores, também chamados arrays (do inglês) ou arranjo ou ainda matrizes, são uma maneira de armazenar vários dados num mesmo nome de variável através do uso de índices numéricos. Em C, vetores devem sempre conter dados do mesmo tipo de variável.

Declaramos vetores de maneira muito semelhante à declaração de variáveis normais. A única diferença é que depois do nome da variável deve ser informada a quantidade de elementos do vetor. Para declarar um vetor chamado vetor, com cinco elementos inteiros, escrevemos:

int vetor[5];

Note que a quantidade de elementos de um vetor não pode ser alterada depois que o vetor for declarado. Para criar vetores de tamanho dinâmico, podemos usar ponteiros, que serão abordados mais adiante.

Da mesma maneira que podemos inicializar uma variável junto com sua declaração, podemos usar as chaves ({}) para inicializar um array.

int vetor[5] = {17, 42, 9, 33, 12};

Para fazer referência a um valor de um elemento contido em um vetor, usamos a notação vetor[índice], que serve tanto para obter quanto para definir o valor de um elemento específico, dada sua posição. Note que os elementos são numerados a começar do zero, e, portanto, se o número de elementos é , o índice ou posição do último elemento será .

vetor[0] = 3;
int x = vetor[2];
int y = vetor[5]; // ERRO!

Repare em que a última linha contém um erro: ela referencia um elemento do vetor que não existe. No entanto, o compilador não se recusará a compilar esse código; dará apenas um aviso. Se essa linha for executada, a variável y receberá um valor que não tem nada a ver com o vetor.

Abreviando as declarações[editar | editar código-fonte]

Ao inicializar um vetor com vários valores, pode ser trabalhoso contar todos os valores para colocar o tamanho do vetor na declaração. Por isso, em C podemos omitir o número de elementos quando os valores são inicializados; o tamanho do vetor será o número de valores inicializados. Por exemplo, as duas notações abaixo são equivalentes:

int valores[5] = {1, 2, 3, 4, 5}; 
int valores[] = {1, 2, 3, 4, 5};

Exemplo de Aplicação de Vetores[editar | editar código-fonte]

O código abaixo é de um programa que recebe 5 números inteiros e informa qual destes é maior.

 #include <stdio.h>
 #include <stdlib.h>
 #include <conio.h>
 
 int main(void)
 {
    int vetor[5];
    int x, i;
    
    printf ("digite 5 numeros\n");
 
    for (i = 0; i < 5; i++)   /*Este laco faz o scan de cada elemento do vetor*/
    {
       scanf("%d", &vetor[i]);
    }
    i = 1;
    x = vetor[0];
 
    while (i < 5) /*Este laco compara cada elemento do vetor*/
    {
        if (vetor[i] > x)
        {
           x = vetor[i];
        }
        i++;
    }
 
    printf("\n O maior numero que voce digitou foi %d .\n",x);
 getch ();
    return 0;
 }

Vetores multidimensionais (matrizes)[editar | editar código-fonte]

Podemos declarar ainda mais variáveis

tipo_da_variável nome_da_variável [altura][largura];

Atenção que:

  • Índice mais à direita varia mais rapidamente que o índice à esquerda.
  • Não esquecer os índices variam de zero ao valor declarado menos um.

Podemos ter ainda conjunto de variáveis multidimensionais.

tipo_da_variável nome_da_variável [tam1][tam2] ... [tamN];

onde a iniciação é:

tipo_da_variável nome_da_variável [tam1][tam2] ... [tamN] = {lista_de_valores};
float vect [6] = { 1.3, 4.5, 2.7, 4.1, 0.0, 100.1 };
int matrx [3][4] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 };
char str [10] = { 'J', 'o', 'a', 'o', '\0' };
char str [10] = "Joao";
char str_vect [3][10] = { "Joao", "Maria", "Jose" };
int matrx[2][4]= { { 1,2,3,4 }, { 5,6,7,8 } };

Podemos, em alguns casos, inicializar matrizes das quais não sabemos o tamanho a priori. O compilador C vai, neste caso verificar o tamanho do que você declarou e considerar como sendo o tamanho da matriz. Isto ocorre na hora da compilação e não poderá mais ser mudado durante o programa

Uma tabela de inteiros positivos de duas dimensão (3 linhas, 4 colunas ) se definiria da seguinte forma:

int Tabela [3][4]

Suponha que o primeiro índice é o índice da linha e o segundo da coluna .
Então teríamos:

Tabela[0][0] Tabela[0][1] Tabela[0][2] Tabela[0][3]
Tabela[1][0] Tabela[1][1] Tabela[1][2] Tabela[1][3]
Tabela[2][0] Tabela[2][1] Tabela[2][2] Tabela[2][3]

Exemplo da inicialização de um vetor multidimensional usando loops.

 int i,j;
 for (i=0; i<=2; i++)
    {
     for (j=0; j<=3; j++)
        {
         Tabela[i][j] = 0;
        }
    }

Argumentos na função main[editar | editar código-fonte]

Na seção Funções, dissemos que a função main() aceita dois argumentos, mas não falamos mais pois um deles envolve o conceito de vetores. Agora iremos falar mais sobre eles.

Os dois argumentos de main() indicam os argumentos dados para o programa na linha de comando, na forma de um vetor de strings.

Exemplo de uso de parâmetros na função main[editar | editar código-fonte]

// somaComArgcArgv.c

#include<stdio.h>
#include<stdlib.h>

int main(int argc, char *argv[])
{
  int result;
  if ( argc != 3 )
  {
    printf("Digite soma <valor1> <valor2>\n");
    return 0;
  } // fim if ( argc != 3 )

  result = atoi(argv[1]) + atoi(argv[2]);

  printf("\nO resultado da soma de %s e %s eh: %d\n", argv[1], argv[2], result);
}