Fonctions de la programmation C avec des exemples: récursif, en ligne

Table des matières:

Anonim

Qu'est-ce qu'une fonction en C?

La fonction en programmation C est un bloc de code réutilisable qui rend un programme plus facile à comprendre, à tester et peut être facilement modifié sans changer le programme appelant. Les fonctions divisent le code et modularisent le programme pour des résultats meilleurs et efficaces. En bref, un programme plus vaste est divisé en divers sous-programmes appelés fonctions

Lorsque vous divisez un grand programme en différentes fonctions, il devient facile de gérer chaque fonction individuellement. Chaque fois qu'une erreur se produit dans le programme, vous pouvez facilement rechercher des fonctions défectueuses et ne corriger que ces erreurs. Vous pouvez facilement appeler et utiliser des fonctions chaque fois qu'elles sont nécessaires, ce qui permet automatiquement de gagner du temps et de l'espace.

Dans ce didacticiel, vous apprendrez-

  • Bibliothèque Vs. Fonctions définies par l'utilisateur
  • Déclaration de fonction
  • Définition de la fonction
  • Appel de fonction
  • Arguments de fonction
  • Portée variable
  • Variables statiques
  • Fonctions récursives
  • Fonctions en ligne

Bibliothèque Vs. Fonctions définies par l'utilisateur

Chaque programme «C» a au moins une fonction qui est la fonction principale, mais un programme peut avoir n'importe quel nombre de fonctions. La fonction main () en C est le point de départ d'un programme.

Dans la programmation 'C', les fonctions sont divisées en deux types:

  1. Fonctions de la bibliothèque
  2. Fonctions définies par l'utilisateur

La différence entre la bibliothèque et les fonctions définies par l'utilisateur en C est que nous n'avons pas besoin d'écrire un code pour une fonction de bibliothèque. Il est déjà présent dans le fichier d'en-tête que nous incluons toujours au début d'un programme. Il vous suffit de taper le nom d'une fonction et de l'utiliser avec la syntaxe appropriée. Printf, scanf sont les exemples d'une fonction de bibliothèque.

Alors qu'une fonction définie par l'utilisateur est un type de fonction dans lequel nous devons écrire le corps d'une fonction et appeler la fonction chaque fois que nous avons besoin de la fonction pour effectuer une opération dans notre programme.

Une fonction définie par l'utilisateur en C est toujours écrite par l'utilisateur, mais plus tard, elle peut faire partie de la bibliothèque «C». C'est un avantage majeur de la programmation «C».

Les fonctions de programmation C sont divisées en trois activités telles que,

  1. Déclaration de fonction
  2. Définition de la fonction
  3. Appel de fonction

Déclaration de fonction

La déclaration de fonction signifie écrire le nom d'un programme. C'est une partie obligatoire pour l'utilisation des fonctions dans le code. Dans une déclaration de fonction, nous spécifions simplement le nom d'une fonction que nous allons utiliser dans notre programme comme une déclaration de variable. Nous ne pouvons utiliser une fonction que si elle est déclarée dans un programme. Une déclaration de fonction est également appelée « prototype de fonction ».

Les déclarations de fonction (appelées prototype) se font généralement au-dessus de la fonction main () et prennent la forme générale:

return_data_type function_name (data_type arguments);
  • Le return_data_type : est le type de données de la fonction de valeur renvoyée à l'instruction appelante.
  • Le nom_fonction : est suivi de parenthèses
  • Les noms d' arguments avec leurs déclarations de type de données sont éventuellement placés entre parenthèses.

Nous considérons le programme suivant qui montre comment déclarer une fonction de cube pour calculer la valeur de cube d'une variable entière

#include /*Function declaration*/int add(int a,b);/*End of Function declaration*/int main() {

Gardez à l'esprit qu'une fonction ne renvoie pas nécessairement une valeur. Dans ce cas, le mot clé void est utilisé.

Par exemple, la déclaration de la fonction output_message indique que la fonction ne renvoie pas de valeur: void output_message ();

Définition de fonction

La définition de fonction signifie simplement écrire le corps d'une fonction. Un corps de fonction se compose d'instructions qui vont effectuer une tâche spécifique. Un corps de fonction se compose d'un seul ou d'un bloc d'instructions. C'est également une partie obligatoire d'une fonction.

int add(int a,int b) //function body{int c;c=a+b;return c;}

Appel de fonction

Un appel de fonction signifie appeler une fonction chaque fois qu'elle est requise dans un programme. Chaque fois que nous appelons une fonction, elle effectue une opération pour laquelle elle a été conçue. Un appel de fonction est une partie facultative d'un programme.

 result = add(4,5);

Voici le code complet:

#include int add(int a, int b); //function declarationint main(){int a=10,b=20;int c=add(10,20); //function callprintf("Addition:%d\n",c);getch();}int add(int a,int b) //function body{int c;c=a+b;return c;}

Production:

Addition:30

Arguments de fonction

Les arguments d'une fonction sont utilisés pour recevoir les valeurs nécessaires par l'appel de fonction. Ils sont appariés par position; le premier argument est passé au premier paramètre, le second au deuxième paramètre et ainsi de suite.

Par défaut, les arguments sont passés par valeur dans laquelle une copie des données est donnée à la fonction appelée. La variable réellement transmise ne changera pas.

Nous considérons le programme suivant qui montre les paramètres passés par valeur:

int add (int x, int y);int main() {int a, b, result;a = 5;b = 10;result = add(a, b);printf("%d + %d\ = %d\n", a, b, result);return 0;}int add (int x, int y) {x += y;return(x);}

La sortie du programme est:

5 + 10 = 15 

Gardez à l'esprit que les valeurs de a et b ont été transmises à la fonction d'ajout n'ont pas été modifiées car seule sa valeur a été transmise au paramètre x.

Portée variable

La portée variable signifie la visibilité des variables dans un code du programme.

En C, les variables qui sont déclarées à l'intérieur d'une fonction sont locales à ce bloc de code et ne peuvent pas être référencées en dehors de la fonction. Cependant, les variables déclarées en dehors de toutes les fonctions sont globales et accessibles depuis l'ensemble du programme. Les constantes déclarées avec un #define en haut d'un programme sont accessibles depuis l'ensemble du programme. Nous considérons le programme suivant qui imprime la valeur de la variable globale à partir de la fonction principale et définie par l'utilisateur:

#include int global = 1348;void test();int main() {printf("from the main function : global =%d \n", global);test () ;return 0;}void test (){printf("from user defined function : global =%d \n", global);}

Résultat:

from the main function : global =1348from user defined function : global =1348

Nous discutons des détails du programme:

  1. Nous déclarons une variable globale entière avec 1348 comme valeur initiale.
  2. Nous déclarons et définissons une fonction test () qui ne prend pas d'arguments ni ne renvoie de valeur. Cette fonction imprime uniquement la valeur de la variable globale pour démontrer que les variables globales sont accessibles n'importe où dans le programme.
  3. Nous imprimons la variable globale dans la fonction principale.
  4. Nous appelons la fonction de test dans orde pour afficher la valeur de la variable globale.

En C, lorsque des arguments sont passés aux paramètres de fonction, les paramètres agissent comme des variables locales qui seront détruites lors de la sortie de la fonction.

Lorsque vous utilisez des variables globales, utilisez-les avec précaution car elles peuvent entraîner des erreurs et elles peuvent changer n'importe où dans un programme. Ils doivent être initialisés avant utilisation.

Variables statiques

Les variables statiques ont une portée locale. Cependant, ils ne sont pas détruits lors de la sortie de la fonction. Par conséquent, une variable statique conserve sa valeur pour toujours et est accessible lorsque la fonction est à nouveau saisie. Une variable statique est initialisée lorsqu'elle est déclarée et a besoin du préfixe static.

Le programme suivant utilise une variable statique:

#include void say_hi();int main() {int i;for (i = 0; i < 5; i++) { say_hi();}return 0;}void say_hi() {static int calls_number = 1;printf("Hi number %d\n", calls_number);calls_number ++; } 

Le programme affiche:

Hi number 1Hi number 2Hi number 3Hi number 4Hi number 5

Fonctions récursives

Considérez la factorielle d'un nombre qui est calculé comme suit 6! = 6 * 5 * 4 * 3 * 2 * 1.

Ce calcul est effectué comme un fait de calcul répété * (fait -1) jusqu'à ce que le fait soit égal à 1.

Une fonction récursive est une fonction qui s'appelle elle-même et inclut une condition de sortie pour terminer les appels récursifs. Dans le cas du calcul du nombre factoriel, la condition de sortie est le fait égal à 1. La récursivité fonctionne en "empilant" les appels jusqu'à ce que la condition de sortie soit vraie.

Par exemple:

#include int factorial(int number);int main() {int x = 6;printf("The factorial of %d is %d\n", x, factorial(x));return 0;}int factorial(int number) {if (number == 1) return (1); /* exiting condition */elsereturn (number * factorial(number - 1));} 

Le programme affiche:

 The factorial of 6 is 720 

Ici, nous discutons des détails du programme:

  1. Nous déclarons notre fonction factorielle récursive qui prend un paramètre entier et renvoie la factorielle de ce paramètre. Cette fonction s'appellera elle-même et diminuera le nombre jusqu'à ce que la condition de sortie ou de base soit atteinte. Lorsque la condition est vraie, les valeurs précédemment générées sont multipliées les unes par les autres et la valeur factorielle finale est renvoyée.
  2. Nous déclarons et initialisons une variable entière avec la valeur "6" puis imprimons sa valeur factorielle en appelant notre fonction factorielle.

Considérez le tableau suivant pour mieux comprendre le mécanisme récursif qui consiste à appeler la fonction elle-même jusqu'à ce que le cas de base ou la condition d'arrêt soit atteint, et après cela, nous collectons les valeurs précédentes:

Fonctions en ligne

La fonction en programmation C est utilisée pour stocker les instructions les plus fréquemment utilisées. Il est utilisé pour la modularisation du programme.

Chaque fois qu'une fonction est appelée, le pointeur d'instruction saute à la définition de la fonction. Après avoir exécuté une fonction, le pointeur d'instruction revient à l'instruction d'où il est passé à la définition de fonction.

Chaque fois que nous utilisons des fonctions, nous avons besoin d'une tête de pointeur supplémentaire pour accéder à la définition de la fonction et revenir à l'instruction. Pour éliminer le besoin de telles têtes de pointeur, nous utilisons des fonctions en ligne.

Dans une fonction en ligne, un appel de fonction est directement remplacé par un code de programme réel. Il ne saute à aucun bloc car toutes les opérations sont effectuées à l'intérieur de la fonction en ligne.

Les fonctions en ligne sont principalement utilisées pour les petits calculs. Ils ne conviennent pas aux gros calculs.

Une fonction en ligne est similaire à la fonction normale, sauf que le mot clé en ligne est placé avant le nom de la fonction. Les fonctions en ligne sont créées avec la syntaxe suivante:

inline function_name (){//function definition}

Écrivons un programme pour implémenter une fonction en ligne.

inline int add(int a, int b) //inline function declaration{return(a+b);}int main(){int c=add(10,20);printf("Addition:%d\n",c);getch();}

Production:

Addition: 30

Le programme ci-dessus démontre l'utilisation d'une fonction en ligne pour l'addition de deux nombres. Comme nous pouvons le voir, nous avons renvoyé l'addition sur deux nombres dans la fonction en ligne uniquement sans écrire de lignes supplémentaires. Lors de l'appel de fonction, nous venons de passer des valeurs sur lesquelles nous devons effectuer des ajouts.

Résumé

  • Une fonction est un mini-programme ou un sous-programme.
  • Les fonctions sont utilisées pour modulariser le programme.
  • La bibliothèque et définie par l'utilisateur sont deux types de fonctions.
  • Une fonction se compose d'une déclaration, d'un corps de fonction et d'une partie d'appel de fonction.
  • La déclaration de fonction et le corps sont obligatoires.
  • Un appel de fonction peut être facultatif dans un programme.
  • Le programme C a au moins une fonction; c'est la fonction principale ().
  • Chaque fonction a un nom, un type de données de valeur de retour ou un void, des paramètres.
  • Chaque fonction doit être définie et déclarée dans votre programme C.
  • Gardez à l'esprit que les variables ordinaires d'une fonction C sont détruites dès que nous quittons l'appel de fonction.
  • Les arguments passés à une fonction ne seront pas modifiés car ils sont passés par valeur aucun par adresse.
  • La portée de la variable est appelée visibilité des variables dans un programme
  • Il existe des variables globales et locales dans la programmation C