Académique Documents
Professionnel Documents
Culture Documents
Equipe pédagogique : Mr Riadh TURKI, Mme Ilhem FRIKHA, Mme Nahla FENDRI, Mme Najla CHAABENE
Auditoire :1ère Année Licence en IG (e-Business)
Exercice N°2
Ecrire un algorithme puis un programme qui affiche le carré des 20 premiers entiers :
CARRE de 1 est 1
CARRE de 2 est 4
.
.
CARRE de 20 est 400
Corrigé
Carré de 1 à 20 Boucle Pour Traitement
Données en Entrée : Ø Compteur =1 jusqu’à 20
Données en Sortie : 20 carrés Afficher Carré (Compteur)
On a 20 affichages Écrire dans la boucle.
#include<stdio.h> #include <stdio.h> Algorithme Ex2
void main() #include <math.h> Var i : Entier
{ void main()
int i; { Début
for (i=1; i<=20; i++) Double i; Pour i de 1 À 20 Faire
printf("CARRE de %d =%d\n",i,i*i); for (i=1; i<=20; i++) Écrire ("Carré de ",i," est ",i*i)
} printf("CARREde%.0f= %.0f\n",i, pow(i,2)); FinPour
} Fin
Exercice N°3
Écrire un algorithme puis le programme qui permet d'afficher tous les nombres pairs qui existent entre 1 et 10 dans
l'ordre croissant.
Corrigé
Existent entre 1 et 10 Boucle Pour Traitement
Données en Entrée : Ø Compteur =1 jusqu’à 10
Corrigé TD/TP N°4 2021/22 Page 1 sur 12
Données en Sortie : les nombres pairs existant entre 1 et Si Compteur divisible par 2 alors afficher la valeur du
10. compteur
On a plusieurs affichages Écrire dans la boucle.
1ère Méthode
#include<stdio.h> Algorithme Ex3
void main() Var i : Entier
{ Début
int i; Écrire ("Les nombres pairs entre 1 et 10 sont :")
printf("Les nombres pairs entre 1 et 10 sont :\n"); Pour i de 1 À 10 Faire
for (i=1; i<=10; i++) Si i Mod 2 =0
if(!(i%2)) // (i%2==0) Alors
printf("%d \t",i); Écrire (i)
printf("\n"); Finsi
} FinPour
Fin
ème
2 Méthode sans condition
#include<stdio.h> Algorithme Ex3
void main() Var i : Entier
{ int i; Début
printf("Les nombres pairs entre 1 et 10 sont :\n"); Écrire ("Les nombres pairs entre 1 et 10 sont :")
for(i=2; i<=10; i+=2) Pour i de 2 À 10 Pas 2 Faire
printf("%d\t",i); Écrire (i)
printf("\n"); FinPour
} Fin
Exercice N°4
Écrire un algorithme puis un programme qui permet d'afficher tous les nombres impairs entre 50 et 100 dans l'ordre
décroissant tout en calculant leur somme et l’afficher.
Corrigé
Compris entre 50 et 100 Boucle Pour Pour leur somme, On a un seul affichage Écrire
Données en Entrée : Ø en dehors de la boucle.
Données en Sortie : les nombres impairs existant entre 50 et Traitement :
100 dans l'ordre décroissant et leur Somme S0
Pour les nombres impairs, On a plusieurs affichages Compteur =100 jusqu’à 50 Pas =-1
Écrire dans la boucle. Si Compteur Mod 2 ǂ 0 alors afficher la valeur du
compteur et S S + Compteur
1ère Méthode
#include <stdio.h> Algorithme Ex4
void main() Var S, i : Entier
Début
{ int i,S=0;
Écrire ("Les nombres impairs de 100 à 50 sont :")
printf("Les nombres impairs entre 100 et 10 sont :\n"); S0
for (i=100; i>=50; i-- ) Pour i de 100 À 50 Pas -1 Faire
if (i%2) // (i%2 !=0) Si i Mod 2 ǂ0
Alors
{
Écrire (i)
printf("%d \t",i); S S+i
S+=i ; Finsi
} FinPour
printf("\nSomme des nbres impairs de 100 à 50 = %d\n", S); Écrire ("Somme des nbres impairs de 100 à 50 =", S)
} Fin
Exercice N°5
Écrire un algorithme puis un programme qui permet d’afficher les multiples de 5 qui sont compris entre 5 et 101
dans l’ordre croissant.
Utiliser les différentes boucles
Corrigé
Données en Entrée : Ø Traitement
Données en Sortie : les multiples de 5existants entre 5 et Compteur =5 jusqu’à 101
101 Si Compteur Mod 5 =0 alors afficher la valeur du
On a plusieurs affichages Écrire dans les boucles. compteur
Boucle POUR 1ère Méthode Boucle Répéter 1ère Méthode Boucle TANT QUE1ère Méthode
Algorithme Ex5 Algorithme Ex5 Algorithme Ex5
Var i : Entier Var i : Entier Var i : Entier
Début Début
Début Écrire("Multiples de 5 de 5 à 101") Écrire("Multiples de 5 de 5 à 101")
Écrire("Multiples de 5 de 5 à 101") i=5 i=5
POUR i de 5 À 101 Faire Répéter Tant Que i<=101 Faire
Si i Mod 5 = 0 Si i Mod 5 = 0 Si i Mod 5 = 0
Alors Alors Alors
Écrire (i) Écrire (i) Écrire (i)
Finsi Finsi Finsi
FinPour i i+1 i i+1
Fin Jusqu’à i >101 FinTantQue
Fin Fin
Programmes C correspondants
#include <stdio.h> #include <stdio.h> #include <stdio.h>
void main() void main() void main()
{ /* Boucle for */ {/* Boucle do ... while */ { /* Boucle while */
int i; int i=5; int i=5;
printf("Multiples de 5 entre 5 et 101 sont : \n"); printf("Multiples de 5 entre 5 et 101 sont : \n"); printf("Multiples de 5 entre 5 et 101 sont : \n");
for (i=5; i<=101; i++) do while(i<=101)
if (!(i%5))// (i%5==0) { if (!(i%5)) { if (!(i%5))
printf("%d\t",i); printf("%d\t",i); printf("%d\t",i);
printf("\n"); i++; i++;
} } while (i<=101); }
printf("\n"); printf("\n");}
}
Boucle POUR 2ème Méthode Boucle Répéter 2ème Méthode Boucle TANT QUE2ème Méthode
Algorithme Ex5 Algorithme Ex5 Algorithme Ex5
Var i : Entier Var i : Entier Var i : Entier
Début Début Début
Écrire("Multiples de 5 de 5 à 101") Écrire("Multiples de 5 de 5 à 101") Écrire("Multiples de 5 de 5 à 101")
POUR i de 5 À 101 Pas 5 Faire i=5 i=5
Exercice N°6
Écrire un algorithme puis un programme qui permet de saisir et d’afficher un nombre compris entre 1 et 10.
Corrigé
Un nombre compris entre 1 et 10 Le nombre On a un seul affichage Écrire en dehors de la boucle.
de saisies n’est pas connu d’avance, il peut être Traitement
1 ou plusieurs ≥1 Boucle Répéter Répéter
Données en Entrée : Nb : entier Saisir Nb
Données en Sortie : Nb Jusqu’à (1≤ Nb ≤ 10): condition d’arrêt
#include <stdio.h> Algorithme Ex6
void main() Var Nb : Entier
{ int N; Début
do Répéter
{ printf("Donner un Nombre entre 1 et 10 : "); Écrire ("Donner un nombre :")
scanf("%d",&N); Lire(Nb)
}while ((N<1)||(N>10)); Jusqu’à Nb≥1 ET Nb ≤10
printf("La valeur saisie est %d\n",N); Écrire (Nb)
} Fin
Exercice N°7
Écrire un algorithme puis un programme qui permet de saisir une lettre de l’alphabet (en majuscule ou en
minuscule) en trois tentatives, puis afficher la lettre lue ou le message suivant :
DESOLE ! Vous avez trois tentatives…
Corrigé
Saisir une lettre de l’alphabet Le nombre de Répéter Saisir L
saisies n’est pas connu d’avance, il peut être 1 ou Tentative Tentative +1
plusieurs ≥1 Boucle Répéter Jusqu’à (L ≥"A" ET L ≤ "Z") OU(L ≥"a" ET L ≤ "z") OU
Données en Entrée : L : caractère (Tentative=3)
Données en Sortie : L ou message d’erreur (L ≥"A" ET L ≤ "Z")
On a un seul affichage Écrire en dehors de la
boucle. Vrai OU
Traitement
Faux (L ≥"a" ET L ≤ "z")
Tentative 0
Afficher la lettre Désolé ! Vous avez 3 tentatives
#include <stdio.h> Algorithme Ex7
void main() Var T : Entier
Exercice N°8
Écrire un algorithme puis unprogrammequi permet de
1. saisir N (>0) valeurs entières ;
2. déterminer leur somme ;
3. déterminer leur produit;
4. déterminer leur moyenne arithmétique;
5. afficher leur somme, produit et moyenne.
Corrigé
Le nombre de saisie de N n’est pas connu d’avance Traitement
≥1 Boucle Répéter Répéter
La somme de N entiers Boucle Pour Saisir N
Le produit de N entiers Boucle Pour Jusqu’à N >0
Données en Entrée : N : le nombre des entiers Compteur de 1 à N
X : la valeur d’un entier à saisir Saisir X
Données en Sortie : S = somme des N entiers S S+X N fois
P =produit des N Entiers P P*X
M =S/N M S/N une seule fois
#include <stdio.h> Algorithme Ex8
void main() Var N,i, X, S : Entier
{ P : Entier Long
int i,N,X,S=0; M : Réel
long int P=1; Début
float M; Écrire ("Donner le nombre d’entiers ")
/* Saisie du nombre d'entiers >0 */ Répéter
do Lire(N)
{printf("Donner le nombre d'entiers "); Jusqu’à N>0
scanf("%d",&N); S0
} while (N<=0) P1
/* Saisie des N entiers et calcul de la somme et du Pour i de 1 à N Faire
produit */ Écrire ("Donner l’entier ", i)
for (i=1; i<=N; i++) Lire(X)
{ S S+X
printf("Entier No %d : ",i); P P*X
scanf("%d",&X); FinPour
S+=X; M S/N
P*=X; Écrire ("Somme =", S,"Produit=",P, "et Moyenne =",M)
} Fin
Corrigé TD/TP N°4 2021/22 Page 5 sur 12
// Calcul de la moyenne arithmétique
M=(float)S/N;
/* Affichage des Résultats */
printf("Somme de %d entiers =%d\t ",N,S);
printf("Produit = %ld\t et Moyenne =%f\n",P,M);
}
Exercice N°9
Écrire un algorithme puis un programme qui saisit un nombre pair N puis détermine combien de fois il est
divisiblepar 2.
Exemple : 8 est divisible 3 fois par 2 (2*2*2).
Corrigé
Un nombre N pair Boucle #include <stdio.h> Algorithme Ex 9
répéter void main() Var N, Nb : Entier
Nombre de fois multiple de 2 { Debut
≥1 Boucle répéter int N,nb=0; Écrire ("Donner un entier PAIR ")
Données en Entrée : do Répéter
N un entier pair { printf("donner un nombre pair : "); Lire(N)
Données en Sortie : scanf("%d",&N); Jusqu’à N Mod 2 =0
Nb : Nbre de fois multiple de }while (N%2); Nb 0
2 printf("%d est divisible par 2 ",N); Répéter
Traitement do Si N Mod 2 = 0
Répéter Saisir N { if (!(N%2)) nb++; Alors Nb Nb+1
Jusqu’à N est pair N/=2; Finsi
Répéter } while (N) N N DIV 2
Si N Mod 2 =0 printf("%d fois\n",nb); Jusqu’à N=0
Alors Nb Nb+1 Finsi } Écrire (N,"est divisible ", Nb, "fois par 2")
N N DIV 2 Fin
Jusqu’à N =0
Exercice N°10
Écrire un algorithme puis un programme qui permet de saisir un nombre N positif, de calculer et d’afficher son
factoriel donné par la formule suivante :
F = N *(N-1) * … *3*2*1
Sachant que pour N=0, F=1.
Corrigé
Un nombre N positif #include <stdio.h> Algorithme Ex10
Boucle répéter void main() Var N,i : Entier
Calcul de F Boucle Pour { F : Entier Long
Données en Entrée N : int i,N; Début
entier positif ou nul long int F=1; Répéter
Données en Sortie F : do Écrire ("Donner un entier POSITIF")
factorielle de N { Lire(N)
Traitement printf("Donner un entier positif : "); Jusqu’à N ≥ 0
Répéter Saisir N scanf("%d",&N); F 1
Jusqu’à N ≥ 0 } while (N<0); Si N≠0
Compteur de N à 1 if (N) Alors
F F* Compteur { for (i=N; i>=2;i--) Pour i de N à 2 Pas -1 Faire
F*=i; F F*i
} FinPour
Finsi
printf("%d ! = %ld\n",N,F); Écrire (N, "! =", F)
} Fin
Exercice N°13
Soit la suite numérique définit comme suit :
U0 = 1 U1 = 2 Un= Un-1+4*Un-2 Pour tout n>1
a> Écrire un algorithme puis un programme qui permet de lire n le terme de la suite, calculer et afficher la
valeur de Un
n=2 calculer Un
Exercice N°14
Écrire un algorithme puis un programme qui permet de saisir les moyennes des N étudiants d’une classe et de
calculer et d’afficher la moyenne générale de la classe ainsi que les pourcentages des étudiants ayant la moyenne et
ceux qui n’ont pas de moyenne. N : étant un entier positif à saisir.
Corrigé
En entrées : Traitement
N : Nombre des étudiants entier >0 Boucle répéter MC = Somme(Moy) (dans la boucle)
Moy : Moyenne d’un étudiant : Réel Boucle répéter puis MC= MC/ N (en dehors de la boucle)
dans la Boucle Pour PM = Nombre des étudiants ayant 10 ou plus
En Sortie : (dans la boucle) puis
MC : Moyenne de la classe : Réel PM=P M*100/ N (en dehors de la boucle)
PM : Pourcentage des étudiants ayant la moyenne PN = Nombre des étudiants n’ayant pas 10 (dans la
PN : Pourcentage des étudiants n’ayant pas la moyenne boucle) puis PN=PN*100/ N (en dehors de la boucle)
#include<stdio.h> Algorithme EX 14
void main() Var N, i : Entier
{ int N,i; Moy, MC, PM, PN : Réel
float Moy, MC, PM, PN; Début
do Répéter
{ printf("Donner le nombre des etudiants : "); Écrire("Donner le nombre des étudiants : ")
scanf("%d",&N); Lire (N)
}while (N<=0); Jusqu’à N >0
MC=PM=PN=0; MC ← 0
PM ← 0
PN ← 0
for(i=1; i<=N;i++) Pour i de 1 à N Faire
{ do Répéter
{printf("Donner la moyenne de l'etudiant %d : ",i); Écrire("Donner la moyenne de l’étudiants : ",i)
scanf("%f",&Moy); Lire (Moy)
}while ((Moy <0)||(Moy >20)); Jusqu’à Moy ≥0 ET Moy ≤20
MC+=Moy; MC ← MC+ Moy
if (Moy >=10) Si Moy ≥ 10
PM++; Alors PM ← PM +1
else Sinon PN ← PN +1
Corrigé TD/TP N°4 2021/22 Page 10 sur 12
PN++; Finsi
} FinPour
printf("\nMoyenne de la classe est %.2f\n",MC/N); Écrire("La moyenne de la classe est ", MC/N)
printf("\nPoucentage ayant la moyenne = %.2f\n",PM*100/N); Écrire("Pourcentage ayant la moyenne est ", PM*100/N)
printf("\nPoucentage n'ayant pas la moyenne =%.2f \n", PN*100/N); Écrire("Pourcentage n’ayant pas la moyenne est ", PN*100/N)
} FIN
Exercice N°15
Soit l’algorithme suivant qui permet de calculer le PPCM de deux entiers par la méthode des divisions successives.
1. Écrire le programme correspondant :
ALGORITHME DIVISION #include <stdio.h>
void main()
DEBUT {
r a MOD b ; r= a%b ;
a b ; a=b ;
br; b=r ;
FIN }
FIN }
Exercice N°16
Écrire un algorithme puis un programme qui permet de saisir une suite de chiffres non nuls terminée par zéro, puis
afficher le nombre correspondant.
Exemple : 1 2 3 4 5 0
Affiche 12345
Corrigé
Suite de chiffres non nuls terminée par zéro Boucle En Sortie :
Tant que (le 1er chiffre saisi peut être zéro) N= le nombre cherché
En entrées : Traitement
c : un chiffre compris entre 0 et 9 Boucle répéter N=c puis N=N*10+c jusqu’à la saisie de zéro
#include <stdio.h> Algorithme Ex16
Corrigé TD/TP N°4 2021/22 Page 11 sur 12
void main() Var c : Entier
{ N= Entier Long
int c=1; // n’importe quelle valeur autre que zéro Début
long int N=0; c 1
while (c) // c!=0 N0
{ // Saisie des chiffres d'un nombre Tant que c ǂ0 Faire
do Répéter
{printf("Donner un chiffre du Nombre : "); Écrire("Donner un chiffre du Nombre : ")
scanf("%d",&c); Lire(c)
} while ((c<0) || (c>9)); Jusqu’à c≥0 ET c≤9
if (c) Si c ǂ0
N=N*10+c; Alors N N*10+c
} Finsi
FinTantQue
printf("%ld est le Nombre cherche\n",N); Écrire(N,"est le nombre cherché")
} Fin
Exercice N°17
Écrire un algorithme puis un programme qui permet de saisir une suite de chiffres non nuls terminée par zéro, puis
afficher le nombre correspondant à l’envers.
Exemple : 1 2 3 4 5 0
Affiche 54321
Corrigé
Suite de chiffres non nuls terminée par zéro En Sortie :
Boucle Tant que (le 1er chiffre saisi peut N= le nombre cherché
être zéro) Traitement
En entrées : nombre de chiffres -1
N=c *100 puis N=N+c*10
c : un chiffre compris entre 0 et 9 jusqu’à la saisie de zéro
Boucle répéter
#include <stdio.h> #include <stdio.h> Algorithme Ex17
#include <math.h> void main() Var c,i : Entier
void main() { N= Entier Long
{ int i=0; // 1ère puissance de 10 Début
int i=0; // 1ère puissance de 10 int c=1; i 0
int c=1; long int N=0; c 1
// n’importe quelle valeur autre que zéro while (c) N0
long int N=0; { do Tant que c ǂ0 Faire
while (c) { printf("Donner un chiffre : "); Répéter
{ do scanf("%d",&c); Écrire("Donner un chiffre")
{ printf("Donner un chiffre : "); }while ((c<0)||(c>9)); Lire(c)
scanf("%d",&c); if (c) Jusqu’à c≥0 ET c≤9
}while ((c<0)||(c>9)); { N+=c*i; Si c ǂ0
if (c) i*=10; Alors
{ N+=c*pow(10,i); } N N+c*10i (ou N+c*i
i++ ;} } i i+1 et i*10)
} printf("%ld est le nombre\n",N); Finsi
printf("%ld est le nombre a chercher \n",N); } FinTantQue
} Écrire(N,"=Nombre cherché")
Fin