|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
下面这个程序输出结果为空
#include <stdio.h>
int main(void)
{
int x,i;
for(i=1;i<=100;i++)
{
if(++i%2==0)
if(++i%3==0)
if(++i%7==0)
printf("%d ",i);
}
printf("\n");
}
但是改为如下程序,却能输出68 70,这是为何,这两个程序实现的功能不是一个意思吗?
#include <stdio.h>
int main(void)
{
int x,i;
for(i=1;i<=100;i++)
{
x=i;
if(++x%2==0)
if(++x%3==0)
if(++x%7==0)
printf("%d ",x);
}
printf("\n");
}
你的观察是正确的,69除以3的余数确实是0。但在这里我们需要理解C语言中的`++`运算符的行为。
在你的第一个代码中,你在每次检查除法条件前都用了`++i`。这实际上会在每次条件检查前将`i`加1,这就意味着`i`在每次循环中其实增加了4次:一次是在for循环语句中,其他三次是在条件检查中。所以,每个可能的`i`值实际上都跳过了3个数字。当`i`等于66时(这是循环中的第17次迭代),你的代码会检查`67%2`、`68%3`和`69%7`,所以并没有检查69除以3的情况。
然而在第二段代码中,你创建了一个新的变量`x`,并在每次循环开始时将`i`的值赋给`x`,然后增加`x`的值而不是`i`的值。因此,在这种情况下,你的代码在每个迭代中都会检查相邻的三个数是否可以被2、3和7整除,即对于`i=66`,会检查`67%2`、`68%3`和`69%7`。这就是为什么第二段代码可以打印出68和70,而第一段代码的输出为空。
|
|