C语言里的for语句怎么用?

我正在学习谭浩强的C语言基础教程,现在学到FOR语句时就卡住了,无论如何也不能理解透彻,现有多个问题请教,请高手们用最通俗易懂的表达方式来教教我吧!1.单个循环我看得懂,... 我正在学习谭浩强的C语言基础教程,现在学到FOR语句时就卡住了,无论如何也不能理解透彻,现有多个问题请教,请高手们用最通俗易懂的表达方式来教教我吧!

1. 单个循环我看得懂,可嵌套循环我就理解不了了。看下面例题:
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);
}
输出结果:
i j k
0 0 0
0 0 1
0 1 0
0 1 1
1 0 0
1 0 1
1 1 0
1 1 1

不知道为什么是这个结果,我们初学者很难理解啊!请说明一下它是怎么循环的?最好一步一步分解出来!

2. 当FOR语句的3个表达式都省略时,即for(;;),它相当于while(1),之前学while语句时,后面括号里都是条件表达式,如i<100,现在这个while(1)是什么意思?怎么理解它?请举个简单的例子说明一下。

3. 绕过了FOR语句,学习下一章数组,书理讲的很抽象,看了N多遍都理解不透彻,特别是二维数组和多维数组在这里重新请教一下前辈们,请用最简单的语言撬撬我这死脑筋吧!
顺便看一下这个例子(好像是来排序的),并附上它的运行过程吧:
main()
{
int i,j,p,q,s,a[10];
printf("\n input 10 numbers:\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(i=0;i<10;i++){
p=i;q=a[i];
for(j=i+1;j<10;j++)
if(q<a[j]) { p=j;q=a[j]; }
if(i!=p)
{s=a[i];
a[i]=a[p];
a[p]=s; }
printf("%d",a[i]);
}
}

晚上的答案就不要复制过来了,我搜了很多看得一头雾水,还不如书本呢!

让我满意的,分数x2!
展开
 我来答
乐马耕耘I
2009-03-14 · TA获得超过107个赞
知道小有建树答主
回答量:92
采纳率:0%
帮助的人:116万
展开全部
对于问题1
我们只讨论循环:
开始
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的嵌套同样可以分解为一个一个的循环
只要很清晰的知道 数组下标 与判断时候条件值的状态 就好分析了
对于初学者来数 数组画图分析 以表格的形式在纸上分析,而循环语句同样的将判断的条件分解来 在纸上模拟,一步一步的跟进状态 从简单的开始慢慢深入 ,不怕麻烦 仔细研究很如意理解的.
干净还畅快灬小草2878
2009-03-13 · TA获得超过303个赞
知道答主
回答量:181
采纳率:0%
帮助的人:133万
展开全部
很简单 一两句说不清
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
情感世界BB
2009-03-13 · TA获得超过2323个赞
知道小有建树答主
回答量:1336
采纳率:100%
帮助的人:549万
展开全部
在线来啊!!!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
332b
2009-03-13 · 超过23用户采纳过TA的回答
知道答主
回答量:210
采纳率:0%
帮助的人:90.4万
展开全部
还是自己多看看把..
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zangbaise
2009-03-13 · TA获得超过515个赞
知道小有建树答主
回答量:714
采纳率:0%
帮助的人:462万
展开全部
够用心,相信你可以的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友a5199e7
2009-03-13 · 超过16用户采纳过TA的回答
知道答主
回答量:103
采纳率:0%
帮助的人:53.8万
展开全部
对于你的程序
main()
{
int i, j, k; 1
printf("i j k\n"); 2
for (i=0; i<2; i++) -------------------------- 3
for(j=0; j<2; j++) -------------------------- 4
for(k=0; k<2; k++) -------------------------- 5
printf(“%d %d %d\n", i, j, k); -------------- 6
}
输出结果:
i j k
0 0 0
0 0 1
0 1 0
0 1 1
1 0 0
1 0 1
1 1 0
1 1 1

程序先执行printf语句 输出ij k
然后执行for循环 先执行3语句由于 i=0, i<2 所以执行下一语句
执行4的for循环 j=0 j<2 所以执行下一语句
执行5语句for循环 k=0 k<2 所以执行下一语句
执行6的printf语句 输出 0 0 0 由于k的循环没执行完 返回5 语句
执行5for中的 k++ k=1 k<2 执行下一语句 6 输出 0 0 1 然后再回5 由于k=2 停止 执行4语句
j++ j=1 j<2 开始执行下一语句 5语句 k赋值0 在开始5、6语句的循环 依次结果是 0 1 0/ 0 1 1
当j=2 时 不在是j<2 开始执行3语句 对j赋值0开始再次循环

参考资料: 自己

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(7)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式