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

photo en cc-by-sa par magn3tik

, par Pierre

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 vaut 3
  • 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 et y dans m
  • place le maximum de x et y dans m
  • place x puis y dans m
  • place seulement y dans m

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é. Si x 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] < nn 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)
Revenu et logement, Je livre ici quelques éléments de comparaison concernant mon niveau de vie, pour couper court à quelques idées reçues, et un condensé de nombreuses (...)
Revenu et travail d’un enseignant-chercheur, Cet article complète l'article Revenu et logement, en détaillant un peu le budget de mon ménage, mon parcours d'enseignant-chercheur en terme de (...)
Cybersyn (el systemo synco), Au café, mardi 5 avril 2011, j'ai bien vu que, mis à part Antoine Allombert, personne ne connaissait l'histoire de l'extraordinaire projet chilien (...) [jpg, jpg, png]