下面是一段代码,它显示了一个输出,说明用户输入的数字是否为质数。
#include <stdio.h>
#include <stdlib.h>
int a,b;
int main(void) {
printf("Enter number: ");
fflush(stdout);
scanf("%d",&a);
for (b = 2; b < a; b++)
{
if (a % b == 0)
break;
}
if (b<a)
{
printf ("%d is divisible by %d\n", a, b);
}
else
{
printf ("%d is prime \n", a);
}
return 0;
}
上面写的这段代码不是我的,它每次都成功地识别出一个素数(即打印else子句的printf语句)。
我对 if 语句的理解是if -else语句中的else子句属于最近的if语句,它还没有else子句。因此,话虽如此,我相信上面这段代码中的else子句属于最近的if语句。
我的问题是:如果用户输入像 31 或 37 这样的素数或任何其他素数,else子句的printf语句如何打印?考虑到 b 只会递增到,条件(第二个if语句的)将始终为真。所以如果用户输入数字 31,变量b只会增加到 30。不应该是打印第二个if语句的printf语句,不管用户输入的数字是否是素数与否,考虑到条件将始终为真?if (b<a)
(a-1)
if (b<a)
上面的代码如何正确打印所有素数,从而正常工作?(根据我对if语句工作方式的有限理解,它不应该)