以下代码是读取用户的输入以检查int [1-100]是否为素数。 (如果超出范围,将打印“完成”。如果非素数,将输出到控制台并且数字可分割。
现在这个程序正常运行1-10,除了3和9 ......有什么建议吗?
#include <stdio.h>
int main()
{
int num, i;
printf("Number [1-100]:? \n");
scanf("%d", &num);
while(num>0 && num <101)
{
if (num==1||num==2)
printf("Prime\n");
for (i=2; i<=num/2; ++i)
{
if (num%i==0)
{
printf("Non-prime,divisible by %d\n",i);
break;
}
else {
printf("Prime\n");
break;
}
}
printf("Number[1-100]:? \n");
scanf("%d",&num);
}
printf("Done\n");
}
答案 0 :(得分:3)
首先,确保您的代码具有适当的空格。这将帮助您意识到事情没有像您认为的那样排成一列。
#include <stdio.h>
int main()
{
int num, i;
printf("Number [1-100]:? \n");
scanf("%d", &num);
while(num>0 && num <101){
if (num==1||num==2)
printf("Prime\n");
for(i=2; i<=num/2; ++i)
{
if (num%i==0)
{
printf("Non-prime,divisible by %d\n",i);
break;
}
else {
printf("Prime\n");
break;
}
}
printf("Number[1-100]:? \n");
scanf("%d",&num);
}
printf("Done\n");
}
现在您应该意识到您的其他声明会在第一次检查时发生!因此当3不能被2整除时,它会打印出“素数”。
然后它突破了循环。
这种情况发生在每个数字上。您的所有程序正在检查数字是否可以被2整除。
如果你写了“Odd”而不是“Prime”,那至少在那里是正确的。
这是设置标志可能有用的问题(还有其他方法可以做到这一点,但这是一种方法)。
所以你可以设置一个标志,比如int isPrime = 1;
现在,如果您发现该数字不是素数,则只需设置isPrime = 0;
。
最后,在for循环结束时(让我重复一遍:for循环结束后),你需要检查那个变量。 你可以说,
if (isPrime == 1)
{
printf("Prime\n");
} else
{
printf("Non-prime.");
}
我会告诉你如何打印除数:)
(作为参考,正确使用旗帜看起来像这样 - 为了清楚起见,我删除了连续循环的'特征')
#include <stdio.h>
int main()
{
int num, i;
int isPrime = 1;
printf("Number [1-100]:? \n");
scanf("%d", &num);
for(i=2; i<=num/2; ++i)
{
if (num%i==0)
{
isPrime = 0;
break;
}
}
if (isPrime == 1)
{
printf("Prime\n");
} else
{
printf("Non-prime.");
}
printf("Done\n");
}
答案 1 :(得分:0)
3表现不同的原因是for逻辑永远不会达到3.对于“(i = 2; i&lt; = num / 2; ++ i)”,如果num等于3,那么i(是2)不再小于3/2,即1(四舍五入后)。因此,您应该将“num == 3”检查添加到“if(num == 1 || num == 2)”。
答案 2 :(得分:0)
您没有检查2和num / 2之间的整个范围。你需要一个while循环和一个主要标志。 像这样的东西。
while(num>0 && num <101)
{
unsigned char prime = 1; // set prime flag
i = 2;
while( i < (num/2)+1)
{
if(num%i == 0)
prime = 0;
i++;
}
if(num == 1)
prime = 0;
if(prime == 0)
printf("%d is nonprime\n", num);
else
printf("%d is prime\n", num);
prime = 1;
printf("Number[1-100]:? \n");
scanf("%d",&num);
}