Vetores unidimensionais (Arrays)
Quando desenvolvemos software, muitas vezes surge a necessidade de armazenar uma quantidade de valores em uma única variável. Isso é possível em linguagem C através da definição e manipulação de arrays que têm semelhança com uma lista de variáveis de mesmo tipo. Por exemplo:
#include <stdio.h>
int main() {
int vetor[3];
int a, b, c, soma1, soma2;
vetor[0] = 3;
vetor[1] = 4;
vetor[2] = 1;
printf( "Primeiro valor: %d", vetor[0] );
printf( "Segundo valor : %d", vetor[1] );
printf( "Terceiro valor: %d", vetor[2] );
a = vetor[0];
b = vetor[1];
c = vetor[2];
soma1 = a + b + c;
vetor[0] = b;
vetor[1] = a;
vetor[2] = c;
soma2 = vetor[0] + vetor[1] + vetor[2];
printf( "Soma1 : %d", soma1 );
printf( "Soma2 : %d", soma2 );
}
O programa acima mostra a declaração de um array (Ou vetor) de inteiros de 3 posições. Preste atenção a compatibilidade entre as variáveis do tipo inteiro e cada posição do array. As posições do array podem ser utilizadas como variáveis comuns. Por exemplo, no exemplo acima, a variável (a) recebe como valor o valor armazenado em vetor[0] e, depois, a variável vetor[2] recebe o valor armazenado na variável (c). Claro, é possível declarar um vetor de floats, ints, chars, strings, etc. Estude bem o programa acima, coloque-o no Dev-C++, faça alterações e visualize os resultados! Por exemplo: e se o vetor do programa acima fosse do tipo float e tivesse espaço para 5 valores reais?
Abaixo um exemplo que calcula a média aritmética de 5 valores lidos do teclado:
#include <stdio.h>
int main() {
int lista[5];
int i, soma, media;
for( i = 0; i < 5; i++ ) {
printf( "\nInforme o numero(%d): ", (i+1) );
scanf( "%d", &lista[i] );
}
soma = 0;
for( i = 0; i < 5; i++ )
soma += lista[i];
media = soma / 5;
printf( "\nMedia=%d", media );
return 0;
}
O programa acima, primeiro, armazena os valores lidos em um vetor e, depois, os imprime. Mas, é possível fazer a funcionalidade do programa acima sem o uso de vetores, coforme mostrado a seguir:
#include <stdio.h>
int main() {
int num;
int i, soma, media;
soma = 0;
for( i = 0; i < 5; i++ ) {
printf( "Informe o numero(%d): ", (i+1) );
scanf( "%d", &num );
soma += num;
}
media = soma / 5;
printf( "\nMedia = %d", media );
return 0;
}
Abaixo, um exemplo um pouco mais complexo:
#include <stdio.h>
#define CAPACIDADE 10
int main() {
float vetor[CAPACIDADE];
char continuar = 'S';
int i, quant;
quant = 0;
do {
if ( quant < CAPACIDADE ) {
printf( "\nInforme o numero(%d)..: ", (quant+1) );
scanf( "%f", &vetor[quant] );
printf( "\nDeseja ler outro numero?" );
printf( "\n(S) para sim" );
printf( "\n(N) para nao" );
printf( "\nOpcao = ");
fflush( stdin );
fflush( stdout );
continuar = getchar();
quant++;
} else {
printf( "\nNao ha mais espaco para armazenar mais numeros!" );
continuar = 'N';
}
} while ( toupper( continuar ) == 'S' );
printf( "\n\nNumeros lidos: " );
for( i = 0; i < quant; i++ )
printf( "%.2f ", vetor[i] );
return 0;
}
No programa acima, é utilizada a função toupper que converte um caractere para maiusculo. Do mesmo modo, existe a função tolower que converte para minusculo. Repare também na chamada a fflush antes da utilização da função getchar. Isto é necessário para limpar os bufferes de entrada e saída padrões e a leitura funcionar corretamente.
Em resumo, o programa acima solicita que o usuário digite números (para o programa armazenar em um vetor de números reais - ponto flutuante) enquanto o usuário não escolhe não ler mais números e a capacidade máxima do vetor não for extrapolada. Depois da leitura, o programa percorre a lista de números para imprimi-los.
Exercícios
1) Experimente alterar o programa acima para que o vetor de números reais tenha como capacidade máxima 5 e, no final do programa, seja mostrada também, a média aritmética dos números digitados.
2) Altere o programa acima para que sejam impressos apenas os números menores ou iguais a 10.5.
3) Altere o programa acima para que, no final, os números sejam impressos com 4 casas após a vírgula.