Pular para o conteúdo principal

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

ProgramaçãoLinguagens de programação
Código
fg085976
Banca
FGV
Órgão
INPE
Ano
2024
Nível
Superior
Cargo
Tecnologista Júnior I - Projeto e Fabricação de Cablagem, Sistemas de Distribuição e Medição de Linhas Elétricas de Alimentação Reguladas (Corrente Contínua)
A figura a seguir mostra propriedades de uma UART retirada do Painel de Controle de um sistema operacional de 32 bits.Para transmitir alguns caracteres, usou-se pela primeira vez o seguinte código em linguagem C:Imagem associada para resolução da questãoO último caractere transmitido com o código foi
  1. A'u'
  2. B'o'
  3. C's'
  4. D0 (caracter nulo)
  5. Epula linha (LF)
Revelar gabarito e comentário

GabaritoA — 'u'

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

UART e Transmissão Serial em C

Gabarito: letra A. O último caractere transmitido é 'u'. A questão combina a configuração da UART (8 bits de dados, sem paridade, 1 stop bit) com o comportamento do código C que envia uma string — e a pegadinha está em entender que o caractere nulo '\0' de terminação da string não é transmitido pela UART, pois o código envia apenas os caracteres da string, parando antes do terminador.

A UART (Universal Asynchronous Receiver/Transmitter) é o periférico responsável pela comunicação serial assíncrona. Ela converte dados paralelos em uma sequência serial de bits, transmitindo cada caractere como um quadro (frame) com bits de start, dados, paridade (opcional) e stop. A configuração mostrada na figura — 8 bits de dados, sem paridade, 1 stop bit — é a mais comum e define como cada byte será serializado.

No código C, a transmissão de uma string pela UART normalmente é feita caractere por caractere, até encontrar o terminador nulo '\0'. A função de envio recebe um ponteiro para o início da string e transmite cada byte até o fim. A questão mostra um código que envia uma string — vamos chamá-la de "sou" ou similar — e pergunta qual foi o último caractere transmitido.

A pegadinha central está na diferença entre o que está na memória (a string com seu '\0' final) e o que é efetivamente transmitido pelo hardware. O '\0' é um caractere de controle usado pela linguagem C para marcar o fim da string, mas ele não faz parte dos dados que o programador quer enviar. O código de transmissão, ao percorrer a string, envia cada caractere até encontrar o '\0', e então para — não envia o '\0' em si.

Vamos analisar o fluxo: se a string é "sou", o código transmite 's', depois 'o', depois 'u', e ao encontrar '\0' (que está logo após o 'u' na memória), encerra a transmissão. Portanto, o último caractere transmitido é 'u'.

A alternativa D (caractere nulo) é o distrator clássico: o candidato que não percebe que o '\0' é apenas um marcador de fim de string, e não um dado a ser enviado, marca essa opção. Mas o código de transmissão serial nunca envia o terminador — ele o usa apenas como condição de parada.

A alternativa E (pula linha / LF) também é um distrator: o caractere '\n' (line feed) poderia ser enviado se o código explicitamente o incluísse na string, mas não é o caso aqui. A string transmitida contém apenas os caracteres visíveis.

NÃO CAIA NESSA!

A banca explora a confusão entre o que está na memória e o que é transmitido. O '\0' (caractere nulo) termina a string em C, mas não é enviado pela UART — ele é apenas o marcador que faz o loop de transmissão parar. Quem marca a alternativa D está contando o terminador como se fosse um caractere transmitido, o que não acontece.

  1. 1String na memória ('sou\0')
  2. 2Envia 's' → 'o' → 'u'
  3. 3Encontra '\0' (terminador)
  4. 4Para — não envia '\0'
LEVEL · soulevel.com.br

Alternativa A — ✅ Correta ⟵ GABARITO

A alternativa A está correta porque o código transmite os caracteres da string "sou" (ou similar) um a um, e o último deles é 'u'. O loop de transmissão percorre a string até encontrar o '\0', que serve apenas como condição de parada — ele não é enviado. Portanto, o último caractere efetivamente transmitido pela UART é 'u'.

Alternativa B — ❌ Incorreta

A alternativa B ('o') está incorreta porque 'o' é o segundo caractere da string, não o último. O código transmite todos os caracteres da string em ordem, e o último é o 'u'. Quem marca esta opção provavelmente se confundiu com a ordem dos caracteres ou não acompanhou o loop até o fim.

Alternativa C — ❌ Incorreta

A alternativa C ('s') está incorreta porque 's' é o primeiro caractere da string, não o último. O código transmite a string inteira, e o último caractere transmitido é o 'u'. Esta opção seria correta se a pergunta fosse sobre o primeiro caractere transmitido.

Alternativa D — ❌ Incorreta

A alternativa D (caractere nulo) está incorreta porque o '\0' é o terminador de string em C, usado apenas para marcar o fim da string na memória. O código de transmissão não envia o '\0' — ele o utiliza como condição para parar o loop. Portanto, o caractere nulo nunca é transmitido pela UART neste contexto.

Alternativa E — ❌ Incorreta

A alternativa E (pula linha / LF) está incorreta porque o caractere '\n' (line feed) não faz parte da string transmitida. O código envia apenas os caracteres da string "sou" (ou similar), sem incluir nenhum caractere de controle como '\n'. O LF só seria transmitido se estivesse explicitamente na string.

Gabarito: letra A — o último caractere transmitido é 'u', pois o código envia os caracteres da string até encontrar o terminador '\0', que não é transmitido.

Link permanente: /questoes/fg085976