Exercice 1
int LONG_CH(char *CH)
{
char *P;
for (P=CH ; *P; P++) ;
return P-CH;
}Exercice 2
void MAJ_CH(char *CH)
{
for ( ; *CH; CH++)
if (*CH>='a' && *CH<='z')
*CH = *CH-'a'+'A';
}Exercice 3
void AJOUTE_CH(char *CH1, char *CH2)
{
while (*CH1) /* chercher la fin de CH1 */
CH1++;
while (*CH2) /* copier CH2 à la fin de CH1 */
{
*CH1 = *CH2;
CH1++;
CH2++;
}
*CH1=''; /* terminer la chaîne CH1 */
}Solution plus compacte :
void AJOUTE_CH(char *CH1, char *CH2)
{
for ( ; *CH1 ; CH1++) ;
for ( ; *CH1 = *CH2 ; CH1++, CH2++) ;
}Comme la condition d’arrêt est évaluée lors de l’affectation, le symbole de fin de chaîne est aussi copié.
Exercice 4
void INVERSER_CH (char *CH)
{
/* Prototypes des fonctions appelées */
int LONG_CH(char *CH);
void PERMUTER_CH(char *A, char *B);
/* Variables locales */
int I,J;
/* Inverser la chaîne par permutations successives */
J = LONG_CH(CH)-1;
for (I=0 ; I<J ; I++,J--)
PERMUTER_CH(CH+I, CH+J);
}
void PERMUTER_CH(char *A, char *B)
{
char AIDE;
AIDE = *A;
*A = *B;
*B = AIDE;
}
int LONG_CH(char *CH)
{
. . .
}Exercice 5
#include <ctype.h>
int NMOTS_CH(char *CH)
{
/* Variables locales */
int N; /* nombre de mots */
int DANS_MOT; /* indicateur logique : */
/* vrai si CH pointe à l'intérieur d'un mot */
DANS_MOT=0;
for (N=0; *CH; CH++)
if (isspace(*CH))
DANS_MOT=0;
else if (!DANS_MOT)
{
DANS_MOT=1;
N++;
}
return N;
}Exercice 6
#include <ctype.h>
char *MOT_CH(int N, char *CH)
{
/* Variables locales */
int DANS_MOT; /* indicateur logique : */
/* vrai si CH pointe à l'intérieur d'un mot */
DANS_MOT=0;
for ( ; N>0 && *CH ; CH++)
if (isspace(*CH))
DANS_MOT=0;
else if (!DANS_MOT)
{
DANS_MOT=1;
N--;
CH--; /* Pour réajuster l'effet de l'incrémentation */
}
return CH;
}Exercice 7
int EGAL_N_CH(int N, char *CH1, char *CH2)
{
while (--N && *CH1==*CH2)
{
CH1++;
CH2++;
}
return (*CH1==*CH2);
}Exercice 8
char *CHERCHE_CH(char *CH1, char *CH2)
{
/* Prototypes des fonctions appelées */
int LONG_CH(char *CH);
int EGAL_N_CH(int N, char *CH1, char *CH2);
/* Variables locales */
int L;
/* Recherche de CH1 dans CH2 */
L=LONG_CH(CH1);
while (*CH2 && !EGAL_N_CH(L, CH1, CH2))
CH2++;
return CH2;
}
int LONG_CH(char *CH)
{
. . .
}
int EGAL_N_CH(int N, char *CH1, char *CH2)
{
. . .
}Exercice 9
long CH_ENTIER(char *CH)
{
/* Variables locales */
long N;
int SIGNE;
/* Traitement du signe */
SIGNE = 1;
if (*CH=='-') SIGNE = -1;
if (*CH=='-' || *CH=='+') CH++;
/* Conversion des chiffres */
for (N=0 ; *CH>='0' && *CH<='9' ; CH++)
N = N*10 + (*CH-'0');
return SIGNE*N;
}Exercice 10
#include <ctype.h>
#include <math.h>
double CH_DOUBLE(char *CH)
{
/* Variables locales */
double N; /* résultat numérique */
int SIGNE; /* signe de la valeur rationnelle */
int DEC; /* positions derrière la virgule */
/* Initialisation des variables */
N = 0.0;
SIGNE = 1;
/* Traitement du signe */
if (*CH=='-') SIGNE = -1;
if (*CH=='-' || *CH=='+') CH++;
/* Positions devant le point décimal */
for ( ; isdigit(*CH); CH++)
N = N*10.0 + (*CH-'0');
/* Traitement du point décimal */
if (*CH=='.') CH++;
/* Traitement des positions derrière le point décimal */
for (DEC=0; isdigit(*CH); CH++)
{
N = N*10.0 + (*CH-'0');
DEC++;
}
/* Calcul de la valeur à partir du signe et */
/* du nombre de décimales. */
return SIGNE*N/pow(10,DEC);
}Exercice 11
#include <stdio.h>
void ENTIER_CH(long N, char *CH)
{
/* Prototypes des fonctions appelées */
void INVERSER_CH(char *CH);
/* Variables locales */
int I;
int SIGNE;
/* Traitement du signe */
SIGNE = (N<0) ? -1 : 1;
if (N<0) N=-N;
/* Conversion des chiffres (à rebours) */
I=0;
do
{
*(CH+I) = N % 10 + '0';
I++;
}
while ((N/=10) > 0);
/* Ajouter le signe à la fin de la chaîne */
if (SIGNE<0)
{
*(CH+I)='-';
I++;
}
/* Terminer la chaîne */
*(CH+I)='';
/* Inverser la chaîne */
INVERSER_CH(CH);
}
void INVERSER_CH (char *CH)
{
/* Prototypes des fonctions appelées */
int LONG_CH(char *CH);
void PERMUTER_CH(char *A, char *B);
. . .
}
int LONG_CH(char *CH)
{
. . .
}
void PERMUTER_CH(char *A, char *B)
{
. . .
}Exercice 12

void DOUBLE_CH(double N, char *CH)
{ /* Prototypes des fonctions appelées */
int LONG_CH(char *CH);
void ENTIER_CH(long N, char *CH);
/* Variables locales */
int I,L;
/* Conversion */
N *= 10000.0;
ENTIER_CH((long)N, CH);
/* Conversion forcée est facultative */
L=LONG_CH(CH); for (I=L; I>=L-4; I--)
/* Libérer une position pour le */
*(CH+I+1) = *(CH+I);
/* point décimal. */
*(CH+L-4)='.';
}
void ENTIER_CH(long N, char *CH)
{
/* Prototypes des fonctions appelées */
void INVERSER_CH(char *CH);
. . . }
void INVERSER_CH (char *CH) {
/* Prototypes des fonctions appelées */
int LONG_CH(char *CH);
void PERMUTER_CH(char *A, char *B);
. . . }
int LONG_CH(char *CH) { . . . }
void PERMUTER_CH(char *A, char *B) { . . . }Pages: 1 2