Examen - 2017/2018
Module : Programmation en C
NB : 1°) Lisez attentivement les questions, et choisissez les bonnes réponses
2°) Une question peut avoir plusieurs bonnes réponses
Question : Combien de fois passe-t-on dans la boucle suivante ?
int Cpt = 10;
do { cpt++; printf("bonjour \n"); } while ( Cpt < 10) ;
0
1
9
10
Question : En fonction des déclarations suivantes, que donne l'affichage de "p2" ?
int A = 5;
int *p1 = &A; // p1 pointe sur A
int **p2 = &p1; // p2 pointe sur p1
La valeur de nombre
L'adresse de p1
L'adresse de A
Question : la variable A contient 10.5, Qu'est-ce que la ligne suivante affiche ?
printf("A = %d ",A);
A = %d
A = 10.5
A = 10
A = d, A
Question : Dans quel cas l'instruction return n'est pas obligatoire ?
Quand la fonction ne prend aucun paramètre en entrée
Quand la fonction est de type void
Quand la fonction doit renvoyer 0
Question : Lequel de ses codes crée un tableau de 5 entiers ?
int Tab(5); int *Tab[5]; int Tab[4]; int Tab [5];
Question : Si t est un tableau, alors on peut accéder à l'élément numéro 3 de t avec
t(3) t[3] *(t + 3) 3[t]
Question : Qu'affichera le code suivant ?
int N = 65;
char lettre = N;
printf ("%d", lettre);
65
N
A
Provoque une erreur
Question : Le langage C réalise-t-il le passage d’arguments par valeur ou par adresse ?
Par valeur pour les constantes et par adresse pour les variables.
Par adresse pour les pointeurs et les tableaux, par valeur pour les variables et les constantes.
Par valeur quel que soit le type d’arguments à la fonction appelée.
Question : Soit la déclaration suivante : char les[] = "ab".
Que vaut les[2] ?
1
Question : Soit le code suivant :
#include <stdio.h>
#define TAB_LENGTH 3
int main() {
int tab[TAB_LENGTH];
int j = 0;
int *ptr = &tab[0];
for(; j < TAB_LENGTH; j++)
tab[j] = 5;
*(ptr + 1) = 3;
printf("[ %d %d %d ]", tab[0], tab[1], tab[2]);
return 0;
}
ne compile pas
provoque une erreur fatale à l’exécution
boucle
affiche [ 5 5 5 ]
affiche [ 3 5 5 ]
affiche [ 5 3 5 ]
Question : Soit la déclaration suivante : char mant[] = { ’a’, ’b’ }.
Que vaut mant[2] ?
Question : Soit erne, un tableau de 10 entiers. Donnez l’instruction permettant de saisir au clavier le 3e
Entier
Question : Soit ge, un tableau de 10 caractères. Donnez l’instruction permettant de saisir au clavier
une chaîne de caractères, sans utiliser le caractère ’&’.
Question : Écrivez une fonction qui prend en argument une chaîne de caractères, la renverse sur elle-
même ( "toto"−→"otot" ) et retourne l’adresse de ceGe chaîne.
Prototype : char * miroir (char *s);
2
Question : Écrivez une fonction qui prend en argument une chaîne de caractères et l’affiche en répétant
chaque caractère n fois (l’appel avec "toto" et 3 affichera "tttoootttooo" ).
Prototype: void repete (char *s, int n);
Question : Écrire une fonction remspplus qui remplace les espaces et tabulations d'une chaîne de
caractères par « + ». Cette fonction ne doit pas utiliser de tableau intermédiaire. Le morceau de code
char s[] = "bonjour à tous";
remspplus(s);
printf("s = \"%s\"\n", s);
Doit afficher le résultat s = "bonjour+à+tous".