Encontrar o Maior Número Entre N Números

CBeginner
Pratique Agora

Introdução

Neste laboratório, aprenderemos como escrever um programa em C que encontra o maior número entre um conjunto de números fornecidos pelo usuário. Este é um exercício de programação fundamental que ensina vários conceitos importantes:

  • Receber entrada do usuário
  • Trabalhar com loops
  • Fazer comparações
  • Rastrear o valor máximo através de iterações

O algoritmo que implementaremos é simples: pediremos ao usuário quantos números ele deseja inserir e, em seguida, iteraremos por cada número de entrada. À medida que processamos cada número, o compararemos com o maior número atual que encontramos até agora, atualizando nossa variável "maior" quando necessário.

Ao final deste laboratório, você terá criado um programa que pode lidar com qualquer número de entradas e identificar de forma confiável o maior valor entre elas.

Criando nosso Arquivo de Programa

Vamos começar criando um novo arquivo C para nosso programa. No WebIDE, criaremos um arquivo chamado main.c no diretório do projeto.

  1. Navegue até o diretório do projeto no painel do terminal:

    cd ~/project
    
  2. Agora, no WebIDE, clique no botão "Novo Arquivo" no painel Explorer do lado esquerdo, ou clique com o botão direito no painel Explorer e selecione "Novo Arquivo".

  3. Nomeie o arquivo main.c e pressione Enter.

  4. Vamos começar adicionando a estrutura básica do nosso programa C ao arquivo recém-criado:

    #include <stdio.h>
    
    int main() {
        // We will add our code here
    
        return 0;
    }
    
  5. Salve o arquivo pressionando Ctrl+S ou selecionando Arquivo > Salvar no menu.

Esta estrutura inclui:

  • A diretiva #include <stdio.h> que traz a biblioteca Standard Input/Output, que precisamos para funções como printf() e scanf()
  • A função main(), que é o ponto de entrada de qualquer programa C
  • Uma declaração return 0; que indica a execução bem-sucedida do nosso programa

O arquivo de cabeçalho stdio.h fornece funções para operações de entrada e saída. A função main() é onde a execução do nosso programa começa, e return 0; sinaliza ao sistema operacional que nosso programa foi encerrado sem erros.

Manipulando a Entrada do Usuário

Em seguida, precisamos configurar nosso programa para interagir com o usuário. Precisaremos:

  1. Declarar variáveis para armazenar nossos dados
  2. Solicitar ao usuário o número de elementos
  3. Configurar o processo para receber o primeiro número

Vamos atualizar nosso código em main.c:

#include <stdio.h>

int main() {
    // Declare variables
    int n;          // To store the number of elements
    float big;      // To store the largest number found

    // Prompt the user for the number of elements
    printf("Enter the number of elements you wish to find the greatest element of: ");
    scanf("%d", &n);

    // Check if the input is valid
    if (n <= 0) {
        printf("Please enter a positive number of elements.\n");
        return 1;  // Exit with error code
    }

    // Prompt for the first number and initialize 'big' with it
    printf("Enter %d numbers:\n", n);
    printf("Enter element 1: ");
    scanf("%f", &big);

    return 0;
}

Vamos entender o que adicionamos:

  1. Declaração de Variáveis:

    • int n: Uma variável inteira para armazenar quantos números o usuário deseja inserir
    • float big: Uma variável de ponto flutuante para armazenar o maior número encontrado
  2. Entrada do Usuário para Contagem:

    • Usamos printf() para exibir uma solicitação pedindo o número de elementos
    • Usamos scanf("%d", &n) para ler um inteiro do usuário e armazená-lo em n
    • O & antes de n é o operador "endereço de", que diz ao scanf() onde armazenar o valor de entrada
  3. Validação da Entrada:

    • Verificamos se o usuário inseriu um número positivo
    • Caso contrário, exibimos uma mensagem de erro e saímos do programa com o código de retorno 1 (indicando erro)
  4. Entrada do Primeiro Número:

    • Solicitamos ao usuário que insira o primeiro número
    • Armazenamos este primeiro número em big pois, neste ponto, é o único (e, portanto, o maior) número que temos

Quando você executar este código, ele pedirá o número de elementos e, em seguida, o primeiro elemento, mas ainda não fará nada com essa informação. Na próxima etapa, adicionaremos a lógica para processar todos os números e encontrar o maior.

Encontrando o Maior Número

Agora, implementaremos a lógica principal do nosso programa - encontrar o maior número entre as entradas. Usaremos um loop for para:

  1. Iterar pelos números restantes (do 2º ao n-ésimo)
  2. Comparar cada número com nosso valor atual maior
  3. Atualizar o valor maior se encontrarmos um número maior

Atualize seu arquivo main.c com o seguinte código:

#include <stdio.h>

int main() {
    // Declare variables
    int n;          // To store the number of elements
    float big;      // To store the largest number found

    // Prompt the user for the number of elements
    printf("Enter the number of elements you wish to find the greatest element of: ");
    scanf("%d", &n);

    // Check if the input is valid
    if (n <= 0) {
        printf("Please enter a positive number of elements.\n");
        return 1;  // Exit with error code
    }

    // Prompt for the first number and initialize 'big' with it
    printf("Enter %d numbers:\n", n);
    printf("Enter element 1: ");
    scanf("%f", &big);

    // Process remaining numbers using a loop
    for (int i = 2; i <= n; i++) {
        float current;  // Variable to store the current number

        // Prompt for the current number
        printf("Enter element %d: ", i);
        scanf("%f", &current);

        // Compare with the current largest
        if (current > big) {
            big = current;  // Update 'big' if current number is larger
        }
    }

    // Display the result
    printf("The largest of the %d numbers is %.2f\n", n, big);

    return 0;
}

Vamos entender o novo código que adicionamos:

  1. Loop For:

    • Começamos de i = 2 porque já processamos o primeiro elemento
    • Continuamos até processarmos n elementos
    • Para cada iteração, incrementamos i em 1
  2. Processar Cada Número:

    • Declaramos uma nova variável current para armazenar cada número de entrada
    • Solicitamos ao usuário que insira o elemento atual
    • Lemos a entrada usando scanf()
  3. Encontrando o Máximo:

    • Comparamos a entrada atual current com nosso maior valor atual big
    • Se current for maior, atualizamos big para armazenar este novo valor maior
    • Caso contrário, deixamos big inalterado e passamos para a próxima entrada
  4. Exibir Resultado:

    • Após processar todas as entradas, exibimos o maior número encontrado
    • O especificador de formato %.2f exibe o número de ponto flutuante com 2 casas decimais

Esta implementação segue um padrão comum para encontrar o valor máximo em uma sequência:

  1. Inicialize o máximo com o primeiro valor
  2. Itere pelos valores restantes
  3. Atualize o máximo sempre que encontrarmos um valor maior
  4. No final, a variável contém o maior valor da sequência

Compilação e Teste do Programa

Agora que escrevemos nosso programa C completo, precisamos compilá-lo e executá-lo para ver se ele funciona corretamente.

  1. Para compilar o programa, execute o seguinte comando no terminal:

    gcc ~/project/main.c -o ~/project/main
    

    Este comando invoca o GNU C Compiler (gcc) para compilar nosso arquivo fonte main.c e criar um arquivo executável chamado main. A flag -o especifica o nome do arquivo de saída.

  2. Se não houver erros em seu código, o comando será executado sem nenhuma saída. Isso significa que seu programa foi compilado com sucesso.

  3. Se você vir alguma mensagem de erro, leia-as cuidadosamente para entender o que deu errado. Erros comuns incluem:

    • Ponto e vírgula ausentes (;)
    • Chaves incompatíveis ({ e })
    • Nomes ou tipos de variáveis incorretos
    • Instruções de inclusão ausentes ou incorretas
  4. Depois de compilar o programa com sucesso, execute-o usando:

    ~/project/main
    
  5. Teste seu programa com diferentes entradas. Aqui está um exemplo de caso de teste:

    Entrada:

    Enter the number of elements you wish to find the greatest element of: 5
    Enter 5 numbers:
    Enter element 1: 12.5
    Enter element 2: 9.7
    Enter element 3: 25.8
    Enter element 4: 15.2
    Enter element 5: 4.9
    

    Saída esperada:

    The largest of the 5 numbers is 25.80
    
  6. Tente outro caso de teste com números negativos:

    Entrada:

    Enter the number of elements you wish to find the greatest element of: 3
    Enter 3 numbers:
    Enter element 1: -10.5
    Enter element 2: -2.3
    Enter element 3: -15.7
    

    Saída esperada:

    The largest of the 3 numbers is -2.30
    
  7. Teste também com um único número:

    Entrada:

    Enter the number of elements you wish to find the greatest element of: 1
    Enter 1 numbers:
    Enter element 1: 42.0
    

    Saída esperada:

    The largest of the 1 numbers is 42.00
    

Se o seu programa produzir as saídas esperadas para esses casos de teste, parabéns! Você implementou com sucesso um programa para encontrar o maior número entre N números de entrada.

Este processo de compilação e teste é uma parte essencial do desenvolvimento de software. Ele permite que você verifique se seu código funciona conforme o esperado e ajuda a identificar e corrigir quaisquer bugs ou problemas.

Resumo

Neste laboratório, implementamos com sucesso um programa C que encontra o maior número entre um conjunto de números fornecidos pelo usuário. Vamos revisar o que realizamos:

  1. Compreensão do Problema: Identificamos a necessidade de processar uma coleção de números e determinar qual deles é o maior.

  2. Estrutura do Programa: Criamos um programa C bem estruturado com as inclusões adequadas, declarações de variáveis e um fluxo lógico.

  3. Manipulação da Entrada do Usuário: Implementamos código para obter entrada dos usuários, incluindo validação para garantir dados adequados.

  4. Implementação do Algoritmo: Usamos um algoritmo simples, mas eficaz, para encontrar o valor máximo:

    • Inicializar com o primeiro valor
    • Comparar cada valor subsequente com o máximo atual
    • Atualizar o máximo quando um valor maior é encontrado
  5. Teste e Execução: Compilamos nosso programa e o testamos com várias entradas para verificar se ele funciona corretamente.

Este laboratório demonstra conceitos fundamentais de programação que são valiosos em muitos contextos:

  • Execução sequencial
  • Declarações condicionais
  • Estruturas de loop
  • Rastreamento de variáveis
  • Operações de entrada/saída

O Código Completo

Aqui está o código completo que desenvolvemos neste laboratório:

#include <stdio.h>

int main() {
    // Declare variables
    int n;          // To store the number of elements
    float big;      // To store the largest number found

    // Prompt the user for the number of elements
    printf("Enter the number of elements you wish to find the greatest element of: ");
    scanf("%d", &n);

    // Check if the input is valid
    if (n <= 0) {
        printf("Please enter a positive number of elements.\n");
        return 1;  // Exit with error code
    }

    // Prompt for the first number and initialize 'big' with it
    printf("Enter %d numbers:\n", n);
    printf("Enter element 1: ");
    scanf("%f", &big);

    // Process remaining numbers using a loop
    for (int i = 2; i <= n; i++) {
        float current;  // Variable to store the current number

        // Prompt for the current number
        printf("Enter element %d: ", i);
        scanf("%f", &current);

        // Compare with the current largest
        if (current > big) {
            big = current;  // Update 'big' if current number is larger
        }
    }

    // Display the result
    printf("The largest of the %d numbers is %.2f\n", n, big);

    return 0;
}

Você pode estender este programa de várias maneiras:

  • Encontrar tanto o maior quanto o menor número
  • Calcular a média de todos os números
  • Ordenar os números em ordem crescente ou decrescente
  • Lidar com estruturas de dados mais complexas, como arrays

Esperamos que este laboratório tenha ajudado você a entender os fundamentos da programação em C e do pensamento algorítmico. Esses conceitos formam a base para tópicos de programação mais avançados e técnicas de resolução de problemas.