从for语句的这种用法++写在前面和后面没有区别, 作为循环最后执行的语句,先加和后加都是加,不影响最终a的取值, 在下次循环条件判断执行前, a的值都保证已经加1了.
b=a++; 相当于b=a; a++;
b=++a; 相当于a++; b=a;
循环执行顺序是:
a=0;
判断a<5成立, 开始循环 (如果不成立, 直接退出循环)
执行循环体一次
a++; //或者++a;
a<5成立, 执行循环体一次
a++;
...
a<5不成立, 结束循环
(1)输出什么?
两段程序除了a++和++a不同,其他都一样。这样的两段程序,运行时结果是一样的,都是输出“01234”。
因为++a与a++都是独立运行的语句,相当于执行一次++a;或a++;,我们知道,先自增与后自增独立执行时是没有区别的。
(2)什么时候+1?
每运行完一次循环体后,就去执行一次a++(或++a),就加上了1,之后再去判断a的值是否符合a<5,如果符合,再进入循环体,如果不符合,就结束循环。
有什么问题请留言。
这两个for循环执行完毕后得到的结果完全相同。虽然说a++是先取值再自增,++a是先自增再取值,但这是相对于赋值语句而言的,例如x1=a++,x2=++a,这两句就是完全不同的结果。在for循环中,表达式3的a++和++a完全等效,因为表达式3的语句可以单独提出来,放到循环体的最后一句单独执行,也就是说下面四个形式完全等效:
for (a = 0; a < 5; a++)
{
x1 = a;
printf("%d", x1);
}
*************************
for (a = 0; a < 5; )
{
x1 = a;
printf("%d", x1);
a++;
}
*************************
for (a = 0; a < 5; ++a)
{
x1 = a;
printf("%d", x1);
}
*************************
for (a = 0; a < 5; )
{
x1 = a;
printf("%d", x1);
++a;
}
另外由于a是定义在for循环以外的,所以题中两个a并不独立,它们用的是同一个变量,取自同一个地址,但由于两个for循环都有表达式1:a=0,都对a做了初始化操作,所以两个循环不会相互影响。
简单的for循环程序如下:
for(int i=0;i<20;i++)
{
循环体
}
执行步骤是:
1、i=0 初始化初值;
2、 进行条件判断i是否<20,如果条件为真,则继续执行;
3、执行循环体的代码;
4、i++ 变量i自增一次;
5、回到第2步,一直循环,直到第2步条件为假时, 退出循环,结束。
这两个for输出应该是一样的
第一次执行a=0 a<5
第二次执行a++或++a
结果都是01234