Leçons de niveau 14

Introduction au langage C/Fonctions de base

Une page de Wikiversité.
Sauter à la navigation Sauter à la recherche
Début de la boite de navigation du chapitre
Fonctions de base
Icône de la faculté
Chapitre no 24
Leçon : Introduction au langage C
Chap. préc. :Pointeurs de structures
Chap. suiv. :Le préprocesseur
fin de la boite de navigation du chapitre
Icon falscher Titel.svg
En raison de limitations techniques, la typographie souhaitable du titre, « Introduction au langage C : Fonctions de base
Introduction au langage C/Fonctions de base
 », n'a pu être restituée correctement ci-dessus.


Introduction[modifier | modifier le wikicode]

  • Nous allons présenter la notion de fonction.
  • Tous les codes présentés ici peuvent être testés.


La fonction main()[modifier | modifier le wikicode]

  • C'est la fonction principale.


Code source[modifier | modifier le wikicode]

  • Elle retourne un entier matérialisé par le int.
  • Cela se passe avec la fonction return(0);
  • Pour nous, elle n'aura pas d'argument donc (void) en paramètre.
/* ------------------------------ */
/*  save as c01.c                 */
/* ------------------------------ */
#include    <stdio.h>
#include     <math.h> 
/* ------------------------------ */
int main(void)
{
 return 0;
}


Présentation pour déclarer une fonction[modifier | modifier le wikicode]

  • On déclare les fonctions. (dans des fichiers h)
  • On pose la fonction main(). (dans un fichier c)
  • On pose le code des fonctions. (dans des fichiers c)
  • On créé un fichier make (ou un projet) pour créer l'exécutable.
  • Ici on mettra tout dans un seul fichier c.


Code source[modifier | modifier le wikicode]

  • La fonction "addition()" retourne la somme de deux entiers.
  • On remarque que le corps de la fonction est vide. (Excellent)
  • Tous se passent dans la fonction return(x+y);
/* ------------------------------ */
/*  save as c01.c                 */
/* ------------------------------ */
#include    <stdio.h>
#include     <math.h> 
/* ------------------------------ */
int addition(int, int);
/* ------------------------------ */
int main(void)
{
  printf("1 + 2 = %d\n", addition(1,2));
  printf("2 + 2 = %d\n", addition(2,2));

 return 0;
}
/* ------------------------------ */
int addition(int x, int y)
{
return(x+y);
}


Code source[modifier | modifier le wikicode]

  • Le code est devant la fonction main() à la place de la déclaration de la fonction.
  • Ici, on a associé une chaine de caractère à la fonction.


/* ------------------------------ */
/*  save as c01.c                 */
/* ------------------------------ */
#include    <stdio.h>
#include     <math.h> 
/* ------------------------------ */
double f(double x){return( pow(x,2.));}
/* ------------------------------ */
char  feq[] = "x**2";
/* ------------------------------ */
int main(void)
{
double a = 2.0;
 
  printf(" f : x-> %s\n\n", feq); 
 
  printf(" f(%.0f) = %6.1f\n", a, f(a));

 
 printf("\n\n Press return to continue.\n");
 getchar();

 return 0;
}


Les fonctions et les fractions[modifier | modifier le wikicode]

  • Les fonctions nous permettent d'initialiser, d'imprimer des structures.


Code source[modifier | modifier le wikicode]

  • Une fois la structure déclarée, la meilleure méthode d'initialisation est de créer une fonction.
  • Ici, init_f();
  • Il faut naturellement une fonction pour imprimer une structure.
  • Ici, p_f();


/* ------------------------------ */
/*  save as c01.c                 */
/* ------------------------------ */
#include    <stdio.h>
#include     <math.h>
/* ------------------------------------ */
typedef struct
{
    double  n;
    double  d;
}fraction,
*pfraction;
/* ------------------------------------ */
fraction init_f(
double f_n,
double f_d)
{
fraction ft;

      ft.n = f_n;
      ft.d = f_d;

	return (ft);
}
/* ------------------------------------ */
fraction init_f2(
double f_n,
double f_d)
{
fraction ft={f_n,f_d};

	return (ft);
}
/* ------------------------------------
   Le dénominateur négatif est traité dans une autre fonction.
*/
void p_f(
fraction f)
{
       if(          f.n==0) printf("0");
  else if(f.d==1 && f.n==1) printf("1");
  else if(f.d==1 && f.n> 0) printf("%.0f",f.n);
  else if(f.d==1 && f.n< 0) printf("(%.0f)",f.n);
  else                      printf("(%.0f/%.0f)",f.n,f.d);
}
/* ------------------------------------ */
int main(void)
{
 fraction  a = {4,3};
 fraction  b = init_f (1,1);
 fraction  c;
 fraction  d;

 c = init_f (-1,1);
 d = init_f2(4,5);

   printf("\n\n a : ");p_f(a);
   printf("\n\n b : ");p_f(b);
   printf("\n\n c : ");p_f(c);
   printf("\n\n d : ");p_f(d);

   printf("\n\n");
   printf("\nPress return to continue.\n");
   getchar();

 return 0;
}


Conclusion[modifier | modifier le wikicode]

Un nom pour vos fonctions[modifier | modifier le wikicode]

  • Le plus difficile sera de trouver un nom pertinent à votre fonction.
  • Lisez du code et choisissez ce qui vous plaît.
  • Utiliser le nom des fonctions du c comme exemple.


Les lettres accentuées[modifier | modifier le wikicode]

  • Éviter les lettres accentuées.
  • Dans les printf();
  • Pour nom de fonctions
  • Dans les commentaires.
  • Cela ne se passe pas correctement si l’on change de système d'exploitation, ou de pays.
  • Que ce soit en c ou en Maple.


Information technique[modifier | modifier le wikicode]

Voir Programmation C/Fonctions et procédures sur Wikilivres Article sur Wikilivres.