已掉线,重新登录

首页 > 绿虎论坛 > 历史版块 > 编程 > C/C++ > 讨论/求助

标题: 额……又有一个C问题了~这个不好理解~

作者: @Ta

时间: 2013-06-04

点击: 22348

#include "stdio.h"
main()
{
    int i;/*定义一个整形变量i,在内存中为其分配两个内存空间*/
    for (i =1;i < 40;i ++)/*for循环*/
    {
        if( i++ % 5 == 0)/*如果i除5的余数等0,进行下一步*/
            if( ++i % 8 == 0)/*i+1的和除8的余数为0,进行下一步*/
            printf("%d",i);/*输出i,到此处程序其实已经结束了*/
     }
      printf("\n");/*输出回车换行符,对最后结果是没有影响的*/
}
谁能分析一下运行过程吗??我暂时理解有点困难
续:运行的结果是32。有同学说应该加上\n,那我就把原例中的\n给加上了

[隐藏样式|查看源码]


『回复列表(30|隐藏机器人聊天)』

1. 5和8的公约数?
(/@Ta/2013-06-04 19:05//)

2. 加个\n好看点
(/@Ta/2013-06-04 19:07//)

3. 40
(/@Ta/2013-06-04 19:38//)

4. 首先声明,我也是一个初学者,所以如果下面有什么不对的,还请各位指出。
#include "stdio.h"
事实上,我学到的c让我这样写:
#include <stdio.h>
然后下面的main()什么的就跳过了,我觉得有意思的是i++ % 5 == 0;和++i % 8 == 0;
i++和++i都是递增,在执行i++后的i与执行++i后的i数值一样。
但有一点不同的是:如果你输出i++和++i,它们的结果并不相同!在输出i++时,先输出i的值,然后再执行递增,而++i却是先执行递增,再输出i的值!这样,i++与++i的值并不相同!
看一下楼主的代码,for循环会被执行39次,而i的值要符合以下的if语句:
1,i % 5 == 0;//也就是i要被5整除。
2,(i + 1) % 8 == 0;//i + 1要被8整除。
然而,在上面的for循环中,i的值不能同时满足这两个条件,所以最后将什么都不会被输出!
(/@Ta/2013-06-04 20:39//)

5. @终极神天 看4楼
(/@Ta/2013-06-04 20:46//)

6. @lexno 额……抱歉,一、我用#include "stdio.h"是因为在某些情况下不能用#include <stdio.h>,为了适应性。唔……还有用C4最后运行的答案是32。而书上的答案也是32,我想不通那个if 嵌套。
(/@Ta/2013-06-04 20:57//)

7. @神仙枫晨 32
(/@Ta/2013-06-04 21:02//)

8. 可能没我想的那么简单,
(/@Ta/2013-06-04 21:14//)

9. @lexno 嗯,你不信的话复制下来用C4试试
(/@Ta/2013-06-04 22:46//)

10. 看11楼
(/@Ta/2013-06-05 06:00//)

11. 我现在这样想,你看看对不对:
i++好像是先输出i的值,再执行递增。
这样,当i在for循环中的值为30时,i++的值为30,满足30%5==0;,而在执行后,i会递增,所以在下面输出i的值为31,然后是++i,++i会先递增,再输出i的值,所以++i的值为32,在++i % 8 == 0;之后,i的值为32。
(/@Ta/2013-06-05 06:44//)

12. 好像还是不对,kao,看似很简单的代码,一脚踩进去,mb全是坑
(/@Ta/2013-06-05 07:06//)

13. ……这代码,故意的吧……
(/@Ta/2013-06-05 07:31//)

14. 解决了么,这个程序求的未知x的公式:x-2%5=0&&x%8=0。因为i++与++i相差2啊
(/@Ta/2013-06-05 07:36//)

15. 而且一个循环加3  估计会忽略某数
(/@Ta/2013-06-05 07:39//)

16. 同12楼
(/@Ta/2013-06-05 07:40//)

17. 其实,为什么要那样求呢?效率低啊。直接if(i++%5==0||++i%8==0)/*计算流程,自己看看运算符的优先级,还是比较好理解的
(/@Ta/2013-06-05 08:15//)

18. @lexno 你十一楼写的就是我后来想的啊~~没啥问题啊~从1开始循环,判断能被5整除,而且加2后又能被8整除的数,然后输出那个加2后的数,范围是1到39之内
(/@Ta/2013-06-05 08:36//)

19. @匿名  这代码是我们一个题~~那套题里特么的尽是坑!不考虑什么执行效率之类的
(/@Ta/2013-06-05 08:38//)

下一页 1/2页,共30楼

回复需要登录

8月29日 23:03 星期五

本站由hu60wap6驱动

备案号: 京ICP备18041936号-1