Pular para o conteúdo principal

Questão de Programação — Linguagens de programação — FGV 2024

ProgramaçãoLinguagens de programação
Código
fg075487
Banca
FGV
Órgão
AL-PR
Ano
2024
Nível
Médio
Cargo
Técnico Legislativo - Suporte e Manutenção
Considere o seguinte trecho de código em linguagem C:Imagem associada para resolução da questãoDeseja-se implementar a lógica de troca dos valores das variáveis num1 e num2 de modo que, após a execução, os valores exibidos na tela sejam os valores trocados.Escolha a opção que completa corretamente a lógica de troca.
  1. Anum1 = num2;num2 = num1;
  2. Bnum2 = num1;num1 = num2;
  3. Cnum1 = num2;num2 = temp;
  4. Dtemp = num1;num1 = temp;num2 = num1;
  5. Etemp = num1;num1 = num2;num2 = temp;
Revelar gabarito e comentário

GabaritoE — temp = num1; num1 = num2; num2 = temp;

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”.

Troca de valores entre variáveis em C

Gabarito: letra E. Para trocar os valores de num1 e num2 em linguagem C, é obrigatório usar uma variável auxiliar (temp) para guardar um dos valores antes de sobrescrevê-lo — a sequência correta é temp = num1; num1 = num2; num2 = temp;. As demais alternativas ou perdem um dos valores originais ou não realizam a troca.

A troca de valores entre duas variáveis é uma operação clássica de lógica de programação. O ponto central é entender que, em linguagens imperativas como C, a atribuição (=) copia o valor da expressão da direita para a variável da esquerda, sobrescrevendo o valor anterior. Por isso, se fizermos num1 = num2; diretamente, o valor original de num1 é perdido para sempre — não há como recuperá-lo depois.

A solução padrão é usar uma variável temporária (temp) que guarda uma cópia do valor de num1 antes de sobrescrevê-lo. Veja o passo a passo com um exemplo concreto: se num1 = 5 e num2 = 10:

  1. temp = num1;temp recebe 5 (cópia do valor de num1).

  2. num1 = num2;num1 recebe 10 (agora num1 = 10, mas o 5 está salvo em temp).

  3. num2 = temp;num2 recebe 5 (o valor original de num1, recuperado de temp).

Resultado: num1 = 10 e num2 = 5 — os valores foram trocados. Essa é a técnica clássica, ensinada em qualquer curso de algoritmos, e é exatamente o que a alternativa E implementa.

A pegadinha que a banca explora é a tentação de fazer a troca "direta" (num1 = num2; num2 = num1;), que parece lógica mas não funciona porque a segunda atribuição usa o valor já sobrescrito de num1. Outra armadilha é usar temp de forma incompleta, guardando o valor errado ou atribuindo na ordem errada. O critério decisivo para julgar cada alternativa é: após a execução, num1 deve conter o valor original de num2, e num2 deve conter o valor original de num1 — e nenhum valor pode ser perdido no processo.

  1. 1temp = num1
  2. 2num1 = num2
  3. 3num2 = temp
LEVEL · soulevel.com.br

Alternativa A — ❌ Incorreta

num1 = num2; num2 = num1; — aqui, a primeira linha sobrescreve num1 com o valor de num2, perdendo o valor original de num1. A segunda linha apenas copia o mesmo valor de volta para num2. Resultado: ambas as variáveis ficam com o valor original de num2 — a troca não ocorre e o valor de num1 é perdido.

Alternativa B — ❌ Incorreta

num2 = num1; num1 = num2; — o mesmo erro da alternativa A, mas na ordem inversa. A primeira linha sobrescreve num2 com o valor de num1, perdendo o valor original de num2. A segunda linha copia o mesmo valor de volta para num1. Resultado: ambas as variáveis ficam com o valor original de num1 — a troca não ocorre e o valor de num2 é perdido.

Alternativa C — ❌ Incorreta

num1 = num2; num2 = temp; — aqui, a primeira linha sobrescreve num1 com o valor de num2, perdendo o valor original de num1. A segunda linha atribui a num2 o valor de temp, que não foi inicializado com o valor de num1 (e, dependendo do contexto, pode nem ter sido declarada). Resultado: num1 fica com o valor de num2, num2 fica com um valor indefinido (lixo de memória) — a troca não ocorre e o valor de num1 é perdido.

Alternativa D — ❌ Incorreta

temp = num1; num1 = temp; num2 = num1; — a primeira linha guarda o valor de num1 em temp. A segunda linha copia temp de volta para num1 (ou seja, num1 continua com o mesmo valor). A terceira linha copia num1 para num2. Resultado: num1 e num2 ficam ambos com o valor original de num1 — a troca não ocorre e o valor de num2 é perdido. O erro está em não usar temp para guardar o valor de num1 antes de sobrescrevê-lo com num2.

Alternativa E — ✅ Correta ⟵ GABARITO

temp = num1; num1 = num2; num2 = temp; — esta é a sequência clássica e correta. temp guarda o valor original de num1; num1 recebe o valor de num2; e num2 recebe o valor original de num1 (recuperado de temp). Nenhum valor é perdido e a troca é realizada com sucesso.

PEGA ESSA DICA!

Para questões de troca de valores, sempre verifique se há uma variável temporária guardando um dos valores originais antes de qualquer sobrescrita. Se a alternativa não tiver temp = num1; (ou temp = num2;) como primeiro passo, ela quase certamente está errada. Simule mentalmente com valores concretos (ex.: num1 = 5, num2 = 10) e confira se o resultado final é num1 = 10 e num2 = 5.

Gabarito: letra E

Link permanente: /questoes/fg075487