Vous êtes sur la page 1sur 15

Cours 

de Langage C
Les tableaux en Langage C
Objectifs de la séance
 Les tableaux 1D en langage C
 Tableaux et fonctions
 Emplacement du début d’un tableau
 Les tableaux 2D
 Variante sur les notations
 Notion d’adresse
Notion d adresse

2
Tableaux à une dimension (« Tableaux 1D »)
 On va se préoccuper des tableaux à 3 occasions  :

 Déclaration : Préciser le type des éléments d
: Préciser le type des éléments d’un
un tableau
tableau
 1 seule fois
 tous les éléments sont du même type

 Initialisation: Remplir un tableau avec des valeurs
 Peut être fait en une seule fois avec la déclaration
 Sinon, dans le code, les cases seront remplies une par une
Si d l d l li

 Utilisation  du tableau
 Le plus souvent case par case 
Ex : tableau[i] = 45 ;
 Parfois en un seul bloc , dans des fonctions (voir fin de ce cours)
( f )

3
Tableaux à une dimension
 Déclaration d’un tableau
int Tab[100] ;
Déclare un tableau d’entiers de 100 éléments 
Allant de Tab[0] à Tab[99].
 Le 1er élément a l’indice 0 (et non 1 comme en Matlab)
Le nom du tableau est Tab, ses éléments sont tous du même type 
et contigus en mémoire (une mémoire informatique a une 
et contigus en mémoire (une mémoire informatique a une
structure 1D) Tableau de taille 100

… … …
Tab[0] Tab[i] Tab[99]

Attention aux problèmes de débordement : l’élément Tab[100] n’existe pas4
Initialisation d’un tableau 1D
 Initialisation à la déclaration
int tab[5]={1,2,3,4,5};

 Initialisation dans le programme
Par exemple avec une boucle
{…
int tab[5];
int i;
for (i=0;i<5;i++) tab[i]=i+1;
}

 Exemples de codes interdits 
tab[5]={1,2,3,4,5};
tab[5]={1 2 3 4 5};  interdit dans le code
interdit dans le code
5
tab2=tab;  interdit
Taille d’un tableau 1D
 La taille d’un tableau est connue à la compilation : c’est une 
constante symbolique ou  bien un nombre.

#define TAILLE 100


main( ) main( )
{ {
double tab1[TAILLE] ; int n = 100 ; NON
OK double tab[n] ;
int tab2[5];
short
h t t
tab3[2*TAILLE];
b3[2*TAILLE] …
… }
}

Erreur à la compilation
La taille d’un tableau
ne peut pas être une variable.6
Fonctions et tableaux
 On est souvent amené à parcourir les éléments d’un tableau pour 
O t t éà i l élé t d’ t bl
faire des opérations  (Moyenne, classement, …)
 les fonctions sont indispensables pour ne pas avoir à réécrire un 
les fonctions sont indispensables pour ne pas avoir à réécrire un
nouveau code pour chaque tableau.

 Un tableau peut donc être passé comme argument d’une fonction.

 On transmet à la fonction l’emplacement  mémoire du début du 
tableau

 On parlera de l’adresse du tableau qui est égale à l’adresse du 1er
élément du tableau : il s’agit
élément du tableau : il s agit du nom
du nom du tableau
du tableau
Ex : int tab[10] ; tab est l’adresse du tableau (et de tab[0])
Fonctions et tableaux : déclaration, utilisation, définition
, , f

#define DIM 100 Nb d’éléments sur lesquels on travaille


//Prototype
void initialise_tab(int tab[ ], int n, int valeur);

main() On ne spécifie pas la taille du tableau entre [ ]


{
int T[DIM]; //Création du tableau à initialiser
initialise_tab(T, DIM, 0); //Appel
}
On passe le nom du tableau qu’on veut initialiser

//Définition
void
id i
initialise_tab(int
iti li t b(i t t
tab[
b[ ]
], iint
t n, iintt valeur)
l )
{
int i; Recopie du prototype
for (i=0;i<n;i++) tab[i]=valeur;
}
Fonctions et tableaux : utilisation
 Syntaxe pour  transmettre à la fonction l’emplacement  
Syntaxe pour transmettre à la fonction l’emplacement
mémoire du début du tableau :
Rq : Le plus souvent, il faudra aussi transmettre la taille du 
: Le plus souvent, il faudra aussi transmettre la taille du
tableau comme autre argument de la fonction.

#define DIM 100 /* DIM est la


taille du tableau */
#d fi
#define DIM2 200

double m1
m1, m2 ;
m1=Moyenne( tab, DIM ); /* on calcule la moyenne de
deux tableaux de tailles différentes */
m2=Moyenne ( tab2, DIM2 ) ;
Tableaux à 2 dimensions (« 2D »)
 EEn C, on peut déclarer des tableaux à 2 indices
C t dé l d t bl à 2 i di
int tab[5][3] ; // 5 lignes de 3 colonnes

 Plusieurs interprétations :
• tab[i][j] pour i = 0,1,2,3,4 et j=0,1,2 est un entier

• tab[i] pour i=0,1,2,3,4 est un tableau de 3 entiers

• tab est un tableau dont chacune des 5 composantes est un 
tableau de 3 entiers
Tableaux à 2 dimensions (« 2D »)
 IInitialisation :
iti li ti
‐En bloc :
i t tab[2][3]
int t b[2][3] = {{1
{{1,2,3};{3,2,1}}
2 3} {3 2 1}} ;
int tab[2][3] = {1,2,3,3,2,1} ;
‐Dans le programme avec deux boucles for.

 Utilisation des tableaux 2D
Comme pour les tableaux 1D
Tableaux à 2 dimensions (« 2D »)
 P iti
Positionnement en mémoire
t é i
La mémoire du PC a une structure 1D et non 2D
En mémoire on aura pour int
En mémoire, on aura pour   tab[5][3] ;

Nb : un int occupant 4 octets  les adresses évoluent de 4 en 4


Autre notation
 LLe symbole & pour signifier «
b l & i ifi adresse de …
d d »
Moyenne (tab, DIM) ;
M
Moyenne ( t b[0] DIM) ;  Notations équivalentes
(&tab[0],

ClasserTableau (tab, DIM2) ;


ClasserTableau (&tab[0], DIM2) ;

 Ce symbole & pourra aussi servir à accéder à l’adresse d’une 
variable (en dehors de la notion  de tableau)
i bl ( d h d l i d bl )
int a = 8 ;
i
int b
b;
b= &a ;
En‐tête de fonction
 Une fonction ne retourne qu’une valeur (au plus) mais peut 
U f ti t ’ l ( l ) i t
maintenant changer N variables  : par exemple avec la fonction 
ClasserTableau
 L’en‐tête de fonction devra alors préciser le(s) tableau(x) 
modifiés par cette fonction
p

/* La
/ a fonction
o ct o CClasserTableau()
asse ab eau() range
a ge da
dans
s
l’ordre croissant les N elements tab[i]
ENTREES : le tableau tab d’int, sa taille n
SORTIE : tab */
void ClasserTableau(int
( tab[],
[], int n)
) ;
Histogramme
Principe
On tire Ntirs valeurs comprises entre min et max

probabil
p ité

min max Valeurs possibles


probabilité de tirer la valeur i = nb d
d’occurrences
occurrences / Ntirs
En pratique
On remplit un tableau de Ntirs nb aléatoires entiers
compris entre min et max
Ex : 1 5 8 1 9 4 5 8 1 2
Fonction histogramme : remplit le tableau des
probabilités (quelle est sa taille?)

Vous aimerez peut-être aussi