# C 编程中用户定义函数的类型

> 原文： [https://www.programiz.com/c-programming/types-user-defined-functions](https://www.programiz.com/c-programming/types-user-defined-functions)

#### 在本教程中，您将学习使用函数来解决同一问题的不同方法。

下面的这 4 个程序检查用户输入的整数是否是质数。

下面所有这些程序的输出是相同的，并且在每个示例中我们都创建了一个用户定义的函数。 但是，我们在每个示例中采用的方法都是不同的。

* * *

## 示例 1：没有传递参数，也没有返回值

```c
#include <stdio.h>

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);
} 
```

`checkPrimeNumber()`函数接收用户输入，检查它是否是质数，并将其显示在屏幕上。

`main()`函数内部的`checkPrimeNumber();`语句中的空括号表示没有参数传递给该函数。

该函数的返回类型为`void`。 因此，该函数不返回任何值。

* * *

## 示例 2：不传递任何参数，但返回值

```c
#include <stdio.h>
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;
} 
```

`n = getInteger();`语句中的空括号表示没有参数传递给该函数。 并且，将从函数返回的值分配给`n`。

在此，`getInteger()`函数从用户那里获取输入并返回。 用于检查数字是否为质数的代码位于`main()`函数中。

* * *

## 示例 3：传递参数但没有返回值

```c
#include <stdio.h>
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);
} 
```

用户输入的整数值将传递到`checkPrimeAndDisplay()`函数。

在这里，`checkPrimeAndDisplay()`函数检查传递的参数是否为质数，并显示相应的消息。

* * *

## 示例 4：传递参数并返回值

```c
#include <stdio.h>
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;
}

```

来自用户的输入将传递到`checkPrimeNumber()`函数。

`checkPrimeNumber()`函数检查传递的参数是否为质数。

如果传递的参数是质数，则函数返回 0。如果传递的参数是非质数，则函数返回 1。返回值分配给`flag`变量。

根据`flag`是 0 还是 1，从`main()`函数打印适当的消息。

* * *

## 哪种方法更好？

好吧，这取决于您要解决的问题。 在这种情况下，传递参数并从函数返回值更好（示例 4）。

函数应执行特定任务。`checkPrimeNumber()`函数不接受用户输入，也不显示相应的消息。 它仅检查数字是否为质数。