Académique Documents
Professionnel Documents
Culture Documents
UFR SAT/UGB
david-celestin.faye@ugb.edu.sn
26 avril 2022
Plan 4
1 La structure séquentielle
En programmation structurée, le transfert de contrôle s’exprime La notion de séquence
par : Les instructions composées
1 enchaînement séquentiel (une instruction puis la suivante) ; 2 Les structures alternatives
Le choix simple
2 traitements conditionnels ;
La sélection multiple : le CAS...
3 traitements répétitifs(itératifs) ; Le concept de condition
4 appel d’un sous-programme (un autre programme qui réalise 3 Les structures répétitives
un traitement particulier). Définition
Boucle à bornes définies (POUR...FAIRE)
Boucles à bornes non définies
Exemple comparatif
Que choisir entre pour... tant que...répéter... ?
4 Application au Langage C
Pr. David C. FAYE/UFR SAT-UGB UE INFO111 -Algo I : Structures de contrôle
notion de séquence 5I notion de séquence 6I
Une structure séquentielle ou séquence est une suite
d’instructions rangées dans l’ordre où elles sont écrites.
Dans une structure séquentielle l’ordre des instructions joue
une séquence est une structure algorithmique très élémentaire.
un rôle fondamental.
Ainsi par exemple, si S1 et S2 représentent deux instructions,
leur composition est notée : Ainsi par exemple, dans la séquence d’instructions.Ainsi par
S1; S2; exemple, dans la séquence d’instructions
respectivement : X1 ← 2;
X2 ← X1 + 3;
S1;
Ecrire(X2);
S2;
Il n’est pas possible de revenir en arrière pour recommencer
Ce qui signifie que : l’opération.
les instructions S1 et S2 sont exécutées une par une, L’exécution d’une instruction déterminée n’est possible que
chacune d’elles est exécutée exactement une fois, lorsque toutes les instructions qui la précèdent ont été
l’ordre dans lequel elles sont exécutées est le même que celui exécutées.
dans lequel elles ont été écrites,
terminer l’instruction S2 implique de finir la séquence.
La structure séquentielle
Les structures alternatives
Le choix simple Les structures alternatives 12 I
La sélection multiple : le CAS...
Les structures répétitives
Le concept de condition
Application au Langage C
Plan 11
1 La structure séquentielle
La notion de séquence
Une instruction alternative permet de faire le choix entre une,
Les instructions composées
deux ou plusieurs actions suivant qu’une certaine condition est
2 Les structures alternatives
remplie ou non.
Le choix simple
La sélection multiple : le CAS... Une telle structure algorithmique est encore appelée sélection.
On distingue deux types d’instructions alternatives :
Le concept de condition
le choix simple (instruction SI ) et
3 Les structures répétitives
la sélection multiple( instruction SUIVANT...FAIRE).
Définition
Boucle à bornes définies (POUR...FAIRE)
Boucles à bornes non définies
Exemple comparatif
Que choisir entre pour... tant que...répéter... ?
4 Application au Langage C
Pr. David C. FAYE/UFR SAT-UGB UE INFO111 -Algo I : Structures de contrôle
Le choix simple 13 I Le choix simple 14 I
* SYNTAXE : En pseudo-code
Point important : Instruction alternative facultative. En effet
si < condition > alors les deux formes suivantes sont équivalentes.
<bloc_instructions1>
sinon si < condition > alors
<bloc_instructions2> < instruction > ;
avec SINON
Algorithme Premier_Degre ;
Var A, B : reel ; Algorithm MAXIMUM_DEUX ;
début var X, Y : reel ;
Ecrire(’entrez les coefficients A et B : ’) ; M AX : reel ;
Lire(A, B) ; début
si A = 0 alors Ecrire(’Tapez les deux nombres :’)
si B = 0 alors Lire (X, Y ) ;
Ecrire(’Indéterminé !’) si X > Y alors
sinon M AX ← X
Ecrire(’Impossible !’) sinon
sinon M AX ← Y ;
Ecrire(’La solution est : ’,−B/A) ; Ecrire(’Le plus grand nombre est ’,M AX) ;
fin fin
Le choix simple : Exemple 25 III Exemple : Algorithme max et min de 3 entiers 26
* SYNTAXE : En pseudo-code
La variable variable est appelée sélecteur et doit être d’un type
suivant variable faire scalaire.
cas où constante1 faire Les constantes CAS doivent être toutes différentes et du même
suite d’instructions1 type que le sélecteur. Elles sont interprétées comme des
cas où constante2 faire étiquettes.
suite d’instructions2 Seules les égalités sont possibles au niveau du test (Pas de
cas où constante3 faire comparaisons de type <,>,<=,>= ou <>) On peut néanmoins
suite d’instructions3
utiliser des intervalles .
cas ...
où ... faire
On peut donner une liste de constantes, ou des intervalles de
autres cas faire constantes. Attention, chaque valeur possible ne doit être
suite d’instructions par defaut; représentée qu’une fois au plus (sinon il y a erreur à la
fin compilation). Par exemple, on ne peut pas faire des intervalles
se chevauchant, comme 3..6 et 5..10, les cas 5 et 6 étant
Comme dans l’instruction SI, l’exécution de chaque branche représentés 2 fois.
est mutuellement exclusive.
La sélection multiple : le CAS... 33 Le concept de condition 34 I
Une condition est une expression booléennedont les seules
Algorithme calculette ; valeurs sont les valeurs de vérité Vrai et FAux.
variable A, B, RESU LT AT : reel ; Une valeur booléenne est obtenue en appliquant les opérateurs
T OU CHE : caractere ;
booléens ET, OU et NON ainsi que les opérateurs relationnels
début
Ecrire(’entrez une opération ’) ; =, <>, <, <=, >, >= à des opérandes booléennes.
Ecrire(’(taper un nombre, un opérateur puis un nombre) : ’) ; On envisage les conditions de relation simple et les conditions
lire(A, T OU CHE, B) ; de relation composée.
suivant T OU CHE faire
cas où ’+’ faire Dans une condition de relation simple deux expressions
RESU LT AT ← A + B; arithmétiques sont comparées au moyen des opérateurs
cas où ’-’ faire relationnels.
RESU LT AT ← A − B;
Une condition de relation composée se construit au moyen de
cas où ’*’ faire
RESU LT AT ← A ∗ B; conditions de relation simple reliées les unes aux autres par les
cas où ’/’ faire opérateurs booléens.
RESU LT AT ← A/B; Exemple
fin
Ecrire(A, T OU CHE, B," = ", RESU LT AT ) ; NON( A<=B ) ( A>3 ) OU ( B<5 )
fin ( X>3 MOD 4 ) ET ( Racine( B )<=6 )
* Corrigé Lorsque les bornes ne sont pas connues, il existe deux autres types
Algorithme fibonacci ; de boucles :
n, u, v, i :entier ; Boucle TANT QUE ... FAIRE ...
début
Ecrire(’Donnez N : ’) ; Lire(N ) ; Boucle REPETER ... JUSQU’A ...
u←1
v ← 1;
pour i ← 2 à n faire
v ← u + v;
u ← v − u;
fin
fin
Boucles à bornes non définies TANT QUE 49 I Boucles à bornes non définies TANT QUE 50 II
Syntaxe de la boucle TANT QUE : Organigramme
* SYNTAXE : En pseudo-code
Vrai
Remarques
Sequence
arrêt si expression est fausse
=⇒pas de boucle si faux au départ
incrémentation gérée par le programmeur lui-même
=⇒pas d’augmentation automatique d’une variable
(contrairement à la boucle POUR)
Les variables de l’expression expression doivent être
initialisées avant le while, pour que au premier passage
expression puisse être évaluée.
Boucles à bornes non définies TANT QUE 51 III Boucles à bornes non définies REPETER 52 I
* SYNTAXE : En pseudo-code
répéter
Algorithme boucle_tantque ; <séquence d’instructions>
var i :entier ; jusqu’à < condition >;
début
i ← 1;
tant que i <= 5 faire Remarques
début La boucle s’effectue tant que l’expression est fausse, arrêt
Ecrireln("le carré de ", i, " est :", i ∗ i) ; quand l’expression est vraie. C’est le contraire de la boucle
i ← i + 1; /* incrémentation gérée par le TANT QUE.
programmeur */
fin Contrairement au TANT QUE, il y a au moins un passage (1
fin boucle), même si l’expression est vraie.
Ecrireln ; De même que pour le TANT QUE, c’est le programmeur qui
Ecrireln(’FIN. A la prochaine...’) ; gère l’incrémentation.
fin
Boucles à bornes non définies REPETER 53 II Boucles à bornes non définies REPETER 54 III
Organigramme
Algorithme boucle_repeter ;
var i :entier ;
Sequence début
i ← 1;
répéter
Faux Ecrireln("le carré de ", i, " est :", i ∗ i) ;
Condition
i ← i + 1; /* incrémentation gérée par le programmeur
Vrai */
jusqu’à i > 5;
Ecrireln ;
Ecrireln(’FIN. A la prochaine...’) ;
fin
Algorithme Avec_TANTQUE ;
var a, b, i, P :entier ; Algorithme Avec_REPETER ;
début var a, b, i, P :entier ;
Ecrire(’Donner a et b’) ; début
Lire(a, b) ; Ecrire(’Donner a et b’) ;
P ← 0; Lire(a, b) ;
i ← 1; P ← 0;
tant que (i <= b) faire i ← 1;
début répéter
P ← P + a; P ← P + a;
i ← i + 1; i ← i + 1;
fin jusqu’à i > b;
fin Ecrire(’Le produit est’,P ) ;
Ecrire(’Le produit est’,P ) ; fin
fin
Algorithme Avec_REPETER_Controle_REPETER ;
var a, b, i, P :entier ;
début
répéter
Modifions les algorithmes en y rajoutant des contrôles de saisie sur
Ecrire(’Donner a et b’) ;
les valeurs de a et de b, puisqu’elles doivent être strictement
Lire(a, b) ;
positives.
jusqu’à (a > 0) ET (b > 0);;
P ← 0;
i ← 1;
répéter
P ← P + a;
i ← i + 1;
jusqu’à i > b;
Ecrire(’Le produit est’,P ) ;
fin
Boucles à bornes non définies 65 Boucles à bornes non définies 66 I
Algorithme Avec_REPETER_Controle_TANTQUE ;
var a, b, i, P :entier ;
début • Implicitement, l’instruction pour :
Ecrire(’Donner a et b’) ;
initialise un compteur
Lire(a, b) ;
incrémente le compteur à chaque pas
tant que (a <= 0) OU (b <= 0) faire
vérifie que le compteur ne dépasse pas la borne supérieure
Ecrire(’Donner a et b’) ;
Lire(a, b) ; • Explicitement, l’instruction tant que doit
fin initialiser un compteur
P ← 0; i ← 1; incrémenter le compteur à chaque pas
répéter vérifier que le compteur ne dépasse pas la borne supérieure
P ← P + a;
i ← i + 1;
jusqu’à i > b;
Ecrire(’Le produit est’,P ) ;
fin
Que choisir entre pour... tant que...répéter... ? 67 Que choisir entre pour... tant que...répéter... ? 68 I
OUI
OUI Nombre
Nombre NON
NON
d'itérations
d'itérations Saisir des valeurs, les traiter, et s’arrêter à la saisie de la valeur
connu
connu ?? d’arrêt -1 ou après avoir saisi 10 données.
OUI
OUI Traitement
Traitement NON
NON
exécuté
exécuté au
au moins
moins
une fois ?
une fois ?
Quelques difficultés avec les boucles 71 II Méthodologie pour l’écriture d’une boucle 72 I
Exemple :
saisir des valeurs, les traiter, et s’arrêter à la saisie de la valeur
d’arrêt -1 ou après avoir saisi 10 données.
Algorithme PGCD_Euclide ;
var a, b :entier ;
début
répéter
Ecrire(’Donner a et b’) ;
Lire(a, b) ;
jusqu’à (a > 0) ET (b > 0);;
x←a
y←b
tant que y 6= 0 faire
r ← x mod y
x←y
y←r
fin
Ecrire (’Le pgcd est’,r)
fin
Algorithme NombresPairs ;
Algorithme PgcdPpcm ; var x, y, z :entier ;
Var a, b, k : entier ; début
Lire (x, y) ;
début
si x > y alors
répéter z ← x;
Ecrire(’a et b : ’) ; x ← y;
lire (a, b) ; y ← z;
jusqu’à a > 0 et b > 0; tant que x ≤ y faire
k ← 0 répéter si x mod 2 = 0 alors
k ←k+1 Ecrire (x) ;
jusqu’à a ∗ k mod b = 0; x ← x + 1;
Ecrire (’ppcm de ’, a, ’ et ’, b, ’ = ’, a ∗ k, ’ pgcd = ’, fin
b div k) fin
fin
Les boucles : Exemple 89 Les boucles : Exemple 90
Un nombre entier peut être considéré comme un palindrome1
numérique s’il garde la même valeur en inversant les chiffres le
Ecrire un nombre à l’envers constituant. Exemple : 12321, 101, 4
Algorithme palindrome ;
Algorithme Inverse ; var nombre, quotient, reste, somme : entier;
var n, r :entier ; début
début Ecrire(’Entrer un nombre : ’) ; lire(nombre) ;
Lire (n) ; somme ← 0; quotient ← nombre;
répéter tant que quotient <> 0 faire
r ← n mod 10; reste ← quotient mod 10;
Ecrire (r) ; somme ← somme ∗ 10 + reste;
n ← n div 10 quotient ← quotient div 10
jusqu’à n = 0; fin
fin si somme = nombre alors
ecrire(’Palindrome’)
sinon
ecrire(’pas palindrome’)
fin
Les boucles : Exemple ,Exponentiation indienne 95 Les boucles : Exemple ,Exponentiation indienne 96
On se propose de calculer a puissance b (noté ab avec a et b des
entiers positifs) sachant que l’on ne dispose que de l’élévation au Dans le cas ou b est impair on se ramène au cas précédent.
carré, de la division euclidienne par 2 et de la multiplication de Exemple avec a5
deux nombres, le tout en minimisant le nombre d’opérations.
Dans le cas où b est pair les facteurs a sont regroupés deux à deux
pour minimiser le nombre de multiplications. Exemple avec a8
Les boucles : Exemple, test de primalité 99 II Les boucles : Exemple, test de primalité 100
Algorithm nbPremier ; //VERSION 1
var n, d, nbdiv : entier ;
début
répéter
Ecrire(’Donner un entier positif : ’) ; Lire(n) Rappel :
jusqu’à n > 0; 1 n’est pas premier
si n = 1 alors On dit qu’un nombre naturel n ≥ 2 est premier s’il n’est
nbdiv ← 1// pour bon affichage en fin d’algorithme divisible que par 1 et par lui même
sinon
2 est premier c’est le seul nombre pair premier
nbdiv ← 0
pour d ← 2 to n − 1 faire Le début de la suite infinie de nombre premier est
si n mod d = 0 alors 2,3,5,7,11,13,17
nbdiv ← nbdiv + 1
fin
si nbdiv = 0 alors
ecrire(n,’ est premier’)
sinon
ecrire(n,’ n”est pas premier’)
fin
Les boucles : Exemple, test de primalité 101 Les boucles : Exemple, test de primalité : VERSION 2 102
Algorithme nbPremier ; //VERSION 1 var n, d : entier ; premier : booleen ;
var n, d, nbdiv : entier ; début
début /*Saisie n > 0 */
répéter si n = 1 alors
Ecrire(’Donner un entier positif : ’) ; Lire(n) premier ← f aux// pour bon affichage en fin
jusqu’à n > 0; d’algorithme
si n = 1 alors sinon
nbdiv ← 1// pour bon affichage en fin d’algorithme premier ← vrai
sinon d ← 2;
nbdiv ← 0 tant que (d * d < n) ET premier faire
pour d ← 2 to n − 1 faire premier ← (n mod d > 0);
si n M OD d = 0 alors d←d+1
nbdiv ← nbdiv + 1 fin
fin si premier alors
si nbdiv = 0 alors ecrire(n,’ est premier’)
ecrire(n,’ est premier’) sinon
sinon ecrire(n,’ n”est pas premier’)
ecrire(n,’ n”est pas premier’) fin
fin
Décomposition d’un nombre en facteurs premiers. 103 I Décomposition d’un nombre en facteurs premiers. 104
Algorithme decomposition ;
var nombre, diviseur : entier ;
début
On cherche à écrire un algorithme permettant de décomposer un diviseur ← 2;
nombre en facteurs premiers. Par exemple, pour 12, le programme répéter
devra afficher 12=1*2*2*3, pour 42 on aura 42=1*2*2*7 et enfin Ecrire(’Entrez le nombre dont vous voulez la
pour 37, 37=1*37 ; Donnez un programme saisit un nombre et decomposition : ’) ;
affiche ensuite la décomposition de ce dernier en produits de lire(nombre) ;
facteurs premiers. Il est conseillé de procéder d’abord à un jusqu’à (nombre > 0);
ecrire(nombre,’=1’) ;
traitement manuel sur un nombre quelconque. tant que (nombre <> 1) faire
si ((nombre M OD diviseur) = 0) alors
ecrire(’*’, diviseur) ;
nombre ← nombre DIV diviseur;
sinon
diviseur ← diviseur + 1;
fin
fin
105 106
n
X x2k x2 x4 x2n
y = cos(x) ≈ (−1)k =1− + + . . . + (−1)n
k=0
(2k)! 2 24 (2n)!
Calculer la fonction ci-dessous en fonction de son développement avec
x2(k+1) −x2 x2k
P
en série entière ( uk ). Les calculs seront arrêtés lorsque la valeur
absolue du terme uk sera inférieure à un certain seuil s uk+1 = (−1)k = · (−1)k =
(2(k + 1))! (2k + 1)(2k + 2) (2k)!
(0 < s < 1). On n’utilisera ni la fonction puissance (xn ) ni la −x2
fonction factorielle (n!). uk
(2k + 1)(2k + 2)
n
x2k x2 x4 x2n x2(k+1)
uk+1 =(−1)k
X
k
y = cos(x) ≈ (−1) =1− + + . . . + (−1)n (2(k + 1))!
k=0
(2k)! 2 24 (2n)!
−x2 x2k
= · (−1)k
(2k + 1)(2k + 2) (2k)!
−x 2
= uk
(2k + 1)(2k + 2)
............
début ............
num ← 1
den ← 1
pour i ← 1 à k + 1 faire
num ← num ∗ (n − i + 1)
den ← den ∗ i
fin
c ← num/den
............
fin
Plan 112
1 La structure séquentielle
La notion de séquence
Les instructions composées
2 Les structures alternatives
Le choix simple
La sélection multiple : le CAS...
Le concept de condition
3 Les structures répétitives
Définition
Boucle à bornes définies (POUR...FAIRE)
Boucles à bornes non définies
Exemple comparatif
Que choisir entre pour... tant que...répéter... ?
4 Application au Langage C
Pr. David C. FAYE/UFR SAT-UGB UE INFO111 -Algo I : Structures de contrôle
Instructions 113 Instruction conditionnelle if....else 114 I
instruction de contrôle : permet de contrôler le
fonctionnement d’un programme. instructions de sélection et Syntaxe
les boucles if (expression)
Une instruction simple est instruction1
soit une instruction de contrôle,
soit une expression suivie de “ ;”
Un bloc a la structure suivante : if (expression)
une accolade ouvrante { instruction1
une liste de définitions locales au bloc (optionnelle) else
une suite d’instructions instruction2
une accolade fermante } (qui n’est pas suivie d’un ;).
if ( a == b ) {
x=0; printf ( " les variables a et b sont égales \ n " );
i++; } else {
printf("Coucou\n"); printf ( " les variables a et b ne sont pas égales \ n " ); }
if (x==0) { ATTENTION : Ne pas confondre a == b avec a = b :
x=1;
a == b est une comparaison qui vérifie si a et b sont égaux.
i++;
printf("Dans le bloc !\n"); a = b est une affectation, on affecte à la variable a la valeur
} de la variable b.
Instruction de sélection multiple switch 123 Instruction de sélection multiple switch 124
Syntaxe
switch (expression ){ La valeur de expression doit être de type entier, caractère
case constante1: ou énuméré.
liste d’instructions 1 L’expression qui se trouve après chaque case ne peut pas
break; contenir de variable ni d’appel de fonction et doit être de type
case constante2: entier, char ou enuméré.
liste d’instructions 2 Lorsqu’un cas est sélectionné, ce sont toutes les instructions
break; qui le suivent qui sont exécutées, y compris celles des autres
... cas et ceci jusqu’à la fin du bloc du switch et
case constanten: indépendamment des autres conditions.
liste d’instructions n break ; permet de rendre les blocs mutuellement exclusifs.
break; break; provoque la sortie du bloc de l’instruction switch.
default:
Si aucune des expressions ne correspond, la branche default
liste d’instructions
facultative est activée.
break;
}
Instruction de sélection multiple switch 125 Instruction de sélection multiple switch 126
# include < stdio .h >
int main (){
Remarques int i ;
Comme toutes les instructions qui suivent un case sont printf ( " Entre un chiffre : " );
scanf ( " % d " ,& i );
exécutées si celui-ci est activé, il est souvent nécessaire de switch ( i ) {
sortir avec un break, mais ce n’est pas obligatoire. case 0 : printf ( " ton chiffre est zero !\ n " );
Par ailleurs, ce mécanisme permet de faire des "ou" et de faire break ;
case 6 :
le même traitement pour différentes valeurs. case 8 : printf ( " ton chiffre est plus grand que 5\ n " );
Par exemple : case 4 :
case 2 : printf ( " ton chiffre est pair \ n " );
case valeur1: break ;
case valeur2: case 9 :
case valeur3: case 7 : printf ( " ton chiffre est plus grand que 5\ n " );
faire un ensemble de choses case 5 :
case 3 :
break;
case 1 : printf ( " ton chiffre est impair \ n " );
Permet de faire la même chose pour les trois valeurs valeur1, break ;
valeur2 et valeur3. default : printf ( " ce n ’ est pas un chiffre !\ n " );
}
}
While (<condition> )
Corrigé
<Instruction>
# include < stdio .h > ;
main () {
int n , i , j ;
i = 1; printf ( " Donnez l ’ entier à tester : " );
while ( i < 10){ scanf ( " % d " , & n );
printf ( " \ n i = % d " ,i ); i = 0;
i ++; Faux
<Condition> j = 0;
} while (j < n ) {
Vrai
i = i +1 ;
j= i* i ;
<instruction> }
if ( j == n )
printf ( " % d est un carré parfait " , n );
else
printf ( " % d n ’ est pas un carré parfait " , n );
}
Les Boucles 129 Les Boucles 130
Ecrivez un programme qui saisit un entier , renverse l’entier et
Boucle do....while
affiche le résultat.
Exemple do
Entrez l’entier a renverser :1234 <Instruction>
Resultat : 4321 while (<condition> );
int a ;
Corrigé do {
printf ( " \ n un entier > 1 et <10 : " );
int main ( int argc , char ** argv ) { scanf ( " % d " ,& a );
int x , y ; }
printf ( " Entrez l ’ entier a renverser : " ); while (( a <= 1) || ( a >= 10)); <instruction>
scanf ( " % d " ,& x ); --------------------------------------
y =0; char c = ’a ’;
while (x >0){ do {
y = y *10 + x %10; printf ( " % c " ,c ); vrai
x = x /10; c += 1; <Condition>
} } while (c <= ’z ’ );
printf ( " Resultat : % d \ n " ,y ); faux
return EXIT_SUCCESS ;
}
Inverser un entier
for ( ; ; ){
# include < stdio .h >
printf ( " donnez un nombre (0 pour sortir ) : " );
int main (){
scanf ( " % d " ,& n );
int num ,r , inverse =0;
if ( n == 0)
printf ( " Entrer un nombre : " );
break ;
scanf ( " % d " ,& num );
. . .
for (; num !=0; num = num /10){
// traitement de n
r = num %10;
. . .
inverse = inverse *10+ r ;
}
}
printf ( " Nombre à l ’ envers : % d " , inverse );
return 0;
}
L’instruction break 137 L’instruction break 138
Par construction, l’instruction
return
continue A voir dans le chapitre sur les fonctions. permet d’abandon-
utilisée dans les boucles for, do ... while ou while per- ner une fonction pour retourner à la fonction appelante (en
met d’abandonner l’itération courante pour passer au début fournissant éventuellement une valeur) ♠
de l’itération suivante ♠
goto
for ( i = 0; i < 10; i = i + 1){ goto n’est pas très conseillée car elle est contraire aux prin-
printf ( " entrer votre \% deme entier : " ,i );
scanf ( " \% d " ,& n ); cipes de la programmation structurée ! Vous pouvez faire
if (n <0) continue ; /* on passe au i suivant dans le for */ précéder toute instruction par un identificateur (appelé
... /* traitement de l ’ entier fourni */ étiquette) suivi de :. Une instruction goto identificateur
} a pour effet de se brancher à l’instruction étiquetée par
identificateur qui est alors exécutée. ♠
Les Boucles 141 Les Boucles 142
* Corrigé
Ecriture en binaire
int main ( void ) {
La représentation binaire d ?un nombre entier x est la suite int x ,y , n ;
(bk , . . . , b1 , b0 ) définie par la formule : scanf ( " % d " , & n );
x = n ; y = 1;
x = bk 2k + . . . + b1 2 + b0 while ( y + y <= x )
y = y+y;
Principe de calcul : en deux étapes while ( y != 0) {
if ( x < y )
1 On calcule y = 2k comme la plus grande puissance de 2 t.q. printf ( " 0 " );
y ≤ x. else {
printf ( " 1 " );
2 Itérativement, on remplace y par y/2 en soustrayant y de x à x = x - y;
chaque fois que y ≤ x (et en écrivant 1 ou 0 suivant le cas). }
y = y / 2;
}
printf ( " \ n " );
return 0;
}
* Corrigé
écrire un programme qui demande à l’utilisateur un entier N positif
puis affiche le motif suivant avec les chiffres allant de 1 à N.. # include < stdio .h >
Affichage 2 Parexemple : N=5 int main (){
int N , cols , i , j ;
1 2 3 4 5 printf ( " Donner un entier N : " );
scanf ( " % d " , & N );
2 3 4 5 1 for ( i =1; i <= N ; i ++) {
3 4 5 2 1 for ( j = i ; j <= N ; j ++) {
4 5 3 2 1 printf ( " % d " , j );
5 4 3 2 1 }
for ( j =i -1; j >=1; j - -) {
printf ( " % d " , j );
}
printf ( " \ n " )
}
return 0;
Les Boucles 145 Les Boucles 146
* Corrigé
# include < stdio .h >
Construire un dessin de la lettre X , à l’aide d’espaces et d’un void main (){
« caractère » fourni par l’utilisateur, auquel on demande aussi la int N ,i , j ;
« hauteur » du dessin qu’il désire obtenir. Par exemple : char ch ;
printf ( " Entrer la taille N du ’X ’ " );
scanf ( " % i " , & N );
Entrez le caractère : *
printf ( " Entrer le caractère du ’X ’ " );
Nombre de lignes : 5 scanf ( " % c " , & ch );
* * for ( i =1; i <= N ; i ++){
* * for ( j = 1; j <= N ; j ++) {
* if ( i == j || j == N - i + 1)
printf ( " % c " , ch );
* * else
* * printf ( " " );
}
printf ( " \ n " );
}
}
* Corrigé
# include < stdio .h >
main (){
int N ; /* nombre de termes à calculer */
int I ; /* compteur pour la boucle */
float SOM ; /* Type float à cause de la précision
du résultat . */
do {
scanf ( " % d " , & N );
} while (N <1);
for ( SOM =0.0 , I =1 ; I <= N ; I ++)
SOM += ( float )1/ I ;
printf ( " La somme des % d premiers termes
est % f \ n " , N , SOM );
return 0;
}
Les Boucles 149 I Les Boucles 150 II
* Corrigé
# include < stdio .h >
int main (){
int nombre , resultat =0 , placeDecimale = 1;
Ecrire un programme qui étant donné un nombre a strictement do {
printf ( " Donner un nombre " );
positif retourne, sans utiliser de tableau un autre nombre b formé à scanf ( " % d " , & nombre );
partir de a en remplaçant chaque 0 dans a par 5. } while ( nombre <0);
a = 102 ⇒ b = 152 resultat = nombre ;
a = 1020 ⇒ b = 1525 if ( nombre == 0)
resultat += (5 * placeDecimale );
while ( nombre >0){
if (( nombre % 10 == 0))
resultat += (5 * placeDecimale );
nombre /= 10;
placeDecimale *= 10;
printf ( " res % d \ n " , resultat );
}
printf ( " Le résulat est % d \ n " , resultat );
return 0;
Ecrire un programme qui affiche les entiers dans l’intervalle [1, N ] * Corrigé
de la façon suivante (exemple pour N = 20) : # include < stdio .h >
1␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣20 # define N 20
1␣␣2␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣19␣20 int main () {
1␣␣2␣␣3␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣18␣19␣20 int i , j ;
for ( i =0; i < N /2; i ++) {
1␣␣2␣␣3␣␣4␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣17␣18␣19␣20
for ( j =0; j <= i ; j ++) {
1␣␣2␣␣3␣␣4␣␣5␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣16␣17␣18␣19␣20 printf ( " %3 d " , j +1);
1␣␣2␣␣3␣␣4␣␣5␣␣6␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣15␣16␣17␣18␣19␣20 }
1␣␣2␣␣3␣␣4␣␣5␣␣6␣␣7␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣14␣15␣16␣17␣18␣19␣20 for ( j = i +1; j <N -i -1; j ++) {
printf ( " " ); // 3 espaces
1␣␣2␣␣3␣␣4␣␣5␣␣6␣␣7␣␣8␣␣␣␣␣␣␣␣␣␣␣␣␣13␣14␣15␣16␣17␣18␣19␣20
}
1␣␣2␣␣3␣␣4␣␣5␣␣6␣␣7␣␣8␣␣9␣␣␣␣␣␣␣12␣13␣14␣15␣16␣17␣18␣19␣20 for ( j =N -i -1; j < N ; j ++) {
1␣␣2␣␣3␣␣4␣␣5␣␣6␣␣7␣␣8␣␣9␣10␣11␣12␣13␣14␣15␣16␣17␣18␣19␣20 printf ( " %3 d " , j +1);
Le symbole represente ␣l’espace blanc. Votre programme doit }
pouvoir fonctionner avec n’importe quel entier N entre 0 et 99 printf ( " \ n " );
}
}
La structure séquentielle La structure séquentielle
Les structures alternatives Les structures alternatives
Les structures répétitives Les structures répétitives
Application au Langage C Application au Langage C
Références I Références II
Pr. David C. FAYE/UFR SAT-UGB UE INFO111 -Algo I : Structures de contrôle Pr. David C. FAYE/UFR SAT-UGB UE INFO111 -Algo I : Structures de contrôle