Mais sobre matrizes

Tipos de variáveis
Há 3 tipos padrão de variáveis em linguagem C:

  • inteiro: int
  • ponto flutuante: float
  • caractere: char

Um int é um valor inteiro de 4 bytes. Um float é um valor de ponto flutuante de 4 bytes. Um char é um caractere único de 1 byte (como "a" ou "3"). Uma string de caracteres é declarada como uma matriz de caracteres.

Há vários tipos derivados:

  • duplo (valor de ponto flutuante de 8 bytes)
  • curto (inteiro de 2 bytes)
  • curto sem sinal ou int sem sinal (números inteiros positivos, sem bit de sinal)

Operadores e precedência de operadores
Os operadores em C são semelhantes aos operadores na maioria das linguagens:

  +: adição
  -: subtração
  /: divisão
  *: multiplicação
  % - mod  

O operador / realiza a divisão de inteiros se ambos os operandos forem números inteiros; caso contrário, realiza a divisão por ponto flutuante. Por exemplo:

  void main()
  {
      float a;
      a=10/3;
      printf("%f\n",a);
  }  

Este código imprime um valor de ponto flutuante desde que a seja declarado como tipo float, mas a será 3.0 porque o código executou uma divisão de inteiros.

A precedência de operador em C também é similar para a maioria das linguagens. A divisão e multiplicação ocorrem primeiro, depois a adição e a subtração. O resultado do cálculo 5+3*4 é 17, e não 32. Em C, o operador * tem precedência sobre o +. Você pode usar parênteses para alterar a ordem de precedência normal: (5+3)*4 é 32. O 5+3 é executado primeiro porque está entre parênteses. Abordaremos a parte da precedência mais tarde, já que ela se torna um pouco complicada em C quando os ponteiros são introduzidos.

Conversão de tipo
A linguagem C permite executar conversões de tipo na sua execução. Você utiliza este recurso com freqüência ao usar ponteiros. A conversão de tipo também ocorre durante a operação de atribuição para determinados tipos. Por exemplo, no código acima, o valor inteiro foi automaticamente convertido para um flutuante.

Você faz a conversão de tipo em C colocando o nome de tipo entre parênteses e colocando-o na frente do valor que deseja alterar. Assim, no código acima, ao substituir a linha a=10/3; por a=(float)10/3; produz 3.33333 como resultado, pois 10 é convertido em um valor de ponto flutuante antes da divisão.

Typedef
Você declara tipos nomeados e definidos pelo usuário em C com a instrução typedef. O exemplo a seguir mostra um tipo que aparece freqüentemente no código C:

  #define TRUE  1
  #define FALSE 0
  typedef int boolean;
    
  void main()
  {
      boolean b;


      b=FALSE;
      blá blá blá
  }  

Este código permite declarar tipos booleanos em programas C.

Se você não gosta da palavra "float" para números reais, você pode dizer:

  typedef float real;  

e mais tarde dizer:

  real r1,r2,r3;  

Você pode colocar declarações typedef em qualquer lugar em um programa C contanto que venham antes de sua primeira utilização na codificação.

Estruturas
Estruturas em C permitem agrupar variáveis em um pacote. Eis um exemplo:

  struct rec
  {
      int a,b,c;
      float d,e,f;
  };
    struct rec r; 

Como demonstrado, sempre que desejar declarar estrutura do tipo rec, você precisa dizer struct rec. Esta linha é muito fácil de esquecer, e o compilador gera muitos erros caso você omita o struct. Você pode compactar o código desse modo:

  struct rec
  {
      int a,b,c;
      float d,e,f;
  } r; 

onde a declaração de tipo para rec e a variável r são declaradas na mesma instrução. Ou você pode criar uma instrução typedef para o nome de estrutura. Por exemplo, se você não gosta de dizer struct rec r sempre que deseja declarar um registro, pode dizer:

  typedef struct rec rec_type; 

e então declarar os registros de tipo rec_type dizendo:

  rec_type r; 

Você acessa os campos da estrutura usando um ponto, por exemplo, r.a=5;.

Matrizes
Você declara matrizes ao inserir um tamanho de matriz após a instrução normal, como abaixo:

 int a[10];        /* matriz de inteiros */
 char s[100];      /* matriz de caracteres 
                     (uma string em C) */  
 float f[20];      /* matriz de reais */  
 struct rec r[50]; /* matriz de registros */ 

  Incrementação 
  
  Caminho Longo 	    Caminho Curto
  i=i+1;             i++;
  i=i-1;             i--;
  i=i+3;             i += 3;
  i=i*j;             i *= j;  

Tente isto
  • Tente diferentes trechos da codificação para investigar a conversão de tipo e precedência. Tente int, char, float e assim por diante.
  • Crie uma matriz de registros e digite um código para classificar a matriz em um campo de número inteiro.

Erros que devem ser evitados na linguagem C
  • Como descrito acima, o uso do operador / com 2 inteiros quase sempre produzirá um resultado inesperado, portanto pense bem ao utilizá-lo.