TP 5 Pointeurs
TP 5 Pointeurs
TP 5 Pointeurs
ENSIT
Série N°5 (TD/TP)
A.U 2019/2020
Les Pointeurs
Exercice N°1 :
main()
{
int A = 1;
int B = 2;
int C = 3;
int *P1, *P2;
P1=&A;
P2=&C;
*P1=(*P2)++;
P1=P2;
P2=&B;
*P1-=*P2;
++*P2;
*P1*=*P2;
A=++*P2**P1;
P1=&A;
*P2=*P1/=*P2;
}
A B C P1 P2
Init. 1 2 3 / /
P1=&A 1 2 3 &A /
P2=&C
*P1=(*P2)++
P1=P2
P2=&B
*P1-=*P2
++*P2
*P1*=*P2
A=++*P2**P1
P1=&A
*P2=*P1/=*P2
- .
1
Exercice N°2:
Ecrire un programme qui lit un entier X et un tableau A du type int au clavier et élimine
toutes les occurrences de X dans A en tassant les éléments restants. Le programme utilisera
les pointeurs P1 et P2 pour parcourir le tableau.
Exercice N°3:
Ecrire un programme qui range les éléments d'un tableau A du type int dans l'ordre inverse.
Le programme utilisera des pointeurs P1 et P2 et une variable numérique AIDE pour la
permutation des éléments.
Exercice N°4:
Ecrire un programme qui vérifie sans utiliser une fonction de <string>, si une chaîne CH introduite au
clavier est un palindrome:
Rappel: Un palindrome est un mot qui reste le même qu'on le lise de gauche à droite ou de droite à
gauche:
2
Programmation en C
ENSIT
Série N°5 (TD/TP)
A.U 2019/2020
Correction: Les Pointeurs
Exercice N°1:
A B C P1 P2
Init. 1 2 3 / /
P1=&A 1 2 3 &A /
P2=&C 1 2 3 &A &C
*P1=(*P2)++ 3 2 4 &A &C
P1=P2 3 2 4 &C &C
P2=&B 3 2 4 &C &B
*P1-=*P2 3 2 2 &C &B
++*P2 3 3 2 &C &B
*P1*=*P2 3 3 6 &C &B
A=++*P2**P1 24 4 6 &C &B
P1=&A 24 4 6 &A &B
*P2=*P1/=*P2 6 6 6 &A &B
Exercice N°2:
#include <stdio.h>
#include <stdlib.h>
int main()
{
/* Déclarations */
int *A; /* tableau donné */
A = (int*)malloc(N * sizeof(int));
3
for (P1=A; P1<A+N; P1++)
{
printf("Elément %d : ", P1-A);
scanf("%d", P1);
}
/* Affichage du tableau */
for (P1=A; P1<A+N; P1++)
printf("%d ", *P1);
printf("\n");
/* Edition du résultat */
for (P2=A; P2<A+N; P2++)
printf("%d ", *P2);
return 0;
Exercice N°3:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int *A; /* tableau donné */
int N; /* dimension du tableau */
int AIDE; /* pour la permutation */
int *P1, *P2; /* pointeurs d'aide */
/* Saisie des données */
printf("Dimension du tableau (max.50) : ");
scanf("%d", &N );
A = (int*)malloc(N * sizeof(int));
4
{
printf("Elément %d : ", P1-A);
scanf("%d", P1);
}
/* Affichage du tableau */
for (P1=A; P1<A+N; P1++)
printf("%d ", *P1);
printf("\n");
/* Inverser le tableau */
for (P1=A,P2=A+(N-1); P1<P2; P1++,P2--)
{
AIDE = *P1;
*P1 = *P2;
*P2 = AIDE;
}
/* Affichage du résultat */
for (P1=A; P1<A+N; P1++)
printf("%d ", *P1);
printf("\n");
return 0;
}
Exercice N°4:
#include <stdio.h>
void main()
{
/* Déclarations */
char CH[101]; /* chaîne donnée */
int I,J; /* indices courants */
int PALI; /* indicateur logique: */
/* vrai si CH est un palindrome */
/* Affichage du résultat */
if (PALI)
printf("La chaîne \"%s\" est un palindrome.\n", CH);
else
printf("La chaîne \"%s\" n'est pas un palindrome.\n", CH);
5
}
#include <stdio.h>
void main()
{
/* Déclarations */
char CH[101]; /* chaîne donnée */
char *P1,*P2; /* pointeurs d'aide */
int PALI; /* indicateur logique: */
/* vrai si CH est un palindrome */
/* Affichage du résultat */
if (PALI)
printf("La chaîne \"%s\" est un palindrome.\n", CH);
else
printf("La chaîne \"%s\" n'est pas un palindrome.\n", CH);