原文: https://www.programiz.com/cpp-programming/user-defined-function-types

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

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

考虑一种情况,您必须检查质数。 通过以上述 4 种不同的方式制作用户定义的函数,可以解决以下问题。


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

  1. # include <iostream>
  2. using namespace std;
  3. void prime();
  4. int main()
  5. {
  6. // No argument is passed to prime()
  7. prime();
  8. return 0;
  9. }
  10. // Return type of function is void because value is not returned.
  11. void prime()
  12. {
  13. int num, i, flag = 0;
  14. cout << "Enter a positive integer enter to check: ";
  15. cin >> num;
  16. for(i = 2; i <= num/2; ++i)
  17. {
  18. if(num % i == 0)
  19. {
  20. flag = 1;
  21. break;
  22. }
  23. }
  24. if (flag == 1)
  25. {
  26. cout << num << " is not a prime number.";
  27. }
  28. else
  29. {
  30. cout << num << " is a prime number.";
  31. }
  32. }

在上述程序中,不带参数的情况下,从main()调用prime()

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

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


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

  1. #include <iostream>
  2. using namespace std;
  3. int prime();
  4. int main()
  5. {
  6. int num, i, flag = 0;
  7. // No argument is passed to prime()
  8. num = prime();
  9. for (i = 2; i <= num/2; ++i)
  10. {
  11. if (num%i == 0)
  12. {
  13. flag = 1;
  14. break;
  15. }
  16. }
  17. if (flag == 1)
  18. {
  19. cout<<num<<" is not a prime number.";
  20. }
  21. else
  22. {
  23. cout<<num<<" is a prime number.";
  24. }
  25. return 0;
  26. }
  27. // Return type of function is int
  28. int prime()
  29. {
  30. int n;
  31. printf("Enter a positive integer to check: ");
  32. cin >> n;
  33. return n;
  34. }

在上述程序中,不带参数地从main()调用prime()函数。

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

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


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

  1. #include <iostream>
  2. using namespace std;
  3. void prime(int n);
  4. int main()
  5. {
  6. int num;
  7. cout << "Enter a positive integer to check: ";
  8. cin >> num;
  9. // Argument num is passed to the function prime()
  10. prime(num);
  11. return 0;
  12. }
  13. // There is no return value to calling function. Hence, return type of function is void. */
  14. void prime(int n)
  15. {
  16. int i, flag = 0;
  17. for (i = 2; i <= n/2; ++i)
  18. {
  19. if (n%i == 0)
  20. {
  21. flag = 1;
  22. break;
  23. }
  24. }
  25. if (flag == 1)
  26. {
  27. cout << n << " is not a prime number.";
  28. }
  29. else {
  30. cout << n << " is a prime number.";
  31. }
  32. }

在上述程序中,首先向用户询问正数,该正数存储在变量num中。

然后,将num传递给prime()函数,在此函数中检查并打印数字是否为质数。

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


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

  1. #include <iostream>
  2. using namespace std;
  3. int prime(int n);
  4. int main()
  5. {
  6. int num, flag = 0;
  7. cout << "Enter positive integer to check: ";
  8. cin >> num;
  9. // Argument num is passed to check() function
  10. flag = prime(num);
  11. if(flag == 1)
  12. cout << num << " is not a prime number.";
  13. else
  14. cout<< num << " is a prime number.";
  15. return 0;
  16. }
  17. /* This function returns integer value. */
  18. int prime(int n)
  19. {
  20. int i;
  21. for(i = 2; i <= n/2; ++i)
  22. {
  23. if(n % i == 0)
  24. return 1;
  25. }
  26. return 0;
  27. }

在上述程序中,向用户询问一个正整数并将其存储在变量num中。

然后,将num传递到函数prime(),在其中检查数字是否为质数。

由于prime()的返回类型是int,因此将 1 或 0 返回到main()调用函数。 如果数字是质数,则返回 1。 如果不是,则返回 0。

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


哪种方法更好?

上面所有四个程序都提供相同的输出,并且在技术上都是正确的程序。

对于选择哪种方法没有严格的规定。

根据具体情况以及您要如何解决问题来选择特定的方法。