Exercice langage C corrigé les chaines de caractères

Exercice 1

#include <stdio.h>
main()
{
 /* Déclarations */
 char CH1[50], CH2[50]; /* chaînes à comparer */
 int I;                 /* indice courant     */

 /* Saisie des données */
 printf("Entrez la première chaîne à comparer : ");
 gets(CH1);
 printf("Entrez la deuxième chaîne à comparer : ");
 gets(CH2);

 /* Chercher la première position où */
 /* CH1 et CH2 se distinguent. */
 for (I=0; (CH1[I]==CH2[I]) && CH1[I] && CH2[I]; I++)
     ;
 /* Comparer le premier élément qui */
 /* distingue CH1 et CH2. */
 if (CH1[I]==CH2[I])
     printf("\"%s\" est égal à \"%s\"\n", CH1, CH2);
 else if (CH1[I]<CH2[I])
     printf("\"%s\" précède \"%s\"\n", CH1, CH2);
 else
     printf("\"%s\" précède \"%s\"\n", CH2, CH1);
  return 0;
}

Exercice 2

#include <stdio.h>
main()
{
 /* Déclarations */
 char CH[100]; /* chaîne à convertir */
 int I;        /* indice courant     */

 /* Saisie de la chaîne */
 printf("Entrez la chaîne à convertir : ");
 gets(CH);
 /* Conversion de la chaîne */
 for (I=0; CH[I]; I++)
    {
     if (CH[I]>='A' && CH[I]<='Z')
                 CH[I] = CH[I]-'A'+'a';
     else if (CH[I]>='a' && CH[I]<='z')
                 CH[I] = CH[I]-'a'+'A';
    }
  /* Affichage de la chaîne convertie */
 printf("Chaîne convertie : %s\n", CH);
 return 0;
}

Exercice 3

#include <stdio.h>
#include <ctype.h>
 main()
{
 /* Déclarations */
 char CH[100]; /* chaîne numérique à convertir */
 long N; /* résultat numérique */
 int I;  /* indice courant */
 int OK; /* indicateur logique précisant si la */
         /* chaîne a été convertie avec succès */

 /* Saisie de la chaîne */
 printf("Entrez un nombre entier et positif : ");
 gets(CH);
 /* Conversion de la chaîne */
 OK=1;
 N=0;
 for (I=0; OK && CH[I]; I++)
     if (isdigit(CH[I]))
        N = N*10 + (CH[I]-'0');
     else
        OK=0;

 /* Affichage de la chaîne convertie */
 if (OK)
     printf("Valeur numérique : %ld\n", N);
 else
     printf("\a\"%s\" ne représente pas correctement "
           "un entier et positif.\n", CH);
 return 0;
}

Exercice 4

#include <stdio.h>
#include <ctype.h>
 main()
{
 /* Déclarations */
 char CH[100]; /* chaîne numérique à convertir */
 long N; /* résultat numérique */
 int I;  /* indice courant */
 int OK; /* indicateur logique précisant si la */
         /* chaîne a été convertie avec succès */

 /* Saisie de la chaîne */
 printf("Entrez un nombre hexadécimal entier et positif : ");
 gets(CH);
 /* Conversion de la chaîne */
 OK=1;
 N=0;
 for (I=0; OK && CH[I]; I++)
     if (isxdigit(CH[I]))
       {
        CH[I] = toupper(CH[I]);
        if (isdigit(CH[I]))
           N = N*16 + (CH[I]-'0');
        else
           N = N*16 + 10 + (CH[I]-'A');
       }
     else
        OK=0;

 /* Affichage de la chaîne convertie */
 if (OK)
   {
    printf("Valeur numérique hexadécimale : %lX\n", N);
    printf("Valeur numérique décimale     : %ld\n", N);
   }
 else
    printf("\a\"%s\" n'est pas une valeur "
           "hexadécimale correcte.\n", CH);
 return 0;
}

Exercice 5

#include <stdio.h>
#include <math.h>
#include <ctype.h>
main()
{
 /* Déclarations */
 char CH[100]; /* chaîne numérique à convertir */
 double N; /* résultat numérique               */
 int I;    /* indice courant                   */
 int SIG;  /* signe de la valeur rationnelle   */
 int DEC;  /* nombre de décimales              */
 int OK;   /* indicateur logique précisant si la */
           /* chaîne a été convertie avec succès */

 /* Saisie de la chaîne */
 printf("Entrez un nombre rationnel : ");
 gets(CH);

 /* Conversion de la chaîne :    */
 /* Initialisation des variables */
  OK=1;
 N=0.0;
 I=0;
 SIG=1;
 /* Traitement du signe */
  if (CH[I]=='-') SIG=-1;
 if (CH[I]=='-' || CH[I]=='+') 
     I++;
 /* Positions devant le point décimal */
  for ( ; isdigit(CH[I]); I++)
     N = N*10.0 + (CH[I]-'0');
 /* Traitement du point décimal */
  if (CH[I]=='.')
     I++;
 else if (CH[I])
     OK=0;

 /* Traitement et comptage des décimales */
  for (DEC=0; isdigit(CH[I]); I++, DEC++)
     N = N*10.0 + (CH[I]-'0');
 if (CH[I]) OK=0;
 /* Calcul de la valeur à partir du signe et */
 /* du nombre de décimales. */
  N = SIG*N/pow(10,DEC);
 /* Affichage de la chaîne convertie */
 if (OK)
    printf("Valeur numérique : %f\n", N);
 else
    printf("\a\"%s\" n'est pas une valeur "
           "rationnelle correcte.\n", CH);
 return 0;
}

Exercice 6

#include <stdio.h>
#include <math.h>
#include <ctype.h>
main()
{/* Déclarations */
 char CH[100]; /* chaîne numérique à convertir */
 double N; /* résultat numérique */
 int I;    /* indice courant */
 int SIG;  /* signe de la valeur rationnelle */
 int DEC;  /* nombre de décimales  */
 int SIGE; /* signe de l'exposant  */
 int EXP;  /* valeur de l'exposant */
 int OK;   /* indicateur logique précisant si la */
           /* chaîne a été convertie avec succès */

 /* Saisie de la chaîne */
 printf("Entrez un nombre rationnel : ");
 gets(CH);

 /* Conversion de la chaîne */
 /* Initialisation des variables */
  OK=1;
 N=0.0;
 I=0;
 SIG=1;
 SIGE=1;
 /* Traitement du signe */
  if (CH[I]=='-') SIG=-1;
 if (CH[I]=='-' || CH[I]=='+') I++;
 /* Positions devant le point décimal */
  for ( ; isdigit(CH[I]); I++)
     N = N*10.0 + (CH[I]-'0');
 /* Traitement du point décimal */
  if (CH[I]=='.')
     I++;
 /* Traitement et comptage des décimales */
  for (DEC=0; isdigit(CH[I]); I++, DEC++)
     N = N*10.0 + (CH[I]-'0');
 /* Traitement de la marque exponentielle */
  if (CH[I]=='e'||CH[I]=='E')
     I++;
 else if (CH[I])
     OK=0;
 /* Traitement du signe de l'exposant */
  if (CH[I]=='-') SIGE=-1;
 if (CH[I]=='-' || CH[I]=='+') I++;
 /* Traitement de la valeur de l'exposant */
  for (EXP=0; isdigit(CH[I]); I++)
     EXP = EXP*10 + (CH[I]-'0');
 if (CH[I]) OK=0;
 /* Calcul de l'exposant à partir du signe  */
 /* SIGE, de la valeur de l'exposant EXP et */
 /* du nombre de positions rationnelles DEC */
  EXP = SIGE*EXP - DEC;
 /* Calcul de la valeur à partir du signe et */
 /* de l'exposant. */
  N = SIG*N*pow(10,EXP);

 /* Affichage de la chaîne convertie */
 if (OK)
    printf("Valeur numérique : %f\n", N);
 else
    printf("\a\"%s\" n'est pas une valeur "
           "rationnelle correcte.\n", CH);
 return 0;
}

Exercice 7

#include <stdio.h>
main()
{
 /* Déclarations */
 char SUJ[100]; /* chaîne à transformer        */
 char OBJ[100]; /* chaîne à supprimer dans SUJ */
 int I;         /* indice courant dans SUJ     */
 int J;         /* indice courant dans OBJ     */
 int TROUVE;    /* indicateur logique qui précise */
                /* si la chaîne OBJ a été trouvée */

 /* Saisie des données */
 printf("Introduisez la chaîne à supprimer   : ");
 gets(OBJ);
 printf("Introduisez la chaîne à transformer : ");
 gets(SUJ);
 /* Recherche de OBJ dans SUJ */
 TROUVE=0;
 for (I=0; SUJ[I] && !TROUVE; I++)
    /* Si la première lettre est identique, */
    if (SUJ[I]==OBJ[0])
        {
         /* alors comparer le reste de la chaîne */
         for (J=1; OBJ[J] && (OBJ[J]==SUJ[I+J]); J++)
            ;
         if (OBJ[J]=='') TROUVE=1;
        }
 /* Si la position de départ de OBJ dans SUJ a été trouvée */
 /* alors déplacer le reste de SUJ à cette position. */
 if (TROUVE)
    {
     I--;
     /* Maintenant  I indique la position de OBJ */
     /* dans SUJ et J indique la longueur de OBJ */
     for (; SUJ[I+J]; I++)
          SUJ[I]=SUJ[I+J];
     SUJ[I]='';
    }
  /* Affichage du résultat */
 printf("Chaîne résultat : \"%s\"\n", SUJ);
 return 0;
}

Exercice 8

#include <stdio.h>
main()
{
 /* Déclarations */
 char SUJ[100]; /* chaîne à transformer */
 char CH1[100]; /* chaîne à rechercher  */
 char CH2[100]; /* chaîne de remplacement */
 char FIN[100]; /* chaîne de sauvegarde pour */
                /* la fin de SUJ. */
 int I;      /* indice courant dans SUJ */
 int J;      /* indice courant dans CH1 et CH2 */
 int K;      /* indice d'aide pour les copies  */
 int TROUVE; /* indicateur logique qui précise */
             /* si la chaîne OBJ a été trouvée */

 /* Saisie des données */
 printf("Introduisez la chaîne à rechercher  CH1 : ");
 gets(CH1);
 printf("Introduisez la chaîne à remplacer   CH2 : ");
 gets(CH2);
 printf("Introduisez la chaîne à transformer SUJ : ");
 gets(SUJ);

 /* Recherche de CH1 dans SUJ */
 TROUVE=0;
 for (I=0; SUJ[I] && !TROUVE; I++)
    if (SUJ[I]==CH1[0])
        {
         for (J=1; CH1[J] && (CH1[J]==SUJ[I+J]); J++)
            ;
         if (CH1[J]=='') TROUVE=1;
        }

 /* Si CH1 a été trouvée dans SUJ alors sauvegarder la fin */
 /* de SUJ dans FIN, copier ensuite CH2 et FIN dans SUJ.   */
 if (TROUVE)
    {
     I--;
     /* Maintenant  I indique la position de CH1 */
     /* dans SUJ et J indique la longueur de CH1 */
     /* Sauvegarder la fin de SUJ dans FIN */
     for (K=0; SUJ[K+I+J]; K++)
          FIN[K]=SUJ[K+I+J];
     FIN[K]='';
     /* Copier CH2 dans SUJ */
     for (K=0; CH2[K]; K++,I++)
          SUJ[I]=CH2[K];
     /* Recopier FIN dans SUJ */
     for (K=0; FIN[K]; K++,I++)
          SUJ[I]=FIN[K];
     /* Terminer la chaîne SUJ */
     SUJ[I]='';
    }

 /* Affichage du résultat */
 printf("Chaîne résultat : \"%s\"\n", SUJ);
 return 0;
}

Exercice 9

#include <stdio.h>
main()
{
 /* Déclarations */
 char SUJ[100]; /* chaîne à  transformer */
 char CH1[100]; /* chaîne à  rechercher  */
 char CH2[100]; /* chaîne de remplacement */
 char FIN[100]; /* chaîne de sauvegarde pour */
                /* la fin de SUJ. */
 int I;      /* indice courant dans SUJ */
 int J;      /* indice courant dans CH1 et CH2 */
 int K;      /* indice d'aide pour les copies  */

 /* Saisie des données */
 printf("Introduisez la chaîne à rechercher  CH1 : ");
 gets(CH1);
 printf("Introduisez la chaîne à remplacer   CH2 : ");
 gets(CH2);
 printf("Introduisez la chaîne à transformer SUJ : ");
 gets(SUJ);

 /* Recherche de CH1 dans SUJ */
 for (I=0; SUJ[I]; I++)
    if (SUJ[I]==CH1[0])
       {
        for (J=1; CH1[J] && (CH1[J]==SUJ[I+J]); J++)
            ;
        if (CH1[J]=='') /* TROUVE ! */
          {
           /* Maintenant  I indique la position de CH1 */
           /* dans SUJ et J indique la longueur de CH1 */
           /* Sauvegarder la fin de SUJ dans FIN */
           for (K=0; SUJ[K+I+J]; K++)
              FIN[K]=SUJ[K+I+J];
           FIN[K]='';
           /* Copier CH2 dans SUJ et déplacer */
           /* I derrière la copie de CH2. */
           for (K=0; CH2[K]; K++,I++)
               SUJ[I]=CH2[K];
           /* Recopier FIN dans SUJ */
           for (K=0; FIN[K]; K++)
               SUJ[I+K]=FIN[K];
           /* Terminer la chaîne SUJ */
           SUJ[I+K]='';
           I--; /* réajustement de l'indice I */
          }
       }

 /* Affichage du résultat */
 printf("Chaîne résultat : \"%s\"\n", SUJ);
 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 *