• Aucun résultat trouvé

3. Opérateurs et instructions

N/A
N/A
Protected

Academic year: 2022

Partager "3. Opérateurs et instructions"

Copied!
24
0
0

Texte intégral

(1)

3. Opérateurs et instructions

• 

Opérateurs

• 

Expression et instruction

• 

Structures de contrôle

• 

structures alternatives

• 

structures répétitives

(2)

• 

Affectation: =

•  identificateur = résultat d’une expression arithmétique résultat d’une expression booléenne résultat retourné par une fonction

lvalue rvalue

•  réaffectation de droite à gauche :

i = j = k = 1 ;

• 

Opérateurs unaires + et -

•  -i est le négatif de i

•  +i est la valeur de i

( nouveau dans la norme ANSI)

(3)

Opérateurs

• 

Arithmétiques : + - / * %

•  il manque l ’exponentiation

*, / et % ont même priorité : a + et - ont même priorité : b

priorité a > priorité b

exemples :

a + b * c => a + (b * c) c * d % e => (c * d) % e

• 

Incrémentation - décrémentation

•  addition ou soustraction de 1

•  x = x + 1

;

x++;

ou

++x;

•  x = x – 1; x--

; ou

--x;

(4)

Opérateurs

• 

Relationnels : > < >= <=

==

(égal)

!=

(différent)

•  rend un résultat booléen : 1 ou 0 (vrai ou faux)

•  priorité inférieure à celle des opérateurs arithmétiques

a+b*c < d/f

est évalué en

(a+(b*c)) < (d/f)

opérateur de comparaison :

==

•  comparaison des réels

• 

Logiques : ! (not) && (and) || (or)

•  règles de l’algèbre de Boole

•  utilisé pour les évaluations des expressions logiques

•  VRAI et FAUX sont codés numériquement : faux = 0

•  vrai ≠ 0

(5)

Opérateurs

• 

Manipulation de bits : &

(et)

|

(ou)

^

(xor)

~

(complément)

•  particularité du C

•  ne s’applique pas aux réels

•  utilisation du & et du | : masques

exemples :

a = 21 b = 3

a & b => 1

(ne garder qu’un

certain nombre de bits)

a | b => 23

(forcer des bits à 1)

0 0 0 1 0 1 0 1

0 0 0 0 0 0 1 1

0 0 0 0 0 0 0 1

0 0 0 1 0 1 1 1

(6)

Opérateurs

• 

Décalage : >>

(décalage à droite)

<<

(décalage à gauche)

Exemples :

7 << 2

127 >> 3

•  le remplissage se fait par des zéros pour le décalage à gauche

•  dépend du compilateur pour le décalage à droite

0111 1111 0000 1111

0000 0111 0001 1100

(7)

Opérateurs

• 

Affectations compactées

•  On remplace les expressions de la forme

(exp1) = (exp1) op (exp2) par (exp1) op = (exp2)

•  Exemples :

i = i + 2 ; i += 2 ; j = j * 3 ; j *= 3 ;

•  plus près de la logique humaine

•  plus efficace

•  intéressant si expression complexe

tab[n*i-tab[3*n]] = tab[n*i-tab[3*n]] - 1;

•  incrémentation - décréméntation

(8)

Instructions

• 

Instruction simple

<

expression ;

>

combinaison d’identificateurs (var, fonction) et d’opérateurs

• 

Instruction composée

•  séquence d’instructions simples

•  délimitée par { et } (bloc)

•  syntaxiquement équivalent à 1 instruction simple

(9)

Structures de contrôle

Définissent la suite dans laquelle les instructions doivent être effectuées

•  2 types de structures :

•  alternatives

•  if … else

•  switch

•  répétitives

•  while

•  for

•  do … while

(10)

Structures de contrôle (alternatives)

• 

Alternatives

•  Permettent au programme de décider si oui ou non il exécute une séquence d’instructions, en fonction de la valeur d’une expression

•  En C la structure usuelle :

if … else …

if ( expression ) instruction 1 else instruction 2

Exemple : if (a >b)

max = a ; else

max = b ;

expression

Instr. 1

Instr. 2

faux

vrai

(11)

Structures de contrôle (alternatives)

• 

Alternatives

En C la structure usuelle :

if …

if ( expression ) instruction

Exemple : if (a >b)

max = a ; c=a+b

a>b

max =a

faux

vrai

c=a+b

(12)

Structures de contrôle (alternatives)

if ( expression ) instruction 1 else instruction 2

•  expression logique VRAIE ou FAUSSE ( ≠ 0 ou = 0), donc évaluée comme une valeur numérique.

•  typiquement des opérateurs relationnels

(Attention: la comparaison est == et non pas l’affectation = )

•  une instruction simple ou une instruction composée (bloc)

•  Exemple : if (a > b) différent de if (a > b) instr1 ; instr1 ; else else

instr2 ; { instr2 ; instr3 ; instr3 ; instr4 ; }

instr4 ;

(13)

void main()

{ int i=2, k=3;

if (i == 1)

printf("i vaut 1\n");

else

printf("i differe de 1\n");

if (k != 3)

printf("k differe de 3\n");

if (k > i && k < 0)

{ printf("k negatif\n");

printf ("k sup a i\n");

}

}

Sortie écran:

-

i differe de 1

-

- -

Note : utiliser ((k>i) && (k<0)) plutôt que ( k>i && k<0 )

(14)

Structures de contrôle (alternatives)

Lorsqu’il y a plus de 2 possibilités, utilisation de

if

imbriqués

•  ou la structure

switch

switch ( expression )

{ case label1 : instruction1 case label2 : instruction2 …

}

•  l’expression est évaluée et convertie en un entier

•  on se branche à l’instruction correspondant au label (1 constante: entier, char) et on exécute les instructions séquentiellement

•  si aucun label ne correspond, on passe à l’instruction suivant le bloc switch

expression =

instruction 1

instruction 2

label1 label2

sinon

(15)

Structures de contrôle (alternatives)

switch ( expression )

{ case label1 : instruction1 break;

case label2 : instruction2 break;

default : instructionD }

•  break : sort du switch immédiatement -> instruction suivante du switch ignorées

•  default : indique l’instruction à exécuter par défaut, si aucun label ne correspond.

A mettre après tous les case.

•  Si par défaut aucune instruction , on ne met rien après default : (idem pour un label)

expression =

instruction 1

label1

label2 instruction 2 instruction D

sinon

(16)

Structures de contrôle (alternatives)

switch (i) {

case 1:

printf("i=1!\n");

case 2:

printf("i=2!\n");

break;

case 3:

printf("i=3!\n");}

break;

default: printf("bad");

}

Sortie écran:

pour i=2:

i=2!

pour i=3:

i=3!

pour i=4:

bad

pour i=1:

i=1!

i=2!

(17)

• 

Répétitives

•  Des boucles permettent d’exécuter une séquence d’opérations de façon répétitive, jusqu’à ce qu’une condition soit remplie.

•  En C une structure possible :

while

while ( expression ) instruction

Exemple :

int i = 1 ; while (i < 5)

{ printf(‘‘ %i \n’’, i);

i++ ; }

Instruction expression

faux vrai

Sortie écran:

1 2 3 4

Note: idem sans l’instruction i++; è boucle infinie d’affichage de 1 !

(18)

Autre structure répétitive :

for

for ( expression1 ; expression2 ; expression3 ) instruction 1) expression1 est évaluée la première fois uniquement 2) expression2 est évaluée

§ si expression2 est vraie alors instruction est exécutée et expression3 est évaluée

§ sinon sortie de la boucle

équivalant à : expression1;

while ( expression2) {

instruction;

expression3;

}

Instruction;

expression3;

expression2

faux vrai

expression1

(19)

Le plus utilisé de tous pour une boucle simple ! :

for

(écriture concise)

≈ for ( initialisation ; condition ; incrémentation ) instruction

Exemple:

int i;

for (i=1 ; i<5 ; i++)

{ printf(’’%i \n ’’, i);}

Note: 1 seule instruction élémentaire à répéter è { } facultatives

Sortie écran:

1 2 3 4

(20)

for

Exemple: somme des éléments d’un tableau

void main()

{ int i, somme=0;

int tab[4]={1,5,-3,7};

for (i=0 ; i<4 ; i++) somme +=tab[i];

printf("somme du tableau : %d\n", somme);

}

(21)

while et for testent la condition au début de la boucle

Autre structure répétitive :

do … while

do instruction while (expression) ;

•  la condition est évaluée en fin de boucle

è exécution de l’instruction au moins 1 fois ! Exemple

:

i = 1 ; do

{ printf(‘‘ % i \ n ’’, i);

i++ ;

} while ( i < 5) ;

Instruction

expression

vrai

faux

Sortie écran:

1 2 3 4

(22)

do instruction while (expression)

Exemple

:

Forcer la saisi d’un entier positif int c= -1 ;

do

{ printf(‘‘ Entrer un nombre positif:\n’’);

scanf(“%i“, &c);

} while ( c < 0) ; printf(“merci\n“);

Exemple de bug : Boucle infinie while (i<10) ;

{ printf(“ok“); i++;}

(23)

Divers

• 

break

•  sortie du

switch

dans une boucle for , while ou do…while , le

break

fait sortir de la boucle de façon brutale

(a n’utiliser que si on ne peut faire autrement)

• 

continue

•  proche de l’instruction

break

•  dans une boucle, le

continue

fait passer brutalement à l’itération suivante

(24)

Divers

• 

goto label ;

•  retourne à la ligne de code où se trouve le label choisi, label : instruction;

et reprendre l’exécution de là.

•  A utiliser en dernier recours

Références

Documents relatifs

Bousculé, apostrophé, harcelé, l'auditeur ne sait plus si le bulletin météorologique qui annonce la neige a trait à la journée d'hier ou à celle de demain ; et il se retrouve en

Pour repérer la thèse défendue, il convient tout d'abord de trouver le thème du texte.. On peut ensuite chercher le jugement ou le sentiment du locuteur à propos de

exécuter des instructions si la condition est vraie, ce qui s´écrit en pseudo code:.

• On vous demande explicitement dans chaque exercice de vérifier votre programme en calculant les premières valeurs de la suite, à l’avenir il faudrait penser à faire vous. même

Une autre méthode pour échanger les valeurs des variables A et B, est basée sur l’introduction d’une variable supplémentaire C et effectuer les affectations suivantes : CA

On utilise la boucle do ... while quand on ne sait pas à l'avance le nombre de fois que l'on doit répéter le même traitement. Les exemples suivants permettent de voir

- Analyser le comportement attendu d’un système réel en fonction d’évènements, de données ou d’informations transmises et décomposer le problème posé en sous-problèmes

- Analyser le comportement attendu d’un système réel en fonction d’évènements, de données ou d’informations transmises et décomposer le problème posé en sous-problèmes