第1个回答 2011-04-15
for (i=0; i<2; i++)
i=0 往下执行 for(j=0; j<2; j++)
j=0往下执行 for(k=0; k<2; k++)
k=0 往下执行 printf(“%d %d %d\n", i, j, k);
输出 i j k 显然输出的是 0 0 0
输出后执行 k++, k值变为1 与2比较 显然 k<2 继续执行 输出
此时 i=0 j=0 k=1 输出为 0 0 1
输出后执行 k++, k值变为2 与2比较 显然 2<2 为假,跳出k循环回到上一级循环执行 j++
j=1与2比较 显然1<2 往下执行(此时i=0 , j=1)再次执行k循环int k=0
将k值重新赋值为0 执行输出 此时 i=0 j=1 k=0 输出 0 1 0
执行输出后k++,k值为1与2比较 显然1<2 继续 k的循环 此时k=2,j=1 i=0
执行输出为 0 1 1
输出后k++ ,k值为2与2比较 2<2为假跳出k循环 返回j循环 返回时k=2,j=1 i=0 执行j++ ,j的值为 2显然 2<2为假 ,跳出j循环 返回i循环 此时k=2,j=2 i=0, 执行i++,i值为1 与2比较 显然1<2 往下执行
i=1,执行 j 循环 int j=0 j值变为0
j=0 向下执行 k循环 int jk=0 k值变为0
k=0 向下执行输出 此时 i=1 j=0 k=0 输出 1 0 0
(此时回到了i=0的开始情况 )
参照前面的分析继续执行 依次会 输出 1 0 1
1 1 0
1 1 1
当输出到 1 1 1 的 时候继续想下执行k++,k值变为2 与2比较 结果为假回到j循环此时 i=1,j=1 ,k=2 ;执行j 循环中的j++,j值为2与2比较 结果为假回到i循环此时 i=1,j=2 ,k=2 ;执行i 循环中的i++,i值为2与2比较 结果为假退出循环 此时i=2,j=2 ,k=2;退出循环后下下执行结束程序
对于问题2 while(1)就是条件为永真 你用while(3) while(2) 都可以 就是while()函数的语句不停的执行 ,此时只能用跳转或者break 语句来跳出循环
但是while(0)表示永假 即while()里面的不执行 当然do while()除外 它是先执行后判断,但是也仅仅执行席次就不在执行了for(;;)里面空的意思就是条件为永真,没有退出的判别条件也就是相当于while(1)(习惯用 1 0 表示真假) 当然也可以用break或者跳转退出循环,但是那和for(;;)的判断无关。 所以for(;;)简单的讲就是条件为永真 循环不断的执行 除非遇到函数内部的跳转 或者函数里面嵌套的判断退出为止
eg : 1>
int i=0;
int j=0;
for(;;) {i++;
j++ ;} //不停的死循环
2>int i=0;
int j=0;
for(;;) {i++;
j++ ;
if(i>10)break;
}
不停的循环直到i>10由内部判断退出循环
对于问题3 你只要将 1维理解 和for语句的一维理解透彻 再在此基础上扩展就行了
多维数组可以分解为多个一维数组的 多个for的嵌套同样可以分解为一个一个的循环
只要很清晰的知道 数组下标 与判断时候条件值的状态 就好分析了
对于初学者来数 数组画图分析 以表格的形式在纸上分析,而循环语句同样的将判断的条件分解来 在纸上模拟,一步一步的跟进状态 从简单的开始慢慢深入 ,不怕麻烦 仔细研究很如意理解的.
另外,站长团上有产品团购,便宜有保证