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

Tutorial Básico de Linguagem C

Controle de Fluxo de Linguagem C

Funções no C

Matrizes no C

Ponteiro no C

String no C

Estrutura de Linguagem C

Arquivo de Linguagem C

Outros C

Manual de Referência do C

Tipo de função definida pelo usuário em C

Neste tutorial, você aprenderá a usar funções para resolver o mesmo problema de diferentes maneiras.

Abaixo está4um programa verifica se o inteiro fornecido pelo usuário é um número primo.

A saída de todos esses programas é a mesma, e em cada exemplo criamos uma função definida pelo usuário. Mas, na verdade, usamos métodos diferentes em cada exemplo.

Exemplo1: Não passa nenhum parâmetro, nem retorna nenhum valor

#include <stdio.h>
void checkPrimeNumber();
int main()
{
    checkPrimeNumber();    //Nenhum parâmetro foi passado
    return 0;
}
//O tipo de retorno é void, o que significa que não retorna nenhum valor
void checkPrimeNumber()
{
    int n, i, flag = 0;
    printf("Insira um número inteiro positivo: ");
    scanf("%d", &n);
    for(i=2; i <= n/2; ++i)
    {
        if(n % i == 0)
        {
            flag = 1;
        }
    }
    if (flag == 1)
        printf("%d não é um número primo.", n);
    else
        printf("%d é um número primo.", n);
}

A função checkPrimeNumber() recebe a entrada do usuário, verifica se é um número primo e o exibe na tela.

Os parênteses vazios dentro de checkPrimeNumber(); na função main() indicam que não há parâmetros passados para a função.

O tipo de retorno da função é void. Portanto, a função não retorna nenhum valor.

Exemplo2: Não passa nenhum parâmetro, mas retorna um valor

#include <stdio.h>
int getInteger();
int main()
{
    int n, i, flag = 0;
   //Nenhum parâmetro foi passado
    n = getInteger();    
    for(i=2; i <= n/2; ++i)
    {
        if(n % i == 0){
            flag = 1;
            break;
        }
    }
    if (flag == 1)
        printf("%d não é um número primo.", n);
    else
        printf("%d é um número primo.", n);
    return 0;
}
//Retorna o inteiro fornecido pelo usuário
int getInteger()       
{
    int n;
    printf("Insira um número inteiro positivo: ");
    scanf("%d", &n);
    return n;
}

n = getInteger(); os parênteses vazios na declaração da função indicam que não há parâmetros passados para a função. E o valor retornado pela função será atribuído a n.

Aqui, a função getInteger() obtém a entrada do usuário e retorna. Dentro da função main(), há código para verificar se o número é primo.

Exemplo3Parâmetros passados mas sem retorno

#include <stdio.h>
void checkPrimeAndDisplay(int n);
int main()
{
    int n;
    printf("Insira um número inteiro positivo: ");
    scanf("%d", &n);
    // n é passado para a função
    checkPrimeAndDisplay(n);
    return 0;
}
//O tipo de retorno é void, o que significa que não retorna nenhum valor
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ão é um número primo.", n);
    else
        printf("%d é um número primo.", n);
}

O valor inteiro introduzido pelo usuário será passado para a função checkPrimeAndDisplay().

Aqui, a função checkPrimeAndDisplay() verifica se o parâmetro passado é um número primo e exibe uma mensagem apropriada.

Exemplo4Passar parâmetros e retornar valores

#include <stdio.h>
int checkPrimeNumber(int n);
int main()
{
    int n, flag;
    printf("Insira um número inteiro positivo: ");
    scanf("%d", &n);
    //n é passado para a função checkPrimeNumber()
    //O valor retornado é atribuído à variável flag
    flag = checkPrimeNumber(n);
    if (flag == 1)
        printf("%d não é um número primo.", n);
    else
        printf("%d é um número primo.", n);
    return 0;
}
//Retorna int da função
int checkPrimeNumber(int n)
{
    int i;
    for(i=2; i <= n/2; ++i)
    {
        if(n % i == 0)
            return 1;
    }
    return 0;
}

A entrada do usuário será passada para a função checkPrimeNumber().

A função checkPrimeNumber() verifica se o parâmetro passado é um número primo.

Se o parâmetro passado for um número primo, a função retornará 0. Se o parâmetro passado não for um número primo, a função retornará1O valor retornado será atribuído à variável flag.

De acordo com o flag ser 0 ou1A função main() imprimirá uma mensagem apropriada.

Qual método é melhor?

Bem, isso depende do problema que você quer resolver. Neste caso, passar parâmetros e retornar valores da função é melhor (exemplo4)。

A função deve executar uma tarefa específica. A função checkPrimeNumber() não aceita entrada do usuário nem exibe mensagens apropriadas. Ela verifica apenas se o número é primo.