Exercice 1: Que vont afficher les programmes suivants : (répondre en face des questions) (12 pts)
main() (1pt)
{ char a=16; int m=6 ; 2 4
printf ("%d\t%d", a/m , a%m); }
-----------------------------------------------------------------------------------------------------------------------
main() (1pt)
{ int n = 12, i = 0;
for ( i =5 ; i< n ; i++) { } 12
printf ("%d\n" ,i);}
-----------------------------------------------------------------------------------------------------------------------
main() (1pt)
{ int n = 11, i=3 ; 4*9*
for ( ; i<n ; i+=4 )
printf ("%d * " , ++i ) ; }
-----------------------------------------------------------------------------------------------------------------------
main() (2pts)
{ float a=0, b=3; int c=8; 0.000
printf (" %.3f ", !a?a*=c:++b/a);}
-----------------------------------------------------------------------------------------------------------------------
#define T 5 (2pts)
main()
{ int n=12, i =0 , encore = T;
do {
if ( !( n % 5)) 12 13 14
encore = i ;
else
printf ("%d\t" , n++);
}while ( encore); }
-----------------------------------------------------------------------------------------------------------------------
void permute(double a, double b) (2pts)
{ double tmp;
tmp=a; a=b; b=tmp;}
x = 3.410 y = 7.220
main()
{ float x=3.41, y=7.22 ;
permute(x,y);
printf ("x = %.3f\ty = %.3f", x, y) ;}
-----------------------------------------------------------------------------------------------------------------------
main() (3pts)
{ int t[] = {-1, 2, -3, 4, -5, 6, -7};
int *p = t,*q;
p+=3 ; q=p+3; 4
*(t+5) = t[1]; -3 * 6
printf("%d\n%d * %d", *p, *q/2, q-t);}
Exercice 2: En langage C on peut représenter le type complexe par la structure suivante:
struct cpx { double reel; double imaginaire; };
Pour rappel : pour les nombres complexes x1= a1 + j*b1 et x2= a2 + j*b2
x1+x2= (a1 + a2) + j*(b1 + b2) et x1*x2 = (a1*a2 – b1*b2) + j*(a1*b2+a2*b1)
1. Ecrire une fonction appelée somme qui retourne la somme de deux nombres complexes passés en
argument. (2pts)
2. Ecrire une fonction appelée produit qui retourne le produit de deux nombres complexes passés en
argument. (2pts)
3. Ecrire la fonction main qui demande à l’utilisateur de saisir deux nombres complexes, les affiche
sous le format "a+jb" puis affiche un menu avec l’instruction switch …. case qui demande à l’utilisateur
des saisir 1 pour l’addition et 2 pour la multiplication et 9 pour sortir du menu et en fonction de son choix
calcule et affiche leur somme et leur produit en utilisant les fonctions définies en 1 et 2. (4pts)
UNIVERSITE MOHAMMED V - Rabat Contrôle final Juin 2019
Faculté des Sciences Langage C SMP4 - B
Code Nom Prénom
Exercice 1: Que vont afficher les programmes suivants : (répondre en face des questions) (12 pts)
main() (1pt)
{ char a=22; int m=7 ; 3 1
printf ("%d\t%d", a/m , a%m); }
-----------------------------------------------------------------------------------------------------------------------
main() (1pt)
{ int n = 5, i; 4
for ( i =12 ; i>= n ; i--) ;
printf ("%d\n" ,i);}
-----------------------------------------------------------------------------------------------------------------------
main() (1pt)
{ int n = 9, i=2 ; 2+6+
for ( ; i<n ; i*=2 )
printf ("%d + " , i++ ) ; }
-----------------------------------------------------------------------------------------------------------------------
main() (2pts)
{ float a=-10, b=3; int c=8; -0.40
printf (" %.2f ", !a?a*=c:++b/a);}
-----------------------------------------------------------------------------------------------------------------------
#define T 5 (2pts)
main()
{ int n=3, encore = T;
do {
if ( !(n % 4)) 6 9 12
encore = !T ;
else
printf ("%d\t" , n+=3);
}while ( encore); }
-----------------------------------------------------------------------------------------------------------------------
void swap(float x, float y) (2pts)
{ double tmp;
tmp=x; x=y; y=tmp;}
a = 1.310 b = 5.110
main()
{ float a=1.31, b=5.11 ;
swap(a , b);
printf ("a = %.3f\tb = %.3f", a, b) ;}
-----------------------------------------------------------------------------------------------------------------------
main() (3pts)
{ char A[] = {1, -2, 3, -4, 5, -6, 7};
char *p = A,*q; 3
p+=2 ; q=p+2; -2 x 4
*(A+5) = A[2];
printf("%d\n%d x %d", *p, -*q/2, q-A);}
Exercice 2: En langage C on peut représenter le type complexe par la structure suivante:
struct compx {float re; float imag; };
Pour rappel : pour les nombres complexes x1= a1 + j*b1 et x2= a2 + j*b2
x1+x2= (a1 + a2) + j*(b1 + b2) et x1*x2 = (a1*a2 – b1*b2) + j*(a1*b2+a2*b1)
1. Ecrire une fonction appelée somme qui retourne la somme de deux nombres complexes passés en
argument. (2pts)
Première méthode
#include<stdio.h>
struct cplx
{
float re;
float img;
};
Méthode simple:
#include <stdio.h>
#include <conio.h>
2. Ecrire une fonction appelée produit qui retourne le produit de deux nombres complexes passés en
argument. (2pts)
Première méthode
struct cplx produit(struct cplx a1, struct cplx a2)
{
struct cplx P;
P.re= a1.re*a2.re-a1.img*a2.img;
P.img=a1.re*a2.img+a1.img*a2.re;
return (P);
}
Méthode simple
void produit(float a1, float b1, float a2, float b2)
{
printf("\nLe produit des deux nombres complexes:\n");
printf("x1 = %5.2f + j.%5.2f\n",a1,b1);
printf("x2 = %5.2f + j.%5.2f\n",a2,b2);
printf(" --------------\n");
printf("X = %5.2f + j.%5.2f\n",a1*a2-b1*b2,a1*b2+a2*b1);
system("pause");
}
3. Ecrire la fonction main qui demande à l’utilisateur de saisir deux nombres complexes, les affiche
sous le format "a+ib" puis affiche un menu avec l’instruction switch …. case qui demande à l’utilisateur
des saisir 1 pour le produit et 2 pour la somme et 0 pour quitter le menu et en fonction de son choix
calcule et affiche leur somme et leur produit en utilisant les fonctions définies en 1 et 2. (4pts)
Première méthode
int menu()
{
int choix;
do
{
printf("\n\t\t--Menu--\n");
printf("\n\tPour la somme : \t1");
printf("\n\tPour le produit : \t2");
printf("\n\n\tPour quitter:\t\t9");
printf("\n\n\t\tVotre choix : ");
scanf("%d",&choix);
}while(choix<0||choix>9);
return (choix);
}
int main()
{
struct cplx x1,x2,S,P;
int choix;
do
{
//affichage menu
// system("cls");
choix=menu();
//traitement
switch (choix)
{
case 1: printf("\nSaisir a1 :");
scanf("%f",&x1.re);
printf("\nSaisir b1 :");
scanf("%f",&x1.img);
printf("\nSaisir a2 :");
scanf("%f",&x2.re);
printf("\nSaisir b2 :");
scanf("%f",&x2.img);
S=somme(x1,x2);
printf("\nS= %5.2f + j.%5.2f",S.re,S.img);
break;
case 2: printf("\nSaisir a1 :");
scanf("%f",&x1.re);
printf("\nSaisir b1 :");
scanf("%f",&x1.img);
printf("\nSaisir a2 :");
scanf("%f",&x2.re);
printf("\nSaisir b2 :");
scanf("%f",&x2.img);
P=produit(x1,x2);
printf("\nS= %5.2f + j.%5.2f",P.re,P.img);
break;
case 9: printf("\nAu revoir");
}
}while(choix!=9);
}
Méthode simple
int menu()
{
int choix;
do
{
printf("\n\t--Menu--\n");
printf("\n\tPour la somme : \t1");
printf("\n\tPour le produit : \t2");
printf("\n\n\tPour quitter:\t\t9");
printf("\n\n\t\tVotre choix : ");
scanf("%d",&choix);
}while(choix<0||choix>9);
return (choix);
}
main()
{
float a1,b1,a2,b2;
int choix;
do
{
//affichage menu
system("cls");
choix=menu();
//traitement
switch (choix)
{
case 1: printf("\nSaisir a1 :");
scanf("%f",&a1);
printf("\nSaisir b1 :");
scanf("%f",&b1);
printf("\nSaisir a2 :");
scanf("%f",&a2);
printf("\nSaisir b2 :");
scanf("%f",&b2);
somme(a1,b1,a2,b2);
break;
case 2: printf("\nSaisir a1 :");
scanf("%f",&a1);
printf("\nSaisir b1 :");
scanf("%f",&b1);
printf("\nSaisir a2 :");
scanf("%f",&a2);
printf("\nSaisir b2 :");
scanf("%f",&b2);
produit(a1,b1,a2,b2);
break;
case 9: printf("\nAu revoir");
}
}while(choix!=9);
}