13
Mdl Al ith i Module : Algorithmique Cours Programmation en langage C SAIDI Rajaa 2013-2014 SAIDI Rajaa [email protected] 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 C 2. 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 C Brian W. Kernighan, Dennis M. Ritchie : Le langage C : Norme ANSI – éditions D d S t b 2004 Dunod, Septembre 2004 Robert Sedgewick : Algorithmes en langage C – édition DUNOD, 2005 Exercices en C Exercices en C C. Delannoy : Programmer en langage C avec exercices corrigés, 5e édition 2009 3 Plan du cours (1/2) Introduction au langage C Historique du langage C Caractéristiques du langage C Étapes de la programmation en C C t d’ C Composantes d’un programme en C Chapitre 1- Types de base, Opérateurs et Expressions Les types simples Déclaration des variables simples Les opérateurs standards Les opérateurs standards Priorité et associativité des opérateurs Chapitre 2 Quelques fonctions particulières Chapitre 2- Quelques fonctions particulières Les Entrées (Input) Les Sorties (Output) 4

Cours Prog1 SAIDI R Chap1 2 3

Embed Size (px)

Citation preview

Page 1: Cours Prog1 SAIDI R Chap1 2 3

M d l Al ith iModule : Algorithmique

Cours Programmation en langage C

SAIDI Rajaa

2013-2014

SAIDI [email protected]

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

Page 2: Cours Prog1 SAIDI R Chap1 2 3

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, …)

Page 3: Cours Prog1 SAIDI R Chap1 2 3

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

Page 4: Cours Prog1 SAIDI R Chap1 2 3

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

Page 5: Cours Prog1 SAIDI R Chap1 2 3

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

Page 6: Cours Prog1 SAIDI R Chap1 2 3

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

Page 7: Cours Prog1 SAIDI R Chap1 2 3

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

Page 8: Cours Prog1 SAIDI R Chap1 2 3

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); }

Page 9: Cours Prog1 SAIDI R Chap1 2 3

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

Page 10: Cours Prog1 SAIDI R Chap1 2 3

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

}

Page 11: Cours Prog1 SAIDI R Chap1 2 3

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

Page 12: Cours Prog1 SAIDI R Chap1 2 3

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") ;

}

Page 13: Cours Prog1 SAIDI R Chap1 2 3

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

}}