Description: | Un rapide QCM sur le language C. |
---|---|
Auteur: | Mikaël NAVARRO <klnavarro@gmail.com> |
Date: | 2011-08-31 |
Revision: | 2 |
License: | GNU FDL |
Info: | Cf. <http://klnavarro.free.fr/spip/spip.php?rubrique12>. |
Contents
- 1970
- 1980
- 1960
- //
- %/
- \\
- #
- {
- //
- void Main (id1, id2, ..., idn)
- void main ()
- void main (id1, id2, ..., idn)
- bool
- float
- int
- un entier codé sur un unique octet
- un réel.
- ni l'un ni l'autre.
- un entier.
- un réel.
- ni l'un ni l'autre.
- un entier.
- un réel.
- ni l'un ni l'autre.
- un entier.
- un réel.
- ni l'un ni l'autre.
- un entier.
- un réel.
- ni l'un ni l'autre.
- vrai
- faux
- dans la fonction principale main
- avant la fonction principale main
- avant une directive au précompilateur "#include"
- stdio.h
- stdlib.h
- windows.h
- références
- pointeurs
- structures
- un langage de programmation
- un compilateur
- une bibliothèque contenant des focntions C très évoluées
- printf
- cout
- scanf
- scanf
- cin
- printf
- malloc
- new
- delete
- free
- short
- case
- -Wall
- -std=c99
- -Wextra
- printf("%u", toto);
- scanf("%u", toto);
- scanf("%u", &toto);
Le morceau de code suivant
for (int i = 0; i <= 10; i++); { printf("%u", i); }
- fera 10 appels à printf
- fera 11 appels à printf
- fera un appel à printf
- A; while (B) { C; D }
- A; while (B) { D; C }
- while (A; B) { C; D }
Si on définie une variable comme ceci
struct paire { int premier; int second; }; struct paire v;
alors on peut accéder au premier élément de v comme ceci :
- v->premier
- v.premier
- v[0]
- premier(v)
- t(3)
- t[3]
- *(t + 3)
- 3[t]
Le code suivant
int *f(void) { int x; return &x; }
- est correct
- est incorrect. On pourrait écrire return malloc(sizeof(int)) à la place.
- est incorrect. On ne peut pas renvoyer de pointeur dans une fonction en C.
- Un entier non nul
- Un pointeur
- Une adresse
- const char *T
- char const *T
- char * const T
- Une comparaison de chaines de caractères
- Rien d'intéressant
- Une copie de chaine de caractères
- (1 << 23) & X
- 0x800000 & X
- (X << 9) >> 31
Le programme
int *f() { int x = 42; return &x; }
- Provoque une erreur à la compilation
- Provoque une erreur à l'édition de liens
- Provoque une erreur à l'exécution
- #define MAX(a, b) (a >= b) ? a : b
- #define MAX(a, b) (((a) >= (b)) ? (a) : (b))
- #define SWAP(x, y) tmp = x; x = y; x = tmp
- #define SWAP(x, y) { int tmp = x; x = y; x = tmp; }
- #define SWAP(x, y) do { int tmp = (x); (x) = (y); (x) = tmp; } while (0)
La déclaration
int tab[100];
réserve :
- 100 variables de type entier en mémoire
- 99 variables de type entier en mémoire
- 101 variables de type entier en mémoire
Ce code
int i; i = 10; if (i=10) { printf ("i vaut dix\n"); }
- est incorrect et provoque une erreur de compilation
- est probablement incorrect mais ne provoque pas d'erreur de compilation
- est probablement correct et provoque une erreur de compilation
Ce code
for (i=0; i<10; i++) { for (j=0; j<10; j++) { tab[i] = tab[i] + j; } printf ("Fin des 2 boucles\n"); }
- n'est pas correctement indenté
- est correctement indenté
Le code suivant affiche
int i; int tab[10]; for (i=0; i<10; i++) { tab[i] = i; } printf ("i = %d\n", i);
- i = 9;
- i = 11;
- i = 0;
- i = 10;
Ce code affiche
int i; i = 15; if ( i < 10) { if (i < 20) { printf ("i est inférieur à 20\n"); } else if (i < 30) { printf ("i est inférieur à 30\n"); } } else { printf ("i est plus grand que 10\n"); }
- i est inférieur à 20
- i est inférieur à 30
- i est plus grand que 10
- i est inférieur à 20 i est inférieur à 30
- i est inférieur à 20 i est inférieur à 30 i est plus grand que 10
Ce code
int i; int tab[10]; for (i=0; i <100; i++) { tab[i] = 0; }
- provoque une erreur de compilation
- est incorrect, ne provoque pas d'erreur de compilation mais peut provoquer une erreur lors de l'exécution
- est incorrect, ne provoque pas d'erreur de compilation et peut s'exécuter sans erreur apparente
- est correct
- 10 = i;
- i = 10;
Ce code
i = 0; if (i) { printf ("i est nul\n"); }
- semble correct
- semble incorrect
Ce code affiche
int i; i = 15; if ( i < 30) { printf ("i est inférieur à 30\n"); } else if (i < 20) { printf ("i est inférieur à 20\n"); } else if (i < 10) { printf ("i est inférieur à 10\n"); }
- i est inférieur à 30
- i est inférieur à 20
- i est inférieur à 10 i est inférieur à 20
- i est inférieur à 10
Ce code affiche
int i; int j; i = 0; do { j = i + 1; i = i + 3; } while (i < 10); printf ("i = %d\n", i);
- i = 9
- i = 10
- i = 11
- i = 12
Quelle ligne s'affiche
int i; int j; i = 0; j = 0; do { i++; j++; } while (i+j < 10); printf ("i = %d, j = %d\n", i, j);
- i=5, j=5
- i=1, j=4
- i=0, j=0
Ce code
#define NB 10 int x; x = NB +1; printf ("x = %d\n", x);
- semble incorrect
- est correct et affiche : x = 101
- est correct et affiche : x = 11
Le code suivant vous paraît-il correct
int age; age = 70; if (age < 21) { printf("Vous êtes jeune !\n"); } else if (age >= 60) { printf("Vous commencez à être agé...\n"); }
- oui
- non
Combien de caractères X le code suivant affiche-t-il
int i; for(i=0; i<10; i++) { for(j=0; j<5; j++) { printf("X"); } } printf ("\n");
- 49
- 50
- 51
Quelle ligne s'affiche
int i; int j; i = 1; j = 10; do { j = j - 1; if (j == 5) { i = 0; } } while (i != 0); printf ("i = %d, j = %d\n", i, j);
- i=0, j=5
- i=1, j=0
- i=0, j=1
- i=1, j=5
- gcc toto -o toto.c
- gcc toto.c -o toto
- gcc -c toto.c
- gcc -c toto
Quelle ligne s'affiche
int i; i = 10; if ( i == 10) { printf ("bonjour "); } if ( i < 20) { printf ("bonsoir "); } else if ( i == 10) { printf ("au revoir "); }
- bonjour
- bonsoir
- bonjour bonsoir
- bonjour bonsoir au revoir
- bonjour au revoir
Quelle ligne s'affiche
int i; do { i = i + 1; } while (i < 5); printf ("i = %d\n", i);
- i=0
- i=4
- i=5
- il est impossible de répondre avec certitude à cette question
- enlever la poussière pour mieux voir le contenu d'un tableau
- vérifier qu'une boucle ne déborde pas d'un tableau
- faire une boucle pour parcourir les éléments d'un tableau
Ce code
#include <stdio.h> main() { int i; int quantite[5]; int somme; quantite[0]=100; quantite[1]=13; quantite[2]=32; quantite[3]=50; quantite[4]=200; quantite[5]=24; for (i=0; i < 10; i++) { somme = somme + quantite[i]; } printf("Quantité totale : %d\n", somme); }
- est correct
- comporte une erreur
- comporte deux erreurs
Soit l'extrait de code suivant
int piece[50]; piece[7] = 20;
On peut dire :
- on place 20 dans élément d'indice 7 du tableau pièce
- on met 20 dans le huitième élément du tableau pièce
- on place 7 dans l'indice 20 du tableau
- du plus petit indice vers le plus grand
- du plus grand indice vers le plus petit
- dans un ordre indeterminé
Ce code
int i; int tab[10]; for (i=0; i <100; i++) { tab[i] = 0; }
- provoque une erreur de compilation
- est incorrect, ne provoque pas d'erreur de compilation mais peut provoquer une erreur lors de l'exécution
- est incorrect, ne provoque pas d'erreur de compilation et peut s'exécuter sans erreur apparente
- est correct
Dans la notation
char piece[16];
le nombre 16 représente :
- la dimension du tableau piece
- un indice du tableau piece
- le nombre d'éléments du tableau piece
- le nombre d'octets qu'utilise le tableau piece en mémoire
Dans la notation
piece[10] = 3;
le nombre 10 représente :
- la taille du tableau piece
- un indice
- la valeur du tableau piece pour l'indice 3
La déclaration
int tab[100];
réserve :
- 100 variables de type entier en mémoire
- 99 variables de type entier en mémoire
- 101 variables de type entier en mémoire
Ce code
int i; int tab[10]; for (i=0; i<10; i++) { tab[i] = i; } printf ("i = %d\n", i);
affiche :
- i = 9;
- i = 11;
- i = 0;
- i = 10;
Soit le tableau de caractères
char reference[30];
Pour désigner le dixième caractère, on écrit :
- R1 reference[9]
- R2 reference[10];
- R3 reference[11];
Dans la notation
int piece[10];
le nombre 10 représente :
- la taille du tableau piece
- la dimension du tableau piece
- un indice du tableau piece
- le nombre d'éléments du tableau piece
- le nombre d'octets qu'utilise le tableau piece en mémoire
et donner la bonne réponse le cas échéant.