Pular para o conteúdo principal

Questão de Programação — Programação estruturada — FUNDATEC 2026

ProgramaçãoProgramação estruturada
Código
qg685257
Banca
FUNDATEC
Órgão
IFC-SC
Ano
2026
Nível
Superior
Cargo
Professor EBTT - Informática: Linguagens de Programação
Analise o seguinte programa escrito em linguagem C conforme o padrão ANSI C, no qual a modificação de valores é realizada por passagem por referência utilizando ponteiros:Imagem associada para resolução da questãoConsiderando a execução do programa apresentado, qual valor será exibido?
  1. A3
  2. B4
  3. C5
  4. D8
  5. E9
Revelar gabarito e comentário

GabaritoD — 8

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 D — a conta chega a 8 — alternativa D.

A ideia por trás

Em C, toda passagem de argumento para uma função é por valor: a função recebe uma cópia do valor e qualquer alteração nessa cópia não afeta a variável original. Para modificar a variável original, usamos ponteiros: passamos o endereço da variável, e a função, ao desreferenciar o ponteiro com o operador *, acessa e altera diretamente o conteúdo da memória original. Isso é chamado de passagem por referência.

Quando uma função recebe um ponteiro, o parâmetro é uma variável que guarda um endereço de memória. O operador * (desreferência) permite ler ou escrever no local apontado. Assim, *a = *a + *b significa: pegue o valor armazenado no endereço apontado por a, some com o valor no endereço apontado por b, e guarde o resultado no endereço de a. Como a aponta para a variável original, a alteração persiste após o retorno da função.

Esta questão testa exatamente esse comportamento: a função modifica recebe os endereços de x e y, e as operações dentro dela alteram os valores originais. O ponto crítico é acompanhar a sequência das operações, pois a segunda linha usa o valor já atualizado da primeira.

O que a questão dá

  • x inicializado com 3

  • y inicializado com 5

  • chamada modifica(&x, &y)

  • printf exibe x

O que queremos: o valor exibido pelo printf

Passo 1 — Executar a primeira linha da função

A primeira operação dentro de modifica é *a = *a + *b. Aqui, *a é o valor de x (3) e *b é o valor de y (5). Somamos 3 + 5 = 8 e guardamos esse resultado no endereço de x, ou seja, x agora vale 8.

Por que esta fórmula: A operação é uma atribuição com soma: o valor apontado por a recebe a soma do valor apontado por a com o valor apontado por b.

a=a+b*a = *a + *b

De onde vem cada valor: a*a = enunciado: x = 3 · b*b = enunciado: y = 5

a=3+5*a = 3 + 5
x=8x = \boxed{8}
NÃO CAIA NESSA!

Usar o valor de x como 3 na segunda linha, esquecendo que já foi atualizado.

Passo 2 — Executar a segunda linha da função

Agora a segunda operação é *b = *a - *b. Neste ponto, *a já vale 8 (o novo valor de x) e *b ainda vale 5 (o valor original de y). Calculamos 8 - 5 = 3 e guardamos no endereço de y, então y passa a valer 3.

Por que esta fórmula: É uma atribuição com subtração: o valor apontado por b recebe a diferença entre o valor apontado por a (já atualizado) e o valor apontado por b.

b=ab*b = *a - *b

De onde vem cada valor: a*a = passo 1: x = 8 · b*b = enunciado: y = 5

b=85*b = 8 - 5
y=3y = \boxed{3}
NÃO CAIA NESSA!

Usar o valor original de x (3) em vez do atualizado (8), resultando em -2.

Passo 3 — Ver o que o printf exibe

Após a função retornar, a main executa printf("%d", x). Como x foi modificado para 8, o valor exibido é 8.

8\boxed{8}
NÃO CAIA NESSA!

Achar que x continua 3, ignorando a passagem por referência.

Resposta: 8 — alternativa D

Link permanente: /questoes/qg685257