C 语言基础教程

C 语言流程控制

C 语言函数

C 语言数组

C 语言指针

C 语言字符串

C 语言结构体

C 语言文件

C 其他

C 语言参考手册

C 语言用户定义函数的类型

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

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

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

示例1:没有传递参数,也没有返回值

#include <stdio.h>

void checkPrimeNumber();

int main()
{
    checkPrimeNumber();    //没有传递参数
    return 0;
}

//返回类型为void,表示不返回任何值
void checkPrimeNumber()
{
    int n, i, flag = 0;

    printf("输入一个正整数: ");
    scanf("%d",&n);

    for(i=2; i <= n/2; ++i)
    {
        if(n%i == 0)
        {
            flag = 1;
        }
    }
    if (flag == 1)
        printf("%d 不是质数。", n);
    else
        printf("%d 是个质数。", n);
}

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

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

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

示例2:不传递任何参数,但返回值

#include <stdio.h>
int getInteger();

int main()
{
    int n, i, flag = 0;

   //没有传递任何参数
    n = getInteger();    

    for(i=2; i<=n/2; ++i)
    {
        if(n%i==0){
            flag = 1;
            break;
        }
    }

    if (flag == 1)
        printf("%d 不是质数。", n);
    else
        printf("%d 是质数。", n);

    return 0;
}

//返回用户输入的整数
int getInteger()       
{
    int n;

    printf("输入一个正整数: ");
    scanf("%d",&n);

    return n;
}

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

在此,getInteger()函数从用户处获取输入并返回。main()函数内部包含用于检查数字是否为质数的代码。

示例3:参数已传递但没有返回值

#include <stdio.h>
void checkPrimeAndDisplay(int n);

int main()
{
    int n;

    printf("输入一个正整数: ");
    scanf("%d",&n);

    // n被传递给函数
    checkPrimeAndDisplay(n);

    return 0;
}

//返回类型为void,表示不返回任何值
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);
    else
        printf("%d 是个质数。", n);
}

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

在此,checkPrimeAndDisplay()函数检查传递的参数是否为质数,并显示适当的消息。

示例4:传递参数和返回值

#include <stdio.h>
int checkPrimeNumber(int n);

int main()
{
    int n, flag;

    printf("输入一个正整数: ");
    scanf("%d",&n);

    //n传递给checkPrimeNumber()函数
    //返回的值分配给flag变量
    flag = checkPrimeNumber(n);

    if (flag == 1)
        printf("%d 不是质数。", n);
    else
        printf("%d 是个质数。", n);

    return 0;
}

//从函数返回int
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()函数不接受用户输入,也不显示适当的消息。它仅检查数字是否为质数。