Interaction entre boucles for et tableaux
L'utilisation des boucles for est la méthode standard pour maniupler les éléments d'un tableau. En utilisant l'itérateur de la boucle comme indice, on peut facilement automatiser la saisie de données.
int valeurs[10];
for (int idx = 0; idx < 10; idx++) {
printf("Entrez l'élément %d : ", idx);
scanf("%d", &valeurs[idx]);
}
Bonnes pratiques de formatage et constantes
Il est recommandé de définir la taille d'un tableau à l'aide de constantes symboliques (macros) pour faciliter la maintenance du code. De plus, pour l'affichage, l'opérateur modulo (%) permet de structurer la sortie, par exemple pour insérer un retour à la ligne tous les N éléments.
#define CAPACITE 20
// Affichage avec saut de ligne tous les 5 éléments
for (int i = 0; i < CAPACITE; i++) {
printf("%d ", liste[i]);
if ((i + 1) % 5 == 0) {
printf("\n");
}
}
Logique de filtrage et itérasion
La combinaison d'une boucle et d'une structure conditionnelle if permet de traiter sélectivement les données. Par exemple, pour afficher uniquement les nombres supérieurs à une moyenne calculée :
for (int j = 0; j < total; j++) {
if (donnees[j] > moyenne) {
printf("Valeur filtrée : %d\n", donnees[j]);
}
}
Algorithme de recherche séquentielle
La recherche séquentielle consiste à parcourir chaque élément pour vérifier s'il correspond à une valeur cible. L'utilisation d'une variable "drapeau" (flag) permet de confirmer si l'élément a été trouvé à la fin du processus.
int cible, trouve = 0;
printf("Valeur à rechercher : ");
scanf("%d", &cible);
for (int i = 0; i < n; i++) {
if (tableau[i] == cible) {
printf("Élément trouvé à l'indice %d\n", i);
trouve = 1;
break;
}
}
if (!trouve) {
printf("Valeur non présente dans le tableau.\n");
}
Le tri par sélection
Le tri par sélection organise un tableau en cherchant systématiquement l'élément minimum dans la partie non triée et en l'échangeant avec l'élément au début de cette section.
int min_idx, temporaire;
for (int i = 0; i < n - 1; i++) {
min_idx = i;
for (int j = i + 1; j < n; j++) {
if (arr[j] < arr[min_idx]) {
min_idx = j;
}
}
// Échange des valeurs
temporaire = arr[min_idx];
arr[min_idx] = arr[i];
arr[i] = temporaire;
}
Recherche par dichotomie (Binary Search)
Pour les tableaux déjà triés, la recherche binaire est beaucoup plus performante. Elle divise l'intervalle de recherche par deux à chaque itération.
int bas = 0, haut = n - 1, milieu;
while (bas <= haut) {
milieu = (bas + haut) / 2;
if (arr[milieu] == cible) {
printf("Trouvé !\n");
break;
} else if (arr[milieu] < cible) {
bas = milieu + 1;
} else {
haut = milieu - 1;
}
}
Tableaux à deux dimensions
Les tableaux multidimensionnels sont souvent utilisés pour représenter des matrices. On y accède par des boucles imbriquées (ligne et colonne).
int matrice[3][3];
// Remplissage de la matrice
for (int r = 0; r < 3; r++) {
for (int c = 0; c < 3; c++) {
matrice[r][c] = r * 3 + c + 1; // Génère une suite de 1 à 9
}
}
// Recherche du maximum dans la matrice
int max_val = matrice[0][0];
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
if (matrice[i][j] > max_val) {
max_val = matrice[i][j];
}
}
}
Manipulation de chaînes et symétrie
Un tableau de caractères peut être analysé pour vérifier des propriétés comme la symétrie (palindrome). On utilise généralement deux pointeurs ou indices partant des extrémités.
char mot[100];
int debut = 0, fin = longueur - 1;
int est_palindrome = 1;
while (debut < fin) {
if (mot[debut] != mot[fin]) {
est_palindrome = 0;
break;
}
debut++;
fin--;
}