鱼C论坛

 找回密码
 立即注册
查看: 647|回复: 7

[已解决]求助for循环i++和++i结果相同,没想明白

[复制链接]
发表于 2020-4-6 11:43:14 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
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;
}
最佳答案
2020-4-6 12:11:37
其实你可以这样想,最后一句自增语句写在循环体里面,那无论是 ++i  还是  i++  都不影响循环体判断,因为要先进行判断再进行自增运算

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

这跟while(++i)和while(i++)是不一样的,这里的判断就是要看++的位置来判断优先顺序了,同理do while也一样
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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;
上面两行对比时,它位不一样,此时输出的是什么,值得一试。
我想,你说应当少循环一次,应当是一个运算符优先级的疑问吧。
不知道是不是这个思路
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-6 11:50:36 | 显示全部楼层
本帖最后由 墨羽岚 于 2020-4-6 11:52 编辑

你 i 是每次循环后加1,++i 和 i++没区别
i++就是上一次循环结束时i 不变,判断时+1;
++i 就是上一次循环结束时+1,判断时不变
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-6 11:51:49 | 显示全部楼层

我想for(i=1;i<=24;++i)为什么不等于for(i=2;i<=24;i++)呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

比如第一次循环完,i++是不是比++i小1,而且应该是循环语句之前就把本轮循环的i值改变了吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

你可以写两个循环,一个是i++,另一个是++i
然后打印i的值
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-6 12:10:00 | 显示全部楼层
qiuyouzhi 发表于 2020-4-6 12:00
你可以写两个循环,一个是i++,另一个是++i
然后打印i的值

谢谢,我试了一下,请问如果i=1,++i为什么循环第一轮打印出还是1,++i不应该第一次就要加1吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-6 12:11:37 | 显示全部楼层    本楼为最佳答案   
其实你可以这样想,最后一句自增语句写在循环体里面,那无论是 ++i  还是  i++  都不影响循环体判断,因为要先进行判断再进行自增运算

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

这跟while(++i)和while(i++)是不一样的,这里的判断就是要看++的位置来判断优先顺序了,同理do while也一样
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-13 00:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表