Desvio e looping

Em C, as instruções if e loops while regem-se pelos princípios das expressões Booleanas. Eis um programa simples em C que demonstra uma instrução if:  

#include <stdio.h>

int main()
{
    int b;
    printf("Digite um valor:");
    scanf("%d", &b);
    if (b < 0)
        printf("O valor é negativo ");
    return 0;
}

Este programa aceita um número do usuário. Ele então testa esse número utilizando uma instrução if para ver se ele é menor que 0. Se for, o programa imprime uma mensagem. Caso contrário, o programa não faz nada. A parte (b < 0) do programa é a expressão booleana. A linguagem C avalia esta expressão para decidir se imprime ou não a mensagem. Se a expressão booleana se mostra Verdadeira, então a linguagem C executa a linha imediatamente posterior à instrução if (ou um bloco de linhas entre chaves logo após a instrução if). Se a expressão booleana se mostrar Falsa, então a linguagem C pula a linha ou bloco de linhas logo após a instrução if.


Eis um exemplo um pouco mais complexo:

#include <stdio.h>

int main()
{
    int b;
    printf("Digite um valor:");
    scanf("%d", &b);
    if (b < 0)
        printf("O valor é negativo ");
    else if (b == 0)
        printf("O valor é zero ");
    else
        printf("O valor é positivo ");
    return 0;
}

Neste exemplo, as seções else if e else avaliam tanto para valores positivos como zero.

Eis uma expressão booleana mais complicada:

if ((x==y) && (j>k))
    z=1;
else
    q=10;

Esta instrução diz: "Se o valor da variável x for igual ao valor da variável y, e se o valor da variável j for maior que o valor da variável k, então defina a variável z como 1; de outro modo, defina a variável q como 10". Você usará instruções if como esta em todos os seus programas C para tomar decisões. De um modo geral, a maioria das decisões será simples como o primeiro exemplo, mas, eventualmente, as coisas podem ser um pouco mais complicadas.

Observe que a linguagem C utiliza == para testar a igualdade, enquanto utiliza = para atribuir um valor a uma variável. O símbolo && em C representa uma operação booleana AND.

Aqui estão todos os operadores booleanos em C:

  igualdade         ==
  menor que         < 
  maior que         >    
  menor ou igual    <= 
  maior ou igual    >=  
  desigualdade      != 
  e                 &&  
  ou                || 
  não               !

Você descobrirá que as instruções while são tão fáceis de utilizar como as instruções if. Por exemplo:

while (a < b)
{      
   print("%d\n", a);  
   a = a + 1;
}

Isso faz com que duas linhas entre chaves sejam executadas repetidamente até que a seja maior ou igual a b. Em geral, a instrução while funciona assim:


A linguagem C também oferece uma estrutura do-while:

  do
  {
      printf("%d\n", a);
      a = a + 1;
  }
  while (a < b);   

O loop for na linguagem C é apenas um atalho para expressar uma instrução while. Por exemplo, suponha que você tenha o seguinte código em C:

  x=1;
  while (x<10)
  {
      blá blá blá
      x++; /* x++ é o mesmo que dizer x=x+1 */
  } 

Você pode converter isso em um loop for da seguinte forma:

  for(x=1; x<10; x++)
  {
      blá blá blá
  }   

Observe que o loop while contém uma etapa de inicialização (x=1), uma etapa de teste (x<10) e uma de incremento (x++). O loop for permite colocar as três partes em uma única linha, mas você pode colocar qualquer coisa nelas. Por exemplo, suponha que você tenha o seguinte loop:

  a=1;
  b=6;
  while (a < b)
  {
      a++;
      printf("%d\n",a);
  }   

Você também pode colocá-lo para indicação:

  for (a=1,b=6; a < b; a++,printf("%dn",a));  

É um pouco confuso, mas é possível. O operador vírgula permite separar diversas instruções diferentes nas seções de inicialização e incremento do loop for (porém não na seção de teste). Muitos programadores de linguagem C gostam de concentrar muitas informações em uma única linha de código. Outros acham que isto torna o código mais difícil de entender, e portanto desmembram essas instruções.

= versus == em expressões booleanas
O sinal == é um problema na linguagem C pois freqüentemente você se esquece e digita apenas = em uma expressão booleana. Este é um erro comum de ocorrer, mas para o compilador há uma diferença significativa. A linguagem C aceitará = e == em uma expressão booleana, mas o comportamento do programa mudará consideravelmente quando usamos um ou outro.

As expressões booleanas em C avaliam os inteiros e os inteiros podem ser usados dentro de expressões booleanas. O valor inteiro 0 em C é Falso, enquanto qualquer outro valor inteiro é Verdadeiro. É código seguinte é permitido em C:

  #include <stdio.h>  

  int main()
  {
      int a;
      printf("Digite um número:");
      scanf("%d", &a);
      if (a)
      {
          printf("O valor é verdadeiro\n");
      }
      return 0;
  }  

Se a for qualquer número diferente de 0, a instrução printf é executada.

Em C, uma instrução como if (a=b) significa: “Atribuir b para a, e então testar a para seu valor Booleano". Assim, se a retornar o valor 0, a instrução if é Falsa. Caso contrário, é Verdadeira. O valor de a muda durante o processo. Este não é o comportamento desejado se você pretendeu digitar == (embora esta característica seja útil quando usada corretamente), assim, tenha cuidado com o uso de = e ==.