Examen DUMA 1993 - Pages de Michel Deloizy

Transcription

Examen DUMA 1993 - Pages de Michel Deloizy
ufr sciences REIMS
DUMA 1993
Examen
Session de Décembre
INFORMATIQUE
Documents autorisés.
Durée : 2 heures.
Dans le QCM proposé, une seule réponse par question est exacte. Le barème appliqué est le suivant :
+1 par bonne réponse,
-1 par réponse inexacte,
-0 par réponse absente.
Les réponses seront portées de manière très claire sur cet énoncé, dans les cadres prévus à cet effet. Toute réponse raturée
ou illisible sera considérée comme absente (Une seule réponse par question).
Les tailles des différents types de variables sont supposées connues (la taille de référence étant celle du type char) :
int
:2
unsigned
:2
double
:8
pointeur : 2
I. Questions générales :
A. La valeur maximale que peut prendre une variable 'int' est dans l'intervalle :
(1) [0,120]
(2) [200,500]
(3) [500,5000]
(4) [5000,50000]
(5) [50000,500000]
(6) autre
B. Question identique à A avec une variable de type 'unsigned int'.
C. Une variable déclarée en classe d'allocation 'static' est :
(1) globale au programme
(3) invariante (ne peut être modifiée)
(5) autre
(2) initialisée lors du chargement du programme
(4) modifiable par l'intermédiaire de son adresse
D. Une fonction non déclarée 'static' est :
(1) globale au programme
(3) retourne une variable dynamique
(5) autre
(2) à adresse variable selon son utilisation
(4) ne peut contenir que des variables dynamiques
E. Une fonction déclarée 'static' est :
(1) globale au programme
(3) retourne une variable statique
(5) autre
(2) à adresse fixe tout au long de l'utilisation du programme
(4) ne peut contenir que des variables statiques
F. La déclaration du prototype d'une fonction permet :
(1) la définition des noms des variables transmises à la
fonction
(3) à un débugger de connaître la fonction
(2) à l'éditeur de liens de connaître le type de la variable
retournée par la fonction
(4) autre
G. Une macro-définition :
(1) est traitée par le compilateur comme une fonction
(3) est une fonction qui retourne obligatoirement une valeur
(5) permet de réduire la durée d'exécution d'un programme
(2) permet d'optimiser le code généré par le compilateur
(4) permet de réduire la taille du programme source
(6) autre
H. La déclaration suivante : const char *x[10];
signifie que :
(1) x est un pointeur constant sur un tableau de 10 caractères (2) x est un tableau constant de dix caractères
constants
(3) x est un pointeur constant sur un tableau de pointeurs
(4) x est un pointeur constant sur un tableau de 10 pointeurs
constants
(5) autre
Réponses :
A :_______ B :_______ C :_______ D :_______ E :_______ F :_______ G :_______ H :_______
II. Soient les fonctions suivantes :
uvw(double x[ ], unsigned n)
{
static unsigned d = 0;
if(!d)
{
for(;d<n;d++) x[d]=1.0;
return -1;
}
for(d=1; d<n; d++) x[d] += x[d-1];
return d;
}
void xyz(void)
{
double y[3], z;
unsigned m,n;
m = uvw(y,sizeof(y)/sizeof(*y));
n = uvw(y,3);
z = *y + 1 + *(y+1) + *(y+2);
}
A. La fonction 'uvw' retourne à la fonction appelante :
(1) : un caractère
(3) : un entier non signé
(5) : un pointeur
B. La variable x de la fonction 'uvw' est du type :
(1) : pointeur sur un double
(3) : pointeur constant sur un double
(5) : autre
(2) : un entier signé
(4) : un double
(6) : autre
(2) : double
(4) : pointeur constant sur un tableau constant
C. L'opérateur sizeof appliqué à la variable x dans la fonction 'uvw' retournerait :
(1) : un
(2) : deux
(3) : quatre
(4) : huit
(5) : vingt-quatre
(6) : autre
D. La variable 'd' de la fonction 'uvw' :
(1) : n'a pas de valeur initiale connue
(4) : est initialisée au démarrage du programme
(6) : autre
(2) : est initialisée à chaque appel de la fonction
(5) : a une valeur constante
On considère par la suite que la fonction 'xyz' n'est exécutée qu'une fois et que la fonction 'uvw' n'est appelée que par la
fonction 'xyz'.
E. Lors de l'exécution de la fonction 'xyz', la variable m prend la valeur :
(1) : 0
(2) : 3
(3) : 10
(4) : 6
(5) : -1
(6) : autre
F. Lors de l'exécution de la fonction 'xyz', la variable n prend la valeur :
(1) : 0
(2) : 3
(3) : 10
(4) : 6
(5) : -1
(6) : autre
G. La fonction 'xyz' :
(1) : est syntaxiquement correcte
(3) : fonctionne sans problème
(2) : sera refusée par le compilateur
(4) : autre
H.Lors de l'exécution de la fonction 'xyz', z prend la valeur :
(1) : 0.0
(3) : 6.0
(5) : 10.0
(2) : 3.0
(4) : 7.0
(6) : autre
Réponses :
A :_______ B :_______ C :_______ D :_______ E :_______ F :_______ G :_______ H :_______
III. Pointeurs
Soit la définition de variables suivante :
char *t1 = "Chat";
char *t2 = "Souris";
char *t3 = "Vache";
char *t4 = "Herbe";
char *g1[ ] = { t1, t2 };
char *g2[ ] = { t3, t4 };
char **s[ ] = { g1, g2 };
Indiquer l'objet obtenu par les expressions proposées. On portera le numéro correspondant à la réponse (noté entre crochets).
Si l'objet pointé est un caractère, indiquer sa valeur (par exemple : [1] : 'C' pour la premère lettre de 'Chat').
[1] : Un caractère du mot 'Chat'
[4] : Un caractère du mot 'Herbe'
[7] : L'adresse du mot 'Vache'
[2] : Un caractère du mot 'Souris'
[5] : L'adresse du mot 'Chat'
[8] : L'adresse du mot 'Herbe'
[3] : Un caractère du mot 'Vache'
[6] : L'adresse du mot 'Souris'
[9] : autre
t3[1] :
(*t2) :
(t1[10]) :
*(t2+3) :
t4 :
g1[1] :
**g2 :
**(g2+1) :
(*((*g2)+1)) :
(*s) :
(**s) :
(***s) :
(*(s[1])) :
((s[1])[1]) :
(((s[1])[1])[1]) :
IV. Fonctions de transferts de données.
A. Ecrire une fonction de copie de tableaux d'entiers, dont le prototype sera :
void intcopy(int *dest, const int *src, unsigned nb_elem);
Cette fonction doit copier tous les éléments de type 'int' du tableau situé à l'adresse 'src', dans la zone mémoire située à
l'adresse 'dest'. 'nb_elem' représente le nombre de données à transférer. On supposera que le tableau 'dest' peut contenir les
'nb_elem' éléments (pas de dépassement possible).
Fonction 'intcopy' :
B. Ecrire une fonction plus générale permettant de copier des tableaux de données de type quelconque. Le prototype d'une
telle fonction sera :
void gcopy(void *dst, const void *src, unsigned nb_elem, unsigned sz_elem);
où 'sz_elem' est la taille de chaque élément (en octets).
1. Commenter ce prototype (utilité de void et const, nécessité de nb_elem, sz_elem).
___________________________________________________________________________________________
2. Ecrire la fonction en la commentant abondamment.
_____________________________________________________________________________________________
3. Proposer une utilisation de cette fonction pour copier un tableau de structures.