Défi
Énoncé
Écrire la fonction void inverser(int *t, size_t n) qui inverse sur place le tableau pointé par t de longueur n. L'algorithme utilise deux indices i = 0 et j = n - 1 qui convergent vers le centre : à chaque étape on échange t[i] et t[j] à l'aide d'une variable temporaire, puis on incrémente i et décrémente j. La fonction est ensuite démontrée dans main sur un tableau de cinq entiers dont les valeurs avant et après inversion sont affichées.
Contraintes
- Compilé avec
gcc -Wall -Wextra -std=c99 -o inv inv.c. - Aucun tableau auxiliaire ni appel à
malloc: l'inversion se fait en place. - La fonction doit traiter le cas
n == 0oun == 1sans comportement indéfini. - Utiliser
size_tpour les indices afin d'éviter les avertissements de comparaison signée/non signée. - Seule
<stdio.h>est nécessaire (plus<stddef.h>poursize_tsi besoin).
Exemple
Programme de démonstration :
int main(void) {
int t[] = {1, 2, 3, 4, 5};
size_t n = 5;
printf("Avant : ");
for (size_t i = 0; i < n; i++) printf("%d ", t[i]);
printf("\n");
inverser(t, n);
printf("Apres : ");
for (size_t i = 0; i < n; i++) printf("%d ", t[i]);
printf("\n");
return 0;
}
Sortie attendue :
Avant : 1 2 3 4 5
Apres : 5 4 3 2 1