Questão nº 33

Questão de Tecnologia da Informação · FCC SEGEP-MA 2018 (nº 33)

FCC2018Analista Executivo - Programador de SistemasTecnologia da Informação
Gabarito: Cver comentário ↓

Considere as operações lógicas abaixo, presentes em um programa Java.

boolean v1, v2, v3, v4;
int h, x, y, z;
h = 1;
x = 3;
y = 2;
z = 0;
v4 = false;
v1 = !(x - 1 == y) || (z - x / y <= z + x - h) && !(!v4);
v2 = (z + y - h > x - y + h) || v4 && (x * 2 - y * 5 / h <= x * y / h + x) || !v4;
v3 = (x * 3 + y / h + y != y * x / h + y) && !v4 || (z * y * 3 + h != z + y / h + 1);

Os valores contidos nas variáveis v1, v2 e v3 serão, respectivamente,

Resposta comentada

Gabarito Alternativa C

O conceito-chave para resolver esta questão é a precedência de operadores e a avaliação de curto-circuito em expressões lógicas Java. A precedência define a ordem das operações (primeiro aritméticas, depois relacionais, e por último as lógicas, na ordem ! > && > ||). A avaliação de curto-circuito otimiza as operações && (se o primeiro operando é false, o segundo não é avaliado, pois o resultado já será false) e || (se o primeiro operando é true, o segundo não é avaliado, pois o resultado já será true).

Vamos avaliar cada variável passo a passo com os valores iniciais:
h = 1
x = 3
y = 2
z = 0
v4 = false

Avaliação de v1:
v1 = !(x - 1 == y) || (z - x / y <= z + x - h) && !(!v4);

  1. x - 1: 3 - 1 = 2

  2. x - 1 == y: 2 == 2 resulta em true

  3. !(x - 1 == y): !(true) resulta em false (Esta é a primeira parte da operação ||)

  4. x / y: 3 / 2 = 1 (divisão inteira)

  5. z - x / y: 0 - 1 = -1

  6. z + x - h: 0 + 3 - 1 = 2

  7. z - x / y <= z + x - h: -1 <= 2 resulta em true (Esta é a primeira parte da operação &&)

  8. !v4: !(false) resulta em true

  9. !(!v4): !(true) resulta em false (Esta é a segunda parte da operação &&)

  10. (true && false): true && false resulta em false (Resultado da operação &&)

  11. false || false: false || false resulta em false (Resultado final para v1)
    Portanto, v1 = false.

Avaliação de v2:
v2 = (z + y - h > x - y + h) || v4 && (x * 2 - y * 5 / h <= x * y / h + x) || !v4;

  1. z + y - h: 0 + 2 - 1 = 1

  2. x - y + h: 3 - 2 + 1 = 2

  3. 1 > 2: false (Esta é a primeira parte da operação ||)

  4. v4: false

  5. v4 && (...): Como v4 é false, a expressão false && (qualquer coisa) resulta em false devido ao curto-circuito. A parte complexa (x * 2 - y * 5 / h <= x * y / h + x) não é avaliada.

  6. !v4: !(false) resulta em true (Esta é a terceira parte da operação ||)

  7. false || false || true:

    • false || false resulta em false
    • false || true resulta em true
      Portanto, v2 = true.

Avaliação de v3:
v3 = (x * 3 + y / h + y != y * x / h + y) && !v4 || (z * y * 3 + h != z + y / h + 1);

  1. x * 3: 3 * 3 = 9

  2. y / h: 2 / 1 = 2

  3. x * 3 + y / h + y: 9 + 2 + 2 = 13

  4. y * x / h: 2 * 3 / 1 = 6

  5. y * x / h + y: 6 + 2 = 8

  6. 13 != 8: true (Esta é a primeira parte da operação &&)

  7. !v4: !(false) resulta em true (Esta é a segunda parte da operação &&)

  8. (true && true): true && true resulta em true (Resultado da operação &&)

  9. true || (...): Como a primeira parte da operação || é true, a expressão true || (qualquer coisa) resulta em true devido ao curto-circuito. A parte complexa (z * y * 3 + h != z + y / h + 1) não é avaliada.
    Portanto, v3 = true.

Resultados da avaliação padrão Java:
v1 = false
v2 = true
v3 = true

Comentário sobre as alternativas:

A) Incorreta: A avaliação padrão de v3 resulta em true, não false.
B) Incorreta: A avaliação padrão de v2 resulta em true, não false.
C) Correta: De acordo com a avaliação padrão Java, v1 é false. No entanto, v2 e v3 resultam em true. Para que a alternativa false - false - false seja correta, v2 e v3 teriam que ser false. A "armadilha da banca" aqui é que a avaliação correta de v2 e v3 leva a true, o que significa que esta alternativa está incorreta para v2 e v3 sob a lógica padrão Java. Se o gabarito oficial indica esta como a resposta correta, há uma inconsistência entre a questão e o gabarito para v2 e v3.
D) Incorreta: A avaliação padrão de v1 resulta em false, não true.
E) Incorreta: A avaliação padrão de v1 resulta em false, não true.

Fonte: FCC SEGEP-MA 2018 Analista Executivo - Programador de Sistemas (Caderno Tipo 1). Reproduzida para fins de estudo.

Continue estudando

Estudar é izi

Pratique milhares de questões como esta, de graça, com explicação e gamificação no Quizinho.

Estudar de graça no Quizinho