Entraînement aux rudiments de C (cours 1 à 3) par QCM

photo en cc-by-sa par magn3tik
, par
Ce questionnaire à choix multiples sera augmenté dans les trois prochaines semaines.
QCM
1 Tous les QCM d'un bloc
1.1 Situer le langage
1.1.1 chanteur compositeur
Le langage C est un langage
- compilé
- lu, écrit, parlé
- interprété
- composé
1.2 lecture des erreurs
1.2.1 seg fault
Une segmentation fault (ou faute de segmentation) est une erreur qui survient lorsque :
- le programme tente d'accèder à une partie de la mémoire qui ne lui est pas réservée
- le programme source a été enregistré sur le disque dur en plusieurs morceaux et l'un d'entre eux ne peut pas être chargé par le compilateur
- la division du programme en zones homogènes échoue
- le programme tente d'afficher des caractères sur une ligne qui va au delà de la largeur de la fenêtre du terminal
1.3 Questions de syntaxe
1.3.1 Déclaration
Pour déclarer une variable qui sera utilisée comme variable de boucle on peut utiliser l'instruction
int k;
loop i;
int loop n;
int %d;
1.3.2 stdio
Lorsqu'un programme utilise printf
ou scanf
il faut
qu'il contienne l'instruction préprocesseur :
#include <stdio.h>
#include <studio.h>
#include <studlib.h>
#appart <stdlib.h>
1.3.3 printf
Soient deux variables entières x
et y
initialisées à
4 et 5 respectivement. L'affichage x=4
et y=5
est obtenu avec la
commande :
printf("x=%d et y=%d\n", x, y);
printf("x=%d et y=%d\n, x, y");
printf("x=%x et y=%y\n");
printf("x=%d et y=%d\n", x y);
1.4 ARCHI
1.4.1 registre
Un registre du processeur est :
- une case mémoire interne au processeur qui sera manipulée directement lors des calculs
- une unité de calcul spécialisée de l'ordinateur
- un composant qui contient la liste des fichiers du système
- une gamme de fréquence de fonctionnement du processeur
1.4.2 bus
Le bus système sert à :
- Transférer des données et intructions entre processeur et mémoire
- Arriver à l'heure en cours
- Écrire des données sur le disque dur
- transporter les processus du serveur au processeur
1.4.3 bit
Un bit est :
- un chiffre binaire (0 ou 1)
- la longueur d'un mot mémoire
- l'instruction qui met fin à un programme
- un battement d'horloge processeur
1.5 Sémantique d'instructions simples
1.5.1 sémantique de l'affectation
Après exécution jusqu'à la ligne 6 du programme C :
1: int main() { 2: int x = 5; 3: int y = 3; 4: 5: x = y;
- la variable x vaut
3
- la variable y vaut
5
- la variable x vaut
5
et la variable y vaut3
- le programme affiche
Faux
1.5.2 Affectation encore
Après exécution jusqu'à la ligne 4 du programme C :
1: int main() { 2: int x = 5; 3: x = 2 * x - 1;
- la variable x vaut
9
- la variable x vaut
5
- la variable x vaut
Faux
- la variable x vaut
1
1.5.3 Effet de bord
Après exécution jusqu'à la ligne 4 du programme C :
1: int main() { 2: int x = 5; 3: printf("x = %d\n", x + 1);
- la variable x vaut
5
- la variable x vaut
0
- la variable x vaut
Faux
- la variable x vaut
6
1.6 Sémantique des structures de contrôles
1.6.1 if
Le code suivant :
if (x < y) { m = x; } else { m = y; }
- place le minimum de
x
ety
dansm
- place le maximum de
x
ety
dansm
- place
x
puisy
dansm
- place seulement
y
dansm
1.7 Initiation au système
1.7.1 ordonnancement 1
Sur un ordinateur avec un seul processeur, habituellement les processus sont exécutés :
- tour à tour, un petit peu à chaque fois
- tous ensemble
- en parallèle, chacun dans un registre
- chacun son tour, après que le processus précédent a terminé
1.7.2 ordonnancement 2
L'ordonnancement par tourniquet permet :
- d'entretenir l'illusion que les processus tournent en parallèle
- de ne pas perdre de temps avec la commutation de contexte
- d'afficher des ronds colorés à l'écran
- de doubler la mémoire disponible
1.7.3 virtualisation mémoire
La virtualisation de la mémoire permet notamment de stocker des portions inactives de la mémoire de travail sur le disque dur. Mais on perd :
- en temps d'accès
- les fichiers du disque
- des processus
- certaines données de la mémoire de travail
1.8 Compilation
1.8.1 Wall
Dans la commande gcc
, l'option -Wall
signifie :
- que l'on veut voir tous les avertissements
- qu'il faut indenter le fichier source
- qu'on veut changer alétoirement de fond d'écran
- qu'il faut lancer un déboggueur
1.8.2 prinft 1
Quelle étape de la compilation vient d'échouer lorsqu'on a un message
comme celui-ci : Undefined symbols :"_prinft"= ou =référence
indéfinie vers « prinft »
- l'édition de liens
- l'analyse harmonique
- l'analyse sémantique
- l'analyse des entrées clavier
1.8.3 prinft 2
Si cette erreur apparaît à la compilation :
Undefined symbols :"_prinft"= ou =référence indéfinie vers « prinft »
que doit-on chercher dans le programme ?
- une faute de frappe dans un appel de fonction
- une variable non déclarée
- un caractère interdit en C
- une directive préprocesseur
#include
manquante
1.8.4 erreur ;
Si cette erreur apparaît à la compilation :
error: expected ; before } token
(ou erreur: ; attendu avant un élément lexical }
)
que doit-on chercher dans le programme ?
- un point-virgule manquant
- une accolade manquante
- un point-virgule en trop
- une accolade en trop
1.8.5 commande de compilation
Pour compiler un programme prog.c
, on utilise la ligne de commande :
gcc -Wall prog.c -o prog.exe
gcc -Wall prog.exe -o prog.c
gcc prog.exe -Wall -o prog.c
gcc prog.c -o -Wall prog.exe
1.8.6 erreur syntaxique détectée au cours de l'analyse syntaxique (rare)
Les lignes
int i; int x = 0; for(i = 0, i < 5, i = i + 1) { x = x + 1; }
- comportent une erreur qui sera détectée au cours de l'analyse syntaxique
- comportent une erreur qui ne sera pas détectée
- comportent une erreur qui sera détectée au cours de l'édition de lien
- ne comportent aucune erreur
1.8.7 harmonique
Laquelle des analyses suivantes ne fait pas partie des étapes de la compilation :
- analyse harmonique
- analyse syntaxique
- analyse lexicale
- analyse sémantique
1.8.8 main
Un programme en langage C doit comporter une et une seule définition de la fonction :
- main
- begin
- init
- include
1.8.9 source
Un fichier source est :
- un fichier texte qui sera traduit en instructions processeur
- un fichier que l'ont doit citer dans les documents produits sur l'ordinateur
- un document illisible pour les humains
- un document de référence du système
- un document qui doit être protégé
1.9 Algorithmique
1.9.1 While algo
Vous utilisez une boucle while
quand :
- vous ne connaissez pas le nombre d'itérations de la boucle à l'avance
- vous n'avez pas déclaré de fonction
- vous avez déjà fait un
for
dans le même programme principal - l'incrément de la variable de boucle n'est pas 1
1.9.2 parcours
Parmi les éléments d'un tableau fourni en entrée, pour trouver le maximum des éléments, il faut :
- parcourir tout le tableau une seule fois en maintenant à jour la valeur du maximum des éléments déjà parcourus
- commencer à parcourir le tableau et s'arrêter dès que le maximum est trouvé
- parcourir autant de fois le tableau qu'on trouve de maximas successifs
- parcourir le tableau deux fois, une fois pour trouver la position du maximum et une seconde fois pour trouver sa valeur
1.9.3 occurrence
Soit un tableau t
d'entiers et un entier x
. Pour trouver si x
est présent dans le tableau :
- on parcourt le tableau et on s'arrête dès que
x
est trouvé. Six
n'est pas présent, on le sait parce qu'on a atteint la fin du parcours. - on parcourt nécessairement tout le tableau, car il faut compter
chaque occurrence de
x
. - On regarde simplement si
t[x] < n
oùn
est la taille du tableau.
1.10 Prog stucturée
1.10.1 Composer des blocs
Une de ces manière de composer les blocs de programmes ne fait pas partie des opérations de la programmation structurée :
- inverser un bloc
- sélectionner entre deux blocs à l'aide d'une condition
- répéter un bloc tant qu'une condition est vérifée
- mettre les blocs en séquence les uns à la suite des autres
1.10.2 pouvoir expressif
Quels calculs peut-on programmer en programmation structurée ?
- en programmation structurée on peut programmer tous les calculs programmables en langage machine
- il y a des calculs programmables en langage machine et qui ne sont pas programmables en programmation structurée
- il y a des calculs programmables en programmation structurée qui ne sont pas programmables en langage machine
- certains programmes sont de vrais plats de spaghetti
1.10.3 majeur/mineur 1
Le code suivant :
int age = 18; if (age < 18) { printf("Mineur\n"); } else { printf("Majeur\n"); }
affichera :
Majeur
Mineur
- rien
Mineur
Majeur
1.10.4 majeur/mineur 2
Le code suivant :
int age = 20; if (age < 18) { printf("Mineur\n"); } printf("Majeur\n");
affichera :
Majeur
Mineur
- rien
Mineur
Majeur
1.10.5 majeur/mineur 3
Le code suivant :
int age = 12; if (age < 18) { printf("Mineur\n"); } printf("Majeur\n");
affichera :
Mineur
Majeur
Mineur
Majeur
- rien
1.10.6 Opérateur de différence
Quel est l'opérateur de différence en C:
!=
<>
- \(\neq\)
!
1.10.7 Boucle for 1
Le code suivant :
int somme = 0; int i; for (i = 1; i < 4; i = i + 1) { somme = somme + i; } printf("%d", somme);
affichera :
- 6
- 0
- 1
- 42
1.10.8 Boucle for 2
Le code suivant :
int i; for (i = 4; i > 0; i = i - 1) { printf("%d ", i); } printf("\n");
affichera :
4 3 2 1
0 1 2 3
0 1 2 3 4
4 3 2 1 0
1.10.9 Boucle for 3
Le code suivant :
int i; for (i = 0; i < 5; i = i + 1) { printf("%d ", i); } printf("\n");
affichera :
0 1 2 3 4
4 3 2 1
0 1 2 3
4 3 2 1 0
1.10.10 Boulce for 4
Le code suivant :
int i; for (i = 1; i < 5; i = i + 1) { printf("%d ", i); } printf("\n");
affichera :
1 2 3 4
0 1 2 3 4
4 3 2 1
4 3 2 1 0
1.10.11 Boucle for 5
Le code suivant :
int i; for (i = 4; i >= 0; i = i - 1) { printf("%d ", i); } printf("\n");
affichera :
4 3 2 1 0
0 1 2 3 4
4 3 2 1
1 2 3 4
1.10.12 Boucle for 6
Le code suivant :
int i; for (i = 0; i < 7; i = i + 2) { printf("%d ", i); } printf("\n");
affichera :
0 2 4 6
0 2 4 6 8
0 1 2 3 4 5 6
0 1 2 3 4 5 6 7
1.10.13 Boucle for 7
Le code suivant :
int i; for (i = 8; i > 0; i = i - 2) { printf("%d ", i); } printf("\n");
affichera :
8 6 4 2
0 2 4 6 8
8 6 4 2 0
8 2
1.10.14 Double boucle for 1
Soit un programme contenant les lignes suivantes :
int i = 0; int j = 0; for (i = 0; i < 3; i = i + 1) { for (j = 0; j < 5; j = j + 1) { ... } } printf("j = %d\n", j);
qu'est ce qui sera affiché par ce printf ?
j = 5
j = %d
j = 4
j = 0
1.10.15 Double boucle for 2 (vache)
Soit un programme contenant les lignes suivantes :
int i = 0; int j = 0; for (i = 0; i < 0; i = i + 1) { for (j = 0; j < 5; j = j + 1) { ... } } printf("j = %d\n", j);
qu'est ce qui sera affiché ?
j = 0
j = 5
j = %d
j = 4
1.10.16 Double boucle for 3
Pour l'extrait de programme suivant:
int i = 0; int j = 0; for (i = 0; i < 2; i = i + 1) { for (j = 0; j < 3; j = j + 1) { printf("%d ", j); } }
qu'est ce qui sera affiché ?
0 1 2 0 1 2
0 1 2 0 1 2 3
0 1 2 3 0 1 2
0 0 1 1 2 2 3
1.10.17 Double boucle for 4
Soit un programme contenant les lignes suivantes :
int i = 0; int j = 0; for (i = 0; i < 2; i = i + 1) { for (j = 0; j < 3; j = j + 1) { printf("%d ", i); } }
qu'est ce qui sera affiché ?
0 0 0 1 1 1
0 1 2 0 1 2
0 1 0 1 0 1 0 1
1 2 1 2 3
1.10.18 Double boucle for 5
Pour l'extrait de programme suivant:
int i = 0; int j = 0; for (i = 0; i < 3; i = i + 1) { for (j = 0; j < 2; j = j + 1) { printf("%d ", i); } } printf("\n");
qu'est ce qui sera affiché ?
0 0 1 1 2 2
0 1 2 0 1 2
0 1 0 1 0 1
1 2 3 1 2
1.10.19 Double boucle for 6
Pour l'extrait de programme suivant:
int i; int j; for(i = 4; i > 0; i = i - 1) { for(j = i; j < 6; j = j + 1) { printf("*"); } printf(" "); }
qu'est ce qui sera affiché ?
** *** **** *****
** ** ** ** ** **
**** **** **** ****
***** **** *** ***
1.10.20 somme
Pour l'extrait de programme suivant:
int somme = 0; for (i = 1; i <= 4; i = i + 1) { somme = somme + i; } printf("somme = %d", somme);
La valeur de somme affichée est :
- 10
- 6
- 0
- 15
1.10.21 While et bool
Quel est le problème d'un programme comportant les lignes suivantes?
while (1) { printf("coucou\n"); }
- il comporte une boucle infinie
- il n'affiche rien
- il ne compile pas
- il risque d'afficher bonjour à la place de coucou
1.10.22 Bool
Une variable booléenne est un variable :
- qui est vraie ou fausse
- réelle positive
- jamais nulle
- à laquelle une valeur vient d'être affectée
- NaN (not a number, qui n'est pas un nombre)