在下面的代码中,在最里面的循环中,当d< p true ,p%d == 0 false , 变量d是递增还是递增被跳过?
// Program to generate a table of prime numbers
#include <stdio.h>
int main (void)
{
int p, d;
_Bool isPrime;
for ( p = 2; p <= 50; ++p ) {
isPrime = 1;
for ( d = 2; d < p; ++d )
if ( p % d == 0 )
isPrime = 0;
if ( isPrime != 0 )
printf ("%i ", p);
}
printf ("\n");
return 0;
}
答案 0 :(得分:3)
在调试器下逐步执行:)
您可以从代码中看到“d”仅在“for”循环中递增。
您将在调试器下看到时刻d&gt; = p,然后“++ d”未被执行。
PS: 我重新格式化了代码,使缩进反映了实际的逻辑:
int main (void)
{
int p, d;
_Bool isPrime;
for ( p = 2; p <= 50; ++p ) {
isPrime = 1;
for ( d = 2; d < p; ++d )
if ( p % d == 0 )
isPrime = 0;
if ( isPrime != 0 )
printf ("%i ", p);
}
printf ("\n");
return 0;
}
答案 1 :(得分:1)
当d < p为真,则d递增。这是唯一重要的条件,而不是模数是否有值。
也不重要,但为什么不在循环中声明d和p
int p = 2; p <= 50; ++p
int d = 2; d < p; ++d
并不重要,但如果你不打算在循环之后使用它们,那么限制变量的范围是很好的