Cours Programmation en Langage C: Chapitre 5 - Les Tableaux

Page 1 sur 5Lecteur de document UniversityLib

Cours Programmation en Langage C: Chapitre 5 - Les Tableaux

Computer Science · notes

Voir tous les documents en programmation

École Supérieure de Technologie

et d’Informatique

A.U. 2011/2012

Cours programmation en langage C

Chapitre 5: Les tableaux (5 pages)

Informatique Appliquée 1ère année

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.

Les tableaux à une dimension

Définition :Un tableau (uni-dimensionnel) est une variable structurée formée d'un nombre

entier n de variables simples de même type, qui sont appelées les composantes du tableau.

1. Déclaration et mémorisation

<TypeSimple> <NomTableau>[<Dimension>];

Exemple

La déclaration

int tab[5];

définit un tableau nommé tab de 5 éléments. Ces éléments sont de type entier .

On peut accéder à la première composante du tableau par tab[0], à la deuxième composante

par tab[1], . . . , à la dernière composante par tab[4].

Mémorisation

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

tableau. Les adresses des autres composantes sont calculées (automatiquement)

relativement à cette adresse.

#include<stdio.h>

void main()

{

int x=5;

printf(" la valeur de x est %d, son adresse est %p ", x, &x);

}

exécution

la valeur de x est 5, son adresse est 0012FF7C

#include<stdio.h>

void main()

{

int tab[5];

printf(" l'adresse de début est %p ", tab);

}

exécution

l'adresse de début est 0012FF6C

Exemple:

Mme Wiem Yaiche Elleuch les tableaux

Page 1

int tab[5]= {11, 12, 13,14,15} ;

tab[i] :

&tab[i] :

tab

11

Publicité

12

13

14

F800

F810

F820

F830

15

F840

indice i :

0 1 2 3 4

Dans cet exemple : tab[0] est 11 ; tab[1] est 12 ; etc

&tab[0] est F800 ; &tab[1] est F810 ; etc

  • l'accès au premier élément du tableau se fait par tab[0]
  • l'accès au dernier élément du tableau se fait par tab[N-1]

Si un tableau est formé de N composantes et si une composante a besoin de M octets en

mémoire, alors le tableau occupera de N*M octets.

Exemple

En supposant qu'une variable du type long occupe 4 octets (c.-à-d: sizeof(long)=4), pour le

tableau tab déclaré par: long tab[15]; => NM = 154 = 60 octets réservés en mémoire.

2. Initialisation et réservation automatique

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 tab[5] = {10, 20, 30, 40, 50};

char tab[5]={‘A’,’b’,’C’, ‘d’, ‘e’};

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

dimension du tableau. Si la liste ne contient pas assez de valeurs pour toutes les

composantes, les composantes restantes sont initialisées par zéro.

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 tab[] = {10, 20, 30, 40, 50};

==> réservation de 5*sizeof(int) octets (dans notre cas: 10 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)

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

#include<stdio.h>

void main()

{

int tab[5]={11,12,13,14,15};

printf(" l'adresse de début est %p \n", tab);

for(int i=0; i<5; i++)

printf(" l'element est %d, son adresse est %p \n", tab[i], &tab[i]);

}

Exécution :

Mme Wiem Yaiche Elleuch les tableaux

Publicité

Page 2

l'adresse de dÚbut est 0012FF6C

l'element est 11, son adresse est 0012FF6C

l'element est 12, son adresse est 0012FF70

l'element est 13, son adresse est 0012FF74

l'element est 14, son adresse est 0012FF78

l'element est 15, son adresse est 0012FF7C

Press any key to continue

#include <stdio.h>

void main()

{

// réservation de l’espace mémoire pour 20 entiers

int tab[20];

int i,n;

printf(« saisir le nombre d’éléments ») ;

scanf(« %d »,&n) ;

// n est le nombre d’entiers qu’on va saisir

for (i=0; i<n; i++)

scanf("%d", &tab[i]);

for (i=0; i<n; i++)

printf("%d ", tab[i]);

}

Remarques

  • Comme scanf a besoin des adresses des différentes composantes du tableau, il faut faire

précéder le terme tab[i] par l'opérateur adresse '&'.

  • La commande de lecture scanf doit être informée du type exact des données à lire.

(Ici: %d ou %i pour lire des valeurs du type int)

  • La deuxième condition dans la structure for n'est pas une condition d'arrêt, mais une

condition de répétition! Ainsi la commande d'affichage sera répétée aussi longtemps que i

est inférieur à n. La boucle sera donc bien exécutée pour les indices 0,1,2 .. n-1

  • La commande printf doit être informée du type exact des données à afficher. (Ici: %d

ou %i pour des valeurs du type int)

  • Pour être sûr que les valeurs sont bien séparées lors de l'affichage, il faut inclure au moins

un espace dans la chaîne de format. Autres possibilités:

printf("%d\t", tab[i]);

printf("%7d", tab[i]);

Exemple 1:

Ecrire un programme qui remplit et affiche un tableau d’entiers, ensuite calcule et affiche la

somme et la moyenne des éléments du tableau.

#include <stdio.h>

void main ( )

{

int tab[50];

int i,n,som=0;

float moyenne;

printf("saisir la taille du tableau ");

scanf("%d", &n);

//remplissage

Publicité

Mme Wiem Yaiche Elleuch les tableaux

Page 3

for (i=0; i<n; i++)

scanf("%d", &tab[i]);

//affichage

for (i=0; i<n; i++)

printf("l'element d'indice %d est %d \n",i, tab[i]);

for (i=0; i<n; i++)

som+=tab[i];

printf(" la somme est %d", som);

printf(" la moyenne est %5.2f", som/n);

}

Exemple 2 :

Ecrire un programme qui remplit et affiche un tableau d’entiers, ranger ensuite les éléments

du tableau dans l'ordre inverse sans utiliser de tableau d'aide. Afficher le tableau résultant.

#include <stdio.h>

void main ( )

{

int tab[50];

int i,j,aide,n;

printf("saisir la taille du tableau ");

scanf("%d", &n);

for (i=0; i<n; i++)

scanf("%d", &tab[i]);

for (i=0; i<n; i++)

printf(" %d \n", tab[i]);

for (i=0, j=n-1 ; i<j ; i++,j--)

{

aide = tab[i];

tab[i] = tab[j];

tab[j] = aide;

}

for (i=0; i<n; i++)

printf("%d \n", tab[i]);

}

Exemple 3 (extrait du DS de l’année 2009-2010):

Ecrire un programme qui remplit et affiche un tableau d’entiers. Copier ensuite toutes les

composantes positives ou nulles dans un deuxième tableau tpos et toutes les valeurs

strictement négatives dans un troisième tableau tneg. Afficher les tableaux tpos et tneg.

#include <stdio.h>

void main ( )

{

int tab[50], tpos[50], tneg[50], pos=0, neg=0;

int i,n;

Mme Wiem Yaiche Elleuch les tableaux

Page 4

printf("saisir la taille du tableau ");

scanf("%d", &n);

Publicité

for (i=0; i<n; i++)

scanf("%d", &tab[i]);

for (i=0; i<n; i++)

{

if (tab[i]>=0)

{

tpos[pos]=tab[i];

pos++;

tneg[neg]=tab[i];

neg++;

}

if (tab[i]<0)

{

}

}

printf(" Affichage du tableau positif \n");

for (i=0; i<pos; i++)

printf(" %d \n", tpos[i]);

printf(" Affichage du tableau négatif \n");

for (i=0; i<neg; i++)

printf(" %d \n", tneg[i]);

}

Exemple 4:

Ecrire un programme qui détermine la plus grande et la plus petite valeur dans un tableau

d'entiers tab. Afficher ensuite la valeur et la position du maximum et du minimum. Si le

tableau contient plusieurs maxima ou minima, le programme retiendra la position du

premier maximum ou minimum rencontré.

#include <stdio.h>

void main ( )

{

int tab[5];

int i,n, min=0, max=0;

printf("saisir la taille du tableau ");

scanf("%d", &n);

for (i=0; i<n; i++)

scanf("%d", &tab[i]);

for (i=0; i<n; i++)

{

if(tab[i]>tab[max]) max=i;

if(tab[i]<tab[min]) min=i;

}

printf (" le maximum est %d, son indice est %d \n le minimum est %d, son indice

est %d", tab[max], max, tab[min],min);

}

Mme Wiem Yaiche Elleuch les tableaux

Page 5