Post on 31-Dec-2015
M d l Al ith iModule : Algorithmique
Cours Programmation en langage C
SAIDI Rajaa
2013-2014
SAIDI Rajaar.saidi@insea.ac.ma
Objectifs du cours
1. Projection des notions d’algorithmique vers un langage de programmation
2 Prise en main des éléments de base du Langage C2. Prise en main des éléments de base du Langage C
3. Comprendre la syntaxe du langage C
4. Apprendre à écrire un programme simple en langage C
2
Bibliographie
Langage CBrian W. Kernighan, Dennis M. Ritchie : Le langage C : Norme ANSI – éditions D d S t b 2004Dunod, Septembre 2004Robert Sedgewick : Algorithmes en langage C – édition DUNOD, 2005
Exercices en CExercices en CC. Delannoy : Programmer en langage C avec exercices corrigés, 5e édition 2009
3
Plan du cours (1/2)
Introduction au langage CHistorique du langage CCaractéristiques du langage CÉtapes de la programmation en CC t d’ CComposantes d’un programme en C
Chapitre 1- Types de base, Opérateurs et ExpressionsLes types simplesDéclaration des variables simplesLes opérateurs standardsLes opérateurs standardsPriorité et associativité des opérateurs
Chapitre 2 Quelques fonctions particulièresChapitre 2- Quelques fonctions particulièresLes Entrées (Input)Les Sorties (Output)
4
Plan du cours (2/2)
Chapitre 3- Les structures de contrôleStructures de choixStructures itératives
Chapitre 4- Les tableauxT bl à di iTableaux à une dimensionTableaux à plusieurs dimensionsImplémentation des algorithmes de triImplémentation des algorithmes de tri
Chapitre 5- Les chaînes de caractèresDéfinitionDéclarations et Initialisations d’une chaîne de caractèresManipulation des chaînes de caractères
Chapitre 6- Les structures de donnéesType structureDé l ti d’ t t
5
Déclaration d’une structureUtilisation des structures
Évaluation et organisation
Examen final : 30% de la note final du module algorithmique
V l h i 14hVolume horaire : 14h
6
Chapitre 1INTRODUCTION AU LANGAGE C
7
Préliminaire
Avant la phase d’écriture d’un programme et de son implémentation, il fautd’abord bien définir le problème (et les données associées) et c’estl’ l ith i i t d l é dl’algorithmique qui permet de le résoudre
Algorithme : séquence d’opérations visant à la résolution d’un problème en untemps finip
Une fois l’algorithme et les structures de données définis, on les code en unlangage informatique et on obtient un programmeg g g
Programme : suite d’instructions permettant de réaliser une ou plusieurs tâches,de résoudre un problème, de manipuler des données
Nombreux langages de plus haut niveau ont été définis :la programmation structurée (C, Pascal, …)l ti f ti ll (Li )la programmation fonctionnelle (Lisp,…)la programmation logique (Prolog, …)La programmation scientifique (Maple, Matlab,…)
8
p g q ( p , , )la programmation objet (Smalltalk, Eiffel, C++, Java, …)
Historique du langage C
1972 : Dennis Ritchie (chercheur dans les laboratoires Bell) a conçu lelangage C pour développer une version portable du système d’exploitationUNIXUNIX
1978 : une 1ère définition du langage est apparue avec l’ouvrage de Ritchiet K i h Th C i let Kernighan « The C programming language »
Années 80 : le langage C est devenu de plus en plus populaire que ce soitd l d dé i l i d f i ldans le monde académique que celui des professionnels
1983 : l’organisme ANSI «American National Standards Institute »h it i i d tt i t défi iti li it tchargeait une commission de mettre au point une définition explicite et
indépendante de la machine pour le langage C
1989 défi iti d l ANSI C1989 : définition de la norme ANSI-C
9
Caractéristiques du langage C
Universel : C n'est pas orienté vers un domaine d'application spéciale
Proche de la machine : il offre des opérateurs qui sont très proches deProche de la machine : il offre des opérateurs qui sont très proches deceux du langage machine (ex. la gestion de la mémoire)
Rapide : car très proche du langage machineRapide : car très proche du langage machine
Indépendant de la machine : il peut être utilisé sur n'importe quel systèmeen possession d'un compilateur Cen possession d un compilateur C
Portable : en respectant le standard ANSI-C, il est possible d'utiliser lemême programme sur tout autre systèmemême programme sur tout autre système
Extensible : le langage est animé par des bibliothèques de fonctionsextensiblesextensibles
10
Étapes de la programmation en C
C est un langage compilé ( par opposition aux langagesinterprétés). Un programme C est décrit par un fichier texte,appelé fichier source traduit en langage machine (langageappelé fichier source traduit en langage machine (langagebinaire). Cette opération est effectuée par le compilateur C
La compilation se décompose en4 phases successives :
Préprocesseur : transformationpurement textuelle (inclusiond’autres fichiers sources…)C il ti t d it l fi hiCompilation : traduit le fichier pourgénérer un code en assembleurAssemblage : transforme le codeassembleur en un fichier binaire (assembleur en un fichier binaire (fichier objet)Edition de liens : liaison desdifférents fichiers objets et
11
différents fichiers objets etproduction de l’exécutable
Composantes d’un programme en C
Les instructions du langage C sont obligatoirement encapsulées dans desfonctions et il existe une fonction privilégiée appelée main qui est le pointd dé t d t tde départ de tout programme
Début du programme
#include <stdio.h> Inclusion des bibliothèques
p g
main() Point d'entrée du programme
{ int i=3;
printf("Bonjour %d fois!\n" i); Affichage de données
Déclaration des variables
printf( Bonjour %d fois!\n , i);
/*Ce programme affiche Bonjour 3 fois!*/
Affichage de données
Commentaire
12
/ Ce programme affiche Bonjour 3 fois! /
} Fin du programme
Commentaire
Chapitre 1
TYPES DE BASE, OPÉRATEURS ET EXPRESSIONS
13
Types simples
Un type définit l'ensemble des valeurs que peut prendre unevariable, le nombre d'octets à réserver en mémoire et les,opérateurs que l'on peut appliquer dessus
En C il n'y a que deux types de baseEn C, il n'y a que deux types de baseles entiersl é lles réels
14
Types simples
Type Description Octets
Entiers charchar caractères 1
intint entiers 2 ou 4
short [short [intint]] entiers courts 2
long [long [intint]] entiers longs 4
Réels floatfloat nombres décimaux 4
doubledouble nombres décimaux de précision supérieure 8doubledouble nombres décimaux de précision supérieure 8
long doublelong double nombres décimaux encore plus précis 10 ou 12
RemarquesRemarquesUn caractère (char) est un nombre entier (il s'identifie à son code ASCII). Parconséquent, une variable de type char peut contenir une valeur entre -128 et127 et elle peut subir les mêmes opérations que les variables du type short int127 et elle peut subir les mêmes opérations que les variables du type short, intou longSi l'on ajoute le préfixe unsigned à l'une de ces variantes, alors on manipule des
ti i é
15
entiers non signés
Définition d’une variable
Déclaration d'une variableType nom_de_la_variable [= valeur];
TypeTypeConditionne le format de la variable en mémoire
NomNomUnique pour chaque variableCommence toujours par une lettreCommence toujours par une lettreDifférenciation minuscule-majuscule
ValeurValeurPeut évoluer pendant l'exécutioninitialisation grâce à l'opérateur d'affectation (=)
Exempleint nb; char c = 'a';float pi = 3.14; double r = 6.2879821365;
16
Définition d’une constante
En utilisant l'attribut const, la valeur d'une variable ne change pas au coursde l’exécution du programme
Exemples
const int MAX = 767 ; const char NEWLINE = '\n' ;const int MAX = 767 ; const char NEWLINE = \n ;
La directive #define permet de donner un nom à une constante. Dans cecas le préprocesseur effectue le remplacement correspondant avant lacas le préprocesseur effectue le remplacement correspondant avant lacompilation
ExemplesExemples
#define TVA 20
#define PI 3.14159
17
…
int a; a=TVA; /*a prend la valeur 20*/
Opérateurs, Expressions & Instructions
Les opérateurs sont des symboles qui permettent de manipuler desvariables, c'est-à-dire effectuer des opérations
Une expression est un calcul qui donne une valeur comme résultat et ayantun type
Une expression peut comporter des constantes, des variables et desappels de fonctions combinés entre eux par des opérateurs et former ainsi
i lune expression complexe
Toute expression suivie d'un point virgule devient une instruction
18
Les opérateurs (1/5)
Affectation simple
Syntaxe : <variable> = <expression> ;Sy ta e a ab e e p ess o ;
Exemple
t i t LONG 141 /* ff t ti d l t t */const int LONG = 141 ; /* affectation de valeurs constantes */
On peut enchaîner des affectations. L'évaluation commence de la droite vers lagauchegauche
Exemples
b=(a = 5 + 3)+1 a = 8 et b = 9
a = b = c = d équivalente à : a = (b = (c = d))
Opérateurs d'affectation étendue : += -= *= /= %=
Exemple
19
a = a + b s'écrit a += b
Les opérateurs (2/5)
Arithmétiquesaddition (+), soustraction (-), multiplication (*) et division (/)
Relationnels<, <= , > , >= , != , == (égalité) , =(affectation), ! (négation), || (ouou logique), &&(ett logique),%(reste de la division)le résultat de la comparaison est un entier valant
– 0 si le résultat de la comparaison est faux0 si le résultat de la comparaison est faux– 1 si le résultat de la comparaison est vrai
ExempleExemple a = 2+3 a = 3%2
(6 5)
valeur de a : 5valeur de a : 1
a = (6==5)a = (2!=3)a = (6<=3)
valeur de a : 0valeur de a : 1valeur de a : 0
20
a =((3==3) || (6<=3))a =((3==3) && (6<=3))
valeur de a : 1valeur de a : 0
Les opérateurs (3/5)
Opérateurs particuliers de COpérateurs d'incrémentation (++) et de décrémentation (--)P i é i é i l à 1Post-incrémentation <var>++; équivalente à <var>=<var>+1; Post-décrémentation <var>--; équivalente à <var>=<var>-1;Dans une expression, la valeur de la variable <var> est d'abord utilisée telle quelle, puis incrémentée (ou décrémentée)Exempleint a, b;a=b++; équivalent à a=b, b=b+1;
Pré-incrémentation ++<var>; équivalente à <var>=<var>+1;Pré incrémentation ++<var>; équivalente à <var> <var>+1;Pré-décrémentation --<var>; équivalente à <var>=<var>-1;Dans une expression, la valeur de la variable <var> est d'abord incrémentée (ou décrémentée) puis utiliséedécrémentée), puis utiliséeExempleint a, b;
21
a=++b; équivalent à b=b+1, a=b;
Les opérateurs (4/5)
Opérateurs particuliers de C : Exemple
Avant chaque opération, i et j contiennent respectivement 3 et 15a t c aque opé at o , et j co t e e t espect e e t 3 et 5
équivalent Résultati=i+1;j=j+1 i=4 et j=16
Opérationi++;++j;i=++j;i=j++;j=--i+5;
j=j+1; i=j; i=16 et j=16i=j; j=j+1; i=15 et j=16i=i-1; j=i+5; i=2 et j=7j=--i+5;
j=i--+5;i=i++;
i=i-1; j=i+5; i=2 et j=7j=i+5; i=i-1; i=2 et j=8i=i; i=i+1 i=4
22
Les opérateurs (5/5)
Opérateur séquentiel ( , )
<expr1> , <expr2>,…, <exprN>e p , e p , , e p
Exprime des calculs successifs dans une même expression
E lExemple
L'expression : x = 5 , x + 6 a pour valeur 11
Opérateur conditionnel (? :)
<expression> ? <expr1> : <expr2>
<expression> est évaluée. Si sa valeur est non nulle, alors la valeur de <expr1> est retournée. Sinon, c'est la valeur de <expr2> qui est renvoyée
Exemple
c = a > b ? a : b
23
si a est le plus grand, alors affectation à c le contenu de a sinon affectation à c le contenu de b
Priorité et associativité des opérateurs
Lors de l'évaluation des différentes parties d'une expression, les opérateursrespectent certaines lois de priorité et d'associativité
Exemples
Prenons a = 3 et b = 4, l’expression a *= b += 5 s'évalue :
a *= ( b += 5 )
a *= ( b = b + 5 )
Priorité Opérateur Associativité 1 ()a ( b b + 5 )
a *= ( b = 9 )
1 ()2 ! ++ -- (Pré)3 * / %
a *= 9
a = a * 9
4 + -5 == !=6 &&a = 27
27
6 &&7 = += *=
24
Exercice 1
Donner la valeur de i, j, n aux endroits demandés#include<stdio.h> Priorité Opérateur Associativitémain(){i t i j
Priorité Opérateur Associativité 1 ()2 ! ++ -- (Pré)
int i, j, n;i=0;n=i++;A : i = ? n = ?
( )3 * / %4 + - *
i=10; n=++i;B : i = ? n = ?
5 == !=6 &&7 = += *=i=20; j=5; n=i++ * ++j;
C : i = ? n = ?i=15; n=i+=3;
7 = += *=
i=15; n=i+=3;D : i = ? j = ? n = ?i=3; j=5; n=i*=--j;
25
E : i = ? j = ? n = ?}
Exercice 2
Donner la valeur de n, p, q, r aux endroits demandés
#include<stdio h> Priorité Opérateur Associativité#include<stdio.h>main(){ int n=10, p=5, q=10, r;
Priorité Opérateur Associativité 1 ()2 ! ++ -- (Pré){ , p , q , ;
r=n== (p=q);A : n = ? p = ? q = ? r = ?
( )3 * / %4 + - *
n= p=q=5;n+=p+=q;
5 == !=6 &&7 = += *=B: n = ? p = ? q = ?
q=n<p ? n++ : p++;
7 = += *=
q p p ;C: n = ? p = ? q = ?
q= n>p ? n++ : p++;
26
q= n>p ? n++ : p++;D: n = ? p = ? q = ?}
Chapitre 2Chapitre 2
QUELQUES FONCTIONS PARTICULIÈRESQUELQUES FONCTIONS PARTICULIÈRES
27
Affichage de la valeur d’une variable (1/4)
Utilisation de la fonction printf
Syntaxe : printf("format d’affichage" variables)Syntaxe : printf( format d affichage , variables)
format : texte, caractères de contrôle (‘\n’ , ‘\t’ , …) et spécificateurs de format
spécificateurs de format
FORMAT TYPE Description%d ou %i int entier relatif%u Unsigned int entier naturel (unsigned)%o int entier exprimé en octal%x int entier exprimé en hexadécimal%c char caractère%c char caractère%f float ou double réel en notation décimale%e float ou double réel en notation exponentielle
28
%s char* chaîne de caractères
Affichage de la valeur d’une variable (2/4)
Utilisation de la fonction printf
Syntaxe : printf("format d’affichage" variables)Syntaxe : printf( format d affichage , variables)
Exemple 1
int a = 120 ;int b = 60 ;
i tf("%i l %i t %i\ " b b)printf("%i plus %i est %i\n", a, b, a + b) ;//Affiche sur l'écran : 120 plus 60 est 180
E l 2Exemple 2
char b = 'A' ; /* le code ASCII de A est 65 */printf("Le caractère %c a le code %i\n", b, b) ;// Affiche sur l'écran : Le caractère A a le code 65
29
Affichage de la valeur d’une variable (3/4)
Caractères de contrôle Caractère de contrôle Significationg
`\a` Bip sonore`\t` Tabulation horizontale`\n` Passage à la ligne suivante`\r` Retour chariot`\0` Caractère nul\0 Caractère nul`\\` Trait oblique (antislash)`\?` Point d’interrogation\? Point d interrogation`\"` Guillemets`\f` Saut de page
Exemple`\v` Tabulation verticale
30
char b = 'A' ; printf("\tLe caractère %c a le code %i\n", b, b) ;
Affichage de la valeur d’une variable (4/4)
Utilisation de la fonction printf
Action sur le gabarit d’affichageAction sur le gabarit d affichage
Les entiers sont affichés par défaut sans espaces avant ou après
Les flottants avec six chiffres après le point
Pour agir sur l’affichage, un nombre est placé après % et précise le nombre de è i i à ilicaractères minimum à utiliser
Exemplesprintf("%f" , x );
x = 1.2345 1.234500x = 12.3456789 12.345678printf("%3d" , n );
n = 20 ^20n 20 20n = 3 ^^3n = 2358 2358
printf("%10f" , x ); //cadrage à droitex = 1.2345 ^^1.234500
31
n = -5200 -5200 printf("%-10f" , x ); //cadrage à gauchex = 1.2345 1.234500 ^^
Lecture d’une valeur saisie au clavier
Utilisation de la fonction scanf
Syntaxe : scanf("format de lecture" &variables)Syntaxe : scanf( format de lecture , &variables)
Exemple#include <stdio h>#include <stdio.h>main(){ int n, p; //déclaration des variables
printf("donner une valeur pour n : ");scanf("%d",&n); // lecture de la valeur de n
//affichage de la valeur de n//affichage de la valeur de nprintf("Merci pour %d\n",n);
printf("donner une valeur pour p : "); p ( p p )scanf("%d",&p); // lecture de la valeur de p
//affichage de la valeur de pprintf("Merci pour %d\n" p);
32
printf( Merci pour %d\n ,p); }
Affichage d’un caractère
Utilisation de la fonction putchar
Syntaxe : putchar(variable) // variable de type int ou charSyntaxe : putchar(variable) // variable de type int ou char
Exemple
char c = 'a' ;char b = '\n' ;putchar('x') ;putchar('x') ;/* affiche la lettre x */putchar('?') ;/* affiche le symbole ? *// affiche le symbole ? /putchar(b) ;/* retour à la ligne */putchar(65) ;putchar(65) ;/* affiche le caractère de code ASCII = 65 c.-à-d. la lettre A */putchar(c) ;/* affiche le caractère a */
33
/ affiche le caractère a /
Lecture d’un caractère
Utilisation de la fonction getchar()
Syntaxe : char variable = getchar()Syntaxe : char variable = getchar()
Cette fonction peut accepter un caractère saisi au clavier, y compris un caractère spécial et l'afficher sur l'écrancaractère spécial, et l afficher sur l écran
Exempleprintf("donner une valeur pour le caractère c ");
char c =getchar(); //scanf("%c",&c);
34
Exercice
Ecrire un programme qui permute et affiche les valeurs de trois variables A, B, C de type entier saisis par le clavier( A-->B, B-->C, C-->A)
Correction#include<stdio.h>main(){
i t A B Cint A, B, C;int AIDE; printf("Entrer la valeur de A, B et C :\t");p ( , );scanf("%d %d %d", &A,&B,&C);printf("A=%d \t B=%d\t C=%d\n",A,B,C);AIDE= A;A=C; C=B;B=AIDE;
35
B=AIDE;printf("A=%d \t B=%d\t C=%d\n",A,B,C);
}
Chapitre 3STRUCTURES DE CONTROLE
36
Structures de contrôle
Structures de choix
Structures itérativesStructures itératives
Instructions break et continue
37
Structures de choix (1/3)
Contrôlent le déroulement de l’enchaînement des instructions à l’intérieurd’un programme
Ces instructions peuvent être exprimées parDes instructions de branchement conditionnel : if ….elseDes instructions de branchement multiple : switch
38
Structures de choix (2/3)
Branchement conditionnel : if ….else
SyntaxeSyntaxeif( expression)
instruction;expression : expression quelconque.
Après évaluation, si elle est vraie,ou
if( expression) { Instruction1;
p , ,alors le 1er bloc d’instructions estexécuté, sinon c’est le 2ème bloc quiest exécuté{ Instruction1;
…}
else
est exécuté
bloc d’instructions : peut désignerune suite d’instructions délimitées par{ instruction2;
…}
une suite d instructions délimitées pardes accolades ou une seule instruction
Exemple if (a == b) a=1; //si a égal à b j’affecte 1 à a
39
if (a b) a 1; //si a égal à b j affecte 1 à aif (a == b) a=1; else a=0; //si a égal à b j’affecte 1 à a sinon j’affecte 0 à a
Exercice 1
Ecrire un programme qui affiche le plus grand de trois entiers saisis au clavier (A,B,C)
Correction#include<stdio.h>main(){ int A,B,C, Max;
printf("entrer les valeurs des trois entiers (A, B, C) : ");p ( e e es a eu s des o s e e s ( , , C) );scanf("%d %d %d",&A,&B,&C);if(A>B)
Max = A;Max = A;else Max = B;if(C>Max)
Max =(A>B?A:B)>C?(A>B?A:B):C;
Max = C;printf("le max de %d,%d et %d est : %d\n",A,B,C,Max);
}
40
}
Exercice 2
Ecrire un programme qui résout l'équation AX+B=0Bien évidemment, on n'oubliera pas tous les cas particuliers (notamment les cas"tout x est solution" et "pas de solution")
Correction#include<stdio.h>main(){ float A,B;{ float A,B;
printf("Tapez la valeur de A :"); scanf("%f",&A);printf("Tapez la valeur de B :"); scanf("%f",&B);if(!A) /* if(A 0)*/if(!A) /* if(A==0)*/
{ if(!B) /* if(B==0) */printf("Tout X est solution");else printf("Pas de solution");
}
41
}else printf("Une seule solution : %f", -B/A);
}
Structures de choix(3/3)
Branchement multiple : Switch
SyntaxeSyntaxeswitch (expression){
Teste si une expression prend unevaleur parmi une suite de
case constante_1 : [ suite_d'instructions_1 ] ;case constante_2 : [ suite_d'instructions_2 ];..............
pconstantes, et effectue lebranchement correspondant sic’est le cas
case constante_n : [ suite_d'instructions_n ];default : suite_d'instructions ;}
Exemple int a;
it h ( )switch (a) { case 7 : a=2; //si a égal à 7 j’affecte 2 à acase 4 : a=3; //si a égal à 4 j’affecte 3 à a
42
case 4 : a 3; //si a égal à 4 j affecte 3 à adefault : a=0; //sinon j’affecte 0 à a
}
Structures itératives (1/3)
Instructions itératives : whilewhile( expression ) on vérifie la condition avant d’exécuter( p ){
instructions;…
on vérifie la condition avant d exécuter la liste d’instructions
Exemple
}
Exemple
int a=0;while(a<4) //tant que a<4 j’exécute les instructions suivantes{
a++;printf ("La valeur de a :%d \n", a);
}}
43
Structures itératives (2/3)
Instructions itératives : do whiledo on exécute la liste d’instructions avant{
instructions;…
on exécute la liste d instructions avant de vérifier la condition
}while( expression );
Exemple
int a=0;do //faire les instructions suivantes{
// j’i é t d 1a++; // j’incrémente a de 1 printf ("La valeur de a :%d \n", a);
} hile(a<4) //tant q e a<4
44
while(a<4); //tant que a<4
Structures itératives(3/3)
Instructions itératives : for
for( exp1 ; exp2 ; exp3 ) exp1 : effectue les initialisations nécessairesfor( exp1 ; exp2 ; exp3 ) {
instructions;…
exp1 : effectue les initialisations nécessairesavant l’entrée dans la boucleexp2 : est le test de continuation de la boucle ; letest est évalué avant l’exécution du corps de la
E l
…}
test est évalué avant l exécution du corps de laboucleexp3 : est exécutée à la fin du corps de la boucle
Exemple
int a; Remarques :for( a=0; a<4 ; a++ ) { printf ("La valeur de a :%d \n", a);
En pratique, exp1 et exp3 contiennentsouvent plusieurs initialisations(instructions) séparées par des virgules
}( ) p p g
Les expressions exp1 et exp3 peuventêtre absentes (les points virgules doiventcependant apparaître) : for (;exp2;)
45
cependant apparaître) : for (;exp2;)
Exercice 1
Ecrire un programme qui calcule n! d’un entier saisi par le clavier. Utiliser une boucle while puis une boucle for
Correction// Avec la boucle while //Avec la boucle for#include <stdio.h>main(){
//Avec la boucle for#include <stdio.h>main(){{
int n,i=1,fact= 1;printf("ENTRER UN ENTIER : ");
f("%d" & )
{int n,i,fact= 1;printf("ENTRER UN ENTIER: ");
scanf("%d",&n);while (i<=n){
scanf("%d",&n);for (i=1;i<=n;i++) fact= fact * i;
fact= fact * i;i++;
}
fact fact i;printf("\nn = %d n! = %d",n,fact);}
46
}printf("\nn = %d n! = %d",n,fact);}
Exercice 2
Ecrire un programme qui affiche tous les diviseurs d’un entier n saisi par le clavier. Utiliser la boucle do…while
Correction#include <stdio.h>main(){
int div=1,n;printf("ENTRER UN ENTIER: "); scanf("%d",&n);printf("\nLISTE DES DIVISEURS DE %d :",n);do
{ if(n%div==0)
printf("\t%d",div);
div++; }
while(div<=n/2);
47
while(div<=n/2);if(n!=1) printf("\t%d",n);
}
Instructions break et continue (1/2)
Instruction breakL’instruction break peut être employée à l’intérieur de n’importe quelle boucle(for ; while ; do…while ; switch)Elle permet l’abandon de la structure et le passage à la première instruction quisuit la structureEn cas de boucles imbriquées, break fait sortir de la boucle la plus interne
ExempleExemple
int i, j ;for (i = 1 ; i<=10 ; i++)
{ for (j = 1 ; j<=10 ; j++)
{{if(j == 5) break ;printf("%d\t", i * j) ;
}
48
}printf("\n") ;
}
Instructions break et continue (2/2)
Instruction continueL’instruction continue peut être employée à l’intérieur d’une structure de typeboucle (for ; while ; do…while )Elle permet l’abandon de l’itération courante et fait passer directement àl’itération suivante d’une boucleL’instruction continue concerne la boucle la plus interne
Exempleint i, j ;
Valeursi=2 et j=3 i : 2 et j : 3
Affichage
……//Initialisationsfor ( ; i>0 && j>0; i--,j--)
{
i=2 et j=3
i=6 et j=3
i : 2 et j : 3i : 1 et j : 2i : 6 et j : 3i : 4 et j : 1{
if(i == 5) continue;printf("i : %d et j : %d\n", i, j) ;if(j == 5) break ;
i=3 et j=5
i : 4 et j : 1i : 3 et j : 5
49
if(j 5) break ;}
Exercice 1
Que fait ce programme?#include <stdio.h>main(){ int n=0;do{if(n%2==0) { printf("%d est pair \n ",n);
n+=3;continue;
}if(n%3==0) { printf("%d est multiple de 3 \n ",n);
5n+=5;}
if(n%5==0) { printf("%d est multiple de 5 \n ",n); breakbreak;
}n+=1;}
50
}while(1);}
Exercice 2
Écrire un programme qui fournit la liste des nombres premiers inférieurs à 50
Correction#include <stdio.h>main(){
int n; /* variable destinée à contenir les entiers inférieurs à 50 */int i;printf("1, 2"); /* Les deux premiers nombres premiers sont affichés */
/* Pour les entiers entre 3 et 50, on vérifie s'ils ont un diviseur autre que 1 */for (n = 3; n <= 50; n+=2) /* Vérifier seulement les nombres impairs*/{
f (i 3 i*i i 2) /* Vé ifi l t l’ i t d’ di i i i */for (i = 3; i*i <= n; i+=2) /* Vérifier seulement l’existence d’un diviseur impair*/if (n%i==0) break;
if (i*i > n) printf(", %d", n);}
51
}}