200 likes | 308 Views
Expressions et affectation. Comment produire des nouvelles valeurs. Expressions. L’expression est un élément du langage qui produit une règle comment calculer une nouvelle valeur à l’aide des opérandes et opérateurs Les opérateurs donnent les instructions comment obtenir la valeur;
E N D
Expressions et affectation Comment produire des nouvelles valeurs B.Shishedjiev - Affectation
Expressions • L’expression est un élément du langage qui produit une règle comment calculer une nouvelle valeur à l’aide des opérandes et opérateurs • Les opérateurs donnent les instructions comment obtenir la valeur; • Les opérandes sont les données sur lesquelles les opérateurs agissent. • Exécuter une expression – c’est de: • Produire une valeur • Calculer la valeur depuis les opérandes • Eventuellement changer la valeur d’un ou plusieurs opérandes • Déterminer le type de la valeur produite B.Shishedjiev - Affectation
Types d’opérateurs • Opérateurs unaires ( ++ -- sizeof - (type) ! )Ils peuvent être préfixe ( !x ) ou postfixe ( x++ ) • Opérateurs binaires ( + - * / && || ) Ils ont deux opérandes ( x + y ) • Opérateurs ternaires( ?: )z ? x : y B.Shishedjiev - Affectation
Priorité et associativité • Ils gèrent l’ordre dans lequel sont evalués les opérateurs individuels quand l’expression comporte plusieurs opérateurs. • Les opérateurs avec priorité supérieure sont évalués avant ceux avec une priorité inférieure. • Quand ils sont de même priorité ils sont évalués selon le sens de l’associativité. • On peut changer l’ordre à l’aide de parenthèses. B.Shishedjiev - Affectation
Les opérateurs de C B.Shishedjiev - Affectation
Expressions arithmétiques • Opérateurs d’addition • addition + • soustraction - • Opérateurs de multiplication • multiplication * • division / • modulo (le reste de division entière) % • Opérateurs unaires • moins unaire - • Type de résultat B.Shishedjiev - Affectation
Expressions arithmétiques • Fonctions standards • Mathématiques • Entiersabs(i), labs(l), div(i),ldiv(l), rand(), random(i), randomize() • Doublefabs(x) = |x|, sqrt(x)=x,pow(x,y)= xy, pow10(x)=10x, log(x)=ln x, exp(x)= ex, log10(x)=log10x, sin(x), sinh(x), cos(x), cosh(x), tan(x), asin(x), acos(x), atan(x), ceil(x), floor(x), B.Shishedjiev - Affectation
Expressions arithmétiques… • Exemples int a=2,b =5,c =4; double x=2.5,y=1.,z=3.1; char h = ‘A’; Résultat 3 Résultat -9 Résultat 2 a+b-c 3*(a-b) b/2 b/2. b % a a + b + z a + -b b / -y *z h+2 Résultat 2.5 Résultat 1 Résultat 10.1 Résultat -3 Résultat -15.5 Résultat ‘C’ ou 67 B.Shishedjiev - Affectation
Expressions arithmétiques… • Exemples (a+b)/(c+d) (1+x)*sqrt((2*sin(2*x)+pow(cos(x),2)-3*tan(x*x))/(1-exp(2+x))) B.Shishedjiev - Affectation
Affectation simple • Syntaxe Lvalue est un objet qui peut contenir une valeur (une variable ou une expression qui vaut une adresse de la mémoire) RValue vaut une valeur (la valeur d’une variable ou une expression qui produit une valeur) • Exécution de l’opérateur d’affectation • Calcule l’expression de Rvalue et obtient sa valeur • Enregistre la valeur dans Lvalue • Le résultat est la valeur enregistrée. <Lvalue> = <Rvalue> B.Shishedjiev - Affectation
Affectation simple • Exemples Declarer les variables sans spécifier leur valeur Mémoire • int a,b,c; • int d = 3; • a = 5; • b = 3+a; • c = a = b; • 4=a; • a+b=c; ? a 8 5 Declarer la variable avec initialisation b ? 8 c ? 8 Affectations simples d 3 Affectations multiples l’associativité est de droit à gauche Instructions invalides B.Shishedjiev - Affectation
Opérateursincrémentaux • Opérateurs de préincrément et de prédécrement L'opérande doit être une Lvalue • Opérateurs de postincrément et de postdécrement int a =5,b=3,c=1; a = 5 + ++c; c = 2 * -- b; Mémoire 7 5 a b 3 2 4 2 1 c 6 5 7 a int a =5,b=3,c=1; a = 5 + c++; c = 2 * b--; a++;--c; b 3 2 2 5 6 1 c B.Shishedjiev - Affectation
Expressions booléennes • Opérateurs comparatifsils rendent 1 si la comparaison est vraie et 0 si elle est fausse a < 5 b>= 9.5 a+b != c/d • Opérateurs logiques x < 5 && x > 2 y>= 9.5 || y <= 3.2 a && b || !a && !b B.Shishedjiev - Affectation
Expressions booléennes • Exécution en raccourci Avant: x =3 Après: Resultat vrai x = 4 x < 5 && x++ > 2 x > 5 || x++ < 2 Avant: x =6 Après: Resultat faux x = 6 Avant: x =3 Après: Resultat faux x = 4 Avant: x =6 Après: Resultat vrai x = 6 B.Shishedjiev - Affectation
Expression conditionnelle • Syntaxe condition? expression-1: expression-2 • Exemple d = 4 int a = 2,b =4,c = -3; int d; d = a>b ? a : b; d = c>=0 ? c : -c; d = (a != b ? 5 : 1) * 2; d = 3 d = 10 B.Shishedjiev - Affectation
Opérateurs sur les pointeurs • Indirection (déréférence) * - délivre la valeur pointée. • Adresse &délivre l’adresse d’une variable Mémoire Nom Adresse Valeur j 26 ? 10 12 int j, *pi; j = 10; pi = &j; *pi = 12; pi 30 26 ? B.Shishedjiev - Affectation
Affectation étendue Cette affectation est appelée encore élargie ou complexe • Syntaxe exp1 = exp1 exp2 exp1 = exp2 où est + - * / etc. • Exemples int a = 2,b =4,c = -3; a += 5 b *= a-2 c += a>b ? a-b : b-a a = 7 b=20 c=10 B.Shishedjiev - Affectation
L’opérateur sizeof • Sizeof rend la taille de son opérande en octets • Exemples a = 2 int a = 2,b =4,c = -3; short i; long j; float x; double z; a = sizeof i; b = sizeof z/ sizeof x; c = sizeof(int); b=2 c=2 B.Shishedjiev - Affectation
Conversion des types • Conversion implicite a = -29912 int a = 2,b =4,c = -3; short i = 4; long j=35897 float x =3.2; double z = -4.5; char d = ‘A’; a = j; b = x; c = z; x = 5; c = d; d = 66; b=3 c=-4 x = 5.0 c=65 d=‘B’ B.Shishedjiev - Affectation
Conversion des types • Conversion explicite – cast opérateur (type) int a = 2,b =4; unsigned c = -3; short i = 4; long j=35897 float x =3.2; double z = -4.5; char d = ‘A’; x = (float)c/2; b = (int)x; c = (unsigned int) j; a = (int)x/2; x = -1.5 b=3 c=35897 a = 1 B.Shishedjiev - Affectation