Este capítulo trata dos vários métodos de controlar o fluxo
de execução de código num programa em C. Os operadores
lógicos e de comparação são fundamentais para isso. Esses
operadores são usados em conjunto com as instruções aqui
tratadas.
A instrução if tem a mesma função e estrutura de outras linguagens, como por exemplo o Pascal. Assume em C as duas formas básicas seguintes:
if (expressão)
instrução;
ou
if (expressão)
instrução_1;
else
instrução_2;
Pode ser facilmente imbricada para o teste de múltiplas condições, como se vê no exemplo seguinte:
if (expressão)
instrução_1;
else if (expressão)
instrução_2;
else
instrução_3;
Outro exemplo:
void main(void)
{
int x, y, z;...
if (x >= y) {
z = x;
...
}
else {
z = y;
...
}
...
}
Notar a colocação das chaves alinhadas em cada bloco.
O operador ?: (condição ternária) é, como o nome indica, um operador que necessita de três operandos, que podem ser resultados de expressões. Em certas situações pode substituir a instrução if. Tem a forma:
expressão_1 ? expressão_2 : expressão_3;
Tem como resultado o valor de expressão_2 ou de expressão_3 consoante o valor de expressão_1 for verdadeiro (!= 0) ou falso (== 0) respectivamente. Por exemplo, para colocar o máximo de dois valores numa variável podemos simplesmente escrever:
z = (a > b) ? a : b;
que é perfeitamente equivalente a:
if (a > b)
z = a;
else
z = b;
A instrução switch é semelhante à instrução case do Pascal, e tal como esta permite uma escolha múltipla de execução baseada no valor de uma expressão. A sua estrutura geral é a seguinte:
switch (expressão) {
case item_1:
instrução_1;
break;
case item_2:
instrução_2;
break;
...
case item_n:
instrução_n;
break;
default:
instrução;
}
Os items que aparecem em seguida à palavra case são valores constantes (não podem ser expressões nem variáveis). Se a expressão inicial coincidir com algum desses items executa-se a instrução que vem logo a seguir. Caso contrário, e se a palavra default estiver presente (não é obrigatório), passa-se a essa instrução; se não estiver presente passa-se à instrução que se segue à instrução switch. A palavra break (é uma instrução do C) faz com que se passe imediatamente à instrução que se segue à presente (a instrução que virá a seguir a esta instrução switch no programa). Se não estiver presente a execução continua para a instrução do próximo case, o que não é usual em outras linguagens. Podemos considerar o seguinte exemplo:
switch (letter) {
case 'A':
case 'E':
case 'I':
case 'O':
case 'U':
nr_de_vogais++;
break;
case ' ':
nr_de_espacos++;
break;
default:
nr_de_consoantes++;
}
Notar os 5 cinco primeiros casos (vogais), que conduzem à
mesma instrução.
[REV 8/2000]