TP Tableaux et pointeurs
Exercice 1
Écrire une fonction void collapse\_array(int array[],int d) qui efface
toutes les occurrences du chiffre zéro dans le tableau array de dimension d et effectue
la compression des éléments qui restent. Les cases vides à la fin du tableau contiendront
la valeur zéro.
Exemple : collapse\_array([10,0,30,0], 4) \_ [10,30,0,0]
Exercice 2
Écrire une fonction void reverse\_array(int array[], int d) qui inverse
les éléments du tableau array de dimension d dans l'ordre inverse sans utiliser une
structure intermédiaire.
Exemple : reverse\_array([10,20,30,40], 4) \_ [40,30,20,10]
Exercice 3
Écrire une fonction void merge\_array(int arrayA[],int d1, int
arrayB[],int d2, int array\_res[]) qui prend comme arguments les
tableaux arrayA de dimension d1 et arrayB de dimension d2, triés par ordre
croissant, et remplit le tableau array\_res avec les éléments des tableaux arrayA et
arrayB. Le tableau résultat sera trié par ordre croissant.
Exercice 4
Écrire une fonction insert\_array(int array[], int d, int val) qui
prend en argument un tableau trié par ordre croissant array de dimension d, dont la
valeur de la dernière case n’est pas définie, et qui insère l'entier val de manière à ce que
le tableau demeure trié.
Allocation dynamique
Exercice 5
1. Écrire une fonction void print\_array(float \*array,int d) qui
affiche un tableau de réels de dimension d.
2. Écrire une fonction void print\_matrix(float \\matrix,int
l,int c) qui affiche une matrice d’entiers de dimension l×c.
Exercice 6
Publicité
1. Écrire une fonction int \*allocate\_array(int d,int n) qui alloue
dynamiquement un tableau d’entiers de dimension d. Les éléments du tableau
doivent être initialisés à la valeur n.
2. Écrire une fonction void free\_array(int \*array) qui libère un tableau
d’entiers.
Exercice 7
1. Écrire une fonction int \* allocate\_matrix(int l, int c, int
n) qui alloue dynamiquement une matrice de dimension l×c et qui initialise ses
éléments à la valeur n.
2. Écrire une fonction void free\_matrix(int \\matrix, int l) qui
libère la matrice matrix de l lignes.
Chaînes de caractères
Exercice 8
Écrire une fonction void exchange\_word(char \*array[], int i, int
j) qui permute un mot à la position i et un mot à la position j d’un tableau de mots.
Exercice 9
Écrire une fonction void exchange\_letter(char \*tab[], int i, int
j) qui permute la première lettre du mot à la position i avec celle du mot à la position j.
Exercice 10
Écrire une fonction char \search (char \m, char c) qui cherche l’existence
d’un caractère c dans un mot m et qui retourne un pointeur vers la première occurrence de
ce caractère. La fonction devra retourner NULL si le caractère recherché n’existe pas.
3
Exercice 11
On se donne la fonction MyGets (char \*chaine) suivante qui lit une chaîne de
caractères (espace compris):
void MyGets(char \*chaine)
{
char c;
while((c=getchar())!=’\n’)
Publicité
\*(chaine++) = c;
\*chaine = ’\0’;
}
1. Écrire une fonction int est\_lettre (char c) qui retourne 1 si c est
une lettre (majuscule ou minuscule) et 0 sinon.
2. Écrire une fonction int compte\_alphabet (char \*chaine) qui
calcule le nombre de lettres de l’alphabet (majuscules ou minuscules) que contient
la chaine.
3. Écrire une fonction que l’on appellera compte\_mot qui calcule le nombre de
mots (groupements de caractères séparés par un ou plusieurs espaces) que
contient une chaine de caractères.
4. Écrire un programme qui saisit une chaine de caractères, affiche le nombre de
caractères alphabétiques et le nombre de mots.
Structures
Exercice 12
Soit la structure suivante :
struct book {
char title[30];
int code;
float price;
};
On se propose de gérer une collection d’ouvrages en utilisant un tableau de livres.
1. Écrire une fonction struct book \*create\_collection(int n) qui
retourne une collection de n ouvrages en faisant appel à l’allocation dynamique
de mémoire pour la création de la collection. Les champs de type int doivent être
initialisés à 0 et les champs de type chaîne de caractères doivent être initialisés à
une chaîne vide.
4
2. Tester la fonction create\_collection(int n) dans un programme
principal.
Publicité
3. Écrire une fonction void print\_collection(struct book
\*collection, int n), qui affiche la collection de n livres.
4. Écrire une fonction void exchange\_book(struct book
\*collection, int i, int j) qui permute un ouvrage à la position i et
un ouvrage à la position j.
Listes chaînées
Exercice 13
Soit la structure de liste chaînée d’entiers suivante :
typedef struct list {
int n ;
struct list \*suivant ; } int\_list;
1. Écrire une fonction int\_list \*create\_list(void) qui permet la
création d’une liste vide et qui retourne un pointeur NULL pour représenter la
liste résultat.
2. Écrire la fonction int empty\_list(int\_list \*l) qui teste si une liste
donnée est vide.
3. Écrire une fonction void print\_list(int\_list \*l) qui permet
d’afficher les éléments d'une liste donnée.
4. Écrire une fonction int\_list \insert\_elem(int\_list \l, int
val) qui insère l’entier val en tête de liste.
5. Écrire une int\_list \delete\_elem(int\_list \l) qui supprime
l’élément se trouvant au début d’une liste l et retourne le reste de la liste. À noter
que la liste initiale doit contenir au moins un élément.
6. Écrire une fonction void free(int\_list \*l) qui libère l’espace mémoire
occupé par une liste l.
7. Écrire une fonction int\_list \delete\_val(int\_list \l,int val)
qui enlève la première occurrence de val dans la liste l.