O código Java a seguir utiliza conceitos de lógica de progra...

Próximas questões
Com base no mesmo assunto
Ano: 2013 Banca: FCC Órgão: DPE-SP Prova: FCC - 2013 - DPE-SP - Programador de computador |
Q304601 Programação
O código Java a seguir utiliza conceitos de lógica de programação referentes a expressões aritméticas, relacionais e lógicas e estrutura de controle condicional.

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
Alternativas

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