Pular para o conteúdo principal

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

ProgramaçãoLinguagens de programação
Código
qg164404
Banca
FUNDATEC
Órgão
IF Sul - MG
Ano
2024
Nível
Superior
Cargo
Professor do Ensino Básico, técnico e Tecnológico: MCH-02 - Informática
Com base na declaração do registro na linguagem C abaixo, assinale a alternativa que corresponde a uma forma correta de atribuir valores aos campos do registro “pessoa”.Q29.png 191×128
  1. Apessoa(idade) = 45; pessoa(peso) = 78.5; pessoa(altura) = 1.71;
  2. Bpessoa.idade := 45; pessoa.peso := 78,5; pessoa.altura := 1,71;
  3. Cpessoa!idade := 45; pessoa!peso := 78.5; pessoa!altura := 1.71;
  4. Dpessoa.idade = 45; pessoa.peso = 78.5; pessoa.altura = 1.71;
  5. Epessoa(idade) <- 45; pessoa(peso) <- 78,5; pessoa(altura) <- 1,71;
Revelar gabarito e comentário

GabaritoD — pessoa.idade = 45; pessoa.peso = 78.5; pessoa.altura = 1.71;

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

Registros (structs) em C: acesso a campos

Gabarito: letra D. Em C, o acesso aos campos de um registro (struct) é feito com o operador ponto (.), e a atribuição de valor usa o operador de atribuição = — exatamente o que a alternativa D apresenta: pessoa.idade = 45; pessoa.peso = 78.5; pessoa.altura = 1.71;. As demais alternativas misturam sintaxes de outras linguagens (parênteses, :=, !, <-) ou usam vírgula como separador decimal, o que é inválido em C.

Um registro em C, também chamado de struct, é uma estrutura de dados heterogênea que agrupa campos de tipos possivelmente diferentes sob um mesmo nome. A declaração típica seria algo como struct pessoa { int idade; float peso; float altura; };, e a partir dela criamos uma variável do tipo struct pessoa pessoa;. Para acessar um campo dessa variável, usamos o operador ponto (.), que é o operador de acesso a membro de estrutura. A atribuição de valor a um campo segue a mesma sintaxe de qualquer variável: variavel.campo = valor;.

A razão de o operador ponto ser o escolhido é que ele indica ao compilador que estamos acessando um membro específico dentro da estrutura — é a forma canônica e universal em C para esse fim. O operador -> (seta) é usado apenas quando temos um ponteiro para a struct, não a struct diretamente. A atribuição com = é o operador de atribuição padrão da linguagem, presente em todas as expressões.

Na prática, se tivermos a declaração struct pessoa { int idade; float peso; float altura; }; e a variável struct pessoa pessoa;, o código correto para preencher os campos é:

pessoa.idade = 45;
pessoa.peso = 78.5;
pessoa.altura = 1.71;

Cada linha segue o padrão variavel.campo = valor;, com o ponto separando a variável do campo e o = realizando a atribuição. Os valores numéricos usam o ponto como separador decimal (padrão da linguagem C e da maioria das linguagens de programação).

A pegadinha desta questão é que a banca mistura sintaxes de outras linguagens para confundir o candidato. Por exemplo, := é o operador de atribuição de Pascal e Ada; ! é usado em linguagens como Clipper/Harbour para acesso a campos de registro; <- é o operador de atribuição de R e de pseudocódigo; e os parênteses () são usados para chamada de função, não para acesso a campos. Além disso, a vírgula como separador decimal é usada em português, mas em C o separador decimal é sempre o ponto.

Guarde a fronteira entre o que é sintaxe de C e o que é sintaxe de outras linguagens: é exatamente nela que as alternativas se dividem. O operador de acesso a campo de struct em C é o ponto (.), e a atribuição é feita com =.

Alternativa A — ❌ Incorreta

Usa parênteses para acessar os campos: pessoa(idade) = 45;. Em C, parênteses são usados para chamada de função, não para acesso a membros de struct. O acesso correto é com o operador ponto: pessoa.idade = 45;. Essa sintaxe lembra a de linguagens como Pascal, que usa pessoa.idade (com ponto), mas não parênteses para atribuição.

Alternativa B — ❌ Incorreta

Usa o operador := para atribuição: pessoa.idade := 45;. Em C, o operador de atribuição é =, não :=. O operador := é usado em linguagens como Pascal e Ada. Além disso, usa vírgula como separador decimal (78,5), o que é inválido em C — o separador decimal é o ponto (78.5).

Alternativa C — ❌ Incorreta

Usa o operador ! para acesso a campos: pessoa!idade := 45;. Em C, o operador ! é o operador de negação lógica, não de acesso a membros. O acesso a campos de struct em C é feito com o ponto (.). O operador ! para acesso a campos é usado em linguagens como Clipper/Harbour. Além disso, também usa := para atribuição, que não é o operador de C.

Alternativa D — ✅ Correta ⟵ GABARITO

Usa o operador ponto (.) para acessar os campos e o operador = para atribuição: pessoa.idade = 45; pessoa.peso = 78.5; pessoa.altura = 1.71;. Esta é exatamente a sintaxe correta em C para atribuir valores aos campos de uma struct. O ponto separa a variável do campo, e o = realiza a atribuição. Os valores numéricos usam o ponto como separador decimal, que é o padrão da linguagem.

Alternativa E — ❌ Incorreta

Usa parênteses para acessar os campos e o operador <- para atribuição: pessoa(idade) <- 45;. Em C, parênteses são para chamada de função, e o operador de atribuição é =, não <-. O operador <- é usado em R e em pseudocódigo. Além disso, usa vírgula como separador decimal (78,5), inválido em C.

A regra de ouro para esta questão: em C, o acesso a campo de struct é sempre com o operador ponto (.), e a atribuição é sempre com =. Qualquer outra combinação (parênteses, :=, !, <-, vírgula decimal) pertence a outra linguagem ou a pseudocódigo.

Gabarito: letra D

Link permanente: /questoes/qg164404