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

以下4个程序会检查用户输入的整数是否为素数。

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


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

#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);

  // 0 and 1 are not prime numbers    
  if (n == 0 || n == 1)
    flag = 1;

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

checkPrimeNumber()函数从用户处获取输入,检查它是否是素数,并在屏幕上显示它。

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

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


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

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

int main() {

  int n, i, flag = 0;

  // no argument is passed
  n = getInteger();    

  // 0 and 1 are not prime numbers    
  if (n == 0 || n == 1)
    flag = 1;

  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:传递参数,但无返回值

#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;

  // 0 and 1 are not prime numbers    
  if (n == 0 || n == 1)
    flag = 1;

  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:传递参数并返回值

#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) {

  // 0 and 1 are not prime numbers    
  if (n == 0 || n == 1)
    return 1;

  int i;

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

  return 0;
}

从用户处获取的输入被传递给checkPrimeNumber()函数。

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

如果传递的参数是素数,则函数返回0。如果传递的参数是非素数,则函数返回1。返回值被赋给变量flag

根据flag0还是1,从main()函数中打印出相应的消息。


哪种方法更好?

嗯,这取决于您要解决的问题。在这种情况下,传递参数并从函数返回值(示例4)更好。

函数应执行特定任务。checkPrimeNumber()函数不从用户处获取输入,也不显示相应的消息。它只检查一个数字是否为素数。

你觉得这篇文章有帮助吗?

我们的高级学习平台,凭借十多年的经验和数千条反馈创建。

以前所未有的方式学习和提高您的编程技能。

试用 Programiz PRO
  • 交互式课程
  • 证书
  • AI 帮助
  • 2000+ 挑战