c语言中,下面程序的运行结果是?

下面程序的运行结果是?

main()
{ int y, a ;
y=2, a=1;
while (y- - ! = - 1)
{do{a* = y ; a++ ; } while (y - -);}
printf("%d,%d",a,y): }
提问:
1、这个程序的结果是多少?
2、这个结果是怎么出来的?求详细步骤,两个循环看得我头晕啊

你好
1.程序的运行结果是:1,-2
2.解释每一步的运行过程:
#include <stdio.h>
void main()
{
int y, a ;
y=2, a=1;
while (y--!=-1)
{
do{
a*=y ;
a++ ;
} while(y--);
}
printf("%d,%d\n",a,y);
}

从y=2,a=1开始哈
(首先我们要知道后自减y--型的返回值是y自减前的值 例如y=2 y--就返回2)

进入while循环
y--返回2 不等于-1 (此时y=1)
于是循环继续进入do while循环
执行a*=y;a++后
a=2 y=1

y--返回1 是非零 于是do while循环继续进行 (此时y=0)

执行a*=y;a++后
a=1 y=0

y--返回0 于是do while循环终止 (此时y=-1)

再判断while的循环条件: y--返回-1 于是while循环终止 此时y=-2

(讲的比较多 希望楼主能理解了)追问

不好意思,看了你的讲解,还是有几个地方不懂:
1、y--的返回值是个什么概念?返回值时进行判断,而不是进行运算的麽?是不是while()括号里的用返回值判断,而实际运算用y--后的值?
2、a在第一次运算时是2这我能理解,但是第二次循环,a不是在第一次的时候++过了么?那么应该是2++=3咯?

追答

你好 为了帮助你
我们在qq上细聊
我会帮你详细讲解的

qq2458483878

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-08-23
2和0。自加和自减在后面都是完成当前语句才会执行。
do while 和while 一个是先做再判定,一个是先判定再做。

求给最佳啊。。。追问

答案都错了,还怎么给最佳?

追答

那你自己算吧,我是口算的。思想就是我那个

追问

。。。

第2个回答  2012-08-23
2,0…若是不懂自增自减运算,请继续追问,我会发一个文件给你,关于自增自减的追问

答案是错的,不是2,0

相似回答