Vous êtes sur la page 1sur 20

1 GII / GT

Algorithmique & programmation


en langage C

Chapitre 5 Les tableaux


Les tableaux à une dimension
Les tableaux à deux dimensions

Dr. -Ing Mouna Medhioub


Chapitre 5 Les tableaux
Les tableaux à une dimension

• Un tableau est une structure de donnée formé d’un nombre entier N de variables de même
type qui sont appelées les composantes du tableau.
N

« Déclaration »
✓ Type : définit le type des éléments du tableau.
Type Identificateur [Taille] ; ✓ Identificateur : est le nom du tableau.
/*Tableaux à 1 dimension ✓ Taille : est un nombre entier qui détermine le nombre des éléments
du tableau
• Taille : est nécessairement une VALEUR NUMERIQUE.
• En C, le nom d’un tableau représente l’adresse du premier élément du tableau. Les adresses
des autres composantes sont calculées (automatiquement) relativement à cette adresse.
int A[25]; /*tableau de 25 entiers de type « int » */
Exemple float B[10]; /* tableau de 10 décimaux de type « float » */
char C[30]; /* tableau de 30 caractères (entiers de type « char ») */

Dr. -Ing Mouna Medhioub 2


Chapitre 5 Les tableaux
Les tableaux à une dimension

• Pour plus de clarté, il est recommandé de donner un nom à la constante « Taille » par
une directive:
#define Taille Val
/*Taille du tableaux à 1 dimension

Exemple
#include <stdio.h> 1 /*taille1: constante de valeur 5*/
#define taille1 5 1
2 #define taille2 3 2 /*taille2: constante de valeur 3*/
main( ) 3 /*a: tableau de 5 entiers*/
{ int a[taille1]; 3
4 char b[taille2]; ….. } 4 /*b: tableau de 3 caractères*/

• Remarque:
1) int tab[0]; → /*Erreur: taille doit être different de 0*/ 3) int b[-3]; → /*Erreur: taille doit être positive */
2) int b[3.4]; → /*Erreur: taille doit être un entier*/ 4) int p=3;
int tab[p]; →/*Erreur: taille ne peut pas être une variable*/

Dr. -Ing Mouna Medhioub 3


Chapitre 5 Les tableaux
Les tableaux à une dimension

« Mémorisation »
• Lors de la déclaration d'un tableau, une zone mémoire lui sera réservée. Elle sera utilisée
pour le stockage de ses données.
→ Si un tableau possède N composantes et si le type déclaré des composantes requiert M
octets, la mémoire réservée pour ce tableau est de N×M octets.
int compteur[10]; /* le compilateur réserve des places pour 10 entiers, soit 40 octets */
Exemple
float nombre[20]; /* le compilateur réserve des places pour 20 réels, soit 80 octets */
char Tab[5]; /* le compilateur réserve des places pour 5 caractères, soit 5 octets */

• En C, le nom d’un tableau est le représentant de l’adresse du premier élément du tableau.


Exemple Un tableau T correspond à l'adresse mémoire de son premier élément → (T=&T[0])
• Les adresses des autres composantes sont calculées automatiquement, relativement à
cette adresse.
Dr. -Ing Mouna Medhioub 4
Chapitre 5 Les tableaux
Les tableaux à une dimension

Exemple
Supposant que T a été mémorisé à l'adresse mémoire 100, un caractère étant codé sur un
octet, le contenu des cellules mémoire sera alors comme suit :

Contenu de la mémoire

#define taille 3
T=&T[0]
main( )
{
char T[taille]; adresse 100 a &T[0] est 100
T[0]='a';
T[1]='b'; adresse 101 b &T[1] est 101
T[2]='c'; c
adresse 102 &T[2] est 102
}

Dr. -Ing Mouna Medhioub 5


Chapitre 5 Les tableaux
Les tableaux à une dimension

« Initialisation »
• En C, on peut initialiser les tableaux au moment de leur déclaration.
• Elle consiste à indiquer la liste des valeurs entre accolades.
Type Identificateur [n] = {Valeur1,…,Valeurn};
/* Initialiser du tableaux à 1 dimension
Exemple
int A[5]={10,20,30,40,50} ; 1 1 /*tableau de 5 entiers initialisés à 10,20,30,40 et 50 */

float B[3]={-1.05,87e3,-12.3e-4} ; 2 2 /*tableau de 3 réels initialisés à - 1.05,87e3 et -12.3e-4 */


3 /*Les deux dernières cases seront remplies par des zéros */
short A1[5]={2,3,5}; 3
4 /*Erreur */
short A2[3]={2,3,5,7,8}; 4
5 /*Réservation automatique de autant de cases mémoires
short A3[]={2,3,5,7,8}; 5 que de valeurs citées entre accolades */
int tab[3] = { [2] = 3 }; 6 6 /*tableau de trois entiers et initialise le troisième élément*/
int tab[5] = {0}; 7 7 /* Toutes les cases valent 0*/
int tab[5] = {4}; 8 8 /* Première case initialisé à 4, le reste à 0 */

Dr. -Ing Mouna Medhioub 6


Chapitre 5 Les tableaux
Les tableaux à une dimension

« Accès aux éléments »


• Pour accéder à un élément du tableau, il suffit de donner le nom du tableau suivi de l'indice de
l'élément entre crochets.
Identificateur[Indice]

Exemple A[5] /* le 6 éme élément du tableau A */


• L'indice du premier élément du tableau est 0.
• L’indice est toujours positif.
• L'indice du dernier élément du tableau est égal (Taille– 1).

#include <Stdio.h>
int main()
Exemple {int tab[5] = {20,10,5,15,18}; 1 n1 = 20
int n1 = sizeof(tab);
printf("n1= %d\n", n1); 1 2 Total elements = 5
int n2 = sizeof(tab) / sizeof(tab[0]);
printf("Total elements = %d\n", n2); 2
}

Dr. -Ing Mouna Medhioub 7


Chapitre 5 Les tableaux
Les tableaux à une dimension

« Lecture et affichage »
• Les éléments d'un tableau sont à lire et à afficher élément par élément :

scanf("%...",&Identificateur[Indice]); Exemple scanf("%f",&compteur[0]);


/* Syntaxe lecture

printf("%...",Identificateur[Indice]); Exemple printf("%d",nombre[5]);


/* Syntaxe écriture

• La structure « for » se prête particulièrement bien au travail avec les tableaux.


#include <stdio.h>
#define taille 5
main( )
{ int i, t[taille]; 1 /*lit les 5 entiers élément par élément*/
Exemple for(i=0;i<taille;i++)
scanf ("%d",&t[i]); 1 2 /*affiche les 5 entiers élément par élément*/
for(i=0;i<taille;i++)
printf ("%d\n",t[i]); } 2

Dr. -Ing Mouna Medhioub 8


Chapitre 5 Les tableaux
Les tableaux à une dimension

« Affectation »
• L'affectation de valeurs aux éléments d'un tableau se fait également individuellement (comme
pour la lecture et l'affichage).

Identificateur [Indice] = Valeur;


/* Syntaxe d’affectation

Exemple Exemple
#include <stdio.h>
#define taille 5 1 #include <stdio.h> 0
main() 1 #define taille 5 1
{ int i, T[taille]; 2 main() 2
T[0] = T[1] = T[3] = 1; 1 { int i, t[taille]; 3
T[4] = 4; 4 for (i = 0;i < taille;i++) 4
T[2] = T[1]*2; t[i] = i;
for (i = 0;i <5; i++) for (i = 0;i < 5; i++)
printf("%d\n", T[i]); } printf("%d\n", t[i]); }

Dr. -Ing Mouna Medhioub 9


Chapitre 5 Les tableaux
Les tableaux à une dimension

• L'affectation d'un tableau B à un autre • Lors de la lecture ou de l'affichage d'un


tableau A se fait élément par élément. tableau, le compilateur C n'empêche pas un
dépassement des limites (la taille) du tableau
• Une affectation "brutale" de B à A (A=B)
→ Une vérification par le programmeur est
n'est pas possible.
alors importante.
Exemple Exemple
#include <stdio.h> 1 0
#include <stdio.h>
main() 2 1
#define taille 5
{ int A[3]={1,2,3}, B[3]; 3 2
main()
B[0] = A[2]; 3
{ int i, t[taille];
B[1] = A[1]; 4
for (i = 0;i < taille;i++)
B[2] = A[0]; -858993460
t[i] = i;
printf("%d\n", B[2]);
for (i = 0;i < 6; i++)
printf("%d\n", B[1]);
printf("%d\n", t[i]); }
printf("%d\n", B[0]); }

Dr. -Ing Mouna Medhioub 10


Chapitre 5 Les tableaux
Exercice

Exercice
Ecrire un programme qui permet de demander à l’utilisateur de saisir les notes pour le cours
« Langage C » pour 30 étudiant dans un tableau, puis le programme calcule la moyenne des notes.

#include <stdio.h>
#define Taille 30
main()
{ float T[Taille];
int i;
float som, moy;
for (i = 0;i < Taille; i++)
{printf("Donner la note num %d : \n", i + 1);
scanf("%f", &T[i]);}
for (i = 0, som = 0;i < Taille; i++)
som += T[i];
moy = som / Taille;
printf("La moyenne=%.2f\n", moy);
}

Dr. -Ing Mouna Medhioub 11


Chapitre 5 Les tableaux
Exercice

Exercice
Ecrire un programme qui #include <stdio.h>
permet de faire la somme // define MAX 20
des éléments impairs d’un main()
tableau de nombres entiers { int t[20], i, taille, somme = 0;
de taille N (N est entrée au do { printf("Entrer la taille du tableau: ");
clavier et le maximum N=20). scanf("%d", &taille);
} while (taille<=0 || taille > 20);
printf("Entrer les elements du tableau:\n");
for (i = 0;i < taille;i++) {
printf("t(%d)=",i+1); scanf("%d", &t[i]); }
printf("Les elements du tableau: \n");
for (i = 0;i < taille;i++) { printf("%4d", t[i]); }
printf("\n");
for (i = 0;i < taille;i++) {
if (t[i] % 2 == 1) { somme = somme + t[i]; } }
printf("Voici la somme des elements impairs du tableau: %d", somme);
}

Dr. -Ing Mouna Medhioub 12


Chapitre 5 Les tableaux
Les tableaux à deux dimensions

• En C, un tableau à deux dimensions est interprété comme un tableau de dimension L dont


chaque composante est un tableau de dimension C.
C

Tableau A L

Rapprochement avec les maths→ "A est un vecteur de L vecteurs de dimension C "

• L et C sont les dimensions du tableau:


✓ L : le nombre de lignes
✓ C : le nombre de colonnes.
• Un tableau à deux dimensions contient donc L×C composantes.

Dr. -Ing Mouna Medhioub 13


Chapitre 5 Les tableaux
Les tableaux à deux dimensions

« Déclaration »
✓ Identificateur : est le nom du tableau.
Type Identificateur [ligne][colonne] ; ✓ ligne : nombre de ligne
/*Tableaux à 2 dimensions ✓ colonne : nombre de colonne

• « ligne » et « colonne » sont des valeurs numériques.


Exemple int A[3][2] ; /*tableau de L=3 et C=2 des entiers*/

« Mémorisation »
• Le nom d’un tableau à deux dimensions représente l’adresse du premier élément du tableau.
• Les composantes de ce tableau sont stockées ligne par ligne dans la mémoire.
int A[10][10]; /*tableau de 10×10 entiers */
Exemple float B[5][4]; /*tableau de 5×4 décimaux */
char C[2][25]; /*tableau de 2×25 caractères*/

Dr. -Ing Mouna Medhioub 14


Chapitre 5 Les tableaux
Les tableaux à deux dimensions

« Initialisation»
• Lors de la déclaration d’un tableau, on peut initialiser les composantes du tableau en
indiquant la liste des valeurs entre accolades.

Type Identificateur[ligne][colonne] = {liste0,…,listem};


/* Initialiser du tableaux à 2 dimensions
Exemple
int M[3][2] = { {0,1},{2,3},{4,5} }; 1 /*Initialisation*/
1
int M[2][2] = { {0,1},{2,3},{4,5} }; 2 2 /* Erreur */

int M1[3][2] = { {},{2,3},{4,5} }; 3 3 /* Erreur */

int M2 = { {0,1},{2,3},{4,5} }; 4 4 /* Erreur */

int M3[3][5] = { {1,2,3,4,4}, 5 /*Initialisation*/


{11,12,13,15,16}, {21,22,23,24,25} }; 5

Dr. -Ing Mouna Medhioub 15


Chapitre 5 Les tableaux
Les tableaux à deux dimensions

« Accès aux éléments »


• Pour accéder à un élément du tableau, il suffit de donner le nom du tableau suivi de
l'indice du ligne entre crochets puis l’indice du colonne entre crochet aussi :
Identificateur[num_ligne][num_colonne]

→ Les indices commencent à 0 et se terminent à L-1 et C-1

Exemple A[2][1] ; /* le 2 éme élément de la 3 éme liste du tableau A*/

• A est un tableau de deux dimension alors :

Premier élément→ A[0][0] ………… A[0][C-1]


::
::
A[L-1][0] ………… A[L-1][C-1] ←dernier élément

Dr. -Ing Mouna Medhioub 16


Chapitre 5 Les tableaux
Les tableaux à deux dimensions

« Lecture et affichage »

scanf("%...",&Identificateur[num_ligne][num_colonne] ); Exemple scanf("%f", &tab[2][3]);


/* Syntaxe lecture

printf("%...",Identificateur[num_ligne][num_colonne] ); Exemple printf("%d", tab[1][2]);


/* Syntaxe écriture

#include < stdio.h >


int main()
{ int A[2][3], i, j;
for (i = 0;i < 2;i++) /* boucle sur les lignes*/
Exemple for (j = 0;j < 3;j++) /* boucle sur les colonnes */
scanf("%d", &A[i][j]);
for (i = 0;i < 2;i++) /* boucle sur les lignes*/
for (j = 0;j < 3;j++) /* boucle sur les colonnes */
printf("%d", A[i][j]); return 0; }

Dr. -Ing Mouna Medhioub 17


Chapitre 5 Les tableaux
Les tableaux à deux dimensions

« Affectation »

Identificateur[num_ligne][num_colonne] = Valeur; Exemple tab[0][0] = 5;


/* Syntaxe d’affectation

Exemple Exemple
#include <stdio.h> #include <stdio.h>
main() main()
{ int i,j ,t[2][2]; 0
0 { int i,j, t[2][2];
t[0][0]=0; 0
0 for (i = 0;i < 2;i++)
t[0][1] = 0; 0
0 for (j = 0;j < 2;j++)
t[1][0] = 0; 1
1 t[i][j]=i*j;
t[1][1] = 1; for (i = 0;i < 2;i++)
for (i = 0;i < 2;i++) for (j = 0;j < 2;j++)
for (j = 0;j < 2;j++) printf("%d\n", t[i][j]);
printf("%d\n", t[i][j]); return 0;
return 0; } }

Dr. -Ing Mouna Medhioub 18


Chapitre 5 Les tableaux
Exercice

Exercice
Ecrire un programme qui permet de demander à l’utilisateur de saisir les notes pour le cours « Langage C » et
les notes du « TP- Langage C » pour 30 étudiant dans un tableau, puis le programme calcule la moyenne de
chaque étudiant.
#include<stdio.h>
#define NumEtud 30
#define NumMat 2
int main()
{ float notes[NumEtud][NumMat];
float S, M; int i, j;
for (i = 0;i < NumEtud;i++)
{ for (j = 0;j < NumMat;j++)
{printf("Donner la note de l'étudiant num %d dans la matiere num %d = ", i + 1, j + 1);
scanf("%f", &notes[i][j]);
}}
for (i = 0;i < NumEtud;i++)
{S = 0;
for (j = 0;j < NumMat;j++) { S = S + notes[i][j]; }
M = S / NumMat;
printf("La moyennne de l'etudiant num %d est = %.2f\n", i+1, M); }
return 0; }

Dr. -Ing Mouna Medhioub 19


Chapitre 5 Les tableaux
Exercice

Exercice #include<stdio.h>
#define MAX 100
Ecrire un programme qui void main()
détermine si une matrice {int mat[MAX][MAX];
carrée des entiers de int N, i, j;
dimension N⨯N (N est int test = 1;
do { printf("Donner le nb de Ligne et de colonne = ");
entrée au clavier et le scanf(" %d", &N); } while (N <= 0 || N>100);
maximum N= 100) est for (i = 0;i < N;i++)
symétrique ou non. { for (j = 0;j < N;j++)
{ printf("Donner mat[%d][%d]: ", i, j); scanf("%d", &mat[i][j]); }}
for (i = 0;i < N;i++)
{ for (j = 0;j < N;j++)
{ printf("%d | ", mat[i][j]); } printf("\n"); }
i = 0;j = 0;
while ((test == 1) && (i < N))
{ while ((test == 1) && (j < N))
{ if (mat[i][j] == mat[j][i])j++;
else { test = 0; } }
i++; }
if (test == 1) printf("Symetrique"); else printf("NON Symetrique"); }

Dr. -Ing Mouna Medhioub 20

Vous aimerez peut-être aussi