exam mic 0910
3i`
eme ann´ ee - MIC
Langage C
Examen
Examen langage C
Janvier 2010
1
Exercice 1 (10 points)
Le but de cet exercice est d’impl´ementer des listes lin´eaires. Dans une liste lin´eaire, l’insertion et la suppression d’´el´ement peut se faire n’importe o` u (contrairement aux files et aux piles).
Une liste lin´eaire peut ˆetre repr´esent´ee par une structure de donn´ees compos´ee de (cf figure 1) :
– un pointeur sur le premier ´el´ement de la liste ;
– un pointeur sur le dernier ´el´ement de la liste ;
– un pointeur ”courant” qui est un pointeur permettant de se d´eplacer dans la liste.
cellule
2
5
7
premier courant dernier liste Fig. 1 – Un exemple de liste
1
3 NULL
INSA
Examen
On consid` ere dans la suite de l’exercice que l’on impl´ emente une liste d’entiers.
On consid` ere dans la suite de l’exercice qu’une liste vide est une structure dans laquelle les pointeurs premier, courant et dernier sont nuls.
1. D´ecrivez les structures de donn´ees liste et cellule en langage C.
2. Ecrivez le code C de la fonction Init qui initialise une liste vide.
3. Ecrivez le code C de la fonction Inserer qui ins`ere un ´el´ement dans la liste juste avant le pointeur courant ; le pointeur courant pointe ensuite sur ce nouvel ´el´ement. Vous consid´ererez trois cas : 1) la liste est vide,
2) le pointeur courant est sur le premier ´el´ement et 3) le cas g´en´eral.
4. Ecrivez le code de la fonction Backup qui parcourt la liste et ´ecrit dans un fichier la valeur de tous les ´el´ements de la liste, s´epar´es par des espaces. Par exemple, la liste ci-dessus sera sauvegard´ee dans le fichier sous la forme 2 7 5 3. Cette fonction prend en param`etres la liste et le nom du fichier (on suppose que le fichier existe).
2
Exercice 2 (3 points)
Soit le programme suivant :
#include <stdio.h>
#include <stdlib.h> int main()
{
int i=8194; printf("%x %x %x %x\n",((unsigned char *)&i)[0],((unsigned char *)&i)[1],
((unsigned char *)&i)[2],((unsigned char *)&i)[3]); return(0); }
A