Exercices C/C++ pour débutants

Trouver la deuxième plus grande valeur d'un tableau en C et C++

Dans cette leçon, vous allez trouver la deuxième plus grande valeur distincte d'un tableau en un seul parcours, sans trier.

Introduction

Le moyen le plus évident de trouver la deuxième plus grande valeur est de trier le tableau, mais cela prend du temps inutilement. Il suffit en fait de suivre les deux plus grandes valeurs en un seul parcours, en ignorant les valeurs égales au maximum.

Points importants

  • Activez les avertissements du compilateur (compiler warnings) et corrigez-les tous.
  • Comprenez bien le type et la durée de vie (lifetime) de chaque valeur.
  • Vérifiez toujours les données d'entrée et les limites des indices de tableau.

Exemples de code C et C++

C
Exécuter →
main.c
#include <limits.h>
#include <stdio.h>
int main(void) {
    int values[] = {7, 23, 12, 23, 9}, first = INT_MIN, second = INT_MIN;
    // Maintain the two largest distinct values.
    for (int i = 0; i < 5; ++i) { int value = values[i]; if (value > first) { second = first; first = value; } else if (value > second && value != first) second = value; }
    printf("second=%d\n", second);
}
Résultat de l’exécution
second=12
C++
Exécuter →
main.cpp
#include <iostream>
#include <limits>
#include <vector>
int main() {
    std::vector values{7, 23, 12, 23, 9}; int first = std::numeric_limits<int>::min(), second = first;
    // Maintain the two largest distinct values.
    for (int value : values) { if (value > first) { second = first; first = value; } else if (value > second && value != first) second = value; }
    std::cout << "second=" << second << '\n';
}
Résultat de l’exécution
second=12

Comparaison entre C et C++

Les variables first et second commencent à INT_MIN, la plus petite valeur du type int. Quand une valeur dépasse first, l'ancienne valeur de first descend dans second. Quand une valeur se situe entre les deux et diffère de first, seule second est mise à jour. Le 23 qui apparaît deux fois ne fausse donc pas le résultat, et la deuxième plus grande valeur est 12.

C

C utilise de petites fonctions procédurales et montre ouvertement comment les données sont représentées en mémoire.

C++

C++ permet toujours de travailler à bas niveau, mais ajoute des types de bibliothèque et des abstractions plus sûres.

Exercices d'approfondissement

Exécutez les deux versions, puis modifiez le code pour observer la différence de sécurité qu'apporte chaque langage.

  • Testez des entrées invalides et des valeurs limites.
  • Compilez avec les options -Wall -Wextra -Wpedantic pour activer davantage d'avertissements.
  • Placez les déclarations communes dans un fichier d'en-tête et l'implémentation dans un fichier séparé.

S'entraîner avec un défi

Utilisez le contenu de cette leçon pour résoudre un vrai problème. Chaque défi s'exécute dans le navigateur, avec des tests instantanés et une revue par l'IA.

Tous les défis