gef 243b programmation informatique appliquée expressions et opérateurs §3.1 - 3.4

29
GEF 243B Programmation informatique appliquée Expressions et opérateurs §3.1 - 3.4

Upload: ambroise-hardy

Post on 03-Apr-2015

103 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: GEF 243B Programmation informatique appliquée Expressions et opérateurs §3.1 - 3.4

GEF 243BProgrammation informatique

appliquée

Expressions et opérateurs

§3.1 - 3.4

Page 2: GEF 243B Programmation informatique appliquée Expressions et opérateurs §3.1 - 3.4

4/11/23 2JGA Beaulieu

Revue

• Quelles sont les quatre types de base dans le langage C?

• Quelles sont les trois types intégraux dont nous sommes intéressé?

• Quelles sont les valeurs de vrai et faux en C?• Pourquoi l’utilisation des constantes littérales (tel

que 5) n’est-t-elle pas une bonne idée pour votre code. (au lieu d’utiliser des constantes définies ou de mémoire)?

Page 3: GEF 243B Programmation informatique appliquée Expressions et opérateurs §3.1 - 3.4

4/11/23 3JGA Beaulieu

Une note…

• Parce que vous avez déjà une base en programmation dans ce cours, nous nous concentrons sur les différences entre ce que vous avez appris entre Matlab ou autre langage et C.

• Plusieurs choses que vous allez voir dans les prochaines semaines vont être une revue de ce que vous devriez déjà savoir avec quelques changements dans la syntaxe.

Page 4: GEF 243B Programmation informatique appliquée Expressions et opérateurs §3.1 - 3.4

4/11/23 4JGA Beaulieu

Synopsis• Expressions en C

primaire postfix préfix unaire binaire

• Affectations• Affectations composées

• Opérateurs spécifiques par type• Opérateurs, précédence et associativité• Conversion de type implicite

Page 5: GEF 243B Programmation informatique appliquée Expressions et opérateurs §3.1 - 3.4

4/11/23 5JGA Beaulieu

Expressions en C

• Il y a deux choses qui séparent C de plusieurs langages de programmation:ExpressionsPointeurs

• Aujourd’hui nous allons étudier la puissance que C nous donne pour les expressions

Page 6: GEF 243B Programmation informatique appliquée Expressions et opérateurs §3.1 - 3.4

4/11/23 6JGA Beaulieu

Expressions en C

• Une expression est une séquence d’opérandes et d’opérateurs qui se réduit en une seule valeur.

• Toutes les points suivants sont des expressions valides(a + b)4 + 5a++--cx = a + b + cy *= z!(a > b || c)-a

Page 7: GEF 243B Programmation informatique appliquée Expressions et opérateurs §3.1 - 3.4

4/11/23 7JGA Beaulieu

Expressions en C

a, 5, (5 + a – z)

a++

5 + 3, t || f

x = y + 3

++b, !f, -a

Page 8: GEF 243B Programmation informatique appliquée Expressions et opérateurs §3.1 - 3.4

4/11/23 8JGA Beaulieu

L’expression postfix

• Vous êtes déjà familier avec ceci:a++

• Ex.: Nous voulons que x ait la valeur de a et que ensuite, a soit auto incrémenté après l’affectationDans plusieurs langages: (valeur initiale de a = 10)

x = a .. Valeur de a et x 10

a = a + 1 .. a = 11En C:

x = a++; // même résultat qu’en haut

Page 9: GEF 243B Programmation informatique appliquée Expressions et opérateurs §3.1 - 3.4

4/11/23 9JGA Beaulieu

L’expression unaire

• Vous êtes aussi familier avec cela:++a

• Ex.: Nous voulons que x ait la valeur de a mais seulement après que a ait été incrémentéDans plusieurs langages: (valeur initiale de a = 10)

a = a + 1 .. a = 11

x = a .. Valeur de a et x 11 En C:

x = ++a; // même résultat qu’en haut

Page 10: GEF 243B Programmation informatique appliquée Expressions et opérateurs §3.1 - 3.4

4/11/23 10JGA Beaulieu

L’expression unaire

• Mais saviez vous que?x = -a //si a = 10 x = -10

//si a = -10 x = 10

• Et il y en a encore plus…sizeof() est aussi une expression unaire

sizeof(int)

sizeof(x)

x = sizeof(3.1416)

sizeof((a + b -1)+(2-18.3))

(int)x …

Page 11: GEF 243B Programmation informatique appliquée Expressions et opérateurs §3.1 - 3.4

4/11/23 11JGA Beaulieu

L’expression binaire

• Un opérateur est placé entre deux expressions forme une expression binairex + 1, y * 3 (z + 2) * y

• Deux expressions binaires

• Une assignation à une variable est une forme d’expression.

Page 12: GEF 243B Programmation informatique appliquée Expressions et opérateurs §3.1 - 3.4

4/11/23 12JGA Beaulieu

Affectations composées

• Vous connaissez l’opérateur d’affectation ‘=‘• Mais connaissez vous les affectations composées

Compound expression Equivalent expression

x *= y x = x * y

x /= y x = x / y

x %= y x = x % y

x += y x = x + y

x -= y x = x - y

Page 13: GEF 243B Programmation informatique appliquée Expressions et opérateurs §3.1 - 3.4

4/11/23 13JGA Beaulieu

Opérateurs, précédence & associativité

• Vous connaissez déjà touts les opérateurs que vous allez avoir besoin en 243 de votre cours en programmation (INF101)Sauf pour les opérateurs de bits, d’adresses et de

pointeurs

• Comme vous l’avez appris durant votre cours de première année, il y a un ordre de précédence entre les opérateurs.Si vous ne pouvez pas vous en souvenir, il y a un

tableau sur la couverture intérieure de Forouzan.

Page 14: GEF 243B Programmation informatique appliquée Expressions et opérateurs §3.1 - 3.4

4/11/23 14JGA Beaulieu

Types revisités• Souvenez-vous qu’un type définit deux choses:

Un ensemble de valeurs et Un ensemble d’opérateurs

• Les types intrinsèques en C void char bool Integers

• Short int, int, long int, long long int Réels

• Float, double, long double

• Nous allons examiner des opérateurs qui sont spécifiques pour certains types en C

Page 15: GEF 243B Programmation informatique appliquée Expressions et opérateurs §3.1 - 3.4

4/11/23 15JGA Beaulieu

Opérateurs spécifiques par type

• C inclus un ensemble d’opérateurs arithmétiques, booléens et logiques

• Tel que mentionné plus tôt, la fonctionnalité des opérateurs dépend du type des données, variables

Arithmétiques + - * / %Booléens & | ! && || ^Logiques == != > < >= <=

Page 16: GEF 243B Programmation informatique appliquée Expressions et opérateurs §3.1 - 3.4

4/11/23 16JGA Beaulieu

Opérateurs valides pour void

• void n’a pas de valeurs et aucun opérateur

• void est très utile pour les pointeurs ce que nous voyons plus tard

Opérateurs

Page 17: GEF 243B Programmation informatique appliquée Expressions et opérateurs §3.1 - 3.4

4/11/23 17JGA Beaulieu

Opérateurs valides pour bool

• Le type booléen (bool) est une adition récente à C int est utilisé pour stocker ce genre de données logiques

• L’utilisation du type bool requiert normalement l’inclusion de la bibliothèque stdbool.h Cependant, cette bibliothèque n’est pas disponible pour BrickOS

donc nous l’avons inclus dans 243_lib.h Définit bool, true et false false est définit comme int 0 true est définit comme int 1

(1==1) true

(1!=1) false

(i=0) false

Page 18: GEF 243B Programmation informatique appliquée Expressions et opérateurs §3.1 - 3.4

4/11/23 18JGA Beaulieu

Opérateurs valides int et char

• int et char ont les mêmes opérateurs valides

Arithmétiques:Addition +Soustraction -Multiplication *Division /Modulo %Pré/post incré ++Pré/post décré --

Booléens:AND &&OR ||NOT !AND par Bit &OR par Bit |XOR par Bit ^

Page 19: GEF 243B Programmation informatique appliquée Expressions et opérateurs §3.1 - 3.4

4/11/23 19JGA Beaulieu

Opérateurs valides int et char

• int et char ont les mêmes opérateurs valides

Logiques:Plus grand que >Plus petit que <Plus grand ou égal >=Plus petit ou égal <=Égal ==Pas égal !=

ATTENTION:

= ET ==

NE SONT PAS LA MÊME CHOSE

Page 20: GEF 243B Programmation informatique appliquée Expressions et opérateurs §3.1 - 3.4

4/11/23 20JGA Beaulieu

Notes sur les opérateurs int• % modulo

Retourne le reste de la division d’entiers• Ex: connaissant que 7/4 = 1 reste 3• 7%4 retourne 3• 7/4 retourne 1

• Puissance: Il n’y a pas d’opérateurs de puissance en C ^ est un opérateur sur les bits (XOR) En MATLAB pour X2:

• x^2 En C pour X2 on écrit :

• x * x Notez qu’il y a une fonction pow() dans <math.h>

Page 21: GEF 243B Programmation informatique appliquée Expressions et opérateurs §3.1 - 3.4

4/11/23 21JGA Beaulieu

Opérateurs valides float

• float ont les mêmes opérateurs valides

Arithmétiques:Addition +Soustraction -Multiplication *Division /Modulo %Pré/post incré ++Pré/post décré --

Booléens:AND &&OR ||NOT !AND par Bit &OR par Bit |XOR par Bit ^

Page 22: GEF 243B Programmation informatique appliquée Expressions et opérateurs §3.1 - 3.4

4/11/23 22JGA Beaulieu

Opérateurs valides float

• float ont les mêmes opérateurs valides

Logiques:Plus grand que >Plus petit que <Plus grand ou égal >=Plus petit ou égal <=Égal ==Pas égal !=

ATTENTION: Avec les floatsN’utilisez pas == pour en comparer deux

1.1e-19 n’est pas exactement 0Utilisez … fabs(x-y)<0.0001;

Page 23: GEF 243B Programmation informatique appliquée Expressions et opérateurs §3.1 - 3.4

4/11/23 23JGA Beaulieu

Opérateurs, précédence & associativité

• Associativité est utilisée pour déterminer l’ordre dans lequel les opérateurs de même précédence sont évalués dans une expression complexe

• La plus part des expressions utilise l’associativité de gauche, donc:3 * 8 / 4 % 4 * 5 est équivalent à ((((3 * 8) / 4) % 4) * 5)

• Ou graphiquement:

Page 24: GEF 243B Programmation informatique appliquée Expressions et opérateurs §3.1 - 3.4

4/11/23 24JGA Beaulieu

Opérateurs, précédence & associativité

• L’associativité de droite est seulement utilisée pour trois types d’expressions:Unaire (cas simple), Ternaire (plus tard), et Associativité d’expressions d’affectation

a += b *= c -= 5 est le même que:

(a = a + ( b = b * ( c = c – 5))) ou:

Page 25: GEF 243B Programmation informatique appliquée Expressions et opérateurs §3.1 - 3.4

4/11/23 25JGA Beaulieu

Opérateurs, précédence & associativité

• Souvenez-vous: premièrement précédence, ensuite associativité

• Si vous regardez la table de précédence, les expressions avec parenthèses sont au haut de la chaîne alimentaire.

• Quand vous avez un doute sur l’ordre implicite, utilisez les parenthèses

• La bonne chose dans l’utilisation des parenthèses est … le compilateur les vérifie!

Page 26: GEF 243B Programmation informatique appliquée Expressions et opérateurs §3.1 - 3.4

4/11/23 26JGA Beaulieu

Effets secondaires

• Certains opérateurs modifient les valeurs des variables en mémoire

• Cette modification du contenu de la mémoire est appelé un effet secondairePar exemple, x = ++a; a deux effets:

• a est pré incrémenté • x se voit assigné la nouvelle valeur de a

Page 27: GEF 243B Programmation informatique appliquée Expressions et opérateurs §3.1 - 3.4

4/11/23 27JGA Beaulieu

Problèmes pratique

• Les questions pour évaluer la précédence des expressions sont toujours sur les examens

• Si il y a de ces questions, on vous donne la table des précédences.

• Si vous faites les questions suivantes, je vais les corriger:• 3.17• 3.22• 3.23 (assume int x, y, z)• 3.23 (assume float x, y, z)• 3.24

Page 28: GEF 243B Programmation informatique appliquée Expressions et opérateurs §3.1 - 3.4

4/11/23 28

Problèmes pratique (continue)• Si au début, a=2, b=5, c=1 et d= -1, quelles sont les valeurs de ces

expressions? (si int a,b,c,d; )1. a=b+=c+d2. c=d+=a*=b%=33. a+=(a==b)*c*=-2+d;4. a>b + b>c + c>d + d>a

 • Pour char a ='d'; int b=6; float c = 3.161524; quelles

sont les valeurs pour ces expressions? char d;int e;float f; d = a*b;e = a*b; d= a*c;e=a*cf = a*c;f =c%2;

28

Winter 2011 Prof S.P. Leblanc

Page 29: GEF 243B Programmation informatique appliquée Expressions et opérateurs §3.1 - 3.4

4/11/23 29JGA Beaulieu

Quiz Time

• Quelle est la valeur de cette expression4 + 2 * 5

• Si a = 3 et b = 5 quelles sont leurs valeurs après:x = --a + b++ ?

b += a-- ?

y = -b++ ?