Vous êtes sur la page 1sur 4

Cours : Algorithmique et Programmation C TD N° 7 : Les pointeurs en C

TD N° 7 : Les pointeurs en C
Exercice 1
Donner la valeur des variables a, b et c à la suite de l’exécution de ces instructions :
float a=0.001;
float b=0.003;
float c, *pa, *pb;
pa= &a;
*pa *= 2;
pb= &b;
c= 3*( *pb - *pa);

Exercice 2
void main()
{
1- int A = 1;
2- int B = 2;
3- int C = 3;
4- int *P1, *P2;
5- P1=&A;
6- P2=&C;
7- *P1=(*P2)++;
8- P1=P2;
9- P2=&B;
10- *P1-=*P2;
11- ++*P2;
12- *P1*=*P2;
13- A=++*P2**P1;
14- P1=&A;
15- *P2=*P1/=*P2;
}
Exécuter manuellement le programme ci-dessus et compléter le tableau suivant :
A B C P1 P2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

1/4
Cours : Algorithmique et Programmation C TD N° 7 : Les pointeurs en C

Exercice 3
Qu’affiche les programme suivant ? Expliquez.

void main()
{
int i;
int a;
int tab[10];
int *b;
a=1;
for(i=0;i<10;i++)
tab[i]=a*i;
a++;
for(i=0;i<9;i++)
tab[i]=tab[i+1];
b=&(tab[1]);
*b=--a;
for(i=0;i<10;i++)
printf("%d\n",tab[i]);
}

Exercice 4
Écrire une fonction en langage C:
int pos_car(char T[],int n, char c, int *p_occ, int *d_occ), qui étant donnés un tableau T de n caractères
et un caractère c, détermine les valeurs p_occ et d_occ qui désignent respectivement les indices de la
première et de la dernière occurrence du caractère c dans le tableau T. la fonction retourne le nombre
d'occurence.
Exemple :
Soit le tableau T suivant contenant 10 caractères: b a a a b a c a a b
et soit le caractère c = ‘a’
alors p_occ=1 et d_occ=8 (c’est à dire que le caractère ‘a’ apparaît pour la première fois à la position 1
et pour la dernière fois à la position 8).

Exercice 5
On considère un tableau d’entiers tab de n éléments tel que tous les éléments ont les valeurs 0 ou 1. On
appelle coupe et on note tab[i..j] (avec 0<=i<n), une partie du tableau commençant à l’indice i et se
terminant à l’indice j. Une coupe est dite équilibrée si elle comprend autant de 0 que de 1.
Exemple :

0 1 1 0 1 0 1 1 1 0 1 0

La coupe tab[0..1] est équilibrée


La coupe tab[0..3] est équilibrée (deux 1 et deux 0)
La coupe tab[0..5] est équilibrée
La coupe tab[2..5] est équilibrée.

- Écrire une fonction en langage C


int est_equilibree(int tab[], int i, int j) , qui, étant donné un tableau tab, et deux entiers i et j,
retourne vrai si la coupe tab[i..j] est équilibrée et faux sinon.
- Écrire une fonction en langage C
void max_coupe(int tab[], int n, int *l, int *i, int *j) , qui, étant donnés un tableau tab de n
éléments, retourne la longueur l de la plus longue coupe équilibrée (celle qui a le plus grand
nombre d’éléments) ainsi que les indices i et j de début et de fin de cette plus longue coupe.

2/4
Cours : Algorithmique et Programmation C TD N° 7 : Les pointeurs en C

Exercice 6
On souhaite écrire une fonction qui permet de résoudre une équation du premier degré: ax+b=0. Voici
le prototype de la fonction:
int resoudre1(int a, int b, float *x);
la fonction retourne le nombre de solution trouvé (0: pas de solution, 1: une solution, -1: tout x est
solution). Dans le cas où l'équation a une solution, la fonction retourne la solution dans x.

Exercice 7
On souhaite écrire une fonction qui permet de résoudre une équation du second degré. Voici le
prototype de la fonction:
int resoudre2(int a, int b, int c, float *x1, float *x2);
la fonction retourne le nombre de solution trouvé (0: pas de solution, 1: une solution, 2: une solutions,
-1: tout x est solution). Dans le cas où l'équation a une solution, la fonction retourne la solution dans
x1. Dans le cas où l'équation a deux solutions, la fonction retourne les solutions dans x1 et x2.

Exercice 8
Écrire une fonction qui détermine si une matrice carrée est symétrique ou non. La fonction retourne 1
si oui et 0 si non.
Une matrice est symétrique si Mij = Mji pour 0<=i<n et 0<=j<n.
Voici le prototype de la fonction:
int estSymetrique (int M[MAX][MAX], int n);
avec MAX est une contstante.

Exercices d'entraînement
Exercice 9
Écrire une fonction qui permet de compacter les éléments du tableau tab. Cette opération consiste à
supprimer les valeurs nulles du tableau.

Exercice 10
Écrire une fonction qui détermine les indices de la plus grande et la plus petite valeur dans un tableau
d'entiers A.
int maxima (int tab[], int n, int *imax, int * imin);
la fonction retourne dans imax et imin les indices chercher.

Si le tableau contient plusieurs maxima ou minima, la fonction retiendra la position du premier


maximum ou minimum rencontré.

Écrire un programme qui afficher ensuite la valeur et la position du maximum et du minimum.

Exercice 11
Soit une matrice A à deux dimensions NxM. Un « point col » est un élément de la matrice qui
est minimum de sa ligne et maximum de sa colonne ou inversement. Ecrire une fonction qui
affiche les coordonnées de tous les points cols d’une matrice A. La fonction retourne le
nombre de point col trouver.
int chercherPointCol (int A[][], int N, int M);

3/4
Cours : Algorithmique et Programmation C TD N° 7 : Les pointeurs en C

Exercice 12
Écrire une fonction qui permet de rechercher dans un tableau d'entiers tab une valeur A.
int chercherTab (int tab[], int n, int A, int *pos);
la fonction retourne le nombre d'occurence si A existe dans le tableau et 0 si non. Dans pos on retourne
l'indice de la première apparition de la valeur dans le tableau et -1 si la valeur n'a pas été trouvée.

Exercice 13
Ecrire un programme qui permet de dessiner l’histogramme des éléments d’une matrice
d’entiers. Un histogramme est un diagramme qui détermine le nombre de fois où chaque
élément est présent dans la matrice.

Exemple :
Soit la matrice : a b c a
c c b a
a b a c
c a a a

l’histogramme obtenu est :


a : * * * * * * * *
b : * * *
c : * * * * *

Pour cela, on se propose de construire deux vecteurs (càd tableaux):


- un vecteur elements qui va contenir tous les éléments de la matrice une seule fois
chacun. (penser à écrire une fonction qui remplis le tableau elements)
- Un vecteur histo dans lequel chaque case d’indice i indique le nombre de fois où le
caractère elements[i] est présent dans la matrice. (penser à écrire une fonction qui
remplis le tableau histo à partir de la matrice et de tableau elements)

4/4