EXAMEN LANGAGE C ( PROGRAMMATION C ) TEST  22 /XX année acaDéMIQUE 2024 - 2025

EXAMEN + CORRIGE EN LANGAGE C

Questions de Cours : 7pts

Quelle est la différence syntaxique entre une constante caractère (char) et une constante chaîne de caractères ? L' écriture 'jean' est elle correcte ? Existe-t-il un type spécifique au chaine en C ?

  • Quelle est la différence sémantique entre ++i et i++ ? Donner les valeurs de x, y, z  et i après l'exécution du bout de code suivant : « i=4 ; x=4 + ++i ; y=4 + i++ ; z=++i + i++ »
  • Analyse d’un code C , donner la sortie écran et explique la Structure de Contrôle utilisée dans ce Programme C:

#include <stdio.h>

int main() {

    int n=4, m=9;

    (n > 0 && n <= 100) ? printf("n est Positif et dans la plage [1, 100]\n") :

    (n < 0 && n >= -100) ? printf("n est Négatif et dans la plage [-100, -1]\n") :

    printf("n est Zero ou hors des plages spécifiées\n");

    (m % 2 == 0 && m != 0) ? printf("m est Pair et non nul\n") :

    (m % 2 != 0 && m != 0) ? printf("m est Impair et non nul\n") : printf("m est Zero\n");

    return 0; }

 

  1. What are basic data types supported in the C Programming Language? What are tokens in C?
  2. All keywords in C are in __a) LowerCase letters b) UpperCase letters c) CamelCase letters
    d) None of the mentioned
  3. Which is valid C expression? a) int my_num = 100,000; b) int my_num = 100000; c) int my num = 1000;  d) int $my_num = 10000;

EXERCICE 2 : 05 pts 

Nous disposons d'un nombre illimité de pièces de 25, 50, 100 et 500 FCFA. Nous souhaitons, étant donnée une somme S, savoir avec quelles pièces la payer de sorte que le nombre de pièces utilisée soit minimal. Par exemple, la somme de 1375 F CFA se paie avec deux pièces de 500 F CFA, trois pièces de 100 F CFA, une pièce de 50 FCFA et une pièce de 25 FCFA. Ecrire un programme C demandant à l'utilisateur de saisir une valeur positive ou nulle. Ensuite, affichez le détail des pièces à utiliser pour constituer la somme saisie avec un nombre minimal de pièces.

Indice: Vous pouvez utiliser un tableau pour stocker-les pièces de monnaie.

 

PROBLEME : Sante 8pts

La société NkiliTech, spécialisée dans les services médicaux, souhaite développer un programme pour gérer efficacement une base de données contenant des informations sur ses docteurs. Chaque docteur est caractérisé par les informations suivantes : Code : Identifiant unique (entier). Nom : Nom complet du docteur (chaîne de caractères). Spécialité : Domaine médical de spécialisation (chaîne de caractères). Expérience : Nombre d'années d'expérience (entier). Consultations : Nombre total de consultations effectuées par le docteur (entier). Votre mission est d’implémenter un programme en langage C permettant de répondre aux besoins de gestion des docteurs de la société NkiliTech. Le programme doit utiliser une structure pour modéliser les docteurs et un tableau statique initial pour contenir les docteurs.

Exercices :

  1. Définir une structure Docteur permettant de modéliser un docteur.
  2. Créer un tableau statique de docteurs, permettant de gérer un ensemble de docteurs, avec une capacité maximale donnée (par exemple, 100 docteurs).
  3. Implémenter une fonction permettant de rechercher un docteur dans la base à partir de son code. Prototype : Docteur* rechercherDocteurParCode(Docteur* docteurs, int taille, int code);. Retour attendu : un pointeur vers le docteur s'il est trouvé, ou NULL sinon.
  4. Implémenter une fonction permettant d’ajouter un nouveau docteur à la base. Prototype : int ajouterDocteur(Docteur* docteurs, int* taille, int capacite, Docteur nouveauDocteur);. La fonction vérifie que le code est unique avant l'ajout et retourne 1 si l’ajout est réussi, ou 0 si la base est pleine ou si le code est dupliqué.
  5. Implémenter une fonction permettant de modifier le nombre de consultations d’un docteur à partir de son code. Prototype : int modifierConsultations(Docteur* docteurs, int taille, int code, int nouvellesConsultations);. Retour attendu : 1 si la modification a réussi, ou 0 si le docteur n'a pas été trouvé.
  6. Implémenter une fonction permettant de supprimer un docteur de la base à partir de son code. Prototype : int supprimerDocteur(Docteur* docteurs, int* taille, int code);. La fonction réorganise le tableau pour combler l’espace laissé par le docteur supprimé et retourne 1 si la suppression a réussi, ou 0 si le docteur n’a pas été trouvé.
  7. Implémenter une fonction permettant de trouver le docteur ayant le maximum d’années d’expérience dans la base. Prototype : Docteur* docteurPlusExperimente(Docteur* docteurs, int taille);. Retour attendu : un pointeur vers le docteur trouvé, ou NULL si la base est vide.
  8. Implémenter une fonction permettant d’afficher les informations des docteurs spécialisés dans un domaine médical donné. Prototype : void afficherDocteursSpecialite(Docteur* docteurs, int taille, const char* specialite);.

 

SOLUTION : CORRECTION

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.

Si vous avez trouvé les examens corrigés en Langage C de Mr JoëlYk intéressants et utiles, pourquoi ne pas les partager avec d'autres personnes qui pourraient également en bénéficier ? Partagez ce lien sur les réseaux sociaux ou envoyez-le à vos amis et collègues. Vous pourriez aider quelqu'un à améliorer ses compétences en programmation ou à trouver des solutions à des problèmes complexes. N'oubliez pas que la connaissance doit être partagée pour grandir. Merci pour votre soutien et votre partage !

Contact WhatsApp : +237 652027193 | Réaliser Par Joël_Yk

 

1 vote. Moyenne 4 sur 5.

Ajouter un commentaire

Anti-spam