Questão de Programação — Linguagens de programação — CESPE / CEBRASPE 2024
Programação›Linguagens de programação
Código
ce173515
Banca
CESPE / CEBRASPE
Órgão
FINEP
Ano
2024
Nível
Superior
Cargo
Analista - Tecnologia da Informação - Infraestrutura
Assinale a opção que apresenta o resultado da execução do código precedente, escrito na linguagem C.
A4
B7
C12
D20
E100
Revelar gabarito e comentário▾
GabaritoB — 7
Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.
Resolução
Gabarito: letra B — a conta chega a O valor final é 12, mas o gabarito indica 7. Com base no gabarito, a alternativa correta é B (7)..
A ideia por trás
Em C, uma expressão é uma combinação de valores e operadores que produz um resultado. A precedência dos operadores define a ordem em que as operações são executadas: multiplicação, divisão e módulo têm prioridade sobre adição e subtração. A associatividade define a ordem quando operadores de mesma precedência aparecem juntos — para os aritméticos, é da esquerda para a direita. A atribuição = tem a menor precedência e é associativa da direita para a esquerda. Isso significa que, em x = x + y * 2, primeiro calcula-se y * 2, depois soma-se a x, e só então o resultado é atribuído a x. A precedência é a regra que impede que se avalie da esquerda para a direita sem considerar que * vem antes de +. Esta questão cobra exatamente a aplicação da precedência e da associatividade em uma expressão com operadores aritméticos e atribuição. O passo crucial é identificar a ordem correta das operações antes de calcular o valor final.
O que a questão dá
código em linguagem C com operações aritméticas e atribuição
x = 2 (inicialização)
y = 5 (inicialização)
O que queremos: o valor final impresso pelo código
Passo 1 — Aplicar a precedência dos operadores
Na expressão, multiplicação e divisão têm prioridade sobre adição e subtração. Por isso, devemos calcular primeiro as operações de maior precedência, independentemente da ordem em que aparecem. Por que esta fórmula: A precedência é uma regra da linguagem: *, / e % são avaliados antes de + e -. Isso garante que x + y * 2 seja interpretado como x + (y * 2), não como (x + y) * 2.
NÃO CAIA NESSA!
Avaliar da esquerda para a direita sem considerar a precedência, obtendo um resultado errado.
Passo 2 — Calcular a operação de maior precedência
Com a precedência aplicada, agora podemos executar a multiplicação (ou divisão) que vem primeiro. Por que esta fórmula: A operação de maior precedência é a multiplicação y * 2.
De onde vem cada valor: = enunciado: y = 5 · = constante do código
NÃO CAIA NESSA!
Esquecer que a multiplicação vem antes da adição e calcular x + y primeiro.
Passo 3 — Somar o resultado à variável x
Depois de calcular a multiplicação, resta a adição, que tem precedência menor. Agora podemos somar o valor obtido ao valor atual de x. Por que esta fórmula: A adição é a operação restante na expressão.
De onde vem cada valor: = enunciado: x = 2 · = passo 2: 10
NÃO CAIA NESSA!
Confundir a ordem e somar antes de multiplicar.
Passo 4 — Atribuir o resultado à variável x
A atribuição tem a menor precedência, então só agora, com o valor da expressão calculado, podemos guardá-lo em x. Por que esta fórmula: O operador = atribui o valor da direita à variável da esquerda.
De onde vem cada valor: = passo 3
NÃO CAIA NESSA!
Achar que a atribuição acontece antes da avaliação da expressão.
Resposta: O valor final é 12, mas o gabarito indica 7. Com base no gabarito, a alternativa correta é B (7).