Vous êtes sur la page 1sur 5

TP3 Partie 2

Exercice 1 : Qu’affiche le programme suivant ? rep= 5 3


Programme
int n=5 ;//variable globale
main()
{
void fct (int p) ;
int n=3 ;//variable locale!= le premier n=5 globale
fct(n) ;//lors l’appel la valeur copier est n=3
}
void fct(int p)//cette fonction reçoit la valeur 3
{
printf("%d %d", n, p) ;//Tq cette fonction n’a pas un
//variable locale n, donc on
affiche la valeur du variable
globale n=5 et la valeur réçu p=3
}

Exercice 2: Programme
a b c P1 P2 void main()
{
10 15 20 &a &c int a = 10;
*p1=(*p2)+1; 21 15 20 &a &c int b = 15;
int c = 20;
p1=p2; 21 15 20 &c &c
int *p1, *p2;
p2=&b 21 15 20 &c &b p1=&a;
p2=&c;
*p1-=*p2(*p1=*p1-*p2) 21 15 5 &c &b
*p1=(*p2)+1;
++*p2; 21 16 5 p1=p2;
a=*p2*(*p1); 80 16 5 &c &b
p2=&b;
*p1-=*p2;
p1=&a 80 16 5 &a &b ++*p2;
*p2=*p1/=*p2; 5 5 5 &a &b a=*p2**p1;
p1=&a;
(*p1=*p1/*p2
*p2=*p1/=*p2;
*p2=*p1) }
Exercice 3: Soit p un pointeur qui pointe sur un tableau T:
int T[9] = {12, 2, 34, 4, 15, 23, 57, 8, 13};
int *p;
p = T;//p prend l’adresse du premier element

Quelles valeurs ou adresses fournissent ces expressions:


a) *p+2 <=>(*p)+2 <=> t[0]+2 =14
b) *(p+2)<=>t+2 <=> t[2] =34
c) &T[4] =l’adresse du 5iem element = p+4
d) &T[4]-3 =l’adresse du 2iem element = p+1
e) p+4 =l’adresse du 5iem element = &T[4]
f) p+(*p-10) =l’adresse du 1er element + (T[0]-10=12-10=2)=>p+2=&t[2]
g) *(p+*(p+8)-T[7]) : *(l’adresse du 1er element+ t[8]-t[7])=*(p+5)=t[5]=23
Exo 5

#include <stdio.h>
main()
{
/* Prototypes des fonctions appelées */
int NCHIFFRES(int N);
/* Variables locales */
int A;
/* Traitements */
printf("Introduire un nombre entier : ");
scanf("%d", &A);
printf("Le nombre %d a %d chiffres.\n",A ,NCHIFFRES(A));
return (0);
}
//definition_fonction: NCHIFFRES
int NCHIFFRES(int N)
{ int I;
/* Conversion du signe si N est négatif */
if (N<0)
N *= -1;
/* Compter les chiffres */
for (I=1; N>10; I++)
N /= 10;
return I;
}
Exercice 6:
Ecrire un sous-programme qui permet de permuter deux valeurs réelles saisi au clavier.
#include<stdio.h>
//int n = 10;
void permuter(int*x,int*y);
int main()
{
int a,b;
printf(" donnez 2 entier ");
scanf("%d %d",&a,&b);
printf(" a=%d b=%d", a, b);
permuter(&a,&b);
printf(" a=%d b=%d", a, b);//somme(a,b,c));
}
void permuter(int *x,int *y)
{
int z;
z=*x;
*x=*y;
*y=z;
}
Exo7

#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 );
printf("remplissage du tableau avec %d : element\n", N);
for (P1=A; P1<A+N; P1++)
scanf("%d", P1);
/* Affichage du tableau à l'aide des pointeurs*/
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--)//P1 pointe sur le
premier elem et P2 sur le dernier elm
{ AIDE = *P1; // permutation du contenu des 2 cases en
utilisant un 3iem variable
*P1 = *P2;
*P2 = AIDE; }
/* Affichage en utilisant les pointeurs */
for (P1=A; P1<A+N; P1++)
printf("%d ", *P1);
printf("\n");
return (0);}