#include<stdio.h>
int main(void)
{
int num,num1,i;
printf("请输入一个数:");
scanf("%d",&num1);
num = num1;
for(i = 2;i < num/2;i++)
{ printf ("计算1开始,num=%d\n",num);
printf ("计算2开始,num=%d\n",num/2);
printf ("计算3开始,i=%d\n",i);
num = num%i;
printf ("计算4开始,num=%d\n",num);
printf ("计算5开始,num=%d\n",num/2);
printf ("计算6开始,i=%d\n",i);
/*
while(num == 0)
{
printf ("num=%d\n",num);
break;
}
*/
}
if(num)
{
printf ("now1,num=%d\n",num);
printf("%d是一个素数",num1);
}
else
{
printf ("now2,num=%d\n",num);
printf("%d不是一个素数",num1);
}
}
自己添加 printf 打印num ,i 的值,就会发现问题。计算1,2,3都没问题,计算4开始,num==9,9%2==1;现在的num被赋值为1,而后,num/2变成了0,也就是第五步计算,第六步计算,i 还是等于2,返回 for 循环,条件判断,2 < 0(刚已说了第五步计算,现在为0),为假,退出循环。下面的 while 不会循环,第四步已计算出 num==1,所以,if (1)为真,打印9是一个素数。
|