C语言,if语句我看不明白

img


为什么这样会输入两位数,我算不出来这个答案,我算起来好奇怪,求解答,谢谢!

#include"stdio.h"
main()
{
int x,i;//定义x,i;
for(int i=1;i<=100;i++){//重复执行100次。
x=i;//i的值给x(让x代替i运算)
if(++x%2==0)//当x+1后x除以2的余数为0,即整除2.执行下面一条代码。
if(++x%3==0)//当x+1后x除以3的余数为0,即整除3.执行下面一条代码。
if(++x%7==0)//当x+1后x除以7的余数为0,即整除7.执行下面一条代码。
printf("%d ",x);//输出x
}
printf("\n");//换行。
}

//这题实际是求100以内2,3,7的公倍数。

//答案是D

我也觉得奇怪,等大佬解释

首先,x的值增加1
然后,若x被2除余数为0,那么(++x%2==0)为真,否则(++x%2==0)为假 所以倒推就好了
如果全部if成立,相当于x自增三次 所以数i其实是x-3对吧
第一次if判断此数x-3; 判断数自增成了x-2,所以x-2能被2整除 则答案一定是偶数
进入第二个if判断 此时判断数变成了为x-3自增一次,再自增一次其实就是x-1 如果能被3整除则成真 所以x-1能被3整除
进入四三个if判断 这个数x-1自增成x 能被7整除成立 所以 x应该可以被7整除
即判断(x-2)%2==0 && (x-1)%3==0 && x%7==0
所以答案是 28 判断分别是 26%2 ==0 27%3==0 28%7==0
同理 70 判断分别是 68%2==0 69%3==0 70%7==0

这是if语句双重循环,第一个数是当x等于25时进入第一个uf语句,x变为26,然后进入第二个if语句,变为27,然后进入第三个语句,变为28,就输出了28,后面的那个数也是类似的推理