Identifique os valores a serem exibidos pelos seguintes trechos de programa:
int a = 6;
int x;
{ if (a > 5) if (a < 10) x = 1; else x = 3; } print("%d",x);
if (a > 5) { if (a < 10) x = 1; } else x = 3; print("%d",x);
if (a > 5) { if (a < 10) x = 1; else x = 3; } print("%d",x);

Passo 1

O enunciado define uma variável inteira a com valor 6 e depois três trechos de código em C que usam if aninhados, explorando a regra do “else” encadeado (dangling else). Vamos ver, passo a passo, como cada trecho determina o valor de x.

Passo 2

No primeiro trecho temos:
{ if (a > 5) if (a < 10) x = 1; else x = 3; }
Aqui não há chaves internas, então pelo emparelhamento padrão o else se liga ao if imediatamente anterior. Como a = 6 satisfaz a > 5 e também a < 10, entra no x = 1. Portanto, o primeiro print exibe 1.

Passo 3

No segundo trecho:
if (a > 5) { if (a < 10) x = 1; } else x = 3;
As chaves ligam o else só ao if externo. Como a > 5 é verdadeiro, executa o bloco interno, onde a < 10 também é verdadeiro, atribuindo x = 1. O else externo não é alcançado. Logo, o segundo print também exibe 1.

Passo 4

No terceiro trecho:
if (a > 5) { if (a < 10) x = 1; else x = 3; }
Aqui as chaves agrupam o if interno e seu else, removendo ambiguidade. De novo a > 5 e a < 10 são verdadeiros, caindo em x = 1. Assim, o terceiro print exibe 1.

Resposta

Os três trechos imprimem, nesta ordem: 1, 1 e 1.

Exercícios relacionados