QCM : Algorithmique et programmation en C (27 questions)

Questions et réponses du QCM

1. Une équipe choisit un outil qui prépare la traduction complète du programme avant son lancement, puis doit refaire cette traduction après chaque modification. Quel type d’outil utilise-t-elle ?

Un interpréteur
Un processeur
Un éditeur de code
Un compilateur

Un compilateur

Explication

Un compilateur traduit le programme entier une fois pour toutes, avant l’exécution. L’interpréteur traduit au fil de l’exécution, l’éditeur sert à écrire le code et le processeur exécute les instructions.

2. Quel rôle remplit un langage informatique lorsqu’un développeur veut faire agir une machine ?

Il permet de donner des instructions à la machine, chacune correspondant à une action du processeur.
Il conserve des données dans la machine sans décrire d’action à effectuer.
Il désigne la tâche finale que la machine doit accomplir pour l’utilisateur.
Il exécute matériellement les instructions en remplaçant le processeur.

Il permet de donner des instructions à la machine, chacune correspondant à une action du processeur.

Explication

Un langage informatique sert à donner des instructions à la machine, et chaque instruction correspond à une action du processeur. Le stockage des données, la tâche globale et l’exécution matérielle relèvent d’autres notions.

3. Pour automatiser le calcul de factures, une développeuse écrit plusieurs instructions consécutives destinées à réaliser cette tâche. Comment cet ensemble est-il appelé ?

Un programme
Une instruction
Un langage informatique
Un processeur

Un programme

Explication

Un programme est une suite consécutive d’instructions destinée à effectuer une tâche donnée, comme le calcul de factures. Un langage exprime les instructions, une instruction est une unité isolée et le processeur les exécute.

4. Qui a conçu le langage C en 1972 aux Bell Laboratories afin d’écrire le système d’exploitation UNIX ?

Kernighan et Ritchie
Brian Kernighan
L’organisme ANSI
Dennis Ritchie

Dennis Ritchie

Explication

Dennis Ritchie a conçu le C en 1972 aux Bell Laboratories pour écrire UNIX. Kernighan et Ritchie sont associés à la définition rigoureuse publiée en 1978, tandis que l’ANSI a lancé la normalisation en 1983.

5. Une équipe veut choisir le C pour un logiciel généraliste, proche des opérations de la machine et partageable entre matériels en respectant le standard ANSI-C. Quelles caractéristiques décrivent ce choix ?

Universel, proche de la machine, modulaire et portable sous ANSI-C
Spécialisé, proche de la machine, modulaire et dépendant du matériel
Universel, éloigné de la machine, monolithique et portable sous ANSI-C
Spécialisé, éloigné de la machine, monolithique et dépendant du matériel

Universel, proche de la machine, modulaire et portable sous ANSI-C

Explication

Le C est universel, proche de la machine et modulaire; sa portabilité est assurée lorsqu’il respecte le standard ANSI-C. La spécialisation, l’éloignement de la machine, l’absence de modularité ou la dépendance matérielle déforment ces caractéristiques.

6. Dans un projet C organisé en plusieurs fichiers sources, quel est le résultat de la traduction de chaque fichier par le compilateur ?

Un programme exécutable complet
Un fichier ou module objet
Une bibliothèque standard
Un fichier d’en-tête

Un fichier ou module objet

Explication

Le compilateur traduit chaque fichier source en un fichier ou module objet. L’exécutable complet est produit lors de l’édition de liens ; un fichier d’en-tête n’est pas le résultat de cette traduction.

7. Un fichier source C a été compilé en module objet, mais ce module appelle une fonction de la bibliothèque standard et dépend aussi d’un autre module objet. Pourquoi ne peut-il pas être exécuté seul ?

Il doit être réécrit comme programme source unique
Il lui manque des éléments à réunir lors de l’édition de liens
Il doit être prétraité après son exécution
Il doit d’abord être converti en fichier d’en-tête

Il lui manque des éléments à réunir lors de l’édition de liens

Explication

Un module objet peut ne pas contenir les fonctions de bibliothèque ou les autres modules dont il dépend ; l’édition de liens les réunit pour former l’exécutable. La compilation ne rend donc pas le module directement exécutable, et le prétraitement ne fournit pas toutes les fonctions manquantes.

8. Pour construire un exécutable C à partir de sources qui incluent des fichiers d’en-tête et utilisent des fonctions de bibliothèque, quelle séquence d’étapes faut-il suivre ?

Prétraitement, compilation en modules objets, puis édition de liens
Compilation en modules objets, édition de liens, puis prétraitement
Prétraitement, édition de liens, puis compilation en modules objets
Compilation en modules objets, puis exécution sans édition de liens

Prétraitement, compilation en modules objets, puis édition de liens

Explication

La construction suit le prétraitement, la compilation des fichiers sources en modules objets, puis l’édition de liens avec les modules et fonctions de bibliothèque nécessaires. L’édition de liens ne précède pas la production des objets, et l’exécutable ne se forme pas en omettant cette étape.

9. Un programme C contient plusieurs fonctions, mais aucune fonction nommée main. Que peut-on conclure sur le démarrage de son exécution ?

Le programme démarre lors de la compilation de ses fonctions
Le programme ne possède pas la fonction obligatoire qui déclenche son exécution
Le programme démarre automatiquement dans la première fonction définie
Le programme démarre à l’inclusion du fichier d’en-tête principal

Le programme ne possède pas la fonction obligatoire qui déclenche son exécution

Explication

La fonction main est obligatoire et son exécution déclenche automatiquement le début du programme. Une autre fonction définie en premier ne remplace pas ce point de départ, et ni l’inclusion d’un en-tête ni la compilation ne déclenchent l’exécution.

10. Dans un programme, une valeur doit être conservée et utilisée pendant l’exécution. Quelle démarche respecte la notion de variable en C ?

Déclarer seulement un type après la première utilisation de la valeur
Écrire un nom dans le code sans déclaration et lui attribuer la valeur
Définir une directive de préprocesseur pour stocker toute valeur d’exécution
Déclarer avant l’utilisation un nom et un type pour stocker la valeur

Déclarer avant l’utilisation un nom et un type pour stocker la valeur

Explication

Une variable stocke une valeur utilisée pendant l’exécution et doit être déclarée avant son utilisation avec un nom et un type. Une directive de préprocesseur ne remplace pas cette déclaration, et déclarer après la première utilisation ne respecte pas la règle.

11. Une équipe choisit un identificateur C pour une variable. Lequel respecte les règles de composition et de caractère initial ?

total prix
total-prix
2total
_total2

_total2

Explication

Un identificateur peut contenir des lettres, des chiffres et le caractère souligné, mais doit commencer par une lettre ou un souligné ; _total2 respecte ces conditions. 2total commence par un chiffre, tandis que le trait d’union et l’espace ne font pas partie des caractères autorisés.

12. Dans un programme, que détermine le type de base associé à une variable ?

La valeur actuelle et le nom donné à la variable
Les valeurs possibles et l’espace mémoire réservé
Le nombre de variables et les opérations disponibles
Le nom de la variable et son emplacement dans le programme

Les valeurs possibles et l’espace mémoire réservé

Explication

Le type de base détermine les valeurs que la variable peut prendre et le nombre d’octets qui lui est réservé ; une variable de base ne contient qu’une valeur à la fois. La valeur actuelle, le nom et le nombre de variables ne définissent pas ce rôle.

13. Une variable doit représenter des nombres de 0 à 250, sans valeur négative. Quel type entier présenté convient à cette plage ?

unsigned short
char
unsigned int
unsigned char

unsigned char

Explication

La plage de unsigned char va de 0 à 255, elle couvre donc les valeurs demandées. char admet des valeurs négatives, unsigned short a une plage plus large, et la plage de unsigned int dépend du codage.

14. Quelle taille mémoire est associée au type double parmi les types réels présentés ?

2 octets
8 octets
4 octets
10 octets

8 octets

Explication

Le type double est présenté comme un réel codé sur 8 octets. float est codé sur 4 octets, long double sur 10 octets, tandis que 2 octets correspond à certains types entiers.

15. Un programmeur veut définir une constante Pi sans type déclaré, puis une constante Limite explicitement typée. Quelle déclaration respecte ces deux choix ?

#define Pi 3.14 et const int Limite = 10
const float Pi = 3.14 et #define Limite 10
const float Pi = 3.14 et const int Limite = 10
#define Pi 3.14 et #define Limite 10

#define Pi 3.14 et const int Limite = 10

Explication

La directive #define associe une valeur à une constante sans lui donner de type, tandis que const déclare une constante typée. Les choix qui inversent ces rôles attribuent un type à Pi ou retirent son type à Limite.

16. Après évaluation, que fournit une expression en C ?

Une suite de valeurs
Une nouvelle déclaration
Un opérateur sans résultat
Une seule valeur

Une seule valeur

Explication

Une expression peut être une valeur, une variable ou une opération, et elle fournit une seule valeur après son évaluation. Une déclaration ou un opérateur pris isolément ne décrit pas ce résultat.

17. Dans l’expression c+s+nc + s + n, où c est de type char, s de type short et n de type long, vers quels types les opérandes sont-ils convertis avant l’addition selon les règles usuelles ?

c et s en double, puis les opérandes en long
c en short, s en int, puis les opérandes en long
c et s en long, puis les opérandes en int
c et s en int, puis les opérandes en long

c et s en int, puis les opérandes en long

Explication

char et short sont d’abord convertis en int ; ensuite, la hiérarchie usuelle entraîne la conversion vers le type le plus fort présent, ici long. Convertir long vers int inverse cette hiérarchie, et double n’est pas requis ici.

18. Un programme calcule 7/27 / 2 avec deux opérandes entiers. Quel résultat obtient-il en C ?

3
3,5
4
1

3

Explication

Lorsque les deux opérandes sont entiers, la division fournit un quotient entier : la partie fractionnaire de 7/27 / 2 est écartée, ce qui donne 3. 3,5 correspondrait à un quotient réel, 4 à un arrondi, et 1 au reste.

19. Une variable entière reçoit le résultat réel 6,8 lors d’une affectation. Quelle conséquence découle de la conversion vers le type de la variable cible ?

La partie entière et la partie décimale sont stockées séparément
La valeur est convertie en entier et sa partie fractionnaire est perdue
La variable devient réelle et conserve la valeur 6,8
La valeur est arrondie à 7 avant d’être stockée

La valeur est convertie en entier et sa partie fractionnaire est perdue

Explication

Lors d’une affectation, la valeur est convertie au type de la variable située à gauche ; une cible entière moins précise peut donc entraîner une perte d’information. La cible ne change pas de type, et la conversion décrite ne garantit pas un arrondi au plus proche.

20. Dans un programme C, `a` et `b` sont des entiers, tandis que `x` et `y` sont des réels. Quelle expression peut utiliser l’opérateur modulo sans enfreindre sa contrainte de type ?

`a % b`
`a / x`
`a == b`
`x % y`

`a % b`

Explication

En C, `%` effectue un modulo et ses opérandes doivent être des entiers. `x % y` est erroné car les opérandes sont réels, tandis que `/` et `==` sont respectivement une division et une comparaison.

21. En C, la comparaison `9 < 4` est évaluée. Quelle valeur numérique produit-elle ?

5
1
0
-5

0

Explication

Une comparaison fausse produit la valeur numérique 0 en C, tandis qu’une comparaison vraie produit 1. La différence entre les opérandes n’est pas la valeur renvoyée par l’opérateur de comparaison.

22. Dans l’expression `0 && fonction()`, la valeur du premier opérande suffit à déterminer le résultat. Que se passe-t-il lors de l’évaluation ?

`fonction()` est évaluée deux fois
`fonction()` est évaluée et son résultat est utilisé
`fonction()` n’est pas évaluée
`fonction()` est évaluée seulement si elle renvoie zéro

`fonction()` n’est pas évaluée

Explication

Avec `&&`, un premier opérande faux suffit à fixer le résultat à faux, donc le second opérande n’est pas évalué. Évaluer systématiquement le second opérande méconnaît le court-circuit, et le court-circuit de `||` intervient dans la situation opposée.

23. Une variable `i` vaut 6 au départ. Après l’évaluation de `k = i++`, quelle paire de valeurs obtient-on pour `k` et `i` ?

`k` vaut 6 et `i` vaut 7
`k` vaut 7 et `i` vaut 7
`k` vaut 6 et `i` vaut 6
`k` vaut 7 et `i` vaut 8

`k` vaut 6 et `i` vaut 7

Explication

Avec `i++`, la valeur initiale de `i` est affectée à `k` avant l’incrémentation : `k` vaut donc 6, puis `i` devient 7. La valeur 7 dans `k` correspondrait à `++i`, qui incrémente avant l’affectation.

24. Quel fichier d’en-tête faut-il inclure en C pour utiliser les fonctions standard `printf` et `scanf` ?

`stdlib.h`
`stdio.h`
`string.h`
`math.h`

`stdio.h`

Explication

`stdio.h` déclare notamment les fonctions standard d’entrées-sorties `printf` et `scanf`. `string.h` concerne la manipulation des chaînes, `math.h` les fonctions mathématiques et `stdlib.h` d’autres fonctions générales.

25. Un appel `printf` fournit trois expressions après sa chaîne de format. Combien de spécificateurs de format cette chaîne doit-elle contenir ?

Un
Quatre
Deux
Trois

Trois

Explication

Le nombre de spécificateurs de format doit être égal au nombre d’expressions fournies : trois expressions exigent donc trois spécificateurs. La chaîne de format elle-même n’est pas une expression à compter parmi les valeurs représentées.

26. Un programme doit afficher la valeur d’une variable de type `unsigned int` en notation hexadécimale. Quel spécificateur de `printf` convient ?

`%o`
`%d`
`%x`
`%u`

`%x`

Explication

`%x` affiche un entier en notation hexadécimale, y compris la valeur entière fournie ici. `%u` correspond à l’affichage non signé, `%o` à l’octal et `%d` à l’entier décimal relatif.

27. Un programme lit un entier `n` au clavier avec `scanf`. Quelle forme transmet l’adresse de `n` afin que la valeur lue puisse lui être affectée ?

`*n`
`&n`
`n`
`%d`

`&n`

Explication

`scanf` reçoit l’adresse de la variable à modifier, indiquée en préfixant son nom par `&`, donc `&n`. Fournir simplement `n` passe une valeur au lieu de son adresse; `%d` indique le format et `*n` n’est pas la notation demandée.

Révisez avec les flashcards

Mémorisez les réponses avec 64 flashcards sur Algorithmique et programmation en C.

Que permet un langage informatique de donner à une machine ?

Des instructions.

Qu’est-ce qu’un programme destiné à effectuer une tâche donnée ?

Une suite consécutive d’instructions.

Comment un compilateur traduit-il un programme ?

Il traduit le programme entier une fois pour toutes.

Voir les flashcards →

Approfondir avec la fiche

Consultez la fiche de révision complète sur Algorithmique et programmation 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