关于C语言 求解一道选择题 需要详细解答

有以下程序

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

我想知道详细解答

int main()

{
int x,i;//声明

for(i=1;i<=100;i++)//x从1到100遍历

{ x=i;

if(++x%2==0)//先计算(++x);****相当于 int y=x+1; if (y%2==0)****;如果y(i+1)也能被2整处则继续,

if(++x%3==0)//先计算(++x);****相当于 int y=x+1; if (y%3==0)****;如果y(i+2)也能被3整处则继续,

if(++x%7==0)//先计算(++x);****相当于 int y=x+1; if (y%7==0)****;如果y(i+3)也能被3整处则继续,

printf("%d",x);//输出x,即输出i+3

/*输出的结果x,满足以下条件:
1、x能被7整处
2、x-1能被3整处
3、x-2能被2整处*/
}

printf("\n");
return 0;

}
//程序输出结果是:28 70
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-04-08
i=25时,x=25。
此时if(++x%2==0)等价于先++x,此时x为26,模除2为0,进入if
if(++x%3==0)等价于先++x,此时x为27,模除3为0,进入if
if(++x%7==0)等价于先++x,此时x为28,模除7为0,进入if,执行printf,输出28

输出70情况同理
第2个回答  2011-04-08
if(++x%2==0)

if(++x%3==0)

if(++x%7==0)
这三句话是重点。

第一局说明x+1能被 2 整除。
第二个在第一个的基础上,说明x+2能被3整除。
第三个判断说明x+3能被7整除。
100以内,就是28,70
第3个回答  2011-04-08
这个程序是输出一类数:这个数A必须满足下列条件即
A能被7整除上一个数能被3整除再上一个数能被2整除。并且A是1至100的整数。
第4个回答  2011-04-08
三个IF等价于: if((++x%2==0)&&(++x%3==0)&&(++x%7==0))
要注意++X是先自加,再运算,在上面的逻辑表达式内,X自己加了三次
例如,i=1时,x先等于1,(((然后等于2)与2求余数)与0比较),(((然后等于3)与3求余数)与0比较),(((然后等于4)与7求余数)与0比较),当三个条件满足时输出最后的X值。

反推结果:
X最后等于28,i=25,x先等于25,然后等于26与2求余数,再等于27与3求余数,最后等于28与7求余数,结果为0,条件成立输出28;
X最后等于70,i=67,x先等于67,然后等于68与2求余数,再等于69与3求余数,最后等于70与7求余数,结果为0,条件成立输出70;
第5个回答  2011-04-08
用监控系统执行.C文件,你可以看的很清楚哦!!
相似回答