以下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。
根据flag是0还是1,从main()
函数中打印出相应的消息。
哪种方法更好?
嗯,这取决于您要解决的问题。在这种情况下,传递参数并从函数返回值(示例4)更好。
函数应执行特定任务。checkPrimeNumber()
函数不从用户处获取输入,也不显示相应的消息。它只检查一个数字是否为素数。