Questão de Arquitetura de Software — Software — Fundação FAPEC 2021
Arquitetura de Software›Software
Código
qq634574
Banca
Fundação FAPEC
Órgão
PC-MS
Ano
2021
Nível
Superior
Cargo
FAPEC - - Perito Criminal - Área 01 (Análise de Sistemas, Engenharia da Computação e Ciências da Computação)
A linguagem C está entre as mais conhecidas e utilizadas dentre as linguagens procedurais. Observe o código a seguir, escrito na linguagem C em conformidade com qualquer padrão ISO.#include <studio.h>struct data {int arr[2];};void initialize(int foo[], struct data bar) {foo[0] = bar.arr[0] = 0;}int main(void) {int v[2] = {2};struct data d = {{1}};initialize(v,d);printf("%d %d\n", v[0], d.arr[0]);}Ao compilar e executar este código, é possível afirmar que:
Aocorrerá um erro de compilação.
Bocorrerá um erro de execução.
Cserão exibidos os valores 0 e 0.
Dserão exibidos os valores 0 e 1.
Eserão exibidos os valores 2 e 1.
Revelar gabarito e comentário▾
GabaritoD — serão exibidos os valores 0 e 1.
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”.
Análise do código C
Gabarito: D. Ao analisar a lógica do código (desconsiderando o erro de digitação no cabeçalho #include <studio.h>, que deveria ser <stdio.h>), a função initialize recebe o vetor v por referência (decai a ponteiro) e a struct d por valor (cópia). Assim, a alteração foo[0] = 0 modifica v[0] do main, mas bar.arr[0] = 0 só modifica a cópia local, não afetando d.arr[0]. Portanto, após a chamada, v[0] vale 0 e d.arr[0] permanece 1. O printf exibe 0 1.
NÃO CAIA NESSA!
A banca insere o erro #include <studio.h> (ao invés de <stdio.h>) para tentar confundir o candidato com a alternativa A (erro de compilação). Contudo, o gabarito oficial ignora esse erro e testa o conhecimento de passagem de parâmetros. Em provas reais, atente-se: a banca pode considerar que o código é compilável mesmo com o erro, ou pode esperar que você perceba o erro e marque A. Nesta questão, a opção D foi a considerada correta.
1Vetor v: passado por referência
2Struct d: passada por valor (cópia)
3foo[0]=0 altera v[0] do main
4bar.arr[0]=0 só altera a cópia
5Saída: v[0]=0, d.arr[0]=1
LEVEL · soulevel.com.br
Alternativa A — ❌ Incorreta
Afirma que ocorrerá erro de compilação. Embora o código contenha #include <studio.h> (header inexistente), a banca desconsiderou esse erro na elaboração do gabarito. Portanto, para fins da questão, assume-se que o código compila.
Alternativa B — ❌ Incorreta
Não há erro de execução. O código executa normalmente e imprime dois números.
Alternativa C — ❌ Incorreta
Implicaria que ambos os valores se tornam 0, mas a struct não é alterada.
Alternativa D — ✅ Correta ⟵ GABARITO
Conforme explicado: v[0] vira 0 (passagem por referência) e d.arr[0] continua 1 (passagem por valor). Saída: 0 1.
Alternativa E — ❌ Incorreta
Mostraria 2 1 (valores iniciais), mas o vetor é modificado pela função.