100% ont trouvé ce document utile (1 vote)
1K vues6 pages

Exercices de Programmation en C sur Pointeurs

Ce document présente quatre exercices sur la programmation en C avec les pointeurs. Les exercices portent sur la manipulation de tableaux et de chaînes de caractères à l'aide de pointeurs, ainsi que sur la vérification si une chaîne est un palindrome.

Transféré par

O Z
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
100% ont trouvé ce document utile (1 vote)
1K vues6 pages

Exercices de Programmation en C sur Pointeurs

Ce document présente quatre exercices sur la programmation en C avec les pointeurs. Les exercices portent sur la manipulation de tableaux et de chaînes de caractères à l'aide de pointeurs, ainsi que sur la vérification si une chaîne est un palindrome.

Transféré par

O Z
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Programmation en C

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;
}

Complétez le tableau suivant pour chaque instruction du programme ci-dessus.

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:

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:

Exemples: PIERRE ==> n'est pas un palindrome


OTTO ==> est un palindrome
23432 ==> est un palindrome

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é */

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

A = (int*)malloc(N * sizeof(int));

3
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 = N-(P1-P2); // ou N = P2-A;

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

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

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

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


J=strlen(CH)-1;

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

5
}

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

#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 */

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


P2=CH-strlen(CH)-1;

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

Vous aimerez peut-être aussi