Année académique 2023-2024
Classe : L2ELN
Date : 02/05/2024
Enseignant : M. LOYA
QUESTIONNAIRE SUR LES TABLEAUX
1. Un tableau peut contenir en même temps :
plusieurs variables de types différents [ ] Vrai [ ] Faux
uniquement 2 variables de types différents [ ] Vrai [ ] Faux
uniquement des variables de même type [ ] Vrai [ ] Faux
2. Le nombre d’éléments possible d’un tableau se nomme : taille
3. Un élément du tableau d’entier tab, i étant un entier, est
[ ] tab[i] [ ] tab(i) [ ] tabi [ ] tabi
4. 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. 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.
6. En langage C, dans un tableau, le premier élément a pour indice [ ] 0 [ ]1
7. Pour accéder à la troisième case du vecteur Carte, on utilise l'instruction :
[ ] Carte [3] ; [ ] Carte [2] ; [ ] Carte {2} ; [ ] Carte {3} ; [ ] Carte (2) ;
8. Quelle est l'autre façon d'initialiser mon tableau avec ces valeurs ?
int tableau[4];
tableau[0] = 10;
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);
[ ] int tableau[4] = {10, 23, 505, 8};
9. 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
10. 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
11. Soit le programme (incomplet) suivant :
Quelle instruction faut-il écrire en ligne 5 pour remplacer
la valeur 13 par la valeur 14 ?
[ ] tab[13] = 14; [ ] tab[6] = 14;
[ ] tab[7] = 14; [ ] tab[13] = tab[14];
1
12. Soit le programme ci-dessous :
#include <stdio.h>
int main(void){ Suite à son exécution, que va-t-il s’afficher à l’écran :
int i, somme, tab[8];
tab[0] = 1;
somme = 0; [ ] somme = 100 - tab = 1,2,3,4,5,6,7,8
for(i=1 ; i < 8 ; i++ ) {
tab[i] = tab[i-1] * 2; [ ] somme = 127 - tab = 1,2,4,8,16,32,64,128
}
i = 0; [ ] somme = 127 - tab = 1,2,3,4,5,6,7,8
while(tab[i] < 100) {
somme = somme + tab[i]; [ ] somme = 100 - tab = 1,2,4,8,16,32,64,128
i++;
}
printf("somme = %d - ",somme);
printf("tab = %d",tab[0]);
for( i=1 ; i < 8 ; i++ ) {
printf(",%d",tab[i]);
}
return 0;
}
13. Soit le programme suivant :
#include <stdio.h> Suite à son exécution, que va-t-il s’afficher à l’écran :
int main(void){
int tab[10]; [ ] tab = 2,1,4,3,6,5,8,7,9,10
int i,temp;
[ ] tab = 1,2,3,4,5,6,7,8,9,10
for( i=0 ; i<10 ; i++ ) {
tab[i] = i+1; [ ] tab = 1,2,3,10,5,6,7,8,9,4
}
i=0; [ ] tab = 2,1,4,4,6,5,8,7,9,10
while(tab[i] < 9) {
temp = tab[i];
[ ] tab = 1,2,3,11,5,6,7,8,9,5:
tab[i] = tab[i+1];
tab[i+1] = temp;
i = i + 2;
}
tab[3] = tab[3] + 1;
tab[9] = tab[8] + 1;
printf("\ntab = %d",tab[0]);
for( i=1 ; i<10 ; i++ ) {
printf(",%d",tab[i]);
}
return 0;
}
14. Soit le code suivant :
#include <stdio.h> Le programme :
#define TAB_LENGTH 3 [ ] ne compile pas
int main(void) {
int tab[TAB_LENGTH];
[ ] provoque une erreur fatale à l’exécution (erreur de segmentation par exemple)
int j; [ ] boucle
for (j = 0; j < TAB_LENGTH; j++) [ ] affiche [ 5 5 5 ]
tab[j] = 5; [ ] affiche autre chose
j = 0;
printf("[");
while (j < TAB_LENGTH)
printf(" %d ", tab[j]); j++;
printf("]");
return 0;
}
15. La fonction suivante doit calculer le produit de tous les éléments du tableau passé en paramètre. Avec
quelles expressions doit-on la compléter pour que cette fonction soit correcte ?
float produit (float L[ ], int n){ [ ] 1 puis p = p * L[i]
int i ;
18. Soit le code suivant :
float p ; [ ] 0 puis p = p * L[i]
p = ……….
for(i=0 ;i<n ;i++) [ ] 1 puis p = L[i]
...............
return p ; [ ] 0 puis p = L[i]
} 2
16. Soit le code suivant
#include <stdio.h>
#define TAB_LENGTH 3
int main(void) {
Le programme :
int tab[TAB_LENGTH];
int j = 0; [ ] ne compile pas
for(; j <= TAB_LENGTH; j++) [ ] fonctionne normalement et affiche [ 5 5 5 ]
tab[j] = 5; [ ] pose des soucis à l’exécution
printf("[");
for(j = 0; j <= TAB_LENGTH; j++)
printf(" %d ", tab[j]);
printf("]");
return 0; }
17. 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 ?
18. On exécute le code suivant :
float liste [10]= {4,8,12,6,2};
void permute(float L[],int n){ Quelle est la valeur de liste à la fin de l'exécution du code ?
int k, tmp ; [ ] [2, 4, 8, 6, 12]
for (k =0 ;i<n-1;i++) [ ] [2, 4, 6, 8, 12]
if (L[k] > L[k+1]){ [ ] [4, 8, 6, 2, 12]
tmp = L[k] ; [ ] [12, 8, 6, 4, 2]
L[k] = L[k+1] ;
L[k+1] = tmp ;
}
}
permute(liste,5) ;
19. Avec une unique recherche séquentielle dans un tableau de nombres, que ne peut-on pas faire ?
[ ] Trier les éléments de ce tableau avec l’algorithme par insertion
[ ] Déterminer le nombre d’occurrences, dans ce tableau, d’une valeur donnée
[ ] Déterminer les extrema dans ce tableau
[ ] Déterminer la moyenne des valeurs de ce tableau
20. Quelle est la valeur de c à la fin de l'exécution du code suivant :
int L = {1,2,3,4,1,2,3,4,0,2} ; [ ]0 [ ]2 [ ]3 [ ] 10
int c = 0, k ;
for( k = 0 ;i<n ; i++)
if(k == L[1])
c ++ ;
21. On considère la fonction suivante :
#define NB 20
int main(void){
int t[NB], int n, int i;
int im, m, k;
im = i;
m = t[i];
for( k = i+1 ; i< n ; i++) {
if(t[k]<m) { Qu’affiche le programme si t =[ 9, 7, 4, 2, 3, 8, 2, 5 ], n =8, i=0 ?
im=k; [ ]2 [ ]3 [ ]6 [ ]4
m=t[k];
}
}
printf(%d,im );
return 0 ;
}
3
22. 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(liste[k] == t){ [ ] Cette fonction trie la liste
printf(%d,k );
break;
}
return 0;
}
23. 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. [ ] parcourir le tableau deux fois, une fois pour trouver la position du maximum et une seconde
fois pour trouver sa valeur. [ ] 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.
24. Soit un tableau t d'entiers et un entier x. Pour trouver si x est présent dans le tableau :
[ ]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.
[ ]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
25. La fonction suivante prend en paramètre un tableau non vide de nombres réels.
float mystere(float T[], int k){
float val = T[k-1] ; Quelle est la valeur renvoyée par cette fonction ?
if (k == 1)
return T[k-1] ; [ ]la plus grande des valeurs du tableau T
else
while( k >= 0){ [ ]la plus petite des valeurs du tableau T
if (val < T[k-2])
val = T[k-2] ; [ ]la moyenne des valeurs du tableau T
k = k-1 ;
} [ ]la valeur la plus fréquente du tableau T
return val ;
}
26. Quelle sont les états successifs du tableau T=[0,-4,5,-2] qui traduisent les étapes d’un algorithme de tri
par insertion ?
[ ] [-2,-4,5,0] puis [-4,-2,5,0] puis [-4,-2,0,5]
[ ] [-4,0,-2,5] puis [-4,-2,0,5] [ ] [-4,0,-2,5] puis [-4, -2,0,5]
[ ] [-4,0,5,-2] puis [-4,-2,5,0] puis [-4,-2,0,5]
27. Quels sont les états successifs du tableau T=[4,-1,7,-2] qui traduisent les étapes d’un algorithme de tri
par sélection ?
[ ] [-2,-1,7,4] puis [-2,-1,4,7] [ ] [-1,-2,7,4] puis [-2,-1,4,7] [ ] [4,7,-1,-2] puis [-2,-1,4,7]
[ ] [-2,4,-1,7] puis [-2,-1,4,7]
4
28. Au cours d’un tri de tableau, on observe les étapes suivantes :
Quel est l’algorithme de tri qui a été utilisé ?
[ ] tri par sélection
[ ] tri à bulles
[ ] tri par insertion
[ ] tri rapide
29. Quel algorithme de tri sélectionne dans le tableau les éléments du plus petit au plus grand pour le
mettre à leurs places ? [ ] le tri par insertion [ ] le tri par sélection le tri à bulles
30. Combien d'échanges effectuera l'algorithme de tri à bulles si on l'applique à un tableau de 4 éléments
déjà trié ? [ ] 0 [ ] 10 [ ] 3 [ ] 6 [ ] 16 [ ]12 [ ] 1 [ ] 20 [ ] 4 [ ] 2
31. Quel algorithme de tri est illustré sur l'image ci-contre ?
[ ] le tri à bulles [ ] le tri par insertion [ ] le tri par sélection
32. On définit une fonction de recherche dichotomique de l'indice d'un
élément x à l'intérieur d'une liste triée de la façon suivante :
int recherchee(x, int liste_triee[], int n){
int a = 0, b = n-1 ;
int m;
while (a < b){ [ ]a=m+1
m = (a + b)/2 ; [ ]a=m-1
if (liste_triee[m] == x) [ ]a=b
return m ; [ ]a=b-m
else
if( liste_triee[m] > x)
b=m-1
else
................
}
return a ;
}
33. Avec un algorithme de recherche par dichotomie, combien de comparaisons sont-elles nécessaires pour
s’assurer que 22 n’est pas dans la liste suivante :
[1, 5, 9, 12, 20, 21, 24, 32, 35, 40, 41, 47, 53, 60, 70]
[ ]2 [ ] 4 [ ] 7 [ ] 13
34. Que calcule la fonction suivante ?
int mystere(int liste[], int n){
int valeur_de_retour = 1 ; [ ] la valeur du plus grand élément de la liste passée en paramètre
int indice = 0 ; [ ] la valeur du plus petit élément de la liste passée en paramètre
while (indice < n – 1){
if (liste[indice] > liste[indice + 1])
[ ] une valeur booléenne indiquant si la liste passée en paramètre est triée
valeur_de_retour = 0 ; [ ] une valeur booléenne indiquant si la liste passée en paramètre contient
indice = indice + 1 ; plusieurs fois le même élément
}
return valeur_de_retour ;
}
35. Pour pouvoir utiliser un algorithme de recherche par dichotomie dans une liste, quelle précondition
doit être vraie ? [ ] la liste doit être triée [ ] la liste ne doit pas comporter de doublons
[ ] la liste doit comporter uniquement des entiers positifs [ ] la liste doit être de longueur inférieure à 1024
5
36. Soit la fonction suivante :
int enigme(int tab [ ], int n, int quoi){
int inf, sup, milieu, result, trouve;
inf = 0;
sup = n-1;
trouve = 0;
while (sup >=inf && !trouve) { Que vaut l’expression enigme(T , 8, 4), si T =[ 2, 2, 3, 4, 5, 7, 8, 9 ] ?
milieu = (inf + sup) / 2;
if (quoi == tab[milieu]) [ ]2 [ ]3 [ ]6 [ ]4 [ ]0
trouve = 1.;
else
if (quoi < tab[milieu])
sup = milieu -1;
else
inf = milieu + 1;
}
if (trouve = =0)
result = 0;
else
result = milieu;
return result ;
}
37. Un tableau à deux dimensions (matrice) peut contenir en même temps :
plusieurs variables de types différents [ ] Vrai [ ] Faux
uniquement 2 variables de types différents [ ] Vrai [ ] Faux
uniquement des variables de même type [ ] Vrai [ ] Faux
38. 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] ;
39. 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];
40. 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)