Séance 3 : conversions de type, flot de contrôle Luca...

60
1/26 . Conseils Trucs Conversions de type Flot de contrôle Introduction à la programmation en C Séance 3 : conversions de type, flot de contrôle Luca SAIU http://ageinghacker.net IUT de Villetaneuse, Université Paris 13 Septembre 2018 Luca Saiu http://ageinghacker.net/teaching Introduction à la programmation en C : séance 3

Transcript of Séance 3 : conversions de type, flot de contrôle Luca...

Page 1: Séance 3 : conversions de type, flot de contrôle Luca SAIUageinghacker.net/teaching/programming-c/slides-3.pdf · 1/26 . Conseils Trucs Conversions de type Flot de contrôle Introduction

1/26 .

Conseils Trucs Conversions de type Flot de contrôle

Introduction à la programmation en CSéance 3 : conversions de type, flot de contrôle

Luca SAIU

http://ageinghacker.net

IUT de Villetaneuse, Université Paris 13

Septembre 2018

Luca Saiu http://ageinghacker.net/teaching Introduction à la programmation en C : séance 3

Page 2: Séance 3 : conversions de type, flot de contrôle Luca SAIUageinghacker.net/teaching/programming-c/slides-3.pdf · 1/26 . Conseils Trucs Conversions de type Flot de contrôle Introduction

2/26 .

Conseils Trucs Conversions de type Flot de contrôle

Sommaire1 Conseils pratiques

Erreurs et warningsGroupage de commandes : sous-commandes et blocs

2 Approfondissements et rappelsif imbriquésÉvaluation short-circuitEntrée

3 Conversions de typeConversions de type implicitesConversions de type explicites

4 Flot de contrôleProgrammation non structurée : sauts gotoBoucles whileBoucles do. . . whileBoucles for

Luca Saiu http://ageinghacker.net/teaching Introduction à la programmation en C : séance 3

Page 3: Séance 3 : conversions de type, flot de contrôle Luca SAIUageinghacker.net/teaching/programming-c/slides-3.pdf · 1/26 . Conseils Trucs Conversions de type Flot de contrôle Introduction

3/26 .

Conseils Trucs Conversions de type Flot de contrôle

Rappel

Mon site web : http://ageinghacker.net

vous trouvez la page web officielle du cours en suivant le lien“Teaching” ;

je suis facile à contacter (n’utilisez pas l’ENT ) ;

si vous voulez le livre sur C (“GNU C Intro and Reference”,Stallman and Rothwell, en anglais) demandez-moi.

Luca Saiu http://ageinghacker.net/teaching Introduction à la programmation en C : séance 3

Page 4: Séance 3 : conversions de type, flot de contrôle Luca SAIUageinghacker.net/teaching/programming-c/slides-3.pdf · 1/26 . Conseils Trucs Conversions de type Flot de contrôle Introduction

4/26 .

Conseils Trucs Conversions de type Flot de contrôle GCC feedback Groupage

Compilation : warnings et erreurs

En cas de warnings, la compilation n’échoue pas, et GCCproduit un fichier exécutable—même si suspect.

En cas d’erreurs GCC ne va pas générer un fichierexécutable : si vous avez déjà un fichier compilé ayant lemême nom, l’ancien fichier reste là.

Donc tester le fichier exécutable est inutile après uneerreur de compilation : c’est une ancienne version !

Luca Saiu http://ageinghacker.net/teaching Introduction à la programmation en C : séance 3

Page 5: Séance 3 : conversions de type, flot de contrôle Luca SAIUageinghacker.net/teaching/programming-c/slides-3.pdf · 1/26 . Conseils Trucs Conversions de type Flot de contrôle Introduction

4/26 .

Conseils Trucs Conversions de type Flot de contrôle GCC feedback Groupage

Compilation : warnings et erreurs

En cas de warnings, la compilation n’échoue pas, et GCCproduit un fichier exécutable—même si suspect.

En cas d’erreurs GCC ne va pas générer un fichierexécutable : si vous avez déjà un fichier compilé ayant lemême nom, l’ancien fichier reste là.

Donc tester le fichier exécutable est inutile après uneerreur de compilation : c’est une ancienne version !

Luca Saiu http://ageinghacker.net/teaching Introduction à la programmation en C : séance 3

Page 6: Séance 3 : conversions de type, flot de contrôle Luca SAIUageinghacker.net/teaching/programming-c/slides-3.pdf · 1/26 . Conseils Trucs Conversions de type Flot de contrôle Introduction

4/26 .

Conseils Trucs Conversions de type Flot de contrôle GCC feedback Groupage

Compilation : warnings et erreurs

En cas de warnings, la compilation n’échoue pas, et GCCproduit un fichier exécutable—même si suspect.

En cas d’erreurs GCC ne va pas générer un fichierexécutable : si vous avez déjà un fichier compilé ayant lemême nom, l’ancien fichier reste là.

Donc tester le fichier exécutable est inutile après uneerreur de compilation : c’est une ancienne version !

Luca Saiu http://ageinghacker.net/teaching Introduction à la programmation en C : séance 3

Page 7: Séance 3 : conversions de type, flot de contrôle Luca SAIUageinghacker.net/teaching/programming-c/slides-3.pdf · 1/26 . Conseils Trucs Conversions de type Flot de contrôle Introduction

5/26 .

Conseils Trucs Conversions de type Flot de contrôle GCC feedback Groupage

Erreurs fréquentes : indentation

Les sous-commandes d’une commande sont écrits, dans le boncode, décalées à doite :

if (x < 0)printf ("x est négative\n");

Ce décalage (en anglais “indentation”) n’est pas importantpour le compilateur C (différemment de Python).

Pour les humains, c’est très important.Quand vous écrivez du code en raisonnant, car vous n’êtes pasencore convaincus de sa correction, vous devez savoirqu’est-ce vous êtes en train d’essayer.

Dans le doute, groupez avec des {. . . }.

Luca Saiu http://ageinghacker.net/teaching Introduction à la programmation en C : séance 3

Page 8: Séance 3 : conversions de type, flot de contrôle Luca SAIUageinghacker.net/teaching/programming-c/slides-3.pdf · 1/26 . Conseils Trucs Conversions de type Flot de contrôle Introduction

5/26 .

Conseils Trucs Conversions de type Flot de contrôle GCC feedback Groupage

Erreurs fréquentes : indentation

Les sous-commandes d’une commande sont écrits, dans le boncode, décalées à doite :

if (x < 0)printf ("x est négative\n");

Ce décalage (en anglais “indentation”) n’est pas importantpour le compilateur C (différemment de Python).

Pour les humains, c’est très important.Quand vous écrivez du code en raisonnant, car vous n’êtes pasencore convaincus de sa correction, vous devez savoirqu’est-ce vous êtes en train d’essayer.

Dans le doute, groupez avec des {. . . }.

Luca Saiu http://ageinghacker.net/teaching Introduction à la programmation en C : séance 3

Page 9: Séance 3 : conversions de type, flot de contrôle Luca SAIUageinghacker.net/teaching/programming-c/slides-3.pdf · 1/26 . Conseils Trucs Conversions de type Flot de contrôle Introduction

5/26 .

Conseils Trucs Conversions de type Flot de contrôle GCC feedback Groupage

Erreurs fréquentes : indentation

Les sous-commandes d’une commande sont écrits, dans le boncode, décalées à doite :

if (x < 0)printf ("x est négative\n");

Ce décalage (en anglais “indentation”) n’est pas importantpour le compilateur C (différemment de Python).

Pour les humains, c’est très important.Quand vous écrivez du code en raisonnant, car vous n’êtes pasencore convaincus de sa correction, vous devez savoirqu’est-ce vous êtes en train d’essayer.

Dans le doute, groupez avec des {. . . }.

Luca Saiu http://ageinghacker.net/teaching Introduction à la programmation en C : séance 3

Page 10: Séance 3 : conversions de type, flot de contrôle Luca SAIUageinghacker.net/teaching/programming-c/slides-3.pdf · 1/26 . Conseils Trucs Conversions de type Flot de contrôle Introduction

5/26 .

Conseils Trucs Conversions de type Flot de contrôle GCC feedback Groupage

Erreurs fréquentes : indentation

Les sous-commandes d’une commande sont écrits, dans le boncode, décalées à doite :

if (x < 0)printf ("x est négative\n");

Ce décalage (en anglais “indentation”) n’est pas importantpour le compilateur C (différemment de Python).

Pour les humains, c’est très important.Quand vous écrivez du code en raisonnant, car vous n’êtes pasencore convaincus de sa correction, vous devez savoirqu’est-ce vous êtes en train d’essayer.

Dans le doute, groupez avec des {. . . }.

Luca Saiu http://ageinghacker.net/teaching Introduction à la programmation en C : séance 3

Page 11: Séance 3 : conversions de type, flot de contrôle Luca SAIUageinghacker.net/teaching/programming-c/slides-3.pdf · 1/26 . Conseils Trucs Conversions de type Flot de contrôle Introduction

6/26 .

Conseils Trucs Conversions de type Flot de contrôle GCC feedback Groupage

Erreurs fréquentes : indentation : exemple 1

Du code mal écrit (version 1) :

int a = -10;if (a > 0)printf ("foo");printf ("bar");printf ("quux");

Qu’est ce q’il affiche ?

Luca Saiu http://ageinghacker.net/teaching Introduction à la programmation en C : séance 3

Page 12: Séance 3 : conversions de type, flot de contrôle Luca SAIUageinghacker.net/teaching/programming-c/slides-3.pdf · 1/26 . Conseils Trucs Conversions de type Flot de contrôle Introduction

7/26 .

Conseils Trucs Conversions de type Flot de contrôle GCC feedback Groupage

Erreurs fréquentes : indentation : exemple 2

Version 2 :

int a = -10;if (a > 0)

printf ("foo");printf ("bar");

printf ("quux");

Qu’est ce q’il affiche ?

C’est écrit de façon encore pire par rapport à la version 1 !

Luca Saiu http://ageinghacker.net/teaching Introduction à la programmation en C : séance 3

Page 13: Séance 3 : conversions de type, flot de contrôle Luca SAIUageinghacker.net/teaching/programming-c/slides-3.pdf · 1/26 . Conseils Trucs Conversions de type Flot de contrôle Introduction

7/26 .

Conseils Trucs Conversions de type Flot de contrôle GCC feedback Groupage

Erreurs fréquentes : indentation : exemple 2

Version 2 :

int a = -10;if (a > 0)

printf ("foo");printf ("bar");

printf ("quux");

Qu’est ce q’il affiche ?

C’est écrit de façon encore pire par rapport à la version 1 !

Luca Saiu http://ageinghacker.net/teaching Introduction à la programmation en C : séance 3

Page 14: Séance 3 : conversions de type, flot de contrôle Luca SAIUageinghacker.net/teaching/programming-c/slides-3.pdf · 1/26 . Conseils Trucs Conversions de type Flot de contrôle Introduction

8/26 .

Conseils Trucs Conversions de type Flot de contrôle GCC feedback Groupage

Erreurs fréquentes : indentation : exemple 2 bien écrit

Version 2, bien écrite :

int a = -10;if (a > 0)

printf ("foo");printf ("bar");printf ("quux");

Qu’est ce q’il affiche ?

Luca Saiu http://ageinghacker.net/teaching Introduction à la programmation en C : séance 3

Page 15: Séance 3 : conversions de type, flot de contrôle Luca SAIUageinghacker.net/teaching/programming-c/slides-3.pdf · 1/26 . Conseils Trucs Conversions de type Flot de contrôle Introduction

9/26 .

Conseils Trucs Conversions de type Flot de contrôle GCC feedback Groupage

Erreurs fréquentes : indentation : exemple 3

Une version encore modifiée :

int a = -10;if (a > 0)

{printf ("foo");printf ("bar");

}printf ("quux");

Qu’est ce q’il affiche ?

Luca Saiu http://ageinghacker.net/teaching Introduction à la programmation en C : séance 3

Page 16: Séance 3 : conversions de type, flot de contrôle Luca SAIUageinghacker.net/teaching/programming-c/slides-3.pdf · 1/26 . Conseils Trucs Conversions de type Flot de contrôle Introduction

10/26 .

Conseils Trucs Conversions de type Flot de contrôle GCC feedback Groupage

Erreurs fréquentes : branches et groupage

Erreurs typiques :Mettre un ; après la parenthèse fermée à droite de lacondition dans un if est presque toujours une erreur ;si votre code n’est pas bien décalé (“indenté”) il devientbeaucoup plus difficile à comprendre—non juste par moi, maissurtout par vous !

Suggestion :dans le doute, désambiguïsez en utilisant des accolades. (Cen’est pas une erreur, ni « moche », utiliser deux accolades deplus.)

Rendre votre code plus lisible par vous-même est une raisonexcellente pour le faire, indépendemment de moi.

Luca Saiu http://ageinghacker.net/teaching Introduction à la programmation en C : séance 3

Page 17: Séance 3 : conversions de type, flot de contrôle Luca SAIUageinghacker.net/teaching/programming-c/slides-3.pdf · 1/26 . Conseils Trucs Conversions de type Flot de contrôle Introduction

10/26 .

Conseils Trucs Conversions de type Flot de contrôle GCC feedback Groupage

Erreurs fréquentes : branches et groupage

Erreurs typiques :Mettre un ; après la parenthèse fermée à droite de lacondition dans un if est presque toujours une erreur ;si votre code n’est pas bien décalé (“indenté”) il devientbeaucoup plus difficile à comprendre—non juste par moi, maissurtout par vous !

Suggestion :dans le doute, désambiguïsez en utilisant des accolades. (Cen’est pas une erreur, ni « moche », utiliser deux accolades deplus.)

Rendre votre code plus lisible par vous-même est une raisonexcellente pour le faire, indépendemment de moi.

Luca Saiu http://ageinghacker.net/teaching Introduction à la programmation en C : séance 3

Page 18: Séance 3 : conversions de type, flot de contrôle Luca SAIUageinghacker.net/teaching/programming-c/slides-3.pdf · 1/26 . Conseils Trucs Conversions de type Flot de contrôle Introduction

10/26 .

Conseils Trucs Conversions de type Flot de contrôle GCC feedback Groupage

Erreurs fréquentes : branches et groupage

Erreurs typiques :Mettre un ; après la parenthèse fermée à droite de lacondition dans un if est presque toujours une erreur ;si votre code n’est pas bien décalé (“indenté”) il devientbeaucoup plus difficile à comprendre—non juste par moi, maissurtout par vous !

Suggestion :dans le doute, désambiguïsez en utilisant des accolades. (Cen’est pas une erreur, ni « moche », utiliser deux accolades deplus.)

Rendre votre code plus lisible par vous-même est une raisonexcellente pour le faire, indépendemment de moi.

Luca Saiu http://ageinghacker.net/teaching Introduction à la programmation en C : séance 3

Page 19: Séance 3 : conversions de type, flot de contrôle Luca SAIUageinghacker.net/teaching/programming-c/slides-3.pdf · 1/26 . Conseils Trucs Conversions de type Flot de contrôle Introduction

10/26 .

Conseils Trucs Conversions de type Flot de contrôle GCC feedback Groupage

Erreurs fréquentes : branches et groupage

Erreurs typiques :Mettre un ; après la parenthèse fermée à droite de lacondition dans un if est presque toujours une erreur ;si votre code n’est pas bien décalé (“indenté”) il devientbeaucoup plus difficile à comprendre—non juste par moi, maissurtout par vous !

Suggestion :dans le doute, désambiguïsez en utilisant des accolades. (Cen’est pas une erreur, ni « moche », utiliser deux accolades deplus.)

Rendre votre code plus lisible par vous-même est une raisonexcellente pour le faire, indépendemment de moi.

Luca Saiu http://ageinghacker.net/teaching Introduction à la programmation en C : séance 3

Page 20: Séance 3 : conversions de type, flot de contrôle Luca SAIUageinghacker.net/teaching/programming-c/slides-3.pdf · 1/26 . Conseils Trucs Conversions de type Flot de contrôle Introduction

11/26 .

Conseils Trucs Conversions de type Flot de contrôle GCC feedback Groupage

Conseil : nommez les valeurs intermédiaires

Exemple :

int bit_de_poids_faible = n & 1;

Donnez des noms raisonnables à vos variables.

Si vous ne savez pas comment les nommer, vous n’avez pascompris ce que vous voulez faire.

Luca Saiu http://ageinghacker.net/teaching Introduction à la programmation en C : séance 3

Page 21: Séance 3 : conversions de type, flot de contrôle Luca SAIUageinghacker.net/teaching/programming-c/slides-3.pdf · 1/26 . Conseils Trucs Conversions de type Flot de contrôle Introduction

11/26 .

Conseils Trucs Conversions de type Flot de contrôle GCC feedback Groupage

Conseil : nommez les valeurs intermédiaires

Exemple :

int bit_de_poids_faible = n & 1;

Donnez des noms raisonnables à vos variables.

Si vous ne savez pas comment les nommer, vous n’avez pascompris ce que vous voulez faire.

Luca Saiu http://ageinghacker.net/teaching Introduction à la programmation en C : séance 3

Page 22: Séance 3 : conversions de type, flot de contrôle Luca SAIUageinghacker.net/teaching/programming-c/slides-3.pdf · 1/26 . Conseils Trucs Conversions de type Flot de contrôle Introduction

12/26 .

Conseils Trucs Conversions de type Flot de contrôle GCC feedback Groupage

Erreurs fréquentes : ne pas respecter l’énoncé

Ne pas respecter l’énoncé est une bonne façon de perdre despoints au contrôle final.

Luca Saiu http://ageinghacker.net/teaching Introduction à la programmation en C : séance 3

Page 23: Séance 3 : conversions de type, flot de contrôle Luca SAIUageinghacker.net/teaching/programming-c/slides-3.pdf · 1/26 . Conseils Trucs Conversions de type Flot de contrôle Introduction

13/26 .

Conseils Trucs Conversions de type Flot de contrôle if imbriqués Évaluation short-circuit Entrée

Conditionnelles if imbriquéesSyntaxe de la commande conditionnelle (rappel, avec unecorrection : plus de ; ici [Le fichier slides-2.pdf sur la page web

du cours a été corrigé presque immédiatement, mais la version que j’avais montré en classe avait les ; redondants]) :commande ::= if ( expression ) commande

| if ( expression ) commande else commande

Cette syntaxe permet d’imbriquer les conditionnelles. Ce n’est pasune nouvelle partie du langage, juste une façon commune del’utiliser.

Exemple :if (a < 0)

printf ("a est négative\n"));else if (a == 0)

printf ("a est zéro\n"));else

printf ("a est positive\n"));Luca Saiu http://ageinghacker.net/teaching Introduction à la programmation en C : séance 3

Page 24: Séance 3 : conversions de type, flot de contrôle Luca SAIUageinghacker.net/teaching/programming-c/slides-3.pdf · 1/26 . Conseils Trucs Conversions de type Flot de contrôle Introduction

14/26 .

Conseils Trucs Conversions de type Flot de contrôle if imbriqués Évaluation short-circuit Entrée

if imbriqués : exemple expliquéCe code :

if (a < 0)printf ("a est négative\n"));

else if (a == 0)printf ("a est zéro\n"));

elseprintf ("a est positive\n"));

marche exactement comme ce code :if (a < 0)

printf ("a est négative\n"));else

{if (a == 0)

printf ("a est zéro\n"));else

printf ("a est positive\n"));}

Luca Saiu http://ageinghacker.net/teaching Introduction à la programmation en C : séance 3

Page 25: Séance 3 : conversions de type, flot de contrôle Luca SAIUageinghacker.net/teaching/programming-c/slides-3.pdf · 1/26 . Conseils Trucs Conversions de type Flot de contrôle Introduction

15/26 .

Conseils Trucs Conversions de type Flot de contrôle if imbriqués Évaluation short-circuit Entrée

Évaluation short-circuit

Les expressions contenant && et || sont évaluées d’une façonshort-circuit.

Ce n’est pas le cas pour les opérateurs bit à bit & et |.

Luca Saiu http://ageinghacker.net/teaching Introduction à la programmation en C : séance 3

Page 26: Séance 3 : conversions de type, flot de contrôle Luca SAIUageinghacker.net/teaching/programming-c/slides-3.pdf · 1/26 . Conseils Trucs Conversions de type Flot de contrôle Introduction

15/26 .

Conseils Trucs Conversions de type Flot de contrôle if imbriqués Évaluation short-circuit Entrée

Évaluation short-circuit

Les expressions contenant && et || sont évaluées d’une façonshort-circuit.

Ce n’est pas le cas pour les opérateurs bit à bit & et |.

Luca Saiu http://ageinghacker.net/teaching Introduction à la programmation en C : séance 3

Page 27: Séance 3 : conversions de type, flot de contrôle Luca SAIUageinghacker.net/teaching/programming-c/slides-3.pdf · 1/26 . Conseils Trucs Conversions de type Flot de contrôle Introduction

16/26 .

Conseils Trucs Conversions de type Flot de contrôle if imbriqués Évaluation short-circuit Entrée

Entrée (simplifiée)

Pour le moment, acceptez cette syntaxe d’une commande comme« magique » :

Lire un entier (du terminal) et stocker la valeur écrite parl’utilisateur dans une variable de type int :

scanf ("%i", & variable );

Je vais expliquer le vrai signifié de & à la fin, s’il y aura du temps.Ce n’est pas un « et » bit à bit : en fait, ce & a un seul opérande.

Pour jouer avec le langage, cette forme d’entrée suffit. Bien sûr cen’est pas la seule.

Luca Saiu http://ageinghacker.net/teaching Introduction à la programmation en C : séance 3

Page 28: Séance 3 : conversions de type, flot de contrôle Luca SAIUageinghacker.net/teaching/programming-c/slides-3.pdf · 1/26 . Conseils Trucs Conversions de type Flot de contrôle Introduction

16/26 .

Conseils Trucs Conversions de type Flot de contrôle if imbriqués Évaluation short-circuit Entrée

Entrée (simplifiée)

Pour le moment, acceptez cette syntaxe d’une commande comme« magique » :

Lire un entier (du terminal) et stocker la valeur écrite parl’utilisateur dans une variable de type int :

scanf ("%i", & variable );

Je vais expliquer le vrai signifié de & à la fin, s’il y aura du temps.Ce n’est pas un « et » bit à bit : en fait, ce & a un seul opérande.

Pour jouer avec le langage, cette forme d’entrée suffit. Bien sûr cen’est pas la seule.

Luca Saiu http://ageinghacker.net/teaching Introduction à la programmation en C : séance 3

Page 29: Séance 3 : conversions de type, flot de contrôle Luca SAIUageinghacker.net/teaching/programming-c/slides-3.pdf · 1/26 . Conseils Trucs Conversions de type Flot de contrôle Introduction

16/26 .

Conseils Trucs Conversions de type Flot de contrôle if imbriqués Évaluation short-circuit Entrée

Entrée (simplifiée)

Pour le moment, acceptez cette syntaxe d’une commande comme« magique » :

Lire un entier (du terminal) et stocker la valeur écrite parl’utilisateur dans une variable de type int :

scanf ("%i", & variable );

Je vais expliquer le vrai signifié de & à la fin, s’il y aura du temps.Ce n’est pas un « et » bit à bit : en fait, ce & a un seul opérande.

Pour jouer avec le langage, cette forme d’entrée suffit. Bien sûr cen’est pas la seule.

Luca Saiu http://ageinghacker.net/teaching Introduction à la programmation en C : séance 3

Page 30: Séance 3 : conversions de type, flot de contrôle Luca SAIUageinghacker.net/teaching/programming-c/slides-3.pdf · 1/26 . Conseils Trucs Conversions de type Flot de contrôle Introduction

17/26 .

Conseils Trucs Conversions de type Flot de contrôle Implicites Explicites

Conversions de type

Les littéraux et les variables ont un type. Les expressions ont untype aussi.

Disons que i et j soient deux variables de type int et que f soitune variable de type float.

Quel est le type de i + j ?Bien sûr int.

Quel est le type de i / j ?Encore int ! (Division entière, car les deux opérandes sontentiers.)

Quel est le type de i + f ?float ! (Le type d’une expression « se propage » auxsur-expressions où elle est contenue.)

Dans le dernier exemple on a une conversions de type implicite.

Luca Saiu http://ageinghacker.net/teaching Introduction à la programmation en C : séance 3

Page 31: Séance 3 : conversions de type, flot de contrôle Luca SAIUageinghacker.net/teaching/programming-c/slides-3.pdf · 1/26 . Conseils Trucs Conversions de type Flot de contrôle Introduction

17/26 .

Conseils Trucs Conversions de type Flot de contrôle Implicites Explicites

Conversions de type

Les littéraux et les variables ont un type. Les expressions ont untype aussi.

Disons que i et j soient deux variables de type int et que f soitune variable de type float.

Quel est le type de i + j ?Bien sûr int.

Quel est le type de i / j ?Encore int ! (Division entière, car les deux opérandes sontentiers.)

Quel est le type de i + f ?float ! (Le type d’une expression « se propage » auxsur-expressions où elle est contenue.)

Dans le dernier exemple on a une conversions de type implicite.

Luca Saiu http://ageinghacker.net/teaching Introduction à la programmation en C : séance 3

Page 32: Séance 3 : conversions de type, flot de contrôle Luca SAIUageinghacker.net/teaching/programming-c/slides-3.pdf · 1/26 . Conseils Trucs Conversions de type Flot de contrôle Introduction

17/26 .

Conseils Trucs Conversions de type Flot de contrôle Implicites Explicites

Conversions de type

Les littéraux et les variables ont un type. Les expressions ont untype aussi.

Disons que i et j soient deux variables de type int et que f soitune variable de type float.

Quel est le type de i + j ?Bien sûr int.

Quel est le type de i / j ?Encore int ! (Division entière, car les deux opérandes sontentiers.)

Quel est le type de i + f ?float ! (Le type d’une expression « se propage » auxsur-expressions où elle est contenue.)

Dans le dernier exemple on a une conversions de type implicite.

Luca Saiu http://ageinghacker.net/teaching Introduction à la programmation en C : séance 3

Page 33: Séance 3 : conversions de type, flot de contrôle Luca SAIUageinghacker.net/teaching/programming-c/slides-3.pdf · 1/26 . Conseils Trucs Conversions de type Flot de contrôle Introduction

17/26 .

Conseils Trucs Conversions de type Flot de contrôle Implicites Explicites

Conversions de type

Les littéraux et les variables ont un type. Les expressions ont untype aussi.

Disons que i et j soient deux variables de type int et que f soitune variable de type float.

Quel est le type de i + j ?Bien sûr int.

Quel est le type de i / j ?Encore int ! (Division entière, car les deux opérandes sontentiers.)

Quel est le type de i + f ?float ! (Le type d’une expression « se propage » auxsur-expressions où elle est contenue.)

Dans le dernier exemple on a une conversions de type implicite.

Luca Saiu http://ageinghacker.net/teaching Introduction à la programmation en C : séance 3

Page 34: Séance 3 : conversions de type, flot de contrôle Luca SAIUageinghacker.net/teaching/programming-c/slides-3.pdf · 1/26 . Conseils Trucs Conversions de type Flot de contrôle Introduction

17/26 .

Conseils Trucs Conversions de type Flot de contrôle Implicites Explicites

Conversions de type

Les littéraux et les variables ont un type. Les expressions ont untype aussi.

Disons que i et j soient deux variables de type int et que f soitune variable de type float.

Quel est le type de i + j ?Bien sûr int.

Quel est le type de i / j ?Encore int ! (Division entière, car les deux opérandes sontentiers.)

Quel est le type de i + f ?float ! (Le type d’une expression « se propage » auxsur-expressions où elle est contenue.)

Dans le dernier exemple on a une conversions de type implicite.

Luca Saiu http://ageinghacker.net/teaching Introduction à la programmation en C : séance 3

Page 35: Séance 3 : conversions de type, flot de contrôle Luca SAIUageinghacker.net/teaching/programming-c/slides-3.pdf · 1/26 . Conseils Trucs Conversions de type Flot de contrôle Introduction

17/26 .

Conseils Trucs Conversions de type Flot de contrôle Implicites Explicites

Conversions de type

Les littéraux et les variables ont un type. Les expressions ont untype aussi.

Disons que i et j soient deux variables de type int et que f soitune variable de type float.

Quel est le type de i + j ?Bien sûr int.

Quel est le type de i / j ?Encore int ! (Division entière, car les deux opérandes sontentiers.)

Quel est le type de i + f ?float ! (Le type d’une expression « se propage » auxsur-expressions où elle est contenue.)

Dans le dernier exemple on a une conversions de type implicite.

Luca Saiu http://ageinghacker.net/teaching Introduction à la programmation en C : séance 3

Page 36: Séance 3 : conversions de type, flot de contrôle Luca SAIUageinghacker.net/teaching/programming-c/slides-3.pdf · 1/26 . Conseils Trucs Conversions de type Flot de contrôle Introduction

17/26 .

Conseils Trucs Conversions de type Flot de contrôle Implicites Explicites

Conversions de type

Les littéraux et les variables ont un type. Les expressions ont untype aussi.

Disons que i et j soient deux variables de type int et que f soitune variable de type float.

Quel est le type de i + j ?Bien sûr int.

Quel est le type de i / j ?Encore int ! (Division entière, car les deux opérandes sontentiers.)

Quel est le type de i + f ?float ! (Le type d’une expression « se propage » auxsur-expressions où elle est contenue.)

Dans le dernier exemple on a une conversions de type implicite.

Luca Saiu http://ageinghacker.net/teaching Introduction à la programmation en C : séance 3

Page 37: Séance 3 : conversions de type, flot de contrôle Luca SAIUageinghacker.net/teaching/programming-c/slides-3.pdf · 1/26 . Conseils Trucs Conversions de type Flot de contrôle Introduction

17/26 .

Conseils Trucs Conversions de type Flot de contrôle Implicites Explicites

Conversions de type

Les littéraux et les variables ont un type. Les expressions ont untype aussi.

Disons que i et j soient deux variables de type int et que f soitune variable de type float.

Quel est le type de i + j ?Bien sûr int.

Quel est le type de i / j ?Encore int ! (Division entière, car les deux opérandes sontentiers.)

Quel est le type de i + f ?float ! (Le type d’une expression « se propage » auxsur-expressions où elle est contenue.)

Dans le dernier exemple on a une conversions de type implicite.

Luca Saiu http://ageinghacker.net/teaching Introduction à la programmation en C : séance 3

Page 38: Séance 3 : conversions de type, flot de contrôle Luca SAIUageinghacker.net/teaching/programming-c/slides-3.pdf · 1/26 . Conseils Trucs Conversions de type Flot de contrôle Introduction

18/26 .

Conseils Trucs Conversions de type Flot de contrôle Implicites Explicites

Conversions de type explicites : cast

Parfois vous souhaitez convertir explicitement le résultat d’uneexpression, ayant un type, dans une valeur d’une autre type.

C a une syntaxe spéciale pour cette opération appelée en anglais“cast” (au sense de modeler de l’argile, pas de lancer unprojectile).

Syntaxe : expression ::= ( type ) expressionLe type donnée est le type destination.

Sémantique : On évalue l’expression, puis on fait une conversiondu résultat vers le type donné. Ce résultat converti est le résultatde l’expression cast.

Luca Saiu http://ageinghacker.net/teaching Introduction à la programmation en C : séance 3

Page 39: Séance 3 : conversions de type, flot de contrôle Luca SAIUageinghacker.net/teaching/programming-c/slides-3.pdf · 1/26 . Conseils Trucs Conversions de type Flot de contrôle Introduction

18/26 .

Conseils Trucs Conversions de type Flot de contrôle Implicites Explicites

Conversions de type explicites : cast

Parfois vous souhaitez convertir explicitement le résultat d’uneexpression, ayant un type, dans une valeur d’une autre type.

C a une syntaxe spéciale pour cette opération appelée en anglais“cast” (au sense de modeler de l’argile, pas de lancer unprojectile).

Syntaxe : expression ::= ( type ) expressionLe type donnée est le type destination.

Sémantique : On évalue l’expression, puis on fait une conversiondu résultat vers le type donné. Ce résultat converti est le résultatde l’expression cast.

Luca Saiu http://ageinghacker.net/teaching Introduction à la programmation en C : séance 3

Page 40: Séance 3 : conversions de type, flot de contrôle Luca SAIUageinghacker.net/teaching/programming-c/slides-3.pdf · 1/26 . Conseils Trucs Conversions de type Flot de contrôle Introduction

18/26 .

Conseils Trucs Conversions de type Flot de contrôle Implicites Explicites

Conversions de type explicites : cast

Parfois vous souhaitez convertir explicitement le résultat d’uneexpression, ayant un type, dans une valeur d’une autre type.

C a une syntaxe spéciale pour cette opération appelée en anglais“cast” (au sense de modeler de l’argile, pas de lancer unprojectile).

Syntaxe : expression ::= ( type ) expressionLe type donnée est le type destination.

Sémantique : On évalue l’expression, puis on fait une conversiondu résultat vers le type donné. Ce résultat converti est le résultatde l’expression cast.

Luca Saiu http://ageinghacker.net/teaching Introduction à la programmation en C : séance 3

Page 41: Séance 3 : conversions de type, flot de contrôle Luca SAIUageinghacker.net/teaching/programming-c/slides-3.pdf · 1/26 . Conseils Trucs Conversions de type Flot de contrôle Introduction

19/26 .

Conseils Trucs Conversions de type Flot de contrôle Implicites Explicites

Conversions de type : démo

[Démo : conversions de type en C, implicites et explicites]

Luca Saiu http://ageinghacker.net/teaching Introduction à la programmation en C : séance 3

Page 42: Séance 3 : conversions de type, flot de contrôle Luca SAIUageinghacker.net/teaching/programming-c/slides-3.pdf · 1/26 . Conseils Trucs Conversions de type Flot de contrôle Introduction

20/26 .

Conseils Trucs Conversions de type Flot de contrôle Sauts goto Boucles while Boucles do. . . while Boucles for

Flot de contrôle non structuré : saut goto

Syntaxe :commande ::= étiquette : commande

| goto étiquette ;étiquette ::= identifiant

Sémantique : La sémantique d’une commande précédée par uneétiquette est la même de la commande.Quand on exécute « goto étiquette ; » l’exécution continue àl’étiqutte donnée au lieu de passer à la prochaine commande aprèsle « ; ». Une étiquette indique un point dans le programme.

goto est souvent considéré comme difficile à utiliser dans des grosprogrammes sans les rendre incompréhensibles.

Luca Saiu http://ageinghacker.net/teaching Introduction à la programmation en C : séance 3

Page 43: Séance 3 : conversions de type, flot de contrôle Luca SAIUageinghacker.net/teaching/programming-c/slides-3.pdf · 1/26 . Conseils Trucs Conversions de type Flot de contrôle Introduction

20/26 .

Conseils Trucs Conversions de type Flot de contrôle Sauts goto Boucles while Boucles do. . . while Boucles for

Flot de contrôle non structuré : saut goto

Syntaxe :commande ::= étiquette : commande

| goto étiquette ;étiquette ::= identifiant

Sémantique : La sémantique d’une commande précédée par uneétiquette est la même de la commande.Quand on exécute « goto étiquette ; » l’exécution continue àl’étiqutte donnée au lieu de passer à la prochaine commande aprèsle « ; ». Une étiquette indique un point dans le programme.

goto est souvent considéré comme difficile à utiliser dans des grosprogrammes sans les rendre incompréhensibles.

Luca Saiu http://ageinghacker.net/teaching Introduction à la programmation en C : séance 3

Page 44: Séance 3 : conversions de type, flot de contrôle Luca SAIUageinghacker.net/teaching/programming-c/slides-3.pdf · 1/26 . Conseils Trucs Conversions de type Flot de contrôle Introduction

20/26 .

Conseils Trucs Conversions de type Flot de contrôle Sauts goto Boucles while Boucles do. . . while Boucles for

Flot de contrôle non structuré : saut goto

Syntaxe :commande ::= étiquette : commande

| goto étiquette ;étiquette ::= identifiant

Sémantique : La sémantique d’une commande précédée par uneétiquette est la même de la commande.Quand on exécute « goto étiquette ; » l’exécution continue àl’étiqutte donnée au lieu de passer à la prochaine commande aprèsle « ; ». Une étiquette indique un point dans le programme.

goto est souvent considéré comme difficile à utiliser dans des grosprogrammes sans les rendre incompréhensibles.

Luca Saiu http://ageinghacker.net/teaching Introduction à la programmation en C : séance 3

Page 45: Séance 3 : conversions de type, flot de contrôle Luca SAIUageinghacker.net/teaching/programming-c/slides-3.pdf · 1/26 . Conseils Trucs Conversions de type Flot de contrôle Introduction

21/26 .

Conseils Trucs Conversions de type Flot de contrôle Sauts goto Boucles while Boucles do. . . while Boucles for

Flot de contrôle : boucle while

Syntaxe :commande ::= while ( expression ) commande

L’expression s’appelle garde et la commande s’appelle corps.

Sémantique : On évalue la garde, booléenne : si elle est vraie onexécute le corps et puis on recommence, en réévaluant la garde et,si elle est encore vraie, en reexécutant le corps. . . On s’arrêtequand la guarde est fausse.

Si la garde est fausse au début, le corps n’est jamais exécuté.

Luca Saiu http://ageinghacker.net/teaching Introduction à la programmation en C : séance 3

Page 46: Séance 3 : conversions de type, flot de contrôle Luca SAIUageinghacker.net/teaching/programming-c/slides-3.pdf · 1/26 . Conseils Trucs Conversions de type Flot de contrôle Introduction

21/26 .

Conseils Trucs Conversions de type Flot de contrôle Sauts goto Boucles while Boucles do. . . while Boucles for

Flot de contrôle : boucle while

Syntaxe :commande ::= while ( expression ) commande

L’expression s’appelle garde et la commande s’appelle corps.

Sémantique : On évalue la garde, booléenne : si elle est vraie onexécute le corps et puis on recommence, en réévaluant la garde et,si elle est encore vraie, en reexécutant le corps. . . On s’arrêtequand la guarde est fausse.

Si la garde est fausse au début, le corps n’est jamais exécuté.

Luca Saiu http://ageinghacker.net/teaching Introduction à la programmation en C : séance 3

Page 47: Séance 3 : conversions de type, flot de contrôle Luca SAIUageinghacker.net/teaching/programming-c/slides-3.pdf · 1/26 . Conseils Trucs Conversions de type Flot de contrôle Introduction

21/26 .

Conseils Trucs Conversions de type Flot de contrôle Sauts goto Boucles while Boucles do. . . while Boucles for

Flot de contrôle : boucle while

Syntaxe :commande ::= while ( expression ) commande

L’expression s’appelle garde et la commande s’appelle corps.

Sémantique : On évalue la garde, booléenne : si elle est vraie onexécute le corps et puis on recommence, en réévaluant la garde et,si elle est encore vraie, en reexécutant le corps. . . On s’arrêtequand la guarde est fausse.

Si la garde est fausse au début, le corps n’est jamais exécuté.

Luca Saiu http://ageinghacker.net/teaching Introduction à la programmation en C : séance 3

Page 48: Séance 3 : conversions de type, flot de contrôle Luca SAIUageinghacker.net/teaching/programming-c/slides-3.pdf · 1/26 . Conseils Trucs Conversions de type Flot de contrôle Introduction

22/26 .

Conseils Trucs Conversions de type Flot de contrôle Sauts goto Boucles while Boucles do. . . while Boucles for

Flot de contrôle : boucle do. . . while

Syntaxe :commande ::= do commande while ( expression ) ;

Encore, l’expression s’appelle garde et la commande s’appellecorps.

Sémantique : Comme la boucle while, mais la condition estévaluée après le corps à chaque itération. Encore, on s’arrêtequand la guarde est fausse.

Le corps d’une boucle do. . . while est exécuté au moins une fois.

Luca Saiu http://ageinghacker.net/teaching Introduction à la programmation en C : séance 3

Page 49: Séance 3 : conversions de type, flot de contrôle Luca SAIUageinghacker.net/teaching/programming-c/slides-3.pdf · 1/26 . Conseils Trucs Conversions de type Flot de contrôle Introduction

22/26 .

Conseils Trucs Conversions de type Flot de contrôle Sauts goto Boucles while Boucles do. . . while Boucles for

Flot de contrôle : boucle do. . . while

Syntaxe :commande ::= do commande while ( expression ) ;

Encore, l’expression s’appelle garde et la commande s’appellecorps.

Sémantique : Comme la boucle while, mais la condition estévaluée après le corps à chaque itération. Encore, on s’arrêtequand la guarde est fausse.

Le corps d’une boucle do. . . while est exécuté au moins une fois.

Luca Saiu http://ageinghacker.net/teaching Introduction à la programmation en C : séance 3

Page 50: Séance 3 : conversions de type, flot de contrôle Luca SAIUageinghacker.net/teaching/programming-c/slides-3.pdf · 1/26 . Conseils Trucs Conversions de type Flot de contrôle Introduction

22/26 .

Conseils Trucs Conversions de type Flot de contrôle Sauts goto Boucles while Boucles do. . . while Boucles for

Flot de contrôle : boucle do. . . while

Syntaxe :commande ::= do commande while ( expression ) ;

Encore, l’expression s’appelle garde et la commande s’appellecorps.

Sémantique : Comme la boucle while, mais la condition estévaluée après le corps à chaque itération. Encore, on s’arrêtequand la guarde est fausse.

Le corps d’une boucle do. . . while est exécuté au moins une fois.

Luca Saiu http://ageinghacker.net/teaching Introduction à la programmation en C : séance 3

Page 51: Séance 3 : conversions de type, flot de contrôle Luca SAIUageinghacker.net/teaching/programming-c/slides-3.pdf · 1/26 . Conseils Trucs Conversions de type Flot de contrôle Introduction

23/26 .

Conseils Trucs Conversions de type Flot de contrôle Sauts goto Boucles while Boucles do. . . while Boucles for

Flot de contrôle : boucle for

Syntaxe :commande ::= for ( expression ; expression ; expression ) commande

Les trois expressions sont appelées, en ordre, initialisation, garde etincrément. La commande est le corps de la boucle.

Sémantique : Complètement équivalent à{ initialisation ; while ( garde ) { corps ; incrément ; } }.

À utiliser quand vous connaissez le nombre d’itérations.

Luca Saiu http://ageinghacker.net/teaching Introduction à la programmation en C : séance 3

Page 52: Séance 3 : conversions de type, flot de contrôle Luca SAIUageinghacker.net/teaching/programming-c/slides-3.pdf · 1/26 . Conseils Trucs Conversions de type Flot de contrôle Introduction

23/26 .

Conseils Trucs Conversions de type Flot de contrôle Sauts goto Boucles while Boucles do. . . while Boucles for

Flot de contrôle : boucle for

Syntaxe :commande ::= for ( expression ; expression ; expression ) commande

Les trois expressions sont appelées, en ordre, initialisation, garde etincrément. La commande est le corps de la boucle.

Sémantique : Complètement équivalent à{ initialisation ; while ( garde ) { corps ; incrément ; } }.

À utiliser quand vous connaissez le nombre d’itérations.

Luca Saiu http://ageinghacker.net/teaching Introduction à la programmation en C : séance 3

Page 53: Séance 3 : conversions de type, flot de contrôle Luca SAIUageinghacker.net/teaching/programming-c/slides-3.pdf · 1/26 . Conseils Trucs Conversions de type Flot de contrôle Introduction

23/26 .

Conseils Trucs Conversions de type Flot de contrôle Sauts goto Boucles while Boucles do. . . while Boucles for

Flot de contrôle : boucle for

Syntaxe :commande ::= for ( expression ; expression ; expression ) commande

Les trois expressions sont appelées, en ordre, initialisation, garde etincrément. La commande est le corps de la boucle.

Sémantique : Complètement équivalent à{ initialisation ; while ( garde ) { corps ; incrément ; } }.

À utiliser quand vous connaissez le nombre d’itérations.

Luca Saiu http://ageinghacker.net/teaching Introduction à la programmation en C : séance 3

Page 54: Séance 3 : conversions de type, flot de contrôle Luca SAIUageinghacker.net/teaching/programming-c/slides-3.pdf · 1/26 . Conseils Trucs Conversions de type Flot de contrôle Introduction

24/26 .

Conseils Trucs Conversions de type Flot de contrôle Sauts goto Boucles while Boucles do. . . while Boucles for

Flot de contrôle : boucle for : exemple

Exemple d’utilisation typique d’une boucle for :int i;for (i = 0; i < 10; i = i + 1)

printf ("i est %i\n", i);

C’est typique de compter avec une variable à partir de zéro, en lacomparant dans la garde avec un mineur strict.

Dans l’exemple on exécute le corps 10 fois, pour toute i entre 0 et9 (compris) : on sort, sans exécuter le corps une autre fois, quandi devient égale à 10.

Luca Saiu http://ageinghacker.net/teaching Introduction à la programmation en C : séance 3

Page 55: Séance 3 : conversions de type, flot de contrôle Luca SAIUageinghacker.net/teaching/programming-c/slides-3.pdf · 1/26 . Conseils Trucs Conversions de type Flot de contrôle Introduction

24/26 .

Conseils Trucs Conversions de type Flot de contrôle Sauts goto Boucles while Boucles do. . . while Boucles for

Flot de contrôle : boucle for : exemple

Exemple d’utilisation typique d’une boucle for :int i;for (i = 0; i < 10; i = i + 1)

printf ("i est %i\n", i);

C’est typique de compter avec une variable à partir de zéro, en lacomparant dans la garde avec un mineur strict.

Dans l’exemple on exécute le corps 10 fois, pour toute i entre 0 et9 (compris) : on sort, sans exécuter le corps une autre fois, quandi devient égale à 10.

Luca Saiu http://ageinghacker.net/teaching Introduction à la programmation en C : séance 3

Page 56: Séance 3 : conversions de type, flot de contrôle Luca SAIUageinghacker.net/teaching/programming-c/slides-3.pdf · 1/26 . Conseils Trucs Conversions de type Flot de contrôle Introduction

25/26 .

Conseils Trucs Conversions de type Flot de contrôle Sauts goto Boucles while Boucles do. . . while Boucles for

Don’t panic ! (again)

Vos programmes ne marcheront pas à la première tentative.

C’est normal, même pour les experts. Ne vous inquiétez pas !

Welcome to the world of debugging .

Luca Saiu http://ageinghacker.net/teaching Introduction à la programmation en C : séance 3

Page 57: Séance 3 : conversions de type, flot de contrôle Luca SAIUageinghacker.net/teaching/programming-c/slides-3.pdf · 1/26 . Conseils Trucs Conversions de type Flot de contrôle Introduction

26/26 .

Conseils Trucs Conversions de type Flot de contrôle Sauts goto Boucles while Boucles do. . . while Boucles for

Bibliography I

Saiu, L. (2018). La page web de mes cours.http://ageinghacker.net/teachingLa page web officielle du cours contient des pointeurs à desressources web, et une copie des mes transparents.

Stallman, R. and Rothwell, T. (2019). GNU C Intro andReference. Free Software Foundation.(Manuscrit non encore officiellement publié. Demandez-moi unexemplaire si vous êtes intéressés.).

Luca Saiu http://ageinghacker.net/teaching Introduction à la programmation en C : séance 3

Page 58: Séance 3 : conversions de type, flot de contrôle Luca SAIUageinghacker.net/teaching/programming-c/slides-3.pdf · 1/26 . Conseils Trucs Conversions de type Flot de contrôle Introduction

27/26 .

Backup slides

[To do : Backus]

John W. Backus

Photo by Pierre Lescanne, Copyright © 1989, CC BY-SA 4.0

ALGOL 58, ALGOL 60.

Luca Saiu http://ageinghacker.net/teaching Introduction à la programmation en C : séance 3

Page 59: Séance 3 : conversions de type, flot de contrôle Luca SAIUageinghacker.net/teaching/programming-c/slides-3.pdf · 1/26 . Conseils Trucs Conversions de type Flot de contrôle Introduction

28/26 .

Backup slides

[To do : Dijkstra]

Edsger W. Dijkstra

Photo by Hamilton Richards, Copyright © 2002, CC BY-SA 3.0

“Go To Statement Considered Harmful” (titre par Niklaus Wirth)

Luca Saiu http://ageinghacker.net/teaching Introduction à la programmation en C : séance 3

Page 60: Séance 3 : conversions de type, flot de contrôle Luca SAIUageinghacker.net/teaching/programming-c/slides-3.pdf · 1/26 . Conseils Trucs Conversions de type Flot de contrôle Introduction

29/26 .

Backup slides

[To do : Knuth]

Donald E. Knuth

Photo by Jacob Appelbaum, Copyright © 2005, CC BY-SA 2.5

Luca Saiu http://ageinghacker.net/teaching Introduction à la programmation en C : séance 3