八块腹肌的胖子 发表于 2020-4-6 11:43:14

求助for循环i++和++i结果相同,没想明白

SIE16兔子生育我自己写的代码
求助   为什么i++,++i结果相同?++i不应该少循环一次吗?
#include<stdio.h>
int main()
{
        int one=1,adult=0,temp=0,sum=0,i;
        for(i=2;i<=24;++i)
        {   temp=adult;
                adult=adult+one;
                one=temp;
               
               
        }
        sum=adult+one;
        printf("%d",sum);
        return 0;
}

howzyao 发表于 2020-4-6 11:48:40

//for(i=2;i<=24;++i)
上行的++i;相当于单行;
所以,对于i++;来说无区;
当:
int i,j,k = 0 ;
int j = ++i ;
int k = i++ ;
cout<< j<< " "<<k<<endl;
上面两行对比时,它位不一样,此时输出的是什么,值得一试。
我想,你说应当少循环一次,应当是一个运算符优先级的疑问吧。
不知道是不是这个思路

墨羽岚 发表于 2020-4-6 11:50:36

本帖最后由 墨羽岚 于 2020-4-6 11:52 编辑

你 i 是每次循环后加1,++i 和 i++没区别
i++就是上一次循环结束时i 不变,判断时+1;
++i 就是上一次循环结束时+1,判断时不变

八块腹肌的胖子 发表于 2020-4-6 11:51:49

howzyao 发表于 2020-4-6 11:48
//for(i=2;i

我想for(i=1;i<=24;++i)为什么不等于for(i=2;i<=24;i++)呢

八块腹肌的胖子 发表于 2020-4-6 11:55:24

墨羽岚 发表于 2020-4-6 11:50
你 i 是每次循环后加1,++i 和 i++没区别
i++就是上一次循环结束时i 不变,判断时+1;
++i 就是上一次循 ...

比如第一次循环完,i++是不是比++i小1,而且应该是循环语句之前就把本轮循环的i值改变了吧

qiuyouzhi 发表于 2020-4-6 12:00:53

八块腹肌的胖子 发表于 2020-4-6 11:55
比如第一次循环完,i++是不是比++i小1,而且应该是循环语句之前就把本轮循环的i值改变了吧

你可以写两个循环,一个是i++,另一个是++i
然后打印i的值

八块腹肌的胖子 发表于 2020-4-6 12:10:00

qiuyouzhi 发表于 2020-4-6 12:00
你可以写两个循环,一个是i++,另一个是++i
然后打印i的值

谢谢,我试了一下,请问如果i=1,++i为什么循环第一轮打印出还是1,++i不应该第一次就要加1吗{:5_100:}

xiezhaodong 发表于 2020-4-6 12:11:37

其实你可以这样想,最后一句自增语句写在循环体里面,那无论是 ++i还是i++都不影响循环体判断,因为要先进行判断再进行自增运算

这个时候你在把最后一句自增语句放在 for()里面,你就可以知道,第三句的执行并不影响第二句的判断,无论++在前在后,i 都在循环体里面,判断的时候已经执行完了自增语句

这跟while(++i)和while(i++)是不一样的,这里的判断就是要看++的位置来判断优先顺序了,同理do while也一样
页: [1]
查看完整版本: 求助for循环i++和++i结果相同,没想明白