Cours SE Le système Linux : La ligne de commande bash - IG IPSET
Seance 2 - Programmation en langage C
1. Programmation en langage C
Fahad R. Golra
Faculté des Sciences et Technologies
Université de Lorraine
Séance 2 – Tableaux, Tri
2. 2 25/09/2017
Tableaux
Programmation en langage C, Université de Lorraine
• Les tableaux constituent une
collection d’objets de même
type, implémentés
consécutivement en mémoire
et représentés par un même
identificateur.
• Ces objets peuvent être de
type très variés (char, int,
float, double etc.).
• Chaque élément du tableau
est une variable
int tab[5];
type nom[ taille du tableau ];
tab[0]
tab[1]
tab[2]
tab[3]
tab[4]
int
3. 3 25/09/2017
Tableaux
Programmation en langage C, Université de Lorraine
• La taille du tableau doit être
exprimé avec un chiffre pour
pouvoir compiler
• Pour accéder à un élément du
tableau il suffit d’utiliser un
indice qui peut être compris
entre 0 et MAX_ELEM-1
• Ainsi dans l’exemple du
tableau
• tab[3] est le quatrième
élément du tableau,
• tab[0] est le premier.
#include <stdio.h>
#define MAX_ELEM 5
int main(void)
{
int tab[MAX_ELEM];
-
-
}
tab[0]
tab[1]
tab[2]
tab[3]
tab[4]
int tab[MAX_ELEM];
4. • Il est possible d’affecter une valeur par affectation à un
élément quelconque du tableau
• Cette instruction permet d’affecter la valeur 3 au
troisième élément du tableau. Rappelons à ce sujet que
le premier élément du tableau à comme indice 0.
4 25/09/2017
Affectation à un élément du tableau
Programmation en langage C, Université de Lorraine
tab[2] = 3;
5. 5 25/09/2017
Initialisation des tableaux
Programmation en langage C, Université de Lorraine
• Un tableau peut être
initialisé à
• Déclaration
• Durant l'exécution du
programme
• Est équivalent à :
tab[0]=2, tab[1]=4, tab[2]=6,
tab[3]=8, tab[4]=10
#include <stdio.h>
int main(void)
{
//declaration
int tab[5] = { 2, 4, 6, 8, 10};
…
//durant l’exécution
for(i = 0; i < 5; i++)
tab[i] = (i+1)*2;
…
//durant l’exécution
for(i = 0; i < 5; i++)
scanf("%d", &tab[i]);
…
}
6. • La boucle for est l’instruction itérative la mieux adaptée pour
parcourir un tableau. Illustration, on souhaite sommer tous les
éléments d’un tableau :
• A la fin de l’exécution de l’instruction for la variable somme
contiendra la somme des nombres entiers de 1 à 10.
6 25/09/2017
Parcourir un tableau
Programmation en langage C, Université de Lorraine
#include <stdio.h>
int main(void)
{
int tab[10]= {1,2,3,4,5,6,7,8,9,10};
int somme=0;
for(i=0; i<10; i++) somme+=tab[i];
printf("somme : %d", somme);
}
7. 7 25/09/2017
Exemple 1 : le minimum d’un tableau
Programmation en langage C, Université de Lorraine
#include <stdio.h>
int main(void)
{
int i;
int tab[10]= {1,-2,3,4,0,-6,-7,8,9,10};
int min=tab[0];
for(i=0; i<10; i++)
if (min<tab[i]) min=tab[i];
printf("Le minimum du tableau est %d n", min);
return 0;
}
8. 8 25/09/2017
Exemple 2 : déterminer la présence
Programmation en langage C, Université de Lorraine
#include <stdio.h>
int main(void)
{
int tab[10]= {1,2,3,4,5,6,7,8,9,10};
int trouve=0;
int i, x;
printf("Enter un nombre : ");
scanf("%d", &x);
for(i=0; (!trouve && (i<10)); i++)
trouve=(tab[i] == x);
if (trouve) printf("x est présent dans le tableaun");
else printf("x n'est pas présent dans le tableaun");
return 0;
}
9. • On peut ne pas préciser la dimension du tableau lors de son
initialisation
• Le nombre d’éléments du tableau (si on ne veut pas les
compter) est :
9 25/09/2017
Initialisation des tableaux (suite)
Programmation en langage C, Université de Lorraine
#include <stdio.h>
int main(void)
{
//declaration
int tab[]= {1,0,9,7,6,4,8,9,10,5};
...
//nombre d'elements du tableau
N=sizeof(tab)/sizeof(tab[0]);
...
}
10. 10 25/09/2017
Remarques importantes
Programmation en langage C, Université de Lorraine
• Les tableaux sont
statiques : La taille d'un
tableau en mémoire
dépend à la fois de son
type et de sa dimension.
En langage C, cette taille
doit être connue au
moment de la
compilation.
• Débordement d'indice : Il
est interdit de lire ou
d'écrire dans un élément
du tableau qui se trouve
en dehors du tableau
#include <stdio.h>
int main(void)
{
int dimension;
scanf("%d", &dimension);
int tab[dimension]; // interdit
int tab[10];
tab[12] = 1; // débordement d'indice
...
}
11. 11 25/09/2017
Exemple 3 : le tri à bulles
Programmation en langage C, Université de Lorraine
#include <stdio.h>
int main (void)
{
int tab[10]= {10,1,6,-8,5,3,7,8,9};
int n ,i ,temp;
for (n=0; n<10; n++)
for (i=0; i<9; i++)
{
if (tab[i]>tab[i+1])
{
temp=tab[i];
tab[i]=tab[i+1];
tab[i+1]=temp;
}
}
for (i=0; i<10; i++)
printf("%d ", tab[i]);
return 0;
}
10 1 6 -8 5 3 7 8 9 0
1 10
6 10
-8 10
5 10
3 10
7 10
8 10
9 10
0 10
1 6 -8 5 3 7 8 9 0 10
13. 13 25/09/2017
Exemple 3 : le tri à bulles (cond. permutations)
Programmation en langage C, Université de Lorraine
int tab[10]= {10,1,6,-8,-4,5,3,7,8,9};
int i ,temp;
int permut;
do
{
permut=0;
for (i=0; i<9; i++)
{
if (tab[i]>tab[i+1])
{
temp=tab[i];
tab[i]=tab[i+1];
tab[i+1]=temp;
permut=1;
}
}
} while (permut);
for (i=0; i<10; i++)
printf("%2d ", tab[i]);
10 1 6 -8 -4 5 3 7 8 9
1 6 -8 -4 5 3 7 8 9 10
1 -8 -4 5 3 6 7 8 9 10
-8 -4 1 3 5 6 7 8 9 10
-8 -4 1 3 5 6 7 8 9 10
permute = 0
-8 -4 1 3 5 6 7 8 9 10
14. 14 25/09/2017
Tableaux multidimensionnels
Programmation en langage C, Université de Lorraine
• Tableau dont chaque case est
elle-même un tableau.
• tab peut être considéré
comme un tableau à trois
lignes et deux colonnes.
int tab[3][2];
type nom[ taille][taille];
…
tab[0][0]
tab[0][1]
tab[1][0]
tab[1][1]
tab[2][0]
tab[2][1]
…
tab[0]
tab[1]
tab[2]
tab[0][0] tab[0][1]
tab[1][0] tab[1][1]
tab[2][0] tab[2][1]
Colonne 0 Colonne 1
Ligne 0
Ligne 1
Ligne 2
15. 15 25/09/2017
Initialisation des tableaux multidimensionnels
Programmation en langage C, Université de Lorraine
• Un tableau multi-
dimensionnel peut être
initialisé à
• Déclaration
• Durant l'exécution du
programme
• Pour accéder à un
élément quelconque de
matrice il suffit d’écrire
par exemple :
tab[1][2]=0 ;
printf("%d", tab[1][2]);
#include <stdio.h>
int main(void)
{
…
//déclaration
int tab[3][2] = {{1,2},{3,4},{5,6}};
//durant l'éxecution
for (i=0; i<3; i++)
for (j=0; j<2; j++)
tab[i][j]=1;
…
}
16. 16 25/09/2017
Exemple 4 : l'affichage d’un tableau multidi.
Programmation en langage C, Université de Lorraine
#include <stdio.h>
int main (void)
{
int i,j;
int tab[3][3]= {{1,2,3},{4,5,6},{7,8,9}};
for (i=0; i<3; i++)
{
for (j=0; j<3; j++)
printf("%2d ", tab[i][j]);
printf("n");
}
return 0;
}
17. 17 25/09/2017
Exemple 5 : Produit de matrices
Programmation en langage C, Université de Lorraine
#include <stdio.h>
int main (void)
{
int i,j,k;
int A[3][3]= {{1,2,3},{4,5,6},{7,8,9}};
int B[3][3]= {{-1,2,-3},{-4,5,-6},{-7,8,-9}};
int C[3][3];
for (i=0; i<3; i++)
for (j=0; j<3; j++)
{
C[i][j]=0;
for (k=0; k<3; k++) C[i][j]+=A[i][k]*B[k][j];
}
return(0);
}