Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Exo & Corrigés Les Pointeurs en Langage C

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 10

Les pointeurs en langage C

Exercice 1 :

Soit P un pointeur qui 'pointe' sur un tableau A:

int A[ ] = {12, 23, 34, 45, 56, 67, 78, 89, 90};
int *P;
P = A;
Quelles valeurs ou adresses fournissent ces expressions:

a) *P+2
b) *(P+2)
c) &P+1
d) &A[4]-3
e) A+3
f) &A[7]-P
g) P+(*P-10)
h) *(P+*(P+8)-A[7])

Solution :

Soit P un pointeur qui 'pointe' sur un tableau A:

int A[] = {12, 23, 34, 45, 56, 67, 78, 89, 90};
int *P;
P = A;

Quelles valeurs ou adresses fournissent ces expressions:

a) *P+2=>la valeur 14

b) *(P+2)=>la valeur 34

c) &P+1=> l'adresse du pointeur derrière le pointeur P(rarement utilisée)

d) &A[4]-3=>l'adresse de la composante A[1]

e) A+3=> l'adresse de la composante A[3]

f) &A[7]-P=>la valeur (indice) 7

g) P+(*P-10)=>l'adresse de la composante A[2]


h)*(P+*(P+8)-A[7])=>la valeur 23

Exercice 2 :

Ecrire un programme en langage C 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.

Solution :

#include <stdio.h>

main()

/* Déclarations */

int A[50]; /* tableau donné */

int N; /* dimension du tableau */

int X; /* valeur à éliminer */

int *P1, *P2; /* pointeurs d'aide */

/* Saisie des données */

printf("Dimension du tableau (max.50) : ");


scanf("%d", &N );

for (P1=A; P1<A+N; P1++)


{
printf("Elément %d : ", P1-A);

scanf("%d", P1);
}
printf("Introduire l'élément X à éliminer du tableau : ");
scanf("%d", &X );

/* Affichage du tableau */
for (P1=A; P1<A+N; P1++)
printf("%d ", *P1);
printf("\n");

/* Effacer toutes les occurrences de X et comprimer : */

/* Copier tous les éléments de P1 vers P2 et augmenter */

/* P2 pour tous les éléments différents de X. */


for (P1=P2=A; P1<A+N; P1++)
{
*P2 = *P1;
if (*P2 != X)
P2++;
}
/* Nouvelle dimension de A */
N = P2-A;

/* Edition du résultat */

for (P1=A; P1<A+N; P1++)

printf("%d ", *P1);

printf("\n");

return 0;

Exercice 3 :

Ecrire un programme en langage C qui range les éléments d'un tableau A du type intdans
l'ordre inverse. Le programme utilisera des pointeurs P1 et P2 et une variable numérique AIDE
pour la permutation des éléments.

Solution :

#include <stdio.h>
main()
{

/* Déclarations */
int A[50]; /* 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 );

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");

/* Inverser la tableau */

for (P1=A,P2=A+(N-1); P1<P2; P1++,P2--)

AIDE = *P1;

*P1 = *P2;

*P2 = AIDE;
}

/* Edition du résultat */

for (P1=A; P1<A+N; P1++)

printf("%d ", *P1);

printf("\n");

return 0;

Exercice 4 :
Ecrire un programme en langage C qui lit deux tableaux d'entiers A et B et leurs dimensions N et
M au clavier et qui ajoute les éléments de B à la fin de A. Utiliser deux pointeurs PA et PB pour
le transfer et afficher le tableau résultant A.

Solution :

#include <stdio.h>
main()
{

/* Déclarations */

int A[100], B[50]; /* tableaux */

int N, M; /* dimensions des tableaux */

int *PA,*PB; /* pointeurs d'aide */

/* Saisie des données */

printf("Dimension du tableau A (max.50) : ");

scanf("%d", &N );

for (PA=A; PA<A+N; PA++)

{
printf("Elément %d : ", PA-A);

scanf("%d", PA);

printf("Dimension du tableau B (max.50) : ");

scanf("%d", &M );

for (PB=B; PB<B+M; PB++)

printf("Elément %d : ", PB-B);

scanf("%d", PB);

/* Affichage des tableaux */

printf("Tableau donné A :\n");

for (PA=A; PA<A+N; PA++)

printf("%d ", *PA);

printf("\n");

printf("Tableau donné B :\n");

for (PB=B; PB<B+M; PB++)

printf("%d ", *PB);

printf("\n");

/* Copier B à la fin de A */

for (PA=A+N,PB=B ; PB<B+M ; PA++,PB++)

*PA = *PB;
/* Nouvelle dimension de A */

N += M;

/* Edition du résultat */

printf("Tableau résultat A :\n");

for (PA=A; PA<A+N; PA++)

printf("%d ", *PA);

printf("\n");

return 0;

Exercice 5 :

Ecrire de deux façons différentes, un programme en langage C qui vérifie sans utiliser une
fonction de <string>, si une chaîne CH introduite au clavier est un palindrome:

a)en utilisant uniquement le formalisme tableau


b)en utilisant des pointeurs au lieu des indices numériques
Rappel: Un palindrome est un mot qui reste le même qu'on le lise de gauche à droite ou de
droite à gauche:

Solution :

a)en utilisant uniquement le formalisme tableau

#include <stdio.h>
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 */

/* Saisie des données */

printf("Entrez une ligne de texte (max.100 caractères) :\n");

gets(CH);

/* Placer J sur la dernière lettre de la chaîne */

for(J=0; CH[J]; J++);

J--;

/* Contrôler si CH est un palindrome */

PALI=1;

for (I=0 ; PALI && I<J ; I++,J--)

if (CH[I] != CH[J])

PALI=0;

/* 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);

return 0;

b)en utilisant des pointeurs au lieu des indices numériques :

#include <stdio.h>
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 */

/* Saisie des données */

printf("Entrez une ligne de texte (max.100 caractères) :\n");

gets(CH);

/* Placer P2 sur la dernière lettre de la chaîne */

for (P2=CH; *P2; P2++);

P2--;

/* Contrôler si CH est un palindrome */

PALI=1;

for (P1=CH ; PALI && P1<P2 ; P1++,P2--)

if (*P1 != *P2) PALI=0;

/* 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);

return 0;
}
Exercice 6 :
Ecrire un programme en langage C qui lit une chaîne de caractères CH et détermine la longueur
de la chaîne à l'aide d'un pointeur P. Le programme n'utilisera pas de variables numériques.

Solution :

#include <stdio.h>
int main()
{
/* Déclarations */

char CH[101]; /* chaîne donnée */

char *P; /* pointeur d'aide */

/* Saisie des données */


printf("Entrez une ligne de texte (max.100 caractères) :\n");
gets(CH);

/* Placer P à la fin de la chaîne */


for (P=CH; *P; P++);

/* Affichage du résultat */

printf("La chaîne \"%s\" est formée de %d caractères.\n",CH, P-CH);

return 0;

Vous aimerez peut-être aussi