Questão nº 33

Questão de Tecnologia da Informação · FCC TRT17 2022 (nº 33)

FCC2022Analista Judiciário - Área Apoio Especializado - Especialidade Tecnologia da InformaçãoTecnologia da Informação
Gabarito: Bver comentário ↓

Considere o programa em linguagem C abaixo, que será executado em condições ideais.

#include <stdio.h>
#include <conio.h>
#define MAX 7
int vet[MAX] = {2, 5, 9, 14, 22, 31, 44};
int comeco, fim, meio, chave;
void main(void) {

I
{

printf("\nForneça o elemento a ser procurado (-1 finaliza): ");
scanf("%d",&chave);

if (chave == -1) 

II ;

comeco = 0;
fim = MAX-1;

III{

     meio = (comeco + fim)/2;
     if (chave < vet[meio])
         fim = meio -1;
     else
         comeco = meio +1;
} while (vet[meio] != chave && comeco <= fim);
if (vet[meio] == chave)
  printf("\nO elemento está na posição %d", meio);
else
  printf("\nNão existe o elemento procurado no vetor");

}
printf("\nFim do programa");
}

Para que o programa funcione corretamente de acordo com a lógica prevista em um algoritmo de pesquisa em vetor ordenado, as lacunas I, II e III devem ser preenchidas, correta e respectivamente, por:

Resposta comentada

Gabarito Alternativa B

A pesquisa binária é um método eficiente para encontrar um item em um vetor (ou array) que já está ordenado. Ela funciona dividindo repetidamente o vetor ao meio e eliminando a metade onde o item não pode estar, até encontrar o item ou determinar que ele não existe.

  • (A) Incorreta: A sintaxe chave <> -1 não é válida em C (o correto seria chave != -1). Além disso, repeat não é uma palavra-chave da linguagem C.
  • (B) Correta:
    • I (for (;;)): Esta é a forma padrão em C para criar um loop infinito (equivalente a while(1)). É ideal para o cenário onde o programa deve continuar pedindo um elemento para procurar até que uma condição de saída (como -1) seja explicitamente encontrada e tratada com um break.
    • II (break): Quando o usuário digita -1, a intenção é sair do loop infinito (for (;;)) e finalizar o programa. O comando break faz exatamente isso, encerrando o loop mais interno em que ele está contido.
    • III (do): A estrutura do-while é perfeita para a lógica da pesquisa binária. Ela garante que o bloco de código (onde meio é calculado e o elemento é comparado) seja executado pelo menos uma vez antes que a condição de continuação (vet[meio] != chave && comeco <= fim) seja verificada. Isso é crucial para a pesquisa binária, pois o cálculo de meio e a primeira comparação são sempre necessários.
  • (C) Incorreta: Embora while (1) seja uma forma válida de loop infinito, o comando continue em II faria com que o programa apenas pulasse para a próxima iteração do loop externo (pedindo um novo número), em vez de finalizar o programa quando -1 é digitado. repeat também não é C.
  • (D) Incorreta: A palavra-chave true não é padrão em C sem a inclusão de stdbool.h (e mesmo assim, 1 é mais comum para loops infinitos). stop não é um comando válido em C.
  • (E) Incorreta: O for (int i=0; i<MAX; i++) é um loop de iterações fixas, o que não se encaixa na necessidade de repetir a pesquisa indefinidamente até o usuário decidir parar. O continue em II também estaria incorreto, como explicado na alternativa C.

Fonte: FCC TRT17 2022 Analista Judiciário - Área Apoio Especializado - Especialidade Tecnologia da Informação (Caderno Tipo 001). Reproduzida para fins de estudo.

Continue estudando

Estudar é izi

Pratique milhares de questões como esta, de graça, com explicação e gamificação no Quizinho.

Estudar de graça no Quizinho