O código Java a seguir utiliza conceitos de lógica de progra...
public class PrincipalTeste {
public static void main(String[] args) {
int a, b, c, d;
a=2; b=3; c=4; d=10;
System.out.print((a+b)-(-c*d)>(d-a)*(-a+b) && (b*c/a)<(d-c+a/c)?"a":"b");
System.out.print(!((a+b)-(-c*d)>(d-a)*(-a+b) || (b*c/a)<(d-c+a/c))?"c":"d");
System.out.print(((a+b)-(-c*d)>((d-a)*(-a+b)) & !((b*c/a)<(d-c+a/c)))?"e":"f");
System.out.print(((a+b)-(c*d)!=((d-a)*(-a+b)) & !((b*c/a)<(d-c+a/c)))?"g":"h");
}
}
Após compilar e executar o código será impresso na tela os valores
Gabarito comentado
Confira o gabarito comentado por um dos nossos professores
A alternativa correta é a D - bdeg. Vamos entender o porquê dessa escolha, analisando cada uma das expressões de impressão no código Java fornecido e como elas são avaliadas.
Primeiro, temos a definição das variáveis int a, b, c, d; e seus respectivos valores a=2; b=3; c=4; d=10;. Com esses valores em mãos, podemos prosseguir com a análise das expressões condicionais.
A primeira expressão condicional System.out.print((a+b)-(-c*d)>(d-a)*(-a+b) && (b*c/a)<(d-c+a/c)?"a":"b"); avalia se a expressão lógica composta por duas partes, separadas pelo operador &&, é verdadeira. A primeira parte avalia se (a+b)-(-c*d) é maior que (d-a)*(-a+b), e a segunda parte verifica se (b*c/a) é menor que (d-c+a/c). Substituindo pelas variáveis, temos 5 - (-40) > 8 * 1 e 12/2 < 6 + 2/4, as quais são verdadeiras. Portanto, a primeira letra a ser impressa é "b".
A segunda expressão System.out.print(!((a+b)-(-c*d)>(d-a)*(-a+b) || (b*c/a)<(d-c+a/c))?"c":"d"); utiliza o operador ! para negar o resultado da expressão entre parênteses. Como a expressão original é verdadeira, a negação torna a expressão inteira falsa, e por isso a letra impressa é "d".
Na terceira expressão System.out.print(((a+b)-(-c*d)>((d-a)*(-a+b)) & !((b*c/a)<(d-c+a/c)))?"e":"f");, temos uma comparação lógica similar à primeira expressão, mas com a negação da segunda parte. Como a segunda parte da expressão original é verdadeira, sua negação é falsa, e o operador & requer que ambas as partes sejam verdadeiras. Assim, a letra impressa é "f".
Finalmente, a última expressão System.out.print(((a+b)-(c*d)!=((d-a)*(-a+b)) & !((b*c/a)<(d-c+a/c)))?"g":"h"); muda a comparação da primeira parte para verificar desigualdade com o operador !=. A comparação é falsa, pois 5 - 40 não é diferente de 8 * 1, então junto com a negação da segunda parte, que é falsa, a letra final impressa é "g".
Combinando todas as letras impressas, temos "bdeg", que corresponde à alternativa D.
Clique para visualizar este gabarito
Visualize o gabarito desta questão clicando no botão abaixo
Comentários
Veja os comentários dos nossos alunos
Questão que requer muita atenção para não se confundir com o mar de operadores.
Manter em mente o conceito de operador ternário:
O comando System.out.println({condição}? "foo" : "bar");
Imprime "foo" caso {condição} for true;
Imprime "bar" caso {condição} for false.
http://pt.wikipedia.org/wiki/Operador_tern%C3%A1rio
Veja a seguinte tabela de operadores lógicos:
&& E ("logical AND") a && b
retorna true se a e b forem ambos true. Senão retorna false. Se a for false, b não é avaliada.
& E ("boolean logical AND") a & b
retorna true se a e b forem ambos true. Senão retorna false. Ambas expressões a e b são sempre avaliadas.
|| OU ("logical OR") a || b
retorna true se a ou b for true. Senão retorna false. Se a for true, b não é avaliada.
| OU ("boolean logical inclusive OR") a | b
retorna true se a ou b for true. Senão retorna false. Ambas expressões a e b são sempre avaliadas.
^ OU EXCLUSIVO ("boolean logical exclusive OR") a ^ b
retorna true se a for true e b for false ou vice-versa. Senão retorna false
! NÃO ("logical NOT") !a
retorna true se a for false. Senão retorna false
Bons Estudos!!!
Esse é o tipo de questão feita pro candidato perder tempo na prova. Não basta saber o assunto o cara ainda tem que passar 2 horas preenchendo um monte de valores. Essa questão é tão bizarra quanto essa: Q403742
Clique para visualizar este comentário
Visualize os comentários desta questão clicando no botão abaixo