例如,当数字 = 0 或 1 时,它输出:
"It's neither prime nor composite" //Desired
"0/1 is a prime number." //Not desired
另一种情况,如果数字是负数(例如 -1):
"Error! You have entered a negative number." //Desired
"-1 is a prime number." //Not desired
How do I go about excluding those not desired outputs? I suspect the for loop causing those numbers(0,1,-1) to return 1, resulting in those outputs to appear. Any suggestions and hints would be great. Thanks!
这是我的实现:
#include <stdio.h>
/* Checks if a positive number is a prime number. */
int is_prime(int num) {
/* Divisible by any integers from 2 to a num's square root */
for (int j=2; j<=num/2; j++) {
/* return "false" */
if (num%2 == 0) {
return 0;
}
}
/* Otherwise, return "true" */
return 1;
}
int main() {
int number;
printf("Enter a positive integer:\n");
scanf("%d", &number);
if (number == 0 || number == 1) {
printf("It's neither prime nor composite.\n");
} else if (number < 0) {
printf("Error! You have entered a negative number.\n");
}
is_prime(number);
if (is_prime(number) == 1) {
printf("%d is a prime number.\n", number);
} else if (is_prime(number) == 0) {
printf("%d is not a prime number.\n", number);
}
return 0;
}
最佳答案
第二行也是期望的行为。
看看你的代码...
if (number == 0 || number == 1) {
printf("It's neither prime nor composite.\n");
return 0;
} else if (number < 0) {
printf("Error! You have entered a negative number.\n");
return 0;
}
因为如果您不这样做或类似的事情,那么它会调用 is_prime
并返回 1 并打印第二行。
对于0,1,-1
,is_prime
方法中的for
循环没有运行。在方法的最后一行 return 1
。结果 printf
打印出它是质数。
逻辑错误
在你的素数检测代码中..你应该使用这个if (num%j == 0)
。否则为错误。
int is_prime(int num) {
/* Divisible by any integers from 2 to a num's square root */
for (int j=2; j*j<=num; j++) {
/* return "false" */
if (num%j == 0) {
return 0;
}
}
/* Otherwise, return "true" */
return 1;
}
需要注意的几件事:-
在您的代码中,您不必要地调用了
is_prime
方法两次。其中之一甚至没有考虑返回值。此外,有时您必须调用一个方法,其结果将决定您需要输出哪个方法。然后,您可以存储返回值,然后对其进行处理,而不是
if-else
。
int retVal = func(); if(retVal==1) printf(".."); else if( retVal==2) printf("..something different.."); else printf("..something else..");
当返回的只是两个值或两种类型时,您可以这样做
if(func()==2)
// do this
else
// do that
关于C:在各种条件下检查素数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46996737/