Les Variables & Les Pointeurs Les Structures de Contrôle Alternatives
Les Variables & Les Pointeurs Les Structures de Contrôle Alternatives
Les Variables & Les Pointeurs Les Structures de Contrôle Alternatives
TD : N2
Prof : A. Benmakhlouf
Site Web : www.cours-informatique.be.ma
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);}
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 :
#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
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 : 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");
}
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");
}
}
#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.