Vous êtes sur la page 1sur 14

Année académique 2020-2021

Classe : L2IT
Date : 01/02/2021
Enseignant : M. LOYA

Durée:3h00mn
REVISION LANGAGE C
Répondre directement aux questions suivantes :

1) Qu’affiche l’instruction suivante : printf("j’aime le C %d fois", 30/20);


[ ] j’aime le C 0 fois [ ] j’aime le C 1 fois
[ ] j’aime le C 1.5 fois [ ] je n’aime pas le C

2) Qu’affichent les instructions suivantes : int x=9 ;


int y=x+10 ;
[ ] 9 :19 : [ ] 9 :19 :19 [ ] 9 :19 :%d [ ] %d :%d :%d printf("%d :%d :%d",x,y,y) ;

3) Qu’affichent les instructions suivantes :


char a ;
[ ]AA [ ] 65 A
a=65 ;
[ ] A 65 [ ] 65 65
printf("%d %c",a, a);
4) Le type « char » correspond à :
[ ] Un entier codé sur un unique octet [ ] Un réel [ ] Une chaîne de caractères
[ ] Aucune de ces trois réponses.

5) Quelle est l’occupation mémoire de la constante symbolique définie par #define A 10.5 ?
[ ] 0 octet [ ] 1 octet [ ] 2 octets [ ] 4 octets

6) Dans une structure if,


[ ] Les parenthèses encadrant la condition logique sont obligatoires [ ] Le mot clé « else » est obligatoire
[ ] La condition, énoncée juste après if, est suivie d’un point-virgule.

7) Si le nombre d’itérations est connu, il est conseillé d’utiliser :


[ ] while … [ ] do … while [ ] for …

8) L’instruction « switch » sert à éviter des instructions:


[ ] while …imbriquées [ ] do … while imbriquées [ ] if … else … imbriquées [ ] for …imbriquées

9) Si le nombre d’itérations n’est a priori pas connu et que l’on désire passer au moins une fois dans la
boucle, on utilise :
[ ] while … [ ] do … while [ ] for …

10) En programmation en langage C, quel signe utilise‐t‐on pour l’affectation ?


[ ]= [ ] := [ ]==

11) Que vaut la variable ernet à la fin du code suivant ? int ernet = 100;
ernet += 5 ;
ernet *= 10 ;
ernet /= 15 ;
ernet %= 4 ;

12) Que vaut la variable ille dans le code suivant ? float ille ;
ille = 2/3*100.0 ;

13) Dans le code suivant, que vaut la variable j après l’instruction d’affectation ? :
int i=0, j=0 ;
j = i++ ;

1
14) Soit le programme suivant :
#include <stdio.h> Que valent a et b après ces instructions :
int main(void) [a] a=1, b=1
{ int a=1, b=2;
[b] a=1, b=2
a++;
b=a++; [c] a=2, b=1
a=--b; [d] a=2, b=2
printf("a = %d,b=d\n", a, b);

return 0;
}

15) Soit le programme suivant :


#include <stdio.h>
Combien vaudra Res après les opérations suivantes ?
int main(void)
{ [a] 9
int A = 4, Res; [b] 10
Res = 5 + A++; [c] 12
Res += 2 + A; [a] 14
Res -= 4 + (--A)
Res = Res + A++;
printf("Res = %d\n", Res);
return 0;
}

16) Qu'est-ce qui est affiché par le programme ci-contre à son exécution ?
[ ] a = 8 , b = -3
[ ] a = -3 , b = 4
[ ]a=4,b=9
[ ]a=5,b=5
[ ] Aucune des quatre réponses

17) Soit le code suivant ; le réécrire en utilisant while


int i ;
for (i=0 ; i<10 ; i++) {
printf("i = %d\n", i) ;
}

18) Soit le code suivant : int i = 0, j = 5, somme = 20 ;


Donner les valeurs des variables après l’exécution de ce programme. if (j && (i = somme / j) )
somme = 10 ;
else somme = 30 ;

2
19) Soit le code suivant :
int i ;
printf("i ? ") ;
scanf("%d", &i) ;
switch (i) {
case 0 : printf(" NUL") ; break ;
case 1 : case 3 : case 5 : case 7 : case 9 :printf(" IMPAIR") ; break ;
case 2 : case 4 : case 6 : case 8 :printf(" PAIR") ; break ;
default : printf("NEGATIF OU PAS UN CHIFFRE") ; break ;
}

Réécrire l’instruction switch en n’utilisant que des instructions if.

20) Soit le programme:


#include <stdio.h>
[ ] Son exécution produit l’affichage 9 13 17 21
int main(void)
[ ] Son exécution produit l’affichage 16 20
{
[ ] Son exécution produit l’affichage 5 9 13 17 20
int i=0 ;
[ ] Son exécution produit l’affichage 0 5 9 13 17
for(i=0 ; i <20 ; i++)
[ ] Son exécution produit l’affichage 16 21
{
[ ] Son exécution produit une erreur
switch(i)
{
case 0 : i+=5;
case 1 : i+=2;
case 5 : i+=5;
default : i+=4;
break;
}
printf(″%d ″, i);
}
return 0;
}

21) Quelle est la bonne syntaxe ?


int a ;
[ ] scanf(%d,&a) ; [ ] scanf(%d, &a) ; [ ]scanf(%lf,&a) ; [ ] scanf(%d,a) ;

22) Soient les lignes de code suivantes : int x,y;


Que valent les variables x et y après ces lignes si l’utilisateur entre scanf("%d %d",&x,&y);
au clavier 5 puis 3 ? if ((x!=y)&&(x<y)) x=y;
[ ] 5 3 [ ] 5 5 [ ] 3 5 [ ] 3 3 else y=x;

23) Quelle est la valeur de S après exécution des instructions suivantes :


int i ;
[ ] 6 [ ] 7 [ ] 8 [ ] 9 int S=0 ;
for (i=1 ; i<6 ;i=i+2)
S=S+i;

3
int i=10 ;
24) Qu’affichent les instructions suivantes : while (i>0) {
i=i-4 ;
[ ] 10 6 2 [ ] 6 2 -2 [ ] 6 2 [ ] C’est une boucle infinie
printf("%d ",i) ;
}
25) Qu'est-ce qui est affiché par le programme ci-contre à son exécution ?
#include<stdio.h>
[ ] b = -1 int main(void) {
[ ]b=0 int a=2, b=1;
for(; a < 2; a+=2)
[ ]b=1 b+=a;
printf("b = %d\n", b);
[ ] Le programme n'affiche rien. return 0;
[ ] Aucune des quatre réponses ci-dessus }

26) Qu'est-ce qui est affiché par le programme ci-contre à son exécution ?
[ ] (7,1)(8,3)(9,5)(10,7)(11,9)(12,11)
[ ] (8,1)(8,3)(8,5)(8,7)
[ ] (7,11)(8,11)(9,11)(10,11)(11,11)
[ ] Le programme n'affiche rien.
[ ] Aucune des quatre réponses ci-dessus

27) Combien de fois passe-t-on dans la boucle suivante ?


for ( compteur = 2; compteur < 9; compteur += 2 )
[ ]4 [ ]5 [ ]7 [ ]8

28) Qu’affiche la séquence suivante ?


(1) int i=4, j=5;
(2) printf(″%d %d ″, i++, ++j);
(3) printf(″%d %d\n ″, i, j);
[ ]4556 [ ]5 6 5 6 [ ]4 6 5 6 [ ]4 5 4 5 [ ]4 6 4 6 [ ]5 6 4 5

29) Combien de fois s’exécute le corps de la boucle imbriquée :


for (i=0 ; i<3 ; i++) {
for (j=0 ; j<=i ; j++) { corps }
}
[ ] [a] 3 fois [ ] [b] 6 fois [ ] [c] 5 fois [ ] [d] 10 fois

30) Soit le programme:

[ ] Il affiche 8 8 [ ] Erreur à la compilation


[ ] Il affiche 8 7 [ ] Il affiche 9 7
[ ] Il affiche 9 9 [ ] Il affiche 9 8
[ ] Il affiche 7 8 [ ] Il affiche 7 9

31) Comment faire en sorte que la variable A soit un booléen à vrai si B contient au moins 1 ?
[ ] A=B >1 [ ] A = B !=1 [ ] A=B>0 [ ] A = B >= 0

32) Quel type de donnée permet de stocker 15.4528 ?


[ ] char [ ] long [ ] double [ ] int

4
33) Qu'affiche le programme ci-contre si l'utilisateur
tape les valeurs 18 et 21 à l'exécution ?
[ ] (21,18)
[ ] (18,0)
[ ] mineur(21,0)
[ ] mineur(0,0)
[ ] Aucune des quatre réponses

34) Que produit la séquence de code suivante ?


int i = 13;
while (i>0)
{ i = i-3;
printf(″%d ″, i);
}
[ ] [a] 7 4 1 [ ] [b] 7 4 1 -2 [ ] [c] 10 7 4 1 -2 [ ] [d] 13 10 7 4 1 -2
[ ] [e] 10 7 4 1 [ ] [f] 13 10 7 4 1

35) Une directive du préprocesseur est une ligne qui commence par :
[ ]{ [ ]# [ ] // [ ] /*

36) Soit le programme suivant


#include <stdio.h> [ ] [a] il affiche 25 10 2 0 2.5 0.4 10
int main(void)
{ [ ] [b] il affiche 25 10 3 0 2.0 0.0 12.5
int a = 25,b = 10, c, d; [ ] [c] il affiche 25 10 2 0 2.5 0.4 12.5
float x, y, z ; [ ] [d] il affiche 25 10 2 0 2.0 0.0 12.5
c = a/b ; d = b/a ;
[ ] [e] il affiche 25 10 3 0 2.5 0.0 12.5
x = a/b ; y = b/a ; z = a/x ;
printf(″%d %d %d %d %.1f %.1f %.1f\n″, a, b, c, d, x, y, z) ;
return 0 ;
}

37) En C le type du résultat de la division de deux entiers (int) :


[ ] [a] est un entier [ ] [b] est un réel [ ] [c]dépend des valeurs des entiers
[ ] [d] dépend du type de la destination

38) Si i et d sont définis par int i; double d; alors l’expression (int)i%d est du type :
[ ] [a] int [ ] [b] float [ ] [c] double [ ] [d] C’est une expression erronée

39) Qu’affiche le programme suivant ? [ ] 41 41 41


#include <stdio.h> [ ] 41 33 65
int main(void) [ ] 41 041 0x41
{ [ ] 65 65 65
int m = 41, n = 041, p = 0x41 ; [ ] 33 33 33
printf(″%d %d %d\n″, m, n, p) ;
return 0 ;
}

40) Si i est défini par int i; alors ‘A’+i est du type :


[ ] [a] char [ ] [b] short [ ] [c] int [ ] [d] long

41) Quelle(s) déclaration(s) permet(tent) de réserver en mémoire un tableau de 5 entiers ?


[ ] int t[ ] = 5 ; [ ] int t[4] ; [ ]int t[5] ; [ ]int t[] = {13,37,42,0,-5} ; [ ]int t[4] = {13,37,42,0,-5} ;

5
42) On considère deux tableaux T1 et T2. Peut-on copier le contenu de T2 dans T1 sans perdre
d'information ?
[ ] Directement si T1 et T2 sont de même taille ? On utilise l'instruction T1 = T2 ;
[ ] Directement si la taille de T1 est supérieure à la taille de T2 ? On utilise l'affectation T1 = T2 ;
[ ] Directement si la taille de T2 est supérieure à la taille de T1 ? On utilise l'affectation T1 = T2 ;
[ ] Elément par élément à l'aide d'une boucle dès que la taille de T1 est >= à la taille de T2 ?

43) Quelle(s) déclaration(s) correspond(ent) à une matrice de N lignes et M colonnes ?


[ ] float Identificateur[N][M] ;
[ ] float Identificateur[M-1][N-1] ;
[ ] float Identificateur1 [M-1] Identificateur2 [N-1] ;
[ ] float Identificateur1 [N-1] Identificateur2 [M-1] ;

44) Pour accéder à la troisième case du vecteur Carte, on utilise l'instruction :


[ ] Carte [3] ; [ ] Carte [2] ; [ ] Carte {2} ; [ ] Carte {3} ; [ ] Carte (2) ;

45) Pour accéder à la case située à la 2éme ligne et la 3éme colonne de la matrice T, quelle est la bonne
syntaxe?
[ ] T [2,1] [ ] T [1,2] [ ] T [2] [1] [ ] T [1] [2] [ ] T (2,1)

46) On veut réserver en mémoire un tableau de 10 entiers contenant les nombres de 1 à 10. Quelles instructions
permettent de faire cela ?
[ ] int t[9], i; [ ] int t[10], i;
for (i=0 ; i<10 ; ++i) for (i=1 ; i<11 ; ++i)
t[i]=i+1 ; t[i-1]=i;
[ ] int t[10], i ; [ ] int t[10], i ;
for ( i=1 ; i<=10 ; ++i) for (i=0 ; i<=10 ; ++i)
t[i]=i ; t[i]=i+1 ;
[ ] Aucune des réponses ci-dessus
int i=0, tab[10], n=27;
47) Soit le code suivant :
do {
Que contient le tableau tab en fin de programme ?
tab[i++] = n % 10 ;
} while ((n /= 10) > 10);

48) On définit les constantes et les variables suivantes :


#define A 5
#define B 7
#define G 5.6
float c, d ;
int e=5, f=7 ;
Lesquelles de ces déclarations sont justes ?
[ ] int T1[10][B]; [ ] float T2[10][B]; [ ] int T3[A][B]; [ ] int T4[G][B];
[ ] char T5[1][c]; [ ] float T6[e][f];

49) Comment fait-on pour déclarer un tableau dont les éléments sont de types différents ?
[ ] Type_case répertoire [M] ; et on précise le type des variables à chaque entrée. [ ] C'est impossible.

50) En langage C, dans un tableau, le premier élément a pour indice [ ] 0 [ ]1

51) Quelle est l'autre façon d'initialiser mon tableau avec ces valeurs ?
int tableau[4];
tableau[0] = 10; [ ] int tableau[4] = 10, 23, 505, 8;
tableau[1] = 23; [ ] int tableau[4] = [10, 23, 505, 8];
tableau[2] = 505; [ ] int tableau[4] = (10, 23, 505, 8);
tableau[3] = 8; [ ] int tableau[4] = {10, 23, 505, 8};

6
52) Soit le code suivant :
#include <stdio.h> Le programme :
#define TAB_LENGTH 3 [ ] ne compile pas
int main(void) { [ ] provoque une erreur fatale à l’exécution (erreur de segmentation par exemple)
int tab[TAB_LENGTH]; [ ] boucle infinie
int j; [ ] affiche [ 5 5 5 ]
for (j= 0; j < TAB_LENGTH; j++)
[ ] affiche autre chose
tab[j] = 5;
j = 0;
printf("[");
while (j < TAB_LENGTH)
printf(" %d ", tab[j]); j++;
printf("]");
return 0;
}

53) Soit le code suivant :


#include <stdio.h>
#define TAB_LENGTH 3
int main(void) { Le programme :
int tab[TAB_LENGTH]; [ ] ne compile pas
int j = 0; [ ] fonctionne normalement et affiche [ 5 5 5 ]
for(; j <= TAB_LENGTH; j++)
[ ] pose des soucis à l’exécution
tab[j] = 5;
printf("[");
for(j = 0; j <= TAB_LENGTH; j++)
printf(" %d ", tab[j]);
printf("]");
return 0; }

54) On considère la fonction suivante :


int f(int t[], int n, int i)
{ int im, m, k;

im = i;
m = t[i];
for( k = i+1 ; i< n ; i++)
{
if(t[k]<m) Que vaut l’expression f(liste , 8, 0), si liste =[ 9, 7, 4, 2, 3, 8, 2, 5 ] ?
{ [ ]2 [ ]3 [ ]6 [ ]4
im=k;
m=t[k];
}
}
return im ;
}

55) Que fait la fonction suivante ?


#define NB 20
int main(void)
{ int liste[NB],t, k, n;
t=liste[0];
for( k =1 ; k<n ; k++) [ ] Cette fonction affiche le plus petit rang des éléments de la liste dont la valeur
{ if(liste[k]>t) est celle du maximum de la liste
t=liste[k]; [ ] Cette fonction affiche la position des éléments de la liste dont la valeur est celle
} du maximum
for( k=0 ; k< n ;k++) [ ] Cette fonction affiche la valeur maximum prise par les éléments de la liste
if(t[k] == t) [ ] Cette fonction trie la liste
{ printf(%d,k );
break;
}
return 0;
}

7
56) Tri d'un tableau par sélection du maximum
On veut utiliser l'algorithme du tri par sélection pour ordonner un tableau dans l'ordre décroissant.
On appliquera cet algorithme sur le tableau T = [3, 2, 1, 6, 5, 4]
Question 1
En vous basant sur le tri par sélection du minimum, décrivez le principe du tri par sélection du maximum.
Question 2
Ecrire une fonction imax(T, a, b) qui renvoie la position de la valeur max de T entre les positions a et b.
Question 3
En utilisant vos réponses aux questions 1) et 2), écrire une fonction triSelecMax(T, n) qui trie un tableau T dans
l'ordre décroissant.
Question 4
Que faudrait-il modifier pour que la fonction triSelection(T, n) trie le tableau T dans l'ordre croissant ?

57) Quelles sont les manières correctes pour passer le tableau d’entiers tab en argument ?
[ ] void fonction(int *tab, int dim) [ ] void fonction(int tab[ ], int dim)
[ ] void fonction(int &tab, int dim)

58) Peut-on changer la taille d'un tableau en cours d'exécution du programme ?


[ ] Oui, en affectant une nouvelle valeur à la variable définissant la taille du tableau.
[ ] Non, c'est impossible. [ ] Oui, en redéfinissant
59) Qu'est-ce qu'une chaîne de caractères ?
[ ] Une suite de caractères contenus dans un tableau de nombres réels (float)
[ ] Une suite de nombres réels contenus dans un tableau de caractères (char)
[ ] Une suite de caractères contenus dans un tableau de caractères (char)
[ ] Une suite de nombres entiers contenus dans un tableau de nombres réels (float)
[ ] Une simple variable de type caractère (char)

60) En langage C, dans une chaîne de caractères, le premier caractère a pour indice [ ] 0 [ ]1

61) Que fait la fonction strncpy(s2, s3, 5)?


[ ] Copie les 5 premiers octets de s3 dans la chaîne pointée par s2.
[ ] Copie les 5 premiers octets de s2 dans la chaîne pointée par s3
[ ] Copie les 5 derniers octets de s3 dans la chaîne pointée par s2.

62) Comment saisir une chaine de caractères, déclarée par : char Chaine[100] ?
[ ] scanf ("%c" , chaine); [ ]scanf ("%s" , chaine); [ ]scanf ("%c" ,&chaine);
[ ]scanf ("%s" , &chaine);

63) On veut créer une chaîne appelée prenom qui, au cours de l'exécution de mon programme, devra contenir
le prénom "Thomas" puis le prénom "Philippe". Quelle est la déclaration appropriée qui permet de créer une
chaîne capable de stocker chacun de ces prénoms ?
[ ]char prenom[6] [ ]char prenom[7] [ ] char prenom[8] [ ] char prenom[9]

64) Ce programme a un défaut. Mais lequel ?


int main(void)
{ char ville[100];
printf("Dans quelle ville habitez-vous ? ");
scanf("%s", &ville);
printf("Vous habitez %s, je connais bien cette ville !", ville);
return 0;
}
[ ] Il manque un & devant la variable "ville" dans le printf
[ ] Il manque une * devant la variable "ville" dans la déclaration de la variable.
[ ] Il y a un & en trop devant "ville" dans le scanf.

65) Qu'affiche le code suivant ?


printf("Cela vaut %d", strlen("Salut les Zer0s"));
[ ] Cela vaut 14 [ ] Cela vaut 15 [ ] Cela vaut 16 [ ] Cela vaut 17
[ ] Cela vaut 0 [ ] Cela vaut %d [ ] Ce code plante.

66) Quel est le caractère de fin de chaîne ?


[ ] \0 [ ]X [ ]- [ ]|
8
67) La fonction strchr sert à :
[ ] Calculer le nombre de caractères d'une chaîne [ ] Rechercher un caractère dans une chaîne
[ ] Rechercher un caractère d'une liste de caractères dans une chaîne
[ ] Rechercher une chaîne dans une chaîne

68) Que renvoie la fonction strcmp (comparaison de chaînes) si les 2 chaînes comparées sont identiques ?
[ ] -1 [ ]0 [ ]1 [ ] N'importe quelle autre valeur que 0

69) Soit le code suivant :


int i = 10;
const int IC = 20;
const int * pic;
Laquelle des affectations suivantes est illégale ? [a]pic = &IC ; [b]pic = &i ; [c] *pic = IC ; [d] i = *pic;

70) Soit le code suivant :


int i = 10;
int j;
Laquelle des lignes suivantes est légale ?
[a]int * const pi = &j; *pi = i; [b]int * const pi; pi = &j; [c]int * const pi = &j; pi = &i;

71) Soit un tableau tab d’entiers représenté en mémoire comme suit :


tab

avec A0i l’adresse mémoire de la case d’indice i du tableau pour i allant de 0 à 9


Soit int * p ;
3.1. Donner la déclaration avec initialisation du tableau tab.
3.2. Que représente l’identificateur d’un tableau dans une expression ?
3.3. L’expression « tab = p ; » a-t-elle un sens ? Justifier.
3.4. L’expression « *(tab+5) ; » a-t-elle un sens ? Si oui quelle serait sa valeur ?
3.5. Donner la valeur de &tab[0]. Si p = tab+3, donner la valeur de p, de p[2], de *(p+3).

72) Soit P un pointeur sur un tableau A:


int A[] = {12, 23, 34, 45, 56, 67, 78, 89, 90};
int *P;
P = A;
Quelles valeurs ou adresses fournissent ces expressions:
a) *P+2 b) *(P+2) c) &A[4]-3 d) A+3

e) &A[7]-P f) P+(*P-10) g) *(P+*(P+8)-A[7])

73) On considère que les déclarations suivantes ont été faites :


int a;
char tab[10];
Une expression avec pointeurs (respectivement sans pointeurs) vous est donnée, vous devez la réécrire sans
(respectivement avec) l’usage explicite des pointeurs.
1. *(&a) 2. *tab 3. *(tab + 0) 4. (*tab) + 1 5. &(tab[0]) 6. &(tab[i]) 7. ++tab[i]

74) Que se passe-t-il en mémoire avec le code suivant : malloc(sizeof(int) * 25); ?


[a] Cela réserve de la mémoire pour un entier de 25 octets
[b] Cela réserve de la mémoire pour un tableau de 25 entiers
[c] Cela réserve de la mémoire pour un tableau de 25 octets
[d] Cela réserve de la mémoire pour un tableau de 25 char

75) Après l’exécution des instructions suivantes : int i=3, *ip ; ip=&i ; i=10 ;
que vaut *ip ? [a] 3 [b] Adresse de i [c] 10 [d] Adresse de ip?
9
76) Soit p un pointeur défini par int * p. Si p vaut en hexadécimal oX12FF44 que vaut p+1 ?
[a] oX12FF45 [b] oX12FF48 [c] oX12FF4C [d]oX12FF52

77) Soit p un pointeur défini par double * p. Sachant que sizeof(double)=8, si p vaut en hexadécimal
oX12FF44 que vaut p+1,?
[a] oX12FF45 [b] oX12FF48 [c] oX12FF4C [d] oX12FF52

78) Soit p un pointeur défini par : int * p, t[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9} ;


p = &t[1];
Que vaut *(p+sizeof(int)) ?
[a]C’est une expression erronée [b]2 [c]4 [d]5

79) Quelles sont les étapes à suivre dans l'ordre lorsqu'on alloue dynamiquement de la mémoire ?
[a] malloc, vérification de la validité du pointeur, utilisation de la mémoire, free
[b] malloc, utilisation de la mémoire, free, vérification de la validité du pointeur
[c] free, vérification de la validité du pointeur, malloc, utilisation de la mémoire

80) Comment initialiser un pointeur sur un tableau de 10 char ?


[a] p = malloc (10); [b] p = (char *) malloc(10,1);
[c] p = (char *) malloc (sizeof(10*char)); [d] p = (char *) malloc(10 * sizeof(char));

81) On souhaite modifier la taille d'un tableau T d'entiers, pour passer de 10 à 11 entiers ?
[a] T = (int *) malloc (11* sizeof( int ) ); [b] T = (int *) malloc (11);
[c] T= (int *) realloc (T, 11* sizeof( int ) ); [d] T = (char *) realloc( 11 * sizeof (int ));

82) P pointe sur un tableau de 10 entiers, on souhaite libérer la mémoire qu'il occupe. Comment faire ?
[a] P = NULL; [b] *P = 0; [c] free( P ); d] free ( *P )

83) Soit le programme suivant :


#include <stdio.h>
#define TAB_LENGTH 3
int main(void) { Le programme :
int tab[TAB_LENGTH]; [ ] ne compile pas
int j = 0; [ ] provoque une erreur fatale à l’exécution
int *ptr = tab; [ ] boucle
for(; j < TAB_LENGTH; j++) [ ] affiche [ 5 5 5 ]
tab[j] = 5; [ ] affiche [ 3 5 5 ]
*(ptr + 1) = 3; [ ] affiche [ 5 3 5 ]
printf("[ %d %d %d ]\n", tab[0], tab[1], tab[2]);
return 0;
}

84) Soit le programme suivant :


#include <stdio.h>
#define TAB_LENGTH 3
int main() { Le programme :
int tab[TAB_LENGTH]; [ ] ne compile pas
int j = 0; [ ] provoque une erreur fatale à l’exécution
int *ptr = &tab[3]; [ ] boucle
for(; j < TAB_LENGTH; j++) [ ] affiche [ 3 5 3 ]
tab[j] = 5; [ ] affiche [ 3 3 5 ]
*(tab + 1) = 3; [ ] affiche [ 5 3 3 ]
*(ptr - 1) = 3; [ ] affiche [ 5 3 5 ]
printf("[ %d %d %d ]", tab[0], tab[1], tab[2]);
return 0;
}

85) Soit le code suivant :


#include <stdio.h>
void trio(int a, int b, int c) {
a = b + c;
b = c + a;
10
c = a + b;
}
int main(void) {
int a = 1, b = 2, c = 3;
trio(a, b, c);
printf("%d %d %d\n", a, b, c);
return 0;
}
Le programme :
[ ] ne compile pas [ ] provoque une erreur à l’exécution (erreur de segmentation par exemple)
[ ] affiche 5 4 3 [ ] affiche 5 8 13 [ ] affiche 1 2 3 [ ] affiche 3 6 9 [ ] affiche 1 3 6

86) Soit le code suivant :


#include <stdio.h>
void trio(int *a, int *b, int *c) {
*a = *b + *c;
*b = *c + *a;
*c = *a + *b;
}
int main(void) {
int a = 1, b = 2, c = 3;
trio(&a, &b, &c);
printf("%d %d %d\n", a, b, c);
return 0;
}
Le programme :
[ ] ne compile pas [ ] provoque une erreur à l’exécution (erreur de segmentation par exemple)
[ ] affiche 5 4 3 [ ] affiche 5 8 13 [ ] affiche 1 2 3 [ ] affiche 3 6 9 [ ] affiche 1 3 6

87) Choisir le mode de transmission de X et Y à partir de l'expression suivante :


void Fiche(float *X, float *Y, int i, char Z, char R ) ;
[ ] Transmission de valeur float [ ] Transmission d'adresse de float

88)Peut-on donner un même identificateur à une variable locale et à une variable globale au cours d'un
même programme ? [ ] Oui [ ] Non

89)On considère l'appel suivant : echange(A, B) ;


Pour qu'il y ait inversion des valeurs des variables A et B dans le programme principal, on utilise :
[ ] Un passage par valeur. [ ] Un passage par adresse.

90) Considérons l'en-tête de fonction suivante : void Fiche(float *X, float *Y, int i, char Z, char R ) ;
Considérons les déclarations suivantes :
float A, C ;
int J ;
char B, H ;
Quels sont les appels de fonction justes ?
[ ] Fiche (A, C ; J ; B, H) ; [ ] Fiche (&A, &B, C, J, H) ; [ ] Fiche (&A,&C, 3, 'b', B) ;
[ ] Fiche (&A, &C, J, B, H) ; [ ] Fiche (A ; J ; B, H) ;

91) Un type structure peut contenir en même temps :


plusieurs champs de types différents [ ] Vrai [ ] Faux
uniquement 2 champs de types différents [ ] Vrai [ ] Faux
uniquement des champs de même type [ ] Vrai [ ] Faux
92) Un compte en banque concerne une personne spécifiée par son nom, un numéro de compte (un entier), et
un montant (un réel).
Question : Déclarer un type structure pour cette structure.

93) Peut-on avoir des types différents pour les champs d’un même enregistrement. [ ] Vrai [ ] Faux

94) Une valeur d’un type énumération est équivalent à : [ ] une constante [ ] une variable

95) Une structure (struct)est


[ ] Un ensemble de données du même type [ ] une date [ ] le produit cartésien de plusieurs types
11
96) Laquelle de ces affirmations sur les types structurés est correcte ?
[ ] Une variable structure ne peut pas contenir de champs eux-mêmes de type structuré.
[ ] Un enregistrement peut contenir un champ de type structuré.
[ ] Un tableau ne peut pas contenir des enregistrements.

97) Laquelle de ces affirmations sur les types structurés est incorrecte ?
[ ] On peut afficher le contenu d'une variable structurée sans faire référence à ses champs.
[ ] Le champ d'une variable struct peut lui-même contenir d'autres champs.
[ ] On peut passer une variable de type struct en paramètre à une fonction sans précision de champ.

98) Une structure peut-elle contenir des tableaux ?


[ ]Oui [ ]Non [ ]Seulement si tous ces tableaux sont de même type

99) Soit le type Examen contenant les valeurs suivantes : Math, Anglais, Physique et informatique
1°) Qu’appelle-t-on le type Examen décrit ci-dessus ?
2°) Proposer une déclaration du type Examen en respectant l'ordre des valeurs proposé ci-dessus.

100) Quel est le défaut sur la définition de cette structure qui empêche la compilation de fonctionner ?
struct Ecran
{ int nombreDeCouleurs; [ ]Il manque un typedef avant
int largeur; [ ] Il manque un typedef après
int longueur; [ ]Il manque un point-virgule après la dernière accolade
} [ ]Il manque un point-virgule avant la dernière accolade

101) Soient les lignes d’instruction suivantes :


struct timbre { struct timbre COLLECTION[10] ;
int prix ; Comment accède‐t‐on à l’année du 3ème timbre de la collection ?
int annee ; [ ] COLLECTION[2,2]
char origine[20] ; [ ] COLLECTION[2].annee
char image[20] ; [ ] COLLECTION.annee[2]
}; [ ] COLLECTION.annee
[ ] (COLLECTION+2)‐>annee

102) fgetc(f);
[ ] Lit une chaîne à partir du fichier et le pointeur reste sur la même ligne.
[ ] Lit un caractère à partir du fichier et le pointeur passe à la ligne suivante.
[ ] Lit un caractère à partir du fichier et le pointeur passe sur le caractère suivant.

103) Si on ouvre un fichier texte :


[ ] Pour ajout, on ne peut ni lire, ni modifier les informations qu'il contient.
[ ] Pour lecture, on pourra modifier les informations qu'il contient.
[ ] Pour écriture, on pourra lire les informations qu'il contient.

104) Si la fin du fichier est atteinte :


[ ] L'opération de lecture n'est pas possible [ ] L'opération d'écriture n'est pas possible [ ] EOF devient Faux

105) Si le fichier fich est vide, la fonction feof(fich) retourne :


[ ] Faux [ ] Erreur d'exécution [ ] vrai

106) Quel fichier entête faut-il inclure si on veut travailler avec des fichiers ?
[ ]stdio.h [ ]stdlib.h [ ]string.h [ ]stdprint.h [ ]stdfile.h

107) De quel type doit être le pointeur de fichier ?


[ ]FILE [ ] FILE* [ ]file [ ]file*
108) Quel mode d'ouverture est le plus adapté si je veux lire et écrire dans un fichier automatiquement vidé
au départ ?
[ ]r+ [ ]r [ ]rw [ ]w+ [ ]a+ [ ]w

12
109) Que faut-il toujours faire juste après l'ouverture d'un fichier ?
[ ]Le fermer [ ]Tester la validité du pointeur de fichier [ ]Le vider de son contenu
[ ] Placer le curseur à la position 0 w

110) Quelle fonction commande la fermeture du fichier, donc la libération de la mémoire ?


[ ]fclose [ ]fileClose [ ]ffermer [ ]fend

111) Quelle fonction commande la fermeture du fichier, donc la libération de la mémoire ?


[ ]fclose [ ]fileClose [ ]ffermer [ ]fend

112) Quel est le second paramètre que l'on doit envoyer à la fonction fgets ? fgets(chaine, ???, fichier);
[ ] La position du curseur [ ]La taille du fichier [ ]Le nombre maximal de caractères à lire dans chaîne

113) Quelle fonction permet d'écrire un caractère (et un seul) dans un fichier ?
[ ]fputc [ ]fgetc [ ]fputchar [ ]fscanf [ ]fputs [ ]fgets

114) On considère une structure de liste chainée définie par :


struct cell {
int val;
struct cell *next;
};
Une « liste » est de type struct cellule *, la liste vide est représentée par NULL
1. Pour insérer un élément en tête de liste, on considère les fonctions suivantes :
void push_front_1(struct cell *l, int val) {
struct cell *first = malloc(sizeof(struct cell));
first->val = val;
first->next = l;
l = first;
}

void push_front_2(struct cell **l, int val) {


struct cell *first = malloc(sizeof(struct cell));
first->val = val;
first->next = *l;
*l = first;
}

void push_front_3(struct cell **l, int val) {


if (*l != NULL) {
struct cell *first = malloc(sizeof(struct cell));
first->val = val;
first->next = *l;
*l = first;
}
}

struct cell * push_front_4(struct cell *l, int val) {


struct cell *first = malloc(sizeof(struct cell));
first->val = val;
first->next = l;
return first;
}

void push_front_5(struct cell **l, int val) {


struct cell first;
first.val = val;
first.next = *l;
*l = &first;
}
Cocher la ou les implémentation(s) correcte(s).
[ ]push_front_1 [ ]push_front_2 [ ]push_front_3 [ ]push_front_4 push_front_5
2. Pour libérer la mémoire allouée par une liste, on considère les fonctions suivantes:
void free_list_1(struct cell *l) {
free(l);

13
}

void free_list_2(struct cell *l) {


free(l->next);
free(l->val);

void free_list_3(struct cell *l) {


for (; l != NULL; l = l->next) {
free(l);

}
}

void free_list_4(struct cell *l) {


while (l != NULL) {
struct cell *next = l->next;
free(l);
l = next;

}
}

void free_list_5(struct cell *l) {


while (l != NULL) {
struct cell *tmp = l;
l = l->next;
free(tmp);

}
}
Cocher la ou les implémentation(s) correcte(s).
[ ]free_list_1 [ ]free_list_2 [ ]free_list_3 [ ]free_list_4 [ ]free_list_5

115) Une erreur s'est glissée dans le code suivant :


typedef struct element element;
struct element
{int val;
struct element nxt;
};
[ ]Il manque un typedef [ ]Il manque une étoile [ ]Le code est juste

14

Vous aimerez peut-être aussi