Exercices de programmation C : calcul de salaire et calculatrice simple

Ce document présente les solutions à des exercices de programmation en langage C, axés sur le calcul de salaires et la création d'une calculatrice basique. Il s'adresse aux étudiants suivant un cours de programmation avancé.

Exercice 8.11 : Calculateur de salaire

Cet exercice implémente un programme qui calcule le salaire net d'un employé en fonction de ses heures travaillées et de son taux horaire, tout en appliquant une grille d'imposition progressive.

Code C pour le calculateur de salaire :


#include <stdio.h>

#define HEURES_NORMALES 40
#define TAUX_HORAIRE_1 8.75
#define TAUX_HORAIRE_2 9.33
#define TAUX_HORAIRE_3 10.00
#define TAUX_HORAIRE_4 11.20
#define IMPOT_TRANCHE_1 0.15
#define IMPOT_TRANCHE_2 0.20
#define IMPOT_TRANCHE_3 0.25

#pragma warning (disable:4996)

int main() {
   double heuresTravaillees = 0;
   char choixRate;
   double salaireBrut = 0;
   double impot = 0;

   printf("Veuillez saisir vos heures travaillées par semaine : ");
   scanf("%lf", &heuresTravaillees);

   // Calcul des heures supplémentaires (majorées à 1.5)
   if (heuresTravaillees > HEURES_NORMALES) {
       heuresTravaillees = HEURES_NORMALES + (heuresTravaillees - HEURES_NORMALES) * 1.5;
   }

   while (1) {
       printf("\n*****************************************************************\n");
       printf("Entrez le numéro correspondant au taux horaire souhaité ou à l'action :\n");
       printf("a) 8.75 $/hr\t\t\t\tb) 9.33 $/hr\n");
       printf("c) 10.00 $/hr\t\t\t\td) 11.20 $/hr\n");
       printf("q) Quitter\n");
       printf("*****************************************************************\n");

       // Consommer le caractère de nouvelle ligne restant dans le buffer
       while (getchar() != '\n');
       scanf("%c", &choixRate);

       if (choixRate == 'q') {
           break;
       }

       switch (choixRate) {
           case 'a':
               salaireBrut = TAUX_HORAIRE_1 * heuresTravaillees;
               break;
           case 'b':
               salaireBrut = TAUX_HORAIRE_2 * heuresTravaillees;
               break;
           case 'c':
               salaireBrut = TAUX_HORAIRE_3 * heuresTravaillees;
               break;
           case 'd':
               salaireBrut = TAUX_HORAIRE_4 * heuresTravaillees;
               break;
           default:
               printf("Entrée invalide ! Veuillez réessayer.\n");
               continue;
       }

       // Calcul de l'impôt selon la grille progressive
       if (salaireBrut < 300) {
           impot = salaireBrut * IMPOT_TRANCHE_1;
       } else {
           impot = 300 * IMPOT_TRANCHE_1; // Impôt sur les 300 premiers dollars
           if (salaireBrut < 450) {
               impot += (salaireBrut - 300) * IMPOT_TRANCHE_2; // Impôt sur la tranche suivante
           } else {
               impot += (450 - 300) * IMPOT_TRANCHE_2; // Impôt sur la tranche intermédiaire
               impot += (salaireBrut - 450) * IMPOT_TRANCHE_3; // Impôt sur la tranche supérieure
           }
       }

       printf("Salaire brut : %.2f $\n", salaireBrut);
       printf("Impôt : %.2f $\n", impot);
       printf("Salaire net : %.2f $\n\n", salaireBrut - impot);
   }

   printf("Au revoir !\n");
   return 0;
}
 

Exericce 8.11 : Calculatrice Simple

Cet exercice propose une calculartice interactive qui peut effectuer des additions, soustractions, multiplications et divisions. Elle inclut une gestion basique des erreurs pour les entrées non numériques et la division par zéro.

Code C pour la calculatrice simple :


#include <stdio.h>
#include <ctype.h>

#pragma warning (disable:4996)

// Fonction pour afficher le menu des opérations
void afficherMenu() {
   printf("\nEntrez l'opération de votre choix :\n");
   printf("a. Addition\t\t s. Soustraction\n");
   printf("m. Multiplication\t d. Division\n");
   printf("q. Quitter\n");
}

int main() {
   char operation;
   float operande1 = 0;
   float operande2 = 0;

   while (1) {
       afficherMenu();
       operation = getchar();

       // Consommer le reste du buffer d'entrée après getchar()
       while (getchar() != '\n');

       switch (operation) {
           case 'a':
               printf("Entrez le premier nombre : ");
               // Validation de l'entrée numérique pour le premier opérande
               while (scanf("%f", &operande1) != 1) {
                   printf("Ce n'est pas un nombre valide.\n");
                   printf("Veuillez entrer un nombre valide (ex: 2.5, -1.78E8, 3) : ");
                   while (getchar() != '\n'); // Nettoyer le buffer d'entrée
               }
               printf("Entrez le second nombre : ");
               // Validation de l'entrée numérique pour le second opérande
               while (scanf("%f", &operande2) != 1) {
                   printf("Ce n'est pas un nombre valide.\n");
                   printf("Veuillez entrer un nombre valide (ex: 2.5, -1.78E8, 3) : ");
                   while (getchar() != '\n'); // Nettoyer le buffer d'entrée
               }
               printf("%.2f + %.2f = %.2f\n", operande1, operande2, operande1 + operande2);
               break;

           case 's':
               printf("Entrez le premier nombre : ");
               while (scanf("%f", &operande1) != 1) {
                   printf("Ce n'est pas un nombre valide.\n");
                   printf("Veuillez entrer un nombre valide (ex: 2.5, -1.78E8, 3) : ");
                   while (getchar() != '\n');
               }
               printf("Entrez le second nombre : ");
               while (scanf("%f", &operande2) != 1) {
                   printf("Ce n'est pas un nombre valide.\n");
                   printf("Veuillez entrer un nombre valide (ex: 2.5, -1.78E8, 3) : ");
                   while (getchar() != '\n');
               }
               printf("%.2f - %.2f = %.2f\n", operande1, operande2, operande1 - operande2);
               break;

           case 'm':
               printf("Entrez le premier nombre : ");
               while (scanf("%f", &operande1) != 1) {
                   printf("Ce n'est pas un nombre valide.\n");
                   printf("Veuillez entrer un nombre valide (ex: 2.5, -1.78E8, 3) : ");
                   while (getchar() != '\n');
               }
               printf("Entrez le second nombre : ");
               while (scanf("%f", &operande2) != 1) {
                   printf("Ce n'est pas un nombre valide.\n");
                   printf("Veuillez entrer un nombre valide (ex: 2.5, -1.78E8, 3) : ");
                   while (getchar() != '\n');
               }
               printf("%.2f * %.2f = %.2f\n", operande1, operande2, operande1 * operande2);
               break;

           case 'd':
               printf("Entrez le premier nombre : ");
               while (scanf("%f", &operande1) != 1) {
                   printf("Ce n'est pas un nombre valide.\n");
                   printf("Veuillez entrer un nombre valide (ex: 2.5, -1.78E8, 3) : ");
                   while (getchar() != '\n');
               }
               printf("Entrez le second nombre : ");
               while (scanf("%f", &operande2) != 1) {
                   printf("Ce n'est pas un nombre valide.\n");
                   printf("Veuillez entrer un nombre valide (ex: 2.5, -1.78E8, 3) : ");
                   while (getchar() != '\n');
               }
               // Gestion de la division par zéro
               while (operande2 == 0) {
                   printf("Erreur : Division par zéro. Veuillez entrer un nombre différent de 0 : ");
                   scanf("%f", &operande2);
               }
               printf("%.2f / %.2f = %.2f\n", operande1, operande2, operande1 / operande2);
               break;

           case 'q':
               printf("Au revoir !\n");
               break;

           default:
               printf("Option invalide. Veuillez choisir parmi les options du menu.\n");
               break;
       }

       if (operation == 'q') {
           break;
       }
   }
   return 0;
}
 

Exercice 9.11 : Tri de Trois Nombres

Cet exercice utilise des pointeurs pour trier trois nombres réels par ordre croissant. Il contient des fonctions pour échanger des valeurs et pour organiser les trois nombres dans l'ordre souhaité.

Code C pour le tri de trois nombres :


#include <stdio.h>

#pragma warning (disable:4996)

// Fonction pour échanger les valeurs de deux variables pointées
void echanger(double *ptrA, double *ptrB) {
   double temporaire = *ptrA;
   *ptrA = *ptrB;
   *ptrB = temporaire;
}

// Fonction pour trier trois nombres par ordre croissant en utilisant des pointeurs
void trierTroisNombres(double *ptrX, double *ptrY, double *ptrZ) {
   // Assurer que x est le plus petit
   if (*ptrX > *ptrY) {
       echanger(ptrX, ptrY);
   }
   // Assurer que x est le plus petit après le premier échange
   if (*ptrX > *ptrZ) {
       echanger(ptrX, ptrZ);
   }
   // Assurer que y est plus petit que z après les deux premiers échanges
   if (*ptrY > *ptrZ) {
       echanger(ptrY, ptrZ);
   }
}

int main(void) {
   double valX = 0;
   double valY = 0;
   double valZ = 0;

   printf("Veuillez entrer trois nombres séparés par des espaces : ");
   // Boucle pour lire et trier plusieurs ensembles de trois nombres
   while (scanf("%lf %lf %lf", &valX, &valY, &valZ) == 3) {
       trierTroisNombres(&valX, &valY, &valZ);
       printf("Les nombres triés sont : x=%.2lf y=%.2lf z=%.2lf\n", valX, valY, valZ);
       printf("Veuillez entrer trois autres nombres (ou autre chose pour quitter) : ");
   }

   printf("\nFin du programme.\n");
   return 0;
}
 

Étiquettes: C programmation calcul de salaire calculatrice pointeurs

Publié le 3 novembre à 20h58