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

Tutorial di base del linguaggio C

Controllo di flusso del linguaggio C

Funzione del linguaggio C

Array del linguaggio C

Puntatore del linguaggio C

Stringa del linguaggio C

Struttura del linguaggio C

File di linguaggio C

C altre

Manuale di riferimento di C

Tipi di funzione definiti dall'utente in C

In questo tutorial, imparerai a risolvere lo stesso problema utilizzando diversi metodi con le funzioni.

Questi 4 programmi controllano se l'intero inserito dall'utente è un numero primo.

Tutte le uscite di questi programmi sono le stesse e in ogni esempio abbiamo creato una funzione definita dall'utente. Ma i metodi adottati in ogni esempio sono diversi.

Esempio 1: Non vengono passati parametri né viene restituito alcun valore

#include <stdio.h>
void checkPrimeNumber();
int main()
{
    checkPrimeNumber(); // Non vengono passati parametri
    return 0;
}
//Il tipo di restituzione è void, il che significa che non viene restituito alcun valore
void checkPrimeNumber()
{
    int n, i, flag = 0;
    printf("Inserisci un numero intero positivo: ");
    scanf("%d", &n);
    for(i = 2; i <= n / 2; ++i)
    {
        if(n % i == 0)
        {
            flag = 1;
        }
    }
    if (flag == 1)
        printf("%d non è un numero primo.", n);
    else
        printf("%d è un numero primo.", n);
}

La funzione checkPrimeNumber() accetta l'input dell'utente, verifica se è un numero primo e lo visualizza sullo schermo.

Le parentesi vuote nella funzione main() all'interno di checkPrimeNumber(); indicano che non ci sono parametri da passare alla funzione.

Il tipo di ritorno della funzione è void. Pertanto, la funzione non restituisce alcun valore.

Esempio 2: Non vengono passati parametri, ma viene restituito un valore

#include <stdio.h>
int getInteger();
int main()
{
    int n, i, flag = 0;
   // Non vengono passati alcuni parametri
    n = getInteger();    
    for(i = 2; i <= n / 2; ++i)
    {
        if(n % i == 0){
            flag = 1;
            break;
        }
    }
    if (flag == 1)
        printf("%d non è un numero primo.", n);
    else
        printf("%d è un numero primo.", n);
    return 0;
}
// Restituisce l'intero inserito dall'utente
int getInteger()       
{
    int n;
    printf("Inserisci un numero intero positivo: ");
    scanf("%d", &n);
    return n;
}

n = getInteger(); Le parentesi vuote nel comando indicano che non ci sono parametri da passare alla funzione. E il valore restituito dalla funzione verrà assegnato a n.

In questo caso, la funzione getInteger() riceve l'input dell'utente e lo restituisce. La funzione main() contiene il codice per verificare se il numero è primo.

Esempio 3: Parametro passato ma senza valore di ritorno

#include <stdio.h>
void checkPrimeAndDisplay(int n);
int main()
{
    int n;
    printf("Inserisci un numero intero positivo: ");
    scanf("%d", &n);
    //n viene passato alla funzione
    checkPrimeAndDisplay(n);
    return 0;
}
//Il tipo di restituzione è void, il che significa che non viene restituito alcun valore
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 non è un numero primo.", n);
    else
        printf("%d è un numero primo.", n);
}

Il valore intero inserito dall'utente viene passato alla funzione checkPrimeAndDisplay().

In questo caso, la funzione checkPrimeAndDisplay() verifica se il parametro passato è un numero primo e visualizza un messaggio appropriato.

Esempio 4: Passaggio dei parametri e restituzione dei valori

#include <stdio.h>
int checkPrimeNumber(int n);
int main()
{
    int n, flag;
    printf("Inserisci un numero intero positivo: ");
    scanf("%d", &n);
    //n viene passato alla funzione checkPrimeNumber()
    //Il valore restituito viene assegnato alla variabile flag
    flag = checkPrimeNumber(n);
    if (flag == 1)
        printf("%d non è un numero primo.", n);
    else
        printf("%d è un numero primo.", n);
    return 0;
}
//Restituisce int dalla funzione
int checkPrimeNumber(int n)
{
    int i;
    for(i = 2; i <= n / 2; ++i)
    {
        if(n % i == 0)
            return 1;
    }
    return 0;
}

L'input dell'utente viene passato alla funzione checkPrimeNumber().

La funzione checkPrimeNumber() verifica se il parametro passato è un numero primo.

Se il parametro passato è un numero primo, la funzione restituisce 0. Se il parametro passato non è un numero primo, la funzione restituisce 1. Assegnare il valore restituito alla variabile flag.

A seconda che il flag sia 0 o 1, la funzione main() stampare un messaggio appropriato.

Quale metodo è migliore?

Bene, dipende dal problema che si vuole risolvere. In questo caso, passare i parametri e restituire il valore dalla funzione è meglio (esempio 4).

La funzione deve eseguire un compito specifico. La funzione checkPrimeNumber() non accetta l'input dell'utente né visualizza messaggi appropriati. Controlla solo se il numero è un numero primo.