Universit´e Cadi Ayyad Ann´ee 2019−2020
Facult´e polydisciplinaire Langage C et Matlab
Safi SMC (S4)
S´ erie 5
Exercice 1
1◦) Ecrire une fonction de prototype void affichage() qui affiche deux entiers.
2◦) Ecrire une fonction de prototype void saisie() qui permet de saisir deux entiers.
3◦) Ecrire une fonction de prototype int traitement(int val1, int val2) qui permet de faire la somme de deux entiers.
Exercice 2
Un programme contient la d´eclaration suivante:
int tab[10]={-4,-3,-2,-1,0,2,1,3,4,5}; /*variable globale*/
1◦) Ecrire une fonction de prototype void affiche() qui affiche les ´el´ements du tableau, la mettre en oeuvre dans main().
2◦) Ecrire le programme qui calcule et affiche la moyenne des ´el´ements du tableau en utilisant une fonction de prototype void affiche() qui affiche les ´el´ements du tableau en utilisant une fonction de prototype float moyenne()etvoid affichage(float moy).
3◦) Ecrire une fonction de prototypefloat min()qui renvoie le minimum du tableau.
4◦) Ecrire une fonction de prototypefloat max()qui renvoie le maximu du tableau.
Exercice 3
Soit la fonction math´ematiquef d´efinie par
f(x) = (2x3+ 3)(x2−1)
√
3x2+ 1 .
1◦) ´Ecrire une fonction C qui retourne la valeur def(x) pour un point x pass´e en param`etre.
Une approximation de la d´eriv´eef0 de la fonctionf est donn´ee en chaque point x, pourhassez petit (proche de 0), par :
f0(x)' f(x+h)−f(x−h)
2h .
2◦) ´Ecrire une fonction C qui calcule une approximation de la d´eriv´eef0 de f en un pointxentr´e au clavier.
On passera la valeur deh en param`etre de la fonction.
3◦) La d´eriv´ee seconde def est la d´eriv´ee de la d´eriv´ee. ´Ecrire une fonction C qui calcule une approximation de la d´eriv´ee seconde f00de f en un point x entr´e au clavier. On passera la valeur de h en param`etre de la fonction.
4◦) ´Ecrire une fonction C qui d´etermine le signe de la d´eriv´ee seconde de f en fonction de x. On pourra faire un programme qui lit xau clavier et affiche le r´esultat.
5◦) ´Ecrire une fonction C qui donne le choix `a l’utilisateur d’afficher la valeur de la fonctionf, de sa d´eriv´ee premi`ere ou de sa d´eriv´ee seconde en un pointx lu au clavier.
Exercice 4
1◦) ´Ecrire une fonction qui prend en param`etre un tableau d’entiers, son nombre d’´el´ementsnet un entier m, et qui retourne 1 s’il y a un ´el´ement ´egal `a m dans le tableau, 0 sinon.
2◦) ´Ecrire une fonction qui prend en param`etre un tableau de taille N B M AX, son nombre d’´el´ements n < N B M AX, un entier i ≤ n, et un entier m. La fonction doit ins´erer l’´el´ement m en position i dans le tableau (sans supprimer d’´el´ement).
3◦) ´Ecrire une fonction r´ecursive pour calculer la somme :
un= 1 + 24+ 34+· · ·+n4. 4◦) La suite de Fibonacci est d´efinie par r´ecurrence par :
u0 = 0;u1 = 1
un=un−1+un−2 pour n≥2 Donner une fonction r´ecursive pour calculerun.
5◦) Les co´efficients binomiaux Cnk pourk≤n sont donn´es par la formule de Pascal:
Cn0 = 1; Cnn= 1 Cnk=Cn−1k−1+Cn−1k Proposer une fonction r´ecursive pour calculer lesCnk.
Correction
Rappel : Le corrig´ e n’a d’int´ erˆ et que si l’exercice a ´ et´ e cherch´ e.
Exercice 1
#include<stdio.h>
/* D´eclaration des variables globales */
int a, b, res;
/* D´eclaration des prototypes */
void saisie();
int traitement(int val1, int val2);
void affichage();
/* D´eclaration des fonctions */
void saisie() {
printf(”Donnez les valeurs de a et b”);
scanf(”%d %d”,&a,&b);
}
int traitement(int val1, int val2) {
int val3; /*D´eclaration de variable locale*/
printf(”\t\t Le traitement\n”);
val3=val1+val2;
return(val3); /*Renvoie la valeur de val3*/
}
void affichage() {
printf(”L’addition de a=%d et b=%d est ´egale `a %d\n”,a,b,res);
}
int main() /*Programme principal*/
{ saisie();
res=traitement(a,b);
affichage();
return 0;
}
Exercice 2
1◦)
#include<stdio.h>
int tab[10]={-4,-3,-2,-1,0,2,1,3,4,5}; /*variable globale*/
void affiche() {
int i;
printf(”Les ´el´ements du tableau : \n”);
for(i=1;i<10;i++) {
printf(”%d\n”, tab[i]);
}
int main() {
affiche();
return 0 }
2◦)3◦)4◦)
#include<stdio.h>
int tab[10]={-4,-3,-2,-1,0,2,1,3,4,5}; /*variable globale*/
float moyenne() {
int i;
float somme=0;
for(i=0;i<10;i++) somme=somme+tab[i]
reurn(somme/10);
}
float max() {
float maxi;
int i;
maxi=tab[0];
for(i=0;i<10;i++) if(tab[i]>maxi)
maxi=tab[i];
return(maxi);
}
float min() {
float mini;
int i;
mini=tab[0];
for(i=0;i<10;i++) if(tab[i]>mini)
mini=tab[i];
return(mini);
}
int main() {
printf(”Le maximum : %f\n”, max());
printf(”Le minimum : %f\n”, min());
affichage(moyenne());
return 0;
}
Exercice 3
1◦)
float f(float x) {
return ((2 * x * x * x + 3) * (x * x - 1)) / sqrt(3 * x * x + 1);
}
2◦)
float fPrime(float x, float h) {
return (f(x + h) - f(x - h)) / (2 * h);
}
3◦)
float fSeconde(float x, float h) {
return (fPrime(x + h, h) - fPrime(x - h, h)) / (2 * h);
}
4◦)
int signe(float x) {
float h, dSeconde;
printf(”Donnez le pas d’approximation h : ”);
scanf(”%f”, &h);
dSeconde = fSeconde(x, h);
if (dSeconde <0.0) return -1;
if (dSeconde == 0.0) return 0;
return 1;
}
5◦)
void choix() {
int c;
float x, h;
printf(”Voulez-vous...\n”);
printf(”1 la valeur de f\n”);
printf(”2 la valeur de f’\n”);
printf(”3 la valeur de f”\n”);
c = getchar();
printf(”x = ? ”);
scanf(”%f”, &x);
switch (c) {
case ’1’:
printf(”f(%f) = %f\n”, x, f(x));
break;
case ’2’:
printf(”h = ? ”);
scanf(”%f”, &h);
printf(”f’(%f) = %f\n”, x, fPrime(x, h));
break;
case ’3’:
printf(”h = ? ”);
scanf(”%f”, &h);
printf(”f”(%f) = %f\n”, x, fSeconde(x, h));
break;
default:
printf(”Choix inconnu...\n”);
} }
Exercice 4
1◦)
#define NB ELEM MAXI 100
int recherche(int t[NB ELEM MAXI], int taille, int m) {
int i;
for (i = 0; i <taille; i++) {
if (t[i] == m) return 1;
}
return 0;
}
2◦)
#define NB MAX 100
void insertion(int t[NB MAX], int n, int i, int m) {
int j = n;
while (j >i) {
t[j] = t[j - 1];
j−−;
}
t[i] = m;
}
3◦)
int Somme(int n) {
if (n<= 0) return 0;
else
return (n * n * n * n + Somme(n - 1));
}
4◦)
int Fibonacci(int n) {
if (n == 0) return 0;
else if (n == 1) return 1;
else
return (Fibonacci(n - 1) + Fibonacci(n - 2));
}
5◦)
int Coeffbinom(int k, int n) {
if (k == 0|| k == n) return 1;
else
return Coeffbinom(k - 1, n - 1) + Coeffbinom(k, n - 1);
}