for(表达式1;表达式2;表达式3)语句
执行过程
1 求解表达式1
2 求解表达式2,其值为真,则执行for语句中指定的内嵌语句,然后执行第3步,若为假,刚结束循环,转到第5步。
3 求解表达式3
4 转回2步执行
5 循环结束 执行for语句下面的语句。
从外层往里层开始for(i=0;i<2;i++)
就是
1 给i赋初值0
2 i<2为真 进入for(j=0;j<2;j++)
(1 给j赋初值0;2 j<2为真,
进入for(k=0;k<2;k++)
(1 给k赋初值0; 2 K<2为真,执行printf 0 0 0
然后在for(k=0;k<2;k++)这个循环中求解表达式3 即k++,k=1,转回求解表达式2 k<2为真,执行printf 0 0 1
结果运算正确。
for(i=0;i<2;i++)
for(j=0;j<2;j++)
for(k=0;k<2;k++)
printf("%d,%d,%d\n",i,j,k);
1.i=0;
..j=0;
..k=0,k=1;执行两次printf("%d,%d,%d\n",i,j,k);
..0,0,0
..0,0.1
2.i=0;
..j=1;
..k=0,k=1.执行两次printf("%d,%d,%d\n",i,j,k);
..0,1,0
..0,1,1
3.i=1;
..j=0;
..k=0;k=1;执行两次printf("%d,%d,%d\n",i,j,k);
..1,0,0
..1,0,1
4.i=1;
..j=1;
..k=0;k=1;执行两次printf("%d,%d,%d\n",i,j,k);
..1,1,0
..1,1,1
这里主要是让你了解循环嵌套的知识。总是最内层的条件先执行完,再退到上一层。没有用花括号,就是每个循环语句就是上一个的嵌套。
典型的for嵌套使用 三层嵌套
最内层k 取值0 1 (小于2)然后外层j变为1 这之前为0 i也为0 (前两行)
然后 内层 k再次 循环取值0 1 此时 j是1 也就是第三四行 然后i为1
类似第一行 的变化 五六行也出来了
最后两行类似三四行
明白?
good luck
太无聊的题目了!
i加1的时候,j循环了10次,j加1的时候,k又循环10次,就是这么回事了,要是不理解,你可以看两重循环的,道理和3重循环的一样
首先在屏幕上打印i,j,k(printf("i,j,k\n");)遇到第一个for循环(for(i=0;i<2;i++)),此时i=0,然后遇到第二个for循环(for(j=0;j<2;j++)),此时j=0,最后遇到第三个for循环(for(k=0;k<2;k++)),此时k=0,然后第一次打印,i,j,k被所赋予的值,也就是0,0,0。然后执行第三个for循环,此时i,j不变,k+1;再打印i,j,k的值0,0,1,再次执行第三个for循环,发现无法通过(因为此时k=2,而k必须是小于2的),于是执行第二个for循环(注意,在i=0的情况下 ,这已经是第二次执行了),此时i不变,j+1,在次情况下重新执行第三个for循环一次0,1,0。执行第三个for循环第二次0,1,1 。再次执行时k=2,无法通过,执行第二个for循环,此时j=2,也无法通过。于是就执行第一个for循环,i=1,在次情况下重新重新执行第二和第三个for循环,方法同上。执行第二个for循环一次的情况下,执行第三个for 循环2次,直至所有的for循环执行到第三次的时候,由于全部都等于2了,所以循环结束。
给你加了一下大括号
#include
main()
{
int i,j,k;
printf("i,j,k\n");
for(i=0;i<2;i++)
{
for(j=0;j<2;j++)
{
for(k=0;k<2;k++)
{
printf("%d,%d,%d\n",i,j,k);
}
}
}
}