Trouver le plus grand nombre parmi N nombres

CBeginner
Pratiquer maintenant

Introduction

Dans ce laboratoire (lab), nous apprendrons à écrire un programme en langage C qui permet de trouver le plus grand nombre parmi un ensemble de nombres fournis par l'utilisateur. Il s'agit d'un exercice de programmation fondamental qui aborde plusieurs concepts importants :

  • La prise de données d'entrée de l'utilisateur
  • Le travail avec des boucles (loops)
  • La réalisation de comparaisons
  • Le suivi de la valeur maximale au cours des itérations

L'algorithme que nous allons implémenter est simple : nous demanderons à l'utilisateur combien de nombres il souhaite saisir, puis nous parcourrons chaque nombre saisi. Au fur et à mesure que nous traitons chaque nombre, nous le comparerons avec le plus grand nombre que nous avons trouvé jusqu'à présent, et nous mettrons à jour notre variable « largest » si nécessaire.

À la fin de ce laboratoire, vous aurez créé un programme capable de gérer n'importe quel nombre de données d'entrée et d'identifier de manière fiable la plus grande valeur parmi elles.

Création de notre fichier de programme

Commençons par créer un nouveau fichier C pour notre programme. Dans l'éditeur WebIDE, nous allons créer un fichier nommé main.c dans le répertoire du projet.

  1. Accédez au répertoire du projet dans le panneau du terminal :

    cd ~/project
    
  2. Maintenant, dans l'éditeur WebIDE, cliquez sur le bouton "Nouveau fichier" dans le panneau de l'explorateur à gauche, ou cliquez avec le bouton droit dans le panneau de l'explorateur et sélectionnez "Nouveau fichier".

  3. Nommez le fichier main.c et appuyez sur Entrée.

  4. Commençons par ajouter la structure de base de notre programme C au fichier nouvellement créé :

    #include <stdio.h>
    
    int main() {
        // Nous allons ajouter notre code ici
    
        return 0;
    }
    
  5. Enregistrez le fichier en appuyant sur Ctrl+S ou en sélectionnant Fichier > Enregistrer dans le menu.

Cette structure comprend :

  • La directive #include <stdio.h> qui inclut la bibliothèque Standard Input/Output (Bibliothèque standard d'entrée/sortie), dont nous avons besoin pour des fonctions telles que printf() et scanf()
  • La fonction main(), qui est le point d'entrée de tout programme C
  • Une instruction return 0; qui indique que l'exécution de notre programme s'est terminée avec succès

Le fichier d'en-tête stdio.h fournit des fonctions pour les opérations d'entrée et de sortie. La fonction main() est là où commence l'exécution de notre programme, et return 0; signale au système d'exploitation que notre programme s'est terminé sans erreurs.

Gestion de l'entrée utilisateur

Ensuite, nous devons configurer notre programme pour interagir avec l'utilisateur. Nous devrons :

  1. Déclarer des variables pour stocker nos données
  2. Demander à l'utilisateur le nombre d'éléments
  3. Configurer le processus pour recevoir le premier nombre

Mettons à jour notre code dans 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;
}

Comprenons ce que nous avons ajouté :

  1. Déclaration de variables :

    • int n : Une variable entière pour stocker combien de nombres l'utilisateur souhaite saisir
    • float big : Une variable à virgule flottante pour stocker le plus grand nombre trouvé
  2. Entrée utilisateur pour le nombre d'éléments :

    • Nous utilisons printf() pour afficher une invite demandant le nombre d'éléments
    • Nous utilisons scanf("%d", &n) pour lire un entier saisi par l'utilisateur et le stocker dans n
    • Le symbole & avant n est l'opérateur "adresse de", qui indique à scanf() où stocker la valeur saisie
  3. Validation de l'entrée :

    • Nous vérifions si l'utilisateur a saisi un nombre positif
    • Sinon, nous affichons un message d'erreur et nous quittons le programme avec le code de retour 1 (indiquant une erreur)
  4. Entrée du premier nombre :

    • Nous demandons à l'utilisateur d'entrer le premier nombre
    • Nous stockons ce premier nombre dans big car, à ce stade, c'est le seul nombre (et donc le plus grand) que nous avons

Lorsque vous exécutez ce code, il demandera le nombre d'éléments puis le premier élément, mais il ne fera rien avec ces informations pour l'instant. Dans l'étape suivante, nous ajouterons la logique pour traiter tous les nombres et trouver le plus grand d'entre eux.

Recherche du plus grand nombre

Maintenant, nous allons implémenter la logique principale de notre programme - trouver le plus grand nombre parmi les entrées. Nous allons utiliser une boucle for pour :

  1. Parcourir les nombres restants (du 2ème au nème)
  2. Comparer chaque nombre avec notre plus grande valeur actuelle
  3. Mettre à jour la plus grande valeur si nous trouvons un nombre plus grand

Mettez à jour votre fichier main.c avec le code suivant :

#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;
}

Comprenons le nouveau code que nous avons ajouté :

  1. Boucle For :

    • Nous commençons à i = 2 car nous avons déjà traité le premier élément
    • Nous continuons jusqu'à ce que nous ayons traité n éléments
    • À chaque itération, nous incrémentons i de 1
  2. Traitement de chaque nombre :

    • Nous déclarons une nouvelle variable current pour stocker chaque nombre saisi
    • Nous demandons à l'utilisateur d'entrer l'élément actuel
    • Nous lisons l'entrée à l'aide de scanf()
  3. Recherche du maximum :

    • Nous comparons l'entrée actuelle current avec notre plus grande valeur actuelle big
    • Si current est plus grand, nous mettons à jour big pour stocker cette nouvelle plus grande valeur
    • Sinon, nous laissons big inchangée et passons à l'entrée suivante
  4. Affichage du résultat :

    • Après avoir traité toutes les entrées, nous affichons le plus grand nombre trouvé
    • Le spécificateur de format %.2f affiche le nombre à virgule flottante avec 2 décimales

Cette implémentation suit un modèle courant pour trouver la valeur maximale dans une séquence :

  1. Initialiser le maximum avec la première valeur
  2. Parcourir les valeurs restantes
  3. Mettre à jour le maximum chaque fois que nous trouvons une valeur plus grande
  4. À la fin, la variable contient la plus grande valeur de la séquence

Compilation et test du programme

Maintenant que nous avons écrit notre programme C complet, nous devons le compiler et l'exécuter pour voir s'il fonctionne correctement.

  1. Pour compiler le programme, exécutez la commande suivante dans le terminal :

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

    Cette commande invoque le compilateur C GNU (gcc) pour compiler notre fichier source main.c et créer un fichier exécutable nommé main. Le flag -o spécifie le nom du fichier de sortie.

  2. S'il n'y a pas d'erreurs dans votre code, la commande s'exécutera sans afficher de message. Cela signifie que votre programme s'est compilé avec succès.

  3. Si vous voyez des messages d'erreur, lisez-les attentivement pour comprendre ce qui a mal fonctionné. Les erreurs courantes incluent :

    • Des points-virgules manquants (;)
    • Des accolades non appariées ({ et })
    • Des noms ou des types de variables incorrects
    • Des instructions include manquantes ou incorrectes
  4. Une fois que vous avez compilé le programme avec succès, exécutez-le en utilisant :

    ~/project/main
    
  5. Testez votre programme avec différentes entrées. Voici un exemple de cas de test :

    Entrée :

    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
    

    Sortie attendue :

    The largest of the 5 numbers is 25.80
    
  6. Essayez un autre cas de test avec des nombres négatifs :

    Entrée :

    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
    

    Sortie attendue :

    The largest of the 3 numbers is -2.30
    
  7. Testez également avec un seul nombre :

    Entrée :

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

    Sortie attendue :

    The largest of the 1 numbers is 42.00
    

Si votre programme produit les sorties attendues pour ces cas de test, félicitations ! Vous avez réussi à implémenter un programme pour trouver le plus grand nombre parmi N nombres saisis.

Ce processus de compilation et de test est une partie essentielle du développement logiciel. Il vous permet de vérifier que votre code fonctionne comme prévu et vous aide à identifier et corriger tout bogue ou problème.

Résumé

Dans ce laboratoire, nous avons réussi à implémenter un programme C qui trouve le plus grand nombre parmi un ensemble de nombres fournis par l'utilisateur. Revoyons ce que nous avons accompli :

  1. Compréhension du problème : Nous avons identifié le besoin de traiter une collection de nombres et de déterminer lequel est le plus grand.

  2. Structure du programme : Nous avons créé un programme C bien structuré avec des inclusions appropriées, des déclarations de variables et un flux logique.

  3. Gestion des entrées utilisateur : Nous avons implémenté du code pour obtenir des entrées de la part des utilisateurs, y compris une validation pour garantir des données correctes.

  4. Implémentation de l'algorithme : Nous avons utilisé un algorithme simple mais efficace pour trouver la valeur maximale :

    • Initialisation avec la première valeur
    • Comparaison de chaque valeur suivante avec le maximum actuel
    • Mise à jour du maximum lorsqu'une valeur plus grande est trouvée
  5. Test et exécution : Nous avons compilé notre programme et l'avons testé avec diverses entrées pour vérifier qu'il fonctionne correctement.

Ce laboratoire démontre des concepts de programmation fondamentaux qui sont précieux dans de nombreux contextes :

  • Exécution séquentielle
  • Instructions conditionnelles
  • Structures de boucle
  • Suivi des variables
  • Opérations d'entrée/sortie

Le code complet

Voici le code complet que nous avons développé dans ce laboratoire :

#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;
}

Vous pouvez étendre ce programme de plusieurs façons :

  • Trouver à la fois le plus grand et le plus petit nombre
  • Calculer la moyenne de tous les nombres
  • Trier les nombres par ordre croissant ou décroissant
  • Gérer des structures de données plus complexes comme les tableaux

Nous espérons que ce laboratoire vous a aidé à comprendre les bases de la programmation en C et la pensée algorithmique. Ces concepts forment la base pour des sujets plus avancés et des techniques de résolution de problèmes.