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

#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|隐藏机器人聊天)
  • @Ta / 2013-06-04 / /
    5和8的公约数?
  • @Ta / 2013-06-04 / /
    加个\n好看点
  • @Ta / 2013-06-04 / /
    40
  • @Ta / 2013-06-04 / /
    首先声明,我也是一个初学者,所以如果下面有什么不对的,还请各位指出。
    #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 / /
    @终极神天 看4楼
  • @Ta / 2013-06-04 / /
    @lexno 额……抱歉,一、我用#include "stdio.h"是因为在某些情况下不能用#include <stdio.h>,为了适应性。唔……还有用C4最后运行的答案是32。而书上的答案也是32,我想不通那个if 嵌套。
  • @Ta / 2013-06-04 / /
  • @Ta / 2013-06-04 / /
    可能没我想的那么简单,
  • @Ta / 2013-06-04 / /
    @lexno 嗯,你不信的话复制下来用C4试试
  • @Ta / 2013-06-05 / /
    看11楼
  • @Ta / 2013-06-05 / /
    我现在这样想,你看看对不对:
    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 / /
    好像还是不对,kao,看似很简单的代码,一脚踩进去,mb全是坑
  • @Ta / 2013-06-05 / /
    ……这代码,故意的吧……
  • @Ta / 2013-06-05 / /
    解决了么,这个程序求的未知x的公式:x-2%5=0&&x%8=0。因为i++与++i相差2啊
  • @Ta / 2013-06-05 / /
    而且一个循环加3  估计会忽略某数
  • @Ta / 2013-06-05 / /
    同12楼
  • @Ta / 2013-06-05 / /
    其实,为什么要那样求呢?效率低啊。直接if(i++%5==0||++i%8==0)/*计算流程,自己看看运算符的优先级,还是比较好理解的
  • @Ta / 2013-06-05 / /
    @lexno 你十一楼写的就是我后来想的啊~~没啥问题啊~从1开始循环,判断能被5整除,而且加2后又能被8整除的数,然后输出那个加2后的数,范围是1到39之内
  • @Ta / 2013-06-05 / /
    @匿名  这代码是我们一个题~~那套题里特么的尽是坑!不考虑什么执行效率之类的
添加新回复
回复需要登录