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

Les Variables & Les Pointeurs Les Structures de Contrôle Alternatives

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

Cours : L’algorithmique & Programmation C-1

TD : N2
Prof : A. Benmakhlouf
Site Web : www.cours-informatique.be.ma

Les Variables & Les Pointeurs ; Les structures de contrôle alternatives

1- Les variables et les pointeurs

Exercice 1
a. Écrire un programme en C permettant d’échanger les valeurs de deux variables A et B, et ce quel
que soit leur contenu préalable.
b. On dispose de trois variables A, B et C. Ecrivez un algorithme en C transférant à B la valeur de A, à C
la valeur de B et à A la valeur de C (toujours quels que soient les contenus préalables de ces
variables).

Exercice 2 : Afficher les valeurs de i, p et *p après l’exécution du programme C suivant : on suppose que
le stockage se fait dans la zone mémoire limitée par les octets [28FF00..28FF47].

main()
{int i = 3;
int *p;
p = &i;
printf("&i = %x\n",&i);
printf("i = %d\n",i);
printf("p = %x\n",p);
printf("*p = %d\n",*p);}

correction : i=3 p=28FF44 *p=3

Exercice 3 : Afficher les valeurs de i, j, p1 et p2 après l’exécution des deux programmes C suivants : on
suppose toujours que le stockage se fait dans la zone mémoire limitée par les octets [28FF00..28FF47].

main() main()
{ {
int i = 3, j = 6; int i = 3, j = 6;
int *p1, *p2; int *p1, *p2;
p1 = &i; p1 = &i;
p2 = &j; p2 = &j;
p1 = p2; *p1 = *p2;
printf("i=%d\n",i); printf("i=%d\n",i);
printf("j=%d\n",j); printf("j=%d\n",j);
printf("p1=%x\n",p1); printf("p1=%x\n",p1);
printf("p2=%x\n",p2); printf("p2=%x\n",p2);
} }

1
Cours : L’algorithmique & Programmation C-1
TD : N2
Prof : A. Benmakhlouf
Site Web : www.cours-informatique.be.ma

Correction : Correction :
i=3, j=6 i=6, j=6
p1=28FF40, p2=28FF40, p1=28FF44, p2=28FF40,
*p1=6, *p2=6 *p1=6, *p2=6

Exercice 4 : Afficher les valeurs des pointeurs p1 et p2 après l’exécution du programme C suivant :

main()
{
double i = 3;
double *p1, *p2;
p1 = &i;
p2 = p1 + 1;
printf("p1 = %x \t p2 = %x\n",p1,p2);
}
correction
P1=28FF40 p2=28FF48

Exercice 5 : Donner les valeurs imprimées en exécutant le programme ci-dessous. on suppose que
&i=60ff00:

#include <stdio.h>
main()
{
double i = 3, j=8;
double *p1, *p2;
p1 = &i;
p2 = p1 - 1;
*p2=2;
printf("p1 = %x \t p2 = %x\n",p1,p2);
printf("&i = %x \t &j = %x\n",&i,&j);
printf("i = %f \t j = %f\n",i,j);
}

Correction
&i=60ff00 &j=60fef8
p1=60ff00 p2=60fef8
i=3 j=2

Exercice 6
Donner les valeurs imprimées en exécutant les programmes suivants :

2
Cours : L’algorithmique & Programmation C-1
TD : N2
Prof : A. Benmakhlouf
Site Web : www.cours-informatique.be.ma

main() main()
{ {
int i = 3; int i = 3;
int *p=NULL; int *p=NULL;
printf("valeur de i = %d\n",i); printf("valeur de i = %d\n",i);
p=&i; p=(int*)malloc(sizeof(int));
*p = 5; *p = 5;
printf("valeur de i = %d\n",i);} printf("valeur de i = %d\n",i);}

correction : correction :

valeur de i avant : i=3 valeur de i avant : i=3


p pointe &i donc *p=i donc : p pointe une autre adresse donc *p # i donc :
valeur de i après : i=5 valeur de i après : i=3

Exercice 7 : A l’aide d’une arithmétique appliquée sur un pointeur « p ». Créer un programme


C permettant d'allouer un espace pour 4 objets entiers contigus en mémoire.

#include <stdio.h>
#include <stdlib.h>
main()
{
int *p;
p=(int*)malloc(4*sizeof(int));
*p=6;
*(p+1)=8;
*(p+2)=9;
*(p+3)=12;
free(p);
getchar();
}

Exercice 8 : Donner les valeurs imprimées après l’exécution des algorithmes suivants :
Pour le 2ème algorithme donner les valeurs de A, B et C sous forme d’expression de A0, B0 et C0
des entiers quelconques de A, B et C saisies à l’entrée.
#include <stdio.h> main(){
int main() { int A, B, C, *P1, *P2;
int a, b; printf("A=");

3
Cours : L’algorithmique & Programmation C-1
TD : N2
Prof : A. Benmakhlouf
Site Web : www.cours-informatique.be.ma

int *ptr1, *ptr2; scanf("%d", &A);


a = 5; printf("B=");
b = a; scanf("%d", &B);
ptr1 = &a; printf("C=");
ptr2 = ptr1; scanf("%d", &C);
b = (*ptr2)++; P1=&A;
printf("a = %d, b = %d, *ptr1 = %d, P2=&C;
*ptr2 = %d\n", a, b, *ptr1, *ptr2); *P1=(*P2)++;
} P1=P2;
P2=&B;
P1 et p2 pointent sur &a donc : *P1-=*P2; //*P1=*P1-*P2
*p1 = *p2 =a = 6 et b=5
++*P2;
*P1*=*P2;
A=++*P2**P1;
P1=&A;
*P2=*P1/=*P2;
printf("A= %d\n",A);
printf("B= %d\n",B);
printf("C= %d\n",C);}

A=B=C=(B0+1)(C0-B0+1)

correction
Action P1 P2 *p1 *p2 A B C
Lire A, B, C 0 0 1 2 3
P1=&A; &A 0 1 1 2 3
P2=&C; &A &C 1 3 1 2 3
*P1=*P2 &A &C 3 3 3 2 3
*p2++; &A &C 3 4 3 2 4
P1=P2; &C &C 4 4 3 2 4
P2=&B; &C &B 4 2 3 2 4
*P1-=*P2 &C &B 2 2 3 2 2
++*P2; &C &B 2 3 3 3 2
*P1*=*P2; &C &B 6 3 3 3 6
++*P2; &C &B 6 4 3 4 6
A=*P2**P1; &C &B 6 4 24 4 6
P1=&A &A &B 24 4 24 4 6
*P1/=*P2; &A &B 6 4 6 4 6
*P2=*P1; &A &B 6 6 6 6 6

Exercice 9 : donner le résultat affiché après l’exécution des programmes suivants :


4
Cours : L’algorithmique & Programmation C-1
TD : N2
Prof : A. Benmakhlouf
Site Web : www.cours-informatique.be.ma

#include <stdio.h> // P1 #include <stdio.h>// P2


main(){ main(){
char x='a'; char x='a', y;
int y=3; int z=3;
x+=++y; y=x++;
printf("%c %d", x, y);} x+=z;
printf("%c %c", x, y);}
#include <stdio.h>>// P3 #include <stdio.h>>// P4
main(){ main(){
int x=5, y=10, *k, *p1=&x, *p2=&y; int x=5, y=10, k, *p1=&x, *p2=&y;
k=p1; k=*p1;
p1=p2; *p1=*p2;
p2=k; *p2=k;
printf("%d, %d, %d, %d", x, y, *p1, *p2);} printf("%d,%d,%d,%d", x, y, *p1, *p2);}
#include <stdio.h>>// P5 #include <stdio.h>>// P6
main(){ main(){
int x=5, y=6, *p1, **p2; int x=5, y=6, *p1, **p2;
p1=&x; p1=&x;
p2=&p1; p2=&p1;
printf("%d, %d, %d, %d", x, y, *p1, *p2);} *p2=&y;
on a &x=2044 et &y=2040 *p1=8 ;
printf("%d, %d, %d, %d", x, y, *p1, *p2);}
on a &x=2044 et &y=2040
Correction :
P1 : e 4
P2 : e a
P3 : 5 10 10 5
P4 : 10 5 10 5
P5 : 5 6 5 2044
P6 : 5 8 8 2040

Exercice 9 : Ecrire un algorithme saisissant un temps en secondes que l’on convertira en jours, heures,
minutes et secondes.
#include <stdio.h>
#include <stdlib.h>

5
Cours : L’algorithmique & Programmation C-1
TD : N2
Prof : A. Benmakhlouf
Site Web : www.cours-informatique.be.ma

main()
{
int T, J, H, M, S;
printf("donner le temps en second");
scanf("%d", &T);
J=T/86400;
T=T%86400;
H=T/3600;
T=T%3600;
M=T/60;
S=T%60;
printf("le temps est: ");
printf("%dj %dh %dmin %ds\n", J, H, M, S);
system("pause");
}

2- Les structures de contrôle alternatives (les tests logiques)

Exercice 10 : Ecrire un algorithme qui demande trois caractères à l’utilisateur et l’informe ensuite s’ils
sont rangés ou non dans l’ordre alphabétique.

#include <stdio.h>
#include <conio.h>
main()
{
char x, y, z;
printf("Donner les caracteres :\n");
scanf("%c %c %c", &x, &y, &z)
printf("Les caracteres %c%c%c ",x, y, z);
if(x<=y && y<=z)
{
printf("sont ranges dans l'ordre alphabetique");
}
else
{
printf("ne sont pas ranges dans l'ordre alphabetique");
}
}

Exercice 11 : Ecrire un algorithme qui demande un nombre à l’utilisateur, et l’informe ensuite si ce


nombre est positif, négatif ou nul.

#include <stdio.h>
#include <math.h>
6
Cours : L’algorithmique & Programmation C-1
TD : N2
Prof : A. Benmakhlouf
Site Web : www.cours-informatique.be.ma

main()
{
int x;
printf("Donner le nombre :\n");
scanf("%d", &x);

if(x<0)
printf("le nombre est négatif");
else
{
if(x==0)
printf("le nombre est nul");
else
printf("le nombre est positif");
}
system("pause");
}

Exercice 12 : Ecrire un algorithme qui demande deux nombres à l’utilisateur et l’informe ensuite si le
produit est négatif ou positif (on inclut le traitement du cas où le produit peut être nul). Attention toutefois,
on ne doit pas calculer le produit !

Exercice 13 : Elaborer un algorithme pour résoudre l'équation ax2 + bx + c = 0 où a, b et c sont des réels à
fournir en entrée.

main()
{
float a, b,c;
float delta;
printf("resolution de l'eq ax²+bx+c=0\n");
printf("a=");
scanf("%f", &a);
printf("b=");
scanf("%f", &b);
printf("c=");
scanf("%f", &c);
if (a==0)
if (b==0)
if (c==0)
printf("la solution est : IR");
else
printf("résolution impossible");
else
printf("la solution est : %f", -c/b);
else
{
delta=b*b-4*a*c;
printf("DELTA=%f\n", delta);

7
Cours : L’algorithmique & Programmation C-1
TD : N2
Prof : A. Benmakhlouf
Site Web : www.cours-informatique.be.ma

if (delta>0)
{
printf("la solution est:%f\n", (-b-sqrt(delta))/2*a);
printf("la solution est:%f\n", (-b+sqrt(delta))/2*a);

}
else
{
if (delta == 0)
printf("la solution est:%f\n", -b/(2*a));
else
printf("la solution est:%.2f +i%.2f\n", (-b/2*a),sqrt(-delta)/2*a);
printf("la solution est:%.2f -i%.2f\n", (-b/2*a),sqrt(-delta)/2*a);
}}
system("pause");
}

Exercice 14
- Ecrire un algorithme qui demande deux valeurs et affiche le plus grand.
- Trouver le même résultat mais sans utilisé le « sinon »
- Ecrire un algorithme qui demande trois valeurs et affiche le plus grand.

Exercice 15
- Ecrire un algorithme qui permute les valeurs de deux variables (fourni à l’entrée) afin d’obtenir a > b.
- Ecrire un algorithme qui permute les valeurs de trois réels a, b et c (fourni à l’entrée) afin d’obtenir :
a >b > c (trier d’une manière décroissante).

main(){
int x1, x2, t;
printf("x1 = ");
scanf("%d", &x1);
printf("x2 = ");
scanf("%d", &x2);
if(x2 > x1)
{
t=x2;
x2=x1;
x1=t;
}
printf("x1 = %d\n", x1);
printf("x2 = %d\n", x2);

getch(); }

8
Cours : L’algorithmique & Programmation C-1
TD : N2
Prof : A. Benmakhlouf
Site Web : www.cours-informatique.be.ma

Exercice 16
- Ecrire un programme qui détermine si un entier saisi est pair ou impair.
- Ecrire un programme qui lit un nombre et qui détermine s’il appartient à l’intervalle [-2,7].
- Ecrire un programme qui calcule la valeur absolue d’un entier ensuite il calcule sa racine carrée.

Vous aimerez peut-être aussi