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 -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 :
#include <string.h> char message1[10] = "Bonjour" ; char *message2 = "Bonjour" ;
Quelle est la valeur renvoyée par chacune des lignes suivantes ?
- a) sizeof (char)
- b) sizeof (char *)
- c) sizeof (char **)
- d) sizeof (int **)
- 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 somme( int, int); #define PI 3.141592653589 #define multiplication(a,b) a * b #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 variables. 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
Coder en C une structure de données Capteur qui comporte les éléments suivants : identifiant, temps, 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 capteur, c’est-à-dire, le nom du bâtiment et son adresse. temps correspond à l'heure à laquelle les valeurs du capteur ont été obtenues. Instanciez une variable de cette structure. (2 points)
Question 6
Quelle est la valeur renvoyée par chacune des lignes suivantes ?
- a) 10 % 3
- b) 10 & 3
- c) 10 | 3
- d) 10 && 3
- e) 10 || 3
- f) 10 << 3
- g) 10 / 3
- h) 10 ** 3
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
- Trier les nombres par ordre croissant
- Trier les nombres par ordre décroissant
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 chaine de caractères
- Trouve la première occurrence d'une phrase dans une chaîne de caractères
- Trouve toutes les occurrences d'une phrase dans une chaîne de caractères
Vous devez écrire des fonctions pour chacune de ces opérations. (2 points)
Question 10
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 pointeur entier. L’objectif de cette fonction est d’ajouter l’entier pointé par le pointeur 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 en utilisant un pointeur entier.
(2 points)