C语言中while和do while循环问题,搞不懂,乱了我

#include<stdio.h>
main()
{ int y,a;
y=2,a=1;
while(y--!=-1)
{do{a*=y;a++;}while(y--);}
printf("%d,%d",a,y);}
这个谁能帮我详细解释一下啊,怎么一步一步的循环来的,希望你耐心点哇,我是新手还不太懂,谢谢啦^_<
第一个while里y与第二个do里的y不相等?第一个y自减之后值不是给do里面了吗?怎么不变还是2了

第1个回答  2012-08-08
第一次执行 while(y--!=-1) 时,由于 y=2,所以括号内的表达式相当于:(2!=-1) 为真,这时,y 的值为 1。接着执行 do{a*=y;a++;},a=a*y=1*2=2;a++ 后,a=3; 然后进入 while(y--); 语句进行判断,(1) 为真,循环l转到 do 继续执行,这时 y=0;执行 do-while 循环,a*=y=3*0=0;a++后,a=1;再次进入 while(y--); 语句,(0) 为假,跳出 do-while 循环,这时 y=-1;返回到上一个 while 循环,判断条件 (y--!=-1) ,相当于 (-1!=-1) ,条件为假,跳出循环,这时,y=-2; 以后就打印结果:
1,-2
第2个回答  2012-08-08
main()
{ int y,a;
y=2,a=1;
while(y--!=-1) //y先自减1,和 -1 比较是否相等,不相等进入循环体,否则执行下面的printf

{
do{ //不比较,直接执行循环体

a*=y;
a++;
}while(y--); //循环体执行完成后,看 y 是否大于 0, 大于继续执行 do 循环体内语句。否则推出从新执行外层 while 条件 即 y--!= -1

}
printf("%d,%d",a,y);}

如果第一个while再不成立,不执行do,因为do 是第一个while 的循环体内语句。而执行 printf本回答被提问者和网友采纳
第3个回答  2012-08-08
while与do while的区别是while先判断为真则执行大括号里面的,为假则退出循环。do while是先执行大括号里面的再判断,如果为真,继续执行循环再判断。如果为假,则退出循环
第4个回答  2012-08-08
先判断第一个是否满足,满足条件执行里边的程序,再判断第二个是不是满足?不要着急,慢慢来