问题如下,请详细解答,谢谢!

问题如下,请详细解答,谢谢!for(i=0,j=10;i<j,i-j;i++,j--)for(i=1;i=10;i++)s+=i请问第一个语句中i-j的作用是什么,第二个... 问题如下,请详细解答,谢谢!for (i=0,j=10;i<j,i-j;i++,j--)

for (i=1;i=10;i++) s+=i

请问第一个语句中i-j的作用是什么,第二个语句为什么是死循环?(我觉得它应该是无法执行,而不是死循环)
展开
 我来答
Frank_Zhou991
2016-11-30 · TA获得超过421个赞
知道小有建树答主
回答量:385
采纳率:88%
帮助的人:203万
展开全部
题主你好,由于我也是C初学者,只能勉强说说我的看法,如果有不对的,请指正。
====================
首先,我想说一下for循环的基本形式:
for (单次表达式; 条件表达式; 末尾循环体)
{
中间表达式
}
* 条件表达式,在for循环的每次迭代开始前执行一次,并且把执行的结果:条件表达式的值,作为是否继续循环的判断条件。如果条件表达式的值不为0,或者把条件表达式留空【形如:for (单次表达式; ; 末尾循环体)】,那么这次判断的结果就是真,会执行中间循环体。如果对于条件表达式的判断结果是假,就立刻终止这个for循环,不会继续执行中间循环体。
=================
第一个问题:我认为涉及到C语言的“逗号表达式”运算规则。这里(i < j, i - j)是一个逗号表达式,整个表达式的值其实就是逗号运算符后面的值(i - j),至于i<j这句,程序永远不会执行,编译器应该会有警告信息。所以第一个for语句相当于:for (i = 0, j = 10; i - j; i++, j--)。
所以这个循环的意思是:只要(i-j)不等于0,for循环就会一直执行下去。现在我们看看这个循环什么时候结束,不考虑中间循环体对i和j的操作:
第一次迭代:(i - j) = 0-10,i = 1, j = 9
第二次: 1-9 , 2, 8
第三次: 2-8, 3, 7
第四次: 3-7, 4, 6
第五次: 4-6, 5, 5
第六次: 5-5,所以在第6次迭代开始的时候,条件表达式的值为0,循环立即结束。也就是说,如果中间循环体只有一句printf("A");程序会输出AAAAA。题主可以试试这个for循环,看看输出是不是五个A:
for (i = 0, j = 10; (i < j, i - j); i++, j--)
printf ("A");
第二个问题:这个for循环的条件表达式是(i = 10),不是(i==10),前者是一个赋值语句,后者是一个条件语句。赋值语句的值就是被赋值变量的值,也就是i的值10; 而条件语句的值只有0和非0,正确是非0,不正确是0。所以说这个for循环真正的形式是:
for (i = 1; 10; i++) s+=i;
因为条件表达式的值永远都是10,不会变成0,所以循环会一直执行下去,也就是死循环了。
========
好了,如果有看不懂的,欢迎追问。
更多追问追答
追答
纠正一下,逗号表达式的前半部分语句也会执行,只是在这题中没有执行后的效果。
追问
请问逗号表达式的前半部分为什么也会执行呢
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式