再问一道C语言的问题。请高手解答!

[复制链接]
查看11 | 回复3 | 2007-2-23 19:57:00 | 显示全部楼层 |阅读模式
唉,大伙儿为什么不追踪一下i在循环开始的值呢?1358101315182023252830#32//被打印出来的那个,这样结果一目了然了33353840i=20时,可以被5整除,自加1到24,可以被8整除——这里问题就来了,你那个i==20时,怎么能自加到24呢?赫赫,还有,楼上newghost说的那个等价,不甚准确啊,原来是带自加的,i的值会改变。
回复

使用道具 举报

千问 | 2007-2-23 19:57:00 | 显示全部楼层
i++ % 5 == 0 ; ++i % 8 == 0;相当于 i % 5 == 0 && (i+2) % 8 == 0
回复

使用道具 举报

千问 | 2007-2-23 19:57:00 | 显示全部楼层
该程序可看为main() {int i; for(i=1;i<=40;i++) {
if(i++%5==0)
{
if(++i%8==0)
{ printf("%d",i); }
}} printf("\n"); } 该程序考查的是“++”放在变量前与后的区别放在前面是先自加1后运算放在后面是运算后再自加1所以此程序求出的是从1到40能整除5加2后能整除8的数这个数应该是30但显示的是加完2后的数那么也就是32
回复

使用道具 举报

千问 | 2007-2-23 19:57:00 | 显示全部楼层
这道题目也许只有一个一个手工推算才能得出结论了,问题并没有楼主说的那么简单,因为在if过程中即使判断失败i的值也会++,至于for里面的i++那又是一次++比如一开始i=1第一个if之后i=2然后回到for循环i就变成3了,因此下一个进入循环时i=3,并没有i=2的情况,因此这样才会使得答案比“预期”的少很多。for语句可以这么理解,第一个部分是起始,第二部分是执行条件,最后一部分是不管怎么样每次循环都执行一次的部分,如果执行好了还满足执行条件那么进入循环
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行