Supposez que nous souhaitions écrire un programme qui lit 5 valeurs avant d'en afficher les différents carrés, le "dialogue avec l'utilisateur" se présentant de cette façon :
donnez 5 nombres entiers :
11 9 14 25 63
les carres sont :
121 81 196 625 3969
On voit que le programme doit conserver les cinq valeurs, avant de les traiter. Comparons les deux programmes suivants :
Programme sans tableau | Programme avec tableau |
#include<stdio.h>
main()
|
#include<stdio.h>
main()
|
On voit aisément que le travail sans tableau est plus fastidieux, surtout si on utilise beaucoup plus de 5 variables.
Syntaxe :
Tableau à 1 dimension :
type nom_du_tableau[nombre_d_elements];
ou
Tableau à 2 dimensions :
type nom_du_tableau[nombre_de_lignes][nombre_de_colonnes];
ou
Tableau à n dimensions :
type nom_du_tableau[dimension_1][dimension_2]...[dimension_n];
Lors de la déclaration d'un tableau, on précise son type, son nom et le nombre d'éléments qu'il peut contenir au maximum. Son type fait partie de ceux existants pour les variables et son nom dépend des mêmes contraintes que les noms de variables. C'est aussi lors de sa déclaration qu'on précise le nombre de dimension du tableau. Il peut être à une dimension, comme une suite d'éléments indicés, à deux dimensions (lignes et colonnes) comme une représentation graphique d'un tableau ou à n dimensions, selon l'usage que l'on veut en faire.
Exemples :
int nombres[5]; /*
un tableau pouvant contenir au maximum 5 entiers */
int abs[100], ord[100], cot[100]; /* on
peut en déclarer plusieurs sur une même ligne */
float x, y, val[30], z; /*
on peut mélanger des déclarations de variables et de tableaux */
char liste[45]; /*
on peut également déclarer des tableaux de caractères */
ou
int notes[20][10]; /* un tableau de 20 lignes
sur 10 colonnes d'entiers (soit 200 entiers) */
float xx[2][100], yy[2][100]; /* on peut aussi
en déclarer plusieurs */
char mois[12][20]; /* on peut aussi avoir
des caractères */
ou
char emploi_du_temps[52][7][24][3]; /* ce tableau
permet de noter trois caractères pour chaque heure*/
/* de chaque jour, de chaque semaine de l'année */
int tel[4][20][10]; /* ce tableau permet
de noter le numéro de poste de chacun des 10 bureaux de */
/* chacun des 20 étages, de chacun des 4 bâtiments de l'entreprise
*/
Tout comme il est possible d'initialiser une variable au moment de sa déclaration, on peut faire de même pour un tableau à une, deux ou n dimensions.
Exemples :
int tab[5] = {10, 20, 5, 0, 3 }; /* ce qui place
les valeurs 10, 20, 5, 0 et 3 dans chacun des 5 éléments de tab */
char voy[6] = { 'a', 'e', 'i', 'o', 'u', 'y' }; /*
de même pour des caractères */
Il est également possible de ne mentionner dans les accolades que certaines valeurs seulement :
int tab[5] = { 10, 20 }; /* place les valeurs 10 et 20 dans chacun des deux premiers éléments de tab */
Notez toutefois que, dans ce cas, les valeurs manquantes resteront imprévisibles.
int tab[3][4] = { { 1, 2, 3, 4 } , { 5, 6, 7, 8 } , { 9, 10, 11, 12
} }; /* on fournit en fait 3 listes séparées */
int tab[3][4] = { 1, 2, 3, 4 , 5, 6, 7, 8 , 9, 10, 11, 12 };
/* on peut réunir les trois listes en une seule */
Pour les tableaux d'une trop grande taille, il est plus courant de les initialiser avec une boucle for.
Exemples :
for (int i=0; i<600 ; i++) tab[i] = 0;
Initialisation d'une image 256*256
for(i=0;i<256;i++)
for(j=0;j<256;j++)
image[i][j]=0;
Chaque élément d'un tableau est considéré comme une variable. tab[0] est le premier élément du tableau tab. Il faut donc faire attention, car si on déclare un tableau de 10 éléments, le dernier sera noté : tab[9].
Voici un exemple qui nous permet de voir, comment on peut saisir les éléments d'un tableau, puis les traiter, et enfin les afficher. Le but du programme est de compter combien il y a d'occurences de chaque voyelle dans une phrase que l'on saisit caractère par caractère.
Exemple :
#include<stdio.h>
main()
{
char voy[6] = { 'a', 'e', 'i', 'o', 'u', 'y'
}; /* les 6 voyelles */
int compte[6] = { 0, 0, 0, 0, 0, 0 };
/* les compteurs correspondants */
int i; /* compteur
de répétition */
char c; /* pour
un caractère lu au clavier */
printf("donnez un texte de votre
choix :\n");
do
{
scanf("%c",
&c);
for (i=0; i<6; i++)
if
(c==voy[i]) compte[i] = compte[i] + 1;
}
while (c!= '\n');
printf("votre texte comporte :\n");
for (i=0; i<6; i++) printf
("%d fois la lettre %c\n", compte[i], voy[i]);
}
L'exécution de ce programme :
donnez un texte de votre choix :
je me figure ce zouave qui joue du xylophone en buvant du whisky.
votre texte comporte :
2 fois la lettre a
8 fois la lettre e
3 fois la lettre i
4 fois la lettre o
7 fois la lettre u
2 fois la lettre y