Vous êtes sur la page 1sur 7

M. L. HASNAOUI et H.

BENNIS UMI-EST Algorithmique et Base de Programmation

Chapitre 4

Les Fonction en Langage C

Introduction

En algorithmique, une fonction est un sous-algorithme qui est composé


d'instructions, elle reçoit des données ou arguments et en général elle retourne
un résultat. Lorsqu'aucun résultat n'est retourné on parle de procédure.

Appel d'une fonction

Nous avons déjà utilisé quelques fonctions : printf, scanf, main(). Ces fonctions
sont stockées dans des bibliothèques, tout ce dont nous avons besoin de connaître
pour les utiliser, ce sont les données qu'elles attendent ainsi que le résultat
éventuel qu'elles produisent. Les fichiers .h contiennent notamment les
prototypes des fonctions). Un prototype donne des informations utiles pour le
programmeur et pour le compilateur sur la fonction. Il précise les arguments
attendus (nombre et type), ce sont les paramètres formels, et ce que la fonction
retourne.

Avec ces informations, vous pouvez utiliser la fonction sans connaître son
contenu. Pour appeler la fonction, il suffit de suivre le prototype, i.e. donner son
nom et la liste de ses paramètres effectifs entre parenthèses.

Il est souhaitable, pour diverses raisons, de décomposer un problème en


plusieurs sous-tâches, et de programmer ces sous-tâches comme des blocs
indépendants. C'est le concept de la programmation modulaire qui utilise des
sous-programmes.
En langage C, il y a une seule sorte de sous-programmes : les fonctions. On
commence d'abord avec l'écriture et les appels des fonctions.

Page 1 2020/2021
M. L. HASNAOUI et H. BENNIS UMI-EST Algorithmique et Base de Programmation

1. Fonction naturelle avec return

Une fonction "naturelle" est un sous-programme permettant de calculer et de


"retourner" (avec return) un seul résultat de type simple (float, char et int ) à
partir d'une liste de paramètres (des données).

1) Syntaxe :

type_résultat_de_retour nom_fonction(liste de paramètre(s))


{
déclarations locales si nécessaire
calcul et retour (avec return) du résultat
}
Illustration de la syntaxe à l'aide d'un exemple
La fonction suivante permet de calculer et de retourner la plus grande valeur
parmi deux réels.

#include <stdio.h>
#include <stdlib.h>

//Fonction qui retourne un résultat

float plusGrand(float x, float y)


{
if (x > y)
return x;

/*Écrire un programme qui lit deux nombres différents


a et b (type int) et qui affiche leur maximum.*/

Page 2 2020/2021
M. L. HASNAOUI et H. BENNIS UMI-EST Algorithmique et Base de Programmation

}
main()
{
int A,B,max;
printf("Type in A :");
scanf("%d",&A);
printf("Type in B :");
scanf("%d",&B);

max=plusGrand(A,B);

printf("Valeur max : %d\n",max);

system("PAUSE");
}
Execution

/*
Type in A :20
Type in B :10
Valeur max : 20
Appuyez sur une touche pour continuer...
*/

Exemples :

int sum_square(int i,int j) /* la fonction sum_square délivre un


int */
/* ses paramètres formels sont les int i
et j */
{
int resultat; /* déclaration des variables locales */

resultat = i*i + j*j;

Page 3 2020/2021
M. L. HASNAOUI et H. BENNIS UMI-EST Algorithmique et Base de Programmation

return resultat; /* retour a l'appelant en délivrant résultat */


}

Instruction return
L'instruction return est une instruction comme une autre, il est donc possible
d'en utiliser autant qu'on le désire dans le corps d'une fonction. Exemple :

int max(int i,int j) /* la fonction max délivre un int */


/* ses paramètres formels sont les int i et j */
{ /* pas de variables locales pour max */

if (i > j)
return(i);
else
return(j);
}

2. Fonction de type void (pas de return)

void main() /* rien à retourner */


{
...
}

1) Syntaxe

void nom_fonction(liste de paramètre(s))


{
………
……… }

Exemple de fonction avec void

Écrire une fonction permettant de permuter deux entier a, b


Puis écrire la fonction main() pour tester la fonction ecahnge

Page 4 2020/2021
M. L. HASNAOUI et H. BENNIS UMI-EST Algorithmique et Base de Programmation

#include <stdio.h>

#include <stdlib.h>

//Fonctipn void ne retourne rien mais ecahnge deux entiers

void echange (int a, int b)

int temp;

printf("debut fonction :\n a = %d \t b = %d\n",a,b);

temp = a;

a = b;

b = temp;

printf("fin fonction :\n a = %d \t b = %d\n",a,b);

system("PAUSE");

//Tester la fonction echange

main() {

int valeur1, valeur2, temporaire ;

/* Saisie les 2 entiers */

printf("Entrez 2 entiers suivis par la touche <Entrée> ");

scanf ("%d%d", &valeur1, &valeur2);

/* Permutation (échange) ces deux valeurs appel de la fonction*/

echange(valeur1, valeur2);

system("pause");

Page 5 2020/2021
M. L. HASNAOUI et H. BENNIS UMI-EST Algorithmique et Base de Programmation

/*

Entrez 2 entiers suivis par la touche <Entrer> 10 20

debut fonction :

a = 10 b = 20

fin fonction :

a = 20 b = 10

Appuyez sur une touche pour continuer...

*/

Exemple 2 : fonction qui retourne un entier comme résultat

Écrire un programme permettant de saisir un entier n supérieur à zéro (par


exemple : 5218).

Le programme calcule (par les fonctions) et affiche à l'écran :


 la somme des chiffres du nombre n (ici 16);
 l'envers du nombre n (ici 8125).

Solution

#include <stdio.h>
#include <stdlib.h>

int somChif(int n)
{
int somme = 0;

while (n > 0){


somme += n % 10;
n /= 10;
}
return somme;}
int envers(int n)
{
int k = 0;

while (n > 0){

Page 6 2020/2021
M. L. HASNAOUI et H. BENNIS UMI-EST Algorithmique et Base de Programmation

k = k * 10 + n % 10;
n /= 10;
}
return k;
}

main()
{
int nombre;

printf("Entrez un entier positif : ");


scanf("%d", &nombre);

printf("La somme des chiffres du %d est %d\n\n", nombre, somChif(nombre));


printf("L'envers du nombre %d est %d\n\n", nombre, envers(nombre));
printf("Cliquez sur le bouton de fermeture ");
system("PAUSE");
}

/*
Entrez un entier positif : 235
La somme des chiffres du 235 est 10

L'envers du nombre 235 est 532

Cliquez sur le bouton de fermeture Appuyez sur une touche pour continuer...
*/

Page 7 2020/2021

Vous aimerez peut-être aussi