旷远洋湖18克拉地址:c程序问题

来源:百度文库 编辑:神马品牌网 时间:2024/04/19 02:04:20
main()
{
int s,i,m;
s=0;
for (s=0,i=1;i<2;i++,s+=i);

printf("\n%d",s);
}
为什么结果是2,我一直认为是1

main()
{
int s,i,m;
s=0;
for (s=0,i=1;i<2;s+=i,i++);

printf("\n%d",s);
}
这样就正确了,
但是不明白一个顺序问题怎么会这么大区别

-_-!!!这个,楼上的正解,这个和i++或者++i完全没有关系,
首先,s=0,i=1,这个是初始化的值,先判断循环结束条件,然后执行空循环体,
然后,s+=i也就是s+=1,--》s=1,i++,使得i=2,再次判断循环结束条件,i=2与条件i<2不符,因此退出循环,就是s=1喽,和i++还是++i没有关系的,你可以试试。

for (s=0,i=1;i<2;i++,s+=i);
等效于for (s=0,i=1;i<2;s+=++i);
i先自加值为2 s就等于2

for (s=0,i=1;i<2;s+=i,i++);
等效于for (s=0,i=1;i<2;s+=i++);
s=1 i自加不影响s 所以s=1

对比等效后的++i和i++就知道了

for循环第二个分号后的语句是每次循环体执行后要执行的操作,如果这里有若干分语句,则按从左到右的顺序执行。