Sie sind auf Seite 1von 11

2 Anne SF

Srie dexercices sur les pointeurs et allocation


dynamique

Exercice 1 :
Soit a une variable lue dans la fonction Main . On veut raliser les oprations suivantes :
1. Modification de la valeur de a dans la fonction dentte VOID Modifier (int *p) avec
p = &a
2. Affichage de la valeur de a avant et aprs modification
Ecrire un programme C qui permet de raliser ces 2 oprations.

Exercice 2 :
Soient a et b 2 variables lues en entre dans la fonction principale Main .
Ecrire un programme qui ralise les fonctions suivantes :
1. Permutation des valeurs de a et b dans la fonction dentte suivante
VOID permut ( float *pa , float *pb)
2. Affichage dans la fonction MAIN de a et b avant et aprs permutation en sachant
que pa = &a et pb = &b

Exercice 3 :
Soient une matrice A ( k,c) et un vecteur V c lments . on veut dterminer un vecteur Y tel
que : Y = A V . Le programme crire, est soumis aux restrictions suivantes :
1. Une allocation dynamique doit tre utilise pour rserver de lespace aux
structures entires A , V et Y qui sont considres comme pointeurs .
2. Utilisations des notations adquates comme par exemple &V[i] = (V+i) ,
V[i] = *(V+i) , &A[i][j] = * ( A+i)+j
3. Libration des espaces allous la fin du programme
Ecrire 2 programmes diffrents tels que :
Le premier programme doit utiliser uniquement la fonction principale main
Le deuxime doit utiliser une fonction dentte suivante :
Int *valeur_du_vecteur_y ( int **A , int *V ) qui permet de calculer le
vecteur Y partir de A et V ( A et V sont lues dans la fonction Main , Y est affich
aussi dans le Main ) . K et c sont utilise et initialiss comme variable globale .

Exercice 4 :
Soit la structure denregistrement relative aux informations sur un etudiant :
Struct tudiant
{ int matricule ;
float moy_gen ;
};
On veut manipuler cette structure en utilisant un pointeur point_struct qui fait rfrence
ladresse du dbut de la structure .
Donner les instructions qui permettent :
1 La dclaration de point_struct
2 Lallocation dynamique relative la structure
3 La libration de lespace alloue
En dduire 3 programmes en C tels que :

1. le premier programme doit utiliser uniquement la fonction principale Main


pour la cration une structure n lments .
2. crire un deuxime programme pour linitialisation de la mme structure dans
une fonction dentte Struct tudiant *point_structure1( int n , ? ) qui doit
retourner toutes les valeurs de la structure pour laffichage uniquement des
matricules des tudiants dont la moyenne gnrale est >= 10 .
3. Le 3eme programme doit utiliser une deuxime structure de nom Struct
etudiant_admis contenant le matricule , la moyenne gnrale et la mention
des tudiants dont la note >= 10 ;
La mention est une donne caractere dfinie par :
1
2
3

Mention = trs bien si moy_gen > = 15


Mention = bien si 13 >= moy_gen <= 15
Mention = assez bien 10 <= moy_gen < 13

Dans cette partie , vous pouvez utiliser une seule fonction ( main) ou une fonction
supplmentaire struct etudiant_admis * point_structure2 ( ????)

Rq : les ? reprsentent ventuellement des paramtres ncessaires .

la solution
Exercice1 :

#include <stdio.h>
void modifier(int *p);
main()
{
int a=2;
printf("la valeur de a avent la modification = %d \n", a);
modifier(&a);
printf("la valeur de a aprs la modification = %d \n", a);
}
void modifier(int *p)
{
*p=5;
}

Exercice 2 :
#include <stdio.h>
void permut(int *pa, int *pb);
main()
{
int a,b;
printf("donner la valeur de a");
scanf("%d",&a);
printf("donner la valeur de b");
scanf("%d",&b);
printf("a = %d et b= %d avent la permutation \n", a,b);
permut(&a,&b);
printf("a = %d et b= %d aprs la permutation \n", a,b);
}
void permut(int *pa, int *pb)
{
int c;
c = *pa;
*pa = *pb;
*pb = c;
}

Exercice 3 :
1- sans sous programme :
#include <stdio.h>
#include <stdlib.h>
main()
{
int **a, *v, *y;
int i,j,k,c;
printf("donner le nombre de ligne de A");
scanf("%d",&k);
printf("donner le nombre de colone de A");
scanf("%d",&c);
a=(int**)malloc(k*sizeof(int*));
for(i=0;i<k;i++)
a[i]=(int*)malloc(c*sizeof(int));
v=(int*)malloc(c*sizeof(int));
y=(int*)calloc(k,sizeof(int)); // pour initialise y par zeros (0)
printf("donner les valeurs de la matrice A\n");
for(i=0;i<k;i++)
for(j=0;j<c;j++)
{
printf("A[%d][%d] = ", i,j);
scanf("%d", &a[i][j]); // ou scanf("%d", *(a+i) + j);
}
printf("donner les valeurs de vecteur V\n");
for(j=0;j<c;j++)
{
printf("V[%d] = ",j);
scanf("%d", &v[j]); // ou scanf("%d", v+i);
}
for(i=0;i<k;i++)
{
for(j=0;j<c;j++)
y[i] = y[i] + a[i][j]*v[j]; // ou y[i] += a[i][j]*v[j];
// ou *(y+i) +=
*(*(a+i)+j) * (*(v+j));
printf("Y[%d] = %d \n",i,y[i]); // ou printf("Y[%d] = %d \n",i,*(y+i));
}
free(v);
free(y);

for(i=0;i<k;i++)
free(a[i]); // ou free(*(a+i));
free(a);
}
2- avec un sous programme de type function
#include <stdio.h>
#include <stdlib.h>
int *valeur_du_vecteur_y(int **A ,int *V, int lin, int col);
main()
{
int **a, *v, *y;
int i,j,k,c;
printf("donner le nombre de ligne de A");
scanf("%d",&k);
printf("donner le nombre de colone de A");
scanf("%d",&c);
a=(int**)malloc(k*sizeof(int*));
for(i=0;i<k;i++)
a[i]=(int*)malloc(c*sizeof(int));
v=(int*)malloc(c*sizeof(int));
y=(int*)malloc(k*sizeof(int));
printf("donner les valeurs de la matrice A\n");
for(i=0;i<k;i++)
for(j=0;j<c;j++)
{
printf("A[%d][%d] = ", i,j);
scanf("%d", &a[i][j]); // ou scanf("%d", *(a+i) + j);
}
printf("donner les valeurs de vecteur V\n");
for(j=0;j<c;j++)
{
printf("V[%d] = ",j);
scanf("%d", &v[j]); // ou scanf("%d", v+i);
}
y=valeur_du_vecteur_y(a,v,k,c);
for(i=0;i<k;i++)
printf("Y[%d] = %d \n",i,y[i]); // ou printf("Y[%d] = %d \n",i,*(y+i));

free(v);

free(y);
for(i=0;i<k;i++)
free(a[i]); // ou free(*(a+i));
free(a);
}
int *valeur_du_vecteur_y(int **A ,int *V, int lin, int col)
{
int *Y,i,j;
Y=(int*)calloc(lin,sizeof(int)); // pour initialise Y par zeros (0)
for(i=0;i<lin;i++)
for(j=0;j<col;j++)
Y[i] = Y[i] + A[i][j]*V[j]; // ou y[i] += a[i][j]*v[j];
// ou *(y+i) += *(*(a+i)+j) * (*(v+j));
return(Y);
}

3- avec un sous programme de type void


#include <stdio.h>
#include <stdlib.h>
void valeur_du_vecteur_y(int **A ,int *V, int *Y, int lin, int col);
main()
{
int **a, *v, *y;
int i,j,k,c;
printf("donner le nombre de ligne de A");
scanf("%d",&k);
printf("donner le nombre de colone de A");
scanf("%d",&c);
a=(int**)malloc(k*sizeof(int*));
for(i=0;i<k;i++)
a[i]=(int*)malloc(c*sizeof(int));
v=(int*)malloc(c*sizeof(int));
y=(int*)calloc(k,sizeof(int));// pour initialise Y par zeros (0)
printf("donner les valeurs de la matrice A\n");
for(i=0;i<k;i++)
for(j=0;j<c;j++)
{
printf("A[%d][%d] = ", i,j);
scanf("%d", &a[i][j]); // ou scanf("%d", *(a+i) + j);
}
printf("donner les valeurs de vecteur V\n");
for(j=0;j<c;j++)

{
printf("V[%d] = ",j);
scanf("%d", &v[j]); // ou scanf("%d", v+i);
}
valeur_du_vecteur_y(a,v,y,k,c);
for(i=0;i<k;i++)
printf("Y[%d] = %d \n",i,y[i]); // ou printf("Y[%d] = %d \n",i,*(y+i));

free(v);
free(y);
for(i=0;i<k;i++)
free(a[i]); // ou free(*(a+i));
free(a);
}
void valeur_du_vecteur_y(int **A ,int *V, int *Y, int lin, int col)
{
int i,j;
for(i=0;i<lin;i++)
for(j=0;j<col;j++)
Y[i] = Y[i] + A[i][j]*V[j]; // ou y[i] += a[i][j]*v[j];
// ou *(y+i) += *(*(a+i)+j) * (*(v+j));
}
Exercice 4 :
programme 1 :
#include <stdio.h>
#include <stdlib.h>
struct etudiant
{ int matricule ;
float moy_gen ;
};
main()
{
struct etudiant *G10;
int n,i;
printf("donner le nombre des etudiants");
scanf("%d",&n);
G10=(struct etudiant *)malloc(n*sizeof(struct etudiant));

for(i=0;i<n;i++)
{
printf("donner le matricule de l'etudiant num %d ", i+1);
scanf("%d", &G10[i].matricule); // ou scanf("%d", (G10+i).matricule);
// ou scanf("%d", &(G10+i)->matricule);
printf("donner la moyen de l'etudiant num %d ", i+1);
scanf("%f", &G10[i].moy_gen); // ou scanf("%f", (G10+i).moy_gen);
// ou scanf("%f", &(G10+i)->moy_gen);
}
printf("\n\n");

for(i=0;i<n;i++)
{
printf("%d\t", G10[i].matricule); // ou printf("%d\t", (G10+i)->matricule);
// ou printf("%d\t", *(G10+i).matricule);
printf("%5.2f\n", G10[i].moy_gen);
// ou printf("%5.2f\n", (G10+i)->moy_gen);
// ou printf("%5.2f\n", *(G10+i).moy_gen);
}
free(G10) ;
}

programme 2
#include <stdio.h>
#include <stdlib.h>
struct etudiant
{ int matricule ;
float moy_gen ;
};
struct etudiant *point_structure1(int n);
main()
{
struct etudiant *G10;
int n,i;
printf("donner le nombre des etudiants");
scanf("%d",&n);
G10 = point_structure1(n);

printf("\n\n");
for(i=0;i<n;i++)
{
printf("%d\t", G10[i].matricule); // ou printf("%d\t", (G10+i)->matricule);
// ou printf("%d\t", *(G10+i).matricule);
printf("%5.2f\n", G10[i].moy_gen);
// ou printf("%5.2f\n", (G10+i)->moy_gen);
// ou printf("%5.2f\n", *(G10+i).moy_gen);
}
free(G10);
}

struct etudiant *point_structure1(int n)


{
int i;
struct etudiant *Group;
Group=(struct etudiant *)malloc(n*sizeof(struct etudiant));
for(i=0;i<n;i++)
{
printf("donner le matricule de l'etudiant num %d ", i+1);
scanf("%d", &Group[i].matricule);
// ou scanf("%d", (Group+i).matricule);
// ou scanf("%d", &(Group+i)->matricule);
printf("donner la moyen de l'etudiant num %d ", i+1);
scanf("%f", &Group[i].moy_gen);
// ou scanf("%f", (Group+i).moy_gen);
// ou scanf("%f", &(Group+i)->moy_gen);
}
return(Group);
}

programme 3 :

#include <stdio.h>
#include <stdlib.h>
struct etudiant
{ int matricule ;
float moy_gen ;

};
struct etudiant *point_structure1(int n);
main()
{
struct etudiant *G10;
int n,i;
printf("donner le nombre des etudiants");
scanf("%d",&n);
G10 = point_structure1(n);
printf("\n\n");

for(i=0;i<n;i++)
{
printf("%d\t", G10[i].matricule); // ou printf("%d\t", (G10+i)->matricule);
// ou printf("%d\t", *(G10+i).matricule);
printf("%5.2f\n", G10[i].moy_gen);
// ou printf("%5.2f\n", (G10+i)->moy_gen);
// ou printf("%5.2f\n", *(G10+i).moy_gen);
}
printf("\n\n");
printf("les etudients admis :\n");
for(i=0;i<n;i++) if(G10[i].moy_gen>=10)
{
printf("%d\t", G10[i].matricule);
// ou printf("%d\t", (etud_admis+i)->matricule);
// ou printf("%d\t", *(etud_admis+i).matricule);
printf("%5.2f\t", G10[i].moy_gen);
// ou printf("%5.2f\n", (etud_admis+i)->moy_gen);
// ou printf("%5.2f\n", *(etud_admis+i).moy_gen);
if(G10[i].moy_gen>=15)
printf("Mention = trs bien\n");
else
if(G10[i].moy_gen>=13)
printf("Mention = bien\n");
else
printf("Mention = assez bien\n");

}
free(G10);
}
struct etudiant *point_structure1(int n)
{
int i;
struct etudiant *Groupe;
Groupe=(struct etudiant *)malloc(n*sizeof(struct etudiant));
for(i=0;i<n;i++)
{
printf("donner le matricule de l'etudiant num %d ", i+1);
scanf("%d", &Groupe[i].matricule);
// ou scanf("%d", (Groupe+i).matricule);
// ou scanf("%d", &(Groupe+i)->matricule);
printf("donner la moyen de l'etudiant num %d ", i+1);
scanf("%f", &Groupe[i].moy_gen); // ou scanf("%f", (Groupe+i).moy_gen);
// ou scanf("%f", &(Groupe+i)->moy_gen);
}
return(Groupe);
}

Das könnte Ihnen auch gefallen