Questão de Programação — Linguagens de programação — FUNDATEC 2026
Programação›Linguagens de programação
Código
qg685313
Banca
FUNDATEC
Órgão
IFC-SC
Ano
2026
Nível
Superior
Cargo
Professor EBTT - Informática: Programação Básica e Programação Web
Analise o seguinte trecho de código em C:Qual será a saída do programa?
A10 20
B20 30
C30 40
D30 50
E40 50
Revelar gabarito e comentário▾
GabaritoC — 30 40
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 C — a conta chega a 40 30 (nenhuma alternativa, mas o gabarito oficial é C: 30 40, indicando possível erro na questão ou código diferente).
A ideia por trás
Ponteiros são variáveis que guardam o endereço de memória de outra variável. Quando você passa &x para uma função, está passando o endereço de x, permitindo que a função altere o valor original de x. Dentro da função, o parâmetro é um ponteiro, e o operador * (dereferência) acessa o valor guardado naquele endereço.
A troca clássica usa uma variável temporária: temp = *a; *a = *b; *b = temp;. Isso copia o valor apontado por a para temp, depois copia o valor apontado por b para o local de a, e por fim coloca temp no local de b. O operador ++ aplicado a um ponteiro (a++) incrementa o endereço, não o valor apontado, e como o ponteiro é passado por valor, essa mudança não afeta o ponteiro original na main.
Esta questão testa se você entende que a troca por ponteiros altera os valores originais, e que o incremento do ponteiro não altera o valor apontado. O printf imprime os valores de x e y após a chamada da função.
O que a questão dá
código em C com função troca e ponteiros
valores iniciais: x = 30, y = 40
função troca recebe ponteiros para x e y
O que queremos: a saída do programa, ou seja, o que o printf imprime
Passo 1 — Identificar os valores iniciais
Antes de qualquer operação, precisamos saber o que x e y valem no início, pois a função vai alterá-los.
x = 30, y = 40
NÃO CAIA NESSA!
Confundir a ordem: x é 30, y é 40.
Passo 2 — Executar a troca dentro da função
A função troca recebe os endereços de x e y, então qualquer alteração em *a e *b reflete em x e y. Precisamos simular a troca passo a passo.
Por que esta fórmula: A troca usa uma variável temporária para não perder o valor original. temp = *a guarda o valor de x; *a = *b coloca o valor de y em x; *b = temp coloca o valor antigo de x em y.
De onde vem cada valor: = passo 1: x = 30 · = passo 1: y = 40
x = 40, y = 30
NÃO CAIA NESSA!
Esquecer que *a = *b sobrescreve x antes de salvar o valor antigo, por isso a variável temp é necessária.
Passo 3 — Analisar o efeito dos incrementos
Depois da troca, a função ainda executa a++ e b++. Precisamos ver se isso altera os valores de x e y.
Por que esta fórmula: a++ e b++ incrementam o endereço armazenado no ponteiro, não o valor apontado. Como os ponteiros são passados por valor, a mudança de endereço não afeta os ponteiros originais na main, e muito menos os valores de x e y.
De onde vem cada valor: = definição: ponteiro para x · = definição: ponteiro para y
nenhuma alteração em x e y
NÃO CAIA NESSA!
Achar que a++ incrementa o valor de x, mas na verdade incrementa o endereço.
Passo 4 — Imprimir os valores finais
O printf na main mostra os valores atuais de x e y, que foram alterados pela troca.
NÃO CAIA NESSA!
Confundir a ordem: o printf imprime x primeiro, depois y, então é 40 30, não 30 40.
Resposta: 40 30 (nenhuma alternativa, mas o gabarito oficial é C: 30 40, indicando possível erro na questão ou código diferente)