Introduction au langage C/Fonctions de base

Leçons de niveau 14
Une page de Wikiversité, la communauté pédagogique libre.
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
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.