Nous venons de voir que le langage C peut jouer le rôle de calculette quatre opérations (bien que plus diffcile à manipuler qu'une vraie calculette). Nous allons voir qu'il peut aussi jouer le rôle d'une petite calculette scientifique.
Il faut utiliser la bibliothèque mathématique et donc utiliser le fichier inclus correspondant. Tous les programmes suivants commenceront donc par :
#include <math.h>Dans ce cas, lors de la compilation, il faut indiquer explicitement d'utiliser la bibliothèque mathématique :
gcc -lm -o nom nom.c
Deux autres opérations sont implémentées en langage C pour les entiers (relatifs) : la valeur absolue et la division euclidienne. Par contre, et cela est volontaire, l'exponentiation n'est pas implémentée.
| Syntaxe | La syntaxe de la valeur absolue, représentée par abs(.), qui est une opération unaire, c'est-à-dire une application, se comprend sur l'exemple suivant : printf("%d",abs(-3)); |
| Introduction. | La division n'est une opération totale ni sur N ni sur Z. Rappelons cependant qu'il existe une autre sorte de division, la division euclidienne, qui est une opération totale avec deux résultats. Pour un entier a et un entier non nul b, il existe un unique couple (q, r) d'entiers tels que :
a = b.q + r et 0 <= r < |b|.L'entier q est appelé le quotient (exact) et l'entier r le reste dans la division euclidienne de a par b. |
| Syntaxe | Cette opération existe en C, en fait sous la forme de deux opérations : une pour obtenir le quotient et une pour obtenir le reste. Le symbole pour obtenir q est ``/'', celui pour obtenir r est ``%''. Ainsi :
|
| Introduction | Il faut bien dire que l'affchage par défaut des réels, sous forme scientifique, n'est pas très élégant. On peut heureusement obliger l'affchage à être sous une forme voulue, en indiquant le nombre de chiffres désiré ainsi que le nombre de chiffres après la virgule (l'exposant étant alors recalculé pour qu'il s'agisse bien du même nombre). |
| Syntaxe | La syntaxe du format est la suivante. Au lieu de %f on indique le format : %<entier1>.<entier2>foù Entier1 et Entier2 sont des entiers naturels. On peut aussi l'utiliser avec %e, %E, %g et %G. |
| Sémantique | <entier1> indique le nombre de chiffres total à affcher et <entier2> le nombre de chiffres à affcher après la virgule (c'est donc un entier inférieur à <entier1>). Si nécessaire les valeurs sont arrondies ou les chiffres après la virgule sont complétés par des 0. Attention! <entier1> représente bien le nombre total de chiffres et non le nombre de chiffres avant la virgule, comme la syntaxe du format pourrait le laisser entendre. |
#include<stdio.h>
int main (void)
{
printf("%9.8f",23.0/30);
}
| Introduction | Vous connaissez un certain nombre de fonctions de R dans R, par exemple les fonctions trigonométriques (sinus, cosinus, tangente, cotangente) et les fonctions logarithmiques, exponentielle, logarithme népérien, logarithme décimal). Il faut pouvoir manipuler ces fonctions, en particulier les calculer de façon approchée. | ||||||||||||||||||||
| Problème de l'implémentation | Il n'est pas question d'implémenter ces fonctions sur un ordinateur de façon exacte, puisque la valeur d'une telle fonction, même pour un argument décimal, n'est pas nécessairement un décimal. Mais il est intéressant d'en obtenir une valeur approchée. Dans un langage de programmation tel que le langage C, le calcul approché (avec une précision non dominée) d'un certain nombre de ces fonctions est implémenté, tout au moins en faisant appel au fichier inclus <math.h> |
||||||||||||||||||||
| Liste de quelques fonctions | Dans le tableau ci-dessous, l'écriture de ce qui est dans la colonne de gauche permet de calculer une valeur approchée de ce qui est indiqué dans la colonne de droite :
|
On aura pu remarquer que, parmi les fonctions prédéfinies, s'il existe bien une fonction partie entière dont le résultat est un réel, nous n'avons pas donné de fonction partie entière dont le résultat est un entier. Il existe en langage C une façon de convertir des entités de types cohérents d'un type à l'autre que nous verrons dans le chapitre suivant, qui permettra de résoudre le problème.
Cours, éxercices ou graphismes libre de droit. Un mail est souhaitable | Webmestre : Aublet Bastien (bastien.aublet@hotmail.fr)