ENSIIE

Algorithmique et Programmation en C
Sandrine Blazy

Octobre - Décembre 2007

Éléments de cours-td sur les tableaux

Les tableaux sont certainement les variables structurées les plus populaires. Ils sont disponibles dans tous les langages de programmation et servent à résoudre une multitude de problèmes. Dans une première approche, le traitement des tableaux en C ne diffère pas de celui des autres langages de programmation. On verra la manipulation via les pointeurs plus tard.

Définition : collection d'objets de même type ordonnée (1er, 2eme ...) accès individuel via l'indice

Un tableau (uni-dimensionnel) A est une variable structurée formée d'un nombre entier N de variables simples du même type, qui sont appelées les composantes du tableau. Le nombre de composantes N est alors la dimension du tableau.

En faisant le rapprochement avec les mathématiques, on dit encore que "A est un vecteur de dimension N"

Exemple

La déclaration int JOURS[12]={31,28,31,30,31,30,31,31,30,31,30,31}; définit un tableau du type int de dimension 12. Les 12 composantes sont initialisées par les valeurs respectives 31, 28, 31, ... , 31.

On peut accéder à la première composante du tableau par JOURS[0], à la deuxième composante par JOURS[1], . . . , à la dernière composante par JOURS[11].

Déclaration de tableaux en C

TypeSimple NomTableau [Dimension];

Les noms des tableaux sont des identificateurs

Exemples int A[25]; float B[100]; int C[10]; char D[5];

Initialisation

Lors de la déclaration d'un tableau, on peut initialiser les composantes du tableau, en indiquant la liste des valeurs respectives entre accolades.

Exemples

int A[5] = {10, 20, 30, 40, 50};

float B[4] = {-1.05, 3.33, 87e-5, -12.3E4};

int C[10] = {1, 0, 0, 1, 1, 1, 0, 1, 0, 1};

Il faut évidemment veiller à ce que le nombre de valeurs dans la liste corresponde à la dimension du tableau.

Réservation automatique

Si la dimension n'est pas indiquée explicitement lors de l'initialisation, alors l'ordinateur réserve automatiquement le nombre d'octets nécessaires.

Exemples

int A[] = {10, 20, 30, 40, 50}; ==> réservation de 5*sizeof(int) octets (dans notre cas: 10 octets)

float B[] = {-1.05, 3.33, 87e-5, -12.3E4}; ==> réservation de 4*sizeof(float) octets (dans notre cas: 16 octets)

int C[] = {1, 0, 0, 1, 1, 1, 0, 1, 0, 1}; ==> réservation de 10*sizeof(int) octets (dans notre cas: 20 octets)

Accès aux composantes

===================

En déclarant un tableau par: int A[5]; nous avons défini un tableau A avec cinq composantes, auxquelles on peut accéder par: A[0], A[1], ... , A[4]

Exemples

MAX = (A[0]>A[1]) ? A[0] : A[1];

A[4] *= 2;

Si T est un tableau de dimension N, En C,

- l'accès au premier élément du tableau se fait par T[0]

- l'accès au dernier élément du tableau se fait par T[N-1]

Modification d'un élément : T[indice]=expression

Exemple de l'échange des elements d'indice i et j temp = t[i]; t[i]=t[j]; t[j]=temp;

Dans une procédure qui prend un tableau t en paramètre, passer aussi sa taille en paramètre Exemple (à faire avec les eleves en TD) affichage des éléments d'un tableau (un par ligne) : boucle for bien adaptée pour ce type de traitement

/*interface ...

*/

void table_ecrire(int table[], int n)

{

/* variable de parcours des éléments de la table *

int i;

/* Affichage des n-1 premiers éléments, séparés par des virgules */

for (i=0; i printf("\n%i",table[i]);

}

Lecture des éléments d'un tableau

void table_lire(int table[], int n)

{

/* variable de parcours des éléments de la table */

int i;

/* Affichage des n éléments, séparés par des espaces */

for (i=0; i scanf("%i",&table[i]);

}