EXAMEN LANGAGE C TEST 25
Exercice n° 2 : What will each of the following programs display ? 4pts
#include <stdio.h>
int main() {
int i = 5, j = 10;
int r = i++ + ++j; printf("r : %d\n", r); printf("i : %d\n", i); printf("j : %d", j); return 0;
}
Program a
#include <stdio.h>
int main() {
long a = 1023L;
short b = 63;
signed char c = -32; unsigned long result = (a | b) & ~(c << 1);
printf("Valeur de result : %lu\n", result);
return 0; }
Program b
#include <stdio.h>
int main() {
int i = 4, j = 3;
int r = i++ * (++j + i--) - (j++ * --i) + i++ - j--;
printf("Valeur de result : %d\n", r); printf("Valeur de i : %d", i);
printf("Valeur de j : %d\n", j);
return 0; }
Program c
#include <stdio.h> #include <math.h>
int main() {
float x = 1.5, y = -2.3; int r = (int)(ceil(x) + floor(y)) + (int)(x / y) * (int)(y); printf("Valeur de result : %d\n", r);
return 0; }
Program d
#include <stdio.h>
int main() {
int a = 5, b = 7, c = -3;
int r = (a++ * --b) + (++c * b--) - (c-- + ++a);
printf("Valeur de result : %d\n", r); printf("Valeur de a : %d\n", a);
printf("Valeur de b : %d\n", b);
printf("Valeur de c : %d\n", c);
return 0; }
Program e
#include <stdio.h>
int main() {
int a = 10, b = 3;
int e = a / b;
int m = a % b;
float d = (float)a / b;
printf("--- %d / %d = %d\n", a, b, e);
printf("--- %d %% %d = %d", a, b, m);
printf("--- %d / %d = %.2f\n", a, b, d);
return 0;
}
Program f
Exercice 2 : /6pts
Rappelez le principe du Tri Bulle et donner l’exécution de ce tri sur le Tableau K suivant : {23, 45, 3, 50}.
Quelle est la différence sémantique entre ++p et p++ ? Donner les valeurs de v, w, e et p après l'exécution du bout de code suivant : « p=4 ; v=4 + ++p ; w=4 + p++ ; e =++p + p++ »
On suppose que mat est déclaré comme suit : int mat [4][5] : (a) Donner deux syntaxes pour désigner l'adresse de début de la ligne i (c'est à dire l'adresse de la première case de la ligne i). (b) Donner deux syntaxes différentes pour désigner l’adresse de la case située à l'intersection de la ligne i et de la colonne j de mat. (c) Donner deux syntaxes différentes pour désigner le contenu de la case située à l'intersection de la ligne i et de la colonne j de mat.
Code Suivant : char c = ‘u’ ; printf("Le code ASCII de '%c' est ?: %d\n", c, c); donner la sortie écran de ce mini code en C ? Comment se base la machine pour trouver ce type de code par exemple pour ‘A’ -> 65 et ‘a’ -> 97.
On rappelle que dans le langage C, une chaîne est représentée par un tableau de caractères terminé par le caractère nul '\0'.
Schématiser chaque déclaration suivante : char voyelles1[9]={'a', 'e', 'i', 'o', 'u', 'y', ‘/0’} ;
char voyelles2[12]=''aeiouy''; char chaine1[ ]=''PandaCODEUR Is The Best'' ; int king[2][3] = { 10, 20, 30, 40, 50, 60};
Détecter et corriger les erreurs dans les déclarations suivantes : char str1[ ]='SAM SAM';
char str2[ ]={ 'N', 'O'' , 'N''} , puis schématiser.
Quel est le type de la valeur retournée par la primitive malloc ?
Problème : Gestion des Locations de Maisons /10pts
Raphaël vient d'être recruté dans une agence immobilière dans la ville de Dschang. Son rôle est de développer un système de gestion des locations de maisons pour l'agence. Ce système doit permettre de représenter les maisons disponibles à la location, de gérer les locations en cours, et de fournir des fonctionnalités avancées comme la recherche, le tri, et la sauvegarde des données. Structures de Données : une maison avec les champs suivants : idMaison (entier) : Identifiant unique de la maison, adresse (chaîne de caractères) : Adresse de la maison, prix (flottant) : Prix de location par jour, couleur (VERT, ROUGE, JAUNE) : La couleur de la maison, estLouee (booléen) : Indique si la maison est actuellement louée. Une location avec les champs suivants : listeMaisons (pointeur vers un tableau dynamique de Maison) : Liste des maisons disponibles à la location, joursLocation (pointeur vers un tableau dynamique d'entiers) : Nombre de jours de location pour chaque maison dans listeMaisons. Ce tableau doit être synchronisé avec listeMaisons : si estLouee = true pour une maison, alors joursLocation correspondant doit être > 0. nbreMais (entier) : Nombre de maisons actuellement dans la liste. capacite (entier) : Capacité actuelle du tableau dynamique (pour gérer l'allocation mémoire).
Questions :
1. Donner les structures de données adéquates pour représenter une maison et une location. Illustrer par un schéma (une maison ayant les caractéristiques de votre choix, une location de capacité 5 ayant 4 maisons dont les 3 premières sont louées et des jours de location de votre choix).
2. Écrivez une fonction initialiserLocation qui initialise la structure Location avec une capacité initiale. void initialiserLocation(Location *loc, int capInit); Illustrer par un schéma.
3. Écrivez une fonction ajouterMaison qui ajoute une nouvelle maison à la liste de manière dynamique. La fonction doit retourner true si la maison est ajoutée avec succès, et false si la maison est déjà louée ou si l'ajout échoue. bool ajouterMaison(Location *loc, Maison ms); Illustrer par un schéma dans le cas ou il Ya une case libre dans liste de Maison.
4. Écrivez une fonction afficherMaisons qui affiche toutes les maisons disponibles avec leurs détails, y compris le nombre de jours de location. void afficherMaisons(Location loc);
5. Écrivez une fonction modifierMaison qui permet de modifier l'adresse et le prix d'une maison existante. void modifierMaison(Location *loc, int idM, char *nouvelleAd, float nouvPrix);
6. Écrivez une fonction supprimerMaison qui supprime une maison de la liste de manière dynamique. Assurez-vous de synchroniser listeMaisons et joursLocation. void supMaison(Location *loc, int idM);
7.Écrivez une fonction modifierJoursLocation qui met à jour le nombre de jours de location pour une maison donnée. Si jours > 0, la maison doit être marquée comme louée (estLouee = true). Si jours = 0, la maison doit être marquée comme non louée (estLouee = false).
bool modifierJoursLocation(Location *location, int idMaison, int jours);
8.Écrivez une fonction sauvegarderMaisonsLouees qui sauvegarde les maisons louées dans un fichier nommé Location.txt. void sauvegarderMaisonsLouees(Location loc);
9. Écrivez une fonction libererLocation qui libère la mémoire allouée : libererLocation(Location *loc);
10. Donner Différence entre un fichier et un tableau : Dans la vie réelle.