« Exercices en langage C/Structures de contrôle » : différence entre les versions

Contenu supprimé Contenu ajouté
Ligne 2 :
== Structures conditionnelles ==
===Analyse de programme : choix multiple===
Soit le programme suivant :
<source lang="c">
#include <stdio.h>
Ligne 18 ⟶ 19 :
</source>
Qu'est ce qui sera affiché à l'écran lors de l'exécution de ce programme ?
 
Même question pour le programme :
<source lang="c">
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int i=18;
i=i-(--i);
switch(i) {
case 1 : (void)printf("Premier\n");
case 2 : (void)printf("Deuxième\n");
case 3 : (void)printf("Troisième\n");
default : (void)printf("Non classe\n");
}
return EXIT_SUCCESS;
}
</source>
 
{{Boîte déroulante|titre=Solution|contenu=
* pour le premier programme :
Comme i vaut 7 au début du programme, on pourrait penser que i/2 donne 3.5 qui est arrondi à 4 (puisqu'affecté à une variable entière sur un octet). Mais il n'en est rien : 8/3 = 2.66 ne donne pas plus 3 mais seulement 2... parceque 8/3 donne un quotient de 2 avec 2 comme reste et que l'on s'intéresse à ce quotient justement ! C'est cela la division entière. Don quand on arrive au switch, i vaut 3 et donc
<pre>
Ligne 25 ⟶ 44 :
</pre>
s'affiche à l'écran.
* Pour le deuxième programme, c'est
<pre>
Non classe
</pre>
qui s'affiche car :
<source lang="c">
int i=18;
i=i-(--i);
</source>
est la même chose que :
<source lang="c">
int i=18;
i--; // i passe à 17
i=i-(i); // 17-17 donne 0
</source>
Remarquons que
<source lang="c">
int i=18;
i=i-(i--);
</source>
donnerait exactement le même résultat.
}}