Exercice langage C accès aux chaines et aux caractères


Exercice 1


Ecrire un programme qui lit 10 mots et les mémorise dans un tableau de chaînes de caractères. Trier les 10 mots lexicographiquement en utilisant les fonctions strcmp et strcpy. Afficher le tableau trié. Utilisez la méthode de tri par sélection directe (voir Exercice 7.14).


Exercice 2


Ecrire un programme qui lit un nombre entre 1 et 7 et qui affiche le nom du jour de la semaine correspondant:

"lundi"

pour 1
"mardi" pour 2
. . . . . .
"dimanche" pour 7

Utiliser le premier élément du tableau pour mémoriser un petit message d'erreur.


Exercice 3


Ecrire un programme qui lit 5 mots, séparés par des espaces et qui les affiche ensuite dans une ligne, mais dans l'ordre inverse. Les mots sont mémorisés dans un tableau de chaînes de caractères.

Exemple

      voici une petite phrase !
! phrase petite une voici

Exercice 4


Refaire l'exercice 8.8 (Conjugaison des verbes réguliers en "er") en utilisant deux tableaux de chaînes de caractères:

SUJ

pour les sujets
TERM pour les terminaisons

Employez les fonctions printf, scanf, strlen.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <stdio.h>
#include <string.h>
main()
{
 /* Déclarations */
 char MOT[10][50]; /* tableau de 10 mots à trier */
  char AIDE[50];  /* chaîne d'aide pour la permutation */
 int I;    /* rang à partir duquel MOT n'est pas trié */
 int J;    /* indice courant */
 int PMOT; /* indique la position du prochain mot */
           /* dans la suite lexicographique.        */

 /* Saisie des données */
 for (J=0; J<10; J++)
   {
    printf("Mot %d : ", J);
    gets(MOT[J]); /* ou :  scanf ("%s\n", MOT[J]); */ 
    }

 /* Tri du tableau par sélection directe du     */
 /* prochain mot dans la suite lexicographique. */
 for (I=0; I<9; I++)
    {
     /* Recherche du prochain mot à droite de A[I] */
     PMOT=I;
     for (J=I+1; J<10; J++)
        if (strcmp(MOT[J], MOT[PMOT]) < 0)
            PMOT=J;
     /* Echange des mots à l'aide de strcpy */
     strcpy(AIDE, MOT[I]);
     strcpy(MOT[I], MOT[PMOT]);
     strcpy(MOT[PMOT], AIDE);
    }

 /* Edition du résultat */
 printf("Tableau trié lexicographiquement :\n");
 for (J=0; J<10; J++)
     puts(MOT[J]);  /* ou :  printf("%s\n",MOT[J]); */
 printf("\n");
 return 0;
}




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
main()
{
 /* Déclarations */
 int N;  /* nombre entré */
 char JOUR[8][9] = {"\aErreur!", "lundi", "mardi", "mercredi", 
                    "jeudi", "vendredi", "samedi","dimanche"};
  /* Saisie du nombre */
 printf("Entrez un nombre entre 1 et 7 : ");
 scanf("%d", &N);
 /* Affichage du résultat - pour perfectionnistes */
 if (N>0 && N<8)
     printf("Le %de%c jour de la semaine est %s.\n",
                                   N, (N==1)?'r':' ', JOUR[N]);
 else
     puts(JOUR[0]);
  return 0;
}


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
main()
{
 /* Déclarations */
 char MOT[5][50]; /* tableau pour les 5 mots */
 int I;           /* indice courant */
 /* Saisie des mots */
 printf("Entrez 5 mots, séparés par des espaces :\n");
 /* Après le retour à la ligne, scanf lit */
 /* les 5 données à la fois. */
 for (I=0; I<5; I++)
     scanf("%s", MOT[I]);
 /* Affichage du résultat */
 for (I=4; I>=0; I--)
    printf("%s ", MOT[I]);
 printf("\n");
  return 0;
}




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <stdio.h>
#include <string.h>
main()
{
 /* Déclarations */
 /* Sujets et terminaisons */
 char SUJ[6][5]  = {"je","tu","il","nous","vous","ils"};
 char TERM[6][5] = {"e","es","e","ons","ez","ent"};
  char VERB[20]; /* chaîne contenant le verbe */
 int L;         /* longueur de la chaîne */
 int I;         /* indice courant */

 /* Saisie des données */
 printf("Verbe : ");
 scanf("%s", VERB);

 /* Contrôler s'il s'agit d'un verbe en 'er' */
 L=strlen(VERB);
 if ((VERB[L-2] != 'e') || (VERB[L-1] != 'r'))
  printf("\"%s\" n'est pas un verbe du premier groupe.\n",VERB);
 else
     {
      /* Couper la terminaison 'er'. */
      VERB[L-2]='\0';
      /* Conjuguer ... */
      for (I=0; I<6; I++)
          printf("%s %s%s\n",SUJ[I], VERB, TERM[I]);
      }
 return 0;
}