Questions: première session
- Année: 2019-2020
- Durée: 2 heures
- Total: 20 points
- Documents: autorisés
- Types de documents autorisés: Tous les documents autorisés
- Calculatrices : non autorisées
Question 1
Répondez aux questions suivantes :
- a. C est un langage compilé. Pourquoi ? Justifiez votre réponse.
- b. Quels sont les objectifs des options –E, -o et –c du compilateur gcc ? Donnez un exemple d’utilisation pour chaque option.
- c. Quel code est implémenté dans le fichier
.h
- d. Quel code est implémenté dans le fichier
.c
?
(2 points)
Question 2
Vous êtes sur une machine de 64 bits et vous utilisez également un système d’exploitation 64bits. Considérez les variables suivantes :
char message1[10] = "Bonjour" ;
char *message2 = "Bonjour" ;
Quelle est la valeur renvoyée par chacune des lignes suivantes ?
- a) sizeof (int)
- b) sizeof (int *)
- c) sizeof (char **)
- d) sizeof (float **)
- e) sizeof (message1)
- f) strlen(message1)
- g) sizeof (message2)
- h) strlen(message2)
Justifiez votre réponse. (2 points)
Question 3
Le contenu d’un fichier opérateurs.h
est donné ci-dessous
#ifndef __OPERATEURS_H__
#define __OPERATEURS_H__
int num = 20;
int add( int, int);
#endif //__OPERATEURS_H__
Pourquoi utilisons-nous les directives du préprocesseur comme ifndef
, define
et endif
? Justifiez votre réponse avec des exemples. (2 points)
Question 4
Ecrivez un code complet en C dans le but de permuter les valeurs de deux variables. Votre code doit contenir les fichiers d'en-tête nécessaires,
une fonction échange(...)
et une fonction main. Le but de la fonction échange(...)
est d’assurer la permutation des valeurs de deux nombres à virgule flottante.
La fonction main doit appeler la fonction échange(...)
et doit afficher les valeurs avant et après l'appel de la fonction. (2 points)
Question 5
Quelles sont les différences entre les mots-clés struct et union en C ? Coder en C une structure de données Livre qui comporte les éléments suivants : identifiant, titre, nom d’écrivain(e), nombre de pages, année de publication, nom de la maison d’édition, prix. Instanciez une variable de cette structure (par exemple, les détails de votre livre préféré). Votre structure doit utiliser union. (2 points)
Question 6
Quelle est la valeur renvoyée par chacune des lignes suivantes ?
- a) 8 % 4
- b) 8 & 4
- c) 8 | 4
- d) 8 && 4
- e) 8 || 4
- f) 8 << 4
- g) 8 / 4
- h) 8 ** 4
Justifiez votre réponse. (2 points)
Question 7
Codez en C un programme qui prend des numéros (un ou plusieurs) passés par la ligne de commande. L’objectif de code est de calculer
- a) Le nombre de nombres
- b) Le numéro le plus grand
- c) Le numéro le plus petit
- d) La moyenne
N’utilisez pas scanf
. (2 points)
Question 8
Coder en C la fonction qui permet d’afficher les n premières et les n dernières lignes d’un fichier dont le nom de fichier et la valeur n sont passés par l’utilisateur en utilisant la ligne de commande.
Pensez aux commandes head
et tail
en Linux dont l’objectif est d’afficher les n premières et les n dernières lignes d’un fichier. (2 points)
Question 9
Sans utiliser les bibliothèques standards ou externes (par exemple string.h
), écrivez le code en C qui
- Calcule le nombre de caractères dans une autre chaine de caractères
- Copie une chaine de caractères dans une autre chaine de caractères
- Concatène deux chaines de caractères
- Compare deux chaines de caractères.
Vous devez écrire des fonctions pour chacune de ces opérations sur les chaînes de caractères. (2 points)
Question 10
En utilisant les listes génériques simplement chainées, écrivez le code liste.c
(et liste.h
) et implémentez les fonctions suivantes :
- void inserer(list *, void*) prend deux entrées : une liste d’entiers simplement chainée et un pointeur générique. L’objectif de cette fonction est d’ajouter l’entier à la fin de la liste chainée.
- void* supprimer (list *) prend une entrée : une liste d’entiers simplement chainée. L’objectif de cette fonction est de supprimer le premier élément dans la liste et de renvoyer cet élément en utilisant un pointeur générique.
Rappelez bien qu’une liste générique simplement chainée fonctionne avec les différents types de données : les entiers, les nombres en flottant, les caractères ou même les structures. (2 points)