Chapitre 5 Les tableaux et les chaine de caractères
Chapitre 5
Les tableaux et les chaine de caractères
Types de données complexes
Aux chapitres précédents, nous avons étudier les types de données élémentaires à savoir : le type
entier, réel, caractère, booléen.
Nous rappelons qu’un type décide de l’occupation mémoire de la donnée, ainsi que du format de
sa représentation. Ces types ne sont pas suffisants pour représenter toute la réalité, par exemple
si nous voulons mémoriser les notes du module informatique pour 1000 étudiants ; quel type
convient à cette réalité ?
Créer une variable nommé note pour tous les étudiants engendre le problème de ne pas
garder la trace des 999 premiers étudiants !!
Créer 1000 variables nommés note1, note2, …, note1000, ce n’est pas ni de la logique ni de
la pratique
Il nous faut un nouveau type qui permet de créer une seule variable qui peut contenir 1000 cases
alors peut mémoriser la donnée de chaque case c’est le tableau
1. Tableaux
Une variable est composée d’une seule case mémoire, alors que le tableau est une structure de
données composée d’un ensemble de cases mémoires rangées en mémoire les unes à la suite des
autres.
Le type des éléments d’un tableau peut être n’importe lequel du langage C :
Types élémentaires : char, short, int, long, float, double ;
Pointeur : type utilisé pour la mémorisation des adresses de données ;
Tableau ;
Structure.
Le terme tableau admet comme synonymes les mots : « vecteur » (tableau unidimensionnel
uniquement), « table » ou « matrice » (tableau bidimensionnel).
Un tableau est caractérisé par son : nom, type et taille.
Les tableaux sont stockés en mémoire centrale comme les autres variables, contrairement aux
fichiers qui sont stockés sur le disque. Une propriété importante des tableaux est de
permettre un accès direct aux données, grâce à l’indice (index).
On distingue les tableaux unidimensionnels et les tableaux multidimensionnels
1.1. Tableaux à une dimension (vecteur)
Le tableau est unidimensionnel lorsque ses éléments ne sont pas eux-mêmes des tableaux. On
pourrait le considérer comme ayant un nombre arbitraire de colonnes, mais une seule ligne.
- Le vecteur doit avoir un nom. Par exemple, le vecteur T.
- Une case mémoire représente un élément du vecteur.
- Tous les éléments du vecteur sont de même type.
26
Chapitre 5 Les tableaux et les chaine de caractères
- Le nom de chaque élément est composé du nom du vecteur suivi d’un indice. Ce dernier indique
la position de l’élément dans le vecteur. Par exemple, l’élément T*3+.
- L’indice est indiqué entre crochets.
Exp : soit la description suivante d’un tableau nommé T de 10 cases contenants par exemple les
notes de 10 étudiants.
T[3]
T
10,00 15,50 20,00 09,00 11,75 20,00 19,50 13,00 15,00 12,50
T[i] : T variable qui indique le nom du vecteur ; i indice d’un élément du vecteur
T[i] : représente l'élément du vecteur T occupant le rang " i "
T[3] = 20.00 indique que la case numéro 3 du tableau T contient la valeur 20.00
L'indice peut être une constante, une variable ou une expression arithmétique.
Constante : T[1]
Variable : T[i]
Une expression : T[i+1]
Un élément du tableau est manipulé exactement comme une variable. On peut :
Lui affecter une valeur : T[4] 15
L’utiliser dans une expression : a (T[1] + T[n]) / 5
Faire des tests dessus… : Si ( T[i] mod 2 = 0 ) alors ecrire(T[i])
Fsi
……
1.1.1. Déclarer un vecteur (tableau à une dimension) : Avant d'utiliser un tableau, il faut déclarer
sa taille pour que le système réserve la place, en mémoire, nécessaire pour stocker tous les
éléments de ce tableau.La déclaration de tous les éléments du tableau est réalisée avec le mot-clé
« Tableau » en indiquant entre crochets le minimum et le maximum d’éléments composant le
vecteur.
Algorithme Code C
« Nom » : tableau de « taille » de « type » « type » « nom[taille]»;
Exp : Exp :
T : tableau *1. .100+ d’ entiers int T[100] ;
Remarques :
Dans la partie Constante, on peut définir la taille du tableau. Ensuite, on peut déclarer le
nombre d'éléments à saisir dans le tableau.
Le nombre d'éléments à saisir ne doit pas dépasser la taille du tableau pour ne pas
déborder sa capacité.
On appelle dimension d'un vecteur le nombre d'éléments qui constituent ce vecteur.
27
Chapitre 5 Les tableaux et les chaine de caractères
1.1.2. Opérations sur les tableaux
Comment accède-t-on à un élément quelconque du tableau ? c-à-d, comment peut-on exploiter
les divers éléments d’un tableau en tant que variable ? comment y lit-on des valeurs et comment
les affiche-t-on ? …
a) Décrire un élément quelconque du tableau : nom du tableau[indice]
Algorithme Code C
Même chose dans l’algorithme, c-à-d :
Exp : T[2] 5, T*3+=32, T*5+=’a’, T*i+ T[i]+3, nom du tableau[indice]
… Exp : T[2]=5, T*3+==32, T*5+==’a’, T*i+=T*i++3, …
b) Lecture d’un tableau : La lecture d'un vecteur consiste à saisir les données des éléments du
vecteur. (Remplir des cases successives du tableau). On doit utiliser une boucle qui permet de
saisir à chaque entrée dans la boucle la iième case.
Algorithme Code C
Pour i de 1 à 10 faire for (i=1 ;i<=10 ; i++)
Lire(T[i]) scanf(‘’%d’’, &T*i+) ;
Fin pour
c) Affichage d’un tableau :
Algorithme Code C
Pour i de 1 à 10 faire for (i=1 ;i<=10 ;i++)
Ecrire(T[i]) printf(‘’%d\t’’, T*i+) ;
Fin pour
Remarques :
Indice est le numéro d’une case dans le tableau, il commence par 1.
Pour mettre toutes les cases à 0 on fait : for (i=1 ; i<=10 ; i++) T[i]=0 ;
Exercices à domicile
Exercice 1
Ecrire un programme qui permet de remplir un tableau de N éléments, et d’afficher son contenu
Exercice 2
Ecrire un programme qui permet de rechercher un élément donné X dans un tableau
Exercice 3
Ecrire un programme qui permet de rechercher le minimum et le maximum dans un tableau de N
éléments
Exercice 4
Ecrire un programme qui permet d’insérer un élément après l’élémentde la case k dans un tableau
de N entiers ( N<= 100) .
Exercice 5 (Tri par Bulle)
Ecrire un programme qui permet de trier les éléments d’un tableau par la méthode de bulle.
La méthode de bulle consiste à balayer tout le tableau, en comparant les éléments adjacents et les
échangeant s'ils ne sont pas dans le bon ordre. Un seul passage ne déplacera un élément donné
que d'une position, mais en répétant le processus jusqu'à ce plus aucun échange ne soit
nécessaire, le tableau sera trié.
Exercice 6 (Recherche séquentiel d’un élément dans un tableau)
28
Chapitre 5 Les tableaux et les chaine de caractères
Il suffit de lire le tableau progressivement du début vers la fin. Si le tableau n'est pas trié, arriver
en fin du tableau signifie que l'élément n'existe pas. Dans un tableau trié le premier élément
trouvé supérieur à l'élément recherché permet d'arrêter la recherche
Exercice 7 (Recherche dichotomique d’un élément dans un tableau)
Ecrire un programme qui permet de rechercher un élément donné par la méthode dichotomique
dans un tableau à une dimension trié.
1.2. Tableaux à deux dimensions
Considérons l’exemple suivant : soit une section de 1000 étudiants qui suivent 7 modules, on veut
calculer la moyenne de chaque étudiant.
Quelles sont les données ? Quelles sont les résultats ? comment on les déclare ?
Utiliser 1000 * 7 variables pour les notes de 1000 étudiants dans 7 modules et 1000
variables pour les moyennes !!!!!! c’est déraison,
Utiliser 7 vecteurs (tableau à une dimension) de taille 1000 pour les notes et un autre pour
les moyennes ç'est aussi illogique.
Dans ce cas le vecteur ne répond pas à cette réalité, alors chercher d’autres structures
Tableau à deux dimension (matrice), nous créons une seule variable de type matrice de
1000 lignes (étudiants) et 8 colonnes (notes + moyenne).
Une table ou matrice est un tableau bidimensionnel (à deux dimension), composé de plusieurs
lignes et plusieurs colonnes.
Pour se déplacer dans une matrice, on a besoin de deux indices (par convention i et j), le
premier indique le numéro de la ligne et le deuxième indique le numéro de la colonne.
L'élément d'indice [i,j] est celui du croisement de la ligne i avec la colonne j.
Une case dans une matrice est connue par le nom de la matrice suivie entre crocher par son
indice de ligne, son indice de colonne : Exemple M[i,j]
Comme les vecteurs :
L'indice peut être une constante, une variable ou une expression arithmétique.
Un élément de la matrice est manipulé exactement comme une variable.
Dans la partie Constante, on peut définir la taille de la matrice (lignes, colonnes). Ensuite,
on peut déclarer le nombre d’éléments réellement à saisir.
Le nombre d'éléments à saisir ne doit pas dépasser la taille de la matrice.
En Algorithmique l’indice des lignes et des colonnes commence par 1.
Indice des
Colonnes
Colonnes : j
M
Indice des lignes : i 2 4 23 12 1
11 8 22 15 2
Lignes 7 13 17 5 11
10 1 4 20 23
14 76 11 12 33
M[2,2]= 8 M[3,5]= 11
29
Chapitre 5 Les tableaux et les chaine de caractères
Pour déclarer une matrice :
Algorithme Code C
« Nom » : tableau de « type » « nom[taille][ taille]»;
« taille_Lignes,taille_Colonnes » de « type » Exp :
« Nom » : tableau de [VminL..VmaxL, VminC..VmaxC] float T[1000][8] ;
de « type »
Exp :
T : tableau de [1000,8] de réels
T : tableau de [1..1000,1..8] de réels
1.3. Opérations sur les matrices
1.3.1. Décrire un élément quelconque d’une matrice :
Algorithme Code C
nom du tableau [indice ligne , indice colonne] nom du tableau[indice ligne][indice colonne]
Exp : T[2,3] 5, T[3,1]a+1, T*1,1+ = ’a’, … Exp : T*2+*3+ =5, T*3+*1+=a+1, T*0+*0+==’a’, …
1.3.2. Lecture d’une matrice
Algorithme Code C
Pour i de 1 à 1000 faire for (i=0 ;i<1000 ;i++)
Pour j de 1 à 7 faire for (j=0 ;j<7 ;i++)
Lire(T[i,j]) scanf(‘’%d’’, &T*i+*j+) ;
Fin pour
Fin pour
1.3.3. Affichage d’une matrice
Algorithme Code C
Pour i de 1 à 1000 faire for (i=0 ;i<1000 ;i++)
Pour j de 1 à 7 faire {
ecrire(T[i,j]) for (j=0 ;j<7 ;i++)
Fin pour printf(‘’%d\t’’, T*i+*j+) ;
Fin pour printf(‘’\n’’) ;
}
1.4. Tableaux à N dimensions
Un tableau à N dimensions est déclaré de la manière citée ci-dessous, en précisant le nombre et le
type de valeurs qu’il contiendra.
Exemples :
Achat : tableau *1..100, 1..100, 1..300+ d’entiers ;
Vente : tableau [1..10, 1..47, 1..12, 1..7] de réels ;
Le premier est un tableau à trois dimensions et le deuxième est un tableau à quatre dimensions.
La référence d’un élément dans un tableau à N dimensions, se fait de la même manière que celle
pour un tableau à une ou à deux dimensions, en précisant l’indice de chaque dimension.
Exemple d’un tableau à trois dimensions
30
Chapitre 5 Les tableaux et les chaine de caractères
Exemple d’un tableau à trois dimensions
Exercices à domicile
Exercice 1
Ecrire un algorithme qui permet de remplir et d’afficher un tableau à deux dimensions
Exercice 2
Ecrire un algorithme qui permet de chercher le minimum dans un tableau à deux dimensions
Exercice 3
Ecrire un algorithme qui permet de calculer la moyenne des éléments de l’anti diagonale d’un
tableau à deux dimensions
Exercice 4
Soient A un tableau qui contient les notes de tous les modules d’un étudiant X, B : Le vecteur des
coefficients qui correspond à ces notes, Ecrire un programme qui permet de calculer la moyenne
de l’étudiant X.
Exercice 5
Ecrire un algorithme qui permet de calculer le nombre d’occurrences d’un nombre donné x dans
un tableau à deux dimensions
1.5. String (chaînes de caractères)
Les chaînes de caractères ou string sont des suites de caractères composées de signes faisant
partie du jeu de caractères représentables de l’ordinateur. Nous avons déjà utilisé des string, le
plus souvent comme paramètres de la fonction printf. Par exemple, dans l’instruction : printf(‘’
entrer un entier’’) ; Cette chaîne de caractères est une constante, mais les chaînes de caractères
peuvent également être des variables.
En C, les chaînes de caractères, qu’elles soient constantes ou variables, sont de par leur structure
des tableaux à une dimension, ayant des éléments de type char.
Par exemple, la définition char s[17] ; crée un tableau s comportant 17 éléments de caractères
modifiables.
Pour déclarer une chaîne de caractères :
Algorithme Code C
Nom : chaîne de caractère char « nom[taille] »;
Exp : Exp :
s : chaîne de caractères char s[17] ;
31
Chapitre 5 Les tableaux et les chaine de caractères
Remarques :
1. Contrairement aux données des autres types, les string doivent se terminer par un caractère
spécial qui est le caractère nul \0. La fonction de ce caractère est d’indiquer où se termine la
chaîne de caractères. Dans notre exemple, le tableau s aurait l’aspect suivant après
mémorisation correcte de la string ‘entrer un entier’ :
e n t r e R U n e n t i e r \0
2. Un tableau char doit donc toujours être crée avec un élément (au mins) de plus que la longueur
de la string à mémoriser.
3. En utilisant un tableau pour mémoriser une string, il peut combler au programmeur d’ajouter
explicitement le caractère nul à la fin de la chaîne (avec une instruction spécifique par
exemple).
4. En utilisant une des fonctions de chaînes de C pour mémoriser cette string, on n’a pas à se
soucier au caractère nul.
5. Aussi, en utilisant un tableau pour mémoriser une string, le vocabulaire de C ne permet pas de
manipuler globalement les tableaux. on les manipule élément par élément.
6. En utilisant une des fonctions de chaînes de C pour mémoriser cette string, il existe une série de
fonctions spécifiques pour le traitement de chaînes de caractères en bloc.
1.5.1. Lecture et écriture d’une chaîne de caractères
En algorithmique, pour saisir et afficher une chaîne de caractères et parmi d’autres conventions on
utilise simplement lire(chaîne) et ecrire(chaîne) d’où chaîne est le nom de la chaîne de caractères.
En C, plusieurs méthodes sont utilisées.
a) Saisie et affichage de string en mode caractère :
Exp : pour faire entrer et afficher par clavier la chaîne précédente en mode caractère :
#include<stdio.h>
Main()
{
Char s[20] ; int i ;
i=0 ;
while((s[i]=getchar()) !=’\n’)
i++ ;
s*i+=’\0’ ;
i=0 ;
while(s[i] !=’\0’)
{
putchar(s[i]) ; i++ ;
}
}
b) Saisie et affichage de string avec scanf et printf :
Les fonction scanf et printf possèdent une spécification de format %s qui permet de manipuler des
string.
Exp : pour faire entrer et afficher par clavier la chaîne précédente avec scanf et printf :
char s[20] ;
32
Chapitre 5 Les tableaux et les chaine de caractères
scanf(‘’%s’’, s) ; // pas d’opérateur d’adressage & devant s
printf(‘’%s’’, s) ;
Rq :
Le format %s peut être complété, aussi bien pour scanf que pour printf, par un nombre entier qui
indique le nombre maximal de caractères à lire ou à afficher.
Exp : scanf(‘’%10s’’, a) ; lit au plus 10 caractères et les range dans le tableau a. De même,
printf(‘’%10s’’, a) ; affiche au plus 10 caractères de la chaîne rangée dans le tableau a.
c) Saisie et affichage de string avec gets et puts :
Une alternative simple à scanf est représentée par la fonction gets. Celle-ci lit une chaîne de
caractères en bloc sur le clavier, voici sa syntaxe simple : gets(s) ; s est le nom de la chaîne
précédente.
La routine d’affichage correspondant à gets est donnée par la fonction puts.
Exp : puts(s) ; affiche la chaîne de caractères s sur l’écran.
Rq : L’argument de puts peut également être une chaîne constante comme dans cette instruction :
puts(‘’chaîne de caractère’’) ; qui affiche la string ’chaîne de caractère.
1.5.2. Opération sur les chaînes de caractères
1. Opération d’affectation (initialisation) :
Les variables chaînes peuvent être initialisées dès leur définition par l’une des méthodes suivantes
(comme tous les autres tableaux) :
char s*30+=,‘c’,’h’,’a’,’î’,’n’,’e’,’ ‘,’d’,’e’,’ ‘,’c’,’a’,’r’,’a’,’c’,’t’,’è’,’r’,’e’,’s’,’\0’- ;
char s*+ = ,‘c’,’h’,’a’,’î’,’n’,’e’,’ ‘,’d’,’e’,’ ‘,’c’,’a’,’r’,’a’,’c’,’t’,’è’,’r’,’e’,’s’, ’\0’- ;
char s*30+=’’ chaînes de caractères’’ ;
char s*+=’’ chaînes de caractères’’ ;
2. Autres techniques d’affectation :
s*0+=’c’ ; s*1+=’a’ ; s*2+=’î’ ; s*3+=’n’ ; s*4+=’e’ ; s*5+=’ ’ ; s*6+=’d’ ; s*7+=’e’ ; s*8+=’ ’ ; s*9+=’c’ ;
s*10+=’a’ ; s*11+=’r’ ; s*12+=’a’ ; s*13+=’c’ ; s*14+=’t’ ; s*15+=’è’ ; s*16+=’r’ ; s*17+=’e’ ; s*18+=’s’ ;
s[19+=’\0’ ;
3. La fonction strcpy : permet de recopier une chaîne dans un tableaux.
Ex : strcpy(s, ‘’ chaîne de caractères’’) ; recopie la string ‘’ chaîne de caractères’’ dans s (qui est un
tableau char ou une chaîne). L’ancien contenu de s est écrasé.
Rq : l’utilisation destrcpyet de quelques autres fonctions de traitement de chaîne de caractères
exige l’inclusion de la bibliothèque : #include<string.h>
4. La fonction strcat : permetdeconcaténer deux chaînes de caractères en accordant l’une d’elles
à la fin de l’autre. Sa syntaxe est : strcat(c1,c2), d’où c1 est la première chaîne et c2 est la
deuxième.
Ex : c1*+=’’concaténation ’’ ; c1*+=’’chaîne de caractères’’ ; strcat(c1,c2) ; donne comme résultat :
c1*+=’’ concaténation chaîne de caractères’’.
33
Chapitre 5 Les tableaux et les chaine de caractères
Rq : lors de la concaténation, le caractère nul de la première chaîne est écrasé. La nouvelle chaîne
se termine logiquement par un caractère nul.
5. La fonction strcmp : compare deux chaînes caractère par caractère, jusqu’à ce que soit
détecté e une différence ou que soit atteint le caractère nul. La comparaison s’effectue dans
l’ordre lexicographique (alphanumérique). Càd, on vérifie à chaque fois si les deux caractères
à comparer occupent ou non la même place dans la table de caractères utilisée (la table ASCII
par exemple). Par exemple, dans la table ASCII, le caractère Z est plus grand que le caractère
A, et plus petit que le caractère a.
6. La fonction strlen : calcule la longueur d’une chaîne de caractère en octets (donc le nombre
de caractères), le caractère nul n’étant pas conté ici. Sa syntaxe est : strlen(s) ; s est la chaîne
de caractères.
Exp : a=strlen(s) ; donne comme résultat un entier a qui est le nombre de caractère dans s sans le
caractère nul, a=20 dans l’exemple où s*+=’’chaîne de caractères’’ .
Exercices à domicile
Exercice 1
Ecrire un algorithme qui permet de calculer le nombre des voyelles, consonnes et les unités
blanches dans une chaîne de caractères. On suppose que notre chaine de caractères ne contient
que des voyelles, consonnes et des unités blanches, et non des numéros.
Exercice 2
Ecrire un programme C qui affiche le nombre de mots dans une phrase. Nous supposons que les
mots sont séparés par un seul blanc et la phrase se termine par un point.
Exercice 3
Ecrire un algorithme qui permet de supprimer une unité blanche parmi deux unités. càd, si deux
mots sont séparés par deux blancs ; alors on supprime un.
Exercice 4
Ecrire un programme C qui permet de remplacer la lettre a par la lettre A dans une chaîne de
caractères.
Exercice 5
Ecrire un programme qui permet de vérifier si un mot est un palindrome ou non.
Exercice 6
Ecrire un algorithme puis son programme C qui calcule le nombre de lettres minuscules dans une
chaîne de caractères.
34