Programmer en langage C
8
© Éditions Eyrolles
ce qui correspond à une valeur flottante (plus tard, nous verrons précisément sous quelle forme
elle peut être fournie ; l’exemple d’exécution du programme vous en donne déjà une bonne
idée !). Notez bien qu’ici, contrairement à ce qui se produisait pour printf, nous n’avons
aucune raison de trouver, dans ce format, d’autres caractères que ceux qui servent à définir un
code de format.
Comme nous pouvons nous y attendre, les arguments (ici, il n’y en a qu’un) précisent dans
quelles variables on souhaite placer les valeurs lues. Il est fort probable que vous vous attendiez à trouver simplement x et non pas &x.
En fait, la nature même du langage C fait qu’une telle notation reviendrait à transmettre à la
fonction scanf la valeur de la variable x (laquelle, d’ailleurs, n’aurait pas encore reçu de
valeur précise). Or, manifestement, la fonction scanf doit être en mesure de ranger la valeur
qu’elle aura lue dans l’emplacement correspondant à cette variable, c’est-à-dire à son adresse.
Effectivement, nous verrons que & est un opérateur signifiant adresse de.
Notez bien que si, par mégarde, vous écrivez x au lieu de &x, le compilateur ne détectera pas
d’erreur. Au moment de l’exécution, scanf prendra l’information reçue en deuxième argument (valeur de x) pour une adresse à laquelle elle rangera la valeur lue. Cela signifie qu’on
viendra tout simplement écraser un emplacement indéterminé de la mémoire ; les conséquences pourront alors être quelconques.
1.7 Pour faire des choix : l’instruction if
Les lignes :
if (x < 0.0)
printf ("Le nombre %f ne possède pas de racine carrée\n", x) ;
else
{ racx = sqrt (x) ;
printf ("Le nombre %f a pour racine carrée : %f\n", x, racx) ;
}
constituent une instruction de choix basée sur la condition x < 0.0. Si cette condition est
vraie, on exécute l’instruction suivante, c’est-à-dire :
printf ("Le nombre %f ne possède pas de racine carrée\n", x) ;
Si elle est fausse, on exécute l’instruction suivant le mot else, c’est-à-dire, ici, le bloc :
{ racx = sqrt (x) ;
printf ("Le nombre %f a pour racine carrée : %f\n", x, racx) ;
}
Notez qu’il existe un mot else mais pas de mot then. La syntaxe de l’instruction if
(notamment grâce à la présence de parenthèses qui encadrent la condition) le rend inutile.
Delannoy Livre.book Page 8 Mercredi, 6. mai 2009 4:26 16
8
© Éditions Eyrolles
ce qui correspond à une valeur flottante (plus tard, nous verrons précisément sous quelle forme
elle peut être fournie ; l’exemple d’exécution du programme vous en donne déjà une bonne
idée !). Notez bien qu’ici, contrairement à ce qui se produisait pour printf, nous n’avons
aucune raison de trouver, dans ce format, d’autres caractères que ceux qui servent à définir un
code de format.
Comme nous pouvons nous y attendre, les arguments (ici, il n’y en a qu’un) précisent dans
quelles variables on souhaite placer les valeurs lues. Il est fort probable que vous vous attendiez à trouver simplement x et non pas &x.
En fait, la nature même du langage C fait qu’une telle notation reviendrait à transmettre à la
fonction scanf la valeur de la variable x (laquelle, d’ailleurs, n’aurait pas encore reçu de
valeur précise). Or, manifestement, la fonction scanf doit être en mesure de ranger la valeur
qu’elle aura lue dans l’emplacement correspondant à cette variable, c’est-à-dire à son adresse.
Effectivement, nous verrons que & est un opérateur signifiant adresse de.
Notez bien que si, par mégarde, vous écrivez x au lieu de &x, le compilateur ne détectera pas
d’erreur. Au moment de l’exécution, scanf prendra l’information reçue en deuxième argument (valeur de x) pour une adresse à laquelle elle rangera la valeur lue. Cela signifie qu’on
viendra tout simplement écraser un emplacement indéterminé de la mémoire ; les conséquences pourront alors être quelconques.
1.7 Pour faire des choix : l’instruction if
Les lignes :
if (x < 0.0)
printf ("Le nombre %f ne possède pas de racine carrée\n", x) ;
else
{ racx = sqrt (x) ;
printf ("Le nombre %f a pour racine carrée : %f\n", x, racx) ;
}
constituent une instruction de choix basée sur la condition x < 0.0. Si cette condition est
vraie, on exécute l’instruction suivante, c’est-à-dire :
printf ("Le nombre %f ne possède pas de racine carrée\n", x) ;
Si elle est fausse, on exécute l’instruction suivant le mot else, c’est-à-dire, ici, le bloc :
{ racx = sqrt (x) ;
printf ("Le nombre %f a pour racine carrée : %f\n", x, racx) ;
}
Notez qu’il existe un mot else mais pas de mot then. La syntaxe de l’instruction if
(notamment grâce à la présence de parenthèses qui encadrent la condition) le rend inutile.
Delannoy Livre.book Page 8 Mercredi, 6. mai 2009 4:26 16
