Vous êtes sur la page 1sur 5

Université Sidi Mohamed Ben Abdellah Année universitaire : 2017 / 2018

Faculté des Sciences Dhar Mehraz Fès Filière : SMA


Semestre : 3

Informatique 3
Contrôle de fin de semestre avec corrigé (session normale) :
(Durée : 1h 30)

NB : Les documents ne sont pas autorisés

Questions de cours : (4pts)


1. Donner, avec exemple, la différence entre conversion implicite et explicite
2. Donner, avec exemple, la différence entre passage par valeur et passage par adresse.

Exercice 1 : (2pts)
Ecrire un programme qui affiche à l’écran la moyenne de 3 réels lus au clavier

Exercice 2 : (6pts)
Soit la déclaration des variables suivantes :
int A, B, *P, *Q.
Le tableau suivant représente les cases mémoires des variables :
Variable A B P Q
Adresse Mémoire 7628 7624 7616 7608

Compléter le tableau suivant :


A B P Q &P &Q
Initialisation 5 -14 / / 7616 7608

P=&A

Q=&B

*P = ++(*Q) - (*Q)--

P-- ;
Q++ ;
(*P) -= (-14) ;

Prof. SABRI My Abdelouahed 1/5


Exercice 3 : (4pts)
On veut écrire un programme C pour résoudre l’équation du premier degré « ax+b=0 ».
Pour le faire il faut créer :
1) Une fonction de prototype void saisie(float *var) pour demander à l’utilisateur de
saisir les valeurs de a et b,
2) Une fonction de prototype void calcul(float aa, float bb) pour résoudre l’équation et
afficher les résultats,
3) La fonction main() : déclarer les variables a et b et faire appel aux fonctions « saisie »
et « calcul ».

Exercice 4 : (4pts)
Ecrire un code C qui permet de :
 Déclarer un tableau de caractères et l’initialiser avec : 't', 'f', 'a', 'g','e', 'y', 'r'
 Compter et afficher le nombre de caractères
 Trier et afficher les caractères du plus petit au plus grand (ordre alphabétique)
 Afficher les caractères dans l’ordre inverse
Exercice 5 : (2pts)
Ecrire un programme C qui demande à l’utilisateur de saisir une chaine caractères (de taille
maximale 255) et qui affiche ce texte en majuscule.
NB : Utiliser les fonctions prédéfinies pour la majuscule

Prof. SABRI My Abdelouahed 2/5


Université Sidi Mohamed Ben Abdellah Année universitaire : 2017 / 2018
Faculté des Sciences Dhar Mehraz Fès Filière : SMA
Semestre : 3

Corrigé du contrôle de fin de semestre (Session normale)

Questions de cours :

Voir le support de cours.

Exercice 1 :
#include "stdio.h"
int main()
{
float a, b ,c;
printf("entrer 3 nbres:\n");
scanf("%f%f%f", &a,&b,&c);
printf("la moyenne est %f", (a+b+c)/3);
return 0;
}

Exercice 2 :
Soit la déclaration des variables suivantes :
int A, B, *P, *Q.
Le tableau suivant représente les cases mémoires des variables :
Variable A B P Q
Adresse Mémoire 7628 7624 7616 7608
A B P Q &P &Q
Initialisation 5 -14 / / 7616 7608
P=&A 5 -14 7628 /
Q=&B 5 -14 7628 7624 7616 7608
*P = ++(*Q) - (*Q)-- 0 -14 7628 7624 7616 7608
P-- ;
Q++ ; 0 0 7624 7628 7616 7608
(*P) -= (-14) ;
P pointe sur la case mémoire dont l’adresse est 7628 (Case A) P—implique que P va
pointer sur la case juste à côté : 7624 (Case B)
De même pour Q qui ponté sur la case 7624 : Q++ implique que Q va pointer sur la case 7628
(*P) -= (-14)  (*P) = (*P) – (14)  P pointe sur B alors B=B+14= (-14) + 14 =0

Prof. SABRI My Abdelouahed 3/5


Exercice 3 :
#include "stdio.h"

void saisie(float *val)


{
scanf("%f",val); // pas d'adresse car c'est un pointeur
}
void calcul(float aa, float bb)
{
printf ("\nL'équation %.2fx+%.2f=0 ",aa, bb);
if (aa==0 && bb==0)
{
printf("admet comme solution l'ensemble R\n");
}
else if(aa==0)
{
printf("n'admet pas de solution dans R\n");
}
else
{
printf ("a pour solution %.2f\n",-bb/aa);
}
}
int main()
{
float a,b;
printf("Résolution de l'équation du premier degré ax+b=0\n");
saisie(&a);
printf("ENTRER b: \n");
saisie(&b);
calcul(a,b);
return 0;
}

Prof. SABRI My Abdelouahed 4/5


Exercice 4 :
#include "stdio.h"
int main()
{
int j=0;
char txtBis[7]; char temp;
char txt[]={'t', 'f', 'a', 'g','e', 'y', 'r'};
for (int i=0; txt[i] !='\0'; i++)
j++;
printf("Le nombre d'élément est: %d\n", j);
for (int i=0; i<j; i++)
{
for (int k=i+1;k<j;k++)
if (txt[i] > txt[k])
{
// comparer les caractères est le même que comparer leurs codes ASCII
temp=txt[i];
txt[i]=txt[k];
txt[k]=temp;
}
}
for (int i=0; i<7; i++)
{
printf("%c\t", txt[i]);
}
printf("\n");
for (int i=0; i<7; i++)
{
printf("%c\t", txt[7-i-1]);
}
return 0;
}
Exercice 5 :
#include "stdio.h"
#include "ctype.h"
int main()
{
char txt[255];
printf("Entrer un texte:\t");
gets(txt);
for (int i=0; txt[i]!='\0'; i++)
{
txt[i]=toupper(txt[i]);
}
puts(txt);
return 0;
}

Prof. SABRI My Abdelouahed 5/5