if
e if
else
Instrução de selecção (if
else
):
if(expressão_booleana)
{
//
...
instruções a executar se a expressão booleana for
verdadeira.
} else {
//
...
instruções a executar se a expressão booleana for
falsa.
}
if
):
if(expressão_booleana)
{
//
...
instruções a executar se a expressão booleana for
verdadeira.
}
//
Se a expressão
booleana for falsa continua o programaInstrução de selecção (if
else
):
Instrução condicional (
if(0 < x)
cout << "x é positivo." << endl;
else
cout << "x é negativo ou zero (não-positivo)." << endl;
if
):
Nota: O
if(0 < x)
cout << "x é positivo." << endl;
else
pode não
existir, caso não se pretenda executar nenhuma instrução
quando a expressão booleana for falsa, como é o caso no segundo
exemplo.
As instruções if
else
podem ser encadeadas.
Por exemplo,
Mas nesse caso é usual usar uma indentação diferente para o código C++ de modo a deixar mais clara a sequência de instruções alternativas,
if(0 < x)
cout << "x é positivo." << endl;
else
if(x < 0)
cout << "x é negativo." << endl;
else
cout << "x é zero." << endl;
if(0 < x)
cout << "x é positivo." << endl;
else if(x < 0)
cout << "x é negativo." << endl;
else
cout << "x é zero." << endl;
Importante: Por vezes pode
ser ambíguo a que if
diz respeito um dado else
.
A regra é que o else
pertence ao if
mais interior
(mais "próximo"). A indentação utilizada não
influencia a interpretação do compilador, embora possa induzir
o programador em erro. Por exemplo, o código
não faz o que é suposto, pois é equivalente a
if(0 <= x)
if(0 < x)
cout << "x é positivo." << endl;
else
cout << "x é negativo." << endl;
Para que o código faça o que se pretendia é necessário envolver o
if(0 <= x) {
if(0 < x)
cout << "x é positivo." << endl;
else
cout << "x é negativo." << endl;
}
if
mais interior em chavetas de modo a impossibilitar
a sua associação com o else
, i.e.,
Nota: Uma instrução
if(0 <= x) {
if(0 < x)
cout << "x é positivo." << endl;
} else
cout << "x é negativo." << endl;
if
sem else
é sempre equivalente a uma instrução
if
else
em que a instrução controlada pelo
else
é a instrução nula (que só possui o terminador
;
).
Ou seja,
é equivalente a
if(0 < x)
cout << "x é positivo" << endl;
if(0 < x)
cout << "x é positivo" << endl;
else
;
?:
?:
é uma forma abreviada de expressar um tipo
muito usual de instruções alternativas.
condição ? expressão_caso_verdadeira : expressão_caso_falsa
i.e.,
int x;
// ...
int z = 0 < x ? x : -x;
z
é inicializada com o valor absoluto (módulo)
de x
.
Nota: Se a condição for verdadeira a segunda expressão não chega a ser calculada e vice-versa.
switch
switch(expressão_de_controlo) {
case valor_1:
//
... instruções.break;
case valor_2:
//
... instruções.break;
...
default:
//
... instruções.}
Importante: A instrução
int dígito;
cin >> dígito;
switch(dígito) {
case 0:
cout << "zero";
break;
case 1:
cout << "um";
break;
case 2:
cout << "dois";
break;
case 3:
cout << "três";
break;
case 4:
cout << "quatro";
break;
case 5:
cout << "cinco";
break;
case 6:
cout << "seis";
break;
case 7:
cout << "sete";
break;
case 8:
cout << "oito";
break;
case 9:
cout << "nove";
break;
}
switch
não permite a especificação de gamas de valores nem
de desigualdades. Construções como
case
1..10:
ou case < 10:
são
inválidas. Assim, é possível usar como expressão
de controlo do switch
apenas expressões de um dos tipos
inteiros ou de um tipo enumerado (a ver em aulas posteriores), devendo
os valores colocados nos case
respectivos ser do mesmo tipo.
Importante: Cada caso corresponde
a um ponto de entrada no bloco de instruções do switch
.
Se se eliminarem os break
e o valor introduzido pelo utilizador
for 7, o exemplo escreve no ecrã
Coloque sempre as instruções
seteoitonove
break
!
São elas que terminam abruptamente a execução do bloco
de instruções do switch
, levando ao resultado pretendido,
que é que as instruções em cada caso sejam alternativas.
Pode usar um caso de nome default:
para capturar todos os casos
não previstos pelos casos "normais" (case valor:
).