Questions: première session 1
- Année: 2021-2022
- 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
Codez en C le programme qui cherche un fichier dans un répertoire. Le nom de fichier ainsi que le chemin de répertoire sont saisis par l’utilisateur. Le programme affiche ‘oui’ ou ‘non’. 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 point)
Question 2
Quelles sont les différentes étapes de compilation d’un programme C en utilisant un compilateur comme gcc. Quelles sont les options de gcc pour voir la sortie de chaque étape.. (1 point)
Question 3
En utilisant les listes simplement chainées, écrivez le code liste.c (et liste.h) et implémentez les fonctions suivantes :
- void inserer(list *, float) prend deux entrées: une liste de nombres réels simplement chainée et un nouveau nombre réel. L’objectif de cette fonction est d’ajouter ce nombre au début de la liste chainée.
- float supprimer (list *) prend une entrée : une liste de nombres réels simplement chainée. L’objectif de cette fonction est de supprimer le premier nombre réel dans la liste et de renvoyer ce nombre.
(2 points)
Question 4
Coder en C la fonction qui permet d’afficher les 10 premières et les 10 dernières lignes d’un fichier dont le nom est passé par la ligne de commande. (2 points)
Question 5
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.
Coder une deuxième structure de données Etudiant qui comporte les éléments suivants : nom, prénom, adresse (rue, ville etc.), filière (ETI, IRC ou CGP), cinq livres préférés.
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 livre etc. C’est l’utilisateur qui doit saisir ces valeurs pendant l’exécution.
Pour ces deux structures Livre et Etudiant, n’oubliez pas d’utiliser les types enum, struct et/ou union.
Instanciez des variables de ces deux structures. (2 points)
Question 6
Quelle est la valeur renvoyée par chacune des lignes suivantes?
- a) 10 % 8
- b) 10 & 8
- c) 10 | 8
- d) 10 && 8
- e) 10 || 8
- f) 10 ** 8
Justifiez votre réponse.(1 point)
Question 7
Déclarez une structure de représentation d'une liste doublement chainée pour qu'elle puisse fonctionner avec les différents types de données: les entiers, les nombres en flottant, les caractères ou mêmes les structures. Attention, l'objectif de cette question n'est pas d'écrire les fonctions, mais simplement de déclarer une structure de données (voir struct). Pensez à utiliser les pointeurs génériques. ( 1 point)
Question 8
Codez en C un programme qui prend des numéros (un ou plusieurs) passé par la ligne de commande. L’objectif du programme est de calculer
- Le numéro plus petit
- Le numéro plus grand
- La somme de ces numéros
- La moyenne de ces numéros
N’utilisez pas scanf. (2 points)
Question 9
Ci-dessous vous avez une partie de code. Quel est l’objectif de ce code ?
int num ; while(1) { printf(“Entrez un numéro: ”) ; scanf(“%d”, &num) ; if (num % 2) { break; } }
Sans changer l’objectif, modifiez le code précédent en utilisant une boucle :
- for
- do..while
(1 point)
Question 10
Coder en C les fonctions suivantes
- aire qui permet de calculer l’aire d’un cercle en fonction du rayon.
- perimetre qui permet de calculer le périmètre d’un cercle en fonction du rayon.
L'entrée des deux fonctions aire et perimetre est le rayon du cercle (un nombre réel).
Les deux fonctions aire et perimetre renvoient l'aire et le périmètre du cercle. (1 point)
Question 11
Codez en C le code qui affiche le compte de différents caractères (a-z, A-Z, 0-9) dans un fichier. Le nom du fichier est saisi par l’utilisateur. Par exemple, la sortie de votre programme peut rassembler comme ci-dessous.
- a : 24 fois
- b : 34 fois
- ...
- Z : 4 fois
(2 points)
Question 12
Quels sont les avantages à utiliser un Makefile et la commande make.
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 13
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 ?
- sizeof (int)
- sizeof (int *)
- sizeof (int **)
- sizeof (int ***)
Justifiez votre réponse. (1 point)
Question 14
Quelles sont les différences entre les fonctions fgets et scanf en C ? Donnez quelques exemples. (1 point)
Question 15
- 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.
- Donnez des exemples de logiciels écrits en C.
(1 point)