Questão nº 33
Questão de Tecnologia da Informação · FCC TRT17 2022 (nº 33)
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:
- Awhile (chave <> -1)
– break- repeat
- Bfor (;;)
– break- do
- Cwhile (1)
– continue - repeat - Dwhile (true)
– stop- do
- Efor (int i=0; i<MAX; i++) – continue - do
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 <> -1não é válida em C (o correto seriachave != -1). Além disso,repeatnão é uma palavra-chave da linguagem C. - (B) Correta:
- I (
for (;;)): Esta é a forma padrão em C para criar um loop infinito (equivalente awhile(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 umbreak. - II (
break): Quando o usuário digita-1, a intenção é sair do loop infinito (for (;;)) e finalizar o programa. O comandobreakfaz exatamente isso, encerrando o loop mais interno em que ele está contido. - III (
do): A estruturado-whileé perfeita para a lógica da pesquisa binária. Ela garante que o bloco de código (ondemeioé 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 demeioe a primeira comparação são sempre necessários.
- I (
- (C) Incorreta: Embora
while (1)seja uma forma válida de loop infinito, o comandocontinueemIIfaria 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.repeattambém não é C. - (D) Incorreta: A palavra-chave
truenão é padrão em C sem a inclusão destdbool.h(e mesmo assim,1é mais comum para loops infinitos).stopnã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. OcontinueemIItambé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.