Matemática Múltipla Escolha

Arquivos textuais são aqueles cujo conteúdo é formado somente por strings e podem ser abertos por editores de texto (do tipo “bloco de notas”. Para essa questão, analise o código a seguir:

Arquivos textuais são aqueles cujo conteúdo é formado somente por strings e podem ser abertos por editores de texto (do tipo “bloco de notas”. Para essa questão, analise o código a seguir:

#include <stdio.h>

int main() {
    FILE *arq;
    long pos;
    char caract;

    arq = fopen("contendo.txt", "r");
    if(arq==NULL) {
        printf("Erro de abertura do arquivo.");
        return 0;
    }

    fseek(arq, 0, SEEK_END);
    pos = ftell(arq);

    for(i=pos-1; i>=0; i--)
    {
        fseek(arq, i, SEEK_SET);
        carac = fgetc(arq);
        printf("%c", caract);
    }

    return 0;
}
  1. O programa faz a impressão do arquivo em ordem inversa, eliminando-se o último caractere. O trecho com as linhas fseek(arq, 0, SEEK_END); e ftell(arq); servem para coletar o tamanho do arquivo.
  2. O programa faz a impressão do arquivo em ordem correta. O trecho com as linhas fseek(arq, 0, SEEK_END); e ftell(arq); está mais logo seguido é feito um novo posicionamento no arquivo.
  3. O programa faz a impressão do arquivo em ordem inversa. O trecho com as linhas fseek(arq, 0, SEEK_END); e ftell(arq); está mais logo seguido é feito um novo posicionamento no arquivo.
  4. O programa faz a impressão do arquivo em ordem correta. O trecho com as linhas fseek(arq, 0, SEEK_END); e ftell(arq); servem para coletar o tamanho do arquivo.
  5. O programa faz a impressão do arquivo em ordem inversa. O trecho com as linhas fseek(arq, 0, SEEK_END); e ftell(arq); servem para coletar o tamanho do arquivo.

Resolução completa

Explicação passo a passo

E
Alternativa E

Alternativa E

Análise da Questão

Esta questão aborda o uso de funções de manipulação de arquivos na linguagem de programação C, especificamente o comando fseek e ftell para navegar dentro de um arquivo binário/textual.

Para entender a resposta, precisamos decompor o funcionamento do código linha a linha:

1. Identificação do Tamanho do Arquivo

Antes de imprimir, o programa precisa saber quantos caracteres existem para poder contar de trás para frente.

  • fseek(arq, 0, SEEK_END);: Move o "cursor" (ponteiro) do arquivo para o final dele.
  • pos = ftell(arq);: Pergunta ao sistema operacional qual é a posição atual do cursor. Como ele está no final, essa posição corresponde exatamente ao tamanho do arquivo em bytes.

Essas duas linhas formam uma técnica comum para obter o tamanho de um arquivo sem precisar ler todo o seu conteúdo previamente.

2. Impressão Inversa

Com o tamanho (pos) conhecido, o código utiliza um laço for para percorrer o arquivo de trás para frente:

  • for(i=pos-1; i>=0; i--): Inicia a contagem no índice imediatamente anterior ao tamanho total (pois os índices começam em 0) e vai diminuindo até chegar a 0.
  • fseek(arq, i, SEEK_SET);: Em cada volta do laço, move o cursor para a posição exata do caractere desejado.
  • fgetc(arq) e printf: Leitura e exibição do caractere.

Como o índice i diminui a cada passo, a saída é gerada na ordem inversa.

Comparativo das Alternativas

CaracterísticaDescrição CorretaObservação nas Alternativas
Ordem de ImpressãoInversa (do fim para o início)Alternativas A, C e E indicam isso corretamente. B e D estão erradas.
Função de fseek/ftellColetar o tamanho do arquivoAlternativas A e E citam corretamente. C diz que "está a mais".
Eliminação de DadosNenhum dado é perdidoA alternativa A afirma erroneamente que o último caractere é eliminado.

Por que a E é a correta?
A alternativa E sintetiza perfeitamente o comportamento do código:

  1. Confirma que a impressão ocorre em ordem inversa.
  2. Identifica corretamente que o bloco inicial serve para coletar o tamanho do arquivo, permitindo o cálculo do índice inicial do loop.

As outras alternativas falham em detalhes cruciais: a A alega que o último caractere é eliminado (o que não ocorre, pois o loop começa em pos-1), e a C sugere desnecessariamente que a obtenção do tamanho é supérflua (o que tornaria o loop impossível de calcular).

Tem outra questão para resolver?

Resolver agora com IA

Mais questões de Matemática

Ver mais Matemática resolvidas

Tem outra questão de Matemática?

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