Questions: première session
- Année: 2018-2019
- 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
Quelles sont les différences entre un compilateur et un interpréteur. Donnez des exemples de langages compilés et de langages interprétés. (0.5 point)
Question 2
Quels sont les objectifs des options –E, -o et –c du compilateur gcc? Donnez un exemple d’utilisation pour chaque option. (0.5 point)
Question 3
Coder en C la fonction puissance qui prend deux entiers a et b et qui renvoie la valeur du nombre a élevé à une puissance b. Par exemple, puissance(2,3) renvoie la valeur 8. N’utilisez pas la fonction power() (math.h). (1 point)
Question 4
Vous avez des fichiers C suivants : client.c, client.h, serveur.c, serveur.h, couleur.c et couleur.h. Ecrivez un Makefile qui peut générer deux fichiers exécutables appelés server et client en utilisant les fichiers précédents. L’exécutable client est généré en utilisant client.c, client.h, couleur.h et couleur.c et l’exécutable server est généré en utilisant les fichiers serveur.c, serveur.h, couleur.h et couleur.c. (1 point)
Question 5
Vous êtes sur une machine de 64 bits et vous utilisez également un système d’exploitation 64bits. Quelle est la valeur renvoyée par chacune des lignes suivantes ?
- a) sizeof (int)
- b) sizeof (int *)
- c) sizeof (char **)
- d) sizeof (float **)
Question 6
Ci-dessous vous avez une partie de code. Quel est l’objectif de ce code ? (1 point)
#include <stdio.h>
#include <string.h>
int main() {
char phrase[100];
while(1) {
printf(“Entrez une phrase: ”) ;
fgets(phrase, 100, stdin) ;
phrase[strnlen(phrase, 100)-1] = ‘\0’ ;
if (strncmp(phrase, “FIN”, 100) == 0) {
break ;
}
int num[2];
sscanf(phrase, “%d %d”, &num[0], &num[1]);
printf (“%d\n”, num[0] & num[1]) ;
}
return(0) ;
}
Question 7
Coder en C la fonction int conversion (char * str) qui permet de convertir une chaine de caractères str à un entier. La fonction conversion renvoie l’entier après la conversion. Vous pouvez utiliser les fonctions disponibles dans les bibliothèques standards ou vous pouvez écrire votre propre fonction. (1 point)
Question 8
Considérer un entier d (int d ;). Codez en C une fonction qui vérifie si les 8eme et 25eme bits de gauche sont 1 (en binaire). Si les deux bits sont 1, la fonction renvoie 1 sinon 0. (1 point)
Question 9
Coder en C une structure de données Capteur qui comporte les éléments suivants : identifiant, luminosité, pression, température, bâtiment. Les trois valeurs des mesures (luminosité, pression, température) doivent être des nombres flottants. L’élément bâtiment est la localisation de capteurs, c’est-à-dire, le nom de bâtiment et son adresse. Instanciez une variable de cette structure. (1 point)
Question 10
Coder en C une structure de données Etudiant qui comporte les éléments suivants : Nom, Prénom, Adresse (rue, ville etc.), Filière (ETI, IRC ou CGP), Modules choisis (5 maximum), la note dans chaque module.
Coder en C une structure de données Module qui comporte les éléments suivants : Nom du module, responsable du module, les intervenants dans le module.
Mais nous avons une contrainte. Nous ne savons pas la taille maximum (ou le nombre de caractères) de nom, prénom, rue, ville, nom du module etc. C’est l’utilisateur qui doit saisir ces valeurs pendant l’exécution.
Pour les deux structures Etudiant et Module, n’oubliez pas d’utiliser les types enum, struct et/ou union. (1.5 points)
Question 11
Sans utiliser les bibliothèques standards ou externes (par exemple string.h), écrivez le code en C qui
- copie une chaine de caractères dans une autre chaine de caractère
- concatène deux chaines de caractères
- calcule le nombre de caractères dans une autre chaine de caractères
Question 12
Codez en C un programme qui prend des numéros (un ou plusieurs) passé par la ligne de commande. L’objectif de cette fonction est de calculer
- a) Le numéro plus grand
- b) Le numéro plus petit
Question 13
Codez en C la fonction qui affiche le compte de différents mots dans un fichier. Le nom du fichier est saisi par l’utilisateur. Par exemple, la sortie de votre programme peut ressembler à ceci. int : 24 fois print : 34 fois … (2 points)
Question 14
Coder en C la fonction int main(int argc, char* argv[]) qui permet d’afficher le contenu de tous les fichiers dans un répertoire dont le nom est passé en ligne de commande. Pour simplifier notre question, nous imaginons qu’il n’y a pas des sous-répertoires dans le répertoire saisi par l’utilisateur (1.5 points)
Question 15
Une des bonnes pratiques de programmation en C est de diviser le code en plusieurs modules (module1, module2,etc…) Pour chaque module on associe un fichier .h (exemple module1.h) et un fichier .c (exemple module2.c).
Quel code est implémenté dans le fichier .h ?
Quel code est implémenté dans le fichier .c ? (0.5 point)
Question 16
En utilisant les listes simplement chainées, écrivez le code liste.c (et liste.h) et implémentez les fonctions suivantes :
- void inserer(list *, int) prend deux entrées : une liste d’entiers simplement chainée et un nouvel entier. L’objectif de cette fonction est d’ajouter l’entier à la fin de la liste chainée.
- int supprimer (list *) prend une entrée : une liste d’entiers simplement chainée. L’objectif de cette fonction est de supprimer le premier entier dans la liste et de renvoyer cet entier.
Question 17
Modifiez votre code précédent pour implémenter une liste générique simplement chainée pour qu’il fonctionne avec les différents type de données: les entiers, les nombres en flottant, les caractères ou mêmes les structures. Pensez à utiliser les pointeurs génériques. (1.5 points)