Vous êtes sur la page 1sur 5

UNIVERSITE ASSANE SECK DE ZIGUINCHOR REPUBLIQUE DU SENEGAL

DEPARTEMENT D’INFORMATIQUE Un Peuple – Un But – Une Foi

Solution du Contrôle Continu du premier semestre


Année Académique : 2015 - 2016
Épreuve : Langage C
Filière : Physique – Chimie
Niveau : 2
Durée : 2 heures
Enseignant : Guy MBATCHOU,

Exercice 1 (08 pts) : Programme non modulaire


1- Exécuter les instructions ci-dessous et donner les valeurs des variables (2pts)
Instructions Valeur de a Valeur de b Valeur de c Valeur de d
int a = 1, b = 2; 1 2 ? ?
int c = ++a + b++; 2 3 4 ?
int d = 4; 2 3 4 4
d+= c-- + --c; 2 3 2 10
a-= 2*b++ - (a*c++) + (d++/a++); -4 4 3 11

2- Ecrire un programme qui calcule la somme 1 + 1/22 + 1/33 + … + 1/NN en utilisant la boucle
do … while (3pts)
#include<stdio.h>
#include<math.h>

int main(){
unsigned int N,i;
float S;

printf("Calcul de la somme 1 + 1/2^2 + 1/3^3 + … + 1/N^N \n\n");


do{
printf("Entrer la valeur de N strictement supérieur à 0 : ");
scanf("%i", &N);
}while(N<1);

S = 0;
i = 1;
do{
S += 1/pow(i,i);
i++;
}while(i<=N);
printf("Somme = %f \n", S);
return 0;
}
Page 1 sur 5
3- Ecrire un programme qui calcule le produit de deux entiers naturels par addition successive
sans utiliser l’opérateur de la multiplication (3pts)
#include<stdio.h>

int main(){
unsigned int A, B, P, i;

printf("Produit de deux entiers naturels par addition successive \n\n");


printf("Entrer le premier nombre : ");
scanf("%i", &A);
printf("Entrer le second nombre : ");
scanf("%i", &B);
P = 0;
for(i=1; i<=B; i++){
P += A;
}
printf("%i x %i = %i \n", A, B, P);
return 0;
}

Exercice 2 (12 pts) : Programme modulaire


1- Ecrire un module qui prend en entrée quatre variables de type entier et les trie (classe) par
ordre décroissant (3pts)
void Permuter(int *m, int *n){
int temp = *m;
*m = *n;
*n = temp;
}

void Tri(int *a, int *b, int *c, int *d){


void Permuter(int *, int *);

if (*a < *b) Permuter(a,b);


if (*a < *c) Permuter(a,c);
if (*a < *d) Permuter(a,d);

if (*b < *c) Permuter(b,c);


if (*b < *d) Permuter(b,d);

if (*c < *d) Permuter(c,d);


}

Page 2 sur 5
2- Ecrire un module qui prend en entrée deux entiers et retourne le quotient entier et le reste de
leur division (3pts)
int Division(int dividende, int diviseur, int *reste){//La fonction retourne le quotient
//Avant d'appeler cette fonction, il faudra vérifier que le diviseur soit non nul
int quotient = dividende / diviseur;
*reste = dividende % diviseur;

return quotient;
}

3- Ecrire un module qui prend deux valeurs entières et retourne le signe de leur somme sans faire
l’addition. Utilisez la fonction fabs (valeur absolue) de la bibliothèque <math> (3pts)
char Signe_Somme(int a, int b){
if (a < 0){
if (b < 0) return '-';
else{//b >= 0
if (fabs(a) < fabs(b)) return '+';
else return '-';
}
}
else{//a >= 0
if (b < 0){
if (fabs(a) < fabs(b)) return '-';
else return '+';
}
else return '+'; //b >= 0
}
}

4- Ecrire la fonction main() qui permet de faire appel aux modules ci-dessus (3pts)
unsigned short int Menu(void){
unsigned short int choix;
do{
system("cls");

printf(" MENU\n\n");
printf("1- Tri \n");
printf("2- Division \n");
printf("3- Signe de la somme \n");
printf("\n");
printf("0- Quiter\n");
printf("\n Votre choix : ");

scanf("%i", &choix);
}while ((choix < 0) || (choix > 3));

return choix;
}

Page 3 sur 5
int main(){
//Déclaration des fonctions
unsigned short int Menu(void);
char Signe_Somme(int, int);
int Division(int, int, int *);
void Tri(int *, int *, int *, int *);

//Déclartaion des variables locales


unsigned short int choix;
int Nombre1, Nombre2, Nombre3, Nombre4;

do{
choix = Menu();
system("cls");

switch(choix){
case 0:{//Quitter
printf("\a Bye ! Bye ! \a\n");
break;
}

case 1:{//Tri
printf(" Tri décroissant de quatre entiers \n\n");
printf("Nombre 1 : ");
scanf("%d", &Nombre1);
printf("Nombre 2 : ");
scanf("%d", &Nombre2);
printf("Nombre 3 : ");
scanf("%d", &Nombre3);
printf("Nombre 4 : ");
scanf("%d", &Nombre4);

Tri(&Nombre1, &Nombre2, &Nombre3, &Nombre4);


system("cls");

printf("Après tri décroissant, voici les nombres : \n");


printf("Nombre 1 = %d \n", Nombre1);
printf("Nombre 2 = %d \n", Nombre2);
printf("Nombre 3 = %d \n", Nombre3);
printf("Nombre 4 = %d \n", Nombre4);
printf("\n\n");
break;
}

case 2:{//Quotient et reste de la division


printf(" Quotient et reste de la division de deux entiers\n\n");
printf("Dividende : ");
scanf("%d", &Nombre1);
printf("Diviseur : ");
scanf("%d", &Nombre2);
system("cls");
Page 4 sur 5
if (Nombre2 == 0) printf("Opération impossible car le diviseur est nul");
else{
Nombre3 = Division(Nombre1, Nombre2, &Nombre4);
printf("Quotient = %d \n", Nombre3);
printf("Reste = %d \n", Nombre4);
}
printf("\n\n");
break;
}

case 3:{//Signe de la somme de 2 entiers


printf(" Signe de la somme de deux entiers\n\n");

printf("Nombre 1 : ");
scanf("%d", &Nombre1);
printf("Nombre 2 : ");
scanf("%d", &Nombre2);
system("cls");

if (Signe_Somme(Nombre1, Nombre2) == '+') printf("La somme de %d et %d


est de signe positif", Nombre1, Nombre2);
else printf("La somme de %d et %d est de signe négatif", Nombre1, Nombre2);

printf("\n\n");
break;
}
}
system("pause");
}while (choix != 0);
return 0;
}

Page 5 sur 5

Vous aimerez peut-être aussi