Langage C:Branchements conditionnels

Un article de WikiTuto.

Jump to: navigation, search

Sommaire

Branchements conditionnels

On a souvent besoin de n'effectuer certaines instructions que dans certains cas. On dispose pour cela du IF et du SWITCH.

If - Else (Si - Sinon)

structure

if (expression) instruction1 ou : if (expression) instruction1 else instruction2 jeu Si l'expression est vraie (!=0) on effectue l'instruction1, puis on passe à la suite. Sinon, on effectue l'instruction 2 puis on passe à la suite (dans le cas sans else on passe directement à la suite).

Exercice (jeu)

modifier le jeu de l'exercice (do_while) en précisant au joueur à chaque essai si sa proposition est trop grande ou trop petite. Cliquez ici pour une solution.

L'instruction d'un if peut être un autre if (imbriqué)

exemple

if(c1) i1;
	else if (c2) i2;
	else if (c3) i3;
	else i4;
	i5;

si c1 alors i1 puis i5, sinon mais si c2 alors i2 puis i5, ... Si ni c1 ni c2 ni c3 alors i4 puis i5.

Le else étant facultatif, il peut y avoir une ambiguïté s'il y a moins de else que de if. En fait, un else se rapporte toujours au if non terminé (c'est à dire à qui on n'a pas encore attribué de else) le plus proche. On peut aussi terminer un if sans else en l'entourant de {}.

exemple : if(c1) if(c2) i1; else i2; : si c1 et c2 alors i1, si c1 et pas c2 alors i2, si pas c1 alors (quel que soit c2) rien. if (c1) {if (c2) i1;} else i2; : si c1 etx>=0) if (y>=0 c2 alors i1, si c1 et pas c2 alors rien, si pas c1 alors i2.

Un programmeur expérimenté utilisera toujours un maximum de "else" :

if(x>=0 && y>=0)....;
if(x<=0 && y>=0)....;
if(x>=0 && y<=0)....;
if(x<0 && y<0)....;

mauvais : toujours 8 tests quelques risques d'erreur (si nul)

if(x>=0) if (y>=0)....;
         else ....; /*x>=0 et y<0*/
else     if (y>=0)....; /*x<0 de toute façon*/
         else ....; /*x<0 et y<0*/

bon : toujours 2 tests et impossibilité de faire deux cas ou aucun ou encore :

if(rep=='O').....;
else if(rep=='+'&& delta>0).....;
else if(rep=="A").....;
else if(z==0).....;
else printf("cas non prévu\n");

Quoi qu'il arrive, on ne fera qu'un cas. Dans le second inutile de rajouter rep!='O', on n'arrive au Nième cas que si tous les précédents sont faux. Tous les cas sont donc automatiquement exclusifs. Pour accélérer le programme il suffit de mettre en premier le cas le plus courant, on ne fera en majorité qu'un seul test.

Switch - Case (brancher - dans le cas)

Cette structure de contrôle correspond à un "goto calculé".

structure

switch (expression_entière)
	  {
	    case cste1:instructions
	    case cste2:instructions
		........
	    case csteN:instructions
	    default :instructions
	  }

L'expression ne peut être qu'entière (char, int, long). L'expression est évaluée, puis on passe directement au "case" correspondant à la valeur trouvée. Le cas default est facultatif, mais si il est prévu il doit être le dernier cas.

exemple

fonction vérifiant si son argument c est une voyelle.

int voyelle(char c)
 {
  switch(c)
   {
    case 'a':
    case 'e':
    case 'i':
    case 'o':
    case 'u':
    case 'y':return(1); /* 1=vrai */
    default :return(0);
   }
 }

Remarque : l'instruction break permet de passer directement à la fin d'un switch (au } ). Dans le cas de switch imbriqués on ne peut sortir que du switch intérieur.

Exemple :

switch (a)
	   {
	    case 1:inst1;inst2;....;break;
	    case 2:....;break;
	    default:.....
	   } 
	   /*endroit où l'on arrive après un break*/

Exercice (calcul)

faire un programme simulant une calculatrice 4 opérations. Cliquez ici pour une solution.


structure

exit(); ou exit(valeur); 

Voir aussi


Auteur :Patrick TRAU. Copyright : utilisation de ces documents libre pour tout usage personnel. Utilisation autorisée pour tout usage public non commercial, à condition de citer son auteur (Patrick TRAU, IPST, Université Louis Pasteur Strasbourg, email : Patrick.Trau (à) ipst-ulp.u-strasbg.fr ) et de me signaler tout usage intensif. Utilisation commerciale interdite sans accord écrit de ma part.

Boîte à outils
Annuaire gratuitCe site est listé dans la catégorie Informatique : Aide et astuces en informatique Annuaire