#include <iostream>
using namespace std;
int main()
{
int s ;
for (int k = 2;k<6;k+=2)
{
s=1;
for(int j = k;j<6;j++) s+=j;
}
cout<< s <<endl;
}
for(A;B;C){D}
for循环的主要部分分为四个部分,也就是上面列举的A,B,C,D,中间用分号隔开。
A充当一个初始化的作用,里面写的语句会在for循环的开始使用,如果使用的是定义的,比如您的例子中的int k,那么这个k就只在这个for循环中使用,在for循环外就无法调用到这个变量了。(c++中可以这样用,c就不行了)
B的主要作用是一个表达式,B的返回值为1的话就会接着执行这个for循环,否则会结束。
C的作用是执行一个语句,这个语句会在每次for循环的末尾执行一次。
D的作用也是语句,每次循环会执行一次。
其中执行顺序大概就是这样的:
先执行A,然后判断B,如果B的返回值为1,执行D,然后执行C。这算是循环了一次,然后再判断B,若返回值为1,执行D,然后执行C.....然后某次发现B的返回值为0,不再循环退出。
其中A,B,C语句都不能带分号,中间隔开的分号不能省。D可以像在for循环外面一样使用。
而且其中A,B,C,D都可以省略。
省略A表示不需要初始化。
省略B表示没有终止条件。
省略C表示循环末尾没有操作。
省略D表示循环过程中没有操作。
但是注意的是,即使省略了A,B,C中间的分号也不能省!
另外还有就是循环结构都可以使用的语句:
continue
break
都是仍然可以在for中使用的。
那么根据上面描述的执行顺序,这个for循环就可以解释了。
for(int k=2;k<6;k+=2){按照上面的来,先看最外面一层的for循环。
A: int k=2
B: k<6
C: k+=2
D: s=1;
for(...);
那么就是先执行int k=2,然后判断k是否小于6,发现k<6是true,则执行s=1和第二个for,然后再执行k+=2,使得k=k+2=4,发现k<6仍然是true,接着执行s=1和第二个for,然后再执行k+=2,使得k=k+2=6,此时k<6的返回值是false了,于是退出循环。
那么要看输出的s,就要回到刚才的循环中的D部分去。
这又是一个for循环。因为每次都将s=1了,所以可以只看第二次k=4的时候的循环。
A: int j=k;
B: j<6
C: j++
D: s+=j;
那么先让j=k=4,然后判断j<6为true,于是执行s+=j,s=1+4=5,然后执行j++,j=5,然后判断j<6,仍然等于true,于是接着执行s=s+j=5+5=10,再执行j++使得j=6,发现j<6返回值为false,于是退出循环,输出s的值为10.