1 of 39

�� LANGAGE DE � PROGRAMMATION: C

F. Karami

2 of 39

La syntaxe du langage�

  • Les structures de contrôle (Suite)

  • La récursivité

  • Les conversions de types

  • Principales fonctions d’entrées-sorties standard

*

Programmer en langage C

2

3 of 39

Les structures de contrôle : Switch

  • L’instruction switch est l’instruction de contrôle la plus souple du langage C. Elle permet à votre programme d’exécuter différentes instructions en fonction d’une expression qui pourra avoir plus de deux valeurs.

  • On l’appelle aussi l’instruction d’aiguillage. Elle teste si une expression prend une valeur parmi une suite de constantes, et effectue le branchement correspondant si c’est le cas.

*

Programmer en langage C

3

La syntaxe du langage C

4 of 39

Les structures de contrôle : Switch

  • Syntaxe

switch (<condition>) {

case <valeur 1> : <action 1>; break;

case <valeur 2> : <action 2>; break;

default : <action n>;

}

*

Programmer en langage C

4

La syntaxe du langage C

5 of 39

Les structures de contrôle : Switch

  • Remarques :
    • Le fonctionnement de cette instruction est le suivant :
      • expression est évaluée ;
      • s’il existe un énoncé case avec une constante qui est égale à la valeur de l’expression, le contrôle est transféré à l’instruction qui suit cet énoncé;
      • si un tel case n’existe pas, et si énoncé default existe, alors le contrôle est transféré à l’instruction qui suit l’énoncé default ;
      • si la valeur de l’expression ne correspond à aucun énoncé case et s’il n’y a pas d’énoncé default, alors aucune instruction n’est exécutée.
    • Attention.
      • Lorsqu’il y a branchement réussi à un case, toutes les instructions qui le suivent sont exécutées, jusqu’à la fin du bloc ou jusqu’à une instruction de rupture (break).

*

Programmer en langage C

5

La syntaxe du langage C

6 of 39

Les structures de contrôle : Switch

#include<stdio.h>

main() {

int a,b,y;

char operateur;

printf(‘’ Entrez un opérateur (+, -,* ou /):’’);

scanf(‘’%c’’,& operateur);

printf(‘’ Entrez deux entiers:’’);

scanf(‘’%d’’,&a); scanf(‘’ %d’’,&b);

switch(operateur){

case’-’ : y=a-b; printf(‘’%d’’,y);break;

case’+’ : y=a+b; printf(‘’%d’’,y); break;

case’*’ : y=a*b; printf(‘’%d’’,y); break;

case’/’ : y=a/b; printf(‘’%d’’,y); break;

default : printf(‘’opérateur inconnu\n’’);break;

}

}

*

Programmer en langage C

6

La syntaxe du langage C

7 of 39

Les structures de contrôle : while

  • L’instruction while permet de répéter des instructions, tant qu'une condition est vérifiée.
  • Syntaxe
    • Forme 1

while (condition)

une-instruction;

    • Forme 2

while (condition) {

des instructions;

}

}

*

Programmer en langage C

7

La syntaxe du langage C

8 of 39

Les structures de contrôle :while

  • La boucle while fonctionne de la façon suivante:
    1. La condition est évaluée,
    2. si cette condition est fausse, l’instruction while se termine,
    3. si la condition est vraie les instructions sont exécutées
    4. l’exécution reprend à l’étape 1.
  • Exemple

#include <stdio.h>

main (){

int i=1, N;

printf(” donnez N=\n"); �scanf("%d",&N);

while (i <= N) {

printf("%d ", i); �i = i+1;}

system(”pause");}

*

Programmer en langage C

8

La syntaxe du langage C

9 of 39

Les structures de contrôle :while

  • while imbriqué

#define MAX 4

int i=0,j;

while (i < MAX ) {

j=0;

while (j < MAX ) {

printf(" position : %d \t %d\n",i,j);

j++;

}

i++;

}

*

Programmer en langage C

9

La syntaxe du langage C

10 of 39

Les structures de contrôle : do-while

  • L'instruction do-while, exécute le bloc d'instructions tant qu’une condition reste vraie. Dans cette boucle le test de la condition s’effectue à la fin de la boucle.
  • Syntaxe
    • Forme 1

do

une-instruction;

while (condition);�

    • Forme 2

do {

Des instructions;

} while (condition);

*

Programmer en langage C

10

La syntaxe du langage C

11 of 39

Les structures de contrôle : do-while

  • Exemple :

#include <stdio.h>

#define MAX 4

main() {

int i=MAX;

do {

printf("Valeur de i : %i\n",i);

i++;

} while (i < MAX);

}

*

Programmer en langage C

11

La syntaxe du langage C

12 of 39

Les structures de contrôle : for

  • A l’instar des instructions while et do-while l’instruction for permet d’exécuter un certain nombre de fois un bloc d’une ou plusieurs instructions.
  • Syntaxe:
    • for( [expression1] ; [expression2] ; [expression3 ]) {

liste d’instructions

}

    • Les crochets [ et ] signifient que leur contenu est facultatif
    • Dans la construction de for :
      • expression1 : effectue les initialisations nécessaires avant l’entrée dans la boucle;
      • expression2 : est le test de continuation de la boucle ; le test est évalué avant l’exécution du corps de la boucle;
      • expression3 : est évaluée à la fin du corps de la boucle.

*

Programmer en langage C

12

La syntaxe du langage C

13 of 39

Les structures de contrôle : for

  • Remarques
    • En pratique, expression1 et expression3 contiennent souvent plusieurs initialisations séparées par des virgules.
      • for(i=0,j=1,k=5;….;)
    • Les expressions expression1 et expression3 peuvent être absente(les points-virgules doivent apparaître.
      • i=1; �for(;i<=5;) {�printf(‘’%d fois\n’’,i);�i++;}
    • Lorsque expression2 est absente, l’expression correspondante est considérée comme vraie. Par conséquent, for(;;) est une boucle infinie

*

Programmer en langage C

13

La syntaxe du langage C

14 of 39

Les structures de contrôle : for

  • Remarques :par définition l’instruction de for

for ( expression1 ; expression2 ; expression3 )

{

liste d’instructions;

}

est équivalente à

expression1;

while(expression2)

{

liste d’instructions;

expression3;

}

*

Programmer en langage C

14

La syntaxe du langage C

15 of 39

Les structures de contrôle :for

  • Exemples
    • Programme pour calculer la somme de 1 à 100

int n,total;

for(total=0,n=1;n<=100;n++)

total+=n;�

printf(’’la sommes des nombres de 1 à 100 est %d \n’’,total);

    • Programme pour calculer la factorielle d’un entier n:

int n, i,fact;

for(fact=1,i=1;i<=n;i++)

fact*=i;

printf(’’%d!= %d \n’’,n,fact);

*

Programmer en langage C

15

La syntaxe du langage C

16 of 39

Les structures de contrôle : break, goto et continue

  • Instruction break
    • On a vu le rôle de l’instruction break; au sein d’une instruction de branchement multiple switch.
    • L’instruction break peut, plus généralement, être employée à l’intérieur de n’importe quelle boucle (for ; while ; do-while). Elle permet l’abandon de la structure et le passage à la première instruction qui suit la structure.
    • En cas de boucles imbriquées, break fait sortir de la boucle la plus interne.

*

Programmer en langage C

16

La syntaxe du langage C

17 of 39

Les structures de contrôle : break, goto et continue

  • Instruction break : exemple

#include <stdio.h>

main( ){

int i;

for (i = 1 ; i<=10 ; i++){

printf(’’début tour %d\n’’ ,i) ;

printf(’’ bonjour\n’’);

if (i ==3) break ;

printf(" fin tour %d\n", i) ;

}

printf(" après la boucle \n") ;

}

*

Programmer en langage C

17

La syntaxe du langage C

18 of 39

Les structures de contrôle : break, goto et continue

  • Instruction break : exemple

#include <stdio.h>

main( ){

int i;

for (i = 1 ; i<=10 ; i++){

printf(’’début tour %d\n’’ ,i) ;

printf(’’ bonjour\n’’);

if (i ==3) break ;

printf(" fin tour %d\n", i) ;

}

printf(" après la boucle \n") ;

}

*

Programmer en langage C

18

La syntaxe du langage C

Evaluation:

Début tour 1

bonjour

fin tour 1

Début tour 2

bonjour

fin tour 2

Début tour 3

bonjour

Après la boucle

19 of 39

Les structures de contrôle : break, goto et continue

  • Instruction continue

    • L’instruction continue peut être employée à l’intérieur d’une structure de type boucle (for ; while ; do-while ).

    • Elle produit l’abandon de l’itération courante et fait passer directement à l’itération suivante d’une boucle.

    • L’instruction continue concerne la boucle la plus proche.

*

Programmer en langage C

19

La syntaxe du langage C

20 of 39

Les structures de contrôle : break, goto et continue

  • Instruction continue
  • Exemple :

main(){

int i;

for(i=1;i<=10;i++){

printf(’’début tour %d\n’’ ,i) ;

if (i <4) continue ;

printf(’’ bonjour\n’’);

}

}

*

Programmer en langage C

20

La syntaxe du langage C

Evaluation:

Début tour 1

Début tour 2

Début tour 3

Début tour 4

Bonjour

Début tour 5

Bonjour

21 of 39

Les structures de contrôle : break, continue et goto

  • Instruction goto
    • Elle permet le branchement en un emplacement quelconque du programme.

main(){

int i;

for(i=1;i<=10;i++) { � printf(’’début tour %d\n’’ ,i) ;

printf(’’ bonjour\n’’);

if (i ==3) goto sortie ;

printf(’’ fin tour%d\n", i);

}

sortie:printf (" après la boucle\n") ;

}

*

Programmer en langage C

21

La syntaxe du langage C

Evaluation:

Début tour 1

Bonjour

fin tour 1

Début tour 2

bonjour

fin tour 2

Début tour 3

Bonjour

Après la boucle

22 of 39

La récursivité

  • Le langage C autorise des appels de fonctions. Celle-ci peut prendre deux aspects:

    • Récursivité directe: une fonction comporte, dans sa définition, au moins un appel à elle-même.

    • Récursivité croisée: l’appel d’une fonction entraîne celui d’une autre fonction qui, à son tour, appelle la fonction initiale(le cycle pouvant d’ailleurs faire intervenir plus de deux fonctions)

*

Programmer en langage C

22

La syntaxe du langage C

23 of 39

La récursivité

  • Exemple

#include <stdio.h>

int fact (int x) {

printf (“Computing fact %d\n”, x) ;

if (x == 1)

return 1 ;

else

return( x * fact (x-1)) ;

}

main (){

printf (“5! = %d\n”, fact (5)) ;

}

*

Programmer en langage C

23

La syntaxe du langage C

24 of 39

Les conversions de types

  • La conversion de type est un outil très puissant, elle doit donc être utilisée avec prudence. Le compilateur fait de lui-même des conversions lors de l’évaluation des expressions. Pour cela il applique des règles de conversion implicite. Ces règles ont pour but la perte du minimum d’information dans l’évaluation de l’expression. Ces règles sont les suivantes:
    • Règle de Conversion Implicite
      • Convertir les éléments de la partie droite d’une expression d’affectation dans le type de la variable ou de la constante le plus riche.
      • Faire les opérations de calcul dans ce type.
      • Puis convertir le résultat dans le type de la variable affectée.

*

Programmer en langage C

24

La syntaxe du langage C

25 of 39

Les conversions de types

  • La notion de richesse d’un type est précisée dans la norme [ISO89]. Le type dans lequel le calcul d’une

expression à deux opérandes doit se faire est donné par les règles suivantes :

    • si l’un des deux opérandes est du type long double alors le calcul doit être fait dans le type long double ;
    • sinon, si l’un des deux opérandes est du type double alors le calcul doit être fait dans le type double ;
    • sinon, si l’un des deux opérandes est du type float alors le calcul doit être fait dans le type float ;
    • si l’un des deux opérandes est du type unsigned long int alors le calcul doit être fait dans ce type ;
    • si l’un des deux opérandes est du type long int alors le calcul doit être fait dans le type long int ;

*

Programmer en langage C

25

La syntaxe du langage C

26 of 39

Les conversions de types

  • Hiérarchie des conversions arithmétiques habituelles est la suivante:

*

Programmer en langage C

26

La syntaxe du langage C

La syntaxe du langage C

long double

double

Float

unsigned long long

long long

unsigned long

long

unsigned int

int

27 of 39

Les conversions de types

  • Conversion implicite
    • Il est possible de forcer la conversion d’une variable (ou d’une expression) dans un autre type avant de l’utiliser par une conversion implicite. Cette opération est appelée “cast”. Elle se réalise de la manière suivante :

(type) expression

    • Prenons pour exemple l’expression : i = (int) f + (int) d ;
    • f et d sont convertis en int, puis additionnés. Le résultat entier est rangé dans i.

*

Programmer en langage C

27

La syntaxe du langage C

28 of 39

Les conversions de types

  • Exemple

*

Programmer en langage C

28

La syntaxe du langage C

float f ; double d ; int i ; long li ;

li = f + i ;

i est transformé en float puis additionné à f,

le résultat est transformé en long et rangé dans li.

d = li + i ;

i est transformé en long puis additionné à li,

le résultat est transformé en double et rangé dans d.

i = f + d ;

f est transformé en double, additionné à d,

le résultat est transformé en int et rangé dans i.

29 of 39

Principales fonctions d’entrées-sorties standard

  • Il s’agit des fonctions de la librairie standard stdio.h utilisées avec les unités classiques d’entrées-sorties, qui sont respectivement le clavier et l’écran.
  • Ces fonctions sont:
    • getchar
    • putchar
    • puts
    • printf
    • scanf

*

Programmer en langage C

29

La syntaxe du langage C

30 of 39

Principales fonctions d’entrées-sorties standard

  • La fonction getchar
    • La fonction getchar permet la récupération d’un seul caractère à partir du clavier. La syntaxe d’utilisation de getchar est la suivante : var=getchar();
    • Notez que var doit être de type char. Exemple :

#include <stdio.h>

main() {

char c;

printf("Entrer un caractère:");

c = getchar();

printf("Le caractère entré est %c\n",c);

}

*

Programmer en langage C

30

La syntaxe du langage C

31 of 39

Principales fonctions d’entrées-sorties standard

  • La fonction putchar
    • permet l’affichage d’un seul caractère sur l’écran de l’ordinateur. putchar constitue alors la fonction complémentaire de getchar. La syntaxe d’utilisation est la suivante : putchar(var);
    • où var est de type char. Exemple :

#include <stdio.h>

main() {

char c;

printf("Entrer un caractère:");

c = getchar();

putchar(c);

}

*

Programmer en langage C

31

La syntaxe du langage C

32 of 39

Principales fonctions d’entrées-sorties standard

  • La fonction puts
    • Syntaxe : puts(ch);
    • Cette fonction affiche, sur stdout, la chaîne de caractères ch puis positionne le curseur en début de ligne suivante. puts retourne EOF en cas d’erreur.
    • Exemple :

#include <stdio.h>

main() {

char * toto = "on est super content!";

puts(toto);

}

*

Programmer en langage C

32

La syntaxe du langage C

33 of 39

Principales fonctions d’entrées-sorties standard

  • La fonction d’écriture à l’écran formattée printf
    • La fonction printf est une fonction d’impression formatée, ce qui signifie que les données sont converties selon le format particulier choisi. Sa syntaxe est la suivante :

printf("chaîne de contrôle", expression1, . . . , expressionn);

    • La chaîne de contrôle contient le texte à afficher et les spécifications de format correspondant à chaque expression de la liste. Les spécifications de format ont pour but d’annoncer le format des données à visualiser. Elles sont introduites par le caractère %. Le i-ème format de la chaîne de contrôle sera remplacé par la valeur effective de expressioni.

*

Programmer en langage C

33

La syntaxe du langage C

34 of 39

Principales fonctions d’entrées-sorties standard

  • La fonction d’écriture à l’écran formattée printf
    • Les différents formats de la fonction printf

*

Programmer en langage C

34

La syntaxe du langage C

format

Conversion en

écriture

%d

int

décimale signée

%ld

long int

décimale signée

%u

unsigned int

décimale non signée

%lu

unsigned long

décimale non signée

%o

unsigned int

Octale non signée

%lo

unsigned long

Octale non signée

%x

unsigned int

Héxadécimal non signée

%lx

unsigned long

Héxadécimal non signée

35 of 39

Principales fonctions d’entrées-sorties standard

  • La fonction d’écriture à l’écran formattée printf
    • Les différents formats de la fonction printf

*

Programmer en langage C

35

La syntaxe du langage C

format

Conversion en

écriture

%f

float

décimale virgule fixe

%lf

Long float

décimale virgule fixe

%e

double

décimale notation exponentielle

%le

long double

décimale notation exponentielle

%g

double

décimale, représentation la plus courte parmi %f et %e

%lg

long double

décimale, représentation la plus courte parmi %lf et %le

%c

unsigned char

caractère

%s

char*

Chaîne de caractères

36 of 39

Principales fonctions d’entrées-sorties standard

  • La fonction d’écriture à l’écran formattée printf
    • Les différents formats de la fonction printf
    • Exemple

printf("|% d|\n",14); | 14|

printf("|% d|\n",-14); |-14|

printf("|%x|\n",0x56ab); |56ab|

printf("|%X|\n",0x56ab); |56AB|

printf("|%10d|\n",14); | 14|

printf("|%f|\n",1.234567890123456789e5); |123456.789012|

printf("|%.4f|\n",1.234567890123456789e5); |123456.7890|

*

Programmer en langage C

36

La syntaxe du langage C

37 of 39

Principales fonctions d’entrées-sorties standard

  • La fonction d’écriture à l’écran formattée printf
    • Les différents formats de la fonction printf
    • Exemple�

printf("|%e|\n",1.234567890123456789e5); |1.234568e+05|

printf("|%.4e|\n",1.234567890123456789e5); |1.2346e+05||

printf("|%.4g|\n",1.234567890123456789e-5); |1.235e-05|

printf("|%.4g|\n",1.234567890123456789e-3); |0.001235|

printf("|%.8g|\n",1.234567890123456789e5); |123456.79|

*

Programmer en langage C

37

La syntaxe du langage C

38 of 39

Principales fonctions d’entrées-sorties standard

  • La fonction de saisie scanf
    • La fonction scanf permet de récupérer les données saisies au clavier, dans le format spécifié. Ces données sont stockées aux adresses spécifiées par les arguments de la fonction scanf (on utilise donc l’opérateur d’adressage & pour les variables scalaires). scanf retourne le nombre de valeurs effectivement lues et mémorisées .La syntaxe est la suivante :

scanf("chaîne de contrôle", & arg1, . . . , & argn);

    • La chaîne de contrôle indique le format dans lequel les données lues sont converties. Comme pour printf, les conversions de format sont spécifiées par un caractère précédé du signe %.

*

Programmer en langage C

38

La syntaxe du langage C

39 of 39

Principales fonctions d’entrées-sorties standard

  • La fonction de saisie scanf
    • Exemple

#include <stdio.h>

main() {

int i ;

printf("entrez un entier sous forme hexadecimale i = ");

scanf("%x",&i);

printf("i = %d\n",i);

}

*

Programmer en langage C

39

La syntaxe du langage C