Geral Múltipla Escolha

Considere o seguinte programa escrito em C: #include <stdio.h> int main() { char ch1, ch2; printf("Entre com duas letras:\n"); scanf("%c %c", &ch1, &ch2); ch1 = ch2; ch2 = ch1; printf("ch1 = %c e ch2 = %c\n", ch1, ch2); return 0; } Após a execução desse trecho, suponha que o usuário tenha entrado com as letras 'p' e 'q'. Qual será exibido na tela?

Considere o seguinte programa escrito em C:
#include <stdio.h>

int main() {
char ch1, ch2;
printf("Entre com duas letras:\n");
scanf("%c %c", &ch1, &ch2);
ch1 = ch2;
ch2 = ch1;
printf("ch1 = %c e ch2 = %c\n", ch1, ch2);
return 0;
}

Após a execução desse trecho, suponha que o usuário tenha entrado com as letras 'p' e 'q'. Qual será exibido na tela?

  1. ch1 = p e ch2 = q
  2. ch1 = q e ch2 = p
  3. ch1 = p e ch2 = p
  4. ch1 = q e ch2 = q
  5. ch1 = &ch1 e ch2 = &ch2

Resolução completa

Explicação passo a passo

D
Alternativa D

Alternativa D - ch1 = q e ch2 = q

Análise do Código em C

Este problema exige traçar a execução passo a passo das variáveis para entender como os valores mudam durante a atribuição sequencial. O código tenta realizar uma troca de valores entre duas variáveis, mas falha por não utilizar uma variável temporária.

Passo a Passo da Execução

  1. Entrada (scanf):
  • O usuário digita p e q.
  • Variável ch1 recebe 'p'.
  • Variável ch2 recebe 'q'.
  • Estado atual: ch1 = 'p', ch2 = 'q'.
  1. Primeira Atribuição (ch1 = ch2):
  • O valor de ch2 (que é 'q') é copiado para ch1.
  • O valor anterior de ch1 ('p') é perdido.
  • Estado atual: ch1 = 'q', ch2 = 'q'.
  1. Segunda Atribuição (ch2 = ch1):
  • O valor atual de ch1 (que agora é 'q') é copiado para ch2.
  • Como ch1 já era 'q', nada muda efetivamente, mas a instrução garante que ch2 também seja 'q'.
  • Estado final: ch1 = 'q', ch2 = 'q'.
  1. Saída (printf):
  • O comando imprime os valores atuais das variáveis formatadas como caracteres (%c).
  • Resultado na tela: ch1 = q e ch2 = q.

Por que as outras alternativas estão incorretas?

  • Alternativa A: Seria correta se nenhuma atribuição ocorresse após a leitura, mas o código altera os valores.
  • Alternativa B: Descreveria um troca de valores (swap) bem-sucedida. Para isso funcionar, seria necessário usar uma variável auxiliar (ex: char aux = ch1; ch1 = ch2; ch2 = aux;). Sem ela, o primeiro valor original é sobrescrito antes de ser transferido para a segunda variável.
  • Alternativa C: Incorreta porque o último valor atribuído foi o de ch2 (o segundo digitado), não o primeiro.
  • Alternativa E: Impossível pois %c imprime o conteúdo do caractere, não o endereço de memória (que seria %p ou similar, e ainda assim exigiria o uso do operador &).

Portanto, a lógica do programa faz com que ambas as variáveis assumam o valor da segunda entrada.

Alternativa D.

Tem outra questão para resolver?

Resolver agora com IA

Mais questões de Geral

Ver mais Geral resolvidas

Tem outra questão de Geral?

Cole o enunciado, tire uma foto ou descreva o problema — a IA resolve com explicação completa em segundos.