Correction de l'Examen de Langage C
Questions de Cours
1. Types des constantes :
- '1' : Constante de type
char
(caractère).
- ''1'' : valide Table of character
- 1 : Constante de type
int
(entier).
- ''1234'' : valide Table of character
- ''jean'' : Ivalide Table of character
2. Différence entre constante caractère et chaîne de caractères :
Une constante caractère est entourée de guillemets simples ('a'), tandis qu'une chaîne de caractères est entourée de guillemets doubles ("abc").
L'écriture 'pepito' est incorrecte car elle utilise des guillemets simples pour une chaîne de caractères.
Il n'existe pas de type spécifique pour les chaînes de caractères en C. Les chaînes sont représentées par des tableaux de caractères terminés par le caractère nul '\0'.
3. Différence entre ++i et i++ :
++i incrémente i avant d'utiliser sa valeur, tandis que i++ utilise la valeur de i avant de l'incrémenter.
Après l'exécution du code :
i=4;
x=4 + ++i; // i devient 5, x = 4 + 5 = 9
y=4 + i++; // y = 4 + 5 = 9, puis i devient 6
z=++i + i++; // i devient 7, z = 7 + 7 = 14, puis i devient 8
Valeurs finales : x = 9, y = 9, z = 14, i = 8
Analyse de Code
Sortie écran :
n est Positif et dans la plage [1, 100]
m est Impair et non nul
Structure de Contrôle :
Le programme utilise l'opérateur ternaire ? :
pour effectuer des conditions en une ligne.
Exercice 2 : Pièces de Monnaie
#include <stdio.h>
int main() {
int pieces[] = {500, 100, 50, 25};
int nbPieces[] = {0, 0, 0, 0};
int S, i;
printf("Entrez la somme en FCFA : ");
scanf("%d", &S);
for (i = 0; i < 4; i++) {
nbPieces[i] = S / pieces[i];
S = S % pieces[i];
}
printf("Détail des pièces :\n");
printf("500 FCFA : %d\n", nbPieces[0]);
printf("100 FCFA : %d\n", nbPieces[1]);
printf("50 FCFA : %d\n", nbPieces[2]);
printf("25 FCFA : %d\n", nbPieces[3]);
return 0;
}
Ce programme calcule le nombre minimal de pièces nécessaires pour constituer une somme donnée en FCFA.
Problème : Gestion des Docteurs
#include <stdio.h>
#include <string.h>
#define CAPACITE_MAX 100
typedef struct {
int code;
char nom[50];
char specialite[50];
int experience;
int consultations;
} Docteur;
Docteur* rechercherDocteurParCode(Docteur* docteurs, int taille, int code) {
for (int i = 0; i < taille; i++) {
if (docteurs[i].code == code) {
return &docteurs[i];
}
}
return NULL;
}
int ajouterDocteur(Docteur* docteurs, int* taille, int capacite, Docteur nouveauDocteur) {
if (*taille >= capacite) {
return 0;
}
if (rechercherDocteurParCode(docteurs, *taille, nouveauDocteur.code) != NULL) {
return 0;
}
docteurs[*taille] = nouveauDocteur;
(*taille)++;
return 1;
}
int modifierConsultations(Docteur* docteurs, int taille, int code, int nouvellesConsultations) {
Docteur* docteur = rechercherDocteurParCode(docteurs, taille, code);
if (docteur == NULL) {
return 0;
}
docteur->consultations = nouvellesConsultations;
return 1;
}
int supprimerDocteur(Docteur* docteurs, int* taille, int code) {
for (int i = 0; i < *taille; i++) {
if (docteurs[i].code == code) {
for (int j = i; j < *taille - 1; j++) {
docteurs[j] = docteurs[j + 1];
}
(*taille)--;
return 1;
}
}
return 0;
}
Docteur* docteurPlusExperimente(Docteur* docteurs, int taille) {
if (taille == 0) {
return NULL;
}
Docteur* plusExperimente = &docteurs[0];
for (int i = 1; i < taille; i++) {
if (docteurs[i].experience > plusExperimente->experience) {
plusExperimente = &docteurs[i];
}
}
return plusExperimente;
}
void afficherDocteursSpecialite(Docteur* docteurs, int taille, const char* specialite) {
for (int i = 0; i < taille; i++) {
if (strcmp(docteurs[i].specialite, specialite) == 0) {
printf("Code: %d, Nom: %s, Expérience: %d ans, Consultations: %d\n",
docteurs[i].code, docteurs[i].nom, docteurs[i].experience, docteurs[i].consultations);
}
}
}
int main() {
/*Questions 2*/
Docteur docteurs[CAPACITE_MAX];
int taille = 0;
// Exemple d'utilisation des fonctions
Docteur d1 = {1, "Dr. Joel", "Cardiologie", 10, 200};
ajouterDocteur(docteurs, &taille, CAPACITE_MAX, d1);
Docteur* doc = rechercherDocteurParCode(docteurs, taille, 1);
if (doc != NULL) {
printf("Docteur trouvé : %s\n", doc->nom);
}
modifierConsultations(docteurs, taille, 1, 250);
afficherDocteursSpecialite(docteurs, taille, "Cardiologie");
return 0;
}
Ce programme implémente une gestion de base de données de docteurs avec des fonctions pour ajouter, rechercher, modifier, supprimer et afficher des docteurs.