Exercice 2 (8 points)
On vous demande de simuler l’exécution des fonctions suivantes en utilisant les
valeurs données dans chaque cas:
a) z=9, z=17, en déduire ce que la fonctionA fait. (3points)
int fonctionA(int z){
int i,n; i=1; n=0; Z=9
Je rentre dans la boucle
while(i<=z/2 and n<2){ I=1 , z%i=0, n=1
if( z%i==0) { I=2
I=3, z%i=0, n=2 : je quitte la boucle
n=n+1; }
i=i+1; N= 2 return 1*
-----------
} Z=17
if (n==2) { I=1, z%i=0, n=1
I=2
return 1 ; } I=3
else { ..
I=8 n=1, je quitte la boucle
return 0; } N=1 return 0
}
La simulation fait 2 points
La fonctionA retourne 1 si Z est premier et 0 sinon (1point)
b) m=2, n=2 (2,5points)
int fact(int m, int n){
Fact(2,2) = fact(1,fact(2,1))
int f; Fact(2,1) = fact(1,2)=2x2=4
if (m==1){ Fact(1,fact(2,1)) = fact(1,4)=4*2=8
f=n*2; }
else{ La simulation fait 2,5 points
if (n==1){
f=fact(m-1,2); }
else {
f = fact(m-1,fact(m,m-1)); }
}
return f ;
}
c) r=2, n=4, en déduire ce que fait la fonction mpcist (2,5 points)
float mpcist (float r, int n){
Mpcist(2,4)= mpcist(2,3)*2
if (n=0){ =mpcist(2,2)*2*2
=mpcist(2,1)*2*2*2
return 1;} =mpcist(2,0)*2*2*2*2
=2*2*2*2
else{
La Simulation fait 1,5point
return mpcist(r,n-1)*r -
} La fonctions calcule r puissance n
Ce que fait la fonction (1 point)
}
Exercice 3 (8 points)
a) Écrire un programme qui utilise l’allocation de mémoire pour définir un tableau de
n entiers et le remplit avec une liste d’entiers relatifs. Le programme doit permettre à
l’utilisateur de saisir le nombre d’entiers à lire. Le programme affichera ensuite la
somme des entiers positifs et le nombre d’entiers nuls contenus dans le tableau.
(4 points)
#include<stdlib.h>
#include<stdio.h>
int main(){
int n, i nbp, nbnul;
int *tab
printf(‘’Veuillez entrer le nombre d’entiers à saisir\n’’);
scanf(“%d”,&n);
tab = (int *) malloc(n*sizeof(int));
//Arrêt du programme en d’échec d’allocation
if(tab ==NULL){
printf(“Echec Allocation mémoire\n”);
exit(0);
}
//Saisie des entiers par l’utilisateur
for(i=0 ; i<n ; i++){
printf(“entrer le %e entier”,i+1);
scanf(“%d ”, tab+i)
}
//et calcul des sommes positif et le nombre de zéros
nbp=0, nbnul=0;
for(i=0 ; i<n ; i++){
if (*(tab+i) >0){
nbp= nbp+1; }
else {
if(*(tab+i) ==0){
nbnul = nbnul+1 ; }
}
printf(“ La somme des positifs = %d\n La somme des zéros est %d\n”nbp,nbnul);
return 0;
}
b) On demande de construire un algorithme (en langage c ou en pseudo code ) qui lit
3 nombres réels représentant les cotés d’un triangle puis affiche le type du triangle.
Un triangle peut être de type équilatérale (3 côtés égaux), isocèle(2 côtés égaux),
isocèle rectangle, rectangle ou quelconque. (4 points)
Variable a, b, c : entier
afficher(‘’ veuillez entrez les 3 côtés du triangle
Lire(a,b,c)
si (a=b et b=c) alors
afficher’(‘’le triangle est équilatérale’’)
sinon {cas des triangles non équilaterale}
si (a=b ou a=c ou b=c ) alors
aficher(‘’le triangle isocèle)
si (b*b=a*a+c*c ou si a*a = b*b + c*c ou c*c =a*a+b*b) alors
afficher(‘’ et rectangle’’)
sinon {cas des triangles non isocèle}
si (b*b=a*a+c*c ou si a*a = b*b + c*c ou c*c =a*a+b*b) alors
afficher(‘’le triangle est rectangle’’)
sinon
afficher(‘’Le triangle est quelconque)