Tipos de funções definidas pelo usuário na programação C

Neste tutorial, você aprenderá sobre diferentes abordagens que podem ser adotadas para resolver o mesmo problema usando funções.

Os 4 programas abaixo verificam se o número inteiro inserido pelo usuário é um número primo ou não.

A saída de todos esses programas abaixo é a mesma e criamos uma função definida pelo usuário em cada exemplo. No entanto, a abordagem que adotamos em cada exemplo é diferente.

Exemplo 1: nenhum argumento passado e nenhum valor de retorno

 #include void checkPrimeNumber(); int main() ( checkPrimeNumber(); // argument is not passed return 0; ) // return type is void meaning doesn't return any value void checkPrimeNumber() ( int n, i, flag = 0; printf("Enter a positive integer: "); scanf("%d",&n); for(i=2; i <= n/2; ++i) ( if(n%i == 0) ( flag = 1; ) ) if (flag == 1) printf("%d is not a prime number.", n); else printf("%d is a prime number.", n); ) 

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

Os parênteses vazios na checkPrimeNumber();instrução dentro da main()função indicam que nenhum argumento é passado para a função.

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

Exemplo 2: nenhum argumento passado, mas um valor de retorno

 #include int getInteger(); int main() ( int n, i, flag = 0; // no argument is passed n = getInteger(); for(i=2; i<=n/2; ++i) ( if(n%i==0)( flag = 1; break; ) ) if (flag == 1) printf("%d is not a prime number.", n); else printf("%d is a prime number.", n); return 0; ) // returns integer entered by the user int getInteger() ( int n; printf("Enter a positive integer: "); scanf("%d",&n); return n; ) 

Os parênteses vazios na n = getInteger();instrução indicam que nenhum argumento é passado para a função. E, o valor retornado da função é atribuído a n.

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

Exemplo 3: argumento aprovado, mas nenhum valor de retorno

 #include void checkPrimeAndDisplay(int n); int main() ( int n; printf("Enter a positive integer: "); scanf("%d",&n); // n is passed to the function checkPrimeAndDisplay(n); return 0; ) // return type is void meaning doesn't return any value 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 is not a prime number.",n); else printf("%d is a prime number.", n); ) 

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

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

Exemplo 4: argumento aprovado e um valor de retorno

 #include int checkPrimeNumber(int n); int main() ( int n, flag; printf("Enter a positive integer: "); scanf("%d",&n); // n is passed to the checkPrimeNumber() function // the returned value is assigned to the flag variable flag = checkPrimeNumber(n); if(flag == 1) printf("%d is not a prime number",n); else printf("%d is a prime number",n); return 0; ) // int is returned from the function 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 é passada para a checkPrimeNumber()função.

A checkPrimeNumber()função verifica se o argumento passado é primo ou não.

Se o argumento passado for um número primo, a função retornará 0. Se o argumento passado for um número não primo, a função retornará 1. O valor de retorno é atribuído à variável sinalizador.

Dependendo se o sinalizador é 0 ou 1, uma mensagem apropriada é impressa a partir da main()função.

Qual abordagem é melhor?

Bem, depende do problema que você está tentando resolver. Nesse caso, passar um argumento e retornar um valor da função (exemplo 4) é melhor.

Uma função deve executar uma tarefa específica. A checkPrimeNumber()função não recebe entrada do usuário nem exibe a mensagem apropriada. Ele apenas verifica se um número é primo ou não.

Artigos interessantes...