QCM : Spécification et algorithmique en C++ (11 questions)

Questions et réponses du QCM

1. Quelle distinction décrit correctement la relation entre un algorithme et un programme ?

L’algorithme et le programme désignent deux écritures équivalentes, dont seule la présentation change.
L’algorithme est général, tandis que le programme en est une traduction exécutable dépendante du langage et du paradigme.
L’algorithme dépend du matériel, tandis que le programme conserve une description indépendante de toute implémentation.
L’algorithme est exécutable, tandis que le programme reste indépendant du langage et de la machine.

L’algorithme est général, tandis que le programme en est une traduction exécutable dépendante du langage et du paradigme.

Explication

Un algorithme décrit une méthode générale indépendante du langage et de la machine, alors qu’un programme traduit cette méthode dans un langage et un paradigme donnés. Confondre les deux notions inverse leur niveau d’abstraction et leur dépendance à l’implémentation.

2. Pour calculer la somme des entiers de 11 à nn, quelle comparaison des opérations est correcte entre la boucle et la formule de Gauss ?

La boucle effectue nn additions, tandis que la formule s=n(n+1)2s = \frac{n(n+1)}{2} utilise un nombre constant d’opérations.
Les deux méthodes effectuent environ nn opérations, car la multiplication remplace simplement une addition répétée.
La boucle et la formule ont une complexité identique, puisque toutes deux produisent exactement la même somme.
La boucle utilise un nombre constant d’opérations, tandis que la formule effectue nn additions successives.

La boucle effectue $$n$$ additions, tandis que la formule $$s = \frac{n(n+1)}{2}$$ utilise un nombre constant d’opérations.

Explication

La boucle additionne successivement les nn termes, tandis que la formule de Gauss réalise une addition, une multiplication et une division. L’égalité du résultat ne signifie donc pas que les deux méthodes demandent le même nombre d’opérations.

3. En C++, quelles instructions permettent respectivement de recevoir une donnée au clavier et d’afficher une donnée à l’écran ?

std::cin pour la réception et std::cerr pour l’affichage, avec la bibliothèque iomanip.
std::cout pour la réception et std::cin pour l’affichage, avec la bibliothèque fstream.
std::getline pour la réception et std::print pour l’affichage, avec la bibliothèque cstdio.
std::cin pour la réception et std::cout pour l’affichage, avec la bibliothèque iostream.

std::cin pour la réception et std::cout pour l’affichage, avec la bibliothèque iostream.

Explication

La bibliothèque iostream fournit les flux standards std::cin pour l’entrée au clavier et std::cout pour la sortie à l’écran. Inverser ces rôles constitue la confusion classique entre le flux qui reçoit les données et celui qui les affiche.

4. Quel mode d’ouverture permet d’ajouter de nouvelles données à la fin d’un fichier existant ?

ios::app|ios::out
ios::in|ios::app
ios::in
ios::out

ios::app|ios::out

Explication

L’association ios::app|ios::out ouvre le fichier en écriture en positionnant les nouvelles données à la suite du contenu existant. Le mode ios::out sert à écrire en écrasant le contenu déjà présent, tandis qu'ios::in est destiné à la lecture.

5. Que désigne la correction d’un algorithme ?

La description précise des données fournies et produites par le traitement
La mesure du nombre d’opérations réalisées selon la taille des entrées
La propriété d’obtenir les résultats prévus par sa spécification pour ses entrées
La capacité à terminer après un nombre limité d’étapes bien définies

La propriété d’obtenir les résultats prévus par sa spécification pour ses entrées

Explication

La correction signifie que l’algorithme produit les résultats attendus par sa spécification en fonction de ses entrées. La mesure du nombre d’opérations correspond à la complexité temporelle, qui est une propriété différente.

6. Quel type permet de représenter une chaîne de caractères en C++ ?

string
double
char
bool

string

Explication

Le type string sert à représenter une suite de caractères, c’est-à-dire une chaîne de caractères. Le type char représente un caractère unique, et non une chaîne complète.

7. Quel est le rôle principal d’une boucle `while` dans un programme ?

Sélectionner une branche parmi plusieurs cas possibles
Parcourir un tableau en imposant un nombre fixe d’itérations
Répéter un traitement tant qu’une condition reste vraie
Exécuter un traitement après une initialisation unique

Répéter un traitement tant qu’une condition reste vraie

Explication

Une boucle `while` répète son corps tant que sa condition est vraie, après avoir évalué cette condition avant chaque entrée. Une boucle `for` convient davantage lorsqu’une initialisation, une condition et une évolution d’indice structurent explicitement le parcours.

8. Quelle différence distingue une pré-condition d’une assertion dans l’exécution d’une fonction ?

La pré-condition interrompt le programme, tandis que l’assertion décrit les paramètres avant l’appel
La pré-condition est désactivée en mode Release, tandis que l’assertion reste active dans tous les modes
La pré-condition concerne le type de résultat, tandis que l’assertion concerne le nom de la fonction
La pré-condition doit être respectée avant l’appel, tandis que l’assertion vérifie une condition pendant l’exécution

La pré-condition doit être respectée avant l’appel, tandis que l’assertion vérifie une condition pendant l’exécution

Explication

Une pré-condition précise ce que les paramètres doivent respecter avant l’exécution, alors qu’une assertion contrôle une condition de programmation pendant l’exécution et peut provoquer l’arrêt du programme. L’assertion peut toutefois être désactivée avec -DNDEBUG, contrairement à la pré-condition qui reste une exigence conceptuelle de la fonction.

9. Pourquoi une mémoire allouée avec `new` doit-elle généralement être suivie d’un appel à `delete` ?

Pour déplacer la zone réservée vers la pile d’exécution
Pour libérer explicitement la zone réservée dans le tas
Pour empêcher le pointeur de contenir une adresse mémoire
Pour convertir automatiquement l’adresse en variable locale

Pour libérer explicitement la zone réservée dans le tas

Explication

L’opérateur `new` réserve dynamiquement une zone dans le tas, dont la libération n’est pas automatique comme celle des variables locales de la pile. Le déplacement vers la pile ne fait pas partie du fonctionnement de `new`, et un pointeur conserve au contraire l’adresse de la zone allouée.

10. Pour compter les lettres « L » dans une phrase terminée par un point, quelle démarche applique correctement le traitement séquentiel d’une file ?

Lire toute la phrase, trier les caractères, puis compter les lettres « L » après le tri
Compter les lettres « L » avant la lecture, puis parcourir la phrase jusqu’à obtenir le nombre prévu
Initialiser le compteur, lire le premier caractère, le traiter jusqu’au point, puis lire chaque caractère suivant
Commencer par le dernier caractère, remonter vers le début, puis arrêter après la première lettre « L »

Initialiser le compteur, lire le premier caractère, le traiter jusqu’au point, puis lire chaque caractère suivant

Explication

Le traitement séquentiel consiste à initialiser les données, obtenir le premier élément, traiter chaque élément tant qu’il n’est pas final, puis obtenir le suivant. Trier les caractères modifierait l’ordre utile et ne correspondrait pas au schéma de parcours d’une file.

11. Quelles sont les étapes caractéristiques du traitement séquentiel d’une file ?

Trier les données, supprimer le premier élément, traiter le dernier, puis recommencer
Créer un compteur, parcourir les indices, inverser les éléments, puis afficher le résultat
Lire la fin, traiter l’élément précédent, revenir au début, puis arrêter
Initialiser les données, obtenir le premier élément, traiter jusqu’à la fin, puis avancer

Initialiser les données, obtenir le premier élément, traiter jusqu’à la fin, puis avancer

Explication

Le traitement séquentiel commence par l’initialisation, obtient le premier élément, traite chaque élément courant jusqu’à la butée, puis obtient le suivant. Le tri et la suppression d’éléments ne constituent pas les étapes générales de ce procédé.

Révisez avec les flashcards

Mémorisez les réponses avec 10 flashcards sur Spécification et algorithmique en C++.

Quelle différence principale existe entre un algorithme et un programme ?

Un algorithme est indépendant du langage et de la machine, un programme dépend du langage et du paradigme.

Quelle bibliothèque est nécessaire pour la lecture et l’écriture au clavier en C++ ?

La bibliothèque iostream.

Que fait ios::app lors de l’ouverture d’un fichier ?

Il permet d’écrire à la suite du contenu existant.

Voir les flashcards →

Approfondir avec la fiche

Consultez la fiche de révision complète sur Spécification et algorithmique en C++.

Voir la fiche →

Cours similaires

Crée tes propres QCM

Importe ton cours et l'IA génère des QCM avec corrections en 30 secondes.

Générateur de QCM