最新消息:XAMPP默认安装之后是很不安全的,我们只需要点击左方菜单的 "安全"选项,按照向导操作即可完成安全设置。

那些年C++ 函数之函数类型

XAMPP相关 admin 89浏览 0评论

第十五章:C++ 中用户定义函数的类型

在此篇教程中,你将了解使用函数来解决单个问题、以及采用的不同方法定义函数来解决此问题。

 

为了更好地理解函数中的参数返回,用户定义的函数可以分类为:

  • 无参数且无返回值的函数
  • 无参数但有返回值的函数
  • 带参数但无返回值的函数
  • 带参数和返回值的函数

不妨抛出个问题:检测一个数是否为素数?

下面将通过上述 4 种不同方式来制作用户定义的函数,来解决上述的问题。


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

# include <iostream>
using namespace std;

void prime();

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

// 函数的返回类型为void,因为没有返回值
void prime()
{

    int num, i, flag = 0;

    cout << "请输入一个正整数回车检查: ";
    cin >> num;

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

    if (flag == 1)
    {
        cout << num << " 不是素数.";
    }
    else
    {
        cout << num << " 是素数.";
    }
}

在上面的程序中,prime() 是从 main() 调用且无参数。

prime()  实现从用户处获取正数,并检查该数字是否为素数。

由于 prime() 的返回类型为 void,因此函数不会返回任何值。


示例 2:无传递参数但有返回值

#include <iostream>
using namespace std;

int prime();

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

    // 没有参数传递给prime()
    num = prime();
    for (i = 2; i <= num/2; ++i)
    {
        if (num%i == 0)
        {
            flag = 1;
            break;
        }
    }

    if (flag == 1)
    {
        cout<<num<<" 不是素数.";
    }
    else
    {
        cout<<num<<" 是素数.";
    }
    return 0;
}

// 函数的返回类型是int
int prime()
{
    int n;

    printf("输入一个: ");
    cin >> n;

    return n;
}

在上面的程序中,prime() 函数是从 main() 调用且无参数。

prime() 从用户那里获取一个正数。由于函数的返回类型是 int,因此它将用户输入的数字返回,并给调用的 main() 函数。

然后,在 main() 函数本身中检查数字是否为素数,并打印到屏幕上。


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

#include <iostream>
using namespace std;

void prime(int n);

int main()
{
    int num;
    cout << "输入一个正数进行检查: ";
    cin >> num;

    // 参数num传递给函数prime()
    prime(num);
    return 0;
}

// 调用函数没有返回值,因此,函数的返回类型为void
void prime(int n)
{
    int i, flag = 0;
    for (i = 2; i <= n/2; ++i)
    {
        if (n%i == 0)
        {
            flag = 1;
            break;
        }
    }

    if (flag == 1)
    {
        cout << n << " 不是素数.";
    }
    else {
        cout << n << " 是素数.";
    }
}

在上面的程序中,首先向用户索要一个正数,该正数存储在变量num中。

然后,将num传递给prime()函数,prime()函数则检查并打印数字是否为素数。

由于 prime() 的返回类型是 void ,因此函数不会返回任何值。


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

#include <iostream>
using namespace std;

int prime(int n);

int main()
{
    int num, flag = 0;
    cout << "请输入正整数进行检查: ";
    cin >> num;

    // 参数num传递给check()函数
    flag = prime(num);

    if(flag == 1)
        cout << num << " 不是素数.";
    else
        cout<< num << " 是素数.";
    return 0;
}

/* 此函数返回整数值 */
int prime(int n)
{
    int i;
    for(i = 2; i <= n/2; ++i)
    {
        if(n % i == 0)
            return 1;
    }

    return 0;
}

在上面的程序中,向用户索要一个正数并存储在变量 num 中。

然后,将 num 传递给函数 prime()prime() 函数则检查数字是否为素数。

由于prime() 的返回类型是一个int,1 或0 被返回给main() 调用函数。如果数字是质数,则返回 1。如果不是,则返回 0。

回到 main() 函数,返回的 1 或 0 存储在变量 flag 中,并将相应的文本打印到屏幕上。


哪种方法更好?

以上四个程序都给出了相同的输出,并且在技术上,都是正确的程序书写方式。

关于应该选择哪种方法没有硬性规定,需根据自身的情况和你想如何解决问题来选择特定的方法。

 

程序算法实验室 zhangJA-Lab

转载请注明:XAMPP中文组官网 » 那些年C++ 函数之函数类型