Examen intra (Fichier Word) - LabUnix

const char * s. char * const s. 4. Que signifie le terme static devant la déclaration
et définition d'une variable à l'extérieur de toute paire d'accolades ? 5. Déclarez ...

Part of the document


[pic] Questions d'examen intra (session Hiver 2005) Professeurs : Vladimir Makarenkov et Aziz Salah ; Cours : INF 3135 Barème : Questions 1-18 : 2 points chacun, Questions 19-23 : 4 points chacun, Question 24 : 6 points chacun, Questions 25 -26 : 10 points chacun, Question 27 : 8 points, Question 28 : 10 points. 1. Donnez un exemple de chaque cas pour une donnée de type long : une déclaration seulement
une déclaration et définition
une déclaration, définition et initialisation 2. Donnez la taille en octet des constantes suivantes : 'a'
"a"
"abc" 3. Quelle est la différence entre :
const char * s
char * const s
4. Que signifie le terme static devant la déclaration et définition d'une
variable à l'extérieur de toute paire d'accolades ?
5. Déclarez un objet constant de type entier et initialisez le à la durée
d'une journée en seconde.
6. Avec les déclarations : int vFirstInt = 1;
int vResult = 1; quelle sera la valeur de vResult après chacune des instructions ci-dessous
? vResult - = vFirstInt;
vResult = - vFirstInt;
vResult = vFirstInt / 2;
vResult = vFirstInt ++;
7. Déclarez un tableau de 10 entiers de type long et initialisez le à la
séquence 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 à l'aide d'une instruction do-while : 8. Quelle est l'expression en C permettant d'allouer de l'espace mémoire
dynamique pour : - un entier ?
- un tableau de 10 réels ? 9. Que fait la fonction exit ? Quelles sont les valeurs standard de ses
arguments ?
10. Récrivez le code ci-dessous à l'aide de switch-case. int i;
if (i == 3) { ...; }
else if (i == 2) { ...; }
else if (i == 1) { ...; }
else { ...; } 11. Réécrivez ce fragment de code de façon plus claire :
if ( !(c=='X' || c == 'x') )
return; 12. Réécrivez ce fragment de code à l'aide de if et else :
quote = (*line == ' " ') ? 1: 0; Identifiez les problèmes avec ces définitions de macros en trouvant un
contexte dans lequel ils ne produisent pas le résultat escompté (questions
13 et 14) :
13. #define MACRO5 (x) 5 + 5*x 14. #define ISDIGIT (c) ((c >= '0') && (c < = '9')) ? 1 : 0 Réécrivez ces fragments de code de façon plus claire (questions 15 - 17):
15. if (istty(stdin)) ;
else if (istty(stdout)) ;
else if (istty(stderr)) ;
else return (0);
16. if (retval != SUCCES)
{
return (retval);
}
/* Tout se déroule parfaitement ! */
return SUCCES; 17. for (k = 0; k++ < 5; x += dx)
scanf("%lf", &dx);
18. Commentez le choix des noms et des valeurs dans le code suivant : # define VRAI 0
# define FAUX 1 if ((car = getchar ()) == EOF)
not_eof = FAUX; 19. Qu'écrit le printf ci-dessous si les entiers sont codés sur 2 octets ?
Pourquoi ? int a = 30000, b = 5000;
printf("%d \n", - a - b); 20. Que voit-on s'imprimer à l'écran après les lignes suivantes ? Pourquoi
? int z = 3, a = 0, b = 2;
if (a < 0)
if (a < b) z = a;
else z = b;
printf("%d \n", z);
21. Un programme contient les déclarations et instructions suivantes : char * mot = "bonsoir";
char mot1[ ] = "bonjour";
mot1[1] = 'p'; /*1*/
mot[1] = 'p'; /*2*/
mot = (char *)malloc(7*sizeof(char)); /*3*/
mot1 = (char *)malloc(8*sizeof(char)); /*4*/
mot[0] = 'm'; /*5*/
strcpy(mot, "bonjour"); /*6*/
Certaines de ces instructions sont incorrectes. Il s'agit de faire la liste
de ces instructions et d'expliquer pourquoi elles sont incorrectes. Les
instructions sont exécutées séquentiellement (i.e., le résultat de la
deuxième dépend du résultat de la première et ainsi de suite).
22. Qu'écrit le programme suivant? Pourquoi ? void definir (char *, int);
void main (void)
{
char saison[10] = "printemps";
int jour = 300;
definir(saison, jour);
printf("%s %d", saison, jour);
}
void definir(char * un_mot, int un_jour)
{
strcpy(un_mot, "automne");
un_jour = 200;
}
23. Qu'écrit l'instruction printf ci-dessous ? Pourquoi ? int a = -1, b = 3, c = 0;
printf ( "%d %d %d \n", a > b a, (a < b < c) &&
(b > c) ); 24. Utilisation de pointeurs. Qu'affiche ce programme ? Justifiez votre
réponse.
#include
int main()
{
int x;
for ( x = 0; x < 2; x++) {
putchar( "AC"[x] );
putchar( x["AC"] );
putchar( *("AC" + x) );
putchar( *"AC" + x );
putchar('\n');
}
return 0;
}
25. Écrire une fonction C qui convertit une chaîne de caractères s en une
liste chaînée où chaque n?ud contient un caractère.
26. #Makefile SRCS = main.c somme.c
PS_FILES = $(SRCS:.c=.ps)
FORMAT_COMMAND = a2ps
PRINTER = laser
PRINT_COMMAND = lpr -P $(PRINTER)
listing: main.ps somme.ps
(1) $(PRINT_COMMAND) $(PS_FILES)
main.ps: main.c
(2) $(FORMAT_COMMAND) main.c > main.ps
somme.c: somme.c
(3) $(FORMAT_COMMAND) somme.c > somme.ps
clean:
(4) rm *.ps
Pour bien comprendre le makefile ci-dessus, on précise que :
a2ps > : permet de générer un fichier de format
Postscript à partir du fichier texte .
lpr -P : permet d'imprimer les fichiers
Postscript et sur l'imprimante . 1) Donnez les modifications à faire (s'il y en a) pour que ce fichier
makefile soit conforme au style des fichiers makefile vu en cours ? 2) On suppose que l'on exécute les deux commandes a) et b) suivantes :
a) make clean
b) make
Quelles sont les commandes du makefile ci-dessus qui ont été exécutées
suite à la commande b) ? 3) Donnez la commande make à taper pour que les fichiers main.ps et
somme.ps soient imprimés sur l'imprimante laserCouleur sans modifier le
makefile.
27. Répondre par Vrai ou Faux : 1) cvs est un logiciel qui permet de planifier la gestion de la
configuration. 2) Dans cvs, tous les développeurs doivent avoir une copie locale de
l'ensemble du projet. 3) L'état d'un fichier est dit «sticky», si la copie locale du fichier a
été modifiée par rapport à la dernière version disponible dans le
dépôt. 4) Un fichier binaire peut être ajouté au repositoire cvs.
28. Cette session un nouveau cours intitulé inf3135 est donné par deux
professeurs Aziz et Vladimir. Pour coordonner leurs travaux de rédaction
des notes de cours un projet appelé notes_inf3135 a été créé dans un
repositoire cvs. Parmi tous les fichiers texte du projet notes_inf3135
notre attention est portée sur le fichier notes_inf3135/chap1.txt pour
lequel le repositoire dispose des révisions suivantes : 1.1, 1.2, 1.3, 1.4, 1.5 et 1.6 Un chargé de cours a remarqué que la révision 1.4 du fichier chap1.txt peut
être réutilisée dans son cours inf3145. Après avoir récupéré la révision
1.4 du fichier chap1.txt, il a dû modifier ce fichier pour accommoder les
objectifs du cours inf3145. Par la suite, il veut ajouter la nouvelle
version de chap1.txt dans le repositoire. On suppose que les variables
d'environnement sont configurées pour indiquer l'endroit du repositoire de
cvs et le chargé de cours a tous les droits nécessaires pour l'accès au
repositoire. 1) Donner la commande qu'on doit faire pour récupérer la révision 1.4 du
fichier chap1.txt.
2) Donner les commandes cvs pour ajouter la nouvelle version du fichier
chap1.txt dans le repositoire dans le projet notes_inf3135 sachant que
cet ajout ne doit pas perturber les notes pour le cours inf3135.