Exercices corrigés en Langage C :
Exercice 1 :
Réécrire la fonction longueur (strln dans string.h) qui calcul la longueur d’une chaîne de caractères.
Prototype : int longueur(char *)
Correction exercice 1 :
int longueur(char *chaine)
{
int i=0 ;
while(chaine[i] != ‘\0’)
i++ ;
return i ;
}
Exercice 2 :
En utilisant la précédence lexicographique écrire une fonction qui convertie les chaînes de
caractères minuscules en chaînes de caractères majuscules.
Prototype : void majuscule(char *)
Correction exercice 2 :
#include<stdio.h>
void majuscule(char *) ;
main()
{
char chaine[] = "Ceci est une chaine !" ;
majuscule(chaine) ;
printf("%s\n",chaine) ;
}
void majuscule(char *chaine)
{
int i=0;
while(chaine[i] != '\0')
{
if ((chaine[i] >= 'a') && (chaine[i] <= 'z'))
chaine[i] += (int)'A' - (int)'a' ;
i++ ;
}
}
Exercice 3 :
Ecrire un programme qui lit deux chaînes de caractères, et qui indique leur précédence
lexicographique dans le code de caractères de la machine (ici: code ASCII). On écrira pour cela la
fonction precedence qui récupère les deux chaînes en paramètre et qui retourne 1 si la première
chaîne précède la deuxième, 2 si la deuxième précède la première, 0 si elle sont égale.
Prototype : int precedence(char *,char *)
Correction exercice 3 :
#include <stdio.h>
int precedence(char *,char *) ;
main()
{
/* Déclarations */
char CH1[50], CH2[50]; /* chaînes à comparer */
int r ;
/* Saisie des données */
printf("Entrez la première chaîne à comparer : ");
gets(CH1);
printf("Entrez la deuxième chaîne à comparer : ");
gets(CH2);
r = precedence (CH1,CH2) ;
if(r==0)
printf("\"%s\" est égal à \"%s\"\n", CH1, CH2);
else if (r == 1)
printf("\"%s\" précède \"%s\"\n", CH1, CH2);
else
printf("\"%s\" précède \"%s\"\n", CH2, CH1);
}
int precedence (char *CH1,char *CH2)
{
int I; /* indice courant */
int r ;
for (I=0; (CH1[I]==CH2[I]) && CH1[I] && CH2[I]; I++) ;
if (CH1[I]==CH2[I])
r = 0 ;
else if (CH1[I]<CH2[I])
r = 1 ;
else
r = 2 ;
return r;
}
Exercice 4 :
Ecrire une procédure qui lit une chaîne de caractères et l'interprète comme un entier positif dans la
base décimale. On écrira 2 fonctions :
La fonction chaine2entier qui récupère une chaîne de caractère et retourne un entier.
Prototype : int chaine2entier(char *)
La fonction estentier qui récupère un caractère et retourne 0 s’il ne correspond pas à un chiffre 1
s’il correspond à un chiffre.
Prototype : int estentier(char) ;
Correction exercice 4 :
#include<stdio.h>
int estentier(char) ;
int chaine2entier(char *) ;
main()
{
/* Déclarations */
char CH[100]; /* chaîne numérique à convertir */
long N; /* résultat numérique */
printf("Entrez un nombre entier et positif : ");
gets(CH);
printf("%s\n",CH) ;
N = chaine2entier(CH) ;
if(N<0)
printf("%s ne représente pas correctement un entier positif.\n", CH);
else
printf("La chaine %s a pour valeur %d\n" ,CH,N) ;
}
int chaine2entier(char *CH)
{
int I;
int N = 0 ;
int OK = 1;
for (I=0; OK && CH[I]; I++)
if (estentier(CH[I]))
N = N*10 + (CH[I]-'0');
else
OK=0;
if (OK)
return N ;
else
return -1 ;
}
int estentier(char c)
{
if ((c>='0')&&(c<='9'))
return 1 ;
else
return 0 ;
}
Exercice 1 :
Réécrire la fonction longueur (strln dans string.h) qui calcul la longueur d’une chaîne de caractères.
Prototype : int longueur(char *)
Correction exercice 1 :
int longueur(char *chaine)
{
int i=0 ;
while(chaine[i] != ‘\0’)
i++ ;
return i ;
}
Exercice 2 :
En utilisant la précédence lexicographique écrire une fonction qui convertie les chaînes de
caractères minuscules en chaînes de caractères majuscules.
Prototype : void majuscule(char *)
Correction exercice 2 :
#include<stdio.h>
void majuscule(char *) ;
main()
{
char chaine[] = "Ceci est une chaine !" ;
majuscule(chaine) ;
printf("%s\n",chaine) ;
}
void majuscule(char *chaine)
{
int i=0;
while(chaine[i] != '\0')
{
if ((chaine[i] >= 'a') && (chaine[i] <= 'z'))
chaine[i] += (int)'A' - (int)'a' ;
i++ ;
}
}
Exercice 3 :
Ecrire un programme qui lit deux chaînes de caractères, et qui indique leur précédence
lexicographique dans le code de caractères de la machine (ici: code ASCII). On écrira pour cela la
fonction precedence qui récupère les deux chaînes en paramètre et qui retourne 1 si la première
chaîne précède la deuxième, 2 si la deuxième précède la première, 0 si elle sont égale.
Prototype : int precedence(char *,char *)
Correction exercice 3 :
#include <stdio.h>
int precedence(char *,char *) ;
main()
{
/* Déclarations */
char CH1[50], CH2[50]; /* chaînes à comparer */
int r ;
/* Saisie des données */
printf("Entrez la première chaîne à comparer : ");
gets(CH1);
printf("Entrez la deuxième chaîne à comparer : ");
gets(CH2);
r = precedence (CH1,CH2) ;
if(r==0)
printf("\"%s\" est égal à \"%s\"\n", CH1, CH2);
else if (r == 1)
printf("\"%s\" précède \"%s\"\n", CH1, CH2);
else
printf("\"%s\" précède \"%s\"\n", CH2, CH1);
}
int precedence (char *CH1,char *CH2)
{
int I; /* indice courant */
int r ;
for (I=0; (CH1[I]==CH2[I]) && CH1[I] && CH2[I]; I++) ;
if (CH1[I]==CH2[I])
r = 0 ;
else if (CH1[I]<CH2[I])
r = 1 ;
else
r = 2 ;
return r;
}
Exercice 4 :
Ecrire une procédure qui lit une chaîne de caractères et l'interprète comme un entier positif dans la
base décimale. On écrira 2 fonctions :
La fonction chaine2entier qui récupère une chaîne de caractère et retourne un entier.
Prototype : int chaine2entier(char *)
La fonction estentier qui récupère un caractère et retourne 0 s’il ne correspond pas à un chiffre 1
s’il correspond à un chiffre.
Prototype : int estentier(char) ;
Correction exercice 4 :
#include<stdio.h>
int estentier(char) ;
int chaine2entier(char *) ;
main()
{
/* Déclarations */
char CH[100]; /* chaîne numérique à convertir */
long N; /* résultat numérique */
printf("Entrez un nombre entier et positif : ");
gets(CH);
printf("%s\n",CH) ;
N = chaine2entier(CH) ;
if(N<0)
printf("%s ne représente pas correctement un entier positif.\n", CH);
else
printf("La chaine %s a pour valeur %d\n" ,CH,N) ;
}
int chaine2entier(char *CH)
{
int I;
int N = 0 ;
int OK = 1;
for (I=0; OK && CH[I]; I++)
if (estentier(CH[I]))
N = N*10 + (CH[I]-'0');
else
OK=0;
if (OK)
return N ;
else
return -1 ;
}
int estentier(char c)
{
if ((c>='0')&&(c<='9'))
return 1 ;
else
return 0 ;
}
No comments:
Post a Comment