1. Institut MultiHexa Errachidia Privé
AIT EL MOUDEN Zakariyaa
mouden.zakariyaa@outlook.com
TD – Langage C
EXERCICE 1
Soit n et m deux variables de type entier, on souhaite transformer la boucle :
Répéter
{instructions}
Jusqu’à (m=0 OU n < 0) En une boucle
TantQue (condition)
{instructions}
finTantQue
A. Ecrire la (condition) de la boucle TantQue pour qu’elle s’arrête sur les mêmes critères que la
boucle répéter.
B. Quelle est la différence entre les deux traitements ?
C. Traduire la boucle TantQue en langage C.
EXERCICE 2
Quelles sont les écritures affichées après l’exécution de ce programme :
int x = 44, y = 45, z = 0 ;
++x = --y ; z = --x>y ? y:x ;
y = x==z++ || x--<z;
printf("x=%dty=%dtz=%d",x,y,z) ;
EXERCICE 3
Soit le programme suivant avec son affichage :
#include <stdio.h>
/* instruction manquante */
int main(){
short int i ;
int f=1 ;
for(i=1 ;i<=18 ;i++){
f*=i ;
printf("…%d…=%d",i,f);}
system("pause");
/* instruction manquante */
}
...1...=1
...2...=2
...3...=6
...4...=24
...5...=120
...6...=720
...7...=5040
...8...=40320
...9...=362880
...10...=3628800
...11...=39916800
...12...=479001600
...13...=1932053504
...14...=1278945280
...15...=2004310016
...16...=2004189184
...17...=-288522240
...18...=-898433024
A. Compléter le programme en ajoutant les deux instructions manquantes.
B. Quelle est l’utilité de l’instruction system("pause") ?
C. Dire ce que fait le programme.
D. Modifier la fonction printf pour que l’affichage soir plus explicite.
E. Pourquoi certains résultats (deux dernières lignes) sont négatifs ?
F. Modifier la partie déclarative du programme ainsi que l’affichage pour éviter ce problème.
2. Institut MultiHexa Errachidia Privé
AIT EL MOUDEN Zakariyaa
mouden.zakariyaa@outlook.com
EXERCICE 4
Ecrire un programme qui permet de lire un nombre entier et de vérifier s’il est parfait.
N.B : Un nombre est dit parfait s’il est égal à la somme de ses diviseurs sauf lui.
Exemple : 6 = 1+2+3 est un nombre parfait.
EXERCICE 5
Soit le programme C suivant :
#include <stdio.h>
void main(){
int N,P,Q ;
scanf("%d%d",&N,&P) ;
Q = N++ > P && P++ >= 5 ;
printf("N=%dtP=%dtQ=%d",N,P,Q);
}
A. Quel est le résultat de l’affichage de ce programme pour N=6 et P=5 ?
B. Quel est le résultat de l’affichage de ce programme pour N=6 et P=6 ?
On remplace la ligne Q = N++ > P && P++ >= 5 par
Q = N++ > P && (P++ >= 5 || 1=1)
C. Existe-il une différence entre les deux expressions ?
D. Pour N=6 et P=5, Quelle est la valeur de Q si on enlève les parenthèses. Prouvez que la valeur
de Q reste la même quelque soit les valeurs de N et P.
EXERCICE 6
Donner les résultats des affichages de ce code en utilisant le tableau en bas.
int T[6] = {10,11,12,13,14,15};
printf("%d:%d:%dn",T-1,T,T+1);
printf("%d:%dn",*T,*(T+4));
printf("%d:%d",&T,&T[0]);
T
Valeurs 10 11 12 13 14 15
Adresse 2686712 2686716 2686720 2686724 2686728 2686732