Alternativa B
Para resolver esta questão de programação em C, é necessário entender como funcionam estruturas (structs), arrays e a indexação baseada em zero.
Análise Detalhada
A estrutura definida no código é a seguinte:
typedef struct { ... } Aluno;: Define um tipo chamado Aluno.Aluno turma[40];: Cria um array chamado turma capaz de armazenar 40 objetos do tipo Aluno.
Cada objeto Aluno possui um campo notas, que é um array de 3 floats.
Passo 1: Identificando os Índices
Em C, a contagem de posições em arrays começa sempre em zero. Portanto:
- Para acessar o quinto aluno, precisamos usar o índice 4 ($5 - 1 = 4$).
- Para acessar a segunda nota, precisamos usar o índice 1 ($2 - 1 = 1$).
Passo 2: Operadores de Acesso
- O operador
. (ponto) é utilizado para acessar membros de uma estrutura quando temos a instância direta dela. - O operador
-> (seta) é utilizado apenas quando estamos acessando membros através de um ponteiro para a estrutura. Como turma é um array direto e não um ponteiro, usamos o ponto.
Passo 3: Montando a Expressão
- Acessamos o quinto aluno:
turma[4] - Acessamos o membro
notas desse aluno: turma[4].notas - Acessamos a segunda posição do array de notas:
turma[4].notas[1] - Realizamos a atribuição:
turma[4].notas[1] = 8.5;
Comparativo das Alternativas
| Alternativa | Análise | Status |
|---|
| A | Usa o nome do tipo Aluno ao invés da variável turma. Índice errado (3ª nota). | Incorreta |
| B | Uso correto do índice 4 (5º aluno), operador . e índice 1 (2ª nota). | Correta |
| C | Usa o operador -> incorretamente (não é um ponteiro). | Incorreta |
| D | Índice 5 refere-se ao 6º aluno. Índice 2 refere-se à 3ª nota. | Incorreta |
| E | Tenta acessar notas diretamente em turma sem passar pelo índice do aluno. | Incorreta |
Conclusão
A sintaxe correta para manipular dados dentro de um array de estruturas segue a lógica de Array [Índice Estrutura].Membro [Índice Membro]. A alternativa B aplica exatamente essa lógica com os índices corretos para "quinto aluno" e "segunda nota".