Le C en 20 heures


précédentsommairesuivant

IV. Variables (2e partie)

IV-A. Objectif

Dans ce chapitre nous allons utiliser le langage C comme une simple calculatrice et faire des additions, multiplications…

Nous allons voir qu'afin de pouvoir utiliser la bibliothèque mathématique du langage C (#include <math.h>), il est nécessaire d'ajouter au moment de la compilation(13) : -lm (lisez bien lm) ; ce qui nous donne :

 
Sélectionnez
gcc -o monprog monprog.c -lm

IV-B. Exercice de mise en bouche

Image non disponible Exercice n°3.1 — Introduction à une calculatrice

Écrivez un programme qui :

  • écrit « Calculatrice : » et saute 2 lignes…
  • écrit « Valeur de a : » et saute 1 ligne
  • attend l'appui d'une touche
  • écrit « Valeur de b : » et saute 1 ligne
  • attend l'appui d'une touche
  • écrit « Valeur de a + b : »

Normalement, vous n'aurez pas de soucis pour l'écrire… comparez ensuite avec la solution en fin de chapitre…

Pas à pas, nous allons maintenant réaliser notre petit programme de calculatrice.

IV-C. Déclaration des variables

Image non disponible Exercice n°3.2 — Somme

Complétez le programme en :

  • déclarant 2 variables a et b de type int (entier) ;
  • assignant à ces deux variables les valeurs 36 et 54 ;
  • faisant afficher le résultat de la somme de a+b (attention, n'écrivez pas le résultat 90 dans votre programme !).

Pour faire afficher le résultat, il est possible d'utiliser la fonction printf en utilisant une troisième variable. Mais pour rester plus concis, nous afficherons directement de la façon suivante :

 
Sélectionnez
printf ("Valeur de a + b : %d",a+b);

%d sera remplacé par la valeur de l'expression a+b.

IV-D. Saisie des variables

Si une calculatrice électronique se limitait à calculer la somme de deux nombres fixes, le boulier serait encore très répandu.

Pour saisir une variable, il est possible d'utiliser la fonction scanf. La fonction scanf s'utilise de la façon suivante :
 
Sélectionnez
scanf ("%d", &a);   // saisie de la valeur a

Comme pour printf, nous reconnaissons le %d pour la saisie d'un nombre entier. Le & devant le a signifie que nous allons écrire dans la variable a.

Aïe… En fait &a signifie « l'adresse mémoire de a ». La fonction scanf va donc écrire dans l'emplacement mémoire (la petite boîte contenant la variable) de a. Si nous oublions le &, nous écrirons chez quelqu'un d'autre, à une autre adresse. Et là ça peut faire mal, très mal… Mais ceci est une autre histoire sur laquelle nous reviendrons longuement par la suite… Pour l'instant, n'oubliez pas le &.

Nous allons maintenant saisir les variables a et b. Pour exemple, voici le code pour la saisie de a, la saisie de b reste à faire par vos soins à titre d'exercice.

 
Sélectionnez
/* Saisie de la valeur de a */
printf ("Valeur de a :\n");
scanf ("%d", &a);

Initialiser les variables

Il est conseillé d'initialiser les variables avant de les utiliser. Au début du programme, après leur déclaration, assignez la valeur 0 à a et à b.

Une fois complété, compilé, nous allons tester votre programme.
Entrez une valeur pour a puis appuyez sur la touche ENTREE . Renouvelez ensuite l'opération pour donner la valeur de b. Vérifiez que le résultat est correct.

Pour aller plus rapidement, il est possible d'initialiser une variable en même temps que nous la déclarons. Pour cela, rien de plus simple : ajoutez à la fin de la déclaration le symbole d'affectation = suivi de la valeur d'initialisation :
 
Sélectionnez
int i = 10;

Votre programme devrait ressembler à ceci (lisez le programme puis la remarque importante qui se trouve en dessous) :

 
Sélectionnez
#include <stdio.h> 
#include <math.h> 
int main () {
   int a=0;
   int b=0;
   printf("Calculatrice :\n\n");
   printf("Valeur de a : \n");
   scanf("%d",&a);
   printf("\n");
   printf("Valeur de b : \n");
   scanf("%d",&b);
   printf("\nValeur de a+b : %d\n",a+b);  /* Affichage de la somme */
   getchar ();
   return 0;
}

Vous pouvez tester ce programme et vous vous apercevrez que curieusement, le programme se finit alors que vous n'avez même pas eu le temps d'appuyer sur la touche ENTREE. C'est comme si le getchar() de la fin était purement et simplement oublié  ! En fait, il s'agit d'une petite « sournoiserie » du Langage C ; en effet le scanf("%d",&b) attend que vous entriez une valeur au clavier.

Pour fixer les idées, supposons que vous entriez la valeur 1234.

La chose à bien comprendre est que pour entrer cette valeur, vous appuyez également sur la touche ENTREE. La subtilité tient au fait que le scanf("%d",&b) « veut » juste une valeur entière. Il laissera donc la valeur de la touche ENTREE disponible pour la prochaine instruction qui ira lire quelque chose au clavier (en fait, l'appui sur la touche ENTREE reste disponible sur l'entrée standard) ; c'est précisément le getchar() qui va le récupérer et qui permettra donc la sortie du programme.

Aïe aïe aïe, dur dur d'être programmeur.

Notre idée simple de départ commence à se compliquer, et tout ça pour faire quelques opérations basiques…

Image non disponible Exercice n°3.3 — Initialisation

Déclarez une troisième valeur de type int (pensez à l'initialiser à 0) que nous nommerons simplement s comme somme. Une fois les valeurs de a et b saisies, initialisez s avec la valeur de a+b. Affichez la valeur de s. Nous devrions avoir les mêmes résultats qu'auparavant, bien sûr.

Image non disponible Exercice n°3.4 — Obtenir des résultats

Réalisez deux petits programmes qui font :

  • la soustraction de deux nombres ;
  • la multiplication de deux nombres.

Une fois que vous avez votre solution, comparez avec la correction proposée plus loin.

IV-E. Les types flottants

Nous allons étudier un nouveau type de données : les nombres à virgule flottante ou simplement flottants (float), qui permettent de représenter des nombres à virgule. Le type float permet de déclarer un tel nombre. Transformez les trois programmes précédents en utilisant le type float au lieu du type int. Enfin, si pour les int, nous utilisions le format %d au sein des printf et des scanf, à présent, nous allons utiliser le format %f pour les flottants.

Pour vous aider, voici un petit morceau de programme qui permet la saisie de la valeur de a et l'affiche :

 
Sélectionnez
  float a;
   printf("Saisie de a :");
   scanf("%f",&a);
   printf("\n  a vaut : %f\n",a);
Pour un affichage plus agréable il est possible de fixer le nombre de chiffres après la virgule de la façon suivante :
 
Sélectionnez
%.[nombre de chiffres après la virgule]f

Voici un exemple :

 
Sélectionnez
printf ("%.2f",a);

Image non disponible Exercice n°3.5 — Ouah, les 4 opérations !

Créez un quatrième programme qui réalise la division de deux nombres. Vous pourrez vous amuser à le tester avec une division par 0 ! La solution à ce petit problème sera vu dans le chapitre sur les conditions (if).

IV-F. D'autres fonctions utiles

La fonction abs permet d'obtenir la valeur absolue d'un nombre entier. La fonction fabsf permet d'obtenir la valeur absolue d'un float.

Notez que pour utiliser ces deux fonctions mathématiques, il faut ajouter #include <math.h> dans le source et ajouter l'option -lm dans la commande de compilation.

Image non disponible Exercice n°3.6 — Absolument !

Utilisez cette dernière fonction pour calculer la valeur absolue de (a-b).

Image non disponible Exercice n°3.7 — Arrondissez

La fonction ceilf permet d'obtenir l'arrondi entier supérieur d'un flottant. Utilisez cette fonction pour calculer l'arrondi supérieur de (a/b).

IV-G. Corrigés des exercices du chapitre

Image non disponible Corrigé de l'exercice n°3.1 — Introduction à une calculatrice

 
Sélectionnez
#include <stdio.h> 
#include <math.h> 
int main () {
   printf("Calculatrice :\n\n");
   printf("Valeur de a : \n");
   getchar();
   printf("Valeur de b : \n");
   getchar();
   printf("Valeur de a+b :\n");
   return 0;
}

Image non disponible Corrigé de l'exercice n°3.2 — Somme

 
Sélectionnez
#include <stdio.h> 
#include <math.h> 
int main () {
   int a,b;
   a=36;
   b=54;
   printf("Valeur de a+b : %d\n",a+b);
   getchar();
   return 0;
}

Image non disponible Corrigé de l'exercice n°3.3 — Initialisation

 
Sélectionnez
#include <stdio.h> 
#include <math.h> 
int main () {
   int a,b;
   int s;
   a=0;
   b=0;
   printf("Calculatrice :\n\n");
   printf("Valeur de a : ");
   scanf("%d",&a);
   printf("\n");
   printf("Valeur de b : ");
   scanf("%d",&b);
   s=a+b;
   printf("Valeur de a+b : %d\n",s);
   getchar ();
   return 0;
}

Image non disponible Corrigé de l'exercice n°3.4 — Obtenir des résultats

 
Sélectionnez
...
   int d;/* Résultat de la différence */
   int m;/* Résultat de la multiplication */
   d = a-b;
   printf("Valeur de a-b : %d\n", d);
   m = a*b;
   printf("Valeur de a*b : %d\n", m);
...

Image non disponible Corrigé de l'exercice n°3.5 — Ouah, les 4 opérations !

 
Sélectionnez
...
   int d;/* Résultat de la division */
   d = a/b;
   printf("Valeur de a/b : %d\n", d);
   getchar ();
...

Image non disponible Corrigé de l'exercice n°3.6 — Absolument !

Calculez la valeur absolue de a-b

 
Sélectionnez
  float r;
   ...
   r=fabsf(a-b);
   printf("Valeur de r : %f\n",r);

Image non disponible Corrigé de l'exercice n°3.7 — Arrondissez

Calculez l'arrondi de a+b

 
Sélectionnez
   float arrondi;
   ...
   arrondi=ceilf(a/b);/* Calcul de l'arrondi */
   printf("Valeur arrondie : %f\n",arrondi);

Remarque : Il aurait été possible d'utiliser %d du fait que l'arrondi est un nombre entier !

IV-H. À retenir

 
Sélectionnez
#include <stdio.h> 
// ne pas oublier pour l'utilisation des fonctions mathématiques
#include <math.h>   
int main () {
   float pi=3.14159;
   int i=10;// déclaration + initialisation
   int j;// déclaration seule (pas d'initialisation)
   // Attention, bien mettre %f et non pas %d
   printf ("pi vaut environ: %f",pi); 
   printf("\n i vaut:%d\n",i);
   printf("\n entrez une valeur:");
   scanf("%d",&j);// Attention à ne pas oublier le &
   printf("\n vous venez d'entrer %d",j);
   return 0;
}
  • Nous compilerons ce programme comme ceci(15) : gcc -o programme1 programme1.c -lm
  • Nous le lancerons comme ceci : ./programme1

précédentsommairesuivant
Pour être précis, c'est plutôt l'étape d'édition de liens qui nécessite cette option, mais nous y reviendrons…
Par « saisir », nous voulons dire que l'ordinateur va attendre que l'utilisateur entre une valeur au clavier puis qu'il appuie sur la touche entrée.
Même si, en l'occurrence nous n'utilisons pas de fonctions de la librairie mathématique.

  

Licence Creative Commons
Le contenu de cet article est rédigé par Eric Berthomier et Daniel Schang et est mis à disposition selon les termes de la Licence Creative Commons Attribution 3.0 non transposé.
Les logos Developpez.com, en-tête, pied de page, css, et look & feel de l'article sont Copyright © 2013 Developpez.com.