for中多重嵌套if的执行顺序,高分求助!

#include <stdio.h>
main ()
{ 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");
}

结果是:28 70。
不要复制粘贴。

第1个回答  2010-07-04
三个if的效果和下列语句是等价的:
if((x+1)%2==0&&(x+2)%3==0&&(x+3)%7==0)
printf("%d",x+3);

源程序中三个if是按顺序执行的,满足第一个则执行第二个,满足一二个,则执行第三个,三个都满足,打印x。如果三个中有任意一个不满足,进入下一循环。
第2个回答  2010-07-04
多重if肯定是按if的先后顺序执行啦。题目中的意思是判断从1到100的数。若数x属于该范围(表达式x=i)且x+1能被2整除,x+1+1能被3整除,x+1+1+1能被7整除则输出x。注意此时的x实际上是表达式x=i中的i了,而是i+3.考虑答案可以知道一开始x为25,将25加1后为26,能被2整除;再将26加1后为27,能被3整除;再将27加1后为28能被7整除,这时输出28.70的输出过程类似。
第3个回答  2010-07-04
这个程序是从1 ——100找到 ++ 后先能被2整除,再 ++ 然后被 3 整除, 再 ++ 被 7 整除,最后打印出这个数。

当x = i = 25时,
经过了 ++ x 就变成了26能被2整除,
再经过 ++ x 就变成了27能被3整除,
再经过 ++ x 就变成了28能被7整除,
打印出来的就是28,
类似的 70 也是这样找出来的。
第4个回答  2010-07-04
这个的执行顺序很明了啊,你写成这样
for(;;)
{
x=i;
if((++x%2==0)
{
if((++x%3==0)
{
if((++x%7==0)
{
printf ("%d ",x);

}
}
}
}
不就好看些么
第5个回答  2010-07-04
首先进入循环
1、x=i;
2、x自增,此时x=i+1,如果x除2的余数不为0下面的if语句不再执行,循环进入下一次;如果x除2的余数为0,x再次自增,此时x=i+1+1,依次下去
相似回答