1 3. Opérateurs et instructions Opérateurs Expression et instruction Structures de contrôle structures alternatives structures répétitives
Opérateurs 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 0 0 0 1 0 1 0 1 0 0 0 0 0 0 1 1 a & b => 1 0 0 0 0 0 0 0 1 (ne garder qu un certain nombre de bits) a b => 23 0 0 0 1 0 1 1 1 (forcer des bits à 1)
6 Opérateurs Décalage : >> (décalage à droite) << (décalage à gauche) Exemples : 7 << 2 127 >> 3 0000 0111 0001 1100 0111 1111 0000 1111 le remplissage se fait par des zéros pour le décalage à gauche dépend du compilateur pour le décalage à droite
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 vrai Instr. 1 faux Instr. 2
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 vrai a>b max =a faux 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 Structures de contrôle (alternatives) void main() { int i=2, k=3; if (i == 1) printf("i vaut 1\n"); else printf("i differe de 1\n"); Sortie écran: - i differe de 1 if (k!= 3) printf("k differe de 3\n"); - } if (k > i && k < 0) { printf("k negatif\n"); printf ("k sup a i\n"); } - - 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 } expression = instruction 1 label2 label1 sinon instruction 2 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
15 Structures de contrôle (alternatives) switch ( expression ) { case label1 : instruction1 break; case label2 : instruction2 default : instructiond } break; expression = label1 instruction 1 label2 instruction 2 sinon instruction D 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)
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!
Note: idem sans l instruction i++; è boucle infinie d affichage de 1! 17 Structures de contrôle (répétitives) 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 expression faux vrai Instruction Exemple : int i = 1 ; while (i < 5) { printf( %i \n, i); i++ ; } Sortie écran: 1 2 3 4
18 Structures de contrôle (répétitives) 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; } expression1 expression2 faux vrai Instruction; expression3;
19 Structures de contrôle (répétitives) Le plus utilisé de tous pour une boucle simple! : (écriture concise) for for ( initialisation ; condition ; incrémentation ) instruction Exemple: int i; for (i=1 ; i<5 ; i++) { printf( %i \n, i);} Sortie écran: 1 2 3 4 Note: 1 seule instruction élémentaire à répéter è { } facultatives
20 Structures de contrôle (répétitives) 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 Structures de contrôle (répétitives) 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! Instruction expression faux vrai Exemple : i = 1 ; do { printf( % i \ n, i); i++ ; } while ( i < 5) ; Sortie écran: 1 2 3 4
22 Structures de contrôle (répétitives) 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