Exercice langage C corrigé programmes d’affichage et calcule

/* Programme de calcul et d'affichage de la repartition en groupes de
 * personnes, d'effectifs equilibres, valeurs lues au clavier */

#include 

int main() 
{
  int groupes, personnes;
  printf("groupes: ");
  scanf("%d", &groupes);
  printf("personnes: ");
  scanf("%d", &personnes);

  printf("Nombre de grands groupes : %d et leur effectif %d\n",
    personnes % groupes, personnes / groupes);

  printf("Nombre de petits groupes : %d et leur effectif %d\n",
    groupes - personnes % groupes, 1 + personnes / groupes);

  return 0;
}

2)

/* Programme de calcul et d'affichage du n-ieme bit d'une valeur entiere
 * lue au clavier, ainsi que n (les bits sont numerotes de 0 a 31) */

#include 

int main() 
{
  int valeur, bit, n;
  printf("valeur: ");
  scanf("%d", &valeur);
  printf("numero du bit (0 a 31): ");
  scanf("%d", &n);

  /* Le decalage '>>' vers la droite de n bits permet de placer le bit
   * recherche a la premiere position. Le masquage avec 1 permet de l'isoler.
   */
  bit = (valeur >> n) & 1;

  printf("valeur du %d-ieme bit = %d\n", n, bit);

  return 0;
}

3)
/* Programme de calcul et d'affichage des 4 octets d'une valeur entiere,
 * lue au clavier */

#include 

int main() 
{
  int ivaleur, octet;
  printf("valeur entiere: ");
  scanf("%d", &ivaleur);

  /* acces a un octet par masquage tout a 1 de l'octet */
  octet = ivaleur & 0xFF;
  printf("1er octet  = 0x%2.2X\n", octet);

  /* Decalage de 8 bits pour placer l'octet suivant dans l'octet de poids
   * faible. "ivaleur >>= 8" est equiv. a "ivaleur = ivaleur >> 8" */
  ivaleur >>=8;
  octet = ivaleur & 0xFF;
  printf("2eme octet = 0x%2.2X\n", octet);

  ivaleur >>=8;
  octet = ivaleur & 0xFF;
  printf("3eme octet = 0x%2.2X\n", octet);

  ivaleur >>=8;
  octet = ivaleur & 0xFF;
  printf("4eme octet = 0x%2.2X\n", octet);

  return 0;
}

4)
/* Programme de calcul et d'affichage des 4 octets d'une valeur flottante,
 * lue au clavier */

#include 

int main() 
{
  /* Les operateurs de decalage sont des operateurs entiers, et non flottants.
   * Pour faire cet exercice, deux solutions : utiliser une union qui permet
   * de "voir" un meme espace memoire de plusieurs facons : */
  union {
    int ivaleur;
    float fvaleur;
  } u;

  /* Une seconde solution est d'utiliser un changement de type lors de l'acces
   * a la variable :
   *   int ivaleur;
   *   float fvaleur;
   *   printf("valeur flottante: ");
   *   scanf("%f", &fvaleur);
   *
   *   ivaleur = *((int *) &fvaleur);
   */

  int octet;
  printf("valeur flottante: ");
  scanf("%f", &u.fvaleur);

  octet = u.ivaleur & 0xFF;
  printf("1er octet  = 0x%2.2X\n", octet);

  u.ivaleur >>=8;
  octet = u.ivaleur & 0xFF;
  printf("2eme octet = 0x%2.2X\n", octet);

  u.ivaleur >>=8;
  octet = u.ivaleur & 0xFF;
  printf("3eme octet = 0x%2.2X\n", octet);

  u.ivaleur >>=8;
  octet = u.ivaleur & 0xFF;
  printf("4eme octet = 0x%2.2X\n", octet);

  return 0;
}

Télécharger aussi :

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *