Questão de Programação — Linguagens de programação — FGV 2024
Programação›Linguagens 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:Deseja-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.
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:
temp = num1; → temp recebe 5 (cópia do valor de num1).
num1 = num2; → num1 recebe 10 (agora num1 = 10, mas o 5 está salvo em temp).
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.
1temp = num1
2num1 = num2
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.