19/03/2020
1
INFORMATIQUE 4
Algorithmique et Structures de Données Par Mme El khattabi
2019/2020
1
19/03/2020
2
Plan du cours
1. Introduction à l'algorithmique & rappels 2. Fonctions récursives
3. Les structures
4. Listes linéaires chaînées 5. Piles et Files
6. Arbres binaires
7. Arbres binaires de recherche 8. Tables de hachage
9. Graphes
2
19/03/2020
3
Rappels et compléments de C
3
19/03/2020
4
4
Algorithme
• Permet de résoudre un problème donné
ex: Trier une liste de noms par ordre alphabétique
• Définition. Un algorithme est une
procédure de calcul bien définie qui prend en entrée un ensemble de valeurs et qui délivre en sortie un ensemble de valeurs.
19/03/2020
5
5
Algorithme informatique
=
procédure de calcul
Algorithme
Informations en entrée
Informations en sortie
19/03/2020
6
Algorithme
• Séquence d'instructions élémentaires
– Se termine en un temps fini
– prend une ou des valeur(s) en entrée – donne une ou des valeur(s) en sortie
6
19/03/2020
7
Algorithme
• Définition .Une valeur particulière de
l'ensemble des valeurs données en entrée est appelée instance du problème.
• Définition .Un algorithme est correct si pour toute instance du problème il se termine et produit une sortie correcte.
7
19/03/2020
8
Algorithme
Les ordinateurs ne comprennent que quatre catégories d'instructions :
1.l'affectation de variables ; 2.la lecture/écriture ;
3.les tests (les structures conditionnelles) ; 4.les boucles (les structures itératives).
8
19/03/2020
9
9
Exemple
• Exemple de problème à résoudre
Comment trier une liste d'élèves par ordre alphabetique?
• donnée: liste non triée
• sortie: liste triée
• Algorithme: ???
19/03/2020
10
Algorithme et programme
• Programme :
– codage d’un algorithme afin que l’ordinateur puisse exécuter les actions décrites
– doit être écrit dans un langage compréhensible par l’ordinateur
• langage de programmation
• Un programme est donc une suite ordonnée d’instructions élémentaires codifiées dans un langage de programmation
10
19/03/2020
11
11
Algorithme et Programme
• Un algorithme est implémenté dans un langage de programmation
• Un même algorithme peut être implémenté dans différents langages
• Pseudo-code
19/03/2020
12
12
Structure de Données
• Moyen de stocker et organiser les données d'un algorithme
– accès aux données
– modification des données
• Tableaux, listes chaînées
• Piles, files
• Graphes, arbres
19/03/2020
13
13
Structures de contrôle
• Structures de contrôle conditionnelle
– Si cond Alors instr FinSi
– Si cond Alors instr sinon instr FinSi (imbrications possibles)
• Structures de contrôle itératives
– TantQue cond Faire instr FinTantQue – variantes
(imbrications possibles)
19/03/2020
14
La structure de contrôle conditionnelle
• La structure de contrôle conditionnelle se présente en général sous la forme :
si expression alors
première séquence d'instructions sinon
deuxième séquence d'instructions finsi
14
19/03/2020
15
15
La boucle " tant que "
• Fait répéter une séquence d’instructions aussi longtemps qu’une condition est VRAI
Tant que condition faire séquence d’instructions Fin tant que
19/03/2020
16
La boucle " pour faire"
• Lorsque le nombre d’itération est connu
• Exemple de la table de multiplication
pour var_de_crtde prem_val à dern_val faire séquence d'instructions
finpour
16
19/03/2020
17
Autres règles
• Contraintes imposées par le langage
– Toute variable apparaissant dans le bloc d'instructions doit être déclarée.
• Contraintes imposées par l'usage
– Tout programme doit être commenté !
– Un commentaire est du texte encadré par des symboles de début /* et de fin */ ou une ligne commençant par //
– Ignoré lors des traitements du programme
/* teste si un entier est un carré parfait */
int i = 0; // sert d’indice dans la boucle
17
19/03/2020
18
Bloc déclaration
type nom_variable ;
• Syntaxe
– Nom_variable est un identificateur :
• les caractères sont les lettres (A..Z,a..z) et les chiffres 0..9 et le soulignement (pas de caractères spéciaux, pas de blancs)
• ne commence pas par un chiffre
• minuscules et majuscules sont différentes M≠m
• Déclarer une variable sert à
– désigner son nom
– spécifier le domaine des valeurs que peut «contenir » cette variable
18
19/03/2020
19
Types
• Généralités
– Un type est un nom pour un ensemble de valeurs.
Un type est muni d'opérateurs.
– Déclarer une variable sert aussi à connaître les opérateurs applicables à (la valeur de) la variable
• Les types entiers: int, char
• Les types réels: float, double
• Type booléen: Le booléen faux est représenté par l’entier 0, et le booléen vrai par tout entier
différent de 0. , le OU : et le NON :
19
19/03/2020
20
20
Contractions d'opérateurs
• Il y a une famille d’opérateurs
+= -= *= /= %=
Pour chacun d’entre eux
expression1 op= expression2 est équivalent à:
(expression1) = (expression1) op (expression2)
19/03/2020
21
Opérateurs arithmétiques en C
• De plus, il existe un opérateur de "modulo" noté %qui ne peut porter que sur des entiers et qui fournit le reste de la division de son premier opérande par son second. Par exemple: 11%4 vaut 3 et 23%6 vaut 5
• Remarque: le quotient de deux entiersfournit un entier. Ainsi 5/2 vaut 2; en revanche, le quotient de deux flottants (noté, lui aussi, /) est bien un flottant (5.0/2.0 vaut bien approximativement 2.5).
Opérateurs et Expressions
21
19/03/2020
22
Priorités des opérateurs
• ( )
• - ! Opérateurs unaires, ex, -a !a
• * / %
• + -
• < <= > >=
• == !=
• && ||
• =
• Dans le cas où les opérateurs ont la même priorité, l’expression est évaluée de gauche à droite.
22
19/03/2020
23 Opérateurs d’incrémentation et de décrémentation ( ++ - - )
• ++i : expression qui incrémente de 1 la valeur de i, et sa valeur est celle de i après incrémentation
• On dit que ++est:
-un opérateur de pré incrémentationlorsqu'il est placé à gauche -un opérateur de post incrémentationlorsqu'il est placé à droite
Opérateurs et Expressions
23
19/03/2020
24
Operateur Conditionnel
• c = a < b ? a + 1 : b – 1;
• Evalue la première expression. Si vrai, evalue la deuxième, sinon evalue la troisième.
24
19/03/2020
25
Casting
( type_name ) expression
float f, frac_part;
frac_part = f – (int) f;
float quotient;
int dividend, divisor;
quotient = (float) dividend / divisor;
25
19/03/2020
26
Instructions d’entrée-sortie
scanf("FORMAT", &nom_variable);
– Permet de saisir (lire) des données tapées au clavier
– FORMAT permet de spécifier le type de la variable lue. Par exemple,
"%d" pour un entier, "%f" pour un réel
Exemple
int I;
scanf ("%d",&I) ; Lecture d’un caractère:
• getchar lit un caractère
• putchar affiche un caractère
• exemple:
int c;
c = getchar();
putchar(c); /* affiche la valeur de c à l’écran */
26
19/03/2020
27
Instructions d’entrée-sortie
printf("FORMAT", expression)
printf("FORMATS", liste d'expressions)
• permet d'afficher des valeurs (résultats de calcul)à l'écran.
Exemples
float res = 2.2+1.05;
int I =1 ; //la valeur de Iest 1 printf("%d", I) ; //affichage de 1à l'écran printf("%d", 5+7) ; //affichage de 12 à l'écran printf("valeur de I= %d", I) ; //affichage de valeur de I= 1
printf("pour I= %d res=%f", I, res) ; //affichage de pour I=1 res=3.25
27
19/03/2020
28
Conditionnelle
if(condition) instruction1 ; if(condition);
instruction1 ;
condition est une expression booléenne L'exécution de l'instruction globale
évalue la condition
si la condition est vraie, exécute l'instruction 1.
Attention : si la condition est fausse, il ne se passe rien.
Exemple N = 4 ; I=2;
if(N==I*I)
printf("L'entier %d est un carré parfait", N);
Affichage à l'écran de : L'entier 4 est un carréparfait
28
19/03/2020
29
Conditionnelle
if(condition) instruction1; elseinstruction2;
• Permet d'introduire des branchements d'instructions.
• L'exécution de l'instruction globale – évalue la condition
– si la condition est vraie, exécute l'instruction 1 – sinon exécute l'instruction 2.
• Exemple N = 5; I=2;
if(N= =I*I) printf("L'entier %d est un carre parfait", N);
else printf("L'entier %d n'est pas un carre parfait", N);
Affichage à l'écran de L'entier 5 n'est pas un carre parfait
29
19/03/2020
30
Conditionnelle
if(condition) bloc-instruction1 else bloc-instruction2
Un bloc d'instructions est une liste d'instructions encadrée par {et }
• Exemple N = 5 ;
if(N % 2 = =0) printf("%d est pair", N);
else {
N = N-1 ;
printf("%d est pair", N);
}
Affichage à l'écran : 4 est pair
30
19/03/2020
31
31
if imbriqués
• else est associé avec le if le plus proche
int i = 100;
if(i > 0)
if(i > 1000)
printf("i > 1000\n");
else
printf(“else \n");
19/03/2020
32
if imbriqués
•
32
int i = 100;
if(i > 0) {
if(i > 1000)
printf(" i> 1000 \n");
} else
printf(“i est negative\n“);
19/03/2020
33
Conditionnelle
switch (expression) {
case expression-constante : bloc-instruction 1; break;
case expression-constante : bloc-instruction 2; break;
...
case expression-constante : bloc-instruction n; break;
default: bloc-instruction;
}
• le cas default est facultatif.
• L'instruction break provoque une sortie immédiate du switch
33
19/03/2020
34
Conditionnelle
• Exemple N=5
switch(N%2) {
case1 : printf("%d est impair", N) ; break;
case0 : printf("%d est pair", N) ; }
• Exemple switch(C) {
case ‘0’ : case ‘2’ : case ‘4’ : case ‘6’ : case ‘8’ :
printf("%d est le code d’un chiffre pair" , C); break;
case ‘1’ : case ‘3’ : case ‘5’ : case ‘7’ : case ‘9’ :
printf("%d est le code d’un chiffre impair", C); break;
default:
printf ("%d n’est pas le code d’un chiffre, c’est %c", C, C);
}
34
19/03/2020
35
Instructions de contrôle boucle do…while
• Syntaxe
do
instruction while(condition);
• L’instruction peut être simple ou un bloc.
• Si la condition est vraie, l’instruction de la boucle est ré- exécutée.
• L’instruction sera exécutée au moins une fois.
35
19/03/2020
36
Instructions de contrôle boucle do…while
• Ecrire un programme qui impose à l’utilisateur de donner un nombre entre 1 et 10
36
19/03/2020
37
37
int a;
do {
printf("\n Entrezun entier entre 1 et 10 : ");
scanf("%d",&a);
}
while ((a <=0) || (a > 10))
saisie au clavier un entier entre 1 à 10
Instructions de contrôle boucle
do…while
19/03/2020
38
Instructions de contrôle boucle while
• Syntaxe
while(condition) instruction
• L’instruction peut être simple ou un bloc.
• Si la condition est vraie, l’instruction de la boucle est exécutée.
• La condition est évaluée au début de la boucle, donc il est possible que l’instruction dans la boucle ne soit jamais exécutée.
38
19/03/2020
39
39
i=1;
while(i<5) {
printf(“dans la boule %d\n",i);
i++;
}
printf("Extérieur%d\n",i);
Exemple
19/03/2020
40
Instructions de contrôle boucle for
• Syntaxe
for(expr1; expr2; expr3) instruction
• L’instruction peut être simple ou un bloc.
• expr1: initialisation avant la 1ièreitération.
• expr2: condition qui est évaluée avant chaque itération.
• expr3: instruction effectuée à la fin de chaque itération -incrémentation, décrémentation, etc.
40
19/03/2020
41
41
Les itérations – for
int i,j;
for (i = 0; i <3; i++) {
printf ( "i = %d\n", i);
}
for(j = 3; j > 0; j- -)
printf("j = %d\n", j);
float angle;
for(angle = 0.0; angle < 1.0; angle += 0.2) printf("%6.2f ",angle);
19/03/2020
42
42
Instructions de branchement non conditionnel
• break : vu en switch, en général permet d'interrompre le déroulement d'une boucle, et passe à la première
instruction qui suit la boucle.
int i;
for (i = 0; i < 6; i++)
{ printf("i = %d\n ",i);
if (i==3) break;
}
19/03/2020
43
43
Instructions de branchement non conditionnel
• continue : permet de passer directement de la boucle suivante sans exécuter les autres instructions de la boucle.
int i;
for (i = 0; i < 5; i++) {
if (i==3) continue;
printf("i = %d\n",i);
}
19/03/2020
44
Récursivité
• Une fonction est récursive si elle s'appelle elle- même.
exemple :
int factoriel ( int n ) {
if ( n <= 1 ) return 1 ; else
return n * factoriel(n-1) ; }
44
19/03/2020
45
Récursivité
• Pour écrire une fonction récursive:
• Il faut:
– Trouver une condition d’arrêt, c’est-à-dire, un cas où la solution est triviale.
– Décomposer le problème non trivial en un problème d’ordre inférieur.
45
19/03/2020
46
Récursivité : Fibonacci
• Un autre exemple classique de récursivité est la suite de Fibonacci :
int fib ( int n ) {
if ( n <= 1 ) return 1 ; else
return fib(n-1)+fib(n-2);
}
46
19/03/2020
47
Tableaux et pointeurs
• la variable nom tableau contient l'adresse de la première case du tableau.
47
19/03/2020
48
Pointeurs
• Un pointeur est une variable "pointant " vers un emplacement en mémoire.
• En pratique :
• Un pointeur est une variable qui contient l'adresse mémoire d'une variable.
48
19/03/2020
49
2 operateurs spécifiques :
• & donne l'adresse d'une variable:
• char c = 'a';
• char *p = &c; /* p est de type (char *) */
• *donne la valeur pointée par un pointeur (la valeur à l'adresse correspondante) :
• printf("%c", *p); /* affiche a */
• Exemples :
• int x = 1, y = 2, z[10];
• int *pi;
• pi = &x;
• y = *pi;
• *pi = 0;
• pi = &z[0]; /* pi=z */
49
19/03/2020
50
50
19/03/2020
51
D'autres exemples
• Déclarations :
• int i=6, b, *p, *pi, t[10]={10,20,30,40,50,60,70,80,90,100};
• Affectations et arithmétique :
• pi = &i;
• p = t;
• t = p; /* NON! pas d'affectation de tableau. */
• p += i;
• p = &t[3];
• *pi += 1; /* incrémente *pi */
• b = *t+1; /* b=t[0]+1 */
• b = *(t+1); /* b=t[1] ... attention aux priorités !*/
• un pointeur qui ne pointe sur rien : NULL.
• int *p = NULL; 51
19/03/2020
52
Pointeurs et tableaux
• Si on déclare un tableau statique et un pointeur :
• int tab[10];
• int *p;
• alors l'affectation : p=&tab[0] est équivalente a p=tab et *p désigne tab[0].
• les crochets sont une simplification d‘écriture : tab[i] , *(tab+i)
• Il existe tout de même une différence entre
pointeur et tableau : un nom de tableau n'est pas une variable, on ne peut donc rien affecter a un nom de tableau, contrairement a un pointeur :
tab = p alors que p = tab. 52
19/03/2020
53
L'operateur sizeof()
• L'operateur sizeof() : Renvoie la taille en octets de l'argument (soit un type, soit une variable)
• int A; char B[5][10];
• Sizeof( A) 2, sizeof (B) 50, sizeof ("abcd“) 5, sizeof(float) 4, sizeof(double) 8
53
19/03/2020
54
Allocation dynamique
• #include <stdlib.h>
• Pour réserver de l'espace au moment de l’exécution, Il faut allouer la mémoire dynamiquement: malloc ;
• Renvoie un pointeur sur la mémoire allouée ;
• La zone de mémoire n'est pas initialisée.
• long *a = (long *)malloc( sizeof(long) );
• int n = 100;
• long *tab = (long *) malloc(n * sizeof(long));
54
19/03/2020
55
Allocation dynamique
• calloc : Alloue et remplit de 0 la mémoire nécessaire;
renvoie un pointeur sur la zone allouée.
• int n = 100;
• long *tab = (long *) calloc(n, sizeof(long)); /* n fois 0 */
• realloc : realloc(p,size):Réduit (ou augmente) la taille du bloc de mémoire pointé par p a une taille de size octets ; conserve les size premiers octets a l'adresse p. Le reste de la nouvelle zone n'est pas initialisé.
• int * tab;
• tab = (int *) calloc ( 2, sizeof(int) );
• tab[0] = 33; tab[1] = 55;
• tab = (int *)realloc(tab, 3 * sizeof(int) );
• tab[2] = 77; 55
19/03/2020
56
Allocation dynamique
• Il peut toujours se produire des erreurs lors de l'allocation dynamique de mémoire : il faut toujours vérifier que le pointeur retourné lors de l'allocation n'est pas NULL!
• int *p;
• if((p=(int *)malloc(nb*sizeof(int)))==NULL) printf("alloc. ratée !");
56
19/03/2020
57
Libération de la mémoire
• Lorsqu'un emplacement mémoire n'est plus utilisé, il est important de libérer cet espace.
• La fonction free(p ) : libère l'espace mémoire pointé par p qui a été obtenu lors d'un appel a malloc, calloc ou realloc
57
19/03/2020
58
Chaînes de caractères
58
19/03/2020
59
• char ch;
• int i;
• i = ‘a’; /* i= 97 */
• ch = 65; /* ch = ‘A’ */
• ch = ch + 1; /* ch = ‘B’ */
• ch++; /* ch = ‘C’ */
• if(‘a’ <= ch && ch <= ‘z’)
• for(ch = ‘A’; ch <= ‘Z’; ch++)
59
19/03/2020
60
• ‘a‘, ‘b’, ‘c’ sont des caractères constants
• Chaine de caractères: tableaux de caractères
• − " une chaine constante"
• − 'x' "x"
60
19/03/2020
61
Une chaîne de caractères en C est un tableau de caractères. Ce tableau a le dernier caractère \0 (a pour code 0), on le nomme le caractère de fin de chaîne.
exemple
char *chaine ;
chaine=" bonjour " ;
La variable chaîne qui n’est autre qu’un pointeur sur une zone contenant des caractères, ou encore un tableau de caractère, contiendra l’adresse de la zone où seront stockés les
caractères composant la chaîne "bonjour" plus le caractère de code 0.
char chaine [ 256 ] ;
déclare un tableau de 256 caractères pour stocker une chaîne.
Par contre l’instruction : chaine=" bonjour " ;
générera une erreur de compilation, puisque dans ce cas on cherche à modifier l’adresse de la variable tableau, ce qui est
impossible. 61
19/03/2020
62
• On ne peut pas affecter une chaîne en dehors de la déclaration.
• On ne peut pas affecter une chaîne à une autre.
• On ne peut pas comparer deux chaînes
char mot[8] = "bonjour"; // OK char mot[8] ;
mot = "bonjour"; // ERREUR
char mot1[8] ;
char mot2[8] ; // déclaration de deux chaînes
…
mot1 = mot2; // ERREUR
char mot1[8] ; char mot2[8] ;// déclaration de deux chaînes
…
if(mot1 == mot2) // ERREUR
62
19/03/2020
63
• char ch[ 50];
• int i = 0;
• …
• while ( ch*i+ != ‘\0’) i++;
Parcours d’une chaine
63
19/03/2020
64
Opérateurs sur les chaînes
• les fonctions de : <s t r i n g . h>
• Longueur d’une chaîne
• On obtient la longueur d’une chaîne grâce à la fonction strlen :
• char chaine[]="programmation" ;
• printf ( "La longueur de l a chaine %s est %d . \n" , chaine ,strlen ( chaine ) ) ;
• Ce programme affichera :
• La longueur de la chaine programmation est 13. 64
19/03/2020
65
Comparaison de deux chaînes
• La fonction permettant de comparer deux chaînes c1 et c2 est strcmp. Elle renvoie:
• 0 si les deux chaînes sont identiques ;
• < 0 si c1 précède c2 ;
• > 0 si c1 suit c2.
• L’ordre utilisé ici est l’ordre lexicographique :
• "a" < "b"
• "abc" > "ab"
• "a" > "A"
• Elle est dépendante du code de caractères utilisé. Pour le code ASCII, nous
• avons l’ordre suivant : . . ., 0, 1, 2, . . ., 9, . . ., A, B, C, . . ., Z, . . ., a, b, c, . . ., z, . . .
• En supposant que l’on ait déclaré deux chaînes c1 et c2, un test d’égalité entre ces deux chaînes en C, serait :
• i f ( strcmp ( c1 , c2)==0)
• printf ( "%s e t %s sont i d e n t i q u e s \n" , c1 , c2 ) ;
65
19/03/2020
66
• Stricmp(c1, c2);
ne fait pas de différences entre majuscules et minuscules
• Strncmp(c1, c2,n);
la comparaison est effectuée sur les n premiers caractères
66
19/03/2020
67
• strcat, strncat : concaténer 2 chaînes
• Cette fonction ajoute une chaîne à la suite d'une autre. On appelle cela la concaténation.
• char ∗ s t r c a t ( char ∗ de s t , const char ∗ s r c ) ;
• char ∗ s t r n c a t ( char ∗ de s t , const char ∗ s r c , int n ) ;
67
Concaténation de chaînes de caractères
19/03/2020
68
Copie
• La fonction strcpy permet de copier une chaîne dans une autre :
• char chaine[]=" bonjour " ;
• char dest [ 256 ] ;
• strcpy ( dest , chaine ) ;
• La fonction strncpy permet de copier n caractères d’une chaîne dans une autre
• strncpy(dest,chaine,n);
68
19/03/2020
69
Recherche
• Il existe plusieurs fonctions standard permettant de rechercher l’occurrence d’un caractère ou d’une sous- chaîne dans une chaîne. C’est le cas de la fonction strchr cherche la première occurrence d’un caractère dans une chaîne donnée :
• char occ= ’ o ’ ;
• char *chaine=" bonjour " ;
• strchr ( chaine , occ) ;
• Retourne l’adresse du premier caractère ’o’ dans la chaîne si le caractère cherché n’est pas dans la chaine NULL est retourné.
• strrchr ( chaine , occ) ; cherche la dernière occurrence de ‘o’ dans chaine.
69
19/03/2020
70
• la fonction strstr effectue le même type de recherche que strchr, mais le motif recherché est une chaîne et non pas un caractère.
• strstr(ch1,ch2); recherche la première occurrence de ch2 dans ch1; sinon NULL
• La fonction strpbrk
• strpbrk(ch1,ch2) cherche dans ch1 la première occurrence d‘un caractère quelconque de ch2
70
19/03/2020
71
• char *strtok(const char *s1, const char*s2);
• Cette fonction permet de couper la chaine de caractères «s1» en symbole élémentaire en les séparant par les caractères de la chaine de caractères
«s2».
• Exemple:
• #include <stdio.h>
• #include <string.h>
• int main ()
• {
• char ch[] ="Cette fonction, ajoute une chaîne la suite d'une autre; On appelle concaténation.";
• char * pch;
• printf (« les éléments de \"%s\" sont :\n",ch);
• pch = strtok (ch, " ,.;'");
• while (pch != NULL)
• {
• printf ("%s\n",pch);
• pch = strtok (NULL, " ,.;'");
• }
• }
71
19/03/2020
72
Chaînes de caractères
• Le fichier d’en-tête ctype.h contient la déclaration de fonctions destinées à tester les caractères:
• isdigit(char c) retourne 1 si c est un chiffre, 0 sinon
• islower(char c) retourne 1 si c est une lettre minuscule, 0 sinon
• isupper(char c) retourne 1 si c est une lettre majuscule, 0 sinon
• isalpha(char c) retourne 1 si c est une lettre, o sinon
• isspace(char c) retourne 1 si c est un caractère d'espacement, 0 sinon
19/03/2020
73 tolower(<c>) retourne< c> converti en minuscule si <c>
est une majuscule
toupper(<c>) retourne< c> converti en majuscule si <c>
est une minuscule
19/03/2020
74
Conversion vers un autre type
• Conversion vers un nombre <stdlib.h>
• On peut convertir une chaîne de caractères en type flottant à l’aide des fonctions
• atoi et atof qui permettent de transformer la chaîne de caractères respectivement en un nombre de type
entier (int) ou flottant (double). Par exemple, on pourra écrire :
• char c1[]=" 12340 " , c2[]=" 2.456e45 " ;
• int entier ;
• double flottant ;
• entier=atoi ( c1 ) ;
• flottant=atof ( c2 ) ;
74
19/03/2020
75
Conversion depuis un nombre
• On veut souvent pouvoir convertir un nombre (entier ou flottant) en une chaîne de caractères. Le plus simple dans ce cas est de faire appel à la fonction de la
librairie standard d’entrée sortie sprintf. On peut utiliser cette fonction de la manière suivante :
• char str [ 10 ] ;
• int i=4;
• sprintf ( str , "%d" , i ) ;
• printf ( " contenu de l a chaine : %s \n" , str ) ;
• Ce programme permet donc d’écrire la valeur de i (ici 4) dans la chaîne str. On utilisera la même syntaxe que la fonction printf. Ce programme affichera donc :
• contenu de la chaine : 4
75
19/03/2020
76
• Tableau à 2 dimensions de type char où chaque ligne contient une chaîne de caractères.
76
Les tableaux de chaînes de caractères