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;
}