Programmation Structurée - Chapitre 2 PDF
Document Details
Uploaded by BeneficialChrysanthemum9823
ENSA de Marrakech
Pr Bekkari
Tags
Summary
This document is a chapter on structured programming, focusing on operators, expressions, and control structures. It details arithmetic operators, assignment operators, type casting, and more.
Full Transcript
Chapitre II: Opérateurs, Expressions et Structures de contrôles Pr Bekkari 1 Cycle préparatoire de l’ENSA de Marrakech Année universitaire 2023 - 2024 06/10/2023 Contenu du chapitre Opérateurs et expressions Structur...
Chapitre II: Opérateurs, Expressions et Structures de contrôles Pr Bekkari 1 Cycle préparatoire de l’ENSA de Marrakech Année universitaire 2023 - 2024 06/10/2023 Contenu du chapitre Opérateurs et expressions Structures de contrôle 2 06/10/2023 Opérateurs et expressions 1) Opérateurs arithmétiques 2) Opérateur d’affectation 3) Conversion (cast) du type d’une expression 4) L’affectation composée 5) Opérateurs d’incrémentation et de décrémentation 6) Opérateurs relationnels 7) Opérateurs logiques 8) Opérateurs conditionnels 9) Opérateur sizeof() 10) Règles de priorité des opérateurs 3 06/10/2023 Introduction Un opérateur est un symbole servant à construire une expression avec des variables et/ou des valeurs (ex: a + b) Une expression produit toujours un résultat (resultat = x + 2) Une expression peut être la combinaison de plusieurs opérateurs différents Le résultat d’une expression est évalué et déterminé en respectant les règles de priorité et d’associativité : Règle de priorité: certains opérateurs sont prioritaires à d’autres Règle d’associativité: ordre (sens) d’exécution des opérateurs qui ont le même niveau de priorité 4 06/10/2023 Opérateurs arithmétiques Cinq opérateurs classiques: + addition - soustraction * multiplication / division 5 2 % modulo (reste d’une division d’entiers) 1 2 Remarques sur les opérations: si a et b sont du même type alors le résultat est du même type également. Sinon conversion au type le plus fort Exemples: calculer a/b int a = 5, b = 2; float a = 5, b = 2; float a = 5; int b = 2; 5/2 → 2 5/2 → 2.5 5/2 → 2.5 5 06/10/2023 Opérateurs arithmétiques Cette conversion automatique de type se fait selon une hiérarchie: int →long → float → double → long double Les types short et char sont systématiquement convertis en int Exemple général: int a, c; long b; float d ; soit l’expression : ((a*b) + c) / d; a sera convertie en long avant la multiplication a*b c sera convertie en long avant l’addition Le résultat de (a*b)+c sera converti en float Le résultat de l’expression ((a*b)+c)/d sera un float 6 06/10/2023 Opérateur d’affectation = L’affection est symbolisée par = et permet d’affecter une valeur ou une expression à une variable Syntaxe: variable = expression Exemples: x=2; y=x*i Il est possible d’enchainer plusieurs affectations: x=y=z= i+1; Le résultat de l’expression est toujours converti dans le type de variable(même si ce type est plus faible) Exemple : int x; float i = 1.5; x= i + 1; → la valeur de x est 2 7 06/10/2023 Conversion (cast) du type d’une expression Il est possible de forcer le type d’une expression, d’une variable ou d’une valeur Syntaxe: (type) expression Exemple1: int x = 5, y = 2; x / y → 5/2 = 2 (float) (x / y) → 5/2 = 2.0; Exemple 2: float a = 2.5 , b = 1.5; a/b → 2.5/1.5 = 1.66; (int) a / b → 2/1.5 = 1.33; //conversion de a uniquement a / (int) b → 2.5/1 = 2.5; //conversion de b uniquement (int) a / (int) b → 2/1 = 2; //conversion de a et b Noter que (int) a / (int) b ≠ (int) (a / b) 8 06/10/2023 L’affectation composée Il s’agit de combiner l’affectation = avec d’autres opérateurs Syntaxe: expression1 op= expression2 Combinaison avec les opérateurs arithmétiques: += -= *= /= %= Exemples: a+=b équivalent à a = a+b a-=b équivalent à a = a-b x*=i équivalent à x=x*i x%=2 équivalent à x = x%2 9 06/10/2023 Incrémentation / décrémentation L’incrémentation: permet d’ajouter 1 au contenu d’une variable. Symbole : ++ (i++ équivalent à i+1) La décrémentation: permet de soustraire 1. Symbole: -- (i-- équivalent à i -1) Les symboles d’incrémentation et de décrémentation peuvent s’utiliser en suffixe (i++ , i--) ou préfixe (++i , --i) Post-incrémentation en suffixe (i++, i--): la valeur est affectée avant d’être incrémentée Pré-incrémentation en préfixe (++i, --i): la valeur est incrémentée et ensuite affectée Exemple: int a = 5 , b, c; b =++a ; → a vaut 6 et b vaut 6 10 c = b++; → c vaut 6 et b vaut 7 06/10/2023 Opérateurs relationnels Il s’agit d’opérateurs de comparaison: < : inférieur à : supérieur à >= : supérieur ou égal à == : égal à != : différent de Syntaxe: expression1 op expression2 La valeur rendue par l’opération de comparaison est : 0 ou 1 1 si la condition est vrai 0 si la condition est fausse Exemples: int a = 5, b = 3; a == 6 → renvoi 0 b != a - 1 → renvoi 1 2*(a>b) → renvoi 2 11 06/10/2023 Opérateurs logiques Il s’agit de: && et logique || ou logique ! négation logique Syntaxe: expression1 op expression2 La valeur retournée est: 1 si la condition est vrai, 0 sinon. Remarques: && est vrai uniquement si toutes les expressions sont vraies || est vrai si au moins l’une des expressions est vraie Exemples: int a = 5, b = 3, c=1; (a>b) && (a!=c) → renvoi 1 (a==b) || ((a*2)>b) → renvoi 1 ((b-c) == 5) && !(b0 ? x : -x ; // x va être exécutée Exemple 2: int m, a=5, b=2, i=1; m = ((a>b) ? ++i : --i ); // m = 2 m = ((a>b) ? i-- : i++ ); // m = 1 13 06/10/2023 Opérateurs conditionnels Interprétation: Il est possible d’utiliser une imbrication d’opérateurs conditionnels Exemple 3: int x=2, y, z, t; y=(x>0? 1: (x=0) printf(ʺx est un nombre positifʺ); 2. Il est possible d’imbriquer plusieurs branchements if--else (mettre des {} pour éviter toute confusion) exemple: Afficher si x est positif, négatif ou nul if (x>=0) { if (x==0) printf(ʺx est nulʺ); else printf(ʺx est positifʺ); } else printf(ʺx est négatifʺ); 21 06/10/2023 Branchement switch Switch permet de choisir un bloc d’instructions à exécuter selon la valeur de l’expression qui est toujours une constante entière switch (expression) { Evaluation de la valeur Syntaxe: de l’expression case constante_1: bloc d’instructions 1; break; Si l’une des case constante_2: constante est bloc d’instructions 2; vérifiée, son bloc break; d’instruction sera... exécuté case constante_n: bloc d’instructions n; break permet de break; sortir du switch default: bloc d’instruction 22 bloc d’instructions ; par défaut } 06/10/2023 Branchement switch Il est possible d’avoir une ou plusieurs instructions dans le bloc d’instruction Les instructions break et default sont optionnelles Exemple: Menu permettant d’incrémenter ou décrémenter la valeur de i int choix, i=0; printf(ʺ1: incrémenter \n 2: décrémenter ʺ); printf(ʺ\n faites un choix: ʺ); scanf(ʺ%dʺ, &choix); switch (choix){ case 1: i++; printf("i=%d",i); break; case 2: i--; printf("i=%d",i); break; default: printf(ʺerreur de saisie\nʺ); 23 } 06/10/2023 Branchement switch Remarque: Un switch est équivalent à un if dans certaines conditions Exemple 1: refaire l’exemple du menu avec if--else int choix, i=0; printf(ʺ1: incrémenter \n 2: décrémenter ʺ); printf(ʺ\n faites un choix: ʺ); scanf(ʺ%dʺ, &choix); if(choix==1){ i++; printf("i=%d",i); } else { if(choix==2) { i--; printf("i=%d",i); } else printf(ʺerreur de saisie\nʺ); 24 } 06/10/2023 Branchement switch Exemple 2: refaire avec un switch—case l’exemple du test de x positif, négatif ou nul #include int main(){ int x; printf(ʺsaisissez xʺ); scanf(ʺ%dʺ, &x); switch(x){ case 0: printf(ʺx est nulʺ); break; default: if(x>0) printf(ʺx est positifʺ); else printf(ʺx est negatifʺ); } return 0; 25 } 06/10/2023 Boucle while Permet de répéter une série d’instructions Syntaxe: while (condition){ instructions; } La condition est évaluée à chaque itération et les instructions sont exécutées tant que la condition est vérifiée vraie Quand la condition devient fausse: sortie de la boucle Si dès le départ la condition est fausse: les instructions ne seront jamais exécutées Exemple: impression des entiers int i = 0; 1 Toujours initialiser la while (i < 6) { 2 variable de la printf("%d \n",++i); 3 4 condition while 26 } 5 6 06/10/2023 Boucle do--while Syntaxe: do { instructions; } while(condition); Différence avec le while: le test de la condition est effectué après l’exécution des instructions une première fois Exemple : impression des entiers 1 int i = 0; 2 do { 3 printf("%d \n",++i); 4 } while (i