Vous êtes sur la page 1sur 39

28/02/2024

Algorithmique & Structures de


Données
INFO 4, SMA4

Par Mme El khattabi


2023/2024
1

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

1
28/02/2024

Rappels et compléments de C

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.

2
28/02/2024

Algorithme

Informations
en entrée

Algorithme informatique
=
procédure de calcul

Informations
en sortie

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

3
28/02/2024

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.

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).

4
28/02/2024

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: ???

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

5
28/02/2024

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
11

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
12

6
28/02/2024

Structures de contrôle
• Structures de contrôle conditionnelle
– Si cond Alors instr FinSi
– Si cond Alors instr sinon instr1 FinSi
(imbrications possibles)

• Structures de contrôle itératives


– TantQue cond Faire instr FinTantQue
– variantes
(imbrications possibles)

13

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

7
28/02/2024

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

15

La boucle " pour faire"


• Lorsque le nombre d’itération est connu
• Exemple de la table de multiplication
pour var_de_crt de prem_val à dern_val faire
séquence d'instructions
finpour

16

8
28/02/2024

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

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

9
28/02/2024

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

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)
20

10
28/02/2024

Opérateurs et Expressions

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 entiers fournit 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).

21

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

11
28/02/2024

Opérateurs et Expressions

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émentation lorsqu'il est placé à gauche
-un opérateur de post incrémentation lorsqu'il est placé à droite

23

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

12
28/02/2024

Casting
( type_name ) expression

float f, frac_part;
frac_part = f – (int) f;

float quotient;
int dividend, divisor;
quotient = (float) dividend / divisor;

25

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

13
28/02/2024

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 I est 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

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

14
28/02/2024

Conditionnelle
if (condition) instruction1; else instruction2;

• 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

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

15
28/02/2024

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");

31

if imbriqués

int i = 100;

if(i > 0) {
if(i > 1000)
printf(" i> 1000 \n");
} else
printf(“i est negative\n“);

32

16
28/02/2024

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

Conditionnelle
• Exemple
N=5
switch (N%2) {
case 1 : printf ("%d est impair", N) ; break;
case 0 : 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

17
28/02/2024

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

Instructions de contrôle boucle


do…while
• Ecrire un programme qui impose à l’utilisateur
de donner un nombre entre 1 et 10

36

18
28/02/2024

Instructions de contrôle boucle


do…while
int a;
do
{
printf("\n Entrez un entier entre 1 et 10 : ");
scanf("%d",&a);
}
while ((a <=0) || (a > 10))
saisie au clavier un entier entre 1 à 10

37

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
28/02/2024

Exemple

i=1;
while(i<5)
{
printf(“dans la boule %d\n",i);
i++;
}
printf("Extérieur%d\n",i);

39

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ère ité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

20
28/02/2024

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

41

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

42

21
28/02/2024

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

43

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

22
28/02/2024

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

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

23
28/02/2024

Tableaux et pointeurs
• la variable nom tableau contient l'adresse de
la première case du tableau.

47

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

24
28/02/2024

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

50

25
28/02/2024

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

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

26
28/02/2024

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

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

27
28/02/2024

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

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

28
28/02/2024

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

Chaînes de caractères

58

29
28/02/2024

Chaînes de caractères
• 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

Chaînes de caractères
• ‘a‘, ‘b’, ‘c’ sont des caractères constants
• Chaine de caractères: tableaux de caractères
• − " une chaine constante"
• − 'x'  "x"

60

30
28/02/2024

Chaînes de caractères

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.

61

Chaînes de caractères
• 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.

62

31
28/02/2024

Chaînes de caractères
• On ne peut pas affecter une chaîne en dehors de la déclaration.
char mot[8] = "bonjour"; // OK

char mot[8] ;
mot = "bonjour"; // ERREUR
• On ne peut pas affecter une chaîne à une autre.
char mot1[8] ;
char mot2[8] ; // déclaration de deux chaînes

mot1 = mot2; // ERREUR

• On ne peut pas comparer deux chaînes


char mot1[8] ; char mot2[8] ;// déclaration de deux chaînes

if(mot1 == mot2) // ERREUR
63

Parcours d’une chaine


• char ch[ 50];
• int i = 0;
• …
• while ( ch[i] != ‘\0’) i++;

64

32
28/02/2024

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. 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 ) ; 66

33
28/02/2024

Comparaison de deux chaînes


• 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

67

Concaténation de chaînes de caractères

• 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 ) ;

68

34
28/02/2024

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);
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.
70

35
28/02/2024

Recherche
• 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
71

Recherche
• char *strtok(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».

72

36
28/02/2024

Recherche
• 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, " ,.;'");
• }
• }
73

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

37
28/02/2024

Chaînes de caractères

retourne< c> converti en minuscule si <c>


tolower(<c>)
est une majuscule

toupper(<c>) retourne< c> converti en majuscule si <c>


est une minuscule

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 ) ;
76

38
28/02/2024

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
77

Les tableaux de chaînes de caractères

• Tableau à 2 dimensions de type char où


chaque ligne contient une chaîne de
caractères.

78

39

Vous aimerez peut-être aussi