Para um vetor A de 50 números inteiros, escrever um programa em C que determine o maior e o segundo maior elemento desse vetor. Assumir que todos os elementos são distintos.

Passo 1

O enunciado pede: dado um vetor A de 50 números inteiros, escrever um programa em C que determine o maior e o segundo maior elemento desse vetor. Informações dadas que devemos usar: o vetor tem exatamente 50 elementos e todos os elementos são distintos (ou seja, não há empates entre valores). O que precisamos entregar exatamente: os dois maiores elementos do vetor — primeiro o maior (maior valor) e depois o segundo maior (o segundo maior valor). Não é pedido o índice, apenas os valores.

Passo 2

Escolha do método (explicação básica, sem jargões complicados): vamos fazer uma única passada pelo vetor mantendo duas variáveis que guardam os dois maiores valores encontrados até agora — chamarei de max1 (maior) e max2 (segundo maior). Esse método é simples, rápido (complexidade linear \mathcal{O}(n) com n=50) e fácil de implementar na prova sem necessidade de memória extra além do próprio vetor.

Passo 3

Por que esse método funciona (a ideia, passo a passo conceitual):
  • Começamos definindo max1 e max2 usando os dois primeiros elementos do vetor, comparando-os para saber qual é maior e qual é menor entre os dois.
  • Depois percorremos o restante do vetor (dos índices 2 até 49, no caso de 50 elementos). Para cada elemento atual x:
    • Se x > max1, então x vira o novo max1 e o antigo max1 passa a ser max2.
    • Caso contrário, se x > max2, então x vira o novo max2.
  • Como os elementos são distintos, não precisamos nos preocupar com empates (igualdade). Esse esquema garante que, ao final, max1 e max2 serão de fato o maior e o segundo maior valores do vetor.

Passo 4

Detalhe importante sobre inicialização (muito comum errar na prova): ao inicializar max1 e max2 com os dois primeiros elementos do vetor fazemos:
  • comparar A[0] e A[1];
  • se A[0] > A[1] então max1 = A[0] e max2 = A[1];
  • caso contrário max1 = A[1] e max2 = A[0].
    Isso evita problemas quando todos os números são negativos — pois não precisamos usar valores artificiais como “menos infinito”. Inicializar com os primeiros elementos é a forma mais segura e direta quando sabemos que o vetor tem pelo menos 2 elementos (aqui tem 50, então está ok).

Passo 5

Explicando linha a linha (conceitos que você pode explicar na prova se pedirem):
  • Vetor/array: um bloco de memória com índices de 0 a 49 para 50 elementos. A leitura é feita com um laço for que incrementa o índice.
  • Laço/loop: percorre todos os elementos; aqui usaremos um for que começa em i=2 depois de inicializar usando os dois primeiros elementos.
  • Comparações e atribuições simples: usamos operadores > para comparar inteiros e = para atribuir valores a variáveis.
  • Impressão: usamos printf para mostrar os resultados.

Passo 6

Exemplo pequeno para treinar a ideia (mental): suponha vetor A=[3, 7, 2, 9, 5] (só para entender):
  • Inicialização com 3 e 7: fica max1=7, max2=3.
  • Olhando 2: não é maior que 7 nem que 3 → nada muda.
  • Olhando 9: 9>7 max2=7, max1=9.
  • Olhando 5: 5>7? não. 5>max2(7)? não. Fim. Resultado max1=9, max2=7.
    Esse exemplo confirma a lógica.

Passo 7

Resumo do algoritmo pronto para implementar na prova:
  • Ler 50 inteiros para o vetor A.
  • Inicializar max1 e max2 comparando A[0] e A[1].
  • Para i de 2 até 49: aplicar as comparações descritas no Passo 4.
  • Ao final, imprimir max1 e max2.

Resposta

#include <stdio.h>

int main(void) {
    int A[50];
    int i;
    /* Ler 50 inteiros */
    for (i = 0; i < 50; i++) {
        if (scanf("%d", &A[i]) != 1) return 1; /* leitura simples, termina em caso de erro */
    }

    /* Inicializar max1 e max2 com os dois primeiros elementos, ordenando-os */
    int max1, max2;
    if (A[0] > A[1]) {
        max1 = A[0];
        max2 = A[1];
    } else {
        max1 = A[1];
        max2 = A[0];
    }

    /* Percorrer o restante do vetor e atualizar max1 e max2 */
    for (i = 2; i < 50; i++) {
        if (A[i] > max1) {
            max2 = max1;
            max1 = A[i];
        } else if (A[i] > max2) {
            max2 = A[i];
        }
    }

    /* Imprimir resultados */
    printf("Maior: %d\n", max1);
    printf("Segundo maior: %d\n", max2);

    return 0;
}

Exercícios relacionados