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.
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

Exercices : Algorithmes et Langage C

  • 1.
    Institut MultiHexa ErrachidiaPrivé 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 ErrachidiaPrivé 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