QCM : Bases de la programmation en C (31 questions)

Questions et réponses du QCM

1. Quel ensemble de compétences constitue l’objectif de l’UE IN3020 ?

Apprendre le langage C, la mémoire manuelle, la compilation séparée, les pointeurs, l’allocation dynamique, les données, les fichiers et la modularité
Apprendre la compilation, la programmation web, l’analyse statistique, la sécurité informatique et le traitement d’images
Apprendre le langage C, la conception d’interfaces, les bases de données relationnelles, les réseaux et l’administration de systèmes
Apprendre les algorithmes, la programmation en assembleur, la conception de processeurs et la gestion de systèmes distribués

Apprendre le langage C, la mémoire manuelle, la compilation séparée, les pointeurs, l’allocation dynamique, les données, les fichiers et la modularité

Explication

L’UE vise notamment la maîtrise du C, de la gestion manuelle de la mémoire, des pointeurs, de l’allocation dynamique, des fichiers et de la programmation modulaire. La conception d’interfaces et l’administration de systèmes ne font pas partie des compétences énumérées pour cette UE.

2. Quelle répartition des coefficients distingue les évaluations de l’UE IN3020 ?

Le contrôle continu écrit et le contrôle terminal écrit ont chacun un coefficient 2, tandis que la seconde chance a un coefficient 4
Le contrôle terminal écrit a un coefficient 4, tandis que le contrôle continu écrit et la seconde chance ont chacun un coefficient 1
Le contrôle continu écrit et la seconde chance ont chacun un coefficient 2, tandis que le contrôle terminal écrit a un coefficient 4
Le contrôle continu écrit a un coefficient 4, le contrôle terminal écrit un coefficient 2 et la seconde chance un coefficient 2

Le contrôle continu écrit et le contrôle terminal écrit ont chacun un coefficient 2, tandis que la seconde chance a un coefficient 4

Explication

Les deux épreuves écrites ordinaires ont chacune un coefficient 2, alors que le contrôle terminal écrit de seconde chance a un coefficient 4. La répartition qui attribue le coefficient 4 au contrôle continu inverse le coefficient associé à la seconde chance.

3. Lorsqu’un programme C démarre, quelle fonction constitue son point d’entrée ?

La fonction start, qui initialise les variables du programme
La fonction printf, qui affiche le premier résultat
La fonction include, qui prépare les fichiers d’en-tête
La fonction main, qui est exécutée en premier

La fonction main, qui est exécutée en premier

Explication

La fonction principale d’un programme C se nomme main et constitue son point d’entrée à l’exécution. La directive d’inclusion prépare des fichiers d’en-tête, mais ne joue pas le rôle de fonction principale.

4. Que demande au préprocesseur la directive #include dans un programme C ?

D’inclure le contenu d’un fichier d’en-tête, tel que stdio.h ou math.h
De déclarer la fonction principale qui lance l’exécution du programme
De remplacer un symbole par une valeur définie dans le programme
De calculer une racine carrée à partir d’une expression numérique

D’inclure le contenu d’un fichier d’en-tête, tel que stdio.h ou math.h

Explication

La directive #include demande au préprocesseur d’inclure le contenu d’un fichier d’en-tête, par exemple stdio.h ou math.h. La substitution d’un symbole par une valeur relève plutôt d’une macro-constante définie avec #define.

5. Dans un bloc C, quel rôle jouent le point-virgule et les accolades ?

Le point-virgule marque le début d’une fonction et les accolades terminent le programme
Le point-virgule délimite un bloc d’instructions et les accolades terminent chaque instruction
Le point-virgule termine une instruction et les accolades délimitent un bloc d’instructions
Le point-virgule sépare les fichiers inclus et les accolades indiquent les commentaires

Le point-virgule termine une instruction et les accolades délimitent un bloc d’instructions

Explication

En C, une instruction se termine par un point-virgule, tandis que les accolades encadrent des blocs d’instructions. L’idée que les accolades terminent chaque instruction confond le rôle des deux signes.

6. Pourquoi le mot-clé int ne peut-il pas servir de nom à une variable en C ?

Parce que les noms de variables doivent être écrits entre accolades
Parce qu'int est une directive réservée au préprocesseur pour inclure un fichier
Parce que les identificateurs doivent obligatoirement contenir au moins un chiffre
Parce que les mots-clés du langage sont réservés et ne peuvent pas servir d’identificateurs

Parce que les mots-clés du langage sont réservés et ne peuvent pas servir d’identificateurs

Explication

int est un mot-clé réservé du C, au même titre qu'if, return ou const, et ne peut donc pas être employé comme identificateur. La contrainte d’un chiffre dans chaque nom de variable ne fait pas partie des règles énoncées ici.

7. Quelle démarche permet de transformer un programme C écrit par un développeur en code exécutable ?

Enregistrer le code dans un fichier .c, puis le faire interpréter sans compilation
Saisir le code dans un fichier sans extension, puis le lancer directement
Mettre le code en forme dans un traitement de texte, puis l’enregistrer directement comme exécutable
Écrire le code dans un fichier d’extension .c avec un éditeur de texte, puis le compiler

Écrire le code dans un fichier d’extension .c avec un éditeur de texte, puis le compiler

Explication

Le code source C doit être écrit dans un fichier d’extension .c avec un éditeur de texte, puis compilé pour obtenir un programme exécutable. Un traitement de texte sert à mettre en forme des documents, et ne remplace pas l’éditeur de code ni la compilation.

8. Lors de la production d’un exécutable C, quel enchaînement décrit correctement les quatre phases de compilation ?

Prétraitement, compilation en assembleur, assemblage en fichier objet, puis édition de liens
Compilation en assembleur, prétraitement, assemblage en fichier objet, puis édition de liens
Prétraitement, assemblage en fichier objet, édition de liens, puis compilation en assembleur
Prétraitement, compilation en assembleur, édition de liens, puis assemblage en fichier objet

Prétraitement, compilation en assembleur, assemblage en fichier objet, puis édition de liens

Explication

La compilation C passe successivement par le prétraitement, la compilation en assembleur, l’assemblage en fichier objet et l’édition de liens qui produit l’exécutable. L’édition de liens intervient après la création du fichier objet, et non avant son assemblage.

9. Un programme doit utiliser un type entier parmi les types usuels du langage C ; quel ensemble correspond à ces types ?

char, int et double, avec une taille dépendant de la valeur stockée
short int, int et long int, avec une taille dépendant de la machine
short int, float et long double, avec une taille fixée par le compilateur
unsigned int, double et long int, avec une taille identique sur chaque machine

short int, int et long int, avec une taille dépendant de la machine

Explication

Les types entiers usuels sont short int, int et long int, et leur taille dépend de la machine. float et double sont des types flottants, tandis que char sert notamment à représenter le code d’un caractère.

10. Quelle caractéristique décrit le type char en C ?

Il stocke un entier sur plusieurs octets et représente directement une chaîne de texte
Il stocke un nombre flottant sur un octet et représente une petite valeur décimale
Il stocke un entier sur un octet et peut représenter le code ASCII d’un caractère
Il stocke un caractère sur plusieurs octets et représente directement une chaîne de texte

Il stocke un entier sur un octet et peut représenter le code ASCII d’un caractère

Explication

Le type char stocke un entier sur un octet et peut notamment représenter le code ASCII d’un caractère. Une chaîne de texte est composée de plusieurs caractères, et non stockée comme une seule valeur char.

11. Si une valeur est représentable par float, que peut-on conclure sur sa représentation dans les types flottants de précision supérieure ?

Elle est représentable dans long double, mais pas nécessairement dans double
Elle est représentable dans double, mais peut perdre de la précision dans long double
Elle doit être convertie en int avant d’être représentable dans double
Elle est représentable dans double puis long double sans perte de précision

Elle est représentable dans double puis long double sans perte de précision

Explication

Les valeurs représentables dans float le sont aussi dans double puis dans long double sans perte de précision. Le passage à un type flottant de précision supérieure n’entraîne donc pas la perte suggérée pour long double.

12. Que doit faire un programmeur avant d’utiliser une variable en C ?

L’initialiser, ce qui permet au compilateur de choisir son type
L’affecter à une fonction, ce qui détermine sa portée
La déclarer, ce qui fixe le type des valeurs qu’elle peut contenir
La placer dans un bloc, ce qui fixe automatiquement son type

La déclarer, ce qui fixe le type des valeurs qu’elle peut contenir

Explication

Une variable doit être déclarée avant son utilisation, et cette déclaration fixe le type des valeurs qu’elle peut contenir. L’initialisation attribue une valeur à une variable, mais ne remplace pas sa déclaration.

13. Dans un programme C, comment distingue-t-on une variable globale d’une variable locale ?

Une variable globale est déclarée dans un bloc, tandis qu’une locale est déclarée dans un fichier séparé
Une variable globale est déclarée dans une fonction, tandis qu’une locale est déclarée hors de tout bloc
Une variable globale est déclarée hors de toute fonction et de tout bloc, tandis qu’une locale est déclarée dans un bloc
Une variable globale est déclarée comme argument, tandis qu’une locale est déclarée dans une expression

Une variable globale est déclarée hors de toute fonction et de tout bloc, tandis qu’une locale est déclarée dans un bloc

Explication

Une variable globale est déclarée hors de toute fonction et de tout bloc, alors qu’une variable locale est déclarée à l’intérieur d’un bloc. Une déclaration dans une fonction correspond donc à une variable locale, et non à une variable globale.

14. Dans un bloc qui déclare une variable locale du même nom qu’une variable du bloc englobant, quel effet observe-t-on ?

La variable du bloc englobant masque la variable locale et reste la seule accessible dans les deux blocs
La variable locale masque celle du bloc englobant et n’est utilisable que dans son propre bloc
Les deux variables deviennent accessibles dans le bloc intérieur grâce à leurs déclarations distinctes
La variable locale devient globale et reste accessible après la fin de son bloc

La variable locale masque celle du bloc englobant et n’est utilisable que dans son propre bloc

Explication

Une variable locale est utilisable dans son bloc et masque, à l’intérieur de celui-ci, une variable de même nom déclarée dans un bloc englobant. La variable englobante ne prend donc pas le dessus dans le bloc intérieur.

15. Quelle distinction décrit correctement les durées de vie statique, automatique et dynamique d’une variable ?

La durée statique couvre l’exécution, la durée automatique l’activation d’un bloc et la durée dynamique est gérée par le programmeur.
La durée statique est gérée par le programmeur, la durée automatique couvre l’activation d’un bloc et la durée dynamique toute l’exécution.
La durée statique couvre l’exécution, la durée automatique est gérée par le programmeur et la durée dynamique l’activation d’un bloc.
La durée statique couvre l’activation d’un bloc, la durée automatique toute l’exécution et la durée dynamique est gérée par le programmeur.

La durée statique couvre l’exécution, la durée automatique l’activation d’un bloc et la durée dynamique est gérée par le programmeur.

Explication

Une variable statique demeure pendant toute l’exécution, tandis qu’une variable automatique cesse d’exister à la sortie du bloc et qu’une variable dynamique est gérée par le programmeur. Confondre les durées statique et automatique inverse leur portée temporelle.

16. Que risque-t-on si une variable locale non initialisée est utilisée avant de recevoir une valeur ?

Elle contient zéro, car les variables locales suivent l’initialisation des variables statiques.
Elle contient la dernière valeur affectée à une variable locale du même nom dans une autre fonction.
Elle provoque nécessairement une erreur de compilation, car toute variable locale doit être initialisée à sa déclaration.
Elle peut contenir une valeur quelconque issue de sa zone mémoire, car elle n’est pas automatiquement mise à zéro.

Elle peut contenir une valeur quelconque issue de sa zone mémoire, car elle n’est pas automatiquement mise à zéro.

Explication

Une variable locale non initialisée peut contenir une valeur indéterminée provenant de sa zone mémoire et doit être initialisée avant sa première utilisation. La mise à zéro concerne une variable statique non initialisée, pas une variable locale automatique.

17. Que devient une variable locale déclarée static après la fin d’un appel de fonction ?

Elle reste visible localement et conserve sa valeur pour les appels ultérieurs de la fonction.
Elle devient visible dans tout le programme et conserve sa valeur pour les appels ultérieurs.
Elle cesse d’exister à la fin de l’appel, puis une nouvelle variable apparaît à l’appel suivant.
Elle reste visible localement, mais sa valeur est recréée à chaque appel de la fonction.

Elle reste visible localement et conserve sa valeur pour les appels ultérieurs de la fonction.

Explication

La déclaration static donne à cette variable locale une durée de vie permanente et lui permet de conserver sa valeur entre les appels, sans élargir sa visibilité locale. L’idée qu’elle soit recréée à chaque appel confond sa durée de vie avec celle d’une variable automatique.

18. Quelle affirmation décrit les opérateurs arithmétiques disponibles en C ?

Le C comprend notamment l’addition, la soustraction, la multiplication, la division et un opérateur de puissance, mais pas le reste entier.
Le C comprend notamment l’addition, la soustraction, la multiplication, la division et le reste entier, mais pas d’opérateur de puissance.
Le C comprend notamment l’addition, la soustraction, la multiplication et le reste entier, mais la division nécessite une fonction dédiée.
Le C comprend notamment l’addition, la soustraction, la division et le reste entier, mais la multiplication nécessite une fonction dédiée.

Le C comprend notamment l’addition, la soustraction, la multiplication, la division et le reste entier, mais pas d’opérateur de puissance.

Explication

Les opérateurs arithmétiques du C incluent le signe unaire, l’addition, la soustraction, la multiplication, la division et le reste de division entière, sans opérateur dédié à l’élévation à la puissance. L’affirmation qui attribue au C un opérateur de puissance ajoute une opération qui n’existe pas parmi ces opérateurs.

19. Quel est le rôle d’une instruction if accompagnée d’un bloc else ?

Déclarer une variable conditionnelle, puis choisir sa valeur à partir du bloc else.
Répéter un ensemble d’instructions tant que la condition est vraie, puis exécuter le bloc else.
Exécuter un ensemble d’instructions si la condition est vraie et un autre si elle est fausse.
Comparer deux valeurs et exécuter le bloc else lorsque leur différence est nulle.

Exécuter un ensemble d’instructions si la condition est vraie et un autre si elle est fausse.

Explication

L’instruction if choisit les instructions à exécuter selon la vérité de sa condition, et le bloc else peut traiter le cas où elle est fausse. Une répétition conditionnelle relève d’une instruction de boucle, et non du rôle de if et else.

20. Quelle valeur une comparaison en C produit-elle lorsqu’elle est fausse, et quelle confusion faut-il éviter ?

Elle produit un int égal à 00; ==== teste l’égalité, tandis que == affecte une valeur.
Elle produit un résultat de type flottant égal à 00; ==== teste l’égalité, tandis que == affecte une valeur.
Elle produit un int égal à −1-1; ==== teste l’inégalité, tandis que == affecte une valeur.
Elle produit un int égal à 11; ==== affecte une valeur, tandis que == teste l’égalité.

Elle produit un int égal à $$0$$; $$==$$ teste l’égalité, tandis que $$=$$ affecte une valeur.

Explication

Une comparaison fausse produit un int égal à 00, et l’opérateur ==== sert à tester l’égalité tandis que == réalise une affectation. La confusion entre ces deux opérateurs attribue à l’affectation le rôle de comparaison.

21. Dans une expression logique en C, que se passe-t-il lorsque le résultat final est déjà déterminé avant l’évaluation de tous les opérandes ?

L’évaluation s’arrête dès que le résultat est déterminé, après avoir progressé de gauche à droite.
L’évaluation s’arrête dès le premier opérande, qu’il détermine ou non le résultat final.
L’évaluation se poursuit jusqu’au dernier opérande, même si le résultat est déjà déterminé.
L’évaluation reprend depuis la droite afin de confirmer le résultat des opérandes précédents.

L’évaluation s’arrête dès que le résultat est déterminé, après avoir progressé de gauche à droite.

Explication

Les opérateurs logiques sont évalués de gauche à droite et l’évaluation s’interrompt dès que le résultat final est connu. Continuer jusqu’au dernier opérande méconnaît cet arrêt anticipé.

22. En C, que produit l’expression `&v` lorsqu’elle est appliquée à une variable `v` ?

Une copie de la valeur de `v` convertie en pointeur
L’adresse mémoire du pointeur associé à `v`
L’adresse mémoire de `v`, sous la forme d’un pointeur vers son type
La valeur de l’objet situé à l’adresse contenue dans `v`

L’adresse mémoire de `v`, sous la forme d’un pointeur vers son type

Explication

L’opérateur `&` fournit l’adresse mémoire de la variable et forme un pointeur vers un objet de son type. À l’inverse, `*pt` accède à l’objet désigné par un pointeur.

23. Si `pt` est un pointeur valide, que permet l’expression `*pt` ?

De créer un pointeur vers le type de `pt`
D’accéder à l’objet stocké à l’adresse désignée par `pt`
D’obtenir l’adresse mémoire de la variable pointée
De vérifier que l’adresse contenue dans `pt` est valide

D’accéder à l’objet stocké à l’adresse désignée par `pt`

Explication

L’opérateur d’indirection `*` donne accès à l’objet situé à l’adresse désignée par le pointeur. L’expression `&v` fournit une adresse, mais ne réalise pas cet accès à l’objet pointé.

24. Que doit faire le programmeur avant d’utiliser `*pt` pour lire un objet en mémoire ?

Vérifier que l’adresse contenue dans `pt` permet un accès mémoire valide
Utiliser `&pt` afin que l’indirection contrôle l’adresse
Vérifier que l’objet pointé est une variable de type entier
Remplacer `pt` par une adresse calculée automatiquement par `*`

Vérifier que l’adresse contenue dans `pt` permet un accès mémoire valide

Explication

L’indirection ne vérifie pas la validité de l’adresse : le programmeur doit s’assurer que l’accès mémoire est valide. Prendre l’adresse du pointeur avec `&pt` ne réalise pas cette vérification.

25. Dans un programme C utilisant les entrées-sorties standard, quel énoncé associe correctement la bibliothèque et les périphériques standard ?

Les fonctions sont déclarées dans `stdio.h`, le clavier est l’entrée standard et l’écran la sortie standard
Les fonctions sont déclarées dans `stdio.h`, l’écran est l’entrée standard et le clavier la sortie standard
Les fonctions sont déclarées dans `string.h`, le clavier est l’entrée standard et l’écran la sortie standard
Les fonctions sont déclarées dans `stdlib.h`, l’écran est l’entrée standard et le clavier la sortie standard

Les fonctions sont déclarées dans `stdio.h`, le clavier est l’entrée standard et l’écran la sortie standard

Explication

Les fonctions d’entrée-sortie standard appartiennent à `stdio.h`, et les flux standard correspondent au clavier pour l’entrée et à l’écran pour la sortie. L’association inversant le clavier et l’écran confond les rôles d’entrée et de sortie.

26. Que fait `printf` lorsqu’il reçoit une chaîne de contrôle et des expressions en arguments ?

Il vérifie la validité des expressions avant de les stocker dans des variables
Il affiche le texte littéral et insère les valeurs selon les codes de format
Il transforme chaque code de format en une adresse de destination en mémoire
Il lit des valeurs au clavier et les place aux adresses données en arguments

Il affiche le texte littéral et insère les valeurs selon les codes de format

Explication

`printf` affiche les caractères littéraux de la chaîne de contrôle et insère les valeurs des expressions aux endroits indiqués par les codes de format. La lecture au clavier suivie du stockage en mémoire correspond au rôle de `scanf`.

27. Lorsqu’un programme appelle `scanf` pour lire une valeur, que fait cette fonction avec les données lues ?

Elle les stocke dans les expressions fournies à `printf`
Elle les stocke aux adresses fournies en arguments, selon les codes de format
Elle renvoie l’adresse de la variable où chaque valeur devrait être stockée
Elle les affiche après les caractères littéraux de la chaîne de contrôle

Elle les stocke aux adresses fournies en arguments, selon les codes de format

Explication

`scanf` lit les données selon les codes de format et les stocke aux adresses fournies en arguments. Afficher des valeurs avec une chaîne de contrôle est le rôle de `printf`, et non celui de `scanf`.

28. Pour lire un `float` dans la variable `a` avec `scanf`, quelle forme fournit une adresse de destination valide ?

`scanf("%f", &a)`
`scanf("%f", *a)`
`scanf("&f", a)`
`scanf("%f", a)`

`scanf("%f", &a)`

Explication

`scanf` doit recevoir l’adresse où ranger la valeur lue, que l’on obtient ici avec `&a`. La forme qui transmet directement `a` fournit une valeur plutôt qu’une adresse de destination.

29. Que renvoie `getchar` lorsqu’il lit un caractère depuis l’entrée standard ?

Un `int` correspondant au caractère affiché, ou `EOF` en fin de fichier
Un `char` correspondant au caractère écrit, ou `EOF` en cas d’erreur
Un `int` correspondant au caractère lu, ou `EOF` en fin de fichier
Un pointeur vers le caractère lu, ou une adresse nulle en fin de fichier

Un `int` correspondant au caractère lu, ou `EOF` en fin de fichier

Explication

`getchar` lit un caractère sur l’entrée standard et renvoie un `int` correspondant à ce caractère, ou `EOF` en fin de fichier. L’écriture sur la sortie standard et le renvoi du caractère écrit relèvent de `putchar`.

30. Que renvoie `putchar` après avoir tenté d’écrire un caractère sur la sortie standard ?

Un `int` correspondant au caractère écrit, ou `EOF` en cas d’erreur d’écriture
Un pointeur vers le caractère écrit, ou une adresse nulle en cas d’erreur
Un `int` correspondant au caractère lu, ou `EOF` en fin de fichier
Un `char` indiquant le nombre de caractères restant dans le flux

Un `int` correspondant au caractère écrit, ou `EOF` en cas d’erreur d’écriture

Explication

`putchar` écrit un caractère sur la sortie standard et renvoie un `int` correspondant au caractère écrit, ou `EOF` si l’écriture échoue. Le renvoi de `EOF` en fin de fichier concerne la lecture avec `getchar`.

31. Combien de caractères l’ASCII code sur 7 bits permet-il de représenter au total ?

128 caractères, dont 32 caractères spéciaux non imprimables
256 caractères, dont 32 caractères spéciaux non imprimables
127 caractères, dont 32 caractères spéciaux non imprimables
128 caractères, dont 16 caractères spéciaux non imprimables

128 caractères, dont 32 caractères spéciaux non imprimables

Explication

Sept bits permettent de coder 128 caractères, parmi lesquels figurent 32 caractères spéciaux non imprimables. Le total de 127 caractères confond le nombre de valeurs possibles avec un décompte qui omet une valeur.

Révisez avec les flashcards

Mémorisez les réponses avec 87 flashcards sur Bases de la programmation en C.

Quels sujets l’UE IN3020 vise-t-elle à enseigner ?

Le langage C, la gestion manuelle de la mémoire, la compilation séparée, l’allocation dynamique, les pointeurs, la structuration des données, les fichiers et la programmation modulaire.

Quelle fonction principale un programme C doit-il contenir ?

La fonction main.

Quand la fonction main est-elle exécutée dans un programme C ?

En premier.

Voir les flashcards →

Approfondir avec la fiche

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