Le tableau à une dimension (ou vecteur) est la structure de données la plus simple et la plus directe pour stocker une suite finie de valeurs de même nature.
Ce cours vous apprend à déclarer, initialiser, remplir, parcourir et transmettre des tableaux à des fonctions selon les règles de l'art du C.
1. Déclaration et Initialisation#
Déclaration d'un tableau#
Pour déclarer un tableau, on précise le type de ses éléments, son nom et le nombre de cases à allouer entre crochets :
#define CAPACITE 6
// Déclare un tableau de 6 entiers (valeurs initiales indéterminées)
int notes[CAPACITE];
[!TIP] Définissez toujours la taille de vos tableaux à l'aide d'une constante symbolique
#define TAILLE .... Si la dimension du tableau doit changer dans le futur, vous n'aurez qu'une seule ligne à modifier au début du fichier !
Méthodes d'initialisation à la déclaration#
// 1. Initialisation complète explicite
int nombres[5] = {12, 45, 78, 23, 56};
// 2. Initialisation à zéro de TOUT le tableau (TRÈS PRATIQUE)
int compteurs[100] = {0}; // Toutes les 100 cases sont mises à 0
// 3. Initialisation partielle
int coefficients[5] = {3, 2}; // Les cases 0 et 1 valent 3 et 2, les cases 2, 3, 4 valent 0
// 4. Déduction automatique de la taille par le compilateur
char voyelles[] = {'A', 'E', 'I', 'O', 'U', 'Y'}; // Taille = 6 cases
2. Parcours complet : Saisie et Affichage#
Le moyen naturel de parcourir un tableau est la boucle for, dont l'indice de boucle i varie exactement de 0 à TAILLE - 1 :
#include <stdio.h>
#define NB_NOTES 5
int main(void)
{
float notes[NB_NOTES];
// 1. Saisie des notes
printf("--- SAISIE DES %d NOTES ---\n", NB_NOTES);
for (int i = 0; i < NB_NOTES; i++)
{
printf("Note n°%d (indice [%d]) : ", i + 1, i);
scanf("%f", ¬es[i]); // On donne l'adresse de la case i avec ¬es[i]
}
// 2. Affichage des notes
printf("\n--- RELEVE DES NOTES ---\n");
for (int i = 0; i < NB_NOTES; i++)
{
printf("[%.2f] ", notes[i]);
}
printf("\n");
return 0;
}
3. Transmettre un tableau à une fonction#
En C, lorsqu'on passe un tableau en paramètre à une fonction, le tableau ne voyage pas sous forme de copie complète : il est automatiquement converti en pointeur vers sa première case.
Par conséquent, le compilateur ne connaît pas la taille du tableau à l'intérieur de la fonction. Il est donc impératif de transmettre systématiquement la taille du tableau en second argument !
#include <stdio.h>
// Le mot-clé 'const' garantit que la fonction ne modifiera pas le contenu du tableau
void AfficherTableau(const int tab[], int taille)
{
printf("[ ");
for (int i = 0; i < taille; i++)
{
printf("%d ", tab[i]);
}
printf("]\n");
}
4. Algorithmes fondamentaux sur les tableaux 1D#
Trois opérations reviennent continuellement en programmation :
1. Calcul de la moyenne arithmétique#
float CalculerMoyenne(const float tab[], int taille)
{
if (taille <= 0) return 0.0f;
float somme = 0.0f;
for (int i = 0; i < taille; i++)
{
somme += tab[i];
}
return somme / (float)taille;
}
2. Recherche du minimum, du maximum et de leurs positions#
void TrouverExtrema(const int tab[], int taille, int *min, int *max)
{
*min = tab[0];
*max = tab[0];
for (int i = 1; i < taille; i++)
{
if (tab[i] < *min) *min = tab[i];
if (tab[i] > *max) *max = tab[i];
}
}
3. Recherche linéaire d'un élément (Linear Search)#
int RechercherValeur(const int tab[], int taille, int cible)
{
for (int i = 0; i < taille; i++)
{
if (tab[i] == cible)
{
return i; // Renvoie l'indice où se trouve l'élément
}
}
return -1; // -1 indique que l'élément n'a pas été trouvé
}
5. Programme complet d'application#
#include <stdio.h>
#define CAPACITE 6
float CalculerMoyenne(const float tab[], int taille);
int CompterAdmis(const float tab[], int taille);
int main(void)
{
float evaluations[CAPACITE] = {14.5f, 8.0f, 17.25f, 11.0f, 9.5f, 16.0f};
printf("=========================================\n");
printf(" ANALYSE DU RELEVE DE NOTES \n");
printf("=========================================\n");
printf("Liste des notes : ");
for (int i = 0; i < CAPACITE; i++)
{
printf("%.2f ", evaluations[i]);
}
printf("\n-----------------------------------------\n");
float moy = CalculerMoyenne(evaluations, CAPACITE);
int admis = CompterAdmis(evaluations, CAPACITE);
printf("Moyenne du groupe : %.2f / 20\n", moy);
printf("Nombre d'admis : %d / %d (>= 10.0)\n", admis, CAPACITE);
printf("=========================================\n");
return 0;
}
float CalculerMoyenne(const float tab[], int taille)
{
float somme = 0.0f;
for (int i = 0; i < taille; i++)
{
somme += tab[i];
}
return somme / (float)taille;
}
int CompterAdmis(const float tab[], int taille)
{
int compteur = 0;
for (int i = 0; i < taille; i++)
{
if (tab[i] >= 10.0f)
{
compteur++;
}
}
return compteur;
}
Vous maîtrisez les vecteurs à une dimension. Passons au niveau supérieur avec les grilles bidimensionnelles : les matrices.
Commentaires