English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Tutoriel de base C

Contrôle de flux C

Fonctions du langage C

Tableaux en langage C

Pointeurs en langage C

Chains de caractères en langage C

Structure de C

Fichier C

C d'autres

Guide de référence C

Type de fonction utilisateur en C

Dans ce tutoriel, vous allez apprendre à utiliser les fonctions pour résoudre le même problème de différentes manières.

Le suivant est4Un programme vérifie si l'entier saisi par l'utilisateur est un nombre premier.

Tous les sorties de ces programmes sont identiques, et dans chaque exemple, nous créons une fonction définie par l'utilisateur. Mais nous utilisons une méthode différente dans chaque exemple.

Exemple1: Ne pas transmettre de paramètres, ni ne retourner de valeur

#include <stdio.h>
void checkPrimeNumber();
int main()
{
    checkPrimeNumber();    //Aucun paramètre n'a été transmis
    return 0;
}
//Le type de retour est void, ce qui signifie qu'aucune valeur n'est retournée
void checkPrimeNumber()
{
    int n, i, flag = 0;
    printf("Entrez un entier positif: ");
    scanf("%d", &n);
    for(i=2; i <= n/2; ++i)
    {
        if(n % i == 0)
        {
            flag = 1;
        }
    }
    if (flag == 1)
        printf("%d n'est pas un nombre premier.", n);
    else
        printf("%d est un nombre premier.", n);
}

La fonction checkPrimeNumber() reçoit l'entrée de l'utilisateur, vérifie si elle est un nombre premier et l'affiche à l'écran.

Les parenthèses vides dans checkPrimeNumber() à l'intérieur de la fonction main() indiquent que la fonction ne reçoit pas de paramètres.

Le type de retour de la fonction est void. Par conséquent, la fonction ne retourne aucune valeur.

Exemple2: Ne pas transmettre de paramètres, mais retourner une valeur

#include <stdio.h>
int getInteger();
int main()
{
    int n, i, flag = 0;
   //Aucun paramètre n'a été transmis
    n = getInteger();    
    for(i=2; i <= n/2; ++i)
    {
        if(n % i == 0){
            flag = 1;
            break;
        }
    }
    if (flag == 1)
        printf("%d n'est pas un nombre premier.", n);
    else
        printf("%d est un nombre premier.", n);
    return 0;
}
//Renvoie l'entier saisi par l'utilisateur
int getInteger()       
{
    int n;
    printf("Entrez un entier positif: ");
    scanf("%d", &n);
    return n;
}

n = getInteger(); Les parenthèses vides dans l'expression n = getInteger(); indiquent qu'aucun paramètre n'est passé à la fonction. Et la valeur retournée par la fonction est assignée à n.

Dans ce cas, la fonction getInteger() récupère l'entrée de l'utilisateur et la retourne. La fonction main() contient le code pour vérifier si un nombre est premier.

Exemple3Les paramètres ont été passés mais aucune valeur n'est retournée

#include <stdio.h>
void checkPrimeAndDisplay(int n);
int main()
{
    int n;
    printf("Entrez un entier positif: ");
    scanf("%d", &n);
    // n est passé à la fonction
    checkPrimeAndDisplay(n);
    return 0;
}
//Le type de retour est void, ce qui signifie qu'aucune valeur n'est retournée
void checkPrimeAndDisplay(int n) 
{
    int i, flag = 0;
    for(i=2; i <= n/2; ++i)
    {
        if(n % i == 0){
            flag = 1;
            break;
        }
    }
    if (flag == 1)
        printf("%d n'est pas un nombre premier.", n);
    else
        printf("%d est un nombre premier.", n);
}

La valeur entière entrée par l'utilisateur est passée à la fonction checkPrimeAndDisplay().

Dans ce cas, la fonction checkPrimeAndDisplay() vérifie si le paramètre passé est un nombre premier et affiche un message approprié.

Exemple4Transmettre des paramètres et retourner des valeurs

#include <stdio.h>
int checkPrimeNumber(int n);
int main()
{
    int n, flag;
    printf("Entrez un entier positif: ");
    scanf("%d", &n);
    //n est passé à la fonction checkPrimeNumber()
    //La valeur retournée est assignée à la variable flag
    flag = checkPrimeNumber(n);
    if (flag == 1)
        printf("%d n'est pas un nombre premier.", n);
    else
        printf("%d est un nombre premier.", n);
    return 0;
}
//Retourne int de la fonction
int checkPrimeNumber(int n)
{
    int i;
    for(i=2; i <= n/2; ++i)
    {
        if(n % i == 0)
            return 1;
    }
    return 0;
}

L'entrée de l'utilisateur est passée à la fonction checkPrimeNumber().

La fonction checkPrimeNumber() vérifie si le paramètre passé est un nombre premier.

Si le paramètre passé est un nombre premier, la fonction retourne 0. Si le paramètre passé n'est pas un nombre premier, la fonction retourne1La valeur de retour est assignée à la variable flag.

Selon que flag est 0 ou1La fonction main() affiche un message approprié.

Quelle méthode est meilleure ?

D'accord, cela dépend du problème que vous devez résoudre. Dans ce cas, il est préférable de passer des paramètres et de retourner une valeur de la fonction (exemple4)。

La fonction doit exécuter une tâche spécifique. La fonction checkPrimeNumber() ne prend pas d'entrée utilisateur et n'affiche pas de message approprié. Elle vérifie uniquement si le nombre est un nombre premier.