Creative Commons License

Questions: première session 2

Question 1

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 2

Quelles sont les différences entre le mot-clé sizeof, les fonctions strlen (string.h) et strnlen (string.h) en C ? Donnez quelques exemples en utilisant char, char* et char []. (1 point)

Question 3

Quelle est la valeur renvoyée par chacune des lignes suivantes?

  1. 20 % 4
  2. 20 & 4
  3. 20 | 4
  4. 20 && 4
  5. 20 || 4
  6. 20 ** 4

Justifiez votre réponse. (1 point)

Question 4

Codez en C le code 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 rassembler comme ci-dessous. Pour simplifier votre programme, nous supposons qu'il n'y a que des caractères comme a-z, A-Z, virgule (,) et point (.).

(2 points)

Question 5

Considérer un entier d (int d ;). Codez en C une fonction qui vérifie si les 12eme et 17eme bits de droite sont 1 (en binaire). Si les deux bits sont 1, la fonction renvoie 1 sinon 0. (1 point)

Question 6

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 7

En utilisant les listes simplement chainées, écrivez le code liste.c  (et liste.h) et implémentez les fonctions suivantes :

  1. 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 ce nombre au début de la liste chainée.
  2. 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 ce nombre.

(2 points)

Question 8

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 9

p>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).

  1. Quel code est implémenté dans le fichier .h ?
  2. Quel code est implémenté dans le fichier .c ?
  3. Quelle commande de compilation permet d’obtenir le fichier .o à partir du fichier.c ? Donner la commande pour avoir le module1.o à partir du module1.c
  4. Que contient le fichier module1.o ?
  5. Est-ce que le fichier module1.o est un fichier exécutable ?

(1 point)

Question 10

Coder en C les fonctions suivantes

  1. aire qui permet de calculer l’aire d’un cercle en fonction du rayon.
  2. 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

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 12

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 13

Quelles sont les différences entre les fonctions récursives et les approches itératives?

La suite de Fibonacci est une suite d’entiers définie comme suit :

En utilisant une méthode itérative, coder en C la fonction void  fibonacci(int  n)  qui prend n comme entrée et affiche les n termes de la suite de Fibonacci U0, U1, U2,…Un. (2 points)

Question 14

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 :

  1. for
  2. do..while

(1 point)

Question 15

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 ?

  1. sizeof (float)
  2. sizeof (float *)
  3. sizeof (float **)
  4. sizeof (float ***)

Justifiez votre réponse. (1 point)